Test Driven Development

ritratto di Nicola Strisciuglio

Le metodologie tradizionali dell'Ingegneria del software posizionano la fase di test alla fine del processo di sviluppo del software, quando il codice è completo. Le metodologie agili, invece, propongono un approccio diverso al testing del codice: prima i test e poi il codice ovvero Test Driven Development. I principi fondamentali del TDD sono:

  • Test early
  • Test often
  • Test automatically

Per mettere in pratica questi tre principi gli sviluppatori hanno a disposizione degli strumenti e delle librerie software per realizzare gli unit test: tra i più importanti JUnit, PHPUnit, FlexUnit... La procedura per aggiungere una nuova funzione o un nuovo metodo al nostro progetto software è molto semplice:

  1. Scrivere l'interfaccia della funzione/metodo
  2. Scrivere lo unit test (funzionale)
  3. Scrivere il corpo della funzione
  4. La funzione deve superare i test
  5. Tutte le altre funzioni devono superare i test

Benefici

Questa pratica garantisce che sia subito testato il funzionamento del nuovo codice e che sia verificata l'usabilità dell'interfaccia della funzione. Inoltre, la necessità di testare una singola funzione per volta garantisce che il codice prodotto presenti basso accoppiamento tra i moduli. I test devono essere eseguiti ogni volta che si effettua una modifica al codice, in modo da verificare che la modifica appena apportata non abbia introdotto bug all'interno del progetto software. Eseguire continuamente i test permette di individuare e rimuovere più facilmente eventuali errori che sarebbero molto più difficili da individuare alla fine del ciclo di sviluppo. Il numero di bug è, così, notevolmente ridotto.

NB: Deve essere chiaro che la pratica di Test Driven Development non garantisce un codice senza bug ma solo una forte riduzione del loro numero.

Debugging e Unit test

Nel caso in cui viene individuato un bug non testato, bisogna prima scrivere il test che fallisce a causa del bug e poi correggere il bug. In questo modo si è sicuri che il bug non verrà reintrodotto in successive modifiche del codice.

Conclusioni

Test Driven Development garantisce una forte diminuzione del numero di bug del nostro software, a costo di un piccolo sforzo implementativo in più rispetto al tradizionale sviluppo del codice. Il tempo inizialmente impegato per sviluppare le classi del nostro software è maggiore rispetto allo sviluppo di software secondo metodologie tradizionali, ma nelle fasi successive del processo di sviluppo risulterà molto più semplice introdurre nuove funzionalità e correggere eventuali bug. Inoltre, essendo il numero di bug notevolmente ridotto, gli sviluppatori possono concentrarsi più sullo sviluppo di nuove funzionalità che sulla correzione dei problemi e degli errori che sicuramente si verificheranno :).