Драконограф писал(а):
Наверное, можно и иначе сказать - не строго "сверху вниз" или "снизу вверх", а "из середины" - взяв какую-то частную задачу и при её реализации уточняя как архитектуру, так и "элементную базу". Есть пример в работе Хейвуда и Кармайкла, выдержка вложена
в это сообщение. Там, кстати, обсуждается и целесообразность "жёсткой стадийности" ЖЦ в реальных условиях. Наверное, подход не новый...
Если мы говорим о проектировании, то для создания больших систем, особенно динамичных (изменяемых во времени) одинаково плохо подходят оба метода: проектирование сверху-вниз (waterfall) и снизу-вверх (экстремальное программирование). Первый метод работает плохо потому, что для большой системы цикл проектирования является весьма продолжительным. Может статься, что требования к проекту изменятся раньше, чем закончится проектирование, и многое придется сделать заново... это снова большие затраты времени, а требования норовят снова измениться... Проектирование зацикливается, даже не доходя до кодирования... Это является серьезным препятствием (более подробно проблемы waterfall можно посмотреть в известной книге Ф. Брукса "Мифический человеко-месяц...").
Сторонники экстремального программирования заявляют: "Не надо проектировать вообще!". Они берут первую задачу и быстро реализуют ее. Заказчик доволен, команда разработчиков радостно потирает руки... Но... появляется вторая задача, в чем-то она соприкасается/пересекается с первой задачей. "Ерунда!", - говорят экстремалы - "сейчас мы сделаем рефакторинг и... обе задачи будут реализованы!". И, правда, обе задачи вполне успешно работают. Но задач в большой системе, не две, даже не два десятка, и даже не две сотни. А когда реализовано 10-20 задач, то рефакторинг длится неделями. Но подходе к сотне задач, на рефакторинг требуются человеко-годы... И проект снова начинает жить где-то внутри команды, так и не добравшись до пользователей.
Подход с середины, ничего позитивного в эту картину не вносит. Чтобы подняться на уровень вверх, надо его спроектировать, что значительно затратнее по времени, чем проектирование текущего уровня. Однако после окончания проектирования нам придется внести изменения и в реализацию текущего уровня, что тоже требует времени... При переходе к следующему уровню затраты (сил, времени, денег) возрастут на порядки.