Similar a Does TDD mean not thinking about class design?, estoy teniendo problemas para pensar dónde encaja la etapa tradicional de 'diseño' en TDD.¿Cómo se diseñan sistemas complejos con TDD?
De acuerdo con el Bowling Game Kata (la versión de "conversación", cuyo vínculo se me escapa en este momento) TDD parece ignorar las decisiones de diseño tomadas desde el principio (descartar el objeto marco, rodar objetos, etc.). Puedo ver en ese ejemplo que es una buena idea seguir las pruebas e ignorar sus pensamientos de diseño iniciales, pero en proyectos más grandes o en los que quiere dejar una oportunidad para la expansión/personalización, ¿no sería mejor poner las cosas en su lugar? que no tiene una prueba o no tiene una necesidad de inmediato para evitar reescribir el tiempo después?
En resumen: ¿cuánto diseño es demasiado cuando se hace TDD, y cuánto debería seguir ese diseño mientras escribo las pruebas y el código para pasarlas (ignorando mi diseño para solo preocuparme por pasar las pruebas)?
O no me preocupo por nada, y el código escrito simplemente para seguir las pruebas es no (en la práctica) ¿es difícil de reescribir o refactorizar si está pintado en una esquina? Como alternativa, ¿me falta el punto y debería estar esperando para volver a escribir porciones del código cuando llegue a probar una nueva sección de funcionalidad?
+1 para 'Parte de TDD está refactorizando': El diseño deberá actualizarse para reflejar los cambios que se encuentran necesarios durante la prueba. –
Gracias, entonces me falta el punto, y la refactorización/reescritura es parte de este diseño emergente. ¡Es bueno saberlo, ahora probarlo con algo! –