Практики экстремального программирования - Extreme programming practices

Экстремальное программирование (XP) является гибкая разработка программного обеспечения методология, используемая для реализации программного обеспечения проекты. В этой статье подробно описаны практики, используемые в этой методологии. Экстремальное программирование включает 12 практик, сгруппированных в четыре области, основанных на лучшие практики из программная инженерия.[1]

Обратная связь с мелким масштабом

Парное программирование

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

Пары не фиксированы; программисты часто меняют партнеров, так что все знают, что делают, и все остаются знакомыми со всей системой, даже с частями, не соответствующими их навыкам. Таким образом, парное программирование также может улучшить общение в команде. (Это также идет рука об руку с концепцией коллективной собственности).

Планирование игры

Основной процесс планирования в экстремальном программировании называется «Игра в планирование». Игра - это встреча, которая проводится один раз за итерацию, обычно раз в неделю. Процесс планирования разделен на две части:

  • Планирование выпуска: Это сосредоточено на определении того, какие требования включены в какие краткосрочные выпуски и когда они должны быть выполнены. И заказчики, и разработчики являются частью этого. Планирование выпуска состоит из трех этапов:
    • Этап исследования: на этом этапе заказчик предоставляет краткий список важных требований к системе. Они будут записаны на история пользователя открытки.
    • Фаза принятия обязательств: на этапе принятия обязательств бизнес и разработчики обязуются выполнять функции, которые будут включены, и указать дату следующего выпуска.
    • Этап управления: на этапе управления план может быть скорректирован, могут быть добавлены новые требования и / или существующие требования могут быть изменены или удалены.
  • Планирование итераций: Это планы действий и задач разработчиков. Заказчик в этом процессе не участвует. Планирование итерации также состоит из трех этапов:
    • Этап исследования: на этом этапе требования будут переведены на различные задачи. Задания записываются в карточки заданий.
    • Фаза принятия обязательств: задачи будут назначены программистам, и будет оценено время, необходимое для их выполнения.
    • Фаза управления: задачи выполняются, и конечный результат сопоставляется с исходной пользовательской историей.

Цель игры в планирование - привести продукт к доставке. Вместо того, чтобы предсказывать точные даты, когда результаты будут необходимы и произведены, что сложно сделать, он стремится «направить проект» к реализации, используя простой подход.[2] Подход «Игра в планирование» также был принят непрограммными проектами и командами в контексте гибкость бизнеса.[3]

Планирование выпуска

Фаза исследования

Это итеративный процесс сбора требований и оценки влияния каждого из этих требований на работу.

  • Напишите историю: у бизнеса возникла проблема; во время встречи разработчик попытается определить эту проблему и получить требования. На основе бизнес-задачи рассказ (история пользователя ) должен быть написан. Это делается бизнесом, когда они указывают, что они хотят от части системы. Важно, что развитие никак не повлияет на эту историю. История написана на карточке пользовательской истории.
  • Оценить историю: разработка оценивает, сколько времени потребуется для выполнения работы, подразумеваемой карточкой истории. Разработка также может создавать пиковые решения для анализа или решения проблемы. Эти решения используются для оценки и отбрасываются, когда каждый получает четкое представление о проблеме. Опять же, это может не повлиять на бизнес-требования.
  • Разделите историю: каждая критическая сложность дизайна должна быть рассмотрена до начала планирования итераций. Если разработчик не может оценить историю, ее нужно разделить и написать заново.

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

Фаза обязательства

Этот этап включает определение затрат, выгод и влияния на график. Он состоит из четырех компонентов:

  • Сортировать по значению: бизнес сортирует пользовательские истории по Ценность бизнеса.
  • Сортировать по риску: разработка сортирует истории по риску.
  • Установить скорость: разработка определяет, с какой скоростью они могут выполнять проект.
  • Выберите объем: будут выбраны пользовательские истории, которые будут завершены в следующем выпуске. На основании пользовательских историй определяется дата релиза.
Сортировать по значению

Деловая сторона сортирует пользовательские истории по ценности для бизнеса. Они сложат их в три стопки:

  • Критично: истории, без которых система не может функционировать или не имеет смысла.
  • Существенный Ценность бизнеса: Некритические пользовательские истории, имеющие значительную ценность для бизнеса.
  • Приятно иметь: пользовательские истории, не имеющие особой ценности для бизнеса.
Сортировать по риску

