Agile, Waterfall. Модели и методологии разработки ПО

21 июня, 2021

Вы услышали одно из слов: Agile, Scrum, Kanban, Waterfall, каскадная модель разработки? 

И вы не понимаете, о чем речь? 

Хотите с этим разобраться? 

Вы в правильном месте 🙂

В этой статье мы рассмотрим модели и методологии разработки ПО, их особенности и отличия)

Методологии? Модели? Методы?

Перед тем, как начать, хотелось бы сразу определиться с терминологией.

Модель разработки ПО описывает, какие стадии жизненного цикла проходит ПО и что происходит на каждой из них. 

Методология разработки ПО описывает набор методов по управлению разработкой: правила, техники, принципы, которые делают разработку более эффективной.

Каскадная модель / Waterfall development

Каскадная модель разработки
Каскадная модель / Waterfall development

Каскадная модель – модель, в которой процесс разработки выглядит как поток, переходящий от одной стадии к другой в строгом порядке, без возможности пропуска стадии или возврата назад. 

Обычно, порядок следующий:

  1. Определение требований
  2. Проектирование системы
  3. Реализация
  4. Тестирование
  5. Запуск и поддержка

Следуя этой модели, сначала определяются все требования к системе. Далее, система проектируется, описываются архитектурные и дизайнерские решения, которые будут руководствами для команды разработки. 

Следующий этап – реализация системы (написание кода). После этого происходит тестирование системы и исправление ошибок. И финальный шаг – запуск продукта и его поддержка.

Плюсы1. Простая схема процесса
2. Не требует больших затрат на коммуникацию
3. Можно просчитать затраты ресурсов на реализацию
Минусы1. Отсутствие возможности внесения изменений в проект до его окончания
2. Отсутствие возможности продумать все требования и нюансы наперед очень часто ведет к срыву сроков или уменьшению качества продукта (единственный этап, где можно “срезать” время – это тестирование)
3. Большие затраты на документацию (описание требований, дизайна системы)

Модель была впервые описана больше 50 лет назад. С тех пор она часто критикуется за отсутствие гибкости, сниженное качество, увеличенные сроки и стоимость разработки.

Для решения описанных проблем была выдвинута другая модель – итеративная (инкрементальная).


В текущем, постоянно изменяющемся мире, издержки каскадной модели слишком высоки, и она практически не применяется в разработке ПО (особенно актуально для Web / Mobile приложений, стартапов), но, до сих пор работает в строительных проектах. 

Надеемся, что тестированием там не пренебрегают… 😉

Итеративная (инкрементальная) модель / Incremental development

Итеративная (инкрементальная) модель / Incremental development
Итеративная (инкрементальная) модель / Incremental development

Итеративная модель – модель, в которой работы выполняются параллельно с непрерывным анализом полученных результатов и корректировкой последующих этапов работы.

Она основана на цикле Деминга: Планируй – Реализуй – Проверяй – Оценивай.

Порядок стадий разработки:

  1. Начальное планирование
  2. Разработка, которая выполняется циклически:
    1. Планирование
    2. Написание требований
    3. Архитектура / дизайн
    4. Реализация
    5. Тестирование
    6. Оценка
  3. Запуск и поддержка

Применялась еще при разработке программного обеспечения шаттлов компанией NASA, с длительностью итерации 8 недель.

Интересно, что основным аргументом отказа от каскадной модели были изменения в требованиях по мере написания кода (отсутствие гибкости).

Плюсы1. Меньше команда разработки (по сравнению с Waterfall)
2. Снижение рисков, снижение стоимости проекта, увеличение качества за счет раннего тестирования
3. Равномерная нагрузка на участников проекта
4. Реальная оценка текущего состояния проекта
5. Возможность быстрее принимать решения, адаптироваться под ситуацию
Минусы1. Отсутствие возможности точной оценки стоимости всего проекта

Итеративная модель используется не только при разработке ПО. 

Например, SpaceX и RocketLab используют ее для создания и запуска ракет 🙂

Гибкая методология / Agile development

Гибкая методология / Agile development

Гибкая методология / Agile development – это семейство процессов разработки, а не единственный подход в разработке программного обеспечения, который определяется Agile Manifesto

Он не описывает конкретные практики, а определяет ценности и принципы, которыми руководствуются команды.

Ценности гибкой методологии:

  • люди и взаимодействие важнее процессов и инструментов
  • работающий продукт важнее исчерпывающей документации
  • сотрудничество с заказчиком важнее согласования условий контракта
  • готовность к изменениям важнее следования первоначальному плану
