ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ソフトウェア開発に関する調査と実験が大好きです。

ペアプログラミングをすると作業に集中できる

2人でパイロットとナビゲーターの役割を分担して1つのタスクに取り組むペアプログラミングですが、その効果は分かっているような、分かっていないような、微妙なところです。ペアプログラミングを実際にやっている人を見かける機会もあったので、効果について何が言われているかを軽く調べてみました。

 この分野の先駆者は(おそらく) Laurie Williams で、The Costs and Benefits of Pair Programming (XP 2001) において、ペアでやると労力は(最初は時間が大幅増になるが、慣れれば)15%増し、テスト通過率は 70-80% → 85% と上昇するので、「労力が2倍になるわけではなく、バグ修正に要する時間を考えればお得」としています。

 このあといくつか実験が報告されていて、Two controlled experiments concerning the comparison of pair programming to peer review (JSS 2005) で、得られる品質と労力については、ペアプログラミングと、1人が作業したあとの peer review に、有意差がないことを報告しています。同著者は "Are Reviews an Alternative to Pair Programming?" (EMSE, 2004) でも、Peer Review が代替になると述べています。

 Hannay らによる The effectiveness of pair programming: A meta-analysis (IST 2009) で、これまでの論文のメタアナリシスが行われて、作業の correctness, duration, effort の3つの観点で分析した結果、

  • 難しいタスクでは、労力は大きくなるが、正確にこなせるようになる(個人でやるよりも困難なタスクに取り組める)

  • 単純なタスクでは、時間短縮になるが、正確さも下がる(作業が雑になる)

という結果を報告しています。前者の効果は、コードの Peer Review では代替できないので、ペアプログラミング特有の効果といえそうです。

 これらの結果と関係していそうなのが、Understanding the impact of Pair Programming on developers attention: A case study on a large industrial experimentation (ICSE 2012) で、開発者が開発作業に集中し、ブラウザやメーラなどの他のツールの使用時間、ツール切り替えの頻度が減ると報告されています。特に作業時間は、論文 Figure 2 に以下のように記載があります:

  • Visual Studio: Soloの場合 34% → Pairの場合 64%
  • Outlook: Solo 21% → Pair 13%
  • Browser: Solo 9% → Pair 3%
  • Word:  Solo 9% → Pair 2%

Pair の場合に Visual Studio の時間が増え、他の時間が減っているのは、ペアになる人が隣にいるので、開発以外の作業に気を取られにくくなっているということのようです。

 ペアプログラミングについて開発者は全体的には良い印象を持っているようだ、というのは  Pair programming: what's in it for me? (ESEM 2008) で出ていて、バグが少なくなる、ペアの人から学べるなどの良い面がある一方で、作業効率やスケジューリング、2人での意見対立が起きると解決が難しいなどの問題が指摘されています。パートナーとうまくいかない問題は Compatibility Issues とも言われていて、Laurie Williams の Examining the compatibility of student pair programmers (AGILE 2006) によれば、学生ペアを組むと 93% ぐらいはうまくいくが、評価(能力)が高めの学生は、低めの学生と組むのは嫌がるなどと書かれています。ただ、ペアの組み方なども研究が進められているようなので、授業のように必ず参加時間が合わせられる状況では、ペアプログラミングは簡単に導入できる工夫となりそうです。

 大学での教育効果については、最近でも研究がいろいろ行われているようで、Psychological Aspects of Pair Programming: A Mixed-methods Experimental Study (EASE 2023) では役割分担が学生の意欲を高める、 The Impact of Pair Programming on the Performance of Slow-Paced Students: A Study on Data Structure Courses (JIOS 2020) では、進度の遅い学生にとって助けが得られる機会になるという話が出ています。また、A Comparison of Solo and Pair Programming in Terms of Flow Experience, Coding Quality, and Coding Achievement (JECR 2020) で、Scratch での話ですが Flow Experience, コード品質の観点で良い影響が出ると報告されています。

 ペアプログラミングを常にやるべきというのは言い過ぎですが、難しいタスクに取り組む場合や、他に誘惑が多くて作業に集中できない人には良い選択肢である、というのが現状の私の理解となります。