Разработчики сортируют пользовательские истории по степени риска. Они также делятся на три группы: истории пользователей с низким, средним и высоким уровнем риска. Ниже приводится пример подхода к этому:

  • Определите индекс риска: дайте каждой пользовательской истории индекс от 0 до 2 по каждому из следующих факторов:
    • Полнота (знаем ли мы все подробности истории?)
      • Завершено (0)
      • Незавершенный (1)
      • Неизвестно (2)
    • Волатильность (может ли она измениться?)
      • низкий (0)
      • средний (1)
      • высокий (2)
    • Сложность (насколько сложно построить?)
      • простой (0)
      • стандарт (1)
      • сложный (2)

Добавляются все индексы для пользовательской истории, присваивая пользовательским историям индекс риска: низкий (0–1), средний (2–4) или высокий (5–6).

Фаза рулевого управления

На этапе управления программисты и бизнесмены могут «управлять» процессом. То есть они могут вносить изменения. Индивидуальные пользовательские истории или относительные приоритеты разных пользовательских историй могут измениться; оценки могут оказаться неверными. Это шанс соответствующим образом скорректировать план.

Планирование итераций

Учитывая, что нужно спланировать сюжетные точки скорости команды. Продолжительность итерации может составлять от 1 до 3 недель.

Фаза исследования

Фаза исследования итерационного планирования заключается в создании задач и оценке времени их выполнения.

  • Переведите требование в задачи: разместите на карточках задач.
  • Объединить / разделить задачу: если программист не может оценить задачу, потому что она слишком мала или слишком велика, программист должен будет объединить или разделить задачу.
  • Оценить задачу: оценить время, необходимое для выполнения задачи.
Фаза обязательства

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

  • Программист принимает задачу: каждый программист выбирает задачу, за которую он или она берет на себя ответственность.
  • Программист оценивает задачу: поскольку теперь за задачу отвечает программист, он или она должен дать окончательную оценку задачи.
  • Установите коэффициент загрузки: коэффициент загрузки представляет собой идеальное время практической разработки на одного программиста в пределах одной итерации. Например, в 40-часовой рабочей неделе, когда 5 часов посвящены собраниям, это будет не более 35 часов.
  • Балансировка: когда всем программистам в команде были назначены задачи, выполняется сравнение между расчетным временем выполнения задач и коэффициентом загрузки. Затем задачи распределяются между программистами. Если программист перегружен, другие программисты должны взять на себя некоторые из его или ее задач, и наоборот.
Фаза рулевого управления

Реализация задач выполняется на этапе управления итерацией.

  • Получите карточку задачи: программист получает карточку задачи для одной из задач, которую он или она взяли на себя.
  • Найдите партнера: Программист выполнит эту задачу вместе с другим программистом. Это обсуждается далее в практике. Парное программирование.
  • Разработайте задачу: при необходимости программисты разработают функциональность задачи.
  • Реализуйте задачу с помощью Разработка через тестирование (TDD) (см. Ниже)
  • Запустить функциональный тест: запускаются функциональные тесты (на основе требований в соответствующей пользовательской истории и карточке задачи).

Разработка через тестирование

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

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

  • Написать модульный тест: Программисты пишут минимальный тест, который должен завершиться неудачно, потому что функциональность не была полностью реализована в производственном коде.
  • Посмотрите, как новый тест не прошел: программисты проверяют, что тест действительно не прошел. Хотя это может показаться пустой тратой времени, этот шаг имеет решающее значение, поскольку он подтверждает правильность вашего мнения о состоянии производственного кода. Если тест не завершился ошибкой, программисты должны определить, есть ли ошибка в тестовом коде или что производственный код поддерживает функциональные возможности, описанные в новом тесте.
  • Напишите код: программисты пишут ровно столько производственного кода, чтобы новый тест прошел.
  • Выполнить тест: модульные тесты выполняются для проверки того, что новый производственный код проходит новый тест и что никакие другие тесты не завершаются неудачно.
  • Рефакторинг: Удалить все код пахнет как из производственного, так и из тестового кода.

Для более интенсивной версии описанного выше процесса см. Три правила TDD дяди Боба.[4]

Вся команда

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

Непрерывный процесс

Непрерывная интеграция

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

Улучшение дизайна

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

Небольшие релизы

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

Общее понимание

Стандарт кодирования

