Что такое гибкая разработка программного обеспечения?

Опубликовано 01 March 2020
Agile - это  термин, используемый для описания подходов к разработке программного обеспечения, в котором подчеркивается необходимость поэтапной сдачи работы, совместной работы команды, непрерывного планирования и непрерывного обучения вместо того, чтобы пытаться реализовать все сразу в конце.


Agile (перевод - гибкий, подвижный) фокусируется на поддержании процесса и создании минимально жизнеспособных продуктов (MVP), которые проходят через ряд итераций, прежде чем что-либо становится окончательным. Обратная связь собирается и осуществляется постоянно, и в целом это гораздо более динамичный процесс, когда все работают вместе для достижения одной цели.


Что такое гибкая разработка программного обеспечения?

Гибкая разработка программного обеспечения (Agile Software Development)


Scrum и другие ключевые Agile методы


Agile - это простыми словами образ мышления и набор ценностей и принципов. Agile - это способ мышления и действия. Agile - это короткие циклы, итеративные и инкрементальные поставки, быстрые сбои, обратная связь, раннее предоставление бизнес-клиентам и сотрудникам, сотрудничество и взаимодействие. Agile - это мышление, основанное на прозрачности, проверке и адаптации. Agile, однако, не состоит из каких-либо ролей, событий или артефактов. Это мышление. Например, Scrum - это одна из широко используемых платформ под эгидой Agile, которая может помочь вам стать более гибким, однако в рамках Agile-движения есть еще много фреймворков, таких как Kanban, XP, Crystal и многие другие, как показано на рисунке. ниже:


Что такое гибкая разработка программного обеспечения?

Scrum Agile umbrella (гибкие методы разработки)


Scrum


Scrum - это фреймворк, в рамках которого люди могут решать сложные адаптивные проблемы, одновременно производя и творчески поставляя продукты максимально возможной ценности. Он используется для управления программными проектами и разработки продуктов или приложений. Основное внимание уделяется стратегии разработки адаптивных продуктов, в которой многофункциональная команда работает как единое целое для достижения общей цели в течение 2-4 недель (Sprint). Он состоит из набора ценностей, артефактов, ролей, церемоний, правил и лучших практик.


Lean


Lean создан Toyota Production System, или TPS, которая произвела революцию в производстве физических товаров в 1950-х, 60-х и далее. Lean сохраняет свои позиции в производстве, но также нашел новые приложения в области знаний, помогая предприятиям во всех отраслях промышленности устранять отходы, улучшать процессы и стимулировать инновации. Разработка программного обеспечения является естественным применением методологии Lean, поскольку, как и производство, она, как правило, следует определенному процессу, имеет определенные условия принятия и приводит к получению материальной ценности. Ключевые понятия, которыми руководствуется вся практика методологии Lean, которую мы называем столпами Lean.

Принципы Lean:

  • Постоянное улучшение
  • Уважение к людям
  • Легкое лидерство


Kanban


Kanban - это метод визуального управления рабочим процессом, который популярен среди команд Lean. Фактически, 83% команд, практикующих Lean, используют Kanban для визуализации и активного управления созданием продуктов с акцентом на постоянную сдачу результатов, не перегружая команду разработчиков. Как и Scrum, Kanban - это процесс, призванный помочь командам работать более эффективно.


Канбан основан на 3 основных принципах:


  • Визуализируйте, что вы будете делать сегодня (рабочий процесс): просмотр всех элементов в контексте друг друга может быть очень информативным
  • Ограничение объема выполняемой работы (WIP): это помогает сбалансировать основанный на потоке подход, чтобы команды не начинали и не выполняли слишком много работы одновременно
  • Расширение потока: когда что-то завершено, в игру включается следующий элемент с наивысшим приоритетом из отстающих

Kanban способствует постоянному сотрудничеству и поощряет активное, постоянное обучение и совершенствование, определяя наилучший возможный командный рабочий процесс.


Метод разработки динамических систем (DSDM)


DSDM - это структура, состоящая из восьми принципов, жизненного цикла и продуктов, ролей и обязанностей, а также нескольких передовых методов. Они лежат в основе и поддерживают философию предоставления стратегически согласованных бизнес-преимуществ как можно раньше, чтобы обеспечить организации максимально возможный возврат инвестиций (ROI).


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

  • Должен иметь (M)
  • Нужно иметь (S)
  • Может иметь (С)
  • Не будет (W)

В основе DSDM Atern лежит восемь принципов [13]. Эти принципы направляют команду в том отношении, которое они должны принять, и в образе мышления, который они должны принять для последовательного выполнения.

  1. Фокус на потребности бизнеса
  2. Сдать работу вовремя
  3. Сотрудничать
  4. Никогда не ставить под угрозу качество
  5. Строить постепенно из прочного фундамента
  6. Разрабатывать итеративно
  7. Общаться непрерывно и четко
  8. Продемонстрировать контроль


Экстремальное программирование

Экстремальное программирование (XP), первоначально описанное Кентом Беком, стало одной из самых популярных и противоречивых методологий Agile. XP - это дисциплинированный подход к быстрой и непрерывной доставке высококачественного программного обеспечения. Он призван улучшить качество программного обеспечения и скорость реагирования в условиях меняющихся требований клиентов. Он способствует высокой вовлеченности клиентов, быстрым циклам обратной связи, постоянному тестированию, постоянному планированию и тесной командной работе для предоставления рабочего программного обеспечения с очень частыми интервалами, обычно каждые 1-3 недели.


