Le pratiche TDD e Agile possono promettere di produrre una soluzione ottimale? (O anche una "buona" soluzione?)
Non esattamente. Ma questo non è il loro scopo.
Questi metodi forniscono semplicemente un "passaggio sicuro" da uno stato all'altro, riconoscendo che i cambiamenti sono lunghi, difficili e rischiosi. E il punto di entrambe le pratiche è garantire che l'applicazione e il codice siano entrambi fattibili e dimostrati per soddisfare i requisiti più rapidamente e con maggiore regolarità.
... [TDD] is opposed to software development that allows software to be added that is not proven to meet requirements ... Kent Beck, who is credited with having developed or 'rediscovered'
the technique, stated in 2003 that TDD encourages simple designs and
inspires confidence. (Wikipedia)
TDD si concentra sull'assicurare che ogni "pezzo" di codice soddisfi i requisiti. In particolare, aiuta a garantire che il codice soddisfi i requisiti preesistenti, invece di lasciare che i requisiti siano guidati da una cattiva codifica. Ma non promette che l'implementazione sia "ottimale" in alcun modo.
Come per i processi Agile:
Working software is the primary measure of progress ... At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (Wikipedia)
L'agilità non è alla ricerca di una soluzione ottimale; solo una soluzione di lavoro - con l'intento di ottimizzare ROI . Promette una soluzione di lavoro più presto piuttosto che più tardi ; non uno "ottimale".
Ma va bene, perché la domanda è sbagliata.
Gli obiettivi nello sviluppo del software sono confusi, spostando obiettivi. I requisiti sono di solito fluidi e pieni di segreti che emergono solo per il tuo imbarazzo in una sala riunioni piena di boss del tuo capo. E la "intrinseca bontà" dell'architettura e della codifica di una soluzione è calibrata dalle opinioni divise e soggettive dei tuoi pari e quella del tuo padrone manageriale - nessuno dei quali potrebbe effettivamente sapere nulla di un buon software.
Per lo meno, le pratiche TDD e Agile riconoscono le difficoltà e tentano di ottimizzare per due cose che sono oggettive e misurabili: Working v. Not-Working e < em> Sooner v. Later.
E, anche se abbiamo "lavoro" e "prima" come metriche oggettive, la tua capacità di ottimizzare per loro dipende principalmente dall'abilità e dall'esperienza di un team.
Le cose che potresti interpretare come sforzi producono soluzioni ottime includono cose come:
etc ..
Se ciascuna delle quelle cose effettivamente produce soluzioni ottimali sarebbe un'altra grande domanda da porsi!