(57)【要約】      （修正有）【課題】コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にする。【解決手段】ソフトウエアの構造を解析してコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置１であって、前記ソフトウエアのコンフィグレーション項目消去前のソースコード７２を取得するソースコード取得手段と、該ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコード７２を解析して、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段５０と、前記コンフィグレーション項目解析手段５０の出力に基づいて、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を記述したレポートを作成するレポート作成手段６０と、を備える。【選択図】図１
2012194748.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアの構造を解析して、該ソフトウエアのソースプログラム中に現れ、数値、文字列その他のデータ構造を代入可能なコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置であって、
前記ソフトウエアのコンフィグレーション項目消去前のソースコードを取得するソースコード取得手段と、
該ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段と、
前記コンフィグレーション項目解析手段の出力に基づいて、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を記述したレポートを作成するレポート作成手段と、
を備えるコンフィグレーションレポート作成装置。
【請求項２】
請求項１に記載のコンフィグレーションレポート作成装置であって、
前記コンフィグレーション項目解析手段は、前記ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、前記コンフィグレーション項目を含むプログラム要素を複数のノードとし、該複数のノードが連結されたツリー状のデータ構造を出力する手段である、
コンフィグレーションレポート作成装置。
【請求項３】
請求項２に記載のコンフィグレーションレポート作成装置であって、
前記コンフィグレーション項目解析手段は、前記コンフィグレーション項目消去前のソースコードにおける「#ifdef」、「#endif」、「#else」の存在に基づいて、前記ツリー状のデータ構造における分岐箇所、及び合流箇所を決定する手段である、
コンフィグレーションレポート作成装置。
【請求項４】
請求項１ないし３のいずれか１項に記載のコンフィグレーションレポート作成装置であって、
前記ソースコード取得手段は、前記ソフトウエアを構成するソースファイルとヘッダファイルが入力されると、該ソースファイルとヘッダファイル内で定義されたインクルード関係のみを解釈して前記コンフィグレーション項目消去前のソースコードを取得する手段である、
コンフィグレーションレポート作成装置。
【請求項５】
コンピュータを、ソフトウエアの構造を解析して、該ソフトウエアのソースプログラム中に現れ、数値、文字列その他のデータ構造を代入可能なコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置として機能させるためのコンピュータ読み取り可能なプログラムであって、
該コンピュータを、
前記ソフトウエアのコンフィグレーション項目消去前のソースコードを取得するソースコード取得手段と、
該ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段と、
前記コンフィグレーション項目解析手段の出力に基づいて、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を記述したレポートを作成するレポート作成手段と、
として機能させるためのコンピュータ読み取り可能なプログラム。
【請求項６】
請求項５に記載のプログラムであって、
前記コンフィグレーション項目解析手段は、前記ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、前記コンフィグレーション項目を含むプログラム要素を複数のノードとし、該複数のノードが連結されたツリー状のデータ構造を出力する手段である、
プログラム。
【請求項７】
請求項６に記載のプログラムであって、
前記コンフィグレーション項目解析手段は、前記コンフィグレーション項目消去前のソースコードにおける「#ifdef」、「#endif」、「#else」の存在に基づいて、前記ツリー状のデータ構造における分岐箇所、及び合流箇所を決定する手段である、
プログラム。
【請求項８】
請求項５ないし７のいずれか１項に記載のプログラムであって、
前記ソースコード取得手段は、前記ソフトウエアを構成するソースファイルとヘッダファイルが入力されると、該ソースファイルとヘッダファイル内で定義されたインクルード関係のみを解釈して前記コンフィグレーション項目消去前のソースコードを取得する手段である、
プログラム。
【請求項９】
請求項５ないし８のいずれか１項に記載のプログラムが格納された、コンピュータによってデータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアの構造を解析してコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置、及びこれを実現するためのコンピュータ読み取り可能なプログラム並びに記憶媒体に関する。
【背景技術】
【０００２】
コンピュータにより実行されるプログラムを開発する現場では、Ｃ言語等のヒューマン・リーダブルな言語で記述されたソースファイル及びヘッダファイルに対して、プリプロセス、コンパイル、リンク等の処理を行って、コンピュータにより直接実行可能な機械語に変換する処理が行われている。
【０００３】
特許文献１には、ソースプログラムに対して自動最適化を実行し、オブジェクトプログラムを生成するコンパイルシステムについて記載されている。
【０００４】
ところで、ソースファイルやヘッダファイルには、数値、文字列その他のデータ構造を代入可能なコンフィグレーション項目が存在する。このコンフィグレーション項目は、デバッグやシミュレーションをする上で重要な要素であり、プログラム開発の現場では、コンフィグレーション項目間の関係やコンフィグレーション項目と関数の関係を認識する必要性が高い。
【０００５】
従来は、このようなコンフィグレーション項目に関する情報を得るために、人がソースコードに対してＯＳ（オペレーティングシステム）のコマンドを用いて調査を行っていた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１４０３４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特に大規模なプログラムでは、コンフィグレーション項目が多くなり、これらと関数との関係が入り組んだものとなる。これを人がＯＳのコマンドを用いて調査した場合、長い時間を要することが多く、また誤認を生じる可能性も高いものとなる。
【０００８】
本発明はこのような課題を解決するためのものであり、コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にすることが可能なコンフィグレーションレポート作成装置、及びこれを実現するためのプログラムを提供することを、主たる目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するための本発明の第１の態様は、
ソフトウエアの構造を解析して、該ソフトウエアのソースプログラム中に現れ、数値、文字列その他のデータ構造を代入可能なコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置であって、
前記ソフトウエアのコンフィグレーション項目消去前のソースコードを取得するソースコード取得手段と、
該ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段と、
前記コンフィグレーション項目解析手段の出力に基づいて、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を記述したレポートを作成するレポート作成手段と、
を備えるコンフィグレーションレポート作成装置である。
【００１０】
この本発明の第１の態様によれば、コンフィグレーション項目消去前のソースコードを解析して、少なくともコンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段を備え、その出力に基づいてレポートを作成するため、コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にすることができる。
【００１１】
本発明の第１の態様において、
前記コンフィグレーション項目解析手段は、前記ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、前記コンフィグレーション項目を含むプログラム要素を複数のノードとし、該複数のノードが連結されたツリー状のデータ構造を出力する手段であるものとしてもよい。
【００１２】
この場合、
前記コンフィグレーション項目解析手段は、前記コンフィグレーション項目消去前のソースコードにおける「#ifdef」、「#endif」、「#else」の存在に基づいて、前記ツリー状のデータ構造における分岐箇所、及び合流箇所を決定する手段であるものとしてもよい。
【００１３】
また、本発明の第１の態様において、
前記ソースコード取得手段は、前記ソフトウエアを構成するソースファイルとヘッダファイルが入力されると、該ソースファイルとヘッダファイル内で定義されたインクルード関係のみを解釈して前記コンフィグレーション項目消去前のソースコードを取得する手段であるものとしてもよい。
【００１４】
本発明の第２の態様は、
コンピュータを、ソフトウエアの構造を解析して、該ソフトウエアのソースプログラム中に現れ、数値、文字列その他のデータ構造を代入可能なコンフィグレーション項目に関するレポートを作成するコンフィグレーションレポート作成装置として機能させるためのコンピュータ読み取り可能なプログラムであって、
該コンピュータを、
前記ソフトウエアのコンフィグレーション項目消去前のソースコードを取得するソースコード取得手段と、
該ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段と、
前記コンフィグレーション項目解析手段の出力に基づいて、少なくとも前記コンフィグレーション項目と、関数その他のプログラム要素との関係を記述したレポートを作成するレポート作成手段と、
として機能させるためのコンピュータ読み取り可能なプログラムである。
【００１５】
この本発明の第２の態様によれば、コンフィグレーション項目消去前のソースコードを解析して、少なくともコンフィグレーション項目と、関数その他のプログラム要素との関係を認識可能なデータを出力するコンフィグレーション項目解析手段を備え、その出力に基づいてレポートを作成する装置としてコンピュータを機能させるため、コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にすることができる。
【００１６】
本発明の第２の態様において、
前記コンフィグレーション項目解析手段は、前記ソースコード取得手段により取得されたコンフィグレーション項目消去前のソースコードを解析して、前記コンフィグレーション項目を含むプログラム要素を複数のノードとし、該複数のノードが連結されたツリー状のデータ構造を出力する手段であるものとしてもよい。
【００１７】
この場合、
前記コンフィグレーション項目解析手段は、前記コンフィグレーション項目消去前のソースコードにおける「#ifdef」、「#endif」、「#else」の存在に基づいて、前記ツリー状のデータ構造における分岐箇所、及び合流箇所を決定する手段であるものとしてもよい。
【００１８】
また、本発明の第２の態様において、
前記ソースコード取得手段は、前記ソフトウエアを構成するソースファイルとヘッダファイルが入力されると、該ソースファイルとヘッダファイル内で定義されたインクルード関係のみを解釈して前記コンフィグレーション項目消去前のソースコードを取得する手段であるものとしてもよい。
【００１９】
本発明の第３の態様は、
本発明の第２の態様のプログラムが格納された、コンピュータによってデータ読み取り可能な記憶媒体である。
【発明の効果】
【００２０】
本発明によれば、コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にすることが可能なコンフィグレーションレポート作成装置、及びこれを実現するためのプログラムを提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施例に係るコンフィグレーションレポート作成装置１のシステム構成例である。
【図２】コンフィグレーション項目解析部５０による解析処理及びその前後の処理の流れを示すフローチャートである。
【図３】コンフィグレーション項目解析部５０による解析処理の流れを示すフローチャートである。
【図４】本実施例に係るプリプロセッサ部４０の出力イメージである。
【図５】コンフィグレーション項目解析部５０がノードを追加等する様子を模式的に示すイメージ図である。
【図６】コンフィグレーション項目解析部５０がノードを追加等する様子を模式的に示すイメージ図である。
【図７】コンフィグレーション項目解析部５０がノードを追加等する様子を模式的に示すイメージ図である。
【図８】コンフィグレーション項目解析部５０がノードを追加等する様子を模式的に示すイメージ図である。
【図９】図４に示すプリプロセッサ部４０の出力イメージに対してコンフィグレーション項目解析部５０が解析処理を行った結果として得られるツリー状のデータ構造を模式的に示すイメージ図である。
【発明を実施するための形態】
【００２２】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２３】
以下、図面を参照し、本発明の一実施例に係るコンフィグレーションレポート作成装置１について説明する。
【００２４】
［構成］
図１は、本発明の一実施例に係るコンフィグレーションレポート作成装置１のシステム構成例である。コンフィグレーションレポート作成装置１は、図示しないＣＰＵを中心として構成され、ＲＡＭ１０やプログラムメモリ２０を含む各種記憶装置、入力ポート３０、タイマ、その他の構成要素を含んでいる。
【００２５】
ＲＡＭ１０は、ワーキングメモリとして機能する。プログラムメモリ２０は、例えばＲＯＭ（Read  Only  Memory）やＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）であり、ＣＰＵが実行するプログラム２２を格納している。
【００２６】
本実施例に係るコンフィグレーションレポート作成装置１は、プログラムメモリ２０からプログラム２２に含まれる各命令がフェッチされてデコード及び実行されることにより実現される機能ブロックとして、プリプロセッサ部４０と、コンフィグレーション項目解析部５０と、レポート作成部６０と、を備える。
【００２７】
入力ポート３０には、外部記憶装置等から、レポート作成対象であるソフトウエア７０のソースファイル７２及びヘッダファイル７４が入力される。入力されたソースファイル７２及びヘッダファイル７４は、プリプロセッサ部４０に出力される。
【００２８】
ソースファイル７２は、例えばＣ言語やＣ＋＋言語における各種命令・関数を記述したファイルである。ヘッダファイル７４は、関数プロトタイプ、グローバル変数の宣言、記号定数等を記述している。ソースファイル７２は、ヘッダファイル７４が記述する内容のうち、必要なものを「#include」命令によってインクルード（その場に内容を展開）する。
【００２９】
プリプロセッサ部４０は、ソースファイル７２とヘッダファイル７４が入力されると、ソースファイル７２とヘッダファイル７４内で定義されたインクルード関係のみを解釈し、ソフトウエア７０のコンフィグレーション項目消去前のソースコードを取得してコンフィグレーション項目解析部５０に出力する（なお、「出力する」とは便宜的な表現であり、コンフィグレーション項目消去前のソースコードがＲＡＭ１０に格納され、これをコンフィグレーション項目解析部５０が利用するという態様であってもよい）。
【００３０】
ここで、一般的なプリプロセスでは、インクルードによってヘッダファイル７４の内容が展開されるだけでなく、コンフィグレーション項目の定義の有無に基づく条件式が消去される等の処理が行われるが、本実施例におけるプリプロセッサ４０は、係るプリプロセスの一部を実行する（或いは、プリプロセスの結果として得られた依存関係を出力する）ものとする。
【００３１】
コンフィグレーション項目解析部５０は、プリプロセッサ部４０から入力されたコンフィグレーション項目消去前のソースコードにおける、コンフィグレーション項目同士の関係やコンフィグレーション項目と関数の関係、コンフィグレーション項目とファイルの関係等を解析し、解析結果をＲＡＭ１０上に構築されたコンフィグデータベース１２に格納する。詳細については後述する。
【００３２】
レポート作成部６０は、コンフィグデータベース１２に格納されたデータに基づき、所望の形式でコンフィグレーションレポートを作成して出力する。コンフィグレーションレポートは、表示装置により表示されてもよいし、紙或いは記憶装置等の媒体に出力されてもよい。
【００３３】
［解析処理］
以下、コンフィグレーション項目解析部５０による解析処理及びその前後の処理について説明する。図２及び図３は、コンフィグレーション項目解析部５０による解析処理及びその前後の処理の流れを示すフローチャートである。
【００３４】
まず、コンフィグレーション項目解析部５０は、ＲＡＭ１０の必要な領域に記憶された内容を消去し、startノードを作成する等の初期化処理を行う（Ｓ１００）。
【００３５】
次に、ＲＡＭ１０から一行分の命令を読み込み（Ｓ１０２）、解析処理を行う（Ｓ２００〜Ｓ２１８）。
【００３６】
当該命令の解析処理を行うと、解析を行った命令が最終行の命令であるか否かを判定し（Ｓ１０４）、最終行の命令であれば終了処理を行い（Ｓ１０６）、最終行の命令でなければ対象命令を一行進めて（Ｓ１０８）、再度Ｓ１０２以下の処理を実行する。
【００３７】
以下、解析処理について説明する。
【００３８】
まず、コンフィグレーション項目解析部５０は、読み込んだ命令内に「#else」が存在するか否かを判定する（Ｓ２００）。「#else」が存在する場合は、次に追加するノードの位置を、コンフィグレーション終端ノードがリンクされていない直近に設定したコンフィグレーション開始ノードの下に移動する（Ｓ２０２）。なお、係るノード追加位置の移動は、次回のルーチンで追加されるノードについて一回のみ適用され、それ以降のノード追加、及び最初に「#else」が出現するまでの間のノード追加については、前回ルーチンで追加されたノードの直下に追加されるものとする。
【００３９】
本実施例において、「ノード」とは、コンフィグレーション項目解析部５０が生成するツリー状のデータ構造における、分岐点その他の基準点をいう。後に説明するが、コンフィグレーション項目解析部５０は、ラベル、属性（サブルーチン、関数等）、上位ノード、下位ノード等が特定されたノード情報を複数生成することにより、ノードがツリー状に連結されたデータ構造を生成する。
【００４０】
コンフィグレーション項目解析部５０は、読み込んだ命令内に「#else」が存在しない場合は、読み込んだ命令内に関数定義が存在するか否かを判定する（Ｓ２０４）。関数定義が存在する場合は、関数ノード（属性として関数が付与されたノード；以下同様に解釈する）を追加する（Ｓ２０６）。
【００４１】
コンフィグレーション項目解析部５０は、読み込んだ命令内に関数定義が存在しない場合は、読み込んだ命令内にサブルーチンが存在するか否かを判定する（Ｓ２０８）。サブルーチンが存在する場合は、サブルーチンノードを追加する（Ｓ２１０）。
【００４２】
コンフィグレーション項目解析部５０は、読み込んだ命令内にサブルーチンが存在しない場合は、読み込んだ命令内に「#ifdef」が存在するか否かを判定する（Ｓ２１２）。「#ifdef」が存在する場合は、コンフィグレーション開始ノードを追加する（Ｓ２１４）。
【００４３】
コンフィグレーション項目解析部５０は、読み込んだ命令内に「#ifdef」が存在しない場合は、読み込んだ命令内に「#endif」が存在するか否かを判定する（Ｓ２１６）。「#endif」が存在する場合は、直近で追加したノードの下にコンフィグレーション終端ノードを追加すると共に、関連するノード全てとのリンクを設定する（Ｓ２１８）。
【００４４】
コンフィグレーション項目解析部５０は、「#endif」が存在しない場合は、何も処理を行わずに図３のフローを終了する。
【００４５】
［具体的処理例］
ここで、図２、３で示したフローを用いて解析処理を行った場合の具体的処理例について説明する。
【００４６】
図４は、本実施例に係るプリプロセッサ部４０の出力イメージである。以下、図４に示すコンフィグレーション項目消去前のソースコードに対して図２、３のフローを適用した場合の結果について順次説明する。図５〜図８は、コンフィグレーション項目解析部５０がノードを追加等する様子を模式的に示すイメージ図である。
【００４７】
図５（Ａ）は、コンフィグレーション項目解析部５０がstartノードを作成した様子を模式的に示すイメージ図である。
【００４８】
図５（Ｂ）は、コンフィグレーション項目解析部５０が行番号100を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号100では関数Func1が定義されているため、startノードの下に関数ノードFunc1を追加する。
【００４９】
当該ノードには、［ラベルとしてのファイル名（Func1）、行番号（100）、属性（関数）、上位ノード（startノード）、下位ノード（現時点では不明）］等の情報が付与される。
【００５０】
図５（Ｃ）は、コンフィグレーション項目解析部５０が行番号102を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号102ではサブルーチンfsub1を呼び出しているため、関数ノードFunc1の下にサブルーチンノードfsub1を追加する。
【００５１】
当該ノードには、［ラベルとしてのファイル名（fsub1）、行番号（102）、属性（サブルーチン）、上位ノード（関数ノードFunc1）、下位ノード（現時点では不明）］等の情報が付与される。また、サブルーチンノードfsub1の追加に伴い、関数ノードFunc1の「下位ノード」にサブルーチンノードfsub1が追加される。
【００５２】
図５（Ｄ）は、コンフィグレーション項目解析部５０が行番号103を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号103には「#ifdef」が存在するため、サブルーチンノードfsub1の下にコンフィグレーション開始ノードTypeAを追加する。
【００５３】
当該ノードには、［ラベルとしてのファイル名（TypeA）、行番号（103）、属性（コンフィグレーション開始）、上位ノード（サブルーチンノードfsub1）、下位ノード（現時点では不明）］等の情報が付与される。また、コンフィグレーション開始ノードTypeAの追加に伴い、サブルーチンノードfsub1の「下位ノード」にコンフィグレーション開始ノードTypeAが追加される。
【００５４】
図６（Ａ）は、コンフィグレーション項目解析部５０が行番号104を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号104ではサブルーチンfsub2が定義されているため、にコンフィグレーション開始ノードTypeAの下にサブルーチンノードfsub2を追加する。
【００５５】
当該ノードには、［ラベルとしてのファイル名（fsub2）、行番号（104）、属性（サブルーチン）、上位ノード（コンフィグレーション開始ノードTypeA）、下位ノード（現時点では不明）］等の情報が付与される。また、サブルーチンノードfsub2の追加に伴い、コンフィグレーション開始ノードTypeAの「下位ノード」にサブルーチンノードfsub2が追加される。
【００５６】
図６（Ｂ）は、コンフィグレーション項目解析部５０が行番号105を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号105には「#ifdef」が存在するため、サブルーチンノードfsub2の下にコンフィグレーション開始ノードTypeBを追加する。
【００５７】
当該ノードには、［ラベルとしてのファイル名（TypeB）、行番号（105）、属性（コンフィグレーション開始）、上位ノード（サブルーチンノードfsub2）、下位ノード（現時点では不明）］等の情報が付与される。また、コンフィグレーション開始ノードTypeBの追加に伴い、サブルーチンノードfsub2の「下位ノード」にコンフィグレーション開始ノードTypeBが追加される。
【００５８】
図６（Ｃ）は、コンフィグレーション項目解析部５０が行番号106を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号106ではサブルーチンgsub1を呼び出しているため、コンフィグレーション開始ノードTypeBの下にサブルーチンノードgsub1を追加する。
【００５９】
当該ノードには、［ラベルとしてのファイル名（gsub1）、行番号（106）、属性（サブルーチン）、上位ノード（コンフィグレーション開始ノードTypeB）、下位ノード（現時点では不明）］等の情報が付与される。また、サブルーチンノードgsub1の追加に伴い、コンフィグレーション開始ノードTypeBの「下位ノード」にサブルーチンノードgsub1が追加される。
【００６０】
図６（Ｄ）は、コンフィグレーション項目解析部５０が行番号108を読み込んだ後に次のノード追加位置を移動する様子を模式的に示すイメージ図である。図示するように、行番号108には「#else」が存在するため、次のノード追加位置をコンフィグレーション開始ノードTypeBの下に移動する。
【００６１】
図７（Ａ）は、コンフィグレーション項目解析部５０が行番号109を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号109ではサブルーチンgsub2を呼び出しているため、コンフィグレーション開始ノードTypeBの下にサブルーチンノードgsub2を追加する。
【００６２】
当該ノードには、［ラベルとしてのファイル名（gsub2）、行番号（109）、属性（サブルーチン）、上位ノード（コンフィグレーション開始ノードTypeB）、下位ノード（現時点では不明）］等の情報が付与される。また、サブルーチンノードgsub2の追加に伴い、コンフィグレーション開始ノードTypeBの「下位ノード」にサブルーチンノードgsub2が追加される。
【００６３】
図７（Ｂ）は、コンフィグレーション項目解析部５０が行番号110を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号110には「#endif」が存在するため、コンフィグレーション終端ノードTypeB*を追加する。なお、コンフィグレーション終端ノードTypeB*は、コンフィグレーション開始ノードTypeBを始点として連結されたノードの終端点の全てを上位ノードとするように、リンクが設定される。
【００６４】
当該ノードには、［ラベルとしてのファイル名（TypeB*）、行番号（110）、属性（コンフィグレーション終端）、上位ノード（サブルーチンノードgsub1、サブルーチンノードgsub2）、下位ノード（現時点では不明）］等の情報が付与される。また、コンフィグレーション終端ノードTypeB*の追加に伴い、サブルーチンノードgsub1、サブルーチンノードgsub2の「下位ノード」にコンフィグレーション終端ノードTypeB*が追加される。
【００６５】
図７（Ｃ）は、コンフィグレーション項目解析部５０が行番号112を読み込んだ後に次のノード追加位置を移動する様子を模式的に示すイメージ図である。図示するように、行番号112には「#else」が存在するため、次のノード追加位置をコンフィグレーション開始ノードTypeAの下に移動する。
【００６６】
図８（Ａ）は、コンフィグレーション項目解析部５０が行番号113を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号113ではサブルーチンfsub3を呼び出しているため、コンフィグレーション終端ノードTypeB*の下にサブルーチンノードfsub3を追加する。
【００６７】
当該ノードには、［ラベルとしてのファイル名（fsub3）、行番号（113）、属性（サブルーチン）、上位ノード（コンフィグレーション終端ノードTypeB*）、下位ノード（現時点では不明）］等の情報が付与される。また、サブルーチンノードfsub3の追加に伴い、コンフィグレーション終端ノードTypeB*の「下位ノード」にサブルーチンノードfsub3が追加される。
【００６８】
図８（Ｂ）は、コンフィグレーション項目解析部５０が行番号114を読み込んだ後にノードを作成する様子を模式的に示すイメージ図である。図示するように、行番号114には「#endif」が存在するため、コンフィグレーション終端ノードTypeA*を追加する。なお、コンフィグレーション終端ノードTypeA*は、コンフィグレーション開始ノードTypeAを始点として連結されたノードの終端点の全てを上位ノードとするように、リンクが設定される。
【００６９】
当該ノードには、［ラベルとしてのファイル名（TypeA*）、行番号（114）、属性（コンフィグレーション終端）、上位ノード（サブルーチンノードfsub3）、下位ノード（現時点では不明）］等の情報が付与される。また、コンフィグレーション終端ノードTypeA*の追加に伴い、サブルーチンノードfsub3の「下位ノード」にコンフィグレーション終端ノードTypeA*が追加される。
【００７０】
以上のような処理を最終行まで実行することにより、図９のような生成データが得られる。図９は、図４に示すプリプロセッサ部４０の出力イメージに対してコンフィグレーション項目解析部５０が解析処理を行った結果として得られるツリー状のデータ構造を模式的に示すイメージ図である。実際は、図９のようなグラフィックデータを生成する訳ではなく、上記説明したように各種情報が付与されたノードの集合データが生成され、レポート作成部６０は、この集合データを参照することにより図９のようのツリー状のデータ構造を認識することができる。なお、レポートとして、図９に示すようなグラフィックデータを出力しても構わない。
【００７１】
コンフィグレーション項目解析部５０が出力するツリー状のデータ構造は、コンフィグデータベース１２に格納される。
【００７２】
［レポート作成］
レポート作成部６０は、コンフィグレーション項目解析部５０が出力するツリー状のデータ構造に基づいて、コンフィグレーション項目に関するレポートを作成する。レポートの内容としては、例えば、（１）コンフィグレーション項目の一覧（コンフィグレーション開始ノードを検索して得られる）、（２）コンフィグレーション項目毎のソースコード内での参照位置（startノードからのリンク数等で表現される）、（３）コンフィグレーション項目間の関係（リンクの有無、距離（リンク数）、間に存在するコンフィグレーション項目の数等）、（４）コンフィグレーション項目と関数の関係等を含むように作成する。
【００７３】
より具体的には、コンフィグレーション項目が条件式の中で現れる場合、条件成立時に参照される関数やサブルーチン、条件不成立時に参照される関数やサブルーチン等を一覧できるようにすると、好適である。
【００７４】
例えば、図９のデータ構造の場合、コンフィグレーション項目TypeAについては、（Ａ）startノードから３リンク目に出現、（Ｂ）項目の開始から終端までの期間に他のコンフィグレーション項目TypeBが出現、（Ｃ）条件成立時にはfsub2、gsub1、gsub2が参照され、非成立時にはfsub3が参照される、等の情報を提供することができる。このような情報は、ソフトウエア開発において非常に有用なものであるため、係る情報が自動的に取得されることにより、ソフトウエア開発を容易にすることができる。
【００７５】
以上説明した本実施例のコンフィグレーションレポート作成装置１、及びこれを実現するためのプログラムによれば、コンフィグレーション項目の解析を自動的に行い、ソフトウエア開発を容易にすることができる。
【００７６】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００７７】
例えば、ソースファイル７２とヘッダファイル７４が入力され、これに対してインクルード関係のみを解釈して、解析対象となるコンフィグレーション項目消去前のソースコードを取得するものとしたが、コンフィグレーション項目消去前のソースコードが直接、コンフィグレーションレポート作成装置１に入力されてもよい。この場合、プリプロセッサ部４０は必須の構成でない。
【符号の説明】
【００７８】
１    コンフィグレーションレポート作成装置
１０  ＲＡＭ
１２  コンフィグデータベース
２０  プログラムメモリ
２２  プログラム
３０  入力ポート
４０  プリプロセッサ部
５０  コンフィグレーション項目解析部
６０  レポート作成部
７０  ソフトウエア
７２  ソースファイル
７４  ヘッダファイル
【図１】
2012194748.tif 000003
【図２】
2012194748.tif 000004
【図３】
2012194748.tif 000005
【図４】
2012194748.tif 000006
【図５】
2012194748.tif 000007
【図６】
2012194748.tif 000008
【図７】
2012194748.tif 000009
【図８】
2012194748.tif 000010
【図９】
2012194748.tif 000011