As práticas de TDD e Agile podem prometer produzir uma solução ideal? (Ou mesmo uma solução "boa"?)
Não exatamente. Mas esse não é o objetivo deles.
Esses métodos simplesmente fornecem "passagem segura" de um estado para outro, reconhecendo que as mudanças são demoradas, difíceis e arriscadas. E o objetivo de ambas as práticas é garantir que o aplicativo e o código sejam viáveis e comprovados para atender aos requisitos de maneira mais rápida e regular.
... [TDD] se opõe ao desenvolvimento de software que permite a adição de software que não é comprovadamente atendido aos requisitos ... Kent Beck, que é creditado por ter desenvolvido ou 'redescoberto' a técnica, afirmou em 2003 que o TDD incentiva o simples projeta e inspira confiança. ( Wikipedia )
O TDD se concentra em garantir que cada "pedaço" de código atenda aos requisitos. Em particular, ajuda a garantir que o código atenda aos requisitos pré-existentes, em vez de permitir que os requisitos sejam conduzidos por uma codificação ruim. Mas, não promete que a implementação seja "ideal" de forma alguma.
Quanto aos processos ágeis:
O software de trabalho é a principal medida de progresso ... No final de cada iteração, as partes interessadas e o representante do cliente analisam o progresso e reavaliam as prioridades com o objetivo de otimizar o retorno do investimento ( Wikipedia )
A agilidade não está procurando uma solução ideal ; apenas uma solução funcional - com a intenção de otimizar o ROI . Ele promete uma solução de trabalho mais cedo ou mais tarde ; não é o "ideal".
Mas tudo bem, porque a pergunta está errada.
Os ótimos no desenvolvimento de software são alvos difusos e móveis. Os requisitos geralmente estão em fluxo e estão repletos de segredos que só surgem, para sua vergonha, em uma sala de conferências cheia dos chefes de seu chefe. E a "bondade intrínseca" da arquitetura e codificação de uma solução é classificada pelas opiniões subjetivas e divididas de seus colegas e do seu senhorio gerencial - nenhum dos quais pode realmente saber algo sobre um bom software.
No mínimo, as práticas de TDD e Ágil reconhecem as dificuldades e tentam otimizar para duas coisas que são objetivas e mensuráveis: Trabalhar v. Não trabalhar e mais cedo v. Mais tarde.
E, mesmo se tivermos "trabalhando" e "mais cedo" como métricas objetivas, sua capacidade de otimizar para elas depende principalmente da habilidade e experiência de uma equipe.
Coisas que você pode interpretar como esforços produzem soluções ideais incluem:
etc ..
Se cada uma dessas coisas realmente produz soluções ótimas seria outra ótima pergunta!