En mi proyecto actual (un juego, en C ++), decidí que usaría Test Driven Development 100% durante el desarrollo.
En términos de calidad del código, esto ha sido excelente. Mi código nunca ha sido tan bien diseñado o tan libre de errores. No me avergüenzo al ver el código que escribí hace un año al comienzo del proyecto, y he adquirido una idea mucho mejor de cómo estructurar las cosas, no solo para ser más fácilmente comprobable, sino para ser más simple de implementar y usar .
Sin embargo ... ha pasado un año desde que comencé el proyecto. De acuerdo, solo puedo trabajar en ello en mi tiempo libre, pero TDD todavía me está frenando 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 he estado en esto durante un año y todavía estoy trabajando a paso de tortuga.
Cada vez que pienso en el siguiente paso que necesita trabajo, tengo que parar cada vez y pensar en cómo escribiría una prueba para poder escribir el código real. A veces me quedo atascado durante horas, sabiendo exactamente qué código quiero escribir, pero sin saber cómo desglosarlo lo suficientemente fino como para cubrirlo completamente con pruebas. Otras veces, pensaré rápidamente en una docena de pruebas y pasaré una hora escribiendo pruebas para cubrir un pequeño fragmento de código real que de otro modo me hubiera llevado unos minutos escribir.
O, después de terminar la prueba número 50 para cubrir una entidad en particular en el juego y todos los aspectos de su creación y uso, miro mi lista de tareas y veo la próxima entidad que se codifica, y me horrorizo ante la idea de escribir otras 50 pruebas similares para implementarlo.
Llegué al punto de que, mirando el progreso del año pasado, estoy considerando abandonar TDD por "terminar el maldito proyecto". Sin embargo, renunciar a la calidad del código que viene con él no es algo que esté esperando. Me temo que si dejo de escribir pruebas, dejaré el hábito de hacer que el código sea tan modular y comprobable.
¿Acaso 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 prueba? ¿Cómo sobreviven otras personas al TDD sin matar toda la productividad y la motivación?