¿Pueden TDD y las prácticas ágiles prometer producir una solución óptima? (¿O incluso una "buena" solución?)
No exactamente. Pero, ese no es su propósito.
Estos métodos simplemente proporcionan un "paso seguro" de un estado a otro, reconociendo que los cambios son lentos, difíciles y riesgosos. Y el objetivo de ambas prácticas es garantizar que la aplicación y el código sean viables y se demuestre que cumplen los requisitos de manera más rápida y regular.
... [TDD] se opone al desarrollo de software que permite agregar software que no cumple con los requisitos ... Kent Beck, a quien se le atribuye haber desarrollado o 'redescubierto' la técnica, declaró en 2003 que TDD fomenta la simple diseña e inspira confianza. ( Wikipedia )
TDD se centra en garantizar que cada "fragmento" de código satisfaga los requisitos. En particular, ayuda a garantizar que el código cumpla con los requisitos preexistentes, en lugar de permitir que los requisitos sean controlados por una codificación deficiente. Pero no promete que la implementación sea "óptima" de ninguna manera.
En cuanto a los procesos ágiles:
El software de trabajo es la medida principal del progreso ... Al final de cada iteración, las partes interesadas y el representante del cliente revisan el progreso y reevalúan las prioridades con el fin de optimizar el retorno de la inversión ( Wikipedia )
Agility no busca una solución óptima ; solo una solución de trabajo , con la intención de optimizar el ROI . Promete una solución de trabajo más temprano que tarde ; no uno "óptimo".
Pero, eso está bien, porque la pregunta está mal.
Los óptimos en el desarrollo de software son objetivos difusos y móviles. Los requisitos generalmente están cambiando y plagados de secretos que solo surgen, para su vergüenza, en una sala de conferencias llena de los jefes de su jefe. Y la "bondad intrínseca" de la arquitectura y la codificación de una solución está clasificada por las opiniones divididas y subjetivas de sus pares y la de su jefe administrativo, ninguno de los cuales podría saber realmente nada sobre un buen software.
Como mínimo, las prácticas TDD y Agile reconocen las dificultades e intentan optimizar para dos cosas que son objetivas y medibles: Trabajar v. No trabajar y Sooner v. Más tarde.
E, incluso si tenemos "trabajar" y "antes" como métricas objetivas, su capacidad para optimizarlas depende principalmente de la habilidad y experiencia de un equipo.
Las cosas que podría interpretar como esfuerzos producen soluciones óptimas incluyen cosas como:
etc.
¡Si cada una de esas cosas realmente produce soluciones óptimas sería otra gran pregunta para hacer!