Русская Википедия:Парное программирование
Па́рное программи́рование (Шаблон:Lang-en) — это методика разработки программного обеспечения, при которой два программиста работают вместе над одной задачей, сидя за одним рабочим местом. Один из программистов, называемый «ведущим», управляет компьютером и фокусируется на деталях программирования. Второй программист, известный как «штурман»[1], сосредоточен на общей картине и непрерывно следит за кодом, создаваемым первым программистом. В течение сессии они периодически меняются ролями, обычно каждые полчаса, чтобы обеспечить равное распределение ответственности и вовлеченности каждого члена команды.
Преимущества
- Повышение дисциплины
- Программисты в паре чаще «делают то, что нужно» и реже устраивают длинные перерывы.
- Лучший код
- Партнёры в паре менее склонны к неудачным решениям и производят более качественный код.
- Гибкий поток работы
- Высокий боевой дух
- Коллективное владение кодом
- Коллективное владение (пары меняются) означает, что каждый несёт ответственность за весь код. Таким образом, каждый вправе вносить изменения в любой участок кода. Парное программирование поддерживает эту практику: работая в парах, все программисты получают доступ ко всем частям кода. Важное преимущество коллективного владения кодом заключается в том, что оно ускоряет процесс разработки, поскольку, при появлении ошибки, её может устранить любой программист.
- Наставничество
- Каждый, даже начинающий программист, знает что-то, чего не знают другие. Парное программирование — безболезненный способ распространить эти знания.
- Командный дух
- Меньше прерываний
- Экономическая обоснованность
- Высокое качество дизайна
- Обратная связь
- Непрерывность проверки кода
- Ошибки обнаруживаются сразу же, как только появились, это позволяет экономить и время, и деньги. Команда разработчиков сплачивается, что позволяет закончить работу раньше и в лучшем качестве.
- Обучение
- Программисты постоянно обмениваются знаниями.
Разновидности
Пинг-понг программирование
Пинг-понг программирование — разновидность парного программирования, адаптированная для метода разработки через тестирование.
В каждый момент времени клавиатурой пользуется только один участник.
При пинг-понг программировании код всегда находится в одном из двух состояний: успешно проходит все тесты или, есть хотя бы один тест, который не выполняется.
В первом состоянии разработчики должны сделать выбор, что они будут делать (писать новый тест, корректировать существующий тест или проводить рефакторинг кода) и кто это будет делать.
По завершении рефакторинга, код всегда должен оказываться в исходном состоянии — должен проходить все тесты.
Написание теста или изменение может привести их код как к первому, так и ко второму состоянию:
- Первая ситуация означает, что был написан (или улучшен) тест на уже существующую функциональность (тем самым могла увеличиться степень покрытия кода тестами).
- Во втором случае, когда появился хотя бы один тест, который не проходит код, клавиатура обязательно передаётся от того, кто писал тест, другому участнику.
Цель второго участника — привести код в исходное состояние, то есть исправить код так, чтобы он проходил все тесты.
При данном подходе сокращается число ситуаций, в которых требуется принять решение о передаче клавиатуры, снижается вероятность возникновения разногласий.
Процесс написания кода становится похожим на игру в пинг-понг:
- первый участник пишет тест;
- второй — делает его проходящим, пишет ответный тест и отдаёт клавиатуру обратно.
Удалённое (дистанционное) парное программирование
Удалённое (дистанционное) парное программирование, также известное как виртуальное парное программирование или распределённое парное программирование — это разновидность парного программирования, в котором два программиста находятся на расстоянии друг от друга[2], работая через средство совместного редактирования кода, удалённый рабочий стол, или посредством плагина для интегрированной системы разработки. Удалённое парное программирование добавляет дополнительные трудности, отсутствующие в обычном парном программировании, такие как дополнительные задержки координации, зависимость от более тяжеловесных инструментов управления задачами вместо таких упрощённых вариантов, как карточки с индексами, и отсутствие невербальных средств общения, приводящее к непониманию и конфликтам в таких вопросах, как «чья сейчас клавиатура».
См. также
Примечания
Литература