SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

グラス片手にアジャイル開発

グラス片手にアジャイル開発 第6回
- アジャイル開発手法「ペアプログラミング」


  • このエントリーをはてなブックマークに追加

 今回は、アジャイル開発でよく採用されるペアプログラミングについて学習します。本稿では1つのプログラムを2名で開発する手法であるペアプログラミングの概要や特徴および具体的な適用方法を、事例をもとに解説します。

  • このエントリーをはてなブックマークに追加

ペアプログラミング

 ペアプログラミングとは、その名前の通り、1つのプログラムを2名で開発する手法であり、アジャイル開発(特にXP)で良く採用されます。今回は、このペアプログラミングの概要、特徴、さらに開発現場での具体的な適用方法を、事例をもとに紹介します。

ペアプログラミングとは

 ペアプログラミングとは、1つのプログラムを2名で開発する手法です。1つのプログラムをどうやって2名で作成するのでしょうか。また、なぜわざわざ2名で作成するのでしょうか。詳細を見ていきましょう。

2名の役割: ドライバーとナビゲーター

 ペアプログラミングでは、以下のように1つのモニタの前に2名が並んで座り、1名がキーボードとマウスを使い、もう1名がアドバイスを与えます。

左:ナビゲーター、右:ドライバー
左:ナビゲーター、右:ドライバー
  • ドライバー
  •  キーボードを操作してコードを書く人。ナビゲーターの指示に従い、実際にプログラムを書いていきます。基本的には指示通りにコードを書いていきますが、レビュアーも兼ねているので、「それはおかしい」とか、「こっちの実装の方が良いのでは?」というコメントも行います。

  • ナビゲーター
  •  仕様に合わせて、どのようなアルゴリズムを採用し、どのようなコードにするのかを具体的に指示します。コードを口述するイメージです。

 この関係性は、自動車競技のラリーに例えるとイメージしやすいでしょう。ナビゲーターはレース主催者から与えられたコース図(仕様)をもとに全体のプランを構築し、それをドライバーに伝えていきます。レース全体のイメージ(プログラムの完成形)を常に頭に描きながら、局所的な具体化としてのルート・速度(アルゴリズム)を決定していきます。ドライバーは指示されたルート・速度を忠実に形(ソースコード)にしていく訳です。

 ペアプログラミングではコード作成はもちろんのこと、テストの作成・実施も行うケースが多いようです。

「ペア」による効果

ペアプログラミングのメリット

 ペアプログラミングの利点は、以下の通りです。

  • 常にレビューされた状態になる
  •  必ず2名でコードを書いていくことになるため、できあがったコードは結果的にレビュー済みとなります。複雑で分かりにくいコードを極力減らすことが可能です。

  • チームワークの醸成・サボらない
  •  1人でコードを書く作業は想像以上に孤独です。気分が乗らないことや、頭が冴えないこともあるでしょう。2名の協働作業になることで、気分転換も含めながら着実に作業が進みます。また、ペアで作業することでチームの一体感が生まれ、ソフトウェア完成というゴールに向けて一丸となって進むことができます。

  • 知恵を出し合える
  •  経験豊富なプログラマであれば、さまざまなアルゴリズムや実装のテクニックを思いつくことができますが、そのようなプログラマがチーム内に多く存在するケースは希ではないでしょうか。ペアでのプログラミングは、どのようなコードを作成するか1人で悩み込んでしまうことを無くし、より良いアルゴリズム・コードにブラッシュアップしていくことが可能です。

  • 知識の底上げ・教育的配慮
  •  上述の通り、知恵を出し合うことがペアプログラミングなので、結果的にアルゴリズムや実装のテクニックのチーム内共有が進みます。特に、新人プログラマがベテランプログラマから学ぶことは多いようです。

  • コードの共同所有
  •  常に2名が同じコードを見てコードを書いているので、どのコードを取り上げても、誰か1人しか知らない・見たことがないという状況を回避できます。ソフトウェア開発の仕事は、実はコードを書いた後、リリースした後のメンテナンスが非常に重要なため、コードを理解できる人が多いほど、より良い環境であると言えるのではないでしょうか。

    ペアプログラミングのデメリット

     一方、欠点としては、以下が挙げられます。

  • ベテランが飽きる
  •  経験豊富なベテランにとっては、部下の教育やチームの一体感よりも、自身がたくさんの質の良いコードを書き、それが短納期・高品質なソフトウェアを作ることにつながると考えることがあるでしょう。プロ野球やプロバスケットボールのような「オールスターチーム」を作ることができているのであれば、ペアプログラミングは不向きかもしれません。

  • 生産性が落ちる
  •  2名が1つの作業を常に行うため、1人あたりの生産性が落ちることがあるようです。一方で、ペアプログラミングにより生産性が大きく向上したという報告も多々あるため、自分たちのチームに適しているかどうかの見極めは重要になりそうです。

【コラム】教育的配慮 VS 生産性

 当社内でも、ペアプログラミングのもたらす教育的配慮と生産性のどちらを取るべきか、という議論がしばしば起こります。当社では毎年数名の新卒学生を採用し、エンジニアとしての教育を開始します。こういった環境においては、単なる教育を繰り返して実戦投入を考えるよりも、ペアプログラミングを前提にすぐに実践投入して、先輩がナビゲーター・新入社員がドライバーになることで、新入社員はどんどんとスキルアップしていきます。教育的配慮を重く見る例ではないでしょうか。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ライブ! ペアプログラミング

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
グラス片手にアジャイル開発連載記事一覧

もっと読む

この記事の著者

アクセラテクノロジ株式会社 萩原 純一(ハギワラ ジュンイチ)

前職でスーパーコンピュータ向けのコンパイラやデータマイニングソフトウェア、テキスト検索ソフトウェアを設計/開発したのち、2001年にアクセラテクノロジ株式会社の設立に携わる。アクセラテクノロジ社ではエンタープライズサーチシステム「Accela BizSearch」シリーズの企画/設計/開発を担当。一...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5773 2011/03/28 18:05

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング