(57)【要約】【課題】  ソフトウェア部品数が大規模化した場合でも、ソフトウェア構成情報およびソフトウェア部品を記憶する手段に対する維持管理を容易にする。【解決手段】  個々のソフトウェア部品構成情報に対応したソフトウェア部品を、ユーザが独自にタグを定義できるマークアップ言語によって単一の木構造に構造化して記憶したソフトウェア部品データベース１５０と、ソフトウェア部品データベース１５０からソフトウェア構成情報を入力する構成情報入力部１１２と、入力したソフトウェア構成情報に基づいて部品選択画面を表示するとともに、ユーザによる部品の選択を受け付けるＧＵＩ部１１１と、部品選択結果に対応するソフトウェア部品をソフトウェア部品データベース１５０から入力するソフトウェア部品入力部１２２と、ソフトウェア部品入力部１２２で入力したソフトウェア部品を組み合わせてプログラムを生成する生成部１２１を有するプログラム自動構成装置。【選択図】図１
2008242873.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア構成情報および当該ソフトウェア構成情報に含まれる個々のソフトウェア部品構成情報に対応したソフトウェア部品を、ユーザが独自にタグを定義できるマークアップ言語によって単一の木構造に構造化して記憶したデータベース記憶部と、
前記データベース記憶部から前記ソフトウェア構成情報を入力する構成情報入力部と、
前記構成情報入力部が入力した前記ソフトウェア構成情報に基づいて部品選択画面を表示するとともに、ユーザによる部品の選択を受け付けるインターフェース部と、
前記インターフェース部で前記ユーザから受け付けた部品選択結果に対応するソフトウェア部品を前記データベース記憶部から入力するソフトウェア部品入力部と、
前記ソフトウェア部品入力部で入力したソフトウェア部品を組み合わせてプログラムを生成する生成部と、
を有するプログラム自動構成装置。
【請求項２】
請求項１記載のプログラム自動構成装置であって、
前記インターフェース部は、前記ユーザから受け付けた部品選択結果を前記マークアップ言語による部分木として構成して出力し、
前記ソフトウェア部品入力部は、前記インターフェース部で構成された前記部分木に対応するソフトウェア部品を前記データベース記憶部から入力するプログラム自動構成装置。
【請求項３】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記木構造において複数の下位の前記ソフトウェア部品構成情報を有する上位の前記ソフトウェア部品構成情報に、前記下位のソフトウェア部品構成情報に共通するソフトウェア部品を対応付けて記憶するプログラム自動構成装置。
【請求項４】
請求項２記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記木構造において複数の下位の前記ソフトウェア部品構成情報を有する上位の前記ソフトウェア部品構成情報に、前記下位のソフトウェア部品構成情報に共通するソフトウェア部品を対応付けて記憶し、
前記生成部は、前記上位のソフトウェア部品構成情報から前記下位のソフトウェア部品構成情報を辿りながら前記ソフトウェア部品を抽出し、組み合わせて前記プログラムを生成するプログラム自動構成装置。
【請求項５】
請求項１記載のプログラム自動構成装置であって、
前記生成部は、前記ソフトウェア部品入力部で入力したソフトウェア部品を結合し、コンパイル可能なソースコードとして出力するプログラム自動構成装置。
【請求項６】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記木構造における部分木をなす複数のファイルを互いに関連付けて記憶するプログラム自動構成装置。
【請求項７】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、選択必須の前記ソフトウェア部品構成情報と選択任意の前記ソフトウェア部品構成情報を区別して記憶するプログラム自動構成装置。
【請求項８】
請求項１記載のプログラム自動構成装置であって、
前記インターフェース部は、前記データベース記憶部の木構造に基づく階層をフォルダ形式で表示するプログラム自動構成装置。
【請求項９】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、分類タグを含むプログラム自動構成装置。
【請求項１０】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品に直接対応する構成情報を定義するタグを含むプログラム自動構成装置。
【請求項１１】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品の選択肢を定義するタグを含むプログラム自動構成装置。
【請求項１２】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品の設定パラメータを定義するタグを含むプログラム自動構成装置。
【請求項１３】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品の設定パラメータにおける設定内容の選択肢を定義するタグを含むプログラム自動構成装置。
【請求項１４】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品のソースコードが記述されたファイルを定義するタグを含むプログラム自動構成装置。
【請求項１５】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部は、前記ソフトウェア構成情報として、ソフトウェア部品のソースコードとなる文字列と当該文字列を挿入すべきファイルパス名を定義するタグを含むプログラム自動構成装置。
【請求項１６】
請求項１記載のプログラム自動構成装置であって、
前記データベース記憶部に記憶されたソフトウェア構成情報は、構成情報の分類を示す構成情報要素と、ソフトウェア部品を示す構成情報要素と、ソフトウェア部品の設定パラメータを示す構成情報要素とが区別されて格納されているプログラム自動構成装置。
【請求項１７】
請求項１記載のプログラム自動構成装置であって、
前記インターフェース部は、前記構成情報の分類を示す要素については分類を示す情報を表示し、前記ソフトウェア部品を示す要素についてはソフトウェア部品として表示し、前記ソフトウェア部品の設定パラメータを示す要素については設定パラメータとして表示するプログラム自動構成装置。
【請求項１８】
ソフトウェア構成情報および当該ソフトウェア構成情報に含まれる個々のソフトウェア部品構成情報に対応したソフトウェア部品を、ユーザが独自にタグを定義できるマークアップ言語によって単一の木構造に構造化して記憶したデータベース記憶部から前記ソフトウェア構成情報を入力し、
入力した前記ソフトウェア構成情報に基づいて部品選択画面を表示するとともに、入力デバイスでユーザに部品を選択させ、当該選択結果に対応するソフトウェア部品を前記データベース記憶部から入力し、
入力したソフトウェア部品を組み合わせてプログラムを生成するプログラム自動構成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム自動構成装置及び方法に関する。
【背景技術】
【０００２】
機器に組み込まれるソフトウェアは年々その複雑さを増しており、その開発時間，コストはとても大きなものになっている。そのような状況で、既存のソフトウェア部品を組み合わせて新たなソフトウェアを開発することが有用である。さらに、既存のソフトウェア部品に実績のあるものを選択することにより、それらを組み合わせて開発した新規ソフトウェアの品質を維持することも可能となる。
【０００３】
ただし、ソフトウェア部品を組み合わせる機械的な作業を人手で行う場合、その人為的なミスによりソフトウェアの不具合が混入する可能性が考えられる。また、組み合わせるソフトウェア部品の数が数百を超えるようになると、その機械的な作業も容易ではない。
【０００４】
既存のソフトウェア部品を組み合わせて新規プログラムのソースコードを自動生成するプログラム自動構成装置として、ソフトウェア構成情報を木構造に構造化して記憶する手段と、前記構成情報を構成する個々の構成情報要素に対応したソフトウェア部品を前記木構造と同じ木構造で記憶する手段を備えたものが知られている（例えば特許文献１）。２つの記憶手段がそれぞれ、ソフトウェア構成情報およびソフトウェア部品を同じ木構造で記憶することにより、ソフトウェア構成情報を構成する構成情報要素から容易に対応するソフトウェア部品を特定可能となる。
【０００５】
【特許文献１】特開平０２−１０５２２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術では、ソフトウェア構成情報を記憶する前記手段とソフトウェア部品を記憶する前記手段との間で、同じ木構造となるように各記憶手段が記憶する情報を維持管理しなければならない。ソフトウェア部品数が大規模になると、そのような維持管理に要するコストが大きくなってしまう。
【０００７】
本発明の目的は、ソフトウェア部品数が大規模化した場合でも、ソフトウェア構成情報およびソフトウェア部品を記憶する手段に対する維持管理を容易にすることである。
【課題を解決するための手段】
【０００８】
本発明は、ソフトウェア構成情報および当該ソフトウェア構成情報に含まれる個々のソフトウェア部品構成情報に対応したソフトウェア部品を、ユーザが独自にタグを定義できるマークアップ言語によって単一の木構造に構造化して記憶する。このデータベース記憶部から入力したソフトウェア構成情報に基づいて部品選択画面を表示するとともに、入力デバイスでユーザに部品を選択させる。そして、当該選択結果に対応するソフトウェア部品をデータベース記憶部から入力し、入力したソフトウェア部品を組み合わせてプログラムを生成する。好ましくは、ユーザから受け付けた部品選択結果をマークアップ言語による部分木として構成して出力し、当該部分木に対応するソフトウェア部品をデータベース記憶部から入力して、入力したソフトウェア部品を組み合わせてプログラムを生成することである。
【発明の効果】
【０００９】
ソフトウェア部品数が大規模化した場合でも、ソフトウェア構成情報およびソフトウェア部品を記憶する手段に対する維持管理を容易にできる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の一実施形態をなすソフトウェア自動構成装置の機能ブロック図を示す。図２は、図１のハードウェア構成を示す。
【００１１】
複数のソフトウェア部品を組み合わせて新規プログラムのソースコードを自動生成するソフトウェア自動構成装置は、自動構成部１００およびソフトウェア部品データベース
１５０から構成される。この例では、図１における自動構成部１００をコンピュータ201に配置し、ソフトウェア部品データベース１５０をサーバ２０２に配置している例を示している。しかしながら、自動構成部１００およびソフトウェア部品データベース１５０を同一のコンピュータに配置したり、自動構成部１００における部品選択部１１０およびコード生成部１２０をそれぞれ異なるコンピュータに配置したりしても構わない。
【００１２】
ソフトウェア部品データベース１５０には、ソフトウェア構成情報および複数のソフトウェア部品が格納される。ソフトウェア構成情報は構造化された複数のソフトウェア部品構成情報から構成される。ソフトウェア部品データベース１５０では、ソフトウェア部品構成情報とソフトウェア部品が対応付けられている。ソフトウェア部品構成情報とは対応するソフトウェア部品の名前や設定パラメータ等を示す。一方、ソフトウェア部品とはソースファイルまたは部分的なソースコード文字列を示す。ソフトウェア部品データベース１５０において、全てのソフトウェア部品およびソフトウェア部品構成情報は単一のツリーで管理され、部品構成情報＋ソフトウェア部品.xmlファイル１５１として格納される。
【００１３】
図３は、図１の部品構成情報＋ソフトウェア部品.xmlファイル１５１に含まれるツリーの例を示す。図４は、図３をＸＭＬによって記述した例を示す。ここではＸＭＬを用いた例を示すが、ユーザが独自にタグを定義できるマークアップ言語であれば良く、ＳＧＭＬ等を用いて記述してもよい。
【００１４】
図１に戻り、自動構成部１００は部品選択部１１０およびコード生成部１２０から構成される。部品選択部１１０はさらにＧＵＩ部１１１および構成情報入力部１１２から構成される。構成情報入力部１１２は、ソフトウェア部品データベース１５０に格納された部品構成情報＋ソフトウェア部品.xmlファイル１５１からソフトウェア部品構成情報のみを抽出し、それをインターフェース部としてのＧＵＩ（グラフィック・ユーザ・インターフェース）部１１１に出力する。ＧＵＩ部１１１は構成情報入力部１１２から入力したソフトウェア部品構成情報を基に、部品選択画面を表示する。図６は、図１のＧＵＩ部１１１の部品選択画面例を示す。そして、ソフトウェア自動構成装置のユーザ１６０からソフトウェア部品の選択を受け付ける。ソフトウェア部品の選択を受け付けると、ＧＵＩ部111はその選択結果をソフトウェア部品選択結果.xmlファイル１３０に出力する。図７は、図３に示すソフトウェア部品構成情報からソフトウェア部品“AnalogWeight”を選択してそのパラメータ設定として“AnalogPort”に“ＡＮ１”を設定し、ソフトウェア部品
“StartButton”のパラメータ設定として“DigitalPort”に“ＰＢ０”を設定し、ソフトウェア部品“Beeper”を選択した場合における、ソフトウェア部品選択結果.xmlファイルの内容を論理的なツリーで示している。図７に示すように、ソフトウェア部品選択結果
.xmlファイルに含まれるツリーは必ず図３に示す部品構成情報＋ソフトウェア部品.xmlファイルに含まれるツリーの部分木になるように、ＧＵＩ部１１１はソフトウェア部品選択結果.xmlファイルを出力する。なお、ソフトウェア部品の選択結果は必ずしもソフトウェア部品選択結果.xmlファイルに出力する必要はなく、オブジェクト等のメモリイメージとして上記選択結果をソフトウェア部品入力部に直接出力しても構わない。
【００１５】
コード生成部１２０は生成部１２１およびソフトウェア部品入力部１２２から構成される。ソフトウェア部品入力部１２２は、ソフトウェア部品選択結果.xmlファイル１３０を入力する。そして、同ファイルに含まれるツリーを基に、部品構成情報＋ソフトウェア部品.xmlファイル１５１から選択されたソフトウェア部品を抽出し、生成部１２１に出力する。生成部１２１はソフトウェア部品入力部１２２から入力したソフトウェア部品を適切に結合し、コンパイル可能なソースコードとして出力する。
【００１６】
以下では、本実施形態のソフトウェア自動構成装置を構成する各部について詳細に説明する。
【００１７】
図４に戻り、ＸＭＬによって記述した例を詳述する。ここではスペースの都合上、図３に示す論理的ツリーのうちノード３００〜３２１に対応するＸＭＬを示している。
【００１８】
図４において、<Group>や<Component>，<ChoiceComponent>，<Parameter>，
<ChoiceParameter>タグ内に定義される属性がソフトウェア部品構成情報を示している。例えば、<ChoiceComponent name=“BooleanWeight”>タグ４０６において、
“name=“BooleanWeight””
がソフトウェア部品構成情報を示している。以下、各タグについて説明する。
【００１９】
<Group> タグはソフトウェア部品構成情報を分類するためのものである。例えば図３において、ノード３００は図４における<Group>タグ４００に対応し、“MicrowaveOven”というオーブンレンジシステムそのものを定義している。すなわち、図３のツリーにおいてノード３００の子孫ノードは全てオーブンレンジシステムに関するソフトウェア部品構成情報またはソフトウェア部品であるという分類を示している。また、オーブンレンジシステムに関するソフトウェア部品構成情報は“Sensors”および“Actuators”に分類されることを、ノード３０２および３４０が示している。図４に示すように生成部タグを導入することにより、このような生成部タグの入れ子構造を表現可能にしている。そして、ノード３０４および３３０,３４１,３４２によって、分類“Sensors”には“WeightSensor”および“StartButton”というソフトウェア部品が属しており、分類“Actuators”には
“Beeper”および“Light”というソフトウェア部品が属していることが定義される。
【００２０】
<Component> タグは、ソフトウェア部品に直接対応する構成情報を定義するためのものである。例えば図３において、ノード３３０は“StartButton” というボタンに関するソフトウェア部品構成情報を定義する。なお、ノード３４１および３４２にはソフトウェア部品構成情報として“optional=“true”” が定義されている。これは、同ノードに対応するソフトウェア部品の実現する機能がオプションであることを示している。一方、ノード３３０には上記の定義がない。したがって、“StartButton” はオプションではなく必須の機能であることと定義される。
【００２１】
<ChoiceComponent> タグは、ソフトウェア部品に直接対応する構成情報を定義するためのものであり、ソフトウェア部品の選択肢を定義する。例えば図３において、ノード304および３０６，３１４により、“WeightSensor”というソフトウェア部品には
“BooleanWeight”および“AnalogWeight”が選択肢として定義される。これにより、
“WeightSensor”として“BooleanWeight”または“AnalogWeight” のいずれかのソフトウェア部品が選択されるべきであると定義される。具体的にはノード３０６は、図４における<ChoiceComponent>タグ４０６に対応し、“BooleanWeight”という重量センサに関するソフトウェア部品構成情報を定義する。<ChoiceComponent> タグにより、重量センサのうち“BooleanWeight” というソフトウェア部品が選択肢の一つとして定義される。また、ノード３１４は、図４における<ChoiceComponent> タグ４１４に対応し、
“AnalogWeight”という重量センサに関するソフトウェア部品構成情報を定義する。
<ChoiceComponent> タグにより、重量センサのうち“AnalogWeight”というソフトウェア部品が選択肢の一つとして定義される。
【００２２】
<Parameter> タグはソフトウェア部品の設定パラメータを定義するためのものである。そして、<ChoiceParameter> タグは上記パラメータにおける設定内容の選択肢を定義する。例えば図３において、ノード３０８は、図４における<Parameter> タグ４０８に対応し、ノード３０６“BooleanWeight”の設定パラメータとして“DigitalPort”を定義している。そして、ノード３１０および３１２はそれぞれ図４における<ChoiceParameter> タグ４１０および４１２に対応し、本パラメータの設定内容の選択肢として“PA0”および
“PA1”を定義している。
【００２３】
一方、<src>タグと</src>タグで挟んだ部分はソフトウェア部品を示している。<src>
</src>タグ内には<file>タグまたは<text>タグを挿入可能である。<file>タグと</file>タグで挟んだ部分はソースコードが記述されたファイルそのものをソフトウェア部品として示し、<text>タグと</text> タグで挟んだ部分は部分的なソースコードとなる文字列とそれを挿入すべきファイルパス名をソフトウェア部品として示している。例えば図４において、<ChoiceComponent>タグ４０６の直下にある<src>タグ４０７内には、ソースコードが記述されたファイル
“/src/Sensors/BooleanWeight/BooleanWeight.c”
および
“/src/Sensors/BooleanWeight/BooleanWeight.h”
がソフトウェア部品として示されている。また、<Parameter>タグ４０８の直下にある
<src>タグ４０９内には、ソースコード文字列を挿入すべきファイルパス名が
“/src/Sensors/Sensors.h”
であり、挿入されるソースコード文字列が
“#define WeightSensorPort”
であるソフトウェア部品が示されている。以上のように<file>タグおよび<text>タグを導入することにより、ファイルそのものをソフトウェア部品として扱うものと、ソースコード文字列をソフトウェア部品として扱うものとを生成部１２１は区別して処理することが可能となる。
【００２４】
そして、<src>タグを<Component>や<Parameter>、<ChoiceParameter> タグに挟むことにより、ソフトウェア部品とそのソフトウェア部品に対応するソフトウェア部品構成情報を一対一に対応付けている。例えば図４において、
“/src/Sensors/BooleanWeight/BooleanWeight.c”
というファイルを<src>タグ４０７内に挟み、同<src>タグを<ChoiceComponent> タグ406の直下に挟むことにより、“BooleanWeight”というソフトウェア部品構成情報と
“/src/Sensors/BooleanWeight/BooleanWeight.c”
というソフトウェア部品を一対一に対応付けている。
【００２５】
なお、例えば<Group>タグ４００の直下にある<src>タグ４０１内にもソフトウェア部品を定義することができる。前記のように<Group>タグ４００は“MicrowaveOven”というオーブンレンジシステムそのものを定義するものである。したがって、<src> タグ４０１にソフトウェア部品を定義することにより、同ソフトウェア部品をシステム全体で共通のソフトウェア部品として定義することが可能となる。このように、<Group>タグの直下にも
<src> タグを定義可能にすることにより、ソフトウェア部品間で共通のソフトウェア部品を定義可能である。
【００２６】
以上より、構成情報入力部１１２は、<Group>および<Component>、<ChoiceComponent>，<Parameter>，<ChoiceParameter>タグに注目することによりソフトウェア部品構成情報のみを抽出することが可能となる。一方、ソフトウェア部品入力部は<src> タグに注目することにより各ソフトウェア部品構成情報に対応するソフトウェア部品を抽出することが可能となる。
【００２７】
なお、部品構成情報＋ソフトウェア部品.xmlファイル１５１に記述される前記ツリーは論理的に単一のものであればよく、部分的なツリーが物理的に複数のファイルに記述されていても構わない。例えば図５に示すように、ハイパーリンクを用いることにより論理的には単一のツリーだが物理的には複数のファイルにソフトウェア部品およびソフトウェア部品構成情報を記述することも可能である。
【００２８】
構成情報入力部１１２は、部品構成情報＋ソフトウェア部品.xmlファイル１５１を入力しソフトウェア部品構成情報のみを抽出し、ＧＵＩ部１１１に出力する。具体的には、構成情報入力部１１２は<Group>および<Component>，<ChoiceComponent>，<Parameter>，
<ChoiceParameter>タグに注目することによりソフトウェア部品構成情報のみを抽出する。
【００２９】
ＧＵＩ部１１１は、構成情報入力部１１２からソフトウェア構成情報を入力し、同情報を基に部品選択画面を表示する。例えば図３（または図４）に示すソフトウェア構成情報を入力すると、ＧＵＩ部１１１は図６に示すような部品選択画面を表示する。ソフトウェア自動構成装置のユーザ１６０はマウスポインタ６４０を用いて同画面を操作することにより、ソフトウェア部品の選択やパラメータ設定を行う。
【００３０】
ＧＵＩ部１１１は、ソフトウェア構成情報を基に以下のようにツリー表示を行う。
<Group> タグで定義されたノードは、アイコン６０１，６０２，６０３，６０４のように、内容を展開可能なフォルダとして表示する。<Component> タグで定義されたノードについては、属性“optional”が定義されていない場合、アイコン６３０のように内容を展開可能なフォルダとして表示する。一方、属性“optional”が“true”と定義された
<Component>タグや<ChoiceComponent>タグで定義されたノードについては、６１０や611に示すようなチェックボックスを表示することにより、対応するソフトウェア部品がオプションまたは選択肢であることを示す。<Parameter>タグに対応するノードについては、６２０や６３１に示すようにアイコンを区別している。同アイコンがクリックされると
<ChoiceParameter> タグに対応するノード群を６５０に示すようにパラメータ選択肢として表示する。例えば図６は“AnalogPort”６２０がクリックされた場合における画面表示を示している。ここでは、図３においてノード３１６以下にあるノード３１８，３２０，３２２を、図６における６５０に示すようなパラメータ選択画面として表示する。
【００３１】
図６に示すような部品選択画面を介してソフトウェア自動構成装置のユーザ１６０からソフトウェア部品の選択やパラメータ設定を受け付けると、ＧＵＩ部１１１はその受け付けた結果をソフトウェア部品選択結果.xmlファイル１３０として出力する。図７は、ソフトウェア部品“WeightSensor”として“AnalogWeight”を選択しそのパラメータ設定として“AnalogPort”に“AN1”を設定し、ソフトウェア部品“StartButton”のパラメータ設定として“DigitalPort”に“PB0”を設定し、ソフトウェア部品“Beeper”をユーザ160が選択した場合における、ソフトウェア部品選択結果.xmlファイルの内容を論理的なツリーで示した例である。このように、構成情報入力部１１２から入力したソフトウェア部品構成情報の論理ツリーの部分木になるようにＧＵＩ部１１１は選択結果.xmlファイルを出力する。そのためには、あるノードに対応するソフトウェア部品が選択された場合、同ノードの親を含む全ての先祖ノードを同ファイルに含む必要がある。図７に示すツリーに対応するＸＭＬファイルの記述例を図８示す。
【００３２】
ソフトウェア部品入力部１２２は、ソフトウェア部品選択結果.xmlファイル１３０を入力するとともに、部品構成情報＋ソフトウェア部品.xmlファイル１５１における<src> タグに注目することにより、選択されたソフトウェア部品を特定する。具体的には、部品構成情報＋ソフトウェア部品.xmlファイル１５１をＸＭＬデータベースに格納した場合、
XPathやXQueryを用いることによりソフトウェア部品を特定することができる。
【００３３】
例えばXPathを用いた場合、次のようにソフトウェア部品を特定可能である。図３（または図４）に示す部品構成情報＋ソフトウェア部品.xmlファイルおよび図７(または図８)に示す選択結果.xmlファイルを考える。ソフトウェア部品入力部は選択結果.xmlファイルのツリーをルートノードからリーフノードに向かって辿りながら各ノードについて以下の処理を行う。
【００３４】
［ステップ１］
現在訪れているノードのXPathを求める。例えば、図８における<ChoiceComponent name=“AnalogWeight”>タグ８０１に対応するノードに現在訪れている場合、そのXPathは
“/Group[attribute::name=“MicrowaveOven”]/subGroups/Group[attribute::name=
“Sensors”]/subGroups/Group[attribute::name=“WeightSensor”]/ChoiceComponent
[attribute::name=“AnalogWeight”]”
となる。
【００３５】
［ステップ２］
ステップ１で求めたXPathの末尾に“/src”を追加する。これにより、前記XPathは
“/Group[attribute::name=“MicrowaveOven”]/subGroups/Group[attribute::name=
“Sensors”]/subGroups/Group[attribute::name=“WeightSensor”]/ChoiceComponent
[attribute::name=“AnalogWeight”]/src”
となる。
【００３６】
［ステップ３］
ステップ２で求めたXPath を用いてＸＭＬデータベースに格納された図４に示す部品構成情報＋ソフトウェア部品.xmlファイル内を検索する。これにより、<src> タグ４１５に挟まれた
<file>/src/Sensors/AnalogWeight/AnalogWeight.c</file>
および
<file>/src/Sensors/AnalogWeight/AnalogWeight.h</file>
という文字列を特定することができる。以上のように、<ChoiceComponent name=
“AnalogWeight”>というソフトウェア部品構成情報に一対一に対応する上記ソフトウェア部品を抽出できたことになる。
【００３７】
以上のように、ソフトウェア部品選択結果.xmlファイル１３０の論理的ツリーをルートノードからリーフノードに向かって辿りながら各ノードについて上記処理を行うことにより、必要なソフトウェア部品を全て抽出することができる。そして、ソフトウェア部品入力部１２２は抽出したソフトウェア部品を生成部１２１に出力する。
【００３８】
生成部１２１は、ソフトウェア部品入力部１２２から入力したソフトウェア部品を組み合わせソースファイルとして出力する。入力したソフトウェア部品がファイルそのものである場合、同ファイルをそのままソースファイルとして出力する。図４に示す部品構成情報＋ソフトウェア部品.xmlファイルのように、ソフトウェア部品であるファイルのパス名のみを定義し、ファイルの実体を個別にデータベースに格納することができる。また、ソフトウェア部品であるファイルの内容を全て部品構成情報＋ソフトウェア部品.xmlファイル１５１に含めることも可能である。
【００３９】
一方、生成部１２１が入力したソフトウェア部品がソースコード文字列である場合、生成部１２１は同文字列を指定されたファイルに挿入する必要がある。ここで、挿入すべきファイルの雛形をあらかじめ用意することも可能である。図９は、テンプレートエンジンである
Velocity(http://jakarta.apache.org/velocity/)
を用いた場合における、挿入すべきファイルの雛形の例として、“/src/Sensors/Sensors.h”ファイルの雛形を示している。図９において、文字列の挿入場所を“$component.
context” として定義している。Velocityでは、図９に示すように“#foreach”ディレクティブを用いることにより、複数の文字列を逐次的に挿入することができる。例えば、図３または図４に示す部品構成情報＋ソフトウェア部品.xmlファイルに対し図７または図８に示すソフトウェア部品選択結果.xmlファイルがソフトウェア部品入力部１２２に入力された場合を考える。このとき、ソフトウェア部品入力部１２２によって特定されるソフトウェア部品のうち、ノード３１６，３２０，３３１，３３２に対応するソフトウェア部品に注目する。これらのソフトウェア部品は、図４に示すように共通の挿入先ファイル
“/src/Sensors/Sensors.h”が指定され、それぞれ“#define WeightSensorPort”，
“AN1\n”，“#define StartButtonPort”，“PB0\n” というソースコード文字列であるとする（“\n”は改行文字）。この４つのソースコード文字列をソフトウェア部品入力部１２２から入力した生成部１２１は、Velocityを用いて図９に示す雛形ファイルに対し逐次的に挿入することにより、図１０に示すようなソースファイルを生成する。
【００４０】
図１１は、図３におけるノード３４０以下の部分木に対応するＸＭＬを示している。ここで図１１に示す部品構成情報＋ソフトウェア部品.xmlファイルに対し、図１２に示す選択結果.xmlファイルがソフトウェア部品入力部１２２に入力された場合を考える。このとき、図１２においてノード１２００および１２０１に注目すると、オプションであるソフトウェア部品“Beeper”および“Light” が選択されていることがわかる。ソフトウェア部品入力部１２２によって特定されるソフトウェア部品のうち、ソフトウェア部品
“Beeper”および“Light” に対応するソフトウェア部品については、図１１に示すようにソースコード文字列の挿入先ファイルとして“/src/FW/extern.h”，“/src/FW/init.c”，“/src/FW/entry.c”，“/src/FW/exit.c” が定義されている。上記ファイルの雛形ファイルをそれぞれ図１３，図１５，図１７，図１９に示す。図１１より、挿入先ファイル“/src/FW/extern.h”に対してはソースコード文字列“#include <src/Actuators/
Beeper/Beeper.h”および“#include <src/Actuators/Light/Light.h”、挿入先ファイル
“/src/FW/init.c”に対してはソースコード文字列“Beeper_init();\n”および
“Light_init();\n”、挿入先ファイル“/src/FW/entry.c”に対してはソースコード文字列“Light_on();\n” 、挿入先ファイル“/src/FW/exit.c”に対してはソースコード文字列“Beeper_beep();\n”および“Light_off();\n”を挿入することにより、生成部１２１はそれぞれ図１４，図１６，図１８，図２０に示すソースファイルを生成する。
【図面の簡単な説明】
【００４１】
【図１】本発明の一実施形態をなすソフトウェア自動構成装置の機能ブロック図を示す。
【図２】図１のハードウェア構成を示す。
【図３】図１の部品構成情報＋ソフトウェア部品.xmlファイル１５１に含まれるツリーの例を示す。
【図４】図３をＸＭＬによって記述した例を示す。
【図５】図３に示したファイルをハイパーリンクを用いて複数ファイルに分割した例を示す。
【図６】図１のＧＵＩ部１１１の部品選択画面例を示す。
【図７】図１の例で、論理的なツリーで内容を示した選択結果.xmlの例を示す。
【図８】図７に対応するＸＭＬを示す。
【図９】テンプレートエンジンを用いた例を示す。
【図１０】コード生成部１２０が生成したソースファイルを示す。
【図１１】論理的なツリーで内容を示した部品構成情報＋ソフトウェア部品.xmlの例を示す。
【図１２】論理的なツリーで内容を示した選択結果.xmlの例を示す。
【図１３】テンプレートエンジンを用いた場合の雛形ファイルを示す。
【図１４】コード生成部１２０が生成したソースファイルを示す。
【図１５】テンプレートエンジンを用いる場合の雛形ファイルを示す。
【図１６】コード生成部１２０が生成したソースファイルを示す。
【図１７】テンプレートエンジンを用いた場合の雛形ファイルを示す。
【図１８】コード生成部１２０が生成したソースファイルを示す。
【図１９】テンプレートエンジンを用いた場合の雛形ファイルを示す。
【図２０】コード生成部１２０が生成したソースファイルを示す。
【符号の説明】
【００４２】
１００  自動構成部
１１０  部品選択部
１１１  ＧＵＩ部
１１２  構成情報入力部
１２０  コード生成部
１２１  生成部
１２２  ソフトウェア部品入力部
１３０  ソフトウェア部品選択結果.xmlファイル
１５０  ソフトウェア部品データベース
１５１  部品構成情報＋ソフトウェア部品.xmlファイル
１６０  ユーザ
【図１】
2008242873.tif 000003
【図２】
2008242873.tif 000004
【図３】
2008242873.tif 000005
【図４】
2008242873.tif 000006
【図５】
2008242873.tif 000007
【図６】
2008242873.tif 000008
【図７】
2008242873.tif 000009
【図８】
2008242873.tif 000010
【図９】
2008242873.tif 000011
【図１０】
2008242873.tif 000012
【図１１】
2008242873.tif 000013
【図１２】
2008242873.tif 000014
【図１３】
2008242873.tif 000015
【図１４】
2008242873.tif 000016
【図１５】
2008242873.tif 000017
【図１６】
2008242873.tif 000018
【図１７】
2008242873.tif 000019
【図１８】
2008242873.tif 000020
【図１９】
2008242873.tif 000021
【図２０】
2008242873.tif 000022