ソフトウェアの生産性を向上させたいと経営者も開発現場も思っているでしょう.それに対し,ソフトウェア開発の実態は1つ1つ手作りに近いという現状があります.なんとかしてソフトウェア開発を現代の発達した工業のように効率化できないだろうか,工業化の歴史から学ぶことはないだろうか.それがプロダクトラインという考え方が生まれたきっかけです.
Henry Ford 登場以前の工業は1つ1つ手作りでした.手作りだと顧客1人1人に合わせて仕立てることが可能ですが,生産性が低いため,単価を高くしないと元が取れません.ついでにいうと属人性が高いという問題もあります.つまり,品質や工数が生産者の技術レベルに強く依存する,勘と経験の世界で,技術の継承が難しいという状態です.これは現在のソフトウェア開発では1品ものの受託開発に相当します.
20世紀初頭に Henry Ford が登場し,大量生産(mass production)を発明しました.これは同一仕様の製品を大量に生産することで,細かい個別の顧客ニーズを無視するかわりに高い生産性を実現するというものです.大量に生産するほど固定費を広く薄く回収することができるので,単価を安く設定できるのが大きな武器でした.また,属人性を低くできるというメリットもあります.つまり,作業を高度に標準化できるので,1人1人の技術者は1つの作業に専門化でき,生産者の入れ替えが容易になります.これはパッケージソフトウェアに近い状態だと考える事ができます.
しかし,生活レベルの向上とともに消費者の基本的欲求が満たされるようになり,ニーズや価値観の多様化が起こりました.それにより魅力的な特徴(フィーチャー: feature)がないと売れない事態になります.こうなると大量生産では対応できません.
そこで次に登場したのが大量個別生産(mass customization)です.これは個々の顧客に適合させた物品を大規模に生産することです.つまり,個別の顧客ニーズに応える一方で,生産性は高くといういいとこ取りを狙うものです.ついでに属人性が低いとうれしいところです.
以上をまとめると次の図のようになります.
ところがここにジレンマがあります.大規模に生産するからにはエンドユーザーがたくさん存在します.一方でエンドユーザーそれぞれには個別の要求があります.かといって,たくさんのエンドユーザーの要求に1つ1つ個別対応していると生産性が悪くなります.したがって大量個別生産の実現のためにはブレークスルーが必要です.
着眼点は共通性です.エンドユーザーの要求には共通性があります.そこで,共通部分をプラットフォーム(platform)として再利用できるようにし,異なる部分をプラットフォームに結合する部品として実現すれば,個別対応能力と生産性を両立できます.これをソフトウェアで実現するのがプロダクトラインです.
ソフトウェアの世界でプロダクトライン(product line)と言った場合,厳密に言うと Software Product Line (ソフトウェア製品系列) または Software Product Line Engineering (ソフトウェア製品系列開発)の2つの意味合いがあり,よく混同されます.
Klaus Pohl, Günter Böckle, Frank van der Linden による Software Product Line Engineering (ソフトウェア製品系列開発)の定義は次の通りです.前述の説明から容易に理解できる定義ですね.
- 大量個別生産を実現するために
- プラットフォームを用いて
- ソフトウェアアプリケーションを
- ソフトウェア集約システム(≒組込みシステム)
- ソフトウェア製品
- 開発するパラダイム
- ソフトウェア製品系列とは次のようなソフトウェア集約システム群である
- 特定のマーケットセグメントやミッションのニーズを満たす,共通の管理されたフィーチャー群を共有する
- あらかじめ決められた方法でコア資産から開発する
参考文献
Klaus Pohl ほか ソフトウェアプロダクトラインエンジニアリング―ソフトウェア製品系列開発の基礎と概念から技法まで
Krysztof Czarnecki ジェネレーティブプログラミング
Pohl Clements & Linda Northrop Software Product Lines: Practices and Patterns