Парное программирование - Pair programming

Парное программирование двух сотрудников, 2007 г.

Парное программирование является гибкая разработка программного обеспечения техника, в которой два программисты работать вместе на одном рабочем месте. Один, Водитель, пишет код в то время как другой, наблюдатель или же штурман,[1] отзывы каждая строка кода по мере его ввода. Два программиста часто меняются ролями.

Во время обзора наблюдатель также рассматривает «стратегическое» направление работы, предлагая идеи для улучшений и возможные будущие проблемы, которые необходимо решить. Это сделано для того, чтобы водитель мог сосредоточить все свое внимание на «тактических» аспектах выполнения текущей задачи, используя наблюдателя в качестве подстраховки и руководства.

Экономика

Парное программирование увеличивает человеко-часы требуется для доставки кода по сравнению с программистами, работающими индивидуально.[2] Однако полученный код имеет меньше дефектов.[3] Наряду со временем разработки кода, другие факторы, такие как затраты на поддержку на месте и обеспечение качества, также влияют на окупаемость инвестиций. Парное программирование теоретически может компенсировать эти расходы за счет уменьшения количества дефектов в программах.[3]

Помимо предотвращения ошибок по мере их совершения, могут существовать и другие нематериальные преимущества. Например, отказ от телефонных звонков или других отвлекающих факторов во время совместной работы, уменьшение количества перерывов в согласованные промежутки времени или совместные перерывы для ответа на телефонные звонки (но быстрое возвращение к работе, поскольку кто-то ждет). Один член команды может быть более сосредоточенным и помогать или пробуждать другого, если он теряет концентрацию, и эта роль может периодически меняться. Один участник может иметь знания по теме или технике, которых нет у другого, что может устранить задержки при поиске или тестировании решения или позволить найти лучшее решение, таким образом эффективно расширяя набор навыков, знаний и опыта программиста по сравнению с работать в одиночку. Каждое из этих нематериальных преимуществ, а также многие другие, может быть сложно точно измерить, но они могут способствовать повышению эффективности рабочего времени.

Качество дизайна

Система с двумя программистами обладает большим потенциалом для генерации более разнообразных решений проблем по трем причинам:

  1. программисты привносят различный предыдущий опыт в задачу;
  2. они могут по-разному оценивать информацию, имеющую отношение к задаче;
  3. они по-разному относятся к проблеме в силу своих функциональных ролей.

Пытаясь разделить цели и планы, программисты должны открыто согласовывать общий курс действий, когда между ними возникает конфликт. При этом они рассматривают большее количество способов решения проблемы, чем мог бы сделать один-единственный программист. Это значительно улучшает качество разработки программы, так как снижает вероятность выбора плохого метода.[4]

Удовлетворение

В онлайн-опросе парных программистов в 2000 году 96% из них заявили, что им нравится работать больше, чем когда они программируют в одиночку, а 95% сказали, что они более уверены в своей работе, когда они программируют в паре.[5]

Учусь

Знания постоянно делятся между парными программистами, будь то в индустрии или в классе. Многие источники предполагают, что учащиеся проявляют большую уверенность при программировании в парах,[5] и многие учатся, будь то советы по правилам языка программирования или общие навыки проектирования.[6] При «беспорядочном объединении в пары» каждый программист общается и работает со всеми другими программистами в команде, а не объединяется только с одним партнером, что приводит к распространению знаний о системе по всей команде.[3] Парное программирование позволяет программистам изучать код своего партнера и предоставлять обратную связь, которая необходима для повышения их собственных возможностей по разработке механизмов мониторинга для своей собственной учебной деятельности.[6]

Тимбилдинг и общение

Парное программирование позволяет членам команды быстро обмениваться информацией, что снижает вероятность того, что программы будут скрыты друг от друга. Это помогает парным программистам легче научиться общаться. «Это увеличивает пропускную способность и частоту связи в рамках проекта, увеличивая общий поток информации внутри команды».[3]

Исследования

Существуют как эмпирические исследования, так и метаанализ парного программирования. Эмпирические исследования, как правило, исследуют уровень продуктивности и качество кода, в то время как метаанализ может фокусироваться на предубеждениях, вносимых процессом тестирования и публикации.

