Парное программирование
Па́рное программи́рование — техника программирования, при которой исходный код создаётся парами людей, программирующих одну задачу, сидя за одним рабочим местом. Один программист («ведущий») управляет компьютером и, в основном, думает над кодированием в деталях. Другой программист («штурман»[1]) сосредоточен на картине в целом и непрерывно просматривает код, производимый первым программистом. Время от времени они меняются ролями, обычно, каждые полчаса.
Преимущества
- Повышение дисциплины
- Программисты в паре чаще «делают то, что нужно» и реже устраивают длинные перерывы.
- Лучший код
- Партнёры в паре менее склонны к неудачным решениям и производят более качественный код.
- Гибкий поток работы
- Высокий боевой дух
- Коллективное владение кодом
- Коллективное владение (пары меняются) означает, что каждый несёт ответственность за весь код. Таким образом, каждый вправе вносить изменения в любой участок кода. Парное программирование поддерживает эту практику: работая в парах, все программисты получают доступ ко всем частям кода. Важное преимущество коллективного владения кодом заключается в том, что оно ускоряет процесс разработки, поскольку, при появлении ошибки, её может устранить любой программист.
- Наставничество
- Каждый, даже начинающий программист, знает что-то, чего не знают другие. Парное программирование — безболезненный способ распространить эти знания.
- Командный дух
- Меньше прерываний
- Экономическая обоснованность
- Высокое качество дизайна
- Обратная связь
- Непрерывность проверки кода
- Ошибки обнаруживаются сразу же, как только появились, это позволяет экономить и время, и деньги. Команда разработчиков сплачивается, что позволяет закончить работу раньше и в лучшем качестве.
- Обучение
- Программисты постоянно обмениваются знаниями.
Разновидности
Пинг-понг программирование
Пинг-понг программирование — разновидность парного программирования, адаптированная для метода разработки через тестирование.
В каждый момент времени клавиатурой пользуется только один участник.
При пинг-понг программировании код всегда находится в одном из двух состояний: успешно проходит все тесты или есть хотя бы один тест, который не выполняется.
В первом состоянии разработчики должны сделать выбор, что они будут делать (писать новый тест, корректировать существующий тест или проводить рефакторинг кода) и кто это будет делать.
По завершении рефакторинга, код всегда должен оказаться в исходном состоянии — должен проходить все тесты.
Написание теста или изменение может привести их код как к первому, так и ко второму состоянию:
- Первая ситуация означает, что был написан (или улучшен) тест на уже существующую функциональность (тем самым могла увеличиться степень покрытия кода тестами).
- Во втором случае, когда появился хотя бы один тест, который не проходит код, клавиатура обязательно передаётся от того, кто писал тест, другому участнику.
Цель второго участника — привести код в исходное состояние, то есть исправить код так, чтобы он проходил все тесты.
При данном подходе сокращается число ситуаций, в которых требуется принять решение о передаче клавиатуры, снижается вероятность возникновения разногласий.
Процесс написания кода становится похожим на игру в пинг-понг:
- первый участник пишет тест;
- второй — делает его проходящим, пишет ответный тест и отдаёт клавиатуру обратно.
Удалённое (дистанционное) парное программирование
Удалённое (дистанционное) парное программирование, также известное как виртуальное парное программирование или распределённое парное программирование, это разновидность парного программирования, в котором два программиста находятся на расстоянии друг от друга[2], работая через средство совместного редактирования кода, удалённый рабочий стол, или посредством плагина для интегрированной системы разработки. Удалённое парное программирование добавляет дополнительные трудности, отсутствующие в обычном парном программировании, такие как дополнительные задержки координации, зависимость от более тяжеловесных инструментов управления задачами вместо таких упрощённых вариантов, как карточки с индексами, и отсутствие невербальных средств общения, приводящее к непониманию и конфликтам в таких вопросах, как «чья сейчас клавиатура».
Примечания
- Касьянова, Любовь Парное программирование: эффективная работа или мучение? (недоступная ссылка). CNews Аналитака (07.09.12). Дата обращения: 24 февраля 2013. Архивировано 24 февраля 2013 года.
- Nick V. Flor. Globally distributed software development and pair programming (англ.) // Communications of the ACM. — 2006. — Vol. 49, no. 10. — P. 57-58. — doi:10.1145/1164394.1164421.