ペアプログラミング

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
ペアプログラミング

ペアプログラミングは、 2人のプログラマーが1つのワークステーションで一緒に作業するアジャイルソフトウェア開発手法です。一方のドライバーはコードを書き込み、もう一方のオブザーバーまたはナビゲーター[1]は、入力されたコードの各行を確認します。2人のプログラマーは頻繁に役割を切り替えます

オブザーバーは、レビューしながら、作業の「戦略的」方向性も検討し、改善のためのアイデアと、対処すべき将来の問題を考え出します。これは、オブザーバーをセーフティネットおよびガイドとして使用して、ドライバーが現在のタスクを完了するための「戦術的」側面にすべての注意を集中できるようにすることを目的としています。

経済学

ペアプログラミングは、個別に作業するプログラマーと比較して、コードの配信に必要な工数を増やします。[2]ただし、結果のコードには欠陥が少なくなります。[3]コード開発時間に加えて、フィールドサポートコストや品質保証などの他の要因も投資収益率に影響します。ペアプログラミングは、プログラムの欠陥を減らすことによって、理論的にこれらの費用を相殺する可能性があります。[3]

間違いを防ぐだけでなく、他の無形の利益が存在する可能性があります。たとえば、一緒に仕事をしているときに電話やその他の気を散らすものを拒否したり、合意した間隔で休憩を取ったり、休憩を共有して電話をかけ直したりすることができます(ただし、誰かが待っているのですぐに仕事に戻ります)。チームの1人のメンバーは、集中力を高め、集中力を失った場合に他のメンバーを動かしたり目覚めさせたりするのに役立つ可能性があり、その役割は定期的に変わる可能性があります。一方のメンバーは、もう一方のメンバーにはないトピックやテクニックの知識を持っている可能性があります。これにより、解決策を見つけたりテストしたりするための遅延をなくしたり、より良い解決策を可能にしたりして、プログラマーのスキルセット、知識、経験を効果的に拡大できます。一人で働くことに。これらの無形のメリットのそれぞれ、およびその他多くのメリットは、正確に測定するのが難しい場合があります。

デザイン品質

2人のプログラマーがいるシステムは、次の3つの理由から、問題に対するより多様なソリューションを生成する可能性が高くなります。

  1. プログラマーは、さまざまな以前の経験をタスクにもたらします。
  2. 彼らはさまざまな方法でタスクに関連する情報を評価するかもしれません。
  3. それらは、それらの機能的役割のおかげで、問題に対して異なる関係にあります。

目標と計画を共有するために、プログラマーは、それらの間で対立が生じたときに、共有された行動方針をあからさまに交渉しなければなりません。そうすることで、彼らは、単一のプログラマーだけが行うよりも多くの方法で問題を解決することを検討します。これにより、不適切な方法を選択する可能性が低くなるため、プログラムの設計品質が大幅に向上します。[4]

満足度

2000年からのペアプログラマーのオンライン調査では、プログラマーの96%が、プログラミングだけの場合よりもペアプログラミングの方が仕事を楽しんでいると述べています。さらに、95%は、ペアプログラミングを行った方が自分の仕事に自信があると答えました。[5]

学習

知識は、業界でも教室でも、ペアプログラマー間で常に共有されます。多くの情報源は、ペアプログラミングの際に学生がより高い自信を示すことを示唆しており[5]、多くの人はそれがプログラミング言語のルールのヒントから全体的な設計スキルまでであるかどうかを学びます。[6]「無差別ペアリング」では、各プログラマーは、1人のパートナーとだけペアリングするのではなく、チーム内の他のすべてのプログラマーと通信して作業します。これにより、システムの知識がチーム全体に広がります。[3]ペアプログラミングを使用すると、プログラマーはパートナーのコードを調べてフィードバックを提供できます。これは、自分の学習活動の監視メカニズムを開発する自分の能力を高めるために必要です。[6]

チームビルディングとコミュニケーション

2人の同僚のペアプログラミング、2007年

ペアプログラミングを使用すると、チームメンバーはすばやく共有できるため、議題が互いに隠されている可能性が低くなります。これは、ペアプログラマーがより簡単にコミュニケーションをとることを学ぶのに役立ちます。「これにより、プロジェクト内の通信帯域幅と頻度が上がり、チーム内の全体的な情報フローが増加します。」[3]

研究

