Immagina di essere ad un colloquio tecnico per un lavoro di sviluppo web di livello di entrare. E ti chiedono di implementare un algoritmo di distorsione temporale dinamica per misurare la somiglianza tra due sequenze di tempo logaritmico. Invece di impazzire e chiederti cosa questo centri con JQuery, puoi dire che non hai problemi, ma chiedi del tempo per sviluppare dei test. Facendo questo non solo prendi tempo tempo, ma fai vedere che sai quello che stai facendo.
Contents
Test-driven develoment
In questo articolo parliamo di Test-Driven Development, detto anche TDD. TDD è una disciplina di sviluppo software, dove gli sviluppatori, prima di scrivere una singola riga di codice, costruiscono dei test.
Primo test
Secondo l’approccio del test driven development il primo passo da compiere è scrivere un test falso focalizzandoti sulla parte più semplice della feature che devi implementare.
Scrivi il codice
Una volta scritto il test allora scrivi il codice più semplice possibile per passare il test. Solo dopo questo passaggio puoi passare alla fase di refactoring dove vai a migliorare il codice, a renderlo standard rispetto al settore etc.
Quali sono i vantaggi del Test-Driven Development?
Sono numerosi i vantaggi del test driven development, è il motivo per cui nei nostri progetti noi utilizziamo questa metodologia di produzione software che qui elenchiamo.
- Il Test Driven Development aiuta ad assicurare la qualità del software e concentrarsi sulle risposte prima di scrivere il codice.
- Questo consente di mantenere il codice chiaro, semplice e testabile, segmentando il codice in passi più semplici.
- Fornisce documentazione su come funziona il sistema per chi viene in seguito aggiunto al team,
- Si crea una suite di test di regressione ripetibili,
- Risulta più facile fare rapidi cambiamenti al software.
Un esempio reale di sviluppo con TDD
Giovanni, uno delle sviluppatori di SMarT, sta sviluppando un nuovo sistema di valutazione delle performance per il settore delle Human Research. Nello specifico deve inserire nel programma una feature che sia in grado di calcolare la produttività in base a diverse fasce orarie e in diversi periodi dell’anno.
Giovanni ha già precedentemente ha collaborato con l’analista di business, con il proprietario dell’azienda e con il team della User Experience, per capire quali fossero tutte le richieste da implementare.
Giovanni scrive un test semplice e automatizzato per soddisfare tutte le richieste. Spesso, questo viene chiamato un test di unità. Dopo averlo scritto valuta il test sulla versione attuale del programma. Poichè il codice non ha ancora questa funzionalità ovviamente il test da errore.
Sviluppo del codice sufficiente per passare il test
Giovanni scrive poi il codice sufficiente per farlo passare al test. Solo nel momento in cui il test sarà passato allora si potrà passare alla fase successiva. Certamente in questa fase il codice non sarà perfetto. Ma è proprio di questa metodologia il fatto di rispettare uno sviluppo per step.
Miglioramento del codice
Il passaggio finale in TDD richiede a Giovanni di rivoluzionare il codice per renderlo più semplice, più leggibile e mantenibile. Questa fase è detta “Refactoring“, e assicura che non venga danneggiato il software in generale.
Codice scritto a più mani
Ipotizziamo ora che il progetto vada avanti, e che dopo due settimane venga richiesta una ulteriore modifica alla feature del programma, ma in questo caso Giovanni è in ferie. Viene chiesto quindi a Riccardo di portare avanti il progetto.
Dato che Giovanni ha già creato un test per questa feature, Riccardo è in grado di leggere e capire cosa doveva fare il codice. Può quindi usare il test per verificare che il suo codice non crei problemi al codice scritto da Giovanni. Dopo averlo fatto, Riccardo aggiunge un suo test case. Questo aumenta il coverage del test e consente di far cambiare il suo codice.
Sviluppare con il Test-Driven Development
E’ per questi motivi che a SMarT utilizziamo il test driven development nello sviluppo delle nostre applicazioni. Infatti con questa modalità le funzionalità del codice che scriviamo sono meglio testate e quindi sono più affidabili.
Il nostro codice risulta essere più robusto e meno propenso ai bug. Inoltre è più semplice ed è più facile da mantenere e da modificare in futuro. Infine i tempi di sviluppo sono ridotti grazie alla possibilità di testare il codice in modo più efficiente.
In definitiva quindi otteniamo un codice che è più consistente e che è meno probabile che presenti errori di sintassi e di logica.