Software Factories のポイント

Software Factoriesは開発環境と開発プロセス、それを支援するアーキテクチャなどの開発資産を合わせた開発基盤技術です。開発方法論というと、開発手順、成果物、開発組織を決定するので、Software Factoriesは開発方法論を含んでいると言えるのですが、特定の開発方法論を決めないでその枠組みだけを決めている点で、開発方法論ではありません。

現在までに、開発の生産性やプロジェクトの成功確率の改善のために、多くの技術が開発され利用されています。コンポーネントやフレームワーク、IDEやソースコード管理、UMLやBPMNなどのその他のモデル言語、OOPやAOPなどの開発言語、デザインパターンやコーディング規約、アジャイルプラクティスなどの決めごと、RUPなどの開発方法論、WebサービスやSaaSの技術などなど。

こうした技術、要素技術ともいう、は、それぞれの前提条件や役割で、技術の発展に貢献するために開発や策定されたのですが、全体を網羅し、あるいは、一貫性を考えて体系化されているわけではありません。したがって、技術者は要素技術を自己責任で経験というあやうい基準で組み合わせて利用することになります。

ある調査によると、こうした要素技術が出た結果、飛躍的な生産性の改善やプロジェクトの成功確率が高くなるだろうという予想に反して、ほとんど改善がみられていないという結果があります。前提となる開発の条件を無視して、この結果を鵜呑みにすることはできないのですが、少なくとも、要素技術が本来効果を発揮するだろうという結果にはなっていないということです。

これにより、現在求められているのは、要素技術を増大させ、複雑さを増すことではなくて、これらを束ねる仕組みを作ることであると考えます。Software Factoriesはその1つの有望な選択肢となると期待しています。願わくば、同様な、体系的な基盤が複数出現することで、Javaと.NETの関係のような進化の相乗効果が出てくればなおいいだろうと思っています。

Software Factoriesに関する細かな技術項目の説明は将来に譲りますが、ここでは、3つのポイントを説明します。

 1つ目は、生産性を評価する尺度です。各人の生産性の差を考慮すると、個人差によらない評価法が必要となります。それには行程の特定作業に対して生産性を評価する方法をとればいいでしょう。そのために開発プロセスを再利用可能な定義で分割してモデル化し、そのモデルの組み合わせで全体の開発プロセスを実行するようにします。この単位プロセスのモデルに対して生産性を評価します。

2つ目は、再利用のためのコストです。生産性の改善には再利用が不可欠です。が、再利用可能な資産を利用することで得られるコスト削減と、再利用資産を開発するために費やす余計なコストがあります。いままでは、このコストを正当化するための方法がありませんでした。これを「特性」というモデルで評価します。特性は、簡単にいえば、可変性の単位となる仕様です。可変性とは開発プロジェクトによって使う資産と、使わない資産の選択を与える単位です。ですので、再利用はこの可変性の単位である特性を基準して実行されます(特性は複数の開発資産、開発ツールなどで実現される)。ですから、特性にコストを割りつけると再利用コストが説明できるようになります。

3つ目は、可変性をリスクと考えることです。将来どうなるか未確定な仕様や要求の変化をリスクととらえます。このリスクをコストに置き換えて、現在のシステム価値に反映させます。

こうした評価法と、開発環境が強制する開発プロセスによって、ソフトウェア開発がより工業的、つまり、個人差に依存しないで効率化を実現しようとします。そこに、アーキテクチャやフレームワーク、開発方法論をからめていくという発想です。