ここまでは「リスクを解消する」という視点で反復開発の現場のノウハウを見てきたが,反復開発そのものを実施する上で鍵となるようなノウハウもある。成功事例から得た4つのポイントを紹介しよう。

(1)複数の手法から“いいとこ取り”

 百科事典のように重いがしっかりとしたRUPも,軽くて動きやすいアジャイルも,根底には(1)リスク駆動の考えで,(2)フィードバックを早くして,(3)PDCAサイクルを続ける,という部分で一致する。そのため,「RUPやアジャイルの各手法は相性が良く,プロジェクトの状況に合わせて適宜組み合わせて使うとよい」(ウルシステムズ ディレクター,テクノロジ 河野正幸氏)。


図5●RUPとXPを組み合わせる
ディーシーカードは,これまでの失敗を繰り返さないため,RUPとXPを組み合わせて採用した
[画像のクリックで拡大表示]

 DCカードがカスタマイズした例を見てみよう。冒頭で紹介したように,同社の課題はカード会員向けサイトの画面に仕様変更が多いことだ。DCカードの小林氏は,まず現状の失敗原因を分析した(図5)。すると,仕様変更の多さの裏に,「仕様書がない」「あっても書き方が統一されていない」という問題が見えた。「優秀な技術者を集めていたが,そのためか仕様書がなくてもシステムを作れてしまった。コーディングも職人的だった。今は保守にとても苦労している」(小林氏)。

 そこで,フルセットのドキュメント(テンプレート)を参考にできる点と,反復開発を前提にする点でRUPを開発プロセスのベースに据えた。コードの品質を均一にするためには,XPのペア・プログラミング*11とテスト・ファースト*12を組み合わせた。

(2)究極の集中力アップ法「ペアプロ」

 奇異なプラクティスと見られがちなペア・プログラミングだが,実は反復開発を効率よく進めるための手法として導入を検討する価値がある。というのも,反復開発では短期間にシステムをリリースしなければならないので,1日1日,開発者が高い集中力を維持する必要がある。よくあるウォータフォール型開発のように,全開発期間の前半を比較的ゆったり過ごすようなことはできない(後半は地獄だが)。ペア・プログラミングは,反復開発に必要な「集中力」を引き出すことにおいて,絶大な効果を発揮する。

 ペア・プログラミングを実践すると,例えば「自分が打ち込んだコードの意図を相方に説明できなければ無駄とみなされてしまうこともある」(日立システムアンドサービス 研究開発センタ 技師 伊藤嘉隆氏)。それゆえ,集中力は自ずと高まっていく。長時間続けると,「残業する元気も残らないほどだ」(伊藤氏)という。


図6●ペア・プログラミングで集中力を高める
アッズーリではすべての作業をペア・プログラミングで実施している。ボードやバーンダウン・チャートと組み合わせてプログラマの集中力を引き出し,暗黙知の共有も図る
[画像のクリックで拡大表示]

 ペア・プログラミングを使ったXPの実践では,作業を視覚化することでメンバーのモチベーションを高めたり,進ちょくを管理したりすることが大事だという。ITベンダーのアッズーリでは,開発者が手を挙げて引き受けたタスク・カード(数時間単位に細分化した作業を書き込んだカード)を図6のようにボード上で管理する。タスク・カードには作業の計画と実績の時間を記入するようになっていて,それらの情報は「バーンダウン・チャート」と呼ぶ進ちょくのグラフにも反映される。「メンバー全員が計画と実績の状況を一目で理解できる。遅れが生じても,手を打つタイミングを誤らない」(システムサービス部 松本潤二氏)。

 従来なら1人でできる作業を2人で実施するため,「ペア・プログラミングはお金の無駄」と考える向きもある。しかし,集中力を維持できるため,生産性は高くなる。「2人で1.6人分くらいの作業量はこなせている。知恵の共有やコードの品質が高まることなどを加味すれば,トータルで2人分の作業量を超えるのではないか」と松本氏は話す。また,日立システムアンドサービスで,あるライブラリをペア・プログラミングで開発したところ,「1000ステップ当たりのテスト・ケース数は社内標準と比べて約2倍,バグは3分の1に低減した」(同社 伊藤氏)という。

 ただし,ペア・プログラミングに対するメンバーのモチベーションが低いと悲劇が待っている。あるXPプロジェクトに参画した技術者の1人は,こう打ち明ける。「XP推進者がペア・プログラミングをウォータフォール型開発の出身者に半ば強要したところ,全く生産が上がらないばかりか,両者の間に深い溝ができ,口もきかない状況になってしまった」――。

(3)「燃え尽き」に気をつけよう

 ペア・プログラミングに限らず,短いサイクルでシステムをリリースしていく反復開発では,どの作業でも多かれ少なかれ常に緊張状態にある。反復開発の効果は認めつつも,「ウォータフォール型と比べて本当にしんどい」(サントリー 川氏)という声があちこちで上がっている。この緊張状態を解消しておかないと,「燃え尽き」とよばれる疲弊状態に陥る可能性がある。

 これを避けるため,「反復終了後は必ず打ち上げをする」(川氏),「月曜日午前中と金曜日午後はあえて仕事をアサインしない,毎日午後3時から4時まではティー・タイム・ミーティングを設ける,などメリハリをつけることを意識的に実践している」(永和システムマネジメント サービスプロバイディング事業部 岸田健一郎氏)といった工夫が必要だ。

 また,「朝会ではその日の作業予定だけでなく,体調も申告してもらう。これでペアに配慮できるようになる」(アッズーリ 松本氏)など,反復開発ではより密なコミュニケーションを図る仕掛けを必要とする。集中力を高めるためにきちんと休み,隣の人の声に耳を傾けられるような目標設定と雰囲気作りが大切である。

(4)ツールの後ろ盾が必須


表1●ウェブクルーの清水氏が取り組んだ,開発環境の標準化と積極的なツール導入
[画像のクリックで拡大表示]

 反復開発では特に,ツールや標準の整備が大きな意味を持つ。例えば,ウェブクルー システム部 統括ディレクターの清水誠氏は,自社で運営する約20のWebサイトの開発スピードを上げるために「反復の単位を小さくしてリスクを回避すること」(清水氏)を心がけた。しかし,こうすると短い期間の中で多数のタスクが同時進行するようになる。それらを人手で管理するのは難しいため,表1のような対策を実施した。

 例えばツールについては,バグ管理システムを導入し,構成管理,自動テスト,情報共有などにオープンソース・ソフトウエアを利用した。これと並行して,WBS(Work Breakdown Structure)による作業タスクの標準化,仕様書の標準化を実施した。

 反復開発で仕様変更を柔軟に受け入れるためにも,自動テスト・ツールの採用が欠かせない。どんな小さな仕様変更でも,その後に実施するテストはプログラミング時と同じ内容だ。自動テスト・ツールでプログラミング時のテスト・ケースを再実行すれば,手間のかかる作業をあっという間に終わらせてくれる。自動テスト・ツールをベースにしたアジャイル開発プロセスの1つ「TDD(Test-Driven Development)」を実践してきたアジャイルウェア 代表の川端光義氏は,「DBのスキーマ変更も怖くない」と自信をのぞかせる。