Могут ли методы TDD и Agile обещать оптимальное решение? (Или даже «хорошее» решение?)
Не совсем. Но это не их цель.
Эти методы просто обеспечивают «безопасный переход» из одного состояния в другое, признавая, что изменения являются трудоемкими, трудными и рискованными. И смысл обоих методов заключается в том, чтобы приложение и код были жизнеспособными и проверенными на соответствие требованиям быстрее и более регулярно.
... [TDD] выступает против разработки программного обеспечения, которая позволяет добавлять программное обеспечение, которое не соответствует требованиям ... Кент Бек, которому приписывают разработку или "переоткрытие" методики, заявил в 2003 году, что TDD поощряет простое проектирует и внушает доверие. ( Википедия )
TDD фокусируется на обеспечении того, чтобы каждый «кусок» кода удовлетворял требованиям. В частности, это помогает гарантировать, что код отвечает ранее существующим требованиям, в отличие от того, чтобы позволить требованиям руководствоваться плохим кодированием. Но это не обещает, что реализация "оптимальна" в любом случае.
Что касается Agile процессов:
Рабочее программное обеспечение является основной мерой прогресса ... В конце каждой итерации заинтересованные стороны и представитель заказчика рассматривают прогресс и переоценивают приоритеты с целью оптимизации возврата инвестиций ( Википедия )
Ловкость не ищет оптимального решения ; просто рабочее решение с целью оптимизации ROI . Он обещает рабочее решение скорее раньше , чем позже ; не "оптимальный".
Но это нормально, потому что вопрос неправильный.
Оптимумы в разработке программного обеспечения - нечеткие, движущиеся цели. Требования, как правило, меняются и изобилуют секретами, которые возникают только из-за вашего смущения в конференц-зале, полном боссов вашего босса. А «внутреннее совершенство» архитектуры и кодирования решения оценивается разделенными и субъективными мнениями ваших коллег и вашего управляющего руководителя - никто из которых не может ничего знать о хорошем программном обеспечении.
По крайней мере, методы TDD и Agile признают трудности и пытаются оптимизировать две вещи, которые являются объективными и измеримыми: « Работает», «Не работает» и « Рано или поздно».
И даже если у нас есть «работающие» и «скорее» в качестве объективных показателей, ваша способность оптимизировать их в первую очередь зависит от навыков и опыта команды.
Вещи, которые вы могли бы истолковать как усилия по созданию оптимальных решений, включают такие вещи, как
так далее..
Будет ли каждая из этих вещей на самом деле приводить к оптимальным решениям - это еще один замечательный вопрос!