ペアプログラミング
_-_61_(25926639341).jpg/440px-Wocintech_(microsoft)_-_61_(25926639341).jpg)
ペアプログラミングは、2人のプログラマーが1つのワークステーションで協力して作業するソフトウェア開発手法です。1人であるドライバーがコードを書き、もう1人であるオブザーバーまたはナビゲーター[1]が、入力されたコードの各行を 確認します。2人のプログラマーは頻繁に役割を交代します。
観察者はレビュー中に、作業の「戦略的」な方向性も考慮し、改善案や対処すべき将来的な問題を考え出します。これは、観察者をセーフティネットおよびガイドとして使用して、ドライバーが現在のタスクを完了するための「戦術的」側面にすべての注意を集中できるようにすることを目的としています。
経済
ペアプログラミングでは、プログラマーが個別に作業する場合に比べて、コードを提供するのに必要な工数が増加します。 [2]ただし、結果として得られるコードの欠陥は少なくなります。[3]コード開発時間に加えて、フィールドサポートコストや品質保証などの他の要素も投資収益率に影響します。ペアプログラミングは、理論的にはプログラムの欠陥を減らすことでこれらの費用を相殺する可能性があります。[3]
ミスを未然に防ぐことに加えて、他の無形のメリットが存在する可能性があります。たとえば、一緒に作業しているときに電話やその他の気を散らすものを拒否する、合意した間隔で休憩を減らす、電話を折り返すために休憩を共有する (ただし、誰かが待っているのですぐに仕事に戻る) などの礼儀が挙げられます。チームの 1 人のメンバーはより集中力があり、集中力が途切れたときに他のメンバーを促したり起こしたりするかもしれませんが、その役割は定期的に変わる可能性があります。メンバーの 1 人が他のメンバーが知らないトピックやテクニックを知っている場合、解決策の発見やテストの遅延がなくなるか、より優れた解決策が可能になり、プログラマーのスキル セット、知識、および経験を 1 人で作業する場合と比較して効果的に拡張できます。これらの無形のメリット (およびその他多数) はそれぞれ、正確に測定するのが難しいかもしれませんが、より効率的な労働時間に貢献できます。[要出典]
デザイン品質
2 人のプログラマーがいるシステムは、次の 3 つの理由により、問題に対するより多様な解決策を生み出す可能性が高くなります。
- プログラマーはそれぞれ異なる過去の経験をこのタスクに持ち込みます。
- タスクに関連する情報をさまざまな方法で評価する場合があります。
- 彼らは、機能的役割によって問題に対して異なる関係に立っています。
目標と計画を共有するために、プログラマーは、対立が生じたときには、共通の行動方針を公然と交渉しなければなりません。そうすることで、プログラマーは、一人のプログラマーが行うよりも多くの問題解決方法を検討します。これにより、不適切な方法を選択する可能性が減り、プログラムの設計品質が大幅に向上します。[4]
満足
2000年に行われたペアプログラマーのオンライン調査では、96%のプログラマーが、一人でプログラミングするよりもペアプログラミングの方が仕事が楽しいと答えています。さらに、95%がペアプログラミングをすると仕事に自信が持てると答えています。ただし、この調査は自主的にペアプログラマーを選んだ人を対象にした調査であるため、ペアプログラミングを強制されたプログラマーは含まれていませんでした。[5]
学ぶ
知識は、業界内であろうと教室内であろうと、ペアプログラマーの間で常に共有されています。多くの情報源によると、学生はペアでプログラミングすると自信が増し、[5]プログラミング言語のルールに関するヒントから全体的な設計スキルまで、多くの学生が学んでいます。[6]「無差別ペアリング」では、各プログラマーは 1 人のパートナーとペアになるのではなく、チームの他のすべてのプログラマーとコミュニケーションを取り、作業するため、システムに関する知識がチーム全体に広がります。[3]ペアプログラミングでは、プログラマーはパートナーのコードを調べてフィードバックを提供できます。これは、自分の学習活動の監視メカニズムを開発する能力を高めるために必要です。[6]
チームビルディングとコミュニケーション

