Экстремальное программирование (Extreme Programming, XP) — это один из фреймворков гибкой разработки (Agile), который сфокусирован на инженерных практиках и повышении качества как самого продукта, так и жизни команды. В отличие от других подходов, XP даёт конкретные рекомендации, как именно писать код, проводить тестирование и организовывать работу, чтобы справляться с постоянно меняющимися требованиями заказчика.

Когда стоит применять XP?

Эта методология особенно эффективна в ситуациях с высокой неопределённостью и риском:

  • Когда требования к продукту постоянно меняются.
  • Если проект ограничен жёсткими сроками и используются новые, непроверенные технологии.
  • Когда команда разработки небольшая и работает в одном месте.
  • Если у вас есть возможность полностью автоматизировать процесс тестирования.

Пять ключевых ценностей XP

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

  • Коммуникация. Разработка — это командный вид спорта, и успех напрямую зависит от качества общения. Лучший формат — живой диалог у доски, когда можно быстро набросать схему и обсудить идею.
  • Простота. Нужно делать только то, что необходимо прямо сейчас, и самым простым из возможных способов. Не стоит усложнять код и добавлять функции, которые могут пригодиться в будущем.
  • Обратная связь. Постоянная информация о том, что получилось, а что нет, позволяет команде вовремя корректировать курс. Это касается и отзывов заказчика, и результатов тестирования, и мнения коллег.
  • Смелость. Чтобы быть эффективными, нужно не бояться признавать ошибки, отказываться от неудачных решений, экспериментировать и говорить руководству о проблемах.
  • Уважение. Каждый член команды уважает коллег, их мнение и вклад в общее дело. Это основа для здоровой коммуникации и продуктивной совместной работы.

Двенадцать ключевых практик XP

Изначально XP включал 12 практик. Некоторые из них со временем трансформировались, но их суть остаётся неизменной.

  • Планирование игры. Заказчик описывает нужные функции в виде коротких пользовательских историй, а команда оценивает их сложность и сроки.
  • Частые небольшие релизы. Работа разбивается на короткие итерации, а новая версия продукта выходит как можно чаще.
  • Метафора. Команда придумывает общий образ системы, чтобы у всех было единое понимание того, что они создают.
  • Простой дизайн. Код должен быть максимально простым, без избыточных элементов, которые не нужны для решения текущих задач.
  • Тестирование. Разработчики сначала пишут автоматические тесты, а только потом код, который должен эти тесты пройти.
  • Рефакторинг. Постоянное улучшение структуры кода без изменения его поведения: удаление дублирования, упрощение логики.
  • Парное программирование. Два разработчика работают за одним компьютером. Один пишет код, а второй анализирует его в реальном времени.
  • Коллективное владение кодом. Любой член команды может взять на себя доработку любого участка кода, что позволяет распределять задачи гибко.
  • Непрерывная интеграция. Код вливается в общий репозиторий несколько раз в день, и после каждого вливания автоматически запускаются тесты.
  • 40-часовая рабочая неделя. Команда не должна работать сверхурочно. Выгорание и усталость убивают качество и производительность.
  • Заказчик в команде. Представитель бизнеса постоянно находится в команде и оперативно отвечает на все вопросы, связанные с требованиями.
  • Единый стандарт кода. Все пишут в едином стиле, поэтому код легко читать и поддерживать любому члену команды.

Практики XP в современном прочтении

С годами набор практик был дополнен и уточнён. Вот ключевые элементы современного экстремального программирования.

  • Работайте вместе. Поскольку живое общение — главный инструмент, вся команда должна сидеть в одном пространстве без перегородок.
  • Полная команда. В команду входят все, кто необходим для создания продукта: от заказчика и аналитиков до тестировщиков и разработчиков.
  • Прозрачное рабочее пространство. Информацию о прогрессе, планах и проблемах вывешивают на всеобщее обозрение.
  • Энергичная работа. Сотрудники должны высыпаться, быть здоровыми и не перегруженными. Только в таком состоянии возможна творческая и продуктивная работа.
  • Еженедельный цикл. Команда планирует и выполняет работу недельными итерациями, в конце которых у неё всегда есть работающий продукт для демонстрации заказчику.
  • Ежеквартальный цикл. Это горизонт планирования для заказчика. Он определяет, какие возможности продукта будут готовы в ближайшие три месяца.
  • Свободное время (слак). В план всегда закладывают небольшой резерв на случай непредвиденных задержек.
  • Десятиминутная сборка. Вся система должна собираться, а все тесты прогоняться не дольше 10 минут, чтобы их можно было запускать после каждого изменения.
  • Инкрементальный дизайн. Архитектура системы создаётся постепенно, по мере поступления новых требований.

Роли в XP

В экстремальном программировании нет строгих ролей, как, например, в Scrum. Однако выделяют несколько ключевых участников.

  • Заказчик. Принимает все бизнес-решения: определяет, что должна делать система, в каком порядке, и на какую сумму бюджета можно рассчитывать.
  • Разработчик. Все члены команды, кроме заказчика и вспомогательных ролей, считаются разработчиками. Именно они реализуют пользовательские истории.
  • Трекер. Необязательная роль. Один из разработчиков в свободное время отслеживает метрики, например, скорость команды и количество ошибок.
  • Коуч. Внешний консультант, который помогает команде освоить практики XP и избежать типичных ошибок новичков.

XP в сравнении с другими подходами

Главное отличие XP от других гибких методологий — акцент на инженерных практиках. Если, например, Scrum даёт общие рамки для организации работы, то XP детально описывает, как именно писать код, тестировать его и проектировать архитектуру. Это не значит, что подходы несовместимы. Многие команды используют Scrum для управления проектом, а инженерные практики берут из XP.

Происхождение и влияние

Экстремальное программирование зародилось в середине 1990-х годов, когда Кента Бека пригласили для спасения проекта по расчёту зарплат в Chrysler. Он перестроил процесс разработки, и к команде присоединились Рон Джеффрис и другие известные в будущем специалисты. Опыт этого проекта лёг в основу книг, которые и принесли XP мировую известность. Главный вклад XP в индустрию — это набор дисциплинированных инженерных практик, которые позволяют создавать качественный код, даже когда требования постоянно меняются.

Жизненный цикл проекта в XP

Проект начинается с того, что заказчик описывает желаемый функционал в виде пользовательских историй. Команда оценивает каждую историю, а заказчик расставляет приоритеты. Если какая-то история вызывает сомнения, команда проводит исследовательский этап — «шпильку», чтобы прояснить все технические детали. Затем создаётся план релиза — набор историй, которые будут готовы к определённой дате (кварталу). После этого команда запускает серию недельных итераций. В начале каждой итерации заказчик выбирает истории, которые будут реализованы на этой неделе. Команда разбивает их на задачи и приступает к работе. В конце итерации заказчик получает рабочий инкремент продукта и принимает решение, продолжать проект или остановиться.