ソフトウェア・プロダクトライン ~「製品開発」から「製品群開発」へ
株式会社エクスモーション
シニアコンサルタント 山内 和幸
4.SPLのキー要素(2):可変性管理
スコープに含まれる製品の間には、共通なものと異なるものがあります。下図を見て下さい。ここで、3つの円がそれぞれ製品A/B/Cの資産だとします。この時、全ての製品で共通となる部分を共通部(common part)、それ以外を可変部(variable part)と呼びます。可変部の内、特定の製品でしか使わない資産は、製品固有部(product-specific part)と呼ぶこともあります。SPL開発では、この共通部と可変部を管理することで、製品ファミリの開発の最適化を図ります。これを、可変性管理(variability management)、または共通性・可変性管理(commonality-variability management)と言います。
図 5:共通部と可変部
可変部には「なぜその違いが発生するのか」の理由があります。これを可変性(variability)と呼びます。裏を返せば、製品ファミリに可変性があるということは、その違いを生み出すことができることを示しています。そして、可変性には変化の種類が存在します。代表的なものはオプション(optional)と代替(alternative)です。前者は製品に搭載する/しないを選択できるもので、後者は幾つかの選択肢の1つを選ぶものです。簡単な例として、ディジタル腕時計ファミリを考えます。このファミリには、以下の4つの製品が含まれるものとします。
- 12時間表示ディジタル腕時計
- 24時間表示ディジタル腕時計
- アラーム機能付き12時間表示ディジタル腕時計
- アラーム機能付き24時間表示ディジタル腕時計
この時、このディジタル腕時計ファミリには、時間表示機能(12時間と24時間の代替)とアラーム機能(オプション)の2つの可変性が存在します。このようにして特定された可変性を管理していく際には可変性モデルを利用するのが一般的です。可変性モデルの内、最もよく知られているものはフィーチャモデル(feature model)でしょう。これは、製品ファミリを特徴づける要素(フィーチャ)をツリー上に表現したものです。ディジタル腕時計ファミリの例では、以下のようにモデル化できます。
図 6:ディジタル腕時計ファミリのフィーチャモデル
したがって、各製品を効率良く開発するためには、コア資産は以下の要件を満たす必要があります。
- 時間表示機能を(製品に載せる前に)12時間/24時間に切り替えられること
- アラーム機能の搭載/非搭載が切り替えられること
可変性を分析・管理することによって、開発すべきソフトウェアにどのような柔軟性が求められるのか、それを実現するためにどんな技術を利用するべきかが明確になります。これは、「保守性」という品質特性に関して、その要件を明確にすることと捉えることができます。
5.可変性管理に基づく製品の導出
製品を開発する場合、可変性モデルに記述されている可変性をどのように扱うかを決定します。前述のディジタル腕時計の例だと、アラーム機能を搭載するのか/しないのか、時間表示は12時間/24時間のどちらにするのかを決定します。この決定内容に従って、コア資産の可変点(variation point)をコンフィグレーションしていきます。可変点とは、コア資産中の可変性を実現している場所のことです。例えば、アーキテクチャ上でアラーム機能を実現するコンポーネントが定義されていて、この搭載/非搭載が切り替わるとしたら、このコンポーネント自体が可変点になります。このようにして、コア資産が現在開発中の製品に適した形に変換されます。この一連の過程を導出(derivation)と言います。
図 7:可変性の決定による製品の導出
コア資産から製品用の資産が導出されるということは、コア資産には共通部だけでなく、可変部も含まれるということがわかります。製品固有部でない可変部は幾つかの製品間で共有されるため、コア資産に含めることができます。 もちろん、新製品開発時にはコア資産に含まれない新機能や、製品固有部の開発なども含まれます。前者は通常ドメイン・エンジニアリングで、後者はアプリケーション・エンジニアリングで開発を行います。