Урок 7: Экстремальное программирование (XP) и разработка через тестирование (TDD)
Экстремальное программирование (XP) — один из самых известных и полных гибких методов, созданный Кентом Беком в 1996 году — ещё до того, как был введён термин «Agile». В этом уроке мы познакомимся с четырьмя ключевыми ценностями XP (простота, коммуникация, обратная связь и мужество) и 12 практиками
Вкратце: XP говорит «возьмите то хорошее, что мы делаем, и усильте это» — коммуникация, простота, обратная связь и мужество. А TDD говорит: сначала напишите тест, который проваливается, затем напишите ровно столько кода, чтобы он прошёл, — и затем остановитесь.
- Экстремальное программирование (XP)
- Гибкий метод разработки, созданный Кентом Беком в 1996 году, один из самых полных и известных; построен на четырёх ценностях (простота, коммуникация, обратная связь, мужество) и 12 инженерных практиках, на идее «возьми то, что работает, и усиль это».
- Разработка через тестирование (TDD)
- Метод, при котором вы сначала пишете модульный тест, который должен запуститься и провалиться, затем пишете код, пока тест не пройдёт, и останавливаетесь в тот момент, когда он проходит, — без добавления функциональности; ни один ранее проходивший тест не должен провалиться.
- Planning Game (игра в планирование)
- Практика планирования XP, разделяющая деловые решения и решения разработчиков: бизнес представляет и приоритизирует пользовательские истории, разработчики оценивают трудозатраты, а итерации короткие (1-2 недели) и никогда не превышают отведённое время.
- Пользовательская история (User Story)
- Короткая карточка (название + описание) функции, приносящей ценность заказчику, написанная заказчиком и оценённая разработчиками; заменяет большие документы требований, по назначению похожа на вариант использования (use case).
- Парное программирование (Pair Programming)
- Весь код пишется в парах за одним рабочим местом: один пишет, другой думает, будет ли это работать, о лучших способах и тестовых сценариях; они меняются примерно каждые два часа, а пары ротируются — поддерживая коллективное владение и неформальный обзор.
- Рефакторинг (Refactoring)
- Улучшение структуры существующего кода без изменения его поведения, чтобы сохранять дизайн простым; постоянная, а не разовая деятельность, в которой тесты гарантируют, что поведение не сломалось.
- Непрерывная интеграция (CI)
- Сборка и тестирование всей системы несколько раз в день (интеграция как минимум ежедневно), с автоматическими тестами; модульные тесты должны проходить на 100% до и после интеграции.
- Устойчивый темп (40-часовая неделя)
- «Программирование — это марафон, а не спринт»: команда работает до 40 часов в неделю; уставшие люди непродуктивны; в кризис допускается до одной недели сверхурочных, но несколько недель подряд сигнализируют, что что-то не так.