Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Test_driven_development
Test_driven_development
Test driven development - Teknopedia
Vai al contenuto
Menu principale
Navigazione
  • Pagina principale
  • Ultime modifiche
  • Una voce a caso
  • Nelle vicinanze
  • Vetrina
  • Aiuto
  • Sportello informazioni
  • Pagine speciali
Comunità
  • Portale Comunità
  • Bar
  • Il Teknopediano
  • Contatti
Teknopedia L'enciclopedia libera
Ricerca
  • Fai una donazione
  • registrati
  • entra
  • Fai una donazione
  • registrati
  • entra

Indice

  • Inizio
  • 1 I cicli TDD
    • 1.1 Fase rossa
    • 1.2 Fase verde
    • 1.3 Refactoring o fase grigia
  • 2 Stile di sviluppo
  • 3 Vantaggi
  • 4 Note
  • 5 Voci correlate
  • 6 Collegamenti esterni

Test driven development

  • العربية
  • Български
  • Català
  • Čeština
  • Deutsch
  • Ελληνικά
  • English
  • Español
  • Eesti
  • فارسی
  • Suomi
  • Français
  • עברית
  • Magyar
  • Bahasa Indonesia
  • 日本語
  • La .lojban.
  • 한국어
  • Nederlands
  • Norsk bokmål
  • Polski
  • Português
  • Русский
  • Slovenščina
  • Svenska
  • Türkçe
  • Українська
  • Tiếng Việt
  • 中文
Modifica collegamenti
  • Voce
  • Discussione
  • Leggi
  • Modifica
  • Modifica wikitesto
  • Cronologia
Strumenti
Azioni
  • Leggi
  • Modifica
  • Modifica wikitesto
  • Cronologia
Generale
  • Puntano qui
  • Modifiche correlate
  • Link permanente
  • Informazioni pagina
  • Cita questa voce
  • Ottieni URL breve
  • Scarica codice QR
Stampa/esporta
  • Crea un libro
  • Scarica come PDF
  • Versione stampabile
In altri progetti
  • Elemento Wikidata
Aspetto
Da Teknopedia, l'enciclopedia libera.

In informatica, nello sviluppo software, il test-driven development (abbreviato in TDD), in italiano sviluppo guidato dai test[1] o sviluppo guidato dalle verifiche[2] è un modello di sviluppo del software che prevede che la stesura dei 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 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à.[3]

L'invenzione del metodo (o la sua riscoperta[4]) 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;[5] la sua applicazione è anche parte fondamentale dello sviluppo agile del software.[6]

I cicli TDD

[modifica | modifica wikitesto]
Rappresentazione tramite diagramma di flusso del ciclo TDD

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[7] è quella usata universalmente come riferimento:

Fase rossa

[modifica | modifica wikitesto]

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 una bozza minimale del codice da testare, necessario per garantire la compilazione e l'esecuzione del test. Una volta che il nuovo test è completo e può essere eseguito, dovrebbe fallire. La fase rossa si conclude quando c'è un nuovo test che può essere eseguito e fallisce.

Fase verde

[modifica | modifica wikitesto]

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 funzioni, ovvero passi il test. In effetti, è esplicitamente vietato dalla pratica del TDD lo sviluppo di parti di codice non strettamente finalizzate al superamento del test. Quando il codice è pronto, il programmatore esegue nuovamente tutti i test disponibili sul software modificato (non solo quello che precedentemente falliva). In questo modo, il programmatore ha modo di rendersi conto immediatamente se la nuova implementazione ha causato fallimenti di test preesistenti, ovvero ha causato regressioni o peggioramenti nel codice. La fase verde termina quando tutti i test vengono passati con successo.

Refactoring o fase grigia

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: 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[8][9] 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"[10]: "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

[modifica | modifica wikitesto]
«Write new code only if an automated test has failed»

(Kent Beck, Test-Driven Development by Example)

«Only ever write code to fix a failing test»

(Lasse Koskela, Test Driven)

«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 (Keep It Simple, Stupid), il principio YAGNI (You aren't gonna need it), e il mandato agile di minimizzare il lavoro incompiuto.[11]

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.[11] 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

[modifica | modifica wikitesto]

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.[12] In parte, questo è dovuto al fatto che in contesti non TDD il management tende a spingere i programmatori a passare all'implementazione di nuove funzionalità a scapito del completamento dei test. I programmatori che usano il TDD su progetti nuovi hanno, in genere, meno necessità di usare il debugger, essendo in grado di risolvere più efficacemente eventuali errori annullando immediatamente le modifiche che li hanno causati.[13]

Scrivendo i test prima del codice, si utilizza il programma prima ancora che venga realizzato. Ci si assicura, inoltre, che il codice prodotto sia testabile singolarmente. È dunque obbligatorio avere una visione precisa del modo in cui verrà utilizzato il programma prima ancora d'essere implementato. Così facendo si evitano errori concettuali durante la realizzazione dell'implementazione, senza che si siano definiti gli obiettivi. Inoltre, i test consentono agli sviluppatori di avere maggior fiducia durante il refactoring del codice, in quanto già sanno che i test funzioneranno quando richiesto; pertanto, possono permettersi di effettuare cambiamenti radicali di design, stando certi che alla fine otterranno un programma che si comporterà sempre alla stessa maniera (essendo i test sempre verificati).

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.

Note

[modifica | modifica wikitesto]
  1. ^ C. Larman e L. Cabibbo, Applicare UML e i pattern: analisi e progettazione orientata agli oggetti, Prentice-Hall 2005, p. 400
  2. ^ C. Bottiglieri, Test-driven development: un esempio con una web app, Mokabyte n. 192, febbraio 2014 Archiviato il 22 dicembre 2014 in Internet Archive.
  3. ^ K. Beck, Test-Driven Development by Example, Addison Wesley 2003
  4. ^ Why does Kent Beck refer to the "rediscovery" of test-driven development?, su quora.com.
  5. ^ Newkirk, JW and Vorontsov, AA. Test-Driven Development in Microsoft .NET, Microsoft Press 2004
  6. ^ TDD, Agile Alliance, su guide.agilealliance.org. URL consultato il 22 dicembre 2014 (archiviato dall'url originale l'8 febbraio 2015).
  7. ^ K. Beck, Test-Driven Development by Example, Addison Wesley 2003
  8. ^ K. Beck, XP Explained, Addison-Wesley 1999
  9. ^ Robert C. Martin, Clean Code
  10. ^ Garry Shutler, The Boy Scout Rule
  11. ^ a b James Shore, Agile Development
  12. ^ H. Erdogmus, On the Effectiveness of Test-first Approach to Programming, su nparc.cisti-icist.nrc-cnrc.gc.ca. URL consultato il 22 dicembre 2014 (archiviato dall'url originale il 22 dicembre 2014).
  13. ^ Stepping Through the Looking Glass: Test-Driven Game Development, su gamesfromwithin.com.

Voci correlate

[modifica | modifica wikitesto]
  • Extreme programming
  • Behavior-driven development
  • Unit test
  • Automazione del collaudo del software
  • You aren't gonna need it

Collegamenti esterni

[modifica | modifica wikitesto]
  • (EN) Introduction to Test Driven Development (TDD), su agiledata.org.
  • (EN) Test Driven Development, su agilesherpa.org. URL consultato il 21 ottobre 2011 (archiviato dall'url originale il 23 luglio 2012).
Estratto da "https://it.wikipedia.org/w/index.php?title=Test_driven_development&oldid=147982811"
Categoria:
  • Metodologia agile
Categoria nascosta:
  • Template Webarchive - collegamenti all'Internet Archive
  • Questa pagina è stata modificata per l'ultima volta il 17 nov 2025 alle 15:20.
  • Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso modo; possono applicarsi condizioni ulteriori. Vedi le condizioni d'uso per i dettagli.
  • Informativa sulla privacy
  • Informazioni su Teknopedia
  • Avvertenze
  • Contatti legali e di sicurezza
  • Codice di condotta
  • Sviluppatori
  • Statistiche
  • Dichiarazione sui cookie
  • Versione mobile
  • Wikimedia Foundation
  • Powered by MediaWiki
Test driven development
Aggiungi argomento

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022