図1  組み込みソフトウェアのソースコードに占める新規開発<BR>新規に開発したソフトウェアの行数の比率を示す。新規開発の行数が100万行以上となると,プログラムの再利用が不可避といえる。出典:2005年版組込みソフトウェア産業実態調査。
図1 組み込みソフトウェアのソースコードに占める新規開発<BR>新規に開発したソフトウェアの行数の比率を示す。新規開発の行数が100万行以上となると,プログラムの再利用が不可避といえる。出典:2005年版組込みソフトウェア産業実態調査。
[画像のクリックで拡大表示]
図2  ソフトウェア・プロダクトラインにおける開発の流れ&lt;BR&gt;あらかじめコア資産を開発する。このコア資産を用いて,製品開発を行う。コア資産の開発では,対象となる製品群における再利用可能な部分を切り出すプロダクトライン分析が重要になる。
図2 ソフトウェア・プロダクトラインにおける開発の流れ<BR>あらかじめコア資産を開発する。このコア資産を用いて,製品開発を行う。コア資産の開発では,対象となる製品群における再利用可能な部分を切り出すプロダクトライン分析が重要になる。
[画像のクリックで拡大表示]
図3  ソフトウェア・プロダクトライン適用による期間・工数の推移&lt;BR&gt;あくまでイメージを示した。派生品が多いほど,期間短縮と工数削減の効果が出る。
図3 ソフトウェア・プロダクトライン適用による期間・工数の推移<BR>あくまでイメージを示した。派生品が多いほど,期間短縮と工数削減の効果が出る。
[画像のクリックで拡大表示]
図4  ソフトウェア・プロダクトライン適用による信頼性とリスクの推移&lt;BR&gt;あくまでイメージを示した。派生品が多いほど,品質リスクは下がる。逆に信頼性の向上が見込める。
図4 ソフトウェア・プロダクトライン適用による信頼性とリスクの推移<BR>あくまでイメージを示した。派生品が多いほど,品質リスクは下がる。逆に信頼性の向上が見込める。
[画像のクリックで拡大表示]

 組み込み機器の大きな特徴として,派生品が多いという点が挙げられる。ユーザーのさまざまな要求に応えるために,多くのバリエーションを一つの製品系列に用意するのが現在では当たり前のようになっている。組み込みソフトウェア開発において,こうした状況に対応するための考え方が「ソフトウェア・プロダクトライン」である。

 今回は,組み込み開発現場で最近脚光を浴びているソフトウェア・プロダクトラインについて紹介したい。

派生品を効率よく開発する

 作る側からすると,単一の製品を多くのユーザーがそのまま使ってくれるとありがたい。スケールメリットは出るし,リソースを集中させることもできるので,コストの低減が図れる。開発部隊は一つの製品に注力すればよいので,品質の向上も望める。品質の良い,儲かる製品となり得る。

 しかし現実は,作り手の論理では進まない。市場の要求は実に多様だ。誤解を恐れずに言うと,ユーザーは非常にわがままである。十人十色の要求を持っている。DVDレコーダーなど,記憶媒体を内蔵するAV機器など好例だろう。ある人はとにかく大量に記録したい。少々値が張っても構わない。ある人はできるだけ安く購入したい。そのために記録容量が小さめでもよい。ほどほどの価格でほどほどの記録容量で,というユーザーも当然存在する。記録・再生という基本的な要求は同じでも,性能や価格,操作性,デザインなどの面で,それぞれのニーズに合う製品が求められる。

 こうした組み込み機器の宿命に,当然だがソフトウェア開発も無縁ではいられない。追加の機能をハードウェアだけで対応できるのならともかく,多くの場合は派生品の仕様にソフトウェアも合わせなければならない。こうなると開発工数の増大を招くし,品質面のリスクも抱えることになる。

 ではどうするか。一つ考えられるのがソフトウェアの再利用である。実際,多くの組み込みソフトウェア技術者は,多かれ少なかれ再利用を考慮あるいは実践しているし,そうでもなければ最近の開発規模(プログラム量)の増大に対応しきれない(図1[拡大表示])。

 もっともソフトウェアの再利用の仕方や程度は,技術者が置かれた状況で変わってくる。ソースコードをコピーして差異部分を書き換えるというレベルから,共通に使えそうな関数を部品化するレベル,同一製品群のソフトウェアを共通部分と派生部分を切り分け派生部の開発規模を極小化しようとする努力まで,さまざまである。

体系的な指針を与える

 このような取り組みに体系的な指針を与えるが,先に述べたソフトウェア・プロダクトラインである。ソフトウェア・プロダクトラインについて,米カーネギーメロン大学(CMU)のソフトウェア工学研究所(SEI)は,以下のように定義している。

 「ある市場セグメントあるいはミッションに特有のニーズを満たす,共通かつ管理された機能を共有する一式のソフトウェア・システム群。しかも,事前に作成されたコア資産の集合体によって開発されるもの」。

 いかがだろう。少々難しい言い回しになっているが,要は,組み込みソフトウェアで共通に使えるコア資産をあらかじめ作成しておき,それを活用して開発を行うということである。冒頭の議論に戻れば,派生品を効率良く開発できるかどうかは,製品間で相互に利用可能な共通部分をうまく切り分けられるかにかかっているといえる。

 ここで注意してもらいたいのは,「コア資産を事前に作成」という文言である。特に「事前に」がポイントだ。では,どのような手順でコア資産をあらかじめ開発するのか。その手順を図2[拡大表示]に示した。

 コア資産を開発するには,まず対象となる製品群(ドメイン)とその開発方式を徹底的に分析する必要がある。コアのつもりが実は共通には使えないことが後から判明するようでは,工数の無駄遣いだし,ソフトウェア・プロダクトラインの考え方の導入自体が破綻を来す。

 あらかじめコア資産を開発するプロセスを踏むと,単純に製品開発を行う場合に比べ工数は,ひと手間入っている分だけ増加する。一般には1.5倍から3倍になると言われている。それでもソフトウェア・プロダクトラインを導入するのは,次の派生品開発時に工数の減少と品質リスクの低下を見込めるからである。派生品の品種が増えていくと,このメリットはより大きくなる(図3[拡大表示],4[拡大表示])。最初の投資を回収し,それぞれ単独よりも高い効率での開発が見込める。

経営の支援が不可欠

 このようにソフトウェア・プロダクトラインの導入は,派生品開発の多い組み込みで効力を発揮しそうである。もちろん,初期のコア開発に相当な工数がかかるという点を忘れてはならない。チャレンジャブルな内容を含んでいるのがソフトウェア・プロダクトラインなのである。

 一般に日本の組み込みソフトウェア開発は,現場のがんばりで維持されてきた側面が強い。例えば部品化の取り組みも,志の高い現場では積極的に実施されている。しかし人手不足や厳しい納期,キーパーソンの異動でノウハウが継承できないといった現実を前に,志半ばで断念する現場も少なくない。ソフトウェア・プロダクトライン導入を掲げても,現場に何もかもを押し付けているようでは定着は覚束ない。会社全体での強い意思が求められるところである。

 またコア資産開発は,その性質から技術的に完成度の高いものが要求されるので,開発には優秀な技術者のアサインが不可欠である。技術革新によって,コア資産が陳腐化してしまう可能性もある。つねに見直しをかけるような体制が欠かせない。他人の作ったコア資産を流用することを「よし」とする文化に現場を転換することも求められる。

 いずれにせよ経営層の理解とバックアップが必要なのが,ソフトウェア・プロダクトラインの考え方である。組み込みソフトウェア開発現場の危機的な状況を救うのは,現場の頑張りだけではなく,会社全体を挙げての取り組みであることを忘れてはならない。

(室 修治=情報処理推進機構 ソフトウェア・エンジアリング・センター)