Sessió B2: Facade, tests funcionals i associacions
Dimarts 30 de Novembre
Objectius
- Entendre la diferència entre tests funcionals i unitaris
- Aprendre a planificar tests unitaris per complir tests funcionals
- Usar el patró Facade al nostre sistema
- Usar i testejar exepcions
- Implementar associacions i fer cerques per clau (string)
Patró Facade
Proveeix una interfície d'alt nivell a 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.
Exepcions
Un exemple de subclasse de std::exception
class AutorNoTrobat : public std::exception
{
public:
const char * what() const throw ()
{
return "Autor no existeix";
}
};
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.
Tasques
- Anar descomentant i passant un a un els tests funcionals TestsAfegirAutorsIObres, alternant-ho amb anar afegint tests unitaris. Els tests unitaris els heu de pensar vosaltres. Tota funcionalitat de les classes hauria de quedar coberta per un test unitari.
- Si cal, perquè els tests funcionals ho demanen, modifiqueu els tests unitaris. En principi no us caldrà modificar massa coses.
- Portar la planificació del desenvolupament en un arxiu TODO (posar-lo al directori src/).
de forma que en tot moment contingui les tasques a fer.
- Continueu fent commit al subversion molt sovint. Recordeu que apart d'evaluar el codi final, ens fixarem amb com que seguiu la metodologia