|
ed eccomi finalmente a scrivere questo post. è da
qualche tempo che ce l'ho in mente, ma solo ora sono in grado di poterlo fare.
si tratta di una "richiesta di commenti" riguardo al tema che
ho analizzato e sviluppato nella mia tesi di laurea, che a
breve porterò a termine (qualche settimana al più).
con questo post faccio ricorso (per la prima volta) "alla community" poichè
sono interessato a sapere quanto realmente possano interessare e/o essere
considerati utili gli argomenti che mi hanno visto impegnato, ormai, per
più di un anno. il tema trattato riguarda le pratiche di sviluppo
software guidate dal testing e l'adozione di un modello di
processo in
cui queste siano inserite. lo chiedo per un paio di motivi:
- ovviamente, cercare di rivalutare la qualità del mio
lavoro! ormai ho iniziato a dubitarne (principalmente rispetto
all'attualità dei temi)
- dato che ho intenzione di cambiare a breve occupazione, vorrei
trovare un lavoro in cui poter applicare le pratiche che ho affrontato.
vorrei quindi capire quanto la mia tesi sia "spendibile".
quindi, chiedo semplicemente a chi ne abbia voglia di lasciare
un commento dicendo quanto i temi risultino interessanti, e in particolare quanto
si avvicinino al "reale" lavoro di sviluppo del software. non nascondo che
sono particolarmente interessato a conoscere come "funziona"
all'estero, quindi anche esperienze a rigaurdo sono più che ben
accette.
ok, di seguito cercherò di costruire una sorta di
riassunto del mio lavoro, prendendo alcune parti direttamente dalla
tesi (come l'abstract). in alcuni punti invece inserisco solo dei brevi
commenti, dato che il grosso della tesi è il "report" dello sviluppo di
un'applicazione concreta, che adesso vi descrivo.
ringrazio già da ora chi vorrà partecipare a questa sorta di esperimento,
non ha effetto diretto sul lavoro visto che tra poco si stampa, quindi non
abbiate paura a dirmi di buttare via tutto! mi serve invece per sondare il
campo in vista di quella che sarà una delle mie preoccupazioni
principali tra qualche mese: trovare un nuovo lavoro. buona lettura!
tesi dal titolo : " Sviluppo software guidato dal testing: un caso di
studio".
sommario: "In questo lavoro viene presentata e
discussa la pratica dello "sviluppo guidato dal test" (Test-Driven
Development), estendendo la stessa con i più recenti aggiornamenti in
letteratura e applicando quanto esposto a un caso di studio concreto.
L’attenzione si sofferma sulla stesura dei requisiti delle applicazioni, tramite
test di accettazione, e sulla progettazione e implementazione di software a
oggetti, entrambe attività guidate dal testing in piccolo, evidenziando le
differenze tra testing basato sullo stato e testing delle interazioni. Per ogni
metodologia vengono presentati alcuni strumenti oggi disponibili, scelti fra
quelli Open-Source e rilasciati con licenza libera. L’ambiente di
riferimento è il framework .NET, sebbene dove possibile viene sempre fatto un
confronto con quanto disponibile per Java. Il caso di studio scelto per
illustrare le metodologie proposte è esso stesso uno strumento a supporto allo
sviluppo test-driven, trattandosi di un generatore di classi stub e
mock. Il lavoro si conclude con valutazioni critiche che vertono a mostrare i
vantaggi dello sviluppo iterativo e incrementale unito all’approccio guidato dal
test: la produzione di software di qualità e soggetto a un numero ridotto di
malfunzionamenti".
indice (capitoli principali):
-
Progettare per la testabilità:
tecniche di Quality Assurance nel software, principali tipologie di
verifica, approcci per aumentare la testabilità dei requisiti
(Specification By Example) e dell'architettura (controllabilità e osservabilità dei
moduli).
-
Metodologie e
tecnologie:
-
Iterative and Incremental Development: iterazioni, timeboxing, Unified Process, metodi Agili (XP, Scrum,
AUP).
-
Test-Driven Development: principali
caratteristiche di un buon test di unità automatizzato, infrastruttura
xUnit, test basato sullo stato e stub, guida del
design (red-green-refactor) e "refactoring to design patterns", test basato
sulle interazioni, mock objects (statici e dinamici), processo di
ricerca delle interfacce ("interface discovery"), metriche per i test di unità (copertura e analisi
mutazionale).
-
Customer Test-Driven
Development: test e criteri di accettazione, customer test e scrittura
dei requisiti funzionali, tabelle e fixture di FIT,
tipologie di specifica e layering di un'applicazione (regole del
dominio e Business/Domain Layer, casi d'uso e Presentation Layer o test
funzionali UI per la User Interface).
-
Caso di studio: generatore di stub e mock statici
partendo da un'interfaccia (scritta in codice sorgente C#), versione a
console, estendibile per IDE (es: SharpDevelop).
-
presentazione del progetto: dominio, processo iterativo,
ambiente di sviluppo con Integrazione Continua (Trac,
FitNesse, Subversion,
CruiseControl.NET).
-
prima iterazione: raccolta dei requisiti con pagine
wiki in FitNesse (e principali tipologie di fixture di FIT e fitlibrary),
progettazione layering e package, test di unità
(NUnit) basati sulle interazioni
(Rhino.Mocks) per l'Application Controller, test di
integrazione per la prima iterazione, implementazione: realizzazione
delle fixture di FIT e scrittura del sistema (test di unità,
implementazione e refactoring).
-
Considerazioni e valutazioni: pratiche più utili,
confronto con altre tecniche di specifica e progettazione (UML, design
pattern), correttezza e costi.
-
Appendici: risultati dell'ultima iterazione di
sviluppo, introduzione a .NET
|