Что такое Agile?
Agile (Гибкая методология разработки) — обобщающий термин для целого ряда подходов и практик, основанных на ценностях Манифеста гибкой разработки программного обеспечения и 12 принципах, лежащих в его основе.
Проще говоря, Agile — это не про отчетность, документооборот и четкий план, а про постоянное общение с клиентом и готовность оперативно реагировать на изменения в ходе проекта.
Ценности
- Люди и взаимодействие важнее процессов и инструментов
- Работающий продукт важнее исчерпывающей документации
- Сотрудничество с заказчиком важнее согласования условий контракта
- Готовность к изменениям важнее следования первоначальному плану
Фундаментальные принципы
- Наивысшим приоритетом для нас является удовлетворение потребностей заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения.
- Изменение требований приветствуется, даже на поздних стадиях разработки. Agile-процессы позволяют использовать изменения для обеспечения заказчику конкурентного преимущества.
- Работающий продукт следует выпускать как можно чаще, с периодичностью от пары недель до пары месяцев.
- На протяжении всего проекта разработчики и представители бизнеса должны ежедневно работать вместе.
- Над проектом должны работать мотивированные профессионалы. Чтобы работа была сделана, создайте условия, обеспечьте поддержку и полностью доверьтесь им.
- Непосредственное общение является наиболее практичным и эффективным способом обмена информацией как с самой командой, так и внутри команды.
- Работающий продукт — основной показатель прогресса.
- Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм бесконечно. Agile помогает наладить такой устойчивый процесс разработки.
- Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта.
- Простота — искусство минимизации лишней работы — крайне необходима.
- Самые лучшие требования, архитектурные и технические решения рождаются у самоорганизующихся команд.
- Команда должна систематически анализировать возможные способы улучшения эффективности и соответственно корректировать стиль своей работы.
Методологии Agile
Kanban
Это визуализированный подход к управлению проектами. Используя Канбан, команды визуализируют задачи при помощи доски и стикеров либо специальных онлайн-инструментов.
Задачи перемещаются между столбцами, обозначающими их статус. Такой подход позволяет эффективно расставлять приоритеты, контролировать прогресс выполнения проекта, а также ограничивать объем незавершенной работы.
Scrum
Скрам — это методология управления проектами, в которой командой руководит Скрам-мастер. Его главная задача состоит в устранении преград на пути к завершению проекта.
Работа в команде делится на короткие повторяющиеся циклы, которые называются спринтами и обычно длятся 1-4 недели. При этом команда собирается на ежедневные митинги (стендапы), чтобы обсудить текущие задачи и препятствия, которые предстоит преодолеть.
Экстремальное программирование (XP)
Название методологии произошло от идеи использовать полезные классические методы разработки ПО, подняв их на «экстремальный» уровень.
Доступно проиллюстрирует идею XP способ «парного программирования». В этом случае один разработчик занимается написанием кода, а его коллега непрерывно просматривает и проверяет написанное, не дожидаясь окончания работы первого программиста.
Бережливое производство (Lean)
Ключевой задумкой бережливого производства является максимально экономный и разумный подход к ресурсам проекта. Методология Lean — это набор инструментов и принципов, направленных на выявление и устранение возможных потерь для ускорения процесса разработки.
В понятие потерь входят не только затраты времени, финансов и труда. Сюда же относится и нереализованный творческий потенциал команды и каждого ее участника.
Гибкая методология разработки ПО
В предыдущем тематическом посте мы рассмотрели 12 основных методологий программирования (и да, забыли Kanban). Самое время взглянуть на каждый из пунктов подробнее, познав суть, преимущества и недостатки, область применения. Начнем с одного из фундаментальных понятий — Agile-разработки.
Историческая справка
В 1970 году Уинстон Ройс опубликовал статью под названием «Управление разработкой больших программных систем» (Winston Royce, «Managing the Development of Large Software Systems»). В ней он жестко прошелся по традиционной каскадной модели, показав, что при неитерационной разработке качество продукта получается низкое, а цена каждой ошибки начального уровня велика. Кстати, именно Ройс впервые ввел понятие водопада для описания последовательного программирования.
В качестве альтернативы он привел гибкую модель разработки, когда продукт разрабатывается одновременно несколькими группами программистов, а объем определяется порядком итерации. Алгоритм такой: сначала планируется, создается и тестируются базовые возможности приложения, оно получает фидбэк от клиентов или руководства, после чего устраняются недостатки, добавляется функциональность, цикл повторяется вновь и так далее до бесконечности. В идеале каждая итерация должна занимать 2−4 недели, занятость программистов на всех этапах создания продукта должна быть равной.
Курица, яйцо и манифест
Идея гибкой разработки получила массу поклонников и, как следствие, ответвлений. Чтобы хоть как-то объединить их, в 2001 году свет увидел Agile Manifesto — идеологический набор правил разработки, что-то вроде «Цели и задачи в области качества» на предприятиях. Он содержит 4 идеи и 12 принципов, описанных в том числе на русском языке. Основа — регламентация приоритета между документами, инструментами и человеческими отношениями. В Agile ответ категоричен — люди и их желания первичны. Описанное в манифесте не является чем-то уникальным, подавляющее большинство моделей и методологий разработки основываются на том, что клиент всегда прав, а исполнитель должен иметь мотивацию и соответствующие условия труда. Однако именно здесь описанное стоит понимать буквально.
Основные этапы
Однако вернёмся к концепции гибкой разработки. Графически её можно представить следующим образом:
Важно помнить, что Agile — это общая концепция. Где-то под циклом понимается путь от анализа и планирования до выпуска, где-то это просто этап разработки, связанный с определённым уровнем сложности. Но везде есть 4 стадии:
- Планирование. Ограниченный по времени этап из-за большого числа итераций и постоянно меняющихся требований.
- Обратная связь. Она может поступать от клиентов, программистов, тестировщиков и самих разработчиков — любых заинтересованных лиц.
- Реализация. Собственно сама разработка кода и графики.
- Тестирование. Автоматическое или ручное выявление ошибок и несоответствий требованиям заказчика.
Описанная концепция универсальна для всех гибких методологий, которые также имеют общие плюсы и минусы.
Преимущества и недостатки
Начнём с плюсов:
- Максимальная удовлетворённость клиента. У него есть постоянный контакт с разработчиками, его пожелания быстро находят отклик в проекте.
- Благоприятная атмосфера в коллективе. Даже в случае разногласий эффективнее все решать словами.
- Высокие цели. Постоянный фидбек предполагает внимание к мелочам, эргономике, соответствию трендам.
- Безопасность. Множество итераций исключает существование ошибок, допущенных в самом начале.
Но есть и минусы:
- Слабое внимание к документации. В случае возникновения претензий и конфликтных ситуаций аргументов в свою защиту у исполнителя просто не будет.
- Проблемы с реализацией комплексных продуктов. Если в самом начале разработки были заложены ограничения — на поздних этапах исправлять их будет сложно.
- Вероятность отказа клиентов в процессе разработки. Если у заказчика нет четкого понимания, что он хочет видеть на выходе — выполнять его требования очень сложно.
- Влияние иерархии. Руководители принимают все решения, так как все процессы цикла реализуются параллельно. Важность рядовых программистов минимальна.
Agile-модель будет очень полезна начинающим компаниями и стартапам, когда необходимо привлекать клиентов и завоевывать авторитет. В крупных компаниях Agile в чистом виде применяется редко, лишь для отдельных проектов или отделов.
Что почитать
Отечественный и зарубежный рынок насыщен книгами по гибкой разработке, поэтому интересующимся не составит труда найти себе подходящее чтиво. Вот мой список ТОП-3:
- «Постигая Agile. Ценности, принципы, методологии», Эндрю Стеллман, Дженнифер Грин. Издательство O’Reilly редко разочаровывает, эта книга — определённо не исключение. В ней вы узнаете и про общую концепцию, и подробнее про Scum, Kanban, XP и Lean.
- «Гибкая разработка программ на Java и C++. Принципы, паттерны и методики», Роберт С. Мартин. Agile в прикладном применении.
- «Пользовательские истории. Гибкая разработка программного обеспечения», Майк Кон. Истории правильного и неправильного применения гибкой разработки ПО, советы по внедрению конкретных методологий.
Манифест гласит, что отношение всегда стоит над документами. Поэтому не пытайтесь найти книгу, где будут строго описаны действия по внедрению гибкой модели. В основе Agile лежит коллектив единомышленников, а остальное — специфика работы и ваши личные пожелания.
При подготовке материала использовались источники:
https://gerstudent.github.io/posts/Agile/
https://gb.ru/posts/how_to_agile