Les pratiques TDD et Agile peuvent-elles promettre de produire une solution optimale? (Ou même une "bonne" solution?)
Pas exactement. Mais ce n'est pas leur but.
Ces méthodes fournissent simplement un "passage sûr" d'un état à un autre, reconnaissant que les changements prennent du temps, sont difficiles et risqués. Et le but des deux pratiques est de garantir que l'application et le code sont à la fois viables et éprouvés pour répondre aux exigences plus rapidement et plus régulièrement.
... [TDD] s'oppose au développement de logiciels qui permettent d'ajouter des logiciels dont il n'est pas prouvé qu'ils répondent aux exigences ... Kent Beck, qui est reconnu pour avoir développé ou "redécouvert" la technique, a déclaré en 2003 que TDD encourage les simples conçoit et inspire confiance. ( Wikipedia )
TDD se concentre sur la garantie que chaque "morceau" de code satisfait aux exigences. En particulier, cela permet de garantir que le code répond aux exigences préexistantes, au lieu de laisser les exigences être motivées par un mauvais codage. Mais, il ne fait aucune promesse que la mise en œuvre est "optimale" en aucune façon.
Quant aux processus Agiles:
Le logiciel de travail est la principale mesure du progrès ... À la fin de chaque itération, les parties prenantes et le représentant du client examinent le progrès et réévaluent les priorités en vue d'optimiser le retour sur investissement ( Wikipedia )
L'agilité n'est pas à la recherche d'une solution optimale ; juste une solution de travail - dans le but d'optimiser le retour sur investissement . Il promet une solution de travail plus tôt plutôt que plus tard ; pas «optimal».
Mais, ça va, parce que la question est fausse.
Les optimaux dans le développement de logiciels sont des cibles floues et mobiles. Les exigences sont généralement changeantes et truffées de secrets qui n'apparaissent, à votre grande gêne, que dans une salle de conférence pleine de patrons de votre patron. Et la «bonté intrinsèque» de l'architecture et du codage d'une solution est évaluée par les opinions divisées et subjectives de vos pairs et celle de votre suzerain managérial - dont aucun ne peut réellement rien savoir sur un bon logiciel.
À tout le moins, les pratiques TDD et Agile reconnaissent les difficultés et tentent d'optimiser pour deux choses qui sont objectives et mesurables: Travailler contre Ne pas Travailler et Plus Tôt contre Plus Tard.
Et, même si nous avons des mesures objectives «fonctionnelles» et «plus tôt», votre capacité à les optimiser dépend principalement des compétences et de l'expérience d'une équipe.
Les choses que vous pourriez interpréter comme des efforts produisant des solutions optimales comprennent des choses comme:
etc..
Que chacune de ces choses produise réellement des solutions optimales serait une autre excellente question à se poser!