papo we(b)log

software engineering slave!
posts - 29, comments - 49, trackbacks - 26

[Request for Comments] tesi sullo sviluppo guidato dal testing

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, FitNesseSubversion, 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

Print | posted on mercoledì 13 dicembre 2006 23:33 | Filed Under [ .NET TDD ]

Powered by:
Powered By Subtext Powered By ASP.NET