Test driven development: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Archive.today ___domain not accessible from Italy (x1)) #IABot (v2.0.9.5) (GreenC bot |
|||
(8 versioni intermedie di 5 utenti non mostrate) | |||
Riga 3:
Più in dettaglio, il TDD prevede la ripetizione di un breve ciclo di sviluppo in tre fasi, detto "ciclo TDD". Nella prima fase (detta "fase rossa"), il [[programmatore]] scrive un test automatico per la nuova funzione da sviluppare, che deve ''fallire'' in quanto la funzione non è stata ancora realizzata. Nella seconda fase (detta "fase verde"), il programmatore sviluppa la quantità ''minima'' di [[codice sorgente|codice]] necessaria per passare il test. Nella terza fase (detta "fase grigia" o di [[refactoring]]), il programmatore esegue il refactoring del codice per adeguarlo a determinati standard di qualità.<ref>[[Kent Beck|K. Beck]], ''Test-Driven Development by Example'', Addison Wesley 2003</ref>
L'invenzione del metodo (o la sua riscoperta<ref>[https://www.quora.com/Why-does-Kent-Beck-refer-to-the-rediscovery-of-test-driven-development ''Why does Kent Beck refer to the "rediscovery" of test-driven development?'']</ref>) si deve a [[Kent Beck]], uno dei padri dell'[[extreme programming]] (XP) e delle [[metodologie agili]]. Il TDD è una delle 12 regole base dell'XP, ma viene anche usato indipendentemente da questa metodologia;<ref>Newkirk, JW and Vorontsov, AA. ''Test-Driven Development in Microsoft .NET'', Microsoft Press 2004</ref> la sua applicazione è anche parte fondamentale dello sviluppo agile del software.<ref>
== I cicli TDD ==
Riga 10:
=== Fase rossa ===
Nel TDD, lo sviluppo di una nuova funzionalità comincia sempre con la stesura di un test automatico volto a validare quella funzionalità, ovvero verificare se il software la esibisce. Poiché l'implementazione non esiste ancora, la stesura del test è un'attività creativa, in quanto il programmatore deve stabilire in quale forma la funzionalità verrà esibita dal software e comprenderne e definirne i dettagli. Perché il test sia completo, deve essere eseguibile e, quando viene eseguito, produrre un esito negativo. In molti contesti, questo implica che debba essere realizzato
=== Fase verde ===
Nella fase successiva, il programmatore deve scrivere la quantità minima di codice necessaria per passare il test che fallisce. Non è richiesto che il codice scritto sia di buona qualità, elegante, o generale; l'unico obiettivo esplicito è che
=== Refactoring o fase grigia===
{{Vedi anche|refactoring}}
Quando il software passa tutti i test, il programmatore dedica una certa quantità di tempo a farne ''refactoring'', ovvero a migliorarne la struttura attraverso un procedimento basato su piccole modifiche controllate volte a eliminare o ridurre difetti oggettivamente riconoscibili nella struttura interna del codice. Esempi tipici di azioni di refactoring includono la scelta di identificatori più espressivi, eliminazione di codice duplicato, semplificazione e razionalizzazione dell'architettura del sorgente (p.es. in termini della sua organizzazione in classi), e così via. La letteratura sul TDD fornisce numerose linee guida sia specifiche che generali sul modo corretto di fare refactoring<ref>K. Beck, ''XP Explained'', Addison-Wesley 1999</ref><ref>Robert C. Martin, ''Clean Code''</ref> In ogni caso, l'obiettivo del refactoring non è quello di ottenere del codice "perfetto", ma solo di ''migliorarne'' la struttura, secondo la cosiddetta "regola dei Boy Scout"<ref>Garry Shutler, ''The Boy Scout Rule''</ref>: "lascia l'area dove ti sei accampato più pulita di come l'hai trovata". Dopo ciascuna azione di refactoring, i test automatici vengono nuovamente eseguiti per accertarsi che le modifiche eseguite non abbiano introdotto errori.
Riga 23:
{{citazione|Only ever write code to fix a failing test|Lasse Koskela, ''Test Driven''}}
{{citazione|We produce well-designed, well-tested, and well-factored code in small, verifiable steps|James Shore, ''Agile Development''}}
Il principio fondamentale del TDD è che lo sviluppo vero e proprio deve avvenire ''solo'' allo scopo di passare un test automatico che fallisce. In particolare, questo vincolo è inteso a impedire che il programmatore sviluppi funzionalità non esplicitamente richieste, e che il programmatore introduca complessità eccessiva in un progetto, per esempio perché prevede la necessità di generalizzare l'implementazione in un futuro più o meno prossimo. In questo senso il TDD è in stretta relazione con numerosi principi della programmazione agile e dell'[[extreme programming]], come il principio [[KISS (principio)|KISS (Keep It Simple, Stupid)]], il principio YAGNI ([[You aren't gonna need it]]), e il mandato agile di
I cicli TDD sono intesi come cicli di breve durata, al termine di ciascuno dei quali il programmatore ha realizzato un piccolo incremento di prodotto (con i relativi test automatici), un altro concetto tipico delle metodologie agili.<ref name="Shore"/> L'applicazione reiterata del refactoring al termine di ogni ciclo ha lo scopo di creare codice di alta qualità e buone architetture in modo incrementale, tenendo però separati l'obiettivo di costruire software funzionante (fase verde) e quello di scrivere "buon codice" (fase grigia). La breve durata dei cicli TDD tende anche a favorire lo sviluppo di componenti di piccole dimensioni e ridotta complessità.
|