ペアプログラミングをうまくやるためのチェックリスト

| | コメント(0) | トラックバック(0)
こんにちは。高橋(kappa)です。
最近僕たちのチームでは、本格的にペアプログラミングに取り組んでいます。

ペアプログラミングでは、二人一組で作業を行う特性上、効果的に作業を進めるためには、一人でコーディングする時とは違う考え方や習慣が必要です。

考え方や習慣は、一度本を読んだだけではなかなか変わりませんよね。
そこでシリウスではこのエントリの題名のようなチェックリストを用意し、ペアプロを終わるときにお互いの評価を毎回記入のうえ、口頭でフィードバックしています。
どのくらいできたか数で把握できるのと、フィードバックを習慣にできるため、最初は戸惑ったり迷ったりすることが多かったメンバーも、上手にペアプロでの作業を進められるようになってきました。

今回はこのチェックリストのご紹介です。全部で22項目あります。

休憩をとる

1. 定期的に休憩をとっていますか?
ペアプログラミングは、精神的な体力を消耗します。定期的に休憩をとってリフレッシュすることがとても大切です。

謙虚になる

2. 「色々な実装方針がある」という認識がありますか?
自分のやり方に従わないのなら、出ていけ」といった態度になっていませんか?
3. 自分の考えに対する批判を傷つく事なく受け入れられてますか?
自分の考えに対する批判を不信のサインだと勘違いしていませんか?

自信を持つ/受容性を持つ

4. 自分がすごいと思ってる人は、思っているより何でも知っているわけではないことを認識していますか?
自分のプログラミングスキルに自信が無い、不安に思う場合も気に病む必要はありません。
5. ナビゲーター(見てる人)をしているとき、ドライバー(キーボードを打つ人)がミスを修正する時間を与えていますか?
修正するタイミングは開発者によりまちまちです。ドライバーをよく観察し、相手に合わせてください。

コミュニケーション

6. ドライバーをしているときに進行中の作業についてこれから何をするのか、いま何をしているのかについて話してますか?
ペアプログラミングでは、15秒の沈黙ですら長すぎます。
7. パートナーが何をしているのか理解できない場合、中断して尋ねてますか?
それでも理解できない場合、もう一度尋ねてください。
8. パートナーの考えと論点を声に出して、言い換えたり、まとめたりしていますか?
パートナーには共感的になってください。

耳を傾ける

9. パートナーの言うことに耳を傾けていますか?
自分はパートナーの話そうとしていることを知っている、行っている作業を理解していると思いこんで、口を挟んだりしないでください。
10. ナビゲーターから質問を受けたときに、自分のやっていることや考えを明確に答えていますか?
「信頼して。うまくいくから」は受け入れられる答えではありません。

当事者意識をもつ

11. パートナーの仕事は自分の仕事であることを認識していますか?
ペアプログラミングは、お互いに100%の責任を持つ共同作業です。「君の設計にバグがあるよ」「そのバグは、君の分担部分が原因だ」などと言ったり、考えたりすることは許されません。
12. ナビゲーターをしているとき、いつでもドライバーを引き受けられるという自信をもっていますか?
そのように感じない場合、何が起きているのかを理解するためにドライバーになりたいと頼んでください
13. ナビゲーターをしているパートナーが疲れてきた場合、キーボードを渡していますか?
14. ドライバーをしている自分が疲れてきた時はキーボードを渡していますか?
15. ドライバーをしているパートナーが疲れていたら、キーボードを取り上げていますか?
16. 二人とも疲れている場合は、散歩する・休憩をとるなどして無限ループを阻止していますか?
17. パートナー同士で設計、方向性、技法についての対立は起きていますか?
対立が起きていなければ、ペアは機能障害を起こしています。
18. 対立が起きた際の処理の方法をうまく行えていますか?
最後にまとめてあります。

今やることに集中する

19. 議論をすることは本当に重要な問題だけにしていますか?
問題1つ1つに論争を起こすペアは、進捗を妨げます。ペアプログラミングの主な目的は、設計がどこからきたのか、誰が設計したのかに関係なく、できる限り最高の設計に向けて仕事をすることです。パートナーがdo-whileを使いたがっているが、forの方が良いと思う場合、主張や論争を行う前に、この場合では本当に重要なことなのか考えてください。
20. 今実装すべき機能の議論をしていますか?
実装しようとしている機能から派生した課題が出てきた場合、そちらの議論に夢中になり、今やるべきことを脇に押しやっていませんか?一度に実装する機能は小さくすべきです。新たに気づいた課題は、TODOリスト等に押しやって、実装すべき機能に集中してください。

その他

21. コーディング規約に沿ってコーディングしていますか?
コーディング規約に沿ってプログラミングをすることで、お互いが書いたコードが読みやすくなり、チームの生産性が向上します。
22. テストファーストで開発をしていますか?
テストファーストを実施することで、コード品質の維持等、実装作業全般にわたって良い影響を及ぼします。



最後に、項目18のパートナー同士の対立を解決する方法について4つ提示します。

パートナー間の対立を処理する4つの方法
  ・ ナビゲーターが、ドライバーを悩ませている議論を呼ぶ問題を記録し、定期的に問題をレビューしましょう。
  ・ 一定の時間、例えば10分間くらい離れて作業する。その間に、ソロプログラミング、プロトタイプ作成、紙と鉛筆での設計を行いましょう。その時間のあとそれぞれ調べたことを議論するためにペアに戻ってください。
  ・ 「5分間だけ作業させてくれ。君が見て気に入ったら、仕上げまで作業していいよ。気に入らなければ、元に戻って、別の方向で進もう」と言います。その際パートナーにタイマを渡すことが大切です。自分の考えを最後まで貫き、パートナーの決定権を奪おうとしているわけではないことを明確にしましょう。
  ・ 自分たちだけで解決できないパートナー間の問題は、リーダー/マネージャーに解決してもらいましょう。

以上です。

このチェックリストは、「ペアプログラミング—エンジニアとしての指南書」の内容を引用して作りました。
このリストが皆様のペアプロライフのお役に立てば幸いです。

トラックバック(0)

このブログ記事を参照しているブログ一覧: ペアプログラミングをうまくやるためのチェックリスト

このブログ記事に対するトラックバックURL: http://lab.cirius.co.jp/blog/cgi-bin/mt-tb.cgi/28

コメントする