В этой главе дается обзор экстремального программирования.
Что такое Agile?
Слово «проворный» означает —
-
Способен двигать своим телом быстро и легко.
-
Умеет думать быстро и четко.
Способен двигать своим телом быстро и легко.
Умеет думать быстро и четко.
В бизнесе «гибкая» используется для описания способов планирования и выполнения работы, при которой понимается, что внесение изменений по мере необходимости является важной частью работы. Бизнес-способность означает, что компания всегда в состоянии учитывать изменения на рынке.
Ссылка: кембриджские словари онлайн.
В разработке программного обеспечения термин «гибкий» адаптирован для обозначения «способности реагировать на изменения — изменения в требованиях, технологиях и людях».
Agile Manifesto
Команда разработчиков программного обеспечения опубликовала Agile Manifesto в 2001 году, подчеркивая важность команды разработчиков, учитывая изменяющиеся требования и участие клиентов.
Agile Manifesto утверждает, что —
Мы раскрываем лучшие способы разработки программного обеспечения, делая это и помогая другим делать это. Благодаря этой работе мы пришли к оценке —
-
Люди и взаимодействия по процессам и инструментам.
-
Рабочая программа над исчерпывающей документацией.
-
Сотрудничество с заказчиком по договору.
-
Реагировать на изменения в соответствии с планом.
Люди и взаимодействия по процессам и инструментам.
Рабочая программа над исчерпывающей документацией.
Сотрудничество с заказчиком по договору.
Реагировать на изменения в соответствии с планом.
То есть, хотя в элементах справа есть ценность, мы слева оцениваем элементы больше.
Характеристики ловкости
Ниже приведены характеристики ловкости —
-
Гибкость в Agile Software Development ориентирована на культуру всей команды с многопрофильными, многофункциональными командами, которые наделены полномочиями и самоорганизуются.
-
Это способствует совместной ответственности и подотчетности.
-
Облегчает эффективное общение и постоянное сотрудничество.
-
Подход всей команды позволяет избежать задержек и времени ожидания.
-
Частые и постоянные поставки обеспечивают быструю обратную связь, что, в свою очередь, позволяет команде соответствовать требованиям.
-
Совместная работа способствует своевременному внедрению различных точек зрения, исправлению дефектов и внесению изменений.
-
Прогресс постоянен, устойчив и предсказуем, подчеркивая прозрачность.
Гибкость в Agile Software Development ориентирована на культуру всей команды с многопрофильными, многофункциональными командами, которые наделены полномочиями и самоорганизуются.
Это способствует совместной ответственности и подотчетности.
Облегчает эффективное общение и постоянное сотрудничество.
Подход всей команды позволяет избежать задержек и времени ожидания.
Частые и постоянные поставки обеспечивают быструю обратную связь, что, в свою очередь, позволяет команде соответствовать требованиям.
Совместная работа способствует своевременному внедрению различных точек зрения, исправлению дефектов и внесению изменений.
Прогресс постоянен, устойчив и предсказуем, подчеркивая прозрачность.
Тенденции разработки программного обеспечения
Следующие тенденции наблюдаются в разработке программного обеспечения —
-
Соберите требования до начала разработки. Однако, если требования будут изменены позже, обычно отмечается следующее:
-
Сопротивление изменениям на более поздней стадии развития.
-
Существует требование строгого процесса изменений, который включает в себя плату управления изменениями, которая может даже выдвигать изменения в более поздние выпуски.
-
Доставка товара с устаревшими требованиями, не отвечающими ожиданиям клиента.
-
Невозможность учитывать неизбежные изменения домена и технологических изменений в рамках бюджета.
-
-
Находите и устраняйте дефекты на ранних этапах жизненного цикла разработки, чтобы сократить затраты на их устранение.
-
Тестирование начинается только после того, как кодирование завершено, и тестирование считается обязанностью тестировщика, хотя тестер не участвует в разработке.
-
Измеряйте и отслеживайте сам процесс. Это становится дорогим из-за —
-
Мониторинг и отслеживание на уровне задач и на уровне ресурсов.
-
Определение измерений для руководства разработкой и измерение каждой деятельности в разработке.
-
Управленческое вмешательство.
-
-
Разрабатывайте, анализируйте и проверяйте модели перед разработкой.
-
Модель должна быть использована в качестве основы. Однако сосредоточение внимания на модели, а не на разработке, которая имеет решающее значение, не даст ожидаемых результатов.
-
-
Кодированию, которое является сердцем развития, не уделяется достаточного внимания. Причины, являющиеся —
-
Разработчики, которые отвечают за производство, обычно не поддерживают постоянную связь с заказчиками.
-
Кодирование рассматривается как перевод дизайна, и эффективная реализация кода практически никогда не возвращается в дизайн.
-
-
Тестирование считается шлюзом для проверки дефектов перед доставкой.
-
Переполнения графика на более ранних этапах разработки компенсируются за счет игнорирования требований к испытаниям для обеспечения своевременных поставок.
-
Это приводит к перерасходу средств на устранение дефектов после доставки.
-
Тестеры несут ответственность и отвечают за качество продукции, хотя они не участвовали в течение всего процесса разработки.
-
-
Ограничение ресурсов (в основном команды) для размещения бюджета приводит к —
-
Ресурс перераспределен
-
Командное выгорание.
-
Потеря в эффективном использовании командных компетенций.
-
Истощение.
-
Соберите требования до начала разработки. Однако, если требования будут изменены позже, обычно отмечается следующее:
Сопротивление изменениям на более поздней стадии развития.
Существует требование строгого процесса изменений, который включает в себя плату управления изменениями, которая может даже выдвигать изменения в более поздние выпуски.
Доставка товара с устаревшими требованиями, не отвечающими ожиданиям клиента.
Невозможность учитывать неизбежные изменения домена и технологических изменений в рамках бюджета.
Находите и устраняйте дефекты на ранних этапах жизненного цикла разработки, чтобы сократить затраты на их устранение.
Тестирование начинается только после того, как кодирование завершено, и тестирование считается обязанностью тестировщика, хотя тестер не участвует в разработке.
Измеряйте и отслеживайте сам процесс. Это становится дорогим из-за —
Мониторинг и отслеживание на уровне задач и на уровне ресурсов.
Определение измерений для руководства разработкой и измерение каждой деятельности в разработке.
Управленческое вмешательство.
Разрабатывайте, анализируйте и проверяйте модели перед разработкой.
Модель должна быть использована в качестве основы. Однако сосредоточение внимания на модели, а не на разработке, которая имеет решающее значение, не даст ожидаемых результатов.
Кодированию, которое является сердцем развития, не уделяется достаточного внимания. Причины, являющиеся —
Разработчики, которые отвечают за производство, обычно не поддерживают постоянную связь с заказчиками.
Кодирование рассматривается как перевод дизайна, и эффективная реализация кода практически никогда не возвращается в дизайн.
Тестирование считается шлюзом для проверки дефектов перед доставкой.
Переполнения графика на более ранних этапах разработки компенсируются за счет игнорирования требований к испытаниям для обеспечения своевременных поставок.
Это приводит к перерасходу средств на устранение дефектов после доставки.
Тестеры несут ответственность и отвечают за качество продукции, хотя они не участвовали в течение всего процесса разработки.
Ограничение ресурсов (в основном команды) для размещения бюджета приводит к —
Ресурс перераспределен
Командное выгорание.
Потеря в эффективном использовании командных компетенций.
Истощение.
Экстремальное программирование — способ справиться с общими недостатками
Разработка программного обеспечения включает в себя —
-
Творческий подход
-
Обучение и совершенствование через испытания и ошибки
-
Итерации
Творческий подход
Обучение и совершенствование через испытания и ошибки
Итерации
Экстремальное программирование основывается на этих действиях и кодировании. Это детальное (не единственное) проектное задание с многочисленными тесными циклами обратной связи посредством эффективной реализации, непрерывного тестирования и рефакторинга.
Экстремальное программирование основано на следующих значениях —
-
связь
-
Простота
-
Обратная связь
-
бодрость
-
уважение
связь
Простота
Обратная связь
бодрость
уважение
Что такое экстремальное программирование?
XP — это легкий, эффективный, с низким уровнем риска, гибкий, предсказуемый, научный и интересный способ разработки программного обеспечения.
E x treme P rogramming (XP) была задумана и разработана для удовлетворения особых потребностей разработчиков программного обеспечения небольшими группами перед лицом неопределенных и меняющихся требований.
Экстремальное программирование — одна из методологий разработки программного обеспечения Agile. Он предоставляет ценности и принципы для руководства поведением команды. Ожидается, что команда самоорганизуется. Экстремальное программирование предоставляет конкретные основные практики, где —
-
Каждая практика проста и самодостаточна.
-
Сочетание практик приводит к более сложному и возникающему поведению.
Каждая практика проста и самодостаточна.
Сочетание практик приводит к более сложному и возникающему поведению.
Принять изменения
Ключевое допущение экстремального программирования заключается в том, что стоимость изменения программы может оставаться в основном постоянной с течением времени.
Это может быть достигнуто с —
-
Акцент на постоянную обратную связь с клиентом
-
Короткие итерации
-
Дизайн и редизайн
-
Кодирование и тестирование часто
-
Устранение дефектов на ранней стадии, что снижает затраты
-
Вовлечение клиента в процесс разработки
-
Доставка работающего продукта клиенту
Акцент на постоянную обратную связь с клиентом
Короткие итерации
Дизайн и редизайн
Кодирование и тестирование часто
Устранение дефектов на ранней стадии, что снижает затраты
Вовлечение клиента в процесс разработки
Доставка работающего продукта клиенту
Экстремальное программирование в двух словах
Экстремальное программирование включает в себя —
-
Написание модульных тестов перед программированием и постоянное выполнение всех тестов. Модульные тесты автоматизированы и устраняют дефекты на ранней стадии, тем самым снижая затраты.
-
Начиная с простого дизайна, достаточного для написания кода под рукой, и при необходимости переделывая.
-
Программирование в парах (так называемое парное программирование), с двумя программистами на одном экране, по очереди используя клавиатуру. В то время как один из них находится на клавиатуре, другой постоянно просматривает и обеспечивает ввод.
-
Интеграция и тестирование всей системы несколько раз в день.
-
Быстрое внедрение минимальной рабочей системы в производство и ее обновление при необходимости.
-
Постоянное вовлечение клиента и постоянная обратная связь.
Написание модульных тестов перед программированием и постоянное выполнение всех тестов. Модульные тесты автоматизированы и устраняют дефекты на ранней стадии, тем самым снижая затраты.
Начиная с простого дизайна, достаточного для написания кода под рукой, и при необходимости переделывая.
Программирование в парах (так называемое парное программирование), с двумя программистами на одном экране, по очереди используя клавиатуру. В то время как один из них находится на клавиатуре, другой постоянно просматривает и обеспечивает ввод.
Интеграция и тестирование всей системы несколько раз в день.
Быстрое внедрение минимальной рабочей системы в производство и ее обновление при необходимости.
Постоянное вовлечение клиента и постоянная обратная связь.
Итерации облегчают адаптационные изменения по мере развития программного обеспечения в соответствии с меняющимися требованиями.
Почему это называется «Экстрим»?
Экстремальное программирование выводит эффективные принципы и практики на экстремальные уровни.
-
Проверка кода эффективна, так как код проверяется постоянно.
-
Тестирование является эффективным, поскольку существует постоянная регрессия и тестирование.
-
Дизайн эффективен, так как каждый должен делать рефакторинг ежедневно.
-
Интеграционное тестирование важно, так как интегрируйте и тестируйте несколько раз в день.
-
Короткие итерации эффективны как игра планирования для планирования выпуска и итерационного планирования.
Проверка кода эффективна, так как код проверяется постоянно.
Тестирование является эффективным, поскольку существует постоянная регрессия и тестирование.
Дизайн эффективен, так как каждый должен делать рефакторинг ежедневно.
Интеграционное тестирование важно, так как интегрируйте и тестируйте несколько раз в день.
Короткие итерации эффективны как игра планирования для планирования выпуска и итерационного планирования.
История экстремального программирования
Кент Бек, Уорд Каннингем и Рон Джеффрис сформулировали экстремальное программирование в 1999 году. Другими участниками являются Роберт Мартин и Мартин Фаулер.
В середине 80-х Кент Бек и Уорд Каннингем инициировали парное программирование в Tektronix. В 80-х и 90-х годах компания Smalltalk Culture произвела рефакторинг, непрерывную интеграцию, постоянное тестирование и активное участие клиентов. Эта культура была позже распространена на другие среды.
В начале 90-х годов основные ценности были разработаны в рамках сообщества Patterns, Hillside Group. В 1995 году Кент суммировал их в Besttalk Best Practices, а в 1996 году Уорд суммировал их в эпизодах.
В 1996 году Кент добавил юнит-тестирование и метафору в Хьюитт. В 1996 году Кент принял проект Chrysler C3, к которому в качестве тренера был добавлен Рон Джеффрис. Практики были доработаны на C3 и опубликованы в Wiki.
Скрам-практики были включены и адаптированы как планирование игры. В 1999 году Кент опубликовал свою книгу «Объяснение экстремального программирования». В том же году Фаулер опубликовал свою книгу «Рефакторинг».
Экстремальное программирование развивается с тех пор, и развитие продолжается до сегодняшнего дня.
Успех в промышленности
Успех проектов, которые следуют практикам экстремального программирования, обусловлен —
-
Быстрое развитие.
-
Немедленное реагирование на меняющиеся требования клиента.
-
Фокус на низких показателях брака.
-
Система, возвращающая постоянное и постоянное значение клиенту.
-
Высокая удовлетворенность клиентов.
-
Снижение затрат.
-
Сплоченность команды и удовлетворенность сотрудников.
Быстрое развитие.
Немедленное реагирование на меняющиеся требования клиента.
Фокус на низких показателях брака.
Система, возвращающая постоянное и постоянное значение клиенту.
Высокая удовлетворенность клиентов.
Снижение затрат.
Сплоченность команды и удовлетворенность сотрудников.
Экстремальные преимущества программирования
Экстремальное программирование решает следующие проблемы, с которыми часто сталкиваются в проектах разработки программного обеспечения:
Сдвинутые графики — и достижимые циклы разработки гарантируют своевременные поставки.
Отмененные проекты — ориентация на постоянное участие клиентов обеспечивает прозрачность работы с клиентами и немедленное решение любых вопросов.
Затраты, понесенные в результате изменений. Обширное и постоянное тестирование гарантирует, что изменения не нарушат существующую функциональность. Работающая рабочая система всегда обеспечивает достаточное время для внесения изменений, чтобы текущие операции не были затронуты.
Дефекты производства и после доставки: акцент сделан — модульные тесты для раннего выявления и устранения дефектов.
Неправильное понимание бизнеса и / или предметной области — Включение клиента в команду гарантирует постоянное общение и разъяснения.
Изменения в бизнесе — Изменения считаются неизбежными и принимаются в любой момент времени.
Текучесть кадров — Интенсивное командное сотрудничество обеспечивает энтузиазм и добрую волю. Сплоченность многопрофильных дисциплин способствует развитию командного духа.