メインフレーム全盛時代には、開発プロセスはベンダごとに試行錯誤を繰り返しながらそれぞれ独自スタイルの社内標準開発プロセスとして整備され、やがてそれら従来型がウォーターフォールと総称されるプロセスにほぼ収束してきました。
ウォーターフォール型プロセスの問題は変更・拡張に弱いことです。しかし変更・拡張は時代の要請で、変化するユーザーの要求に耐えられる開発プロセスとして反復型開発が提唱されました。その集大成の1つがRUPです。つまり、ウォーターフォール型というテーゼに対する、アンチテーゼとして反復型が登場したのです。
この流れは当初、プロトタイピングやスパイラル開発が試行されましたが、変更・拡張性に優れたオブジェクト指向技術の導入により、RUPやUPとして反復型開発プロセスが確立されました。
反復型開発の1つとして集大成されたRUPは大掛かりであり、短期・小規模開発には重過ぎると考える人たちがXPをはじめとするアジャイル開発を提唱しました。アジャイル派の価値観は、次のマニフェスト(Manifesto for Agile Software Development)にまとめられています。
RUPもアジャイル開発も反復型に分類されますが、その内側ではRUPというテーゼに対して、アジャイル開発がアンチテーゼという位置付けです。RUPもアジャイル開発も、オブジェクト指向技術に支えられた反復型開発という技術的な立脚点は同じですが、価値観は異なります。
RUPに刺激を受けてアジャイル開発が出てきたといえますが、逆にアジャイル開発からの影響がRUP(改訂されたRUP7)にうかがえます。
従来のRUPは「6つのベストプラクティス」がベースになっていました。RUP7では、それらは6つの基本原則として再構築され、プラクティスはパターンとしてその下に位置付けられました。XPはもともと[価値]−[基本原則]−[プラクティス]−[プロセス]の4階建てですが、RUPは[ベストプラクティス]−[プロセス]の2階建てから[基本原則]−[パターン]−[プロセス]の3階建てに再構築されました。従来のRUPの6つのベストプラクティスはすべて新しい「基本原則」と「パターン」に吸収されています。
【関連記事】
連載:オブジェクト指向の世界(20) − RUP7で開発の「苦」から解放される − ソフトウェア開発の四諦・苦集滅道
(@IT情報マネジメント)
パターンとは繰り返し起きる問題に対する解決策です。特定の問題領域のパターンを集めたものがパターン言語です。
開発方法論におけるベストプラクティスとは、過去からのさまざまな人たちによる経験や試行錯誤から得られた知見を集大成したものです。つまり1つ1つのベストプラクティスはいわばパターンであり、特定の問題領域のベストプラクティス集はパターン言語としてとらえることができます。
RUPは大規模開発で繰り返し起きるいつもの問題を解決する6つのベストプラクティスを抽出し、それをベースにして開発プロセス、つまり誰が、何を、いつ、どのようにという手順として具体的に決めたものです。
XPやアジャイル開発は短期小規模開発を対象にしたもので、それぞれの個人や組織の経験に基づくプラクティスがベースとなっています。XPのプラクティスは提唱者であるケント・ベックの経験がベースでRUPに比べてかなり個性的です。XPはペア・プログラミングで有名になりましたが、プラクティスはさまざまです。それらのプラクティスはパターン言語化できます。
【関連記事】
連載:オブジェクト指向の世界(19) − RUPをパターン言語として考える
(@IT情報マネジメント)
開発プロセスは1つには決められません。利害関係者や構築するシステムの規模や特性によって、プロジェクトごとに最適なものが必要です。RUPもそれぞれのプロジェクトごとにカスタマイズして利用するものです。
プロセスがどのようにしてできたのかその原点に立ち返れば、過去の経験から得られた知見がベースになっています。その知見であるプラクティスはパターンとしてとらえることができ、それらパターンの知識ベース作成のための1つの技法がパターン言語です。プラクティスをパターンとして知識ベースに蓄積・共有し、そこからプロジェクトに使えるパターンを検索して引き出し、そこから最適なプロセスを再構築できないでしょうか。つまり既存のプロセスをカスタマイズするのではなく、パターンからプロセスを再構築するということです。たとえていえば、ソフトウェア・パッケージをカスタマイズして使用するのではなく、既存の実績のある部品を組み合わせてアプリケーションを構築するスタイルです。
では何を根拠にしてパターンを抽出し、プロセスを再構築すればよいのでしょう。実績のあるパターンといってもプロジェクトの目的にそぐわないものもあるかもしれません。プロジェクトはまず第1に価値を明確にして利害関係者の間で共有しなければなりません。次に基本戦略となる基本原則を決める必要があります。その次の具体的な戦術として共有知である知識ベースから適当なものを検索して再利用し、そこからプロジェクトに最適なプロセスをデザインし再構築するわけです。
今回は開発プロセスの進化について、現在主流となっているRUPとアジャイルを中心に、互いに影響し合ってどのように進んできたのかという観点で考えてみました。アレグザンダーの3部作を軸足にし、ヘーゲルの世界観である弁証法を端的に表現した「世界はらせん的に進化する」をヒントにしました。世界は一方向に行き過ぎたら必ず反動があり、元に戻るようでも一歩進歩しています。振り子は左右に振れながら上昇するのです。
開発プロセスは、メインフレームの世界で実績を積んできた従来型がウォーターフォール・プロセスとして形成されました。しかし、変更・拡張性の問題からそのアンチテーゼとして反復型プロセスが提唱され、やがて反復型は変更・拡張性に優れたオブジェクト指向技術を導入してRUPに集大成されました。インターネット時代になり、短期・小規模開発には軽量なプロセスが必要になると、RUPのアンチテーゼとしてアジャイル開発が提唱されます。RUPもアジャイル開発も経験に基づくプラクティスから構築されたプロセスですが、異なる価値観に基づいています。
プロセスはプロジェクトごとに最適化する必要があります。制約なしにアプリケーション・ソフトウェアを作りたいとき、パッケージのカスタマイズではなく、実績のある部品の組み合わせで構築を行うように、プロセスもカスタマイズではなくもっと自由にしたい――。そこで原点に戻って、プラクティスから最適なプロセスをデザインし再構築するのがプラクティス指向です。これはプロセス指向のアンチテーゼです。
プラクティスは問題の解決策という意味ではパターンだといえ、ここでアレグザンダーのパターン言語の技法が使えそうです。パターンの知識ベースを共有知とし、パターン言語として登録・追加し、検索・参照してプロジェクトに必要なプロセスを再構築できる仕掛けが今後の課題でしょう。つまり、「プロセス指向からパターン指向へ」が本稿の趣旨です。
河合 昭男(かわい あきお)
大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。
オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立。OO/UML関連の教育コース講師・教材開発、Rational University認定講師、東京国際大学非常勤講師。
著書に『まるごと図解 最新オブジェクト指向が分かる』(技術評論社)、『まるごと図解 最新UMLが分かる』(技術評論社)、監修『JavaデベロッパーのためのUML入門』(ソフトバンククリエイティブ)、共著『明解UML――オブジェクト指向&モデリング入門』(秀和システム)など。『ITアーキテクト』(IDG)、『UML Press』(技術評論社)、『ソリューションIT』(リックテレコム)などの専門誌に執筆多数。
Webサイト:
Copyright © ITmedia, Inc. All Rights Reserved.