Sessió B2: Facade, tests funcionals i associacions
Objectius
- Usar el patró Facade al nostre sistema
- Entendre la diferència entre tests funcionals i unitaris
- Aprendre a planificar tests unitaris per complir tests funcionals
- Testejar i implementar associacions i composicicions multiples
- Racionalizar la gestio de memòria assignant responsabilitats
- Contenidors de la STL i iteradors
- Usar i testejar exepcions
Patró Facade
Proveeix una interfície d'alt nivell que encapsula un conjunt d'interfícies (classes) d'un subsistema. Aquesta interfície d'alt nivell fa que el subsistema sigui molt més fàcil d'usar desde fora.
Facade i tests funcionals
Tots els tests funcionals que us donarem "atacaran" el sistema només a través del Facade.
En canvi l'interior del sistema estarà cobert (testejat) pels vostres tests unitaris.
Per cert, la nostra classe Facade l'anomenarem AmalgamaOnline
Evolució dels tests
És important que tingueu en compte que mentre l'interfície del Facade es mantindrà força estable, la interfície de les classes interiors anirà evolucionant.
I per tant, també els tests unitaris.
Tests d'Acceptació o Funcionals (propietat del client)
Al directori src/TestsFuncionals teniu els tests d'acceptació del client,
que també anomenarem "funcionals".
Recordeu que estem seguint una metodologia àgil.
Hem estat planificant l'actual iteració de desenvolupament
juntament amb el client, qui ens ha marcat les funcionalitats
més prioritàries -- i nosaltres li hem dit fins on podíem arribar
amb una iteració d'una setmana.
Conjuntament amb el client, hem escrit una sèrie de tests d'acceptació.
D'aquesta manera tant el client com els desenvolupadors sabrem
quin percentatge de funcionalitat hem assolit en tot moment.
Tests Funcionals vs Tests Unitaris
-
Els tests unitaris s'escriuen a mida que es desenvolupa el codi,
en micro-cicles RED-GREEN-REFACTOR.
Els tests funcionals són escrits pel client
(potser amb ajuda dels desenvolupadors) al principi d'una iteració.
-
Els tests unitaris cobreixen una "unitat" de funcionalitat i per tant quan fallen ens indiquen clarament el perquè de la falla.
Els tests funcionals cobreixen molta funcionalitat (per exemple atacant la capa superior del software) i estan
en un nivell d'abstració més proper als casos d'ús.
Altres ajudes
Tasques
- Per cada test funcional inclos a TestsAfegirAutorsIObres:
- Analitzar quines classes internes hauran de ser modificades per passar el test
- Afegir a un fitxer 'TODO' els canvis que considereu que heu de fer per passar el test
- Per cada canvi a la classe interna, plantejeu el test unitari i feu un cicle Red-Green-Refactor.
- Un cop finalitzat tots els canvis necessaris a les classes internes ja només quedarà escriure codi a la classe Façade (AmalgamaOnline).
- Procedim descomentar el test funcional corresponent i fem un cicle Red-Green-Refactor tocant només codi del Façade.
- Si descobrim que calien més canvis a les classes internes, torna a commentar (desactivar) el test funcional i procedim com abans.
- L'arxiu TODO, us servirà com eina per focalitzar els vostres objectius i per no deixar-vos refactorings (poseu-lo al directori src/).
- Continueu fent commit al subversion molt sovint. Recordeu que apart d'evaluar el codi final, ens fixarem amb com que seguiu la metodologia i això ho mirem a l'històric del subversion.