ペアプログラミングの実証的研究とメタ分析の両方があります。実証的研究では、コードの生産性と品質のレベルを調べる傾向がありますが、メタ分析では、テストと公開のプロセスによってもたらされるバイアスに焦点を当てることができます。

メタアナリシスで見つかったペアは、通常、プログラマーが単独で作業するよりも多くの設計代替案を検討し、より単純で保守しやすい設計に到達し、設計上の欠陥を早期に発見します。しかし、その調査結果は「ペアプログラミングに関する公開された研究間の出版バイアスの兆候」によって影響を受けた可能性があるという懸念を提起しました。それは、「ペアプログラミングは一様に有益または効果的ではない」と結論付けました。[7]

ペアプログラマーはソロプログラマーよりも速くタスクを完了することができますが、工数の合計数は増加します。[2]マネージャーは、作業の迅速な完了とテストおよびデバッグ時間の短縮と、コーディングのコストの増加とのバランスを取る必要があります。これらの要因の相対的な重みは、プロジェクトやタスクによって異なります。

ペアリングの利点は、プログラマーが開始する前に完全に理解していないタスク、つまり、専門家と比較して、創造性と洗練を必要とする挑戦的なタスク、および初心者にとって最大です。[2]ペアプログラミングは、複雑なプログラミングタスクで高品質と正確さを達成するのに役立つ可能性がありますが、開発の労力(コスト)も大幅に増加します。[7]

ペアがすでに完全に理解している単純なタスクでは、ペアリングによって生産性が大幅に低下します。[2] [8]コード開発時間を短縮する可能性がありますが、プログラムの品質を低下させるリスクもあります。[7]初心者と初心者のペアリングを使用すると、指導するメンターが十分にいない場合にも生産性が低下する可能性があります。[9]

不履行の指標

ペアがうまく機能していないことを示す指標があります:[意見]

  • メンバーの1人がキーボードから物理的に離れたり、電子メールにアクセスしたり、さらには眠りに落ちたりすると、離脱が発生する可能性があります。
  • マスターを見る」現象は、一方のメンバーがもう一方のメンバーよりも経験豊富な場合に発生する可能性があります。この状況では、ジュニアメンバーがオブザーバーの役割を果たし、コーディングアクティビティの大部分をペアのシニアメンバーに任せることができます。これは簡単に離脱につながる可能性があります。

ペアリングバリエーション

エキスパート–エキスパート
専門家と専門家のペアリングは、最高の生産性を実現するための明白な選択のように思われ、優れた結果を生み出すことができますが、両方の当事者が確立された慣行に疑問を呈する可能性が低いため、問題を解決する新しい方法についてほとんど洞察が得られないことがよくあります。[2]
エキスパート–初心者
専門家と初心者のペアリングは、専門家が初心者を指導する多くの機会を生み出します。初心者は確立された慣行に疑問を呈する可能性が高いため、このペアリングは新しいアイデアを導入することもできます。確立された慣行を説明する必要がある専門家も、それらに疑問を呈する可能性が高くなります。しかし、このペアリングでは、おびえた初心者は受動的に「マスターを見る」ことができ、意味のある参加をためらうことがあります。また、一部の専門家は、建設的な初心者の参加を許可するために必要な忍耐力を持っていない可能性があります。[10]
初心者–初心者
初心者と初心者のペアリングは、2人の初心者が独立して作業するよりもはるかに優れた結果を生み出すことができますが、適切な役割モデルがないと初心者が良い習慣を身に付けることが難しいため、この方法は一般的に推奨されません。[3]

リモートペアプログラミング

リモートペアプログラミングは、仮想ペアプログラミングまたは分散ペアプログラミングとも呼ばれ、2人のプログラマーが異なる場所にいるペアプログラミングであり[11] 、共同リアルタイムエディター、共有デスクトップ、またはリモートペアプログラミングIDEプラグインを介して動作します。 リモートペアリングは、インデックスカードのような「軽量」ツールではなく「重量」タスク追跡ツールに依存する調整の余分な遅延など、対面ペアリングには存在しない問題をもたらします。また、口頭でのコミュニケーションが失われると、混乱や混乱が生じます。誰が「キーボードを持っている」かなどをめぐって対立する。[12]

ツールのサポートは、次の方法で提供できます。

  • 全画面共有ソフトウェア[13] [14] [自費出版の情報源?]
  • ターミナルマルチプレクサ
  • 専用の分散編集ツール
  • 画面共有ソフトウェアが双方向オーディオ機能を提供しない場合は、オーディオチャットプログラムまたはVoIPソフトウェアが役立つ可能性があります。ヘッドセットを使用すると、プログラマーの手を自由に保つことができます
  • クラウド開発環境
  • コラボレーティブペアプログラミングサービス

