製品ファミリーエンジニアリング

製品ファミリーエンジニアリング（PFE）は、プロダクトライン・エンジニアリングとも呼ばれ、1980年にカリフォルニア大学アーバイン校のジェームス・ネイバーズ（James Neighbors）が学位論文で用いた造語で、ソフトウェアエンジニアリング研究所（Software Engineering Institute）が生み出した「ドメイン・エンジニアリング（domain engineering）」の考えに基づいている。ソフトウェア製品ラインは、私たちの日常生活においてごく一般的なものですが、製品ファミリーを成功裏に確立するには、広範なプロセスに従わなければならない。このプロセスは、製品ファミリーエンジニアリングとして知られている。
製品ファミリーエンジニアリングは、組織の製品プラットフォームの基礎となるアーキテクチャを作成する手法として定義できる。これは、共通性と計画された可変性に基づくアーキテクチャを提供する。さまざまな製品バリエーションは、基本的な製品ファミリーから派生させることができるため、ファミリー内の製品を再利用し、差別化する機会が生まれる。製品ファミリーエンジニアリングは、自動車業界で広く使われている車両プラットフォームと概念的に似ている。
製品ファミリーエンジニアリングは、新製品を生み出すための比較的新しいアプローチである。製品のコンポーネントを再利用し、コストと時間を削減しながら可変性を適用できるように、新製品をエンジニアリングするプロセスに焦点を当てている。製品ファミリーエンジニアリングとは、コンポーネントや構造を可能な限り再利用することである。
製品ファミリーエンジニアリングのアプローチを製品開発に用いると、いくつかの利点があることがいくつかの研究で証明されている。以下にそのいくつかを列挙する：- 生産性の向上- 品質の向上- 市場投入までの時間の短縮- 労働力の削減
後述のノキアのケースも、こうした利点を示している。

**プロセス全体**
プロダクト・ファミリー・エンジニアリング・プロセスは、いくつかのフェーズから構成される。主な3つのフェーズは以下のとおりである：- フェイズ1: 製品管理- フェイズ2: ドメイン・エンジニアリング- フェイズ3: プロダクト・エンジニアリング
このプロセスは、より抽象度の高いレベルでモデル化されている。これには、ソフトウェアだけでなく、あらゆる種類の製品ラインや製品ファミリーに適用できるという利点がある。このモデルは、あらゆる製品ファミリーに適用できる。図1（下）にプロセス全体のモデルを示す。以下、プロセスを詳細に説明する。プロセスの説明には、アクティビティと使用されている重要な概念の詳細が含まれている。イタリック体で示した概念はすべて、表1で説明している。

**フェイズ1: 製品管理**
最初の段階は、プロセス全体の立ち上げである。この段階では、特に経済的側面に関して、いくつかの重要な側面が定義される。この段階では、市場戦略の概要と、製品ファミリーの中にあるべきものとそうでないものを示すスコープを定義する責任がある。

**ビジネスビジョンの評価**
この最初の活動では、製品ラインの範囲を定義するために関連するすべてのコンテキスト情報が収集され、評価される。明確な市場戦略を定義し、消費者の需要などの外部市場情報を考慮に入れることが重要である。この活動では、ガイドライン、制約条件、製品戦略を含むコンテキスト文書を作成する。

**プロダクトラインのスコープの定義**
スコープ技法は、どの側面がスコープの範囲内にあるかを定義するために適用される。これは、外的要因が考慮されたプロセスの前のステップに基づいている。出力は、現在および将来の製品のリストと製品ロードマップを含む製品ポートフォリオの説明である。
フェーズ1の製品管理が製品ファミリーエンジニアリングのプロセスの一部であるかどうかは議論の余地がある。しかしフェーズ2では、スコープの大部分がこのフェーズで定義されるため、このフェーズからの重要なインプットが必要となる。したがって、この観点からは、製品管理フェーズ（フェーズ1）をドメインエンジニアリングプロセスのベースとしてプロセス全体に組み込むことが重要である。

**フェイズ2: ドメイン・エンジニアリング**
ドメイン・エンジニアリングのフェーズでは、製品ライン全体の可変要件と共通要件が収集される。その目的は、再利用可能なプラットフォームを確立することである。このフェーズのアウトプットは、製品ラインの全製品の共通要件と可変要件のセットである。

**ドメイン要件の分析**
このアクティビティには、コンセプト要件に関してドメインを分析するためのすべてのアクティビティが含まれる。要件は分類され、2つの新しいアクティビティに分割される。アウトプットは、ドメイン分析の文書である。
図1に見られるように、共通要件を定義するプロセスは、可変要件を定義するプロセスと並行して行われる。両方の活動は同時に行われる。

**共通要件の定義**
製品ラインの共通要件を引き出して文書化するためのすべてのアクティビティが含まれ、その結果、再利用可能な共通要件を含む文書が作成される。

**可変要件の定義**
製品ラインの可変要件を引き出して文書化するためのすべてのアクティビティが含まれ、その結果、可変要件を含む文書が作成される。

**ドメインの設計**
このプロセス ステップは、製品ラインのリファレンス アーキテクチャを定義するアクティビティで構成される。これにより、製品ライン内のすべての製品の抽象構造が生成される。

**ドメインの実装**
このステップでは、再利用可能なコンポーネントの詳細な設計とこれらのコンポーネントの実装が作成される。

**ドメインのテスト**
コンポーネントの再利用性を詳細かつ有効性を検証する。 コンポーネントは仕様に照らしてテストされる。さまざまなユースケースやシナリオですべてのコンポーネントのテストが成功すると、ドメイン・エンジニアリングのフェーズが完了する。

