プロダクトライン開発における品質の向上効果
セイコーエプソン株式会社
島 敏博
前回の記事では、株式会社エクスモーションの山内 和幸さんによって、ソフトウェア・プロダクトライン(以下、プロダクトラインとします)の基本となる考え方について説明していただきました。プロダクトライン開発ではまず、変化にどこまで対応するかスコーピングを行い、次に可変性分析を行って共通部と可変部を分けた設計に変え、それらから導出して製品を作り出します。
今回は、プロダクトライン開発をおこなうことによって、または、いまの派生機種開発にプロダクトライン的な見方を加えることによって、品質面でどのような改善ができるのか考えてみます。
1. 管理するソースが減ることによって品質が向上する
プロダクトライン開発とは、ひとことでいうと、共通部と可変部をわけて開発することにほかなりません。しかも世代ごとに、可変部の内部で共通部を見つけて分離し、共通部分を増やしてゆくことが重要です。
もちろん、プロダクトライン開発に変えてゆく間も、既存製品群のリリースは続けなければなりません。既存製品群をリリースしながら、段階的にプロダクトライン開発に移行してゆくイメージは図1のようになります。
図 1:世代ごとに可変部の内部で共通部を見つけて分離する
図1では現在のソースコードを灰色、共通部を水色、可変部をピンク色で表現しています。開発を継続している製品が4機種あったとすると、一度にプロダクトライン化することは難しく、まず1つの機種を選択して、それを共通部と可変部に分けます。それを第1世代とします。
第2世代では、共通部を増やすとともに、同じ共通部を使って2機種を開発します。2機種の共通部は同じソースコードなので、ここからソースコード削減効果が生まれます。
さらに第3世代では、共通部をさらに増やすとともに、その共通部を使って4機種すべてを開発します。4機種の共通部は同じソースコードなので、さらにソースコード削減効果が生まれます。
このように、第1世代で、共通部と可変部を分けている段階では、まだソースコード削減効果が出ません。効果が出るのは同じ共通部から複数の機種を作り出せるようになった第2世代以降です。
製品群を生み出すのに必要なソースコードの量が少なくなれば、それだけで品質向上がねらえます。
2. 依存性を局所化して品質を向上させる
プロダクトライン開発では可変性分析をおこない、何かに依存している部分を局所化して設計を改善していきます。たとえば製品ごとに異なるOSを使った、複数の製品からなる製品群を作っているようなところでは、OSに依存している部分を局所化する設計に改めます。図1にOSに依存している部分を局所化したクラス構造を示します。
図 2:OS依存を局所化する
図2では、OSユーザークラスは、OSインターフェースクラスを使っています。OSインターフェースクラスを実装しているのが、Linux実装クラス、ITRON実装クラス、Windows実装クラスです。
Linux実装クラスだけが linux.h をインクルードしていて、ITRON実装クラスだけがitron.h をインクルードしていることに注目してください。このようにすることで、OSインターフェースクラスを使った OSユーザークラスはどのOSにも依存しないで実装できます。
OS間の違いによる動作の違いを局所化することで、それ以外への影響を少なくできます。これによってOS非依存部分の品質を高めることができます。
OSユーザークラスとOSインターフェースクラスの部分が全ての製品での共通部となります。
このように何かに依存している部分を派生した実装クラスに局所化し、その抽象インターフェースを使ってユーザープログラムを実装することで、ユーザークラスの品質を高く維持することができます。