Nel mio progetto attuale (un gioco, in C ++), ho deciso di utilizzare Test Driven Development al 100% durante lo sviluppo.
In termini di qualità del codice, questo è stato fantastico. Il mio codice non è mai stato così ben progettato o così privo di bug. Non mi arrabbio quando visualizzo il codice che ho scritto un anno fa all'inizio del progetto, e ho acquisito un senso molto migliore su come strutturare le cose, non solo per essere più facilmente testabile, ma per essere più semplice da implementare e utilizzare .
Tuttavia ... è passato un anno da quando ho iniziato il progetto. Certo, posso lavorarci solo nel mio tempo libero, ma TDD mi sta ancora rallentando considerevolmente rispetto a quello a cui sono abituato. Ho letto che la velocità di sviluppo più lenta migliora nel tempo, e sicuramente penso ai test molto più facilmente rispetto al passato, ma ci sono stato per un anno e sto ancora lavorando al ritmo di una lumaca.
Ogni volta che penso al prossimo passo che necessita di lavoro, devo fermarmi ogni volta e pensare a come scriverei un test per farlo, per permettermi di scrivere il codice reale. A volte rimango bloccato per ore, sapendo esattamente quale codice voglio scrivere, ma non sapendo come scomporlo abbastanza finemente da coprirlo completamente con i test. Altre volte, elaborerò rapidamente una dozzina di test e passerò un'ora a scrivere test per coprire un minuscolo pezzo di codice reale che altrimenti richiederebbe qualche minuto per scrivere.
Oppure, dopo aver terminato il 50 ° test per coprire una particolare entità nel gioco e tutti gli aspetti della sua creazione e utilizzo, guardo la mia lista di cose da fare e vedo la prossima entità da codificare, e rabbrividisco con orrore al pensiero di scrivere altri 50 test simili per implementarlo.
È arrivato al punto che, osservando i progressi dell'ultimo anno, sto pensando di abbandonare TDD per "finire il dannato progetto". Tuttavia, rinunciare alla qualità del codice che ne deriva non è qualcosa che non vedo l'ora. Temo che, se smetterò di scrivere test, abbandonerò l'abitudine di rendere il codice così modulare e testabile.
Sto forse facendo qualcosa di sbagliato per essere ancora così lento in questo? Esistono alternative che accelerano la produttività senza perdere completamente i benefici? TAD? Meno copertura del test? In che modo le altre persone sopravvivono al TDD senza uccidere tutta la produttività e la motivazione?