**フェイズ3: プロダクト・エンジニアリング**
最終段階では、製品Xが設計されている。この製品Xは、ドメイン・エンジニアリングのフェーズの共通性と可変性を利用しているため、ドメイン・エンジニアリングのフェーズで確立されたプラットフォームから製品Xが派生している。 基本的に、前のフェーズからのすべての共通要件と類似点に加えて、独自の可変要件が適用される。ドメイン・エンジニアリングのフェーズのベースと製品エンジニアリングフェーズの個別の要件を使用して、完全な新製品を構築できる。製品が完全にテストされ、承認された後、製品Xを納品できる。

**製品要件の定義**
個々の製品の製品要件仕様を作成し、前のフェーズの要件を再利用する。

**製品の設計**
製品アーキテクチャを作成するためのすべてのアクティビティ。「ドメインの設計」ステップからのリファレンス アーキテクチャを利用し、リファレンス アーキテクチャの必要な部分を選択して構成し、製品固有の適応を組み込む。

**製品の構築**
このプロセスでは、再利用可能なコンポーネントの選択と構成を使用して製品が構築される。

**製品のテスト**
このステップでは、製品が仕様に照らして詳細かつ有効性が検証される。テストレポートには、実行されたすべてのテストに関する情報が記載されており、製品で発生する可能性のあるエラーの概要が示される。次のステップのプロダクトが受け入れられない場合、プロセスは「ビルドプロダクト」にループバックする。図1では、これは「unsatisfied」として示されている。

**製品の納品とサポート**
最後のステップは、最終製品を受け入れることである。 テストが正常に完了し、完成であることが承認された場合は、納品することができる。製品が仕様を満たしていない場合は、再構築して再度テストする必要がある。
次の図は、上で説明した製品ファミリー エンジニアリングの全体的なプロセスを示している。これは、さまざまなステップに関連するすべての概念を含む完全なプロセスの概要である。

**プロセスデータ・ダイアグラム**
左側には上から下までの全プロセスが描かれている。左側のすべてのアクティビティは、点線を通じて右側の概念にリンクされている。すべての概念には番号があり、他の概念との関連性を反映している。
図1: プロセスデータ・ダイアグラム

**コンセプトのリスト**
以下に概念を含むリストを説明する。 ほとんどの概念定義は Pohl, Bockle & Linden (2005) から抽出されており、いくつかの新しい定義も追加されている。
表1: コンセプトのリスト

**事例**
製品ファミリーエンジニアリングを使用して非常に成功した好例がいくつかある。製品ファミリーエンジニアリングの抽象モデルにより、さまざまな種類の使用が可能になるが、そのほとんどは家庭用電化製品市場に関連している。以下に、ノキアの実体験に基づいた製品ライン エンジニアリングプロセスの適用例を示す。
ノキアはさまざまな種類の製品を製造している。その中には携帯電話製品ファミリーも含まれており、現在では毎年25～30の新製品が含まれている。これらの製品は世界中で販売されているため、さまざまな言語とユーザーインターフェイスをサポートする必要がある。ここでの主な問題は、いくつかの異なるユーザーインターフェイスをサポートする必要があることである。また、新製品は非常に早く次々に成功するため、これを可能な限り効率的に行う必要がある。製品ファミリーエンジニアリングにより、さまざまな製品用のソフトウェアを作成し、多様性を利用してソフトウェアをさまざまな携帯電話ごとにカスタマイズすることが可能になる。
ノキアのケースは、通常のソフトウェア製品ラインと同等である。最初の段階である製品管理では、さまざまな携帯電話シリーズの範囲を定義できる。第2フェーズであるドメイン・エンジニアリングでは、ファミリーおよび個々のタイプの電話機 (6100/8300 シリーズなど) の要件が定義される。このフェーズでは、製品ファミリー全体のベースとして機能するソフトウェア要件が作成される。これにより、ソフトウェアの開発プロセス全体が高速化される。最後の段階である製品エンジニアリングでは、個々のタイプの電話機に重点を置く。前のフェーズの要件は、開発中の電話の種類に応じた個別のソフトウェアを作成するために使用される。
製品ラインの使用により、ノキアは新しい携帯電話モデルの生産を5～10モデルから約30モデルに増やすことができた。

**関連項目**
 Automatic programming- Domain analysis- Feature model- Feature-oriented programming- Multiagent systems product lines- Systems Engineering- Version Management

**脚注**
 Jan Bosch, Design and use of software architectures: adopting and evolving a product-line approach, ACM Press/Addison-Wesley Publishing Co., New York, NY, 2000 978-0201674941 https://www.amazon.com/Design-Use-Software-Architectures-Bosch/dp/0201674947- European Software Institute (ESI). Retrieved February 17, 2006, from: https://web.archive.org/web/20070203151901/http://www.esi.es/Families/famResults.html- Pohl K., Bockle G., & Linden F. van der (2005). Software Product Line Engineering. Berlin, Heidelberg, New York: Springer-Verlag. 978-3-540-28901-2ISBN 978-3-540-28901-2 https://www.amazon.com/Software-Product-Line-Engineering-Foundations-dp-3540243720/dp/3540243720

**外部リンク**
  Carnegie Mellon Software Engineering Institute (SEI) Software Product Lines (Archived Copy)-  European Software Institute (ESI)-  Software Product Lines-  Software Product Line Engineering Course, B. Tekinerdogan, Bilkent University-  University of Trier, Computer Science