Nel mio attuale progetto (un gioco, in C ++), ho deciso che avrei usato lo sviluppo Test Driven 100% durante lo sviluppo.
In termini di qualità del codice, è stato fantastico. Il mio codice non è mai stato così ben progettato o così privo di bug. Non mi vergogno quando guardo 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 tempo libero, ma TDD mi sta ancora rallentando considerevolmente rispetto a quello a cui sono abituato. Ho letto che la più lenta velocità di sviluppo migliora nel tempo, e sicuramente penso a testare molto più facilmente di quanto facevo prima, ma ci sono stato per un anno e sto ancora lavorando a passo di lumaca.
Ogni volta che penso al prossimo passo che ha bisogno di lavoro, devo fermarmi ogni volta e pensare a come scrivere un test per questo, per permettermi di scrivere il codice vero e proprio. A volte rimango bloccato per ore, sapendo esattamente quale codice voglio scrivere, ma non sapendo come scomporlo abbastanza bene da coprirlo completamente con i test. Altre volte, penserò rapidamente a una dozzina di test e passerò un'ora a scrivere dei test per coprire un piccolo pezzo di codice reale che altrimenti richiederebbe alcuni minuti 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 delle cose da fare e vedo la prossima entità da codificare, e rabbrividisco per l'orrore pensato di scrivere altri 50 test simili per farlo implementare.
È arrivato al punto che, esaminando i progressi dell'ultimo anno, sto pensando di abbandonare il TDD per "finire il dannato progetto". Tuttavia, rinunciare alla qualità del codice che ne deriva non è qualcosa che non vedo l'ora di fare. Temo che se smetterò di scrivere test, allora uscirò dall'abitudine di rendere il codice così modulare e testabile.
Sto forse facendo qualcosa di sbagliato per essere ancora così lento a questo? Esistono alternative che acceleri la produttività senza perdere completamente i benefici? TAD? Meno copertura di prova? In che modo altre persone sopravvivono al TDD senza uccidere tutta la produttività e la motivazione?