Методология получила свое название от идеи, что полезные элементы традиционных практик разработки программного обеспечения выведены на «экстремальные» уровни. В качестве примера, проверки кода считаются полезной практикой. В крайнем случае, код можно постоянно пересматривать с помощью практики парного программирования.


Оригинальный метод XP основан на четырех простых ценностях - простота, общение, обратная связь и смелость.


Он также имеет двенадцать поддерживающих практик:
  • Планирование
  • Небольшие релизы
  • Приемочные тесты
  • Простой дизайн
  • Парное программирование
  • Разработка через тестирование
  • Рефакторинг
  • Непрерывная интеграция
  • Коллективный код собственности
  • Стандарты кодирования
  • Метафора
  • Устойчивый темп


Что такое гибкая разработка программного обеспечения?

Экстремальное программирование (Extreme Programming)


Функционально управляемая разработка (FDD)


Feature-Driven Development (FDD) была представлена в 1997 году Джеффом Де Лука, когда он работал в проекте разработки программного обеспечения для крупного сингапурского банка. Это итеративный и поэтапный процесс разработки программного обеспечения, а также гибкий метод разработки программного обеспечения. FDD объединяет ряд признанных в отрасли передовых практик в единое целое. Эти методы основаны на клиентских функциональных возможностях. Его главная цель - многократно и своевременно доставлять материальное, работающее программное обеспечение. Преимущество использования FDD заключается в том, что он масштабируем даже для больших команд благодаря концепции «сначала достаточно дизайна» (JEDI). Это отличное решение для поддержания контроля над гибкими, инкрементными и по своей сути сложными проектами благодаря своему функционально-ориентированному процессу.


Он состоит из пяти основных видов деятельности:
  • Разработка общей модели
  • Построение списка возможностей
  • Планирование по признаку
  • Проектирование по функции
  • Построение по функциям

Что такое гибкая разработка программного обеспечения?

Функционально управляемая разработка (Feature Driven Development (FDD)) 


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


Crystal


Методы Crystal  - это семейство методологий (семейство Crystal ), которые были разработаны Алистером Кокберном в середине 1990-х годов. Методы основаны на многолетних исследованиях и интервью команд Кокберна. Исследование Кокберна показало, что команды, с которыми он брал интервью, не следовали формальным методологиям, но все же выполняли успешные проекты. Семья Crystal  - это способ Кокберна каталогизировать то, что они сделали, что сделало проекты успешными.

Crystal методы ориентированы на:

  • Люди
  • Взаимодействие
  • Сообщество
  • Навыки и умения
  • Таланты
  • Связи


Agile Manifesto


Термин «Agile» был введен в 2001 году в Agile Manifesto. Манифест излагает принципы, определяющие лучший подход к разработке программного обеспечения. Agile Manifesto состоит из 4 важных ценностей. Способ чтения Agile Manifesto заключается не в том, что принципы указанные с правой стороны больше не имеют значения, а в движении Agile больше ценятся принципы указанные слева.

Что такое гибкая разработка программного обеспечения?

Agile manifesto


Итак, давайте посмотрим на первую строчку Agile манифеста. Эта линия утверждает, что мы ценим людей, их взаимодействие, общение и сотрудничество больше, чем наличие всевозможных обширных процессов и инструментов. Конечно, процессы и инструменты ценны, однако они гораздо ценнее, если они действительно поддерживают людей, работающих вместе и создающих отличные продукты. В наши дни мы видим, что во многих организациях процессы и инструменты сами являются целью. С гибкой точки зрения, мы ценим это по-другому. Процессы и инструменты должны помогать людям работать вместе и приносить пользу клиентам.


Принципы Agile Manifesto


Дополняя Agile Manifesto, Agile Alliance также определил набор из 12 базовых принципов, которые обеспечивают руководство и более подробное объяснение в дополнение к Agile Manifesto:

Что такое гибкая разработка программного обеспечения?



Принципы Agile Manifesto


  1. Главный принцип -  удовлетворение потребностей клиентов путем своевременной и непрерывной разработки качественного программного обеспечения.
  2. Гибкие требования, даже на поздних этапах разработки. Гибкие процессы используют изменения для обеспечения конкурентных преимуществ клиента.
  3. Сдавать работающее программное обеспечение этапами, от пары недель до нескольких месяцев, предпочитая более короткие сроки.
  4. Заказчики и разработчики должны ежедневно работать вместе на протяжении всего проекта.
  5. Создавайте проекты вокруг мотивированных людей. Дайте им среду и поддержку, в которой они нуждаются, и доверьте им выполнение работы.
  6. Самый быстрый и эффективный метод передачи информации в команду разработчиков - это личный разговор.
  7. Рабочее программное обеспечение является основной мерой прогресса.
  8. Гибкие процессы способствуют устойчивому развитию.
  9. Спонсоры, разработчики и пользователи должны иметь возможность поддерживать постоянный темп на неопределенный срок.
  10. Постоянное внимание к техническому совершенству и хорошему дизайну повышает маневренность.
  11. Простота - искусство максимизировать количество не выполненной работы - имеет важное значение.
  12. Лучшие архитектурные решения, требования и проекты возникают из самоорганизующихся команд. Через регулярные интервалы команда размышляет о том, как стать более эффективным, затем настраивает и корректирует свое поведение соответственно.


Резюме


Agile Development является одним из основных модных тенденций в индустрии разработки программного обеспечения, который представляет собой другой способ управления проектами разработки программного обеспечения. Вместо конкретного метода разработки программного обеспечения это общий термин для набора методов и практик, основанных на ценностях и принципах, выраженных в Agile Manifesto. Решения развиваются благодаря сотрудничеству между самоорганизующимися межфункциональными командами, использующими соответствующие методы для их контекста.