|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
Chiarimenti programmazione dei tasks
Questa discussione vorrei che abbia come scopo raccogliere dei chiarimenti sulla programmazione dei tasks per chi, come me, ha dei dubbi sulla realizzazione degli stessi.
per quanto mi riguarda, non mi è chiara il modo in cui dovremmo realizzare i tasks, ovvero la strutturazione delle classi, ci sono task che hanno ovviamente bisogno degli altri per essere eseguiti, bisogna aspettare che i tasks che servono vengano realizzati e poi basarsi sulla interfaccia pubblica realizzata, interfaccia pubblica che ognuno può realizzare come vuole?
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
già, me lo chiedo anch'io: come specifiche mi sembrano un po' troppo aperte: "creare una finestra con client area da 800x600", "inizializzare OpenGL", fare questo&quello, vabbè, ma i prototipi delle funzioni? le classi?
qualcuno non dovrebbe prima architettare e strutturare le cose da questo punto di vista prima di passare alla programmazione vera e propria? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
boh...
a quanto ho capito io si dovrebbe scrivere il codice FUNZIONANTE e SCRITTO BENE. Poi con un pò di refactoring si può spostare nei package appropriati... ma fin qui non credo che abbia troppa importanza il package... al massimo potremmo definire i package prima di iniziare...... così non ci incasiniamo troppo col refactoring dopo..... per il resto...in effetti alcuni task pure a me sembravano piuttosto sequenziali.... come ci regoliamo???
__________________
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Quote:
Non commettete l'errore di isolarvi senza leggere il forum per poi riapparire magicamente tre giorni dopo 5 minuti prima di fare il commit. Se avete dubbi chiedete pure. Siamo un _Gruppo_. ciao |
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
1) Semplicita' 2) Testabilita' Il primo principio di Semplicita' ci impone di scrivere solo il codice e nient'altro che il codice che risolve il task che ci e' stato assegnato. Letteralmente, nient'altro che quello. Ed impone inoltre di scrivere il minimo codice possibile per risolvere il task, ovvero impone il refactoring e l'eliminazione di tutte le duplicazioni. Da questo principio si ricava che io e Vicius non possiamo imporvi un'architettura di classi che voi vi limitate a riempire di codice, perche' senza avere la soluzione, io e Vicius non abbiamo tutte le informazioni che ci servono per creare un'architettura minimale e piu' semplice possibile. A quel punto preferiamo che voi creiate quest'architettura minimale attraverso il continuo refactoring del vostro codice. Ovviamente vi daremo delle linee guida sull'architettura generale del sistema (separazione fra presentazione grafica e logica del gioco ad esempio), ma raggiungeremo queste linee guida attraverso il continuo Refactoring di soluzioni semplici e non come imposizione dall'alto. Spesso servira' decidere l'interfaccia fra due task fra due persone diverse. In questo caso vi riunirete in chat e discuterete l'interfaccia pubblica fra di voi e poi passerete all'esecuzione dei vostri task. E' fondamentale che comunicate spesso e in maniera chiara fra di voi. Il secondo principio ci verra' in aiuto qui. Il secondo principio di Testabilita' ci impone di testare tutto cio' che e' umanamente possibile testare, possibilmente in automatico. All'inizio vi scrivero' spesso io i test che voglio veder passare alla conclusione del task, imponendovi anche l'interfaccia pubblica quindi. Ma dopo mi aspetto che voi scriviate i test prima di scrivere il codice e, infine, scriviate i test che mi assicurano che il task sia stato concluso con successo. Alcuni task non saranno testabili, e lo discuteremo di volta in volta; nel Ciclo 1 potete gia' notare alcuni task che non saranno testabili. Vedremo se sara' il caso di scrivere delle procedure di test manuale per questi task. Un esempio per chiarire il concetto. Immaginiamo il seguente task: "Implementare una griglia MxN che contiene i diamanti, inseriendo un diamante in una colonna, il diamante dovra' trovarsi alla riga 1 (fondo) dopo M turni". Mi aspetto di vedere i seguenti test: 1- Dopo aver creato la griglia, la griglia e' vuota 2- Dopo aver inserito un diamante in una colonna X, la griglia non e' vuota 3- Dopo aver inserito il diamante in una colonna X, la griglia contiene un diamante alla posizione (M, X) 4- Dopo un turno la griglia contiene un diamante alla posizione (M-1, X), ma nessun diamante alla posizione (M, X) 5- Dopo M turni la griglia contiene un diamante alla posizione (1, X) Questo in parole, ma e' ancora meglio avere i test in codice: Test1: Codice:
void testEmptyGrid()
{
Grid grid = new Grid(M, N);
assert(grid.isEmpty());
}
Codice:
void testPushInGrid()
{
Grid grid = new Grid(M, N);
grid.pushDiamond(X);
Assert(grid.isDiamondInCell(M, X));
}
Domanda: trovate la duplicazione che c'e' fra i due test che ho scritto, che e' ottima candidata per un refactoring. Come il secondo principio ci verra' in contro quando ci dovremo comunicare le interfacce pubbliche? Immaginiamo che io abbia bisogno di un metodo per cancellare un diamante dalla griglia e 71104 ha il task di implementarlo. Oltre a descrivere a parole cio' di cui ho bisogno, gli scrivo un test: Codice:
void testRemoveDiamond()
{
Grid grid = new Grid(M, N);
grid.pushDiamond(X);
grid.processTurns(M);
grid.removeDiamonds(1, X);
assertTrue(grid.IsEmpty());
assertFalse(grid.isDiamondInCell(1, X));
}
E funziona proprio cosi'. Un piccolo test, qualche minuto speso, tre grossi vantaggi che durano nel tempo. Spenderemo quel tempo molto volentieri. In sintesi: avete totale liberta' di implementazione delle vostre classi e architetture, fino a che: - tutti i test passano - i controlli di stile passano - il codice che scrivete non contiene duplicazioni - io e Vicius non vi chiediamo di fare refactoring e semplificare l'architettura (e ve lo chiederemo)
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 17-09-2005 alle 12:35. |
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
vabbè, ho capito, ma se Tizio deve fare la classe A, Caio deve fare B, e A deve usare un'istanza di B, come fa Tizio a sapere quali sono i prototipi e i nomi dei metodi di B? se li inventa?
oppure le classi che faremo sono tutte indipendenti tra di loro...? |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
La comunicazione fra di voi e' fondamentale. Quando avete dei dubbi, non implementate, chiedete a chi deve usare il vostro lavoro oppure a me e Vicius.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]() A parte la dichiarazione dell'oggetto grid E in tal caso? Si potrebbero unificare i test 1 e 3 (pure il 2, volendo). Ma mi sa che va contro il principio di semplicita', o no? Bocciato?
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Ogni test dev'essere il piu' semplice possibile e idealmente testare una e una sola funzionalita'. Inoltre, ogni test deve poter essere eseguito senza dipendenze da altri test. Nel senso che, il test 3 deve poter essere eseguito senza che sia necessario eseguire prima il test 1. In altre parole, dimenticatevi cose come il Singleton pattern e le variabili globali e cercate di scrivere ogni classe avendo gia' in mente la sua testabilita'.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
e se si mettesse l'inizializzazione della griglia nel metodo setup???
Codice:
import junit.framework.TestCase;
public class DiamondsTest extends TestCase {
private Grid grid;
protected void setUp()
{
grid = new Grid(M, N);
}
void testEmptyGrid()
{
assert(grid.isEmpty());
}
void testPushInGrid()
{
grid.pushDiamond(X);
Assert(grid.isDiamondInCell(M, X));
}
}
__________________
Ultima modifica di ^TiGeRShArK^ : 17-09-2005 alle 16:57. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
EDIT: non avevo ancora letto la documentazione su Junit
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto Ultima modifica di Gica78R : 17-09-2005 alle 18:19. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Avete dubbi sul procedimento che ho indicato? E non ditemi di no, perche' quando ho cominciato a scrivere test ero strapieno di dubbi.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Da una discussione con Raffaele e' uscito fuori uno dei principi cardine che ci seguira' durante lo sviluppo del gioco:
YOU AREN'T GONNA NEED IT http://xp.c2.com/YouArentGonnaNeedIt.html Fatelo vostro. Qualunque codice, metodo, classe pensate di voler scrivere perche' magari ci servira' in futuro anche se non serve nel task che dovete svolgere, non scrivetelo. Non ci servira'.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Andando avanti così, una pillola per volta, dov'è che ci linki tutto extreme programming adventures in C#!
__________________
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ragazzi, ma i test li dobbiamo mettere nel nuovo package it.diamonds.tests, o dobbiamo seguire l'esempio dell'Helloworld?
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
I vostri test andranno nel package it.diamonds.tests oppure in package subordinati a questo, quando il progetto cresce.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
si...
a quanto ha scritto fek dovremmo metterli in src/it/diamonds/tests però nn m sono messo a controllare il build.xml x sicurezza xkè nn ho tempo oggi! ![]() [EDIT] stavolta mi hai battuto sul tempo!
__________________
Ultima modifica di ^TiGeRShArK^ : 19-09-2005 alle 19:10. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Per ora i task sono pochi e riesco a seguirli a mano con un fogliettino excel, ma quando le cose crescono la tua idea e' validissima. Automatizzare anche questo aspetto puo' essere molto utile. Io sono abituato ad un sistema di dev tracking dell'Electronic Arts e durante questi anni mi ci sono trovato ragionevolmente bene, quindi sono del tutto favorevole ad un sistema free di questo tipo. Che cosa serve per usarlo? L'unico problema che mi viene in mente e' mettere troppa carna a fuoco fin dall'inizio. Posso immaginare i dubbi di chi ha visto quest'approccio per la prima volta e gia' mi augura immani sofferenze perche' lo costringo a scrivere i test e fare refactoring.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 20-09-2005 alle 16:16. |
|
|
|
|
|
|
#19 | |||
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 29
|
Quote:
Quote:
Quote:
|
|||
|
|
|
|
|
#20 | |||
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Sicuro di non volere partecipare? Quote:
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:06.





