А метаанализ Найденные пары обычно рассматривают больше вариантов дизайна, чем программисты, работающие в одиночку, приходят к более простым проектам, которые легче поддерживать, и раньше выявляют дефекты дизайна. Однако он выразил озабоченность тем, что на его выводы могли повлиять "признаки предвзятость публикации среди опубликованных исследований по парному программированию ». Он пришел к выводу, что« парное программирование не всегда полезно или эффективно ».[7]

Хотя парные программисты могут выполнить задачу быстрее, чем одиночный программист, общее количество человеко-часы увеличивается.[2] Менеджеру необходимо будет найти баланс между более быстрым завершением работы и сокращением времени тестирования и отладки с более высокой стоимостью кодирования. Относительный вес этих факторов может варьироваться в зависимости от проекта и задачи.

Преимущество объединения в пары наиболее велико при выполнении задач, которые программисты не понимают полностью до того, как они начнутся: то есть сложных задач, требующих творческого подхода и изощренности, а также от новичков по сравнению с экспертами.[2] Парное программирование может быть полезным для достижения высокого качества и правильности сложных программных задач, но оно также значительно увеличит усилия (затраты) на разработку.[7]

В простых задачах, которые пара уже полностью понимает, спаривание приводит к чистому падению производительности.[2][8] Это может сократить время разработки кода, но также может снизить качество программы.[7] Продуктивность также может упасть, когда используется пара новичков и новичков без достаточного количества наставника для их обучения.[9]

Индикаторы неисполнения

Есть признаки того, что пара не работает хорошо:

  • Разъединение может представлять, как один из участников физически отходит от клавиатуры, обращается к электронной почте или даже засыпает.
  • В "Наблюдайте за Мастером" явление может возникнуть, если один член более опытен, чем другой. В этой ситуации младший член может взять на себя роль наблюдателя, уступая старшему члену пары большую часть действий по кодированию. Это легко может привести к разъединению.

Варианты сочетания

Эксперт – эксперт
Сочетание экспертов и экспертов может показаться очевидным выбором для наивысшей продуктивности и может дать отличные результаты, но оно часто дает мало понимания новых способов решения проблем, поскольку обе стороны вряд ли будут сомневаться в устоявшейся практике.[2]
Эксперт – новичок
Сочетание эксперта и новичка создает множество возможностей для эксперта наставлять новичка. Это сочетание также может внести новые идеи, поскольку новичок с большей вероятностью усомнится в устоявшейся практике. Эксперт, от которого теперь требуется объяснение устоявшейся практики, также с большей вероятностью будет их ставить под сомнение. Однако в этой паре запуганный новичок может пассивно «наблюдать за мастером» и не решаться участвовать осмысленно. Кроме того, некоторым экспертам может не хватить терпения, чтобы позволить конструктивному участию новичков.[10]
Новичок – новичок
Взаимодействие между новичком и новичком может дать результаты значительно лучше, чем два новичка, работающие независимо, хотя такая практика, как правило, не рекомендуется, потому что новичкам сложнее развить хорошие привычки без надлежащего образца для подражания.[3]

Программирование удаленной пары

Программирование удаленной пары, также известный как виртуальное парное программирование или же распределенное парное программирование, это парное программирование, в котором два программиста находятся в разных местах,[11] работая через совместный редактор в реальном времени, общий рабочий стол или программирование удаленной пары IDE плагин. Удаленное сопряжение создает трудности, отсутствующие при непосредственном сопряжении, такие как дополнительные задержки для координации, в большей степени зависящие от «тяжелых» инструментов отслеживания задач, а не «легких», таких как учетные карточки, и потеря словесного общения, приводящая к путанице и конфликты из-за таких вещей, как «у кого есть клавиатура».[12]

Инструментальная поддержка может быть предоставлена:

  • Программное обеспечение для демонстрации всего экрана[13][14]
  • Терминальные мультиплексоры
  • Специализированные инструменты распределенного редактирования
  • Программы аудиочата или программное обеспечение VoIP могут быть полезны, когда программное обеспечение для совместного использования экрана не поддерживает двустороннюю передачу звука. Использование гарнитуры освобождает руки программистов
  • Облачные среды разработки
  • Услуги по совместному парному программированию

Смотрите также