も参照してください

参考文献

  1. ^ ウィリアムズ、ローリー(2001年2月19〜20日)。ペアプログラミングをソフトウェア開発プロセスに統合するソフトウェアエンジニアリングの教育とトレーニングに関する第14回会議。シャーロット。pp。27–36。土井10.1109 /CSEE.2001.913816ISBN 0-7695-1059-0プログラマーの1人であるドライバーは、キーボード/マウスを制御し、プログラムを積極的に実装します。もう1人のプログラマーであるオブザーバーは、ドライバーの作業を継続的に監視して、戦術(構文、スペルなど)の欠陥を特定し、作業の方向性についても戦略的に考えます。
  2. ^ a b c d e Lui、Kim Man(2006年9月)。「ペアプログラミングの生産性:初心者–初心者vs.エキスパート–エキスパート」(PDF)International Journal of Human-ComputerStudies64(9):915–925。CiteSeerX10.1.1.364.2159_ 土井10.1016 /j.ijhcs.2006.04.0102011年7月20日にオリジナル(PDF)からアーカイブされました2012年11月18日取得  
  3. ^ a b c d e コックバーン、アリスター; ウィリアムズ、ローリー(2000)。「ペアプログラミングのコストと利点」(PDF)ソフトウェア工学におけるエクストリームプログラミングと柔軟なプロセスに関する最初の国際会議の議事録(XP2000)
  4. ^ フロール、ニックV。; ハッチンズ、エドウィンL.(1991)。「ソフトウェアチームにおける分散認知の分析:完全なソフトウェア保守中のチームプログラミングの事例研究」Koenemann-Belliveau、Jürgen; モハー、トーマスG。; ロバートソン、スコットP.(編)。プログラマーの経験的研究:第4回ワークショップアブレックス。pp。36–64。ISBN 978-0-89391-856-9
  5. ^ a b ウィリアムズ、ローリー; ケスラー、ロバートR。; ウォード・カニンガム; ジェフリーズ、ロン(2000)。「ペアプログラミングのケースを強化する」(PDF)IEEEソフトウェア17(4):19–25。CiteSeerX10.1.1.33.5248_ 土井10.1109 /52.854064  
  6. ^ a b ウィリアムズ、ローリー; アップチャーチ、リチャードL.(2001)。「学生ペアプログラミングをサポートする」ACM SIGCSEBulletin33(1):327–31。土井10.1145 /366413.364614
  7. ^ a b c Hannay、Jo E。; ToreDybå; Erik Arisholm; DagIKSjøberg(2009年7月)。「ペアプログラミングの有効性:メタ分析」。情報およびソフトウェア技術51(7):1110–1122。土井10.1016 /j.infsof.2009.02.001
  8. ^ Arisholm、Erik; ハンスガリス; ToreDybå; DagIKSjøberg(2007年2月)。「システムの複雑さとプログラマーの専門知識に関するペアプログラミングの評価」ソフトウェアエンジニアリングに関するIEEEトランザクション33(2):65–86。土井10.1109 /TSE.2007.172010-10-29にオリジナルからアーカイブされました2008年7月21日取得
  9. ^ スティーブンス、マット; ダグ・ローゼンバーグ。「ペアプログラミングは本当にあなたのプロジェクトを改善しますか?」2011年5月28日取得
  10. ^ Williams、L。&Kessler、R。(2003)ペアプログラミングイルミネーションボストン:アディソン-ウェスリープロフェッショナル。ISBN 9780201745764
  11. ^ Flor、Nick V.(2006)。「グローバルに分散されたソフトウェア開発とペアプログラミング」。ACMの通信49(10):57–8。土井10.1145 /1164394.1164421
  12. ^ Schümmer、Till; ステファン・ルコッシュ(2009年9月)。「分散ペアプログラミングのツールと実践を理解する」(PDF)ユニバーサルコンピュータサイエンスジャーナル15(16):3101–3125 2010年4月30日取得
  13. ^ アジャイルAjax:ウェイバックマシンでのVNCアーカイブ2008-04-02とのペアプログラミング [自費出版ソース]
  14. ^ ペアプログラミング–究極のセットアップと私たちが試した他のオプション。– JonathanCogleyのブログ

外部リンク