ペアプログラミングでは、チームメンバーが素早く情報を共有できるため、お互いに目的を隠してしまう可能性が低くなります。これにより、ペアプログラマーはコミュニケーションをより簡単に学ぶことができます。「これにより、プロジェクト内のコミュニケーションの帯域幅と頻度が上がり、チーム内の全体的な情報の流れが増加します。」[3]
研究
ペアプログラミングには、実証研究とメタ分析の両方があります。実証研究では、生産性のレベルとコードの品質を調べる傾向がありますが、メタ分析では、テストと公開のプロセスによってもたらされるバイアスに焦点を当てる場合があります。
メタ分析では、ペアプログラミングは一般的に単独で作業するプログラマーよりも多くの設計の選択肢を検討し、よりシンプルで保守しやすい設計に到達し、設計上の欠陥を早期に発見することが判明した。しかし、この研究結果は「ペアプログラミングに関する公開された研究における出版バイアスの兆候」によって影響を受けている可能性があるという懸念が提起された。「ペアプログラミングは一様に有益または効果的ではない」と結論づけられた。[7]
ペアプログラマーはソロプログラマーよりも早くタスクを完了できるかもしれませんが、総工数は増加します。[2]マネージャーは、作業のより迅速な完了とテストおよびデバッグ時間の短縮と、コーディングコストの増加とのバランスを取る必要があります。これらの要因の相対的な重みは、プロジェクトやタスクによって異なります。
ペアプログラミングの利点は、プログラマーが作業を始める前に完全に理解していないタスク、つまり創造性と洗練性が求められる難しいタスク、専門家よりも初心者向けのタスクにおいて最も大きい。[2]ペアプログラミングは、複雑なプログラミングタスクで高品質と正確性を達成するのに役立つ可能性があるが、開発の労力(コスト)も大幅に増加する。[7]
ペアがすでに完全に理解している単純なタスクでは、ペアリングによって生産性が全体的に低下します。[2] [8]コード開発時間は短縮されるかもしれませんが、プログラムの品質が低下するリスクもあります。[7]初心者同士のペアリングでは、指導するメンターが十分にいない場合にも生産性が低下する可能性があります。[9]
GitHub CopilotなどのAI支援ツールを使用するプログラマーを対象とした調査では、一部のプログラマーはAI支援をペアプログラミングに似たものとして捉えていたものの、実際にはそのようなツールの使用はプログラマーの経験という点で非常に異なり、人間のプログラマーはドライバーとナビゲーターの役割を繰り返し切り替える必要があることが判明しました。[10]
非パフォーマンスの指標
ペアのパフォーマンスが良くないことを示す指標があります: [意見]
- メンバーの 1 人がキーボードから物理的に離れたり、電子メールにアクセスしたり、さらには眠ってしまったりすることで、離脱の兆候が現れる場合があります。
- 「マスターを観察する」現象は、メンバーの一方が他方よりも経験豊富である場合に発生する可能性があります。この状況では、経験の浅いメンバーが観察者の役割を担い、コーディング作業の大部分をペアの上級メンバーに委ねる場合があります。これにより、簡単に離脱につながる可能性があります。
ペアリングのバリエーション
- 専門家-専門家
- 専門家同士のペアリングは、生産性を最大化するための明白な選択肢のように見え、素晴らしい結果を生み出すことができますが、両者が既存の慣行に疑問を抱く可能性は低いため、問題を解決するための新しい方法についての洞察はほとんど得られません。[2]
- エキスパート-初心者
- 専門家と初心者のペアリングは、専門家が初心者を指導する機会を多く作り出します。初心者は既存の慣行に疑問を抱く可能性が高くなるため、このペアリングでは新しいアイデアも生まれます。専門家は、既存の慣行を説明する必要が生じたため、既存の慣行に疑問を抱く可能性が高くなります。ただし、このペアリングでは、初心者は恐れを感じて受動的に「師匠を観察」し、有意義な参加をためらう可能性があります。また、専門家の中には、初心者の建設的な参加を許容するために必要な忍耐力を持たない人もいます。[11]
- 初心者–初心者
- 初心者同士のペアは、2人の初心者が独立して作業するよりもはるかに良い結果を生み出すことができますが、適切なロールモデルなしでは初心者が良い習慣を身につけることは難しいため、この方法は一般的に推奨されていません。[3]
リモートペアプログラミング
リモートペアプログラミングは、仮想ペアプログラミングまたは分散ペアプログラミングとも呼ばれ、2人のプログラマーが異なる場所にいるペアプログラミングであり、[12]共同リアルタイムエディタ、共有デスクトップ、またはリモートペアプログラミングIDEプラグインを介して作業します。リモートペアリングでは、調整のための余分な遅延、インデックスカードなどの「軽量」なツールではなく「重量級」のタスク追跡ツールへの依存、口頭でのコミュニケーションの喪失による「キーボードを持っているのは誰か」などの混乱や対立など、対面ペアリングでは発生しない困難が生じます。[13]
ツールのサポートは以下によって提供されます:
- 全画面共有ソフトウェア[14] [15] [自費出版ソース? ]
- 端末マルチプレクサ
- 特殊な分散編集ツール
- 画面共有ソフトウェアが双方向オーディオ機能を提供していない場合は、オーディオチャットプログラムまたはVoIPソフトウェアが役立ちます。ヘッドセットを使用すると、プログラマーの手が自由になります。
- クラウド開発環境
- 共同ペアプログラミングサービス
参照
- エクストリームプログラミング
- 共同注意
- チームプログラミング(モブプログラミングとも呼ばれる)
参考文献
- ^ ウィリアムズ、ローリー(2001 年 2 月 19 ~ 20 日)。ソフトウェア開発プロセスへのペアプログラミングの統合。第 14 回ソフトウェア エンジニアリング教育およびトレーニング会議。シャーロット。pp. 27 ~ 36。doi :10.1109 / CSEE.2001.913816。ISBN 0-7695-1059-0プログラマーの 1 人であるドライバーは、キーボード/マウスを制御し、プログラムを積極的に実装します。もう 1 人のプログラマーであるオブザーバーは、ドライバーの作業を
継続的に観察して、戦術的 (構文、スペルなど) な欠陥を特定し、作業の方向性についても戦略的に考えます。
- ^ abcde Lui, Kim Man (2006 年 9 月). 「ペアプログラミングの生産性: 初心者同士 vs. エキスパート同士」(PDF) . International Journal of Human–Computer Studies . 64 (9): 915–925. CiteSeerX 10.1.1.364.2159 . doi :10.1016/j.ijhcs.2006.04.010. 2011 年 7 月 20 日のオリジナル(PDF)からアーカイブ。2012年 11 月 18日に取得。
- ^ abcde Cockburn, Alistair ; Williams, Laurie (2000). 「ペアプログラミングのコストと利点」(PDF)。ソフトウェアエンジニアリングにおけるエクストリームプログラミングと柔軟なプロセスに関する第 1 回国際会議 (XP2000) の議事録。
- ^ Flor, Nick V.; Hutchins, Edwin L. (1991). 「ソフトウェア チームにおける分散認知の分析: 完了型ソフトウェア保守中のチーム プログラミングのケース スタディ」。Koenemann-Belliveau, Jürgen、Moher, Thomas G.、Robertson, Scott P. (編)。プログラマーの実証的研究: 第 4 回ワークショップ。Ablex。pp. 36–64。ISBN 978-0-89391-856-9。
- ^ ab Williams, Laurie ; Kessler, Robert R.; Cunningham, Ward; Jeffries, Ron (2000). 「ペアプログラミングのケース強化」(PDF) . IEEE Software . 17 (4): 19–25. CiteSeerX 10.1.1.33.5248 . doi :10.1109/52.854064.
- ^ ab Williams, Laurie ; Upchurch, Richard L. (2001). 「学生ペアプログラミングのサポート」ACM SIGCSE 速報. 33 (1): 327–31. doi : 10.1145/366413.364614 .
- ^ abc Hannay, Jo E.; Tore Dybå; Erik Arisholm; Dag IK Sjøberg (2009 年 7 月). 「ペアプログラミングの有効性: メタ分析」.情報およびソフトウェア技術. 51 (7): 1110–1122. doi :10.1016/j.infsof.2009.02.001.
- ^ Arisholm, Erik; Hans Gallis; Tore Dybå; Dag IK Sjøberg (2007 年 2 月). 「システムの複雑性とプログラマの専門知識に関するペアプログラミングの評価」. IEEE Transactions on Software Engineering . 33 (2): 65–86. doi :10.1109/TSE.2007.17. S2CID 9889035. 2010 年 10 月 29 日時点のオリジナルよりアーカイブ。2008年 7 月 21 日閲覧。
- ^ Stephens, Matt; Doug Rosenberg. 「ペアプログラミングは本当にプロジェクトを改善するのか?」2011 年5 月 28 日閲覧。
- ^ Sarkar, Advait; Gordon, Andrew D.; Negreanu, Carina; Poelitz, Christian; Ragavan, Sruti S.; Zorn, Ben (2022). 「人工知能を使ってプログラミングするとどんな感じか?」Psychology of Programming Interest Group . 2023年3月27日閲覧。
- ^ Williams, L. & Kessler, R. (2003). ペアプログラミング入門. ボストン: Addison-Wesley Professional. ISBN 9780201745764。
- ^ Flor, Nick V. (2006). 「グローバル分散ソフトウェア開発とペアプログラミング」Communications of the ACM . 49 (10): 57–8. doi :10.1145/1164394.1164421. S2CID 8963421.
- ^ Schümmer, Till; Stephan Lukosch (2009 年 9 月)。「分散ペアプログラミングのツールと実践を理解する」( PDF)。Journal of Universal Computer Science。15 ( 16): 3101–3125。2010年 4 月 30 日閲覧。
- ^ Agile Ajax: VNC を使用したペアプログラミング 2008-04-02 に Wayback Machineでアーカイブ[自費出版ソース]
- ^ ペアプログラミング – 究極のセットアップと私たちが試した他のオプション。 – Jonathan Cogley のブログ
外部リンク
- wikiHow: ペアプログラミングの方法 ハウツーガイド。ペアプログラミングを機能させる方法に関する一般的な知恵が記載されています。
- Tuple:ペア プログラミング ガイド ペアリング スタイル、アンチパターンなどをカバーするペア プログラミング ガイド。ペアリング例のビデオも含まれています。
- c2:ペアプログラミング
- c2:ペアプログラミングパターン
- c2:ペア回転周波数