Сведений об истории появления Waterfall достаточно мало. Считается, что началось все в 1970 году, когда эту модель управления проектами описал ученый Уинстон Уокер Ройс. Известно, что он написал статью, в которой обсуждал недостатки каскадного подхода и предлагал его доработать, а сам он использовал итеративную методологию. Так, за Уинстоном Ройсом закрепилось звание первопроходца. В переводе с английского Waterfall обозначает водопад. А каскадной модель называют по аналогии с теми же каскадными водопадами.
Особую популярность модель обрела в середине 90-х, однако сейчас её используют реже из-за очень большой продолжительности циклов. Чаще всего Waterfall применяют в больших проектах, когда шанс внесения дополнительных изменений в проект в процессе его реализации мал.
Методология строится на 8 главных принципах:
- документирование необходимо;
- все этапы работы должны быть зафиксированы;
- каждый этап последователен, следующий этап не начинается, пока не закончится предыдущий;
- пропуск этапов запрещен;
- если в процессе разработки требования к функционалу, продукту поменялись после согласования, вносим изменения в ТЗ;
- нельзя возвращаться на предыдущий этап;
- разработка происходит в рамках одного процесса. Итераций нет;
- работа над ошибками происходит после окончания разработки;
- участие клиента ограничивается этапом разработки ТЗ. После, заказчик не принимает участия в процессе.
Думаю, вы с нами согласитесь, некоторые принципы каскадной модели противоположны принципам Agile. Кстати, у нас есть статья про Agile и Scrum, там много интересного: https://topremote.ru/post/agile-i-scrum-chiem-ghrozit-sliepoie-sliedovaniie-etim-mietodikam. Немного позже мы поговорим о различиях этих методологий.
А пока выясним, какие есть этапы работы при использовании «Водопада»:
- определение требований (аналитика). На этом этапе происходит сбор требований к проекту и оформляется обобщенная версия технического задания. Расписывается план работ, роли в команде;
- проектирование. Команда разрабатывает детализированное техническое задание. Критически важно правильно декомпозировать задачи;
- конструирование (также «реализация» либо «кодирование»). Команда окончательно проясняет, как именно будет происходить разработка проекта, с помощью каких инструментов (языков программирования, оборудования, сервисов и так далее). Каркас, который проработали на предыдущих этапах, становится более целостным, потихоньку формируется облик продукта. На этот этап приходится большая часть работы над проектом;
- тестирование и отладка (также «верификация»). На этом этапе продукт проверяется на соответствие техническому заданию. Происходит поиск и выявление и исправление ошибок и недочетов;
- эксплуатация и поддержка. Готовый продукт передают заказчику. Осуществляется поддержка. В очередной раз идет поиск ошибок, сбоев и их устранение.
Отметим, может быть сразу несколько параллельных каскадов.
Каковы же основные различия между Waterfall и Agile?
- роль заказчика. В первом случае клиент принимает участие только до окончания разработки ТЗ. В случае с Agile заказчик принимает участие на протяжении всего процесса;
- возможность изменений. Waterfallхорошо подходит, когда концепция определена с самого начала, либо с заранее установленными ограничениями по времени и смете расходов. Agile же приветствует наличие изменений по ходу разработки;
- финансовая составляющая. Agile отлично работает в случаях, когда деньги и время не имеют жестких ограничений, но работа ухудшается при появлении рамок. Использование Waterfall отдает предпочтение фиксированности.
Таким образом, принципиально Agileи Waterfallотличаются допустимой степенью гибкости.
Какие преимущества и недостатки есть у этой модели?
Преимущества:
- гибкость на первых этапах работы;
- устойчивость к замене исполнителей;
- определенность в сроках и размере бюджета;
- инструкции и правила по всему процессу разработки;
- строгий менеджмент.
Недостатки:
- отсутствие гибкости;
- заказчик не допускается до разработки и тестирования;
- проблемы всплывают только при тестировании.
Таким образом, каскадная модель будет полезна, если вы четко знаете, какой продукт нужно получить в итоге, есть много времени и ресурсов на проект, необходима детальная документация по всем процессам разработки, создание продукта строится на строгой последовательности этапов.
Если же необходима гибкость во внесении в продукт изменений, постоянное взаимодействие с заказчиком, а также возможность видеть прогресс на каждой стадии разработки, предпочтительнее использовать методологию Agile.