papo we(b)log

software engineering slave!
posts - 24, comments - 48, trackbacks - 20

[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 21.33 | Filed Under [ .NET TDD ]

Feedback

Gravatar

# re: [Request for Comments] tesi sullo sviluppo guidato dal testing

Ciao
Come ho scritto in uno dei miei ultimi post da un po' ho iniziato a usare il TDD come pratica per lo sviluppo delle mie applicazioni.
Mi trovo bene e sul lungo periodo i vantaggi si vedono, quindi sono molto favorevole al suo utilizzo, ma il mondo esterno è un altra cosa.

Io sono un consulente e frequento spesso le software house, ti garantisco che purtroppo i temi legati all'XP (tra cui il TDD) non sono molto utilizzati e proporli talvolta ti fa sentire un pirla vedendo le loro facce attonite e sentendo affermazioni del tipo "ma chi è il pazzo che perde tempo a scrivere i test?".

Credo sia un problema di cultura. All'estero non è cosi (almeno per quel poco che ne so) e ritengo che anche da noi la cosa prima o poi prenderà piede.

Alcuni dei punti forti del TDD sono:
1) Avere a disposizione una batteria di test da lanciare per verificare il corretto funzionamento dell'applicazione
2) Fiducia durante le fasi di refactoring (ciò che eventualmente si rompe viene subito identificato)
3) Niente up-front-design. Il design dell'applicazione so forma in modo naturale
4) Riduzione del numero dei Bug

Sulla tua tesi non posso dirti molto, quello che scrivi nel blog è corretto e non ti nego che mi piacerebbe leggerla se fosse "Open Source".

Trovi molte altre informazioni (nonchè molte altri "fanatici" :-) del TDD) sulla mailing italiana dedicata all'extreme programming (XP-Italia) che trovi sui gruppi Yahoo.
13/12/2006 22.35 | Emanuele DelBono
Gravatar

# re: [Request for Comments] tesi sullo sviluppo guidato dal testing

TDD "Real World":

TDD e' applicabile/necessario quando un progetto ha:
Durata lunga(anni uomo)
Complessita'
Dipendenze(da e a altro codice)
Integrazione con multipli sistemi
Qualita richiesta e' altissima(CMM livello 2 o +)

Piu' alti sono i valori piu' TDD diventa un must.

Stefan
14/12/2006 0.42 | stefan demetz
Gravatar

# re: [Request for Comments] tesi sullo sviluppo guidato dal testing

ciao oggi ho iniziato il mio lavoro di tesi in ingegneria informatica, volevo sapere poichè mi hanno dato lo stesso argomento cioè "Sviluppo software java guidato dal testing: un caso di studio.. volevo qualche dritta su cosa e dove iniziare a cercare..grazie anticipatamente..il mio indirizzo email è di.sarno@libero.it
01/03/2007 15.22 | Cesar
Gravatar

# re: [Request for Comments] tesi sullo sviluppo guidato dal testing

ho bisogno di aiuto!!!!!
ciao sono uno studente di ingegneria informatica e volevo porti delle domande riguardo alla tesi da te sviluppata.
stolavorando su un progettino dal titolo "implementazione di un sistema per il test di altre applicazioni già esistenti, realizzando i mock objects (per creare l'ambiente di test) e le unit test (ossia i testi unitari veri e propri), il tutto in base alla metodologie di test driven development ".
in questo momento sto affrontando, a riguardo, un problema in particolare:
nell'attuazione dei test di applicazioni che si appoggiano su un
database, rischio che i test stessi mi alterino la consistenza del mio
database e, così facendo, i successivi test potrebbero darmi problemi
dovuti all'inconsistenza dei dati del database e non ad errori nel
codice dell'applicazione.
Bene, vorrei un metodo per realizzare in automatico quanto segue:
le interrogazioni al mio database vengono effettuate non a partire dai
dati del db vero e proprio ma, diciamo così, su una copia virtuale del
db che vorrei realizzare proprio tramite l'utilizzo di questi
fantastici mock objects. le modifiche generate su questa copia non
verranno salvate sul db vero e proprio e quindi un nuovo test avrà a
disposizione il db bello pulito ed integro.
come faccio a realizzare queste copie del db utilizzando i mock
objects?
L'ambiente di lavoro è il visual studio.
sapresti darmi qualche dritta su dove reperire materiale a riguardo?
inoltre, SAPRESTI DIRMI DOVE POTREI TROVARE MATERIALE COME CODICI, DOCUMENTAZIONE E ALTRO SU COME IMPLEMENTARE QUESTI BENEDETTISSIMI MOCK OBJECTS IN UN PROGETTO REALE???
GRAZIE MILLE... TI PREGO STO IN CRISI DAMMI UNA MANO!
CIAO FILIPPO.
18/10/2007 11.19 | filippo zocchi

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 1 and 6 and type the answer here:

Powered by: