TDD - Parte I

Test-driven development

TDD copertina articolo

Il TDD (Test-driven development), tradotto in italiano come: "Sviluppo guidato dai test" o "Sviluppo guidato dalle verifiche" è un modello di sviluppo del software dove la stesura dei test automatici avviene prima di quella del software che deve essere sottoposto a test, e dove lo sviluppo del software applicativo è 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 diviso in tre fasi, detto “ciclo TDD”.
Di solito lo sviluppo del codice tradizionalmente è suddiviso in:

  1. Analisi del problema
  2. Sviluppo della soluzione
  3. Verifica del codice (Test)

La fase di test non è pensata come parte integrante dello sviluppo, ma solo come una fase finale.
Utilizzando l’approccio TDD, i test e lo sviluppo di ogni funzionalità vanno di pari passo.
I test stessi pilotano lo sviluppo del codice.

N.B. Questo approccio inizialmente potrebbe sembrare difficile da comprendere dal momento che richiede di cambiare leggermente il nostro modo di pensare rispetto allo sviluppo di un software.

Dopo un pò di pratica ci renderemo conto della sua utilità e di quanto sia capace di aiutarci durante lo sviluppo.
Il pattern più utilizzato nella scrittura di un test è chiamato “Red-Green-Refactor.”


Immagine test “Red-Green-Refactor.”

Red: Bisogna pensare al comportamento che deve avere un pezzo di codice o funzionalità, scrivere il relativo test (anche solo poche righe di codice) e farlo fallire, capendo cosa NON deve fare. 
Green: scrivere il codice sufficiente per far passare il test anche in modo non molto elegante.
Refactor: Ora che il codice funziona bisogna scriverlo in modo pulito e ordinato.

Vantaggi

I vantaggi dell'utilizzo di questa tecnica sono i seguenti:

  • Dal momento che è una documentazione del nostro codice, ogni test permette di capire subito cosa faccia quel pezzo di codice nonostante sia trascorso un pò di tempo rispetto alla fase della sua scrittura.
  • Consente di trovare in modo molto rapido le parti del codice che non funzionano correttamente.
  • Il codice sarà più pulito e di qualità dato che siamo obbligati a svilupparlo nel modo più semplice possibile. 
  •  L’evoluzione e la manutenzione dell’applicazione sono molto più veloci e sicure.
  • Aumenta la sicurezza che il nostro codice funzioni come previsto
  • Permette a nuovi sviluppatori di entrare a progetto iniziato, senza avere paura di "spaccare tutto".

Svantaggi

Gli svantaggi invece sono i seguenti:

  • Aumenta di molto il lavoro degli sviluppatori (ma può far risparmiare del tempo nel lungo periodo)
  • Testare tutto può risultare difficoltoso
  • Non è affatto sicuro che il processo di traduzione delle specifiche in test sia senza errori.

Se desideri approfondire: Contattaci