Dan North ha sugerido que no existe el diseño basado en pruebas porque el diseño no se elimina mediante pruebas, estas pruebas unitarias solo se convierten en pruebas una vez que se implementa la funcionalidad, pero durante la fase de diseño realmente diseñando por ejemplo.
Esto tiene sentido: sus pruebas están configurando un rango de datos de muestra y condiciones con las que el sistema bajo prueba va a operar, y usted expulsa el diseño basado en estos escenarios de ejemplo.
Algunas de las otras respuestas sugieren que esto se basa en YAGNI. Esto es parcialmente cierto.
Sin embargo, más allá de eso, está la cuestión de la complejidad. Como se afirma a menudo, la programación se trata de gestionar la complejidad, dividir las cosas en unidades comprensibles.
Si escribe 10 pruebas para cubrir casos donde param1 es nulo, param2 es nulo, string1 está vacío, int1 es negativo, y el día actual de la semana es un fin de semana, y luego va a implementar eso, está teniendo hacer malabarismos con mucha complejidad a la vez. Esto abre espacio para introducir errores y resulta muy difícil determinar por qué fallan las pruebas.
Por otro lado, si escribe la primera prueba para cubrir una cadena vacía1, apenas tiene que pensar en la implementación. Una vez que la prueba está pasando, pasas a un caso donde el día actual es un fin de semana. Miras el código existente y se hace obvio dónde debe ir la lógica. Ejecutas pruebas y si la primera prueba ahora está fallando, sabes que la rompiste al implementar lo del día de la semana. Incluso te recomendaría que confirmes la fuente entre las pruebas para que, si rompas algo, siempre puedas revertir a un estado pasable e intentes de nuevo.
Hacer poco a poco y luego verificar que funciona reduce drásticamente el espacio para la introducción de defectos, y cuando las pruebas fallan después de la implementación, ha cambiado tan poco el código que es muy fácil identificar el defecto y corrígelo, porque sabes que el código existente ya estaba funcionando correctamente.
+1 para el "experimento" – k3b