Share
Embed
Transcript
39 slides
-
ペアプログラミングとは "Write all production programs with two people sitting at
one machine. ... Pair programming is a dialog between two people simultaneously programming (and designing and testing) and to program better." (Extreme Programming Explained 2nd) 「プロダクションコードはすべて、2人で1台のマシンに向かって書くこと。…ペアプ ログラミングとは、プログラミングしながら2人で会話することだ(設計もテストも同 時にする)。会話するのは、もっと上手にプログラムするためである。」 -
よくある風景 • 難しいクイズを二人で一緒に考える • 二人で協力して研究し、論文発表する • 二人でドライブ中に道に迷い(カーナビのない時代)、 運転手は風景や標識を、助手席は地図を見ながら 目的地へ向かう •
夏休み最終日、親に助けてもらいながら宿題を片付ける • バトルに強い人と作戦に強い人のコンビ -
古くから知られているアプローチ • 「エゴレスプログラミング」…書いたコードを 「自分のもの」扱いせず、書いたら人に見てもらう 習慣のあるチームは、バグが少なくコードも読みやすい (『プログラミングの心理学』原書1971年初版) • 「ゴムのアヒルちゃん:問題の原因を探し出すための 非常に簡単で効果的なテクニックとして、「誰かに 説明する」という手法があります」
(『達人プログラマー』原書1999年) • 質問を受けたとき、答えを教えるのではなく 隣に座って一緒に問題に取り組む -
エクストリームプログラミング(XP) • 1999年に発表されたアジャイル手法 • 12個のプラクティスのひとつが「ペアプログラミング」 「…コードはすべて2人のプログラマが1台のマシンに 向かって作成される」 • 多くのプラクティスが、現在ではあたりまえになっている ◦
短期リリース ◦ テスト自動化 ◦ 継続的インテグレーション ◦ コーディング規約 -
• 問題に 切り込む • 前進する • やってみる • 全体を見渡す •
他の可能性を 探る • 前進を助ける • 情報収集する • 試行錯誤する • 一体となって助け合う -
• 問題に 切り込む • 前進する • やってみる • 全体を見渡す •
他の可能性を 探る • 前進を助ける • 情報収集する • 試行錯誤する • 一体となって助け合う 2つのモードを 激しく切り替える -
ペアプログラミングの効果-ユタ大学の研究 プログラミング 工数は増えるが、 15%しか増えない (2倍にはならない) ペアプロだと 品質が高い (不具合が少ない) ペアプロのほうが 楽しい
ペアプロだと同じ機能を 少ない行数で実現する (洗練された設計) “The Costs and Benefits of Pair Programming” Alistair Cockburn, Laurie Williams, 2000 https://www.researchgate.net/publication/2333697_The_Costs_and_Benefits_of_Pair_Programming -
ペアプログラミングの効果-ユタ大学の研究 • 作業中に間違いを見つけて直せるので、後工程に残らない (常時コードレビュー) • 不具合が減る(常時コードレビュー) • 設計がより良くなり、コード行数が減る (常時ブレインストーミングとペアリレー※) •
※常に相談し、意見交換し、一緒に考えることで問題解決が早くなる様子が観察さ れた • 問題解決が早い(ペアリレー) • 学習効果が高い。対象システムについてもソフトウェア開発の 技法についても(“教師の目が届く”効果) • 終了時、各自の理解している範囲が広くなる • 協力して働き会話も増えるため、情報の流れとチームのダイナ ミズムが生まれる • 仕事がもっと楽しくなる -
ドライバーとナビゲーター • ドライバー: 入力操作をして先へ進む • ナビゲーター: なにをしてどう進むかドライバーに指示する ドライバーはガシガシ前進する役割 ナビの指示で作業する、迷ったり悩んだら手を止める ナビゲーターは進路を見ながらサポートする役割
ドライバーの見落とし、勘違いなどをどんどんツッコむ 先のことを考えてドライバーを誘導する -
やり方まとめ 1. 最初にゴールを決め、ToDoリストを更新しながら進める 2. 手を動かすのはドライバー、ナビの指示で進む 3. もう1人はナビゲーター、相談しながら指示を出す 4. 情報を共有するためとにかくしゃべる 5.
ドライバーとナビゲーターは交代、1人7分間 6. 遠慮せず「わからない」と言う 7. 「やったー!」と言う 8. ふりかえりをする リモートでは できるだけ顔を出す -
ペアプログラミングとは "Write all production programs with two people sitting at
one machine. ... Pair programming is a dialog between two people simultaneously programming (and designing and testing) and to program better." (Extreme Programming Explained 2nd) 「プロダクションコードはすべて、2人で1台のマシンに向かって書くこと。…ペアプ ログラミングとは、プログラミングしながら2人で会話することだ(設計もテストも同 時にする)。会話するのは、もっと上手にプログラムするためである。」 「ペアプログラミングとは、プログラミングしながら 2 人で会話することだ(設計もテス トも同時にする)。会話するのは、もっと 上手 にプログラムするためで -
ペアプロのプロトコル 0. あいさつする 1. ゴールを決める 2. まず着手できるまでのToDoリストを作る 3. 役割を決めて作業を進める 4.
時間や区切りで交代する 5. 適宜手を止めて相談したり、ToDoリストを見直したり、 休憩したりする 6. セッション終了時に、簡単にふりかえりをする -
ペアの組み合わせについて • 相互に学ぶ気持ちを持つ • 異なる得意分野の組み合わせ • 教育効果を狙う ◦ これだけを考えるのは不利 ※難易度の高い組み合わせ
◦ 極端なスキル差、経験差 ◦ 新米どうし ◦ 人間的な相性、人間関係 ◦ 立場や力関係のある組み合わせ -
強みを生かし 弱みを補う 実 装 仕様 品質 実装 仕 様 実装
仕様 品 質 実 装 仕 様 品 質 組み替え -
リモートで気をつけること • 画面共有、共同編集 • 顔が見え声が聞こえるようなコミュニケーションチャンネル ◦ 文字、テキストも必要 • オフライン以上に、しゃべらないと不安が高まる •
交代方法 ◦ 共同編集できると便利 ◦ リポジトリ経由 -
組織へのメリット • テストフェーズや障害対応まで含めた工数削減 • トラックナンバーを大きくしレジリエンスを高める • 知識、経験、スキルを組織内に環流させる トラックナンバー チームから何人欠けたら、仕事が継続できなくなるか? 「X人が交通事故に遭って仕事を急に休んだら」という意味
Xが大きい方が、情報共有ができていて、耐性がある 縁起が悪いので、ハネムーンナンバーと呼ぶこともある -
多様性を結びつける • いろいろなスキルがあり、いろいろな人がいる • 分業ではなく協力することで、新たな知識が生まれる • 効率<効果 • 垣根を越えるペアプロ、ペアワーク ◦
組織を越える ◦ 職能を越える ◦ 役職を越える ◦ 意識を越える -
ペアの組み替え • ペアを組み替えて情報共有を広げる • 「これ知ってる」と言える人を増やす ◦ 「あの人しか知らない」を減らす • 個々人のスキル・知識・経験を組織のものとする •
必要なスキルが変わってきたとき • フレッシュな脳みそと目だまで仕事を見直す -
ペアの組み替えの例 • 毎週新しいペア ◦ 週40時間みっちり ◦ プロジェクトを越えることも • 1タスク1ペア、だいたい1日ごと ◦
1タスクを担当するペアとなる ◦ チーム内であれこれする • 毎時新しいペア ◦ タスクに付く人と、あちこちする人 ◦ 必要なスキルで呼ばれたり • いろいろ工夫する! -
やり方まとめ 1. 最初にゴールを決め、ToDoリストを更新しながら進める 2. 手を動かすのはドライバー、ナビの指示で進む 3. もう1人はナビゲーター、相談しながら指示を出す 4. 情報を共有するためとにかくしゃべる 5.
ドライバーとナビゲーターは交代、1人7分間 6. 遠慮せず「わからない」と言う 7. 「やったー!」と言う 8. ふりかえりをする リモートでは できるだけ顔を出す