Модель водопада представляет собой разбиение деятельности по разработке на линейные последовательные фазы, то есть каждая фаза передается друг другу, где каждая фаза зависит от результатов предыдущей и соответствует специализации задач. [1]
Этот подход типичен для определенных областей инженерного проектирования . В разработке программного обеспечения [ 1]
он, как правило, относится к менее итеративным и гибким подходам, поскольку прогресс движется в основном в одном направлении (вниз, как водопад ) через фазы концепции, инициации, анализа , проектирования , построения , тестирования , развертывания и обслуживания . [2]
Модель водопада является самым ранним подходом жизненного цикла разработки систем ( SDLC ), используемым в разработке программного обеспечения. [3]
Модель каскадной разработки возникла в производственной и строительной отраслях, [ требуется ссылка ] где высокоструктурированная физическая среда означала, что изменения в проекте становились чрезмерно дорогими гораздо раньше в процессе разработки. [ требуется ссылка ] Когда она впервые была принята для разработки программного обеспечения, не было признанных альтернатив для творческой работы, основанной на знаниях. [4]
Первая известная презентация, описывающая использование таких фаз в программной инженерии, была проведена Гербертом Д. Бенингтоном на Симпозиуме по передовым методам программирования для цифровых компьютеров 29 июня 1956 года. [5] Эта презентация была посвящена разработке программного обеспечения для SAGE . В 1983 году Бенингтон переиздал свою статью с предисловием, в котором объяснялось, что фазы были специально организованы в соответствии со специализацией задач, и указывалось, что процесс на самом деле не выполнялся строго сверху вниз, а зависел от прототипа. [6] [ требуется лучший источник ]
Хотя термин «водопад» не используется в статье, первая формальная подробная схема процесса, позже известная как «водопадная модель», часто [7] цитируется как взятая из статьи Уинстона В. Ройса 1970 года . [8] [9] [10] Однако он прокомментировал, что она имела серьезные недостатки, вытекающие из того, что тестирование происходило только в конце процесса, что он описал как «рискованное и [привлекающее] неудачу». [8] Остальная часть его статьи представила пять шагов, которые, по его мнению, были необходимы для «устранения большинства рисков разработки», связанных с неизмененным водопадным подходом. [8]
Пять дополнительных шагов Ройса (включая написание полной документации на разных этапах разработки) так и не получили широкого распространения, но его схема того, что он считал несовершенным процессом, стала отправной точкой при описании «водопадного» подхода. [11] [12]
Первое использование термина «водопад» было, возможно, в статье Белла и Тайера 1976 года. [13] [ необходим лучший источник ]
В 1985 году Министерство обороны США приняло каскадную модель в стандарте DOD-STD-2167 для работы с подрядчиками по разработке программного обеспечения. Этот стандарт ссылался на итерации разработки программного обеспечения [14] как на « последовательные фазы цикла разработки программного обеспечения » и утверждал, что « подрядчик должен реализовать цикл разработки программного обеспечения, включающий следующие шесть фаз: анализ требований к программному обеспечению, предварительное проектирование, детальное проектирование, кодирование и тестирование модулей, интеграция и тестирование ». [14] [15]
Хотя Ройс никогда не рекомендовал и не описывал каскадную модель, [16] он критикует жесткое соблюдение следующих фаз:
Таким образом, каскадная модель утверждает, что переходить к фазе следует только после того, как будет рассмотрена и проверена предыдущая фаза.
Однако различные модифицированные каскадные модели (включая окончательную модель Ройса) могут включать в себя небольшие или значительные изменения этого процесса. [8] Эти изменения включают возврат к предыдущему циклу после обнаружения недостатков на последующих этапах или возврат к фазе проектирования, если последующие этапы считаются недостаточными.
Время, потраченное на раннем этапе цикла производства программного обеспечения, может снизить затраты на более поздних этапах. Например, проблема, обнаруженная на ранних этапах (например, спецификация требований), дешевле исправить, чем ту же ошибку, обнаруженную позже в процессе (в 50–200 раз). [17]
В обычной практике каскадные методологии приводят к графику проекта, в котором 20–40% времени затрачивается на первые две фазы, 30–40% времени — на кодирование, а остальное время — на тестирование и реализацию. Поскольку организация проекта должна быть высокоструктурированной, большинство средних и крупных проектов будут включать подробный набор процедур и элементов управления, которые регулируют каждый процесс в проекте. [18] [ неудавшаяся проверка ]
Еще одним аргументом в пользу каскадной модели является то, что она делает акцент на документации (такой как документы с требованиями и проектные документы), а также на исходном коде . [ требуется ссылка ] В менее тщательно разработанных и документированных методологиях знания теряются, если члены команды уходят до завершения проекта, и проекту может быть сложно восстановиться после потери. Если присутствует полностью рабочий проектный документ (как это и было изначально задумано для большого дизайна и каскадной модели), новые члены команды и новые команды должны иметь возможность ознакомиться с проектом, прочитав документы. [19]
Модель водопада обеспечивает структурированный подход; сама модель развивается линейно через дискретные, легко понимаемые и объяснимые фазы и, таким образом, проста для понимания. Она также обеспечивает легко идентифицируемые вехи в процессе разработки, часто используемые в качестве начального примера модели разработки во многих текстах и курсах по программной инженерии. [20]
Аналогично, моделирование может играть ценную роль в каскадной модели. Создавая компьютерные или математические моделирования разрабатываемой системы, команды могут получить представление о том, как система будет работать, прежде чем перейти к следующему этапу. Моделирование позволяет тестировать и совершенствовать проект, выявлять потенциальные проблемы или узкие места и принимать обоснованные решения о функциональности и производительности системы.
Клиенты могут не знать точных требований до того, как увидят работающее программное обеспечение, и, таким образом, впоследствии изменять свои требования, что приводит к необходимости перепроектирования, повторной разработки и повторного тестирования, а также к увеличению затрат. [21]
Проектировщики могут не знать о будущих трудностях при проектировании нового программного продукта или функции, и в этом случае первоначальный пересмотр проекта может повысить эффективность по сравнению с проектом, не созданным с учетом вновь обнаруженных ограничений, требований или проблем. [22]
Организации могут попытаться справиться с отсутствием конкретных требований от клиентов, нанимая системных аналитиков для изучения существующих ручных систем и анализа того, что они делают и как их можно заменить. Однако на практике трудно поддерживать строгое разделение между системным анализом и программированием, [23] поскольку реализация любой нетривиальной системы часто выявляет проблемы и пограничные случаи, которые системный аналитик не рассматривал.
Некоторые организации, такие как Министерство обороны США, в настоящее время выступают против методологий каскадного типа, начиная с MIL-STD-498, выпущенного в 1994 году, который поощряет эволюционное приобретение и итеративное и инкрементальное развитие . [24]
В ответ на предполагаемые проблемы с «чистой» водопадной моделью было введено много «модифицированных водопадных моделей». Эти модели могут решать некоторые или все критические замечания «чистой» водопадной модели.
К ним относятся модели Rapid Development, которые Стив Макконнелл называет «модифицированными водопадами»: [17] «Модель сашими» Питера ДеГрейса (водопад с перекрывающимися фазами), водопад с подпроектами и водопад с уменьшением риска. Существуют также другие комбинации моделей разработки программного обеспечения, такие как «инкрементная водопадная модель». [25]
Окончательная модель Уинстона В. Ройса , его предполагаемое улучшение первоначальной «водопадной модели», иллюстрировала, что обратная связь может (должна и часто будет) вести от тестирования кода к проектированию (поскольку тестирование кода выявляет недостатки в проекте) и от проектирования обратно к спецификации требований (поскольку проблемы проектирования могут потребовать удаления противоречивых или иным образом невыполнимых/непроектируемых требований). [ необходима цитата ] В той же статье Ройс также выступал за большие объемы документации, выполнение работы «дважды, если это возможно» (мнение, похожее на мнение Фреда Брукса , известного тем, что он написал «Мифический человеко-месяц» — влиятельную книгу по управлению программными проектами — который выступал за планирование, чтобы «выбросить один»), и за максимальное вовлечение заказчика (мнение, похожее на мнение экстремального программирования ).
Замечания Ройса по поводу окончательной модели следующие: