宇宙機器,防衛機器,輸送機器,発電機器,環境システム機器,プラント計装・制御機器,ロボティクスなどに組み込むソフトウエアの大部分は,エンタープライズ・ソフトウエアとは異なる。自然法則,工学的定理・方法論などの適用に基づく,実時間における正しさの検証や確認(Verification and Validation)を必要とする。現代社会は,エンタープライズ系ソフトウエアに夢中であるが,資源が枯渇し,エネルギー問題,環境問題が社会を揺るがすようになれば,これら「システム系ソフトウエア」が注目されてくるはずだ。“組み込み”と呼ばれるソフトウエアは,この中に含まれる。

 一般に,システム系ソフトウエアでは,共通の性質をもつアプリケーション領域を特定して分類・体系化されたソフトウエア部品,ツール,ガイドラインなどを整備・管理・保守したプロダクト・ラインを利用した開発・保守が行われる。

有能な“ソフトウエア・ファクトリー・シェフ”が必要

 1960年代から1990年代まで,組み込みソフトウエアでは,プラットフォームも含めた実時間性保証などの視点から,プラットフォーム(OS,言語,通信基盤,ハードウエアなど)を含めた垂直統合型開発・保守が行われてきた。ところが,90年代に入ってから,水平分業による雇用拡大を可能にする開放型共通プラットフォームが採用されるようになり,特定のメーカーによるプラットフォームの寡占化が進むようになった。

 組み込みソフトウエアのなかで,品質特性(ISO/IEC 9126, JIS X 0129)がプラットフォームに依存するような実時間アプリケーションでは,垂直統合型開発・保守が原則とされてきたが,最近は,グローバルに共通化されているプラットフォームを外部から調達して利用するケースも見られる。しかし,特にミッション・クリティカルなシステムでは,調達元における随時の変更や改訂をコントロールできないことが致命傷になることがある。従って,アプリケーション・ソフトウエアからみたプラットフォームに対する依存性を低減するため,プラットフォームを仮想化するためのフレームワークを利用することが増えてきた(図6)。

図6●システム系ソフトウエアのアーキテクチャ
図6●システム系ソフトウエアのアーキテクチャ

 エンタープライズ・システムでよく使われている.NET Frameworkなどの汎用フレームワークは,組み込みソフトウエアには向かない。アプリケーション領域ごとの特性に合わせたフレームワークが必要になる。さらに,顧客が要求するアプリケーション領域の特性を記述するためのDSL(ドメイン特化型言語)を開発し,これを用いて顧客の要求を記述できるようにする。DSLを用いて記述された顧客要求は,アプリケーション・プログラムジェネレータやフレームワーク・ジェネレータによってアプリケーション・コードやフレームワーク・コードに変換され,相互に結合される。アプリケーション・ジェネレータ,フレームワーク・ジェネレータ,フレームワークは,アプリケーションを開発する前に,開発しておく。この開発はラインと切り離した別チームで行う。

 飲食店に例えてみよう。飲食店は,懐石料理,フランス料理などというようにアプリケーション領域を特定して設営される。そこには,店舗を特徴付けるメニューがあり,それはシェフによって開発される。メニューに従って注文された料理は,コックが調理する。ソフトウエア・ファクトリーは,これにならって,便宜上,上で述べた開発を行うチームのことをシェフ・チームとよび,顧客からの注文に応じてシェフ・チームが開発したDSL,コードジェネレータ,フレームワークなどを利用してプロダクトを開発するプロジェクトを,コック・チームと呼ぶ(図7)。

図7●シェフ・チームとコック・チームの役割
図7●シェフ・チームとコック・チームの役割

 有力なレストランは,良質の顧客を獲得するために名の知られたシェフを競って雇用する。ソフトウエア・ファクトリーが成功するか否かも,レストランの場合と同様,シェフの能力を持つ優秀なソフトウエア技術者の能力にかかっている。筆者の35年にわたる企業での体験では,顧客は有能な“ソフトウエア・ファクトリー・シェフ”を抱えるソフトウエア企業の前に行列を作り,競って重要なシステム開発・保守を委託しようとする。

 ソフトウエア・ファクトリー・シェフは,列を作る顧客の案件のなかから,長い目で見て,自社にとって最も有利な顧客を見定め,アプリケーション領域を範囲決めし,それにふさわしいメニューとレシピ(標準的プロダクトや標準的開発・保守プロセス)を開発する。さらに,コックに相当する一般的ソフトウエア技術者が開発・保守できるプロダクトと,実践可能なプロセスに変換する。この作業をコモディディ化と呼ぶ。

 コモディティ化されたメニューとレシピは,シェフの監督下で,コックによって実行(個々の顧客向け開発・保守)され,調理された料理(プロダクト)が顧客に提供される。シェフ・チームの主な役割は,DSL開発・保守・改善,フレームワーク開発・保守・改善,ソフトウエア部品資産の開発・保守・改善,コックの指導などである。コック・チームの主な役割は,資産を利用した顧客要求分析,資産を利用した開発プロセス計画・実行,資産を利用したテスティング,プロダクトのリリースと据え付け,シェフ・チームに対する問題のフィードバックなどである。

松本 吉弘(まつもと よしひろ)
工学博士
1954年,東京大学工学部卒業,東芝に入社。1970年~80年代に,東芝 府中で大規模ソフトウエア工場を立ち上げる。実績が世界的に評価され,ABBやシーメンスなどでソフトウェア工場へ協力する。カリフォルニア大学バークレー校、カーネギメロン大学などで特別講義も担当。1985年,東芝 理事。1989年,京都大学 教授。京大教授の間,京都高度技術研究所副理事長/所長。京大を退官後,大阪工業大学,武蔵工業大学 教授。現在,京都高度技術研究所 顧問