Рекомендации

  1. ^ Уильямс, Лори (19–20 февраля 2001 г.). Интеграция парного программирования в процесс разработки программного обеспечения. 14-я конференция по образованию и обучению программной инженерии. Шарлотта. С. 27–36. Дои:10.1109 / CSEE.2001.913816. ISBN  0-7695-1059-0. Один из программистов, водитель, управляет клавиатурой / мышью и активно реализует программу. Другой программист, наблюдатель, постоянно наблюдает за работой драйвера для выявления тактических (синтаксических, орфографических и т. Д.) Дефектов, а также стратегически думает о направлении работы.
  2. ^ а б c d е Луи, Ким Ман (сентябрь 2006 г.). «Продуктивность парного программирования: новичок – новичок или эксперт – эксперт» (PDF). Международный журнал человеко-компьютерных исследований. 64 (9): 915–925. CiteSeerX  10.1.1.364.2159. Дои:10.1016 / j.ijhcs.2006.04.010. Архивировано из оригинал (PDF) на 2011-07-20. Получено 2012-11-18.
  3. ^ а б c d е Кокберн, Алистер; Уильямс, Лори (2000). «Стоимость и преимущества парного программирования» (PDF). Труды Первой международной конференции по экстремальному программированию и гибким процессам в разработке программного обеспечения (XP2000).
  4. ^ Флор, Ник В .; Хатчинс, Эдвин Л. (1991). «Анализ распределенного познания в командах разработчиков программного обеспечения: пример командного программирования во время эффективного сопровождения программного обеспечения». В Кенеманн-Белливо, Юрген; Moher, Thomas G .; Робертсон, Скотт П. (ред.). Эмпирические исследования программистов: четвертый семинар. Ablex. С. 36–64. ISBN  978-0-89391-856-9.
  5. ^ а б Уильямс, Лори; Кесслер, Роберт Р .; Каннингем, Уорд; Джеффрис, Рон (2000). «Укрепление аргументов в пользу парного программирования» (PDF). Программное обеспечение IEEE. 17 (4): 19–25. CiteSeerX  10.1.1.33.5248. Дои:10.1109/52.854064.
  6. ^ а б Уильямс, Лори; Апчерч, Ричард Л. (2001). «В поддержку студенческого парного программирования». Бюллетень ACM SIGCSE. 33 (1): 327–31. Дои:10.1145/366413.364614.
  7. ^ а б c Hannay, Jo E .; Торе Дибо; Эрик Аришолм; Даг И.К. Sjøberg (июль 2009 г.). «Эффективность парного программирования: метаанализ». Информационные и программные технологии. 51 (7): 1110–1122. Дои:10.1016 / j.infsof.2009.02.001.
  8. ^ Аришолм, Эрик; Ганс Галлис; Торе Дибо; Даг И.К. Сьёберг (февраль 2007 г.). «Оценка парного программирования с учетом сложности системы и опыта программиста». IEEE Transactions по разработке программного обеспечения. 33 (2): 65–86. Дои:10.1109 / TSE.2007.17. Архивировано из оригинал на 2010-10-29. Получено 2008-07-21.
  9. ^ Стивенс, Мэтт; Дуг Розенберг. «Действительно ли парное программирование улучшит ваш проект?». Получено 28 мая 2011.
  10. ^ Уильямс, Л. И Кесслер Р. (2003). Парное программирование с подсветкой. Бостон: Addison-Wesley Professional. ISBN  9780201745764.
  11. ^ Флор, Ник В. (2006). «Глобально распределенная разработка программного обеспечения и парное программирование». Коммуникации ACM. 49 (10): 57–8. Дои:10.1145/1164394.1164421.
  12. ^ Schümmer, Till; Стефан Лукош (сентябрь 2009 г.). «Понимание инструментов и методов программирования распределенных пар» (PDF). Журнал универсальных компьютерных наук. 15 (16): 3101–3125. Получено 2010-04-30.
  13. ^ Agile Ajax: парное программирование с VNC В архиве 2008-04-02 в Wayback Machine[самостоятельно опубликованный источник ]
  14. ^ Парное программирование - Окончательная установка и другие варианты, которые мы пробовали. - Блог Джонатана Когли[самостоятельно опубликованный источник? ]

внешняя ссылка