Стандарт кодирования - это согласованный набор правил, которых вся команда разработчиков соглашается придерживаться на протяжении всего проекта. Стандарт определяет согласованный стиль и формат исходного кода в рамках выбранного языка программирования, а также различные программные конструкции и шаблоны, которых следует избегать, чтобы снизить вероятность дефектов.[5] Стандарт кодирования может быть стандартным соглашением, указанным поставщиком языка (например, Соглашение о коде для языка программирования Java, рекомендованным Sun), или пользовательским соглашением, определенным группой разработчиков.

Сторонники экстремального программирования отстаивают код, который самодокументирующий в максимально возможной степени. Это снижает потребность в комментарии к коду, который может рассинхронизироваться с самим кодом.[6]

Коллективное владение кодом

Коллективное владение кодом (также известное как «владение командным кодом» и «общий код») означает, что каждый несет ответственность за весь код; поэтому каждый может изменить любую часть кода. Коллективное владение кодом - это не только политика организации, но и чувство. «Разработчики больше ощущают владение кодом команды, когда они понимают контекст системы, внесли свой вклад в рассматриваемый код, воспринимают качество кода как высокое, верят, что продукт удовлетворит потребности пользователей, и ощущают высокую сплоченность команды».[7] Парное программирование, особенно чередование пар с перекрытием, способствует этой практике: работая в разных парах, программисты лучше понимают контекст системы и вносят свой вклад в большее количество областей кодовой базы.

Коллективное владение кодом может ускорить разработку, потому что разработчик, обнаруживший ошибку, может немедленно исправить ее, что может уменьшить количество ошибок в целом. Однако программисты могут также вносить ошибки при изменении кода, который они плохо понимают. Достаточно четко определенные модульные тесты должны смягчить эту проблему: если непредвиденные зависимости создают ошибки, то при запуске модульных тестов они покажут сбои.

Коллективное владение кодом может привести к лучшему резервному копированию участников, более широкому распространению знаний и обучения, совместной ответственности за код, повышению качества кода и уменьшению количества доработок. Но это также может привести к усилению конфликтов между участниками, увеличению количества ошибок, изменению мыслей разработчиков и перерывам в их рассуждениях, увеличению времени разработки или меньшему пониманию кода.[8]

Простой дизайн

Программисты должны придерживаться подхода «простое лучше всего» к разработке программного обеспечения. Каждый раз, когда пишется новый фрагмент кода, автор должен спрашивать себя: «Есть ли более простой способ реализовать ту же функциональность?». Если "да", следует выбрать более простой курс. Для упрощения сложного кода также следует использовать рефакторинг.

Системная метафора

Системная метафора - это история, которую каждый - заказчик, программист и менеджер - может рассказать о том, как работает система. Это концепция именования классов и методов, которая должна помочь члену команды угадать функциональность определенного класса / метода только по его имени. Например, библиотечная система может создавать ссуды (класс) за заемщики (класс), и если элемент просрочен, он может выполнить операцию make_overdue на каталог (класс). Функциональность каждого класса или операции очевидна для всей команды.

Программист благосостояние

Устойчивый темп

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

Также в эту концепцию входит то, что люди работают лучше и творчески, если они хорошо отдохнули.

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

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

Смотрите также

Рекомендации

  1. ^ Бек, К. Объяснение экстремального программирования: примите изменения 2-й. изд. Эддисон-Уэсли, 2000, с. 54
  2. ^ Мельник, Григорий; Маурер, Франк (2004). Введение в гибкие методы: трехлетний опыт. Материалы 30-й конференции Euromicro. IEEE. С. 334–341. CiteSeerX  10.1.1.296.4732. Дои:10.1109 / EURMIC.2004.1333388.
  3. ^ Лейборн, Э. (2013). Направление гибкой организации: бережливый подход к управлению бизнесом. Лондон: Издательство по управлению ИТ: 146–150.
  4. ^ Мартин, Роберт. «Три правила TDD».
  5. ^ Колава, Адам; Хейзинга, Дорота (2007). Автоматизированное предотвращение дефектов: передовой опыт управления программным обеспечением. Пресса компьютерного общества Wiley-IEEE. п. 75. ISBN  978-0-470-04212-0.
  6. ^ http://guzdial.cc.gatech.edu/squeakbook/new-lecture-slides/xp.ppt
  7. ^ Седано, Тодд; Ральф, Пол; Перэр, Сесиль. «Практика и восприятие владения командным кодом». ACM.
  8. ^ Рибейро, Данило и Сильва, Фабио и Валенса, Диана и Фрейтас, Элида и Франса, Сезар. (2016). Преимущества и недостатки использования общего кода с точки зрения разработчиков: качественное исследование.

внешняя ссылка