Тему моделей жизненного цикла хотелось бы продолжить понятием методологии разработки и кратким обзором наиболее встречающихся в современных реалиях методологий. Итак,
Методология разработки программного обеспечения — совокупность методов, применяемых на различных стадиях жизненного цикла программного обеспечения и имеющих общий философский подход.
Стоит чётко понимать, что модель жизненного цикла и методология это понятия разные:
модель разработки программного обеспечения (их мы рассматривали в части 4) описывает, какие стадии жизненного цикла оно проходит и что происходит на каждой из них. А методология включает в себя набор методов по управлению разработкой: это правила, техники и принципы, которые делают её более эффективной.
Какие же ключевые методологии можно выделить на сегодняшний день? Конечно, это методологии из семейства Agile.
Гибкие методологии разработки (Agile software development) — обобщающий термин для целого ряда подходов и практик, основанных на ценностях манифеста гибкой разработки программного обеспечения и 12 принципах, лежащих в его основе.
Стоит понять, что Agile - не методология, это целое семейство методологий, в ядре которых лежат ценности, идеи и принципы Agile.
Agile объединяет в себе разные гибкие методологии разработки, такие как:
- SCRUM (рассмотрим сегодня в статье как самую встречающуюся методологию в IT);
- Kanban (познакомимся с интересным ресурсом, где вы получите общее представление о методологии)
- Lean (оставлю на ваше рассмотрение как дополнительный материал в связи с простым базисом подхода);
- XP — экстремальное программирование (оставлю на ваше рассмотрение как дополнительный материал в связи с казуистикой подхода, но на практики стоит обратить внимание).
Ещё часто Agile сравнивают с зонтом, которые "покрывает" конкретные методологии:
Ну и, конечно, стоит понимать, что конкретных методологий в разы больше, чем указано на схеме выше.
Основные идеи:
люди и взаимодействие важнее процессов и инструментов;
работающий продукт важнее исчерпывающей документации;
сотрудничество с заказчиком важнее согласования условий контракта;
готовность к изменениям важнее следования первоначальному плану.
Принципы же представлены на официальном сайте Agile-манифеста.
Особенности Agile-команд:
- при планировании работ учитываются интересы всех членов команды;
- приоритетные задачи решаются в первую очередь;
- каждый участник открыто признаёт ошибки/проблемы;
- члены команды помогают друг другу, что развивает каждого участника;
- тестировщик — полноценный член команды.
Важно помнить — за качество отвечает вся команда!
Семейство основано на итеративно-инкрементной модели, отсюда же и вытекают основные плюс и минусы Agile.
К плюсам стоит отнести:
- Возможность начать разработку без чётких требований;
- Быстрый выход MVP;
- Возможность адаптации к меняющимся условиям рынка;
- Быстрая обратная связь от заказчика.
К минусам:
- Сложность с оценкой времени и ресурсов в связи с неполнотой требований;
- На начальных этапах высок риск неудачи (например, построение неоптимальной архитектуры программного продукта).
В рамках статьи хотел бы рассмотреть наиболее популярные методологии: SCRUM и Kanban.
SCRUM
Устанавливает правила управления процессом разработки и позволяет использовать уже существующие практики кодирования, корректируя требования или внося тактические изменения. Использование этой методологии дает возможность выявлять и устранять отклонения от желаемого результата на более ранних этапах разработки программного продукта.
Основные роли в SCRUM:
- скрам-мастер (SCRUM master) — следит, чтобы команда работала по SCRUM, и помогает решать возникающие проблемы. Им может выступать любой член команды, который хорошо разбирается в методологии;
- владелец продукта (product owner) — заказчик, который определяет основные цели в реализации проекта;
- команда разработки (development team). Как правило, численность команды невелика – примерно 7 человек.
Команда в SCRUM - это самоорганизующийся организм, которому никто не вправе приказывать, как и что делать для проекта. Он многофункционален и каждый его орган обладает множеством навыков, которые незаменимы для готового продукта. За результат несут ответственность абсолютно все участники.
Основные принципы SCRUM:
Из чего состоит SCRUM
- итерации или спринты;
- планирование итерации (sprint planning meeting);
- ежедневный стендап (standup);
- демо (demo);
- ретроспектива (retro);
- доска задач (SCRUM board).
Бэклог продукта — это перечень рабочих задач, расположенных в порядке важности, для команды разработчиков. Его составляют на основе дорожной карты и требований в ней. Наиболее важные задачи расположены в начале бэклога продукта, чтобы команда понимала, какую работу следует выполнить в первую очередь. Скорость, с которой команда выполняет задачи бэклога, не зависит от желаний владельца продукта, а он, в свою очередь, не оказывает давления на команду. Напротив, команда разработки самостоятельно выбирает задачи из бэклога продукта, когда у нее есть необходимые ресурсы, выполняя их итерациями.
Итерация или спринт в SCRUM — это промежуток времени от недели до месяца, в течение которого происходит разработка работоспособной части продукта или новой функциональности. В конце каждой итерации команда должна предоставить заказчику либо другому заинтересованному лицу готовый инкремент продукта. Принятая на проекте длина итерации должна быть постоянной, чаще всего она составляет две недели.
При планировании спринта из бэклога берутся наиболее приоритетные задачи и "кладутся" в бэклог спринта.
Каждое утро спринта проводится Stand-Up (он же daily, митинг). Каждый участник команды начинает с ответа на три вопроса:
Мои активности за вчера;
Мои активности на сегодня
Проблемы или информирование о необходимости помощи;
Общая информация, которая может быть полезна всем.
Митинг начинается в одно время, обычно в начале рабочего дня. Митинг проводится стоя (чтобы каждый научился лаконично и точно описывать свои задачи и проблемы). Выступление каждого участника не должно превышать 2-3 минуты. А общее время всего митинга должно составлять не более 15 минут. Вопросы, возникшие к участнику команды можно обсудить после митинга.
После спринта проводится демонстрация (демо) полученных результатов. На демонстрации присутствуют все заинтересованные результатом спринта лица, а также владелец продукта. На встрече команда показывает владельцу продукта результат и получает рекомендации для дальнейшей работы. На основании проведенного демо владелец продукта может скорректировать весь бэклог продукта.
Отдельно для команды проекта в SCRUM предусмотрено проведение ретроспективы по итогам спринта и демо. На встрече подводятся итоги спринта, обсуждаются возникшие проблемы либо полученные успехи.
Для визуализации задач и контроля прогресса в SCRUM используется доска, на которой размещаются все задачи, взятые в бэклог спринта.
Для более глубокого погружения рекомендую изучить:
Непременно стоит изучить "Простое руководство по Теории и Практике Скрама".
Kanban
Kanban — методология гибкой разработки, в основе которой лежит быстрота поставки готового продукта на рынок, а также равномерное распределение нагрузки между членами команды. Процесс разработки прозрачен для всех участников.
Отмечу, что Kanban за свою карьеру не встречал, но на собеседованиях часто спрашивают про данную методологию, да и для общего развития изучить её вполне хороший выбор. Считаю, что в данной статье ответил на все базовые вопросы:
В качестве дополнительного материала рекомендую изучить:
Напомню, что готов ответить, подискутировать на любой представленный по теме вопрос. Также буду рад предложениям по улучшению статьи и обратной связи в целом :)