Плюсы1. Все плюсы итеративной модели
2. Очень “плотное” взаимодействие команды
Минусы1. Необходим высокий уровень квалификации команды для максимального эффекта
2. Отсутствие четкого плана, очень “поверхностное” описание требований к системе

Множество фреймворков и методов разработки относятся к гибким методологиям, исходя из этой статьи

Рассматривать все будет долго, по этому, приведем самые известные:

  1. Скрам (Scrum)
  2. Канбан (Kanban)
  3. Бережливая разработка (Lean development)
  4. Экстремальное программирование (XP)

Наиболее распространенными являются Scrum и Kanban.
Давайте посмотрим, что это)

Скрам (Scrum)

Скрам (Scrum) – это фреймворк, предназначенный для разработки, поставки и поддержки сложных продуктов. 


Основными элементами фреймворка являются:

  1. Небольшие Скрам-команды (< 10 человек)
  2. Четкие роли каждого участника команды (Product-owner, Scrum-master, Development Team)
  3. События (собрания / митинги)
  4. Артефакты (беклог продукта, беклог спринта)
  5. Правила

Можно выделить следующие особенности Скрам: 

  1. Наличие предварительного плана, который будет изменяться по мере реализации проекта
  2. Фиксированные по длительности итерации разработки (1-4 недели)
  3. Фиксированные команды разработки
  4. Постоянная работа с заинтересованными сторонами (включая клиента)

Лучше всего подходит для длительных, долгоживущих проектов, в которых очень важен ранний запуск и постоянное усовершенствование (например, стартапы).


Приведенная выше информация подойдет только для базового понимания. Если вы хотите узнать больше — советуем прочитать The Scrum Guide.

Канбан (Kanban)

В переводе с японского Канбан = «рекламный щит, вывеска». 🙂

Канбан — это не методология. Это не замена Scrum. Это не метод разработки.

Канбан – это инструмент. 


Определение Канбан основано на понятии “поток” поставки ценности.

Поток – это движение ценности по всему процессу разработки продукта.

Канбан (Kanban) – стратегия оптимизации потока поставки ценности посредством процесса, который использует визуальную систему, имеющую ограничение незавершенной работы. (Kanban Guide)


Чаще всего Канбан реализуется в виде “доски”, которая состоит из колонок и “задач”. 

Колонки являются этапами процесса разработки. 

Задачи передвигаются между этими колонками, и располагаются соответственно текущему этапу реализации.

Особенностью доски является то, что количество задач в каждой колонке — ограничено. Это условие позволяет “видеть” проблемы в процессе разработки и решать их 🙂

Например, если на этапе тестирования постоянно “собирается” много задач — это говорит о том, что на это место нужно посмотреть внимательнее. Возможно, нам нужен еще один тестировщик)


Пример Kanban доски можно посмотреть здесь.

Обратите внимание на колонку Code Review.

В ней превышено количество задач и это заметно. Именно для этой «заметности» и создан этот инструмент 🙂


Визуализация потока — это только одна из «плюшек» этого инструмента!

Если вы хотите узнать о Kanban больше — почитайте Kanban Guide, который можно скачать здесь.

Резюме

В статье мы посмотрели на 2 самые распространенные модели разработки ПО, а именно Каскадную и Итеративную.

Мы поняли, что Гибкая методология – это группа методов и фреймворков разработки, которые соответствуют принципам Agile Manifesto.

Также, мы поверхностно посмотрели на Scrum и Kanban, поняли, что это не отдельные “методологии”, и привели ссылки на Guides для тех, кто хочет разобраться с ними более подробно 🙂


Если вам интересна тема тестирования, и вы хотели бы получать актуальную информацию по этой теме  подписывайтесь на наш телеграмм канал, там интересно: статьи, тесты, опросы, нет спама 🙂


Если вы хотите узнать больше о тестировании в целом — вам сюда 🙂

Удачи!)

FAQ

Что такое каскадная модель разработки ПО?

Каскадная модель – модель, в которой процесс разработки выглядит как поток, переходящий от одной стадии к другой в строгом порядке без возможности пропуска этапов или возврата назад.

Что такое итеративная модель разработки ПО?

Итеративная модель – модель, в которой работы выполняются параллельно с непрерывным анализом полученных результатов и корректировкой последующих этапов работы.

🔥 Присоединяйся к 4,014
тестировщикам в Телеграм!