Codice testato
Sviluppiamo il nostro codice con un test coverage del 95% per garantire qualità e solidità.
Sviluppiamo il nostro codice con un test coverage del 95% per garantire qualità e solidità.
Per fare codice di qualità ci affidiamo all’utilizzo dei test che, nel nostro caso, significano Unit test, Integration test, TDD e BDD. Come sviluppatori siamo perfettamente consapevoli che il codice testato porta benefici a tutti: il cliente avrà ciò che vuole, ovvero un prodotto funzionante e verificabile.
Il nostro approccio
Non testiamo tutto a prescindere; il testing è una pratica che aumenta i tempi di sviluppo e di conseguenza i costi. Nella fase iniziale di analisi del progetto, insisme al cliente, cerchiamo di rispondere a queste due domande: "Quanto può cambiare l’applicazione nei prossimi mesi?" "Quali sono i punti in cui non è accettabile un bug?". La risposta a queste domane ci indica quali sono le porzioni di codice in cui implementare test.
I vantaggi di una suite di test
- Permette di sapere in anticipo quale parte del codice è stata compromessa durante un nuovo sviluppo potento intervenire prima della pubblicazione.
- I flussi e le interazioni vengono verificate in pochi minuti e non in ore di testing umano che è sempre fallibile per banali disattenzioni.
- È una vera e propria documentazione del codice, senza il bisogno di scrivere documentazione prolissa e verbosa.
- Permette una manutanzione nel tempo: bastano poche settimane per "perdere il filo del discorso" e avere dei test ci permette di ricostruire il percorso fatto.
- Permette a nuovi sviluppatori di entrare a progetto inziato, senza avere paura di "spaccare tutto".
- Permette ad un cliente di cambiare team in blocco, senza correre il rischio di dover "rscrivere tutto".
Quali test adottiamo
Unit test
Lo scopo dello Unit Testing è quello di verificare il corretto funzionamento di singole classi o metodi di classe. Non dovrebbe mai varcare i confini della classe, lavorando in completo isolamento e restituendo al programmatore una prova certa che un pezzo di codice funzioni correttamente.
Integration test
Gli Integration Test ci consentono di individuare i problemi che si verificano quando due unità si combinano per realizzare una funzionalità più complessa. Fondamentalmente si verificano le interfacce in entrata e in uscita di ciascuno oggetto, assicurandoci che gli oggetti sappiano parlare tra loro.
Test Driven Development
Il TDD è una delle pratiche suggerite dall’XP (Extreme Programming), così come il pair programming ecc. Il suo mantra — red, green refactor — rappresenta un ciclo iterativo in cui: decidi cosa vuoi ottenere, scrivi un test, lo vedi fallire, scrivi il codice per farlo passare, fai il refactoring e poi da capo.
In generale, il valore dei test si concretizza in una maggiore confidenza nel refactoring, e dunque una maggiore mantenibilità del codice; il TDD aumenta questo valore perché ci costringe a pensare prima alle interfacce e solo dopo all’implementazione, permettendoci così di ottenere un’architettura migliore.
Behaviour Driven Development
Il BDD è un’estensione del TDD che nasce (fuori dal contesto agile dell’XP) per rispondere alla domanda: bello il TDD, ma cosa devo effettivamente testare? La risposta si trova nella parola chiave "comportamento", inteso come comportamento verificabile anche dal cliente. Di fatto, tecnicamente, il BDD non è molto diverso dal TDD; è più un approccio filosofico che permette agli sviluppatori e al management di comunicare tra loro, con un lessico condiviso che vada verso ciò che ha davvero valore per il business del cliente. Si parte da ciò che il cliente vede e che è descritto nelle user stories che, di fatto, sono il primo test più esterno di una certa funzionalità.