En mi proyecto actual (un juego, en C ++), decidí que usaría Test Driven Development 100% durante el desarrollo.
En términos de calidad de código, esto ha sido genial. Mi código nunca ha sido tan bien diseñado o tan libre de errores. No me estremezco al ver el código que escribí hace un año al inicio del proyecto, y he adquirido un mejor sentido de cómo estructurar las cosas, no solo para que sea más fácil de probar, sino para que sea más sencillo de implementar y usar. .
Sin embargo ... hace un año que empecé el proyecto. Por supuesto, solo puedo trabajar en ello en mi tiempo libre, pero TDD todavía me está ralentizando considerablemente en comparación con lo que estoy acostumbrado. Leí que la velocidad de desarrollo más lenta mejora con el tiempo, y definitivamente creo que las pruebas son mucho más fáciles de lo que solía hacerlo, pero llevo un año trabajando en ello y todavía estoy trabajando a toda velocidad.
Cada vez que pienso en el siguiente paso que necesita trabajo, tengo que detenerme cada vez y pensar cómo escribiría una prueba para poder escribir el código real. A veces me quedo estancado durante horas, sabiendo exactamente qué código quiero escribir, pero sin saber cómo dividirlo lo suficiente como para cubrirlo completamente con pruebas. Otras veces, rápidamente me haré una docena de pruebas y pasaré una hora escribiendo pruebas para cubrir una pequeña pieza de código real que de otra forma habría tomado unos minutos para escribir.
O, después de terminar la prueba 50 para cubrir una entidad particular en el juego y todos los aspectos de su creación y uso, miro mi lista de tareas pendientes y veo la siguiente entidad que se codificará, y me estremezco de horror ante la Pensé en escribir otras 50 pruebas similares para implementarlo.
Llegué al punto en que, al analizar el progreso del año pasado, estoy considerando abandonar el TDD por "terminar el maldito proyecto". Sin embargo, renunciar a la calidad del código que lo acompaña no es algo que estoy deseando. Me temo que si dejo de escribir pruebas, perderé el hábito de hacer que el código sea tan modular y comprobable.
¿Quizás estoy haciendo algo mal para ser tan lento en esto? ¿Existen alternativas que aceleren la productividad sin perder por completo los beneficios? TAD? Menos cobertura de la prueba? ¿Cómo sobreviven otras personas a TDD sin matar toda productividad y motivación?