Экстремальное программирование (XP) — это одна из методологий Agile. Несмотря на название, некоторые практики уже стали стандартом в индустрии — например, рефакторинг и непрерывная интеграция. XP сосредоточена на упрощении процесса разработки, минимизации документации и максимизации обратной связи от заказчиков.
Какие проблемы решает экстремальное программирование
XP помогает адаптироваться к изменениям, быстро реагировать на требования клиентов и обеспечивать высокое качество продукта. Вот основные проблемы, с решением которых помогает XP:
Изменяющиеся требования: XP использует короткие итерации и частые релизы, что позволяет команде быстро адаптироваться к новым требованиям заказчика.
Качество кода: Парное программирование и постоянное рефакторинг способствуют поддержанию высокого качества кода и раннему выявлению ошибок.
Коммуникация в команде: Ежедневные встречи улучшают взаимодействие между всеми участниками проекта, способствуя быстрому решению задач.
Оценка времени и планирование: Практики «планирования выпуска» и «планирования итераций» помогают точнее оценивать время выполнения задач и эффективно распределять ресурсы.
Обратная связь и тестирование: Постоянное тестирование и интеграция позволяют быстро выявлять и исправлять ошибки, улучшая качество продукта и обеспечивая быструю обратную связь.
Если эти проблемы вам отзываются, приятного чтения. Разберемся, что из себя представляет «не такое уж в современных реалиях экстремальное» программирование — уверены, найдете много знакомого.
Пять ключевых ценностей и правил, а также 12 практик экстремального программирования
Пять ценностей экстремального программирования:
Простота — XP фокусируется на разработке того, что действительно необходимо, избегая излишней сложности.
Коммуникация — открытое и честное общение внутри команды считается критически важным для успеха проекта.
Обратная связь — XP предполагает частую и быструю обратную связь от клиентов, что позволяет оперативно адаптировать проект под требования рынка.
Смелость — команде необходима смелость для принятия решений, изменений в проекте и соблюдения высоких стандартов качества.
Уважение — каждый член команды ценится за его вклад, и от всех требуется уважительное отношение к мнениям и работе коллег.
Пять правил экстремального программирования:
Планирование — XP требует постоянной проверки проекта на жизнеспособность и адаптации плана работы.
Управление — в XP важно поддерживать баланс в рабочем процессе, обеспечивая адекватный обмен информацией и задачами.
Проектирование — начинать следует с простейшего возможного дизайна, который затем можно усложнять.
Кодирование — кодирование должно проводиться с участием клиента и предполагает парное программирование для повышения качества кода.
Тестирование — весь код должен проходить юнит-тестирование до включения в проект, при обнаружении ошибок необходимо создавать дополнительные тесты.
12 практик экстремального программирования:
Планирование выполняется с учетом всех участников проекта.
Представьте, что вы строите дом, и на начальных этапах планирования собираются все заинтересованные стороны: вы (клиент), архитектор, строители, электрики, сантехники. Все вы обсуждаете, как будет выглядеть дом, что и как будет построено, и когда будут выполнены основные этапы. Это гарантирует, что у всех есть общее понимание проекта.Клиенты участвуют в разработке тестов, что гарантирует соответствие функциональности их требованиям.
Вы, как клиент, помогаете создать список проверок на каждом этапе строительства. Вы уточняете, что нужно проверить: качество фундамента, ровность стен, работоспособность электрических систем. Вместе с архитектором и строителями вы создаете эти критерии, чтобы убедиться, что дом соответствует вашим ожиданиям.XP предполагает регулярные релизы, чтобы быстро получать обратную связь.
Каждую неделю вы приходите на стройку и осматриваете выполненные работы. Например, проверяете завершение фундамента, затем установку каркаса и так далее. Это позволяет вам дать обратную связь и убедиться, что все идет по плану.-
Дизайн должен быть максимально простым и эффективным.
Вместо сложных архитектурных решений, вы и архитектор выбираете простой и функциональный дизайн дома. Это помогает избежать сложностей в строительстве и упрощает дальнейшее обслуживание.
-
Программисты работают в парах, обмениваясь опытом и контролируя качество кода.
Строители работают в парах. Один устанавливает кирпичи, другой проверяет ровность кладки. Они обмениваются опытом и вместе контролируют качество работы, чтобы избежать ошибок и повысить эффективность.
Сначала создаются тесты, затем код.
Прежде чем начать строительство, вы с архитектором и строителями создаете список проверок для каждого этапа. Например, прежде чем залить фундамент, вы определяете, какие параметры будут проверяться, такие как глубина и ширина траншеи, качество бетона.-
Постоянное улучшение кода для увеличения его читаемости и снижения сложности.
После завершения каждого этапа строительства вы с командой проводите осмотр и делаете заметки, что можно улучшить в следующем этапе. Например, вы замечаете, что некоторые стены могли бы быть выровнены лучше, и вносите коррективы в процесс.
Любой программист может изменять любой код в проекте.
Каждый строитель имеет доступ ко всем частям проекта и может вносить изменения, если видит, что что-то можно сделать лучше или эффективнее. Например, электрик может предложить улучшение в плане разводки электрики, которое облегчит дальнейшую работу сантехнику.Код регулярно интегрируется в общую базу, что позволяет выявлять проблемы на раннем этапе.
Каждый день строители собираются, чтобы обсудить проделанную работу и интегрировать результаты. Например, после установки каркаса они проверяют, как он сочетается с фундаментом и другими элементами дома. Это помогает выявить и исправить проблемы до того, как они станут серьезными.Команда определяет реально выполнимый объем работы и следует ему.
Вместо того, чтобы планировать завершение всего дома за месяц, команда обсуждает и определяет, что можно реально сделать за неделю: залить фундамент, возвести стены первого этажа и так далее. Это помогает избежать перегрузок и стресса.Команда использует общий язык для описания проекта.
Все участники проекта — архитекторы, строители, электрики, сантехники — используют единые термины и обозначения для описания различных частей дома и этапов строительства. Это помогает избежать недопонимания и ошибок.Весь код должен соответствовать общепринятым стандартам.
Все работы выполняются в соответствии с установленными строительными нормами и стандартами. Например, установка электропроводки проводится согласно стандартам безопасности, что гарантирует качество и надежность.
Витки планирования и обратная связь в экстремальном программировании
В XP планирование и обратная связь играют центральную роль, обеспечивая адаптацию к изменяющимся требованиям и непрерывное улучшение продукта. Эти аспекты помогают команде поддерживать высокую скорость разработки и качество, предотвращая при этом устаревание или нерелевантность функционала. Ниже рассмотрим, как XP организует витки планирования и интегрирует обратную связь в процесс разработки.
Витки планирования
Планирование релиза (Release Planning): На этом этапе команда в сотрудничестве с заказчиками определяет долгосрочные цели проекта, выбирает основные функции продукта и устанавливает график релизов. Это планирование помогает определить более крупные циклы работы, которые затем детализируются в планировании итераций.
Итерационное планирование (Iteration Planning): Здесь команда определяет, какие задачи будут выполнены в течение следующего спринта. Этот процесс включает разбивку больших задач на более мелкие, управляемые части, что позволяет быстрее реагировать на изменения и улучшать продукт.
Ежедневное планирование: Каждый день начинается с короткой встречи (stand-up meeting), где участники обсуждают текущие задачи, возможные проблемы и синхронизируют действия. Это повышает общую эффективность и поддерживает фокус на целях итерации и релиза.
Обратная связь
Обратная связь от клиента: В XP клиенты активно участвуют на всех этапах разработки, регулярно просматривают текущий прогресс и предоставляют замечания и изменения. Это позволяет команде оперативно корректировать курс разработки, улучшая продукт и удовлетворенность клиента.
Тестирование: В XP тестирование проходит на всех этапах разработки. Команда создает тесты до написания кода, что помогает определить ожидаемое поведение функционала и обеспечивает непрерывную проверку качества. Такой подход позволяет быстро выявлять и устранять ошибки.
Парное программирование и обзор кода: Парное программирование — это когда два программиста работают вместе и непрерывно обмениваются обратной связью по написанному коду. Они делятся знаниями и учатся друг у друга новым техникам и подходам. Один программист может сразу заметить опечатки или логические ошибки в коде другого и помочь их исправить до того, как они станут проблемой. Можно возразить: выгоднее распараллелить работу, чем платить двоим за одно и то же. Однако никто не отменял замыленность взгляда. Если специалист долго работает над кодом, он совершает ошибки, которые проще отловить вдвоем, чем тратить время на их поиск в одиночку.
Ретроспективы: В конце каждого спринта команда проводит ретроспективу, чтобы обсудить, что было сделано хорошо, что можно улучшить и какие изменения следует внести в следующий спринт. Это важно для непрерывного улучшения процессов и методик работы команды.
Заключение
XP не панацея и подойдет не каждому проекту. Однако часть практик могут помочь команде прокачаться, а сам подход может быть оптимальным для определенных проектов или людей.
Gorthauer87
Подождите, а сейчас точно 2024ый год, а не 2001ый?
Мне казалось, что от идеи парного программирования на постоянной основе ещё лет десять назад отказались, потому что оно только мешает.
OldNileCrocodile
Вон, Сэм Альтман практикует. (автор chatGPT).
Gorthauer87
Очень многое зависит от того как его практиковать. Из этой статьи ощущение складывается, что это должно быть постоянным режимом работы.
Demin_Konstantin Автор
В принципе, все практики ХР — это не панацея, применять их следует, отталкиваясь от задачи и команды. Также необязательно всегда кодить в парах, но это хорошие профилактика замыливания взгляда и способ, когда нужно писать что-то нестандартное, например. Один прокладывает направление, держа код в голове «целиком», а второй реализует конкретный кусочек. А как вы считаете, как следует практиковать парное программирование?
Gorthauer87
Я считаю, что писать вот в таком ключе это некорректно - это звучит так будто бы так надо работать в постоянном режиме.
А в постоянном режиме это как раз снижает эффективность программиста, ну по сути дела один что-то пишет, другой смотрит, если так постоянно делать, то это утомляет, один из пары по сути не работает толком, плюс сидеть они должны за одним столом, через расшаренный экран это вообще неудобно делать долго, а значит прощай удаленка.
Парным программированием удобно проводить обучение, показывать какие-то фишки или штуки, ну или набрасывать примерный план для решения сложных вопросов, но это совершенно не подходит для каждодневного режима работы.
yokotoka
У меня другой опыт
Лучший код, который я написал в сжатые сроки был как раз в паре
И быстрее, и меньше багов в итоге, потому что почти все они отлавливаются ещё в момент написания, когда один сосредоточен на том, чтобы его генерировать, а второй следит за мыслью со стороны и сразу подмечает дичь
И удалёнка этому никак не мешает
Gorthauer87
Нет, я не спорю, но я против возведения этого в абсолют. Это очень ситуативный инструмент. Я слышал рассказы человека, где это постоянно практиковали и ощущение сложилось, что это крайне утомительно.