大量の人員を投入し,一挙にソフトウエアを開発するような大規模プロジェクトでは,「XP」を使うことはできないのか──。XPに関する記事をまとめるにあたり,まず考えなければならなかったのは,このような問いだった。

 ここでいうXPは,マイクロソフトのWindows XPやOffice XPとは何の関係もない。エクストリーム・プログラミング(eXtreme Programming)という,新しいソフトウエア開発手法を指す。XPと言い出したのは,こちらの方が先である。

 XPは,「きちんと動き,かつユーザーにとって最も価値のある機能が含まれるソフトウエアをごく短期間で作り上げる」ことを狙った,新しいソフトウエア開発手法である。詳しくは,書籍「XPエクストリームプログラミング入門」(ピアソン・エデュケーション),Webサイト「eXtreme Programming FAQ」(http://objectclub.esm.co.jp/eXtremeProgramming/),日経コンピュータ6月4日号の特集などをご覧いただきたい。

 XPは基本的に“チーム”のための開発手法である。チームというのは,少なくとも2~3人,多くとも15人くらいまでを指す。50人や100人,あるいはそれ以上の要員がかかわる開発プロジェクトには,XPは向かない。このため,大手コンピュータ・メーカーや大手システム・インテグレータは「XPは,しょせん小さなプロジェクト向けの開発手法。大規模プロジェクトが中心の当社として,特に採用するつもりはない」と,(少なくとも数カ月前の時点では)異口同音に語っていた。

 しかし,大手企業の「XP=チームのためのもの=(大規模プロジェクトが中心の)当社にはカンケーない」という考え方は,はたして妥当なのだろうか。「そう思うのももっともだな」と同意しつつ,とても違和感を覚えたのも事実である。

“漸進的に”なら,大規模アプリケーションを作ることも可能

 大規模なソフトウエア開発プロジェクトという場合,(1)開発の要員数が多い,(2)開発対象となるアプリケーションの規模が大きい,という二つの側面がある。大手のいう大規模プロジェクトは通常,(1)(2)とも満たす。数百人もの開発要員を投入し,ステップ数換算で数百万ステップ以上のソフトウエアを一気に構築する。

 これに対し,XPが(1)を満たさないのは前述の通り。では,(2)はどうか?

 XPの提唱者であるケント・ベック氏は,「XPで大規模システムを作るのは可能だ」と言い切る。ただし,XPの大規模開発に対するアプローチは,一般の大規模開発プロジェクトとは大きく異なる。アプリケーションを一挙に作るのではなく,“漸進的に”作成するのだ。

 漸進的とは,最初からきっちりアプリケーションの仕様を決めるのではなく,最初は小さく作っておき,それを大胆に作り変えながら“成長”させていくことを指す。ベック氏は,このような開発の仕方をガーデニングにたとえる。

 「ガーデニングでは,植物を毎年少しずつ継続的に育てていく。ソフトウエアもそれと同じ。機能を毎年,毎年追加していくのが“自然”なのだ。どうして,一挙に機能を実現して前に進むなんてことができるのだろう。結局そのようにソフトを作っても,ガベッジ(ゴミ)となってしまい,廃棄されてしまうことが多々ある。XPは変化を排除するのではなく,変化を受け入れて(embrace),もっと変わっていこうという姿勢をとる。たった3人が6年のあいだ開発を進めた結果,大規模システムと呼べるほどに成長した例もある。XPの重要なキーワードは持続性(サステナピリティ)だ」。

 あらかじめ,システムの仕様を完全に固めておき,それを第1次開発,第2次開発などと段階的に実現するのは,XPの「漸進的な」アプローチとは180度異なることがわかるだろう。

 実は,ずいぶん前にベック氏と同じことを言っていた人がいる。日本におけるオブジェクト指向研究開発の先駆者であるSRAの青木淳氏だ。同氏は,「オブジェクト指向システム分析設計入門」という本のなかでこう説明している。「ソフトウエアの新たな開発は,小規模(小さな要求仕様と短い開発期間)に限定されるべきであり,急進的ではなく,漸進的に行わなければならない」*1。ちなみにベック氏と青木氏は,ともにSmalltalkというオブジェクト指向言語の著名な使い手でもある。

ソフトウエアの“本質”に逆らい続けてもよいのか?

 XPが漸進的なアプローチをとるのは,ソフトウエア工学のシロートである当方の理解では,XPは「ソフトウエアの“本質”に可能な限り忠実であろうとする開発手法」だからである。ソフトウエアの本質というと,とてもあいまいだが,例えば可塑性が大きい(要はめちゃくちゃ柔軟である),人間というファクタが大きく左右する,といったソフトウエア「らしさ」を形作っている要因のことだ(ほかにも,きっといろいろあると思うし,誤解している部分もあるかもしれない。皆様のご示唆を頂きたい)。

 要件定義にしても,設計にしても,あらかじめきっちりと決めることなど,そもそも不可能である。青木氏は前出の著書で,(1)利用者の要求仕様は永遠に確定しない,(2)開発者の設計仕様も永遠に確定しない,(3)ソフトウエアは完成することがない,という3点をオブジェクト指向のソフトウエア開発の「大前提」として挙げている。

 つまり,XPが漸進的なアプローチをとるのは,「ソフトウエアは本来,そのようにして開発すべきものだから」なのである。もちろん,どこかの時点でユーザーの要求を満たすシステムをきちんと作り上げなければいけない。ソフトウエアの本質に逆らうことなく,いかに開発者もユーザーもハッピーになれるようなソフトウエア開発を可能にするか---XPをこのような視点から見ると,実によく考えられて作られていることがわかる。

 逆に,大量の人員で一気に開発する大規模プロジェクトは,効率は一見いいように見えるものの,ソフトウエアの“本質”には限りなく逆らっているのではないか。それが前述の違和感につながっているのかもしれない。

 XPをぜひ使うべきだ,などと言うつもりは毛頭ない。XPにはあいまいな部分が少なくないし,問題点もいろいろある。何も考えずにXPを導入するのは,とても危険でさえある。しかし,あなたがソフトウエアの開発に何らかの形でかかわっているのなら,そのやり方で本当にいいのか,ひいては,いったいソフトウエアの開発はどうあるべきなのかを,XPを「題材」にして考えてみても,決して損にはならないはずだ。

(田中 淳=日経コンピュータ副編集長)

*1 「オブジェクト指向システム分析設計入門」を含む青木淳氏の著作は,http://www.sra.co.jp/people/aoki/で参照できる。