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 |
|||
(32 versioni intermedie di 19 utenti non mostrate) | |||
Riga 1:
▲Il '''test-driven development''' (abbreviato in '''TDD'''), in italiano '''sviluppo guidato dai test'''<ref>[[Craig Larman|C. Larman]] e L. Cabibbo, ''Applicare UML e i pattern: analisi e progettazione orientata agli oggetti'', Prentice-Hall 2005, p. 400</ref> o '''sviluppo guidato dalle verifiche'''<ref>[http://www2.mokabyte.it/cms/article.run?articleId=UQM-B5J-1V4-588_7f000001_10364476_fc0fddeb C. Bottiglieri, ''Test-driven development: un esempio con una web app'', Mokabyte n. 192, febbraio 2014]</ref> è un modello di sviluppo del software che prevede che la stesura dei [[Automazione del collaudo del software|test automatici]] avvenga ''prima'' di quella del software che deve essere sottoposto a test, e che lo sviluppo del software applicativo sia orientato ''esclusivamente'' all'obiettivo di passare i test automatici precedentemente predisposti.
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
L'invenzione del metodo (o la sua riscoperta<ref>[
== I cicli TDD ==
[[File:Test-driven development.PNG|
Il TDD si articola in brevi cicli che constano di tre fasi principali. La descrizione originale dei cicli TDD data da [[Kent Beck]] nel libro ''Test-Driven Development by Example''<ref name=Beck>K. Beck, ''Test-Driven Development by Example'', Addison Wesley 2003</ref> è quella usata universalmente come riferimento:
=== 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.
== Stile di sviluppo ==
{{
{{
{{
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 (
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à.
== Vantaggi ==
L'applicazione del TDD porta in generale allo sviluppo di un numero maggiore di test, e a una maggiore copertura di test del software prodotto, rispetto alla pratica tradizionale di sviluppare i test dopo l'implementazione.<ref>
Scrivendo i test prima del codice, si utilizza il [[programma (informatica)|programma]] prima ancora che venga realizzato. Ci si assicura, inoltre, che il codice prodotto
L'uso del Test Driven Development permette non solo di costruire il programma assieme ad una serie di test di regressione automatizzabili, ma anche di stimare in maniera più precisa lo stato d'avanzamento dello sviluppo di un progetto.
==
<references />
*[[Extreme Programming]]▼
*[[Behavior-driven development]]▼
*[[Unit test]]▼
*[[Automazione del collaudo del software]]▼
*[[You Aren't Gonna Need It]]▼
== Voci correlate ==
==Collegamenti esterni==▼
*{{en}} [http://www.agiledata.org/essays/tdd.html Introduction to Test Driven Development (TDD)]▼
▲* [[Behavior-driven development]]
▲* [[Unit test]]
▲* [[Automazione del collaudo del software]]
▲== Collegamenti esterni ==
▲* {{
* {{cita web|1=http://www.agilesherpa.org/agile_coach/engineering_practices/test_driven_development/|2=Test Driven Development|lingua=en|accesso=21 ottobre 2011|urlarchivio=https://archive.is/20120723184333/http://www.agilesherpa.org/agile_coach/engineering_practices/test_driven_development/|dataarchivio=23 luglio 2012|urlmorto=sì}}
[[Categoria:Metodologia agile]]
|