(57)【要約】【課題】プログラムのソースコードを解析し、その結果を解析目的に応じて効果的に表示することを課題とする。【解決手段】ソースコードを解析して、関数の呼び出し関係と、関数とモジュールとの包含関係とを得て、設定したモジュール単位で表した、モジュール間呼出関連図を作成する。  また、モジュール間呼出関連図からの抽出対象と包含関係にあるモジュールと、包含関係にあるモジュールのみを呼び出すモジュールと、包含関係にあるモジュールのみから呼び出されるモジュールとを抽出して、抽出モジュールと抽出モジュール間の連結記号とを、設定した表示形態にて表示したモジュール間呼出関連図を作成する。【選択図】  図１
2008293486.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードから、関数間の呼び出しに関する情報と、変数の定義および使用箇所に関する情報を得る関数解析手段と、
解析結果を表示する粒度であるモジュール単位を設定するモジュール単位設定手段と、
ソースコードまたは設定データからモジュールと関数との包含関係に関する情報を得る包含関係解析手段と、
モジュール間の呼び出しに関する情報を解析するモジュール解析手段と、
モジュール間の呼び出し関連図を作成する関連図作成手段と
を有し、
前記モジュール単位は、関数と、前記関数が属するグループと、前記関数を実装したファイルと、前記ファイルが格納されているディレクトリと、前記ファイル内のプログラム情報が含まれるクラス、コンポーネント、オブジェクトおよびライブラリの内の少なくとも１つを含み、
前記包含関係解析手段は、モジュールと、当該モジュールに実装、格納、または含まれている関数との包含関係を解析し、
前記モジュール解析手段は、前記関数解析手段が得た関数間の呼び出しに関する情報と、前記包含関係解析手段が得たモジュールと関数との包含関係に関する情報とから、前記モジュール単位設定手段で設定されたモジュール単位で表されるモジュール間の呼び出し関係に関する情報を得ることを特徴とするソースコード解析機器。
【請求項２】
請求項１に記載のソースコード解析機器であって、
前記モジュール間の呼び出し関連図からの抽出対象と、前記抽出対象と関連するモジュールの表示形態とを含む抽出情報を設定する抽出情報設定手段と、
前記抽出対象と関連するモジュールを抽出するモジュール抽出手段とを有し、
前記抽出対象は、変数と、関数と、グループと、ファイルと、ディレクトリと、クラスと、コンポーネントと、オブジェクトと、ライブラリの内の少なくとも１つを含み、
前記モジュール抽出手段は、設定された前記モジュール単位と、前記包含関係と、前記モジュール間の呼び出し関係と、前記抽出情報設定手段で設定された抽出対象とから、前記設定された抽出対象と包含関係にあるモジュールと、前記包含関係にあるモジュールを呼び出すモジュールと、前記包含関係にあるモジュールから呼び出されるモジュールとを抽出し、
前記関連図作成手段は、前記モジュール抽出手段で抽出された抽出モジュールと、前記抽出モジュール間の連結記号とを、前記抽出情報設定手段で設定された表示形態にて表示したモジュール間の呼び出し関連図を作成することを特徴とするソースコード解析機器。
【請求項３】
ソースコードから、関数間の呼び出しに関する情報と、変数の定義および使用箇所に関する情報を得る関数解析ステップと、
解析結果を表示する粒度であるモジュール単位を設定するモジュール単位設定ステップと、
ソースコードまたは設定データから、モジュールと関数との包含関係に関する情報を得る包含関係解析ステップと、
モジュール間の呼び出しに関する情報を解析するモジュール解析ステップと、
モジュール間の呼び出し関連図を作成する関連図作成ステップとを、情報処理装置に実行させるソースコード解析プログラムであって、
前記モジュール単位は、関数と、前記関数が属するグループと、前記関数を実装したファイルと、前記ファイルが格納されているディレクトリと、前記ファイル内のプログラム情報が含まれるクラス、コンポーネント、オブジェクトおよびライブラリの内の少なくとも１つを含み、
前記包含関係解析ステップは、モジュールと、当該モジュールに実装、格納、または含まれている関数との包含関係を解析し、
前記モジュール解析ステップは、前記関数解析ステップが得た関数間の呼び出しに関する情報と、前記包含関係解析ステップが得たモジュールと関数との包含関係に関する情報とから、前記モジュール単位設定ステップで設定されたモジュール単位で表されるモジュール間の呼び出し関係を得ることを特徴とするソースコード解析プログラム。
【請求項４】
請求項３に記載のソースコード解析プログラムであって、
前記モジュール間の呼び出し関連図からの抽出対象と、前記抽出対象と関連するモジュールの表示形態とを含む抽出情報を設定する抽出情報設定ステップと、
前記抽出対象と関連するモジュールを抽出するモジュール抽出ステップとを有し、
前記抽出対象は、変数と、関数と、グループと、ファイルと、ディレクトリと、クラスと、コンポーネントと、オブジェクトと、ライブラリの内少なくとも１つを含み、
前記モジュール抽出ステップは、設定された前記モジュール単位と、前記包含関係と、前記モジュール間の呼び出し関係と、前記抽出情報設定ステップで設定された抽出対象とから、前記設定された抽出対象と包含関係にあるモジュールと、前記包含関係にあるモジュールを呼び出すモジュールと、前記包含関係にあるモジュールから呼び出されるモジュールとを抽出し、
前記関連図作成ステップは、前記モジュール抽出ステップで抽出された抽出モジュールと、前記抽出モジュール間の連結記号とを、前記抽出情報設定ステップで設定された表示形態にて表示したモジュール間の呼び出し関連図を作成することを特徴とするソースコード解析プログラム。
【請求項５】
ソースコードから、関数間の呼び出しに関する情報と、変数の定義および使用箇所を得て、
解析結果を表示する粒度であるモジュール単位を設定し、
ソースコードまたは設定データを解析してモジュールと関数との包含関係を得て、
モジュール間の呼び出しに関する情報を解析し、
モジュール間の呼び出し関連図を作成するソースコード解析方法であって、
前記モジュール単位は、関数と、前記関数が属するグループと、前記関数を実装したファイルと、前記ファイルが格納されているディレクトリと、前記ファイル内のプログラム情報が含まれるクラス、コンポーネント、オブジェクトおよびライブラリ、の内少なくとも１つを含み、
モジュールと、当該モジュールに実装、格納、または含まれている関数との包含関係を解析し、
前記関数間の呼び出し関係と、前記包含関係とから、前記設定されたモジュール単位で表されるモジュール間の呼び出し関係を得ることを特徴とするソースコード解析方法。
【請求項６】
請求項５に記載のソースコード解析方法であって、
前記モジュール間の呼び出し関連図からの抽出対象と、前記抽出対象と関連するモジュールの表示形態とを含む抽出情報を設定し、
前記抽出対象と関連するモジュールを抽出するモジュール抽出し、
前記抽出対象は、変数と、関数と、グループと、ファイルと、ディレクトリと、クラスと、コンポーネントと、オブジェクトと、ライブラリの内少なくとも１つを含み、
設定された前記モジュール単位と、前記包含関係と、前記モジュール間の呼び出し関係と、前記設定された抽出対象とから、前記設定された抽出対象と包含関係にあるモジュールと、前記包含関係にあるモジュールを呼び出すモジュールと、前記包含関係にあるモジュールから呼び出されるモジュールとを抽出し、
抽出された前記抽出モジュールと、前記抽出モジュール間の連結記号とを、前記設定された表示形態にて表示したモジュール間の呼び出し関連図を作成することを特徴とするソースコード解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのソースコードを解析し、またその結果を表示する技術に関する。
【背景技術】
【０００２】
近年、ディジタルテレビやハードディスクレコーダ等のプログラム組み込み型システム、パーソナルコンピュータ、業務用サーバシステム等において高機能化が進んでおり、プログラムの規模が巨大化している。それに合わせてプログラムの不具合が増加している。また、プログラム仕様を頻繁に変更することが増えて仕様書への反映が不完全となりがちなため、現状のプログラム動作を正確に理解するために、仕様書ではなくソースコードを読み取る必要が生じている。
【０００３】
この課題を解決する従来の技術として、例えば、特許文献１にソースコード解析支援装置の開示がある。この技術を利用すれば、プログラムのソースコード作成段階で解析を行いプログラムの動作を検証することで、動作環境構築前や動作試験前に不具合を見つけ出して修正することができる。また、解析対象ソースコードにおける、関数間の呼び出し関係や関連する引数・変数の情報を図式的に表示することで、ソースコードを文字情報のみで読み解くよりも効率良くプログラム動作を理解できる。
【０００４】
【特許文献１】特開２００６−２７７２０６号公報 （第１頁、図２）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし上記のような従来技術では、検討が不要な関数も含めた全関数を表示するため、プログラム規模、すなわち解析対象であるソースコードの規模が大きい場合に、関数間の呼び出し関係図が巨大かつ複雑になり、プログラム動作を理解することが困難となる。
【０００６】
本発明は、上記事情に鑑みてなされたものであり、本発明の目的は、プログラムのソースコードを解析し、その結果を解析目的に応じて効果的に表示することにある。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、本発明のソースコード解析機器、解析プログラムおよび解析方法は、ソースコードを解析して、関数間の呼び出しに関する情報と、変数の定義および使用箇所に関する情報を得て、解析結果を表示する粒度であるモジュール単位を設定し、ソースコードまたは設定データを解析してモジュールと関数との包含関係に関する情報を得て、モジュール間の呼び出し関係を解析し、モジュール間の呼び出し関連図を作成する。
【０００８】
さらに、前記モジュール単位は、関数と、前記関数が属するグループと、前記関数を実装したファイルと、前記ファイルが格納されているディレクトリと、前記ファイル内のプログラム情報が含まれるクラス、コンポーネント、オブジェクトおよびライブラリの内で、少なくとも１つを含むことを特徴とする。さらに、モジュールと、当該モジュールに実装、格納、または含まれている関数との包含関係を解析することを特徴とする。さらに、前記関数間の呼び出しに関する情報と前記モジュールと関数との包含関係に関する情報とから、前記設定されたモジュール単位で表されるモジュール間の呼び出し関係に関する情報を得ることを特徴とする。
【０００９】
また、本発明のソースコード解析機器、解析プログラムおよび解析方法は、前記モジュール間の呼び出し関連図からの抽出対象と、前記抽出対象と関連するモジュールの表示形態とを含む抽出情報を設定し、前記抽出対象と関連するモジュールを抽出する。さらに、前記抽出対象は、変数と、関数と、グループと、ファイルと、ディレクトリと、クラスと、コンポーネントと、オブジェクトと、ライブラリの内少なくとも１つを含むことを特徴とする。
【００１０】
さらに、前記設定されたモジュール単位と、前記包含関係と、前記モジュール間の呼び出し関係と、前記設定された抽出対象とから、前記設定された抽出対象と包含関係にあるモジュールと、前記包含関係にあるモジュールを呼び出すモジュールと、前記包含関係にあるモジュールから呼び出されるモジュールとを抽出することを特徴とする。さらに、抽出された前記抽出モジュールと、前記抽出モジュール間の連結記号とを、前記設定された表示形態にて表示したモジュール間の呼び出し関連図を作成することを特徴とする。
【００１１】
上述の技術によれば、関数間の呼び出し関係を、クラスやライブラリ等の単位で表したモジュール間の呼び出し関係に変換するため、解析目的に合わせた適切な粒度でプログラムモジュールの呼び出し関係を表示することができる。  また、設定した変数やファイル等に関連するモジュールの表示形態を変更するため、解析目的に合わせて必要なモジュールを強調表示したり、不要なモジュールを消去したり、特定変数に関連するモジュールを変数値や分岐条件とともに表示したりすることができる。
【００１２】
また、適切な粒度でのグループ間の依存度合い（呼び出し数の多さ）が可視化できる。
【００１３】
以上のように、本発明によれば、プログラムのソースコードを解析し、その結果を解析目的に応じて効果的に表示することが可能となる。
【発明の効果】
【００１４】
本発明によれば、プログラムのソースコードを解析し、その結果を解析目的に応じて効果的に表示することが可能となる。これにより、ソースコードからのプログラム動作の理解が容易になる、動作環境構築前や動作試験前に不具合を見つけ出して修正し易くなる、プログラムを部品化する際の分割場所の検討が容易になる等、プログラムの開発効率が向上し、コスト低減や開発期間短縮が実現できる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明を実施するための形態について説明する。
【００１６】
まず、本実施例におけるソースコード解析機器１の概略構成について図１を用いて説明する。
【００１７】
図１に示す様に本実施例のソースコード解析機器１は、制御装置１１と、記録装置１２と、入出力装置１３とを有している。
【００１８】
制御装置１１は、記録装置１２が保持している処理プログラムを実行し、機器全体の動作を制御する装置である。
【００１９】
記録装置１２は、ソースコード解析機器１の動作を制御する処理プログラムが格納された処理部と、処理プログラムが読み書きを行うデータが格納された記録部とから構成される装置である。記録装置１２の処理部は、機器制御処理部１２１と、モジュール単位設定処理部１２２と、抽出情報設定処理部１２３と、グループ情報設定処理部１２９と、関数解析処理部１２４と、包含関係解析処理部１２５と、モジュール解析処理部１２６と、モジュール抽出処理部１２７と、関連図作成処理部１２８とを有している。記録装置１２の記録部は、ソースコード記録部１２０１と、設定情報記録部１２０２と、解析結果記録部１２０３と、図面情報記録部１２０４とを有している。記録装置１２の例としては、ディスク、テープ、半導体などがある。
【００２０】
機器制御処理部１２１は、ソースコード解析機器１の各装置を連携させ、ソースコード解析機器として動作させる処理部である。モジュール単位設定処理部１２２は、解析結果を表示する際の粒度であるモジュール単位を設定する処理部である。
【００２１】
抽出情報設定処理部１２３は、モジュール間の呼び出し関連図からの抽出対象と、その抽出対象と関連するモジュールの表示形態とを含む抽出情報を設定する処理部である。関数解析処理部１２４は、ソースコードを解析して、関数間の呼び出し関係と、変数の定義および使用箇所を得る処理部である。グループ情報設定処理部１２９は、関数とグループの包含関係を含むグループ情報を設定する処理部である。
【００２２】
包含関係解析処理部１２５は、ソースコードを解析してモジュールと関数との包含関係を得る処理部である。モジュール解析処理部１２６は、モジュール間の呼び出し関係を解析する処理部である。モジュール抽出処理部１２７は、抽出対象と関連するモジュールを抽出する処理部である。関連図作成処理部１２８は、モジュール間の呼び出し関連図を作成する処理部である。
【００２３】
ソースコード記録部１２０１には、ソースコードファイルデータと、ソースコードファイルの格納場所やビルド用設定ファイル等のビルド情報データが記録される。設定情報記録部１２０２には、モジュール単位データと、抽出情報データと、グループ情報データが記録される。解析結果記録部１２０３には、関数間の呼び出し関係と変数の定義および使用箇所から成る関数呼出関係データと、モジュールと関数との包含関係の情報である包含関係データと、モジュール間の呼び出し関係の情報であるモジュール呼出関係データと、抽出対象と関連するモジュールの情報である抽出モジュールデータが記録される。図面情報記録部１２０４には、モジュール間の呼び出し関係を表した図の情報であるモジュール関連図データが記録される。
【００２４】
ここで、モジュール単位とは、関数と、その関数が属するグループと、その関数を実装したファイルと、そのファイルが格納されているディレクトリと、そのファイル内のプログラム情報が含まれるクラス、コンポーネント、オブジェクトおよびライブラリを示す。
【００２５】
また、抽出対象とは、変数と、関数と、グループと、ファイルと、ディレクトリと、クラスと、コンポーネントと、オブジェクトおよびライブラリを示す。
【００２６】
入出力装置１３は、利用者が、ソースコード解析機器１を操作したり、ソースコード解析機器１から情報を得たりするインタフェイス装置である。入出力装置１３の例としては、キーボード、タッチパッド、マウス、タッチパネル、モニタなどがある。但し、これらに限定されるものではなく、利用者からの指示、操作として発せられるもの、音声、体の動き等を検出して、ソースコード解析機器１に対して、信号、情報を出力するインタフェイス装置であれば良い。例えば、眼球の動きなどを検出するものであっても良い。
【００２７】
次に、本実施例におけるソースコード解析機器１の概略動作について、図２を用いて説明する。
【００２８】
機器制御処理部１２１が、入出力装置１３経由で利用者からの指示を受けるまで待ち、指示を受けたならばその指示を解析する（ステップ１００１）。
ステップ１００１で解析した指示が「設定指示」の場合（ステップ１００２にて「設定指示」に分岐）、後述の設定処理を行い（ステップ１００８）、ステップ１００１に戻る。
【００２９】
ステップ１００１で解析した指示が「解析開始指示」の場合（ステップ１００２にて「解析開始指示」に分岐）、後述の解析処理を行い（ステップ１００５）、後述の関連図作成処理を行う（ステップ１００６）。
【００３０】
次に、機器制御処理部１２１が、図面情報記録部１２０４に記録されたモジュール関連図データを読み取り、入出力装置１３で表示し（ステップ１００７）、ステップ１００１に戻る。
【００３１】
ステップ１００１で解析した指示が「終了指示」の場合（ステップ１００２にて「終了指示」に分岐）、処理を終了する。
【００３２】
次に、本実施例におけるソースコード解析機器１の設定処（ステップ１００８）の動作について、図１０を用いて説明する。なお、図１０での処理が終了すると、図２のステップ１００１に戻るものとする。
【００３３】
機器制御処理部１２１が、利用者から受けた設定指示の内容を解析する（ステップ４００１）。
【００３４】
ステップ４００１で解析した指示が「モジュール単位設定指示」の場合（ステップ４００１にて「モジュール単位設定指示」に分岐）、モジュール単位設定処理部１２２が、設定を指示されたモジュール単位の情報をモジュール単位データとして設定情報記録部１２０２に記録し（ステップ４００２）、終了する。
【００３５】
ステップ４００１で解析した指示が「抽出情報設定指示」の場合（ステップ４００１にて「抽出情報設定指示」に分岐）、抽出情報設定処理部１２３が、設定を指示された抽出対象と表示形態とを含む抽出情報を、抽出情報データとして設定情報記録部１２０２に記録し（ステップ４００３）、終了する。
【００３６】
ステップ４００１で解析した指示が「グループ情報設定指示」の場合（ステップ４００１にて「グループ情報設定指示」に分岐）、グループ情報設定処理部１２９が、設定を指示された関数とグループの包含関係を含むグループ情報を、グループ情報データとして設定情報記録部１２０２に記録し（ステップ４００４）、終了する。
【００３７】
次に、本実施例におけるソースコード解析機器１の解析処理（ステップ１００５）の動作について、図３を用いて説明する。
【００３８】
機器制御処理部１２１が、解析結果記録部１２０３における関数呼出関係データの有無から関数解析が済んでいるかどうかを判断する（ステップ２００１）。
【００３９】
関数解析が済んでいない場合（ステップ２００１にて「No」に分岐）、関数解析処理部１２４が、ソースコード記録部１２０１からソースコードファイルデータを読み取り、解析を行なって、関数間の呼び出し関係と、変数の定義および使用箇所を得、関数呼出関係データとして解析結果記録部１２０３に記録する（ステップ２００２）。
【００４０】
関数解析が済んでいる場合（ステップ２００１にて「Yes」に分岐）、または、関数呼出関係の解析（ステップ２００２）が終わった後、機器制御処理部１２１が、解析結果記録部１２０３における包含関係データの有無から包含関係解析が済んでいるかどうかを判断する（ステップ２００３）。
【００４１】
包含解析が済んでいない場合（ステップ２００３にて「No」に分岐）、包含関係解析処理部１２５が、ソースコード記録部１２０１からソースコードファイルデータおよびビルド情報データを読み取り、また、設定情報記録部１２０２からグループ情報データを読み取り、解析を行なって、モジュールと、当該モジュールに実装、格納、または含まれている関数との包含関係を得、包含関係データとして解析結果記録部１２０３に記録する（ステップ２００４）。ビルド情報データから、あるファイルがどのディレクトリに格納されているのか、あるファイル内のプログラム情報がビルド後にどのクラス・コンポーネント・オブジェクト・ライブラリに含まれるのか、という包含関係が得られる。このため、ソースコードファイルデータの解析から判明した関数とファイルの包含関係と、グループ情報データから得られる関数とグループの包含関係とを更に合わせて、各モジュール単位間の包含関係が導き出される。  包含解析が済んでいる場合（ステップ２００３にて「Yes」に分岐）、または、包含関係の解析（ステップ２００４）が終わった後、モジュール解析処理部１２６が、設定情報記録部１２０２からモジュール単位データを読み取り、解析結果記録部１２０３の関数呼出関係データと包含関係データを読み取り、解析を行なって、設定されたモジュール単位で表されるモジュール間の呼び出し関係を得、モジュール呼出関係データとして解析結果記録部１２０３に記録する（ステップ２００５）。
【００４２】
なお、ステップ２００３およびステップ２００４を、ステップ２００１およびステップ２００２の前に行なってもよい。
【００４３】
次に、本実施例におけるソースコード解析機器１の関連図作成処理（ステップ１００６）の動作について、図４を用いて説明する。
【００４４】
機器制御処理部１２１が、設定情報記録部１２０２における抽出情報データの有無から抽出情報が設定されているかどうかを判断する（ステップ３００１）。
【００４５】
抽出情報が設定されていない場合（ステップ３００１にて「No」に分岐）、関連図作成処理部１２８が、解析結果記録部１２０３のモジュール呼出関係データを読み取り、モジュール間の呼び出し関連図を作成し、モジュール関連図データとして図面情報記録部１２０４に記録する（ステップ３００２）。
【００４６】
抽出情報が設定されている場合（ステップ３００１にて「Yes」に分岐）、モジュール抽出処理部１２７が、設定情報記録部１２０２からモジュール単位データと抽出対象データを読み取り、解析結果記録部１２０３の包含関係データとモジュール呼出関係データを読み取り、抽出対象と包含関係にあるモジュールと、その包含関係にあるモジュールのみを呼び出すモジュールと、その包含関係にあるモジュールのみから呼び出されるモジュールとを抽出し、抽出モジュールデータとして解析結果記録部１２０３に記録する（ステップ３００３）。
【００４７】
次に、関連図作成処理部１２８が、設定情報記録部１２０２から表示形態データを読み取り、解析結果記録部１２０３の抽出モジュールデータとモジュール呼出関係データを読み取り、抽出モジュールと、抽出モジュール間の連結記号とを設定された表示形態にて表示したモジュール間の呼び出し関連図を作成し、モジュール関連図データとして図面情報記録部１２０４に記録する（ステップ３００４）。
【００４８】
次に、本実施例における、記録装置１２の設定情報記録部１２０２の例について、図５を用いて説明する。
【００４９】
図５に示すように、設定情報記録部１２０２には、モジュール単位１２０２１から成るモジュール単位データと、抽出対象１２０２２と表示形態１２０２３とから成る抽出情報データと、関数１２０２６とグループ１２０２７とから成るグループ情報データが記録されている。表示形態１２０２３は、抽出対象に該当するモジュール１２０２４と、抽出対象に該当しないモジュール１２０２５とで、表示形態を分けて設定している。
【００５０】
ここで抽出対象に該当するモジュールとは、設定されたモジュール単位１２０２１で表されるモジュールの内、設定された抽出対象１２０２２と包含関係にあるモジュールのことを指す。図５の例では、関数Bと包含関係にあるクラスについて、この該当クラスの枠は赤色で表し、該当クラス同士を連結する矢印は黒色の実線で表す設定となっている。また、非該当クラスの枠は灰色で表し、非該当クラスとの連結に用いる矢印は灰色の点線で表す設定になっている。
【００５１】
また、図５の例では、関数Bと関数CがグループPに、関数DがグループQに含まれる関係にあることを示している。
【００５２】
次に、本実施例における、記録装置１２の解析結果記録部１２０３の例について、図６を用いて説明する。
【００５３】
図６に示すように、解析結果記録部１２０３には、呼元関数１２０３１と呼先関数１２０３２とから成る関数呼出関係データと、関数１２０３３とグループ１２０３０とファイル１２０３４とクラス１２０３５とライブラリ１２０３６とから成る包含関係データと、呼元モジュール１２０３７と呼先モジュール１２０３８とから成るモジュール呼出関係データと、抽出モジュール１２０３から成る抽出モジュールデータが記録されている。
【００５４】
図６の例では、関数呼出関係データにおいて、関数Aが関数Bと関数Cを、関数Bが関数Dを、関数Cが関数Eを呼び出す関係にあることを示している。また、包含関係データにおいて、関数Aと関数Bと関数CがグループPに、関数Dと関数EがグループQに含まれ、関数Aと関数CはクラスXに、関数BはクラスYに含まれ、クラスXとクラスYはファイルLに含まれ、ファイルLとファイルMはライブラリSに含まれる関係にあること等を示している。
【００５５】
また、図５と同様に、モジュール単位がクラスであり、抽出対象が関数Bである場合を例に取ってあり、モジュール呼出関係データにおいて、呼元モジュールとしてクラスXが、呼先モジュールとしてのクラスYを呼び出す関係にあること等を示している。また、抽出モジュールデータにおいて、抽出モジュールが、抽出対象である関数Bを含むクラスYと、クラスYの呼元モジュールであるクラスXと、クラスYの呼先モジュールであるクラスZであることを示している。
【００５６】
なお、図６では、関数呼出関係データの構成要素として、呼元関数と呼先関数とを挙げて説明したが、関数呼出関係データの構成要素は、これらに限らず、変数およびその変数の定義および使用箇所が含まれていてもよい。
【００５７】
また、図６では、包含関係データの構成要素として、関数とグループとファイルとクラスとライブラリとを挙げて説明したが、包含関係データの構成要素は、これらに限らず、変数およびモジュール単位の内の任意の２つ以上の要素であればよい。
【００５８】
次に、本実施例における、入出力装置１３が出力するモジュール関連図の例について、図７と図８と図９と図１１を用いて説明する。
【００５９】
図７には、同じプログラムについて、例１として、モジュール単位が関数で抽出情報の設定がない場合と、例２として、モジュール単位がクラスで抽出情報の設定がない場合と、例３として、モジュール単位がクラスで抽出情報の設定がある場合について、それぞれのモジュール関連図の例を示している。
【００６０】
ここで例１、例２、例３では、図５が示す設定情報記録部１２０２の内容と、図６が示す解析結果記録部１２０３の内容に沿ったモジュール関連図を示している。ただし色情報は表現していない。
【００６１】
図８には、同じプログラムについて、例４として、モジュール単位が関数で抽出情報の設定がない場合と、例５として、モジュール単位が関数で抽出情報の設定がある場合について、それぞれのモジュール関連図の例を示している。例５では、抽出対象は関数Bと関数Gとの間の関数呼出経路であり、該当モジュールを省略して表示した場合を示している。
【００６２】
図９には、同じプログラムについて、例６として、モジュール単位が関数で抽出情報の設定がない場合と、例７として、モジュール単位が関数で抽出情報の設定がある場合と、例８として、モジュール単位が関数で抽出情報の設定があり変数値の設定がある場合について、それぞれのモジュール関連図の例を示している。
【００６３】
図９には想定プログラムのソースコードを示してある。関数Aは、変数Zが0でない場合に変数Xを1に設定し、それ以外の場合に変数Xを2に設定して、関数Cを呼び出す。関数Bは、関数Cを呼び出す。関数Cは、変数Xと4の加算結果で変数Yを設定し、関数Dを呼び出す。関数Dは、変数Yが5の場合に関数Eを呼び出し、変数Yが6の場合に関数Fを呼び出す。関数Eは、変数Yと3の乗算結果を出力する。関数Fは、変数Yと2の乗算結果を出力する。
【００６４】
例６では、分岐矢印によって、関数Dが、関数Eまたは関数Fのいずれか片方のみを呼び出す関係にあることを示している。
【００６５】
例７では、抽出対象が変数Yであり、非該当モジュールの表示形態は消去である場合を示している。関数Cにおいて変数Yが定義されており、変数Yの定義に含まれる変数Xも抽出対象となるが、変数Xと変数Yのいずれもが定義されておらず使われていない関数Bは非該当モジュールとなるため、例７の図示では、関数Bと、関数Bからの連結矢印は消去されている。
【００６６】
関数Aの横には、当該関数内で変数Xが使われ値が1または2に限られることを示す表示がある。また、関数Cの横には、当該関数内で変数Xと4の加算結果で変数Yが設定されることを示す表示がある。また、分岐矢印の途中には、変数Yが5の場合に関数Eが呼び出され、変数Yが6の場合に関数Fが呼び出されることを示す表示がある。
【００６７】
例８では、例７の状態からさらに、利用者が変数Xの値を2に設定した状態を示している。関数Aの横では変数Xが2に確定されており、関数Cの横では変数Yが6に確定されている。変数Yが5である可能性がなくなったため、例８の図示では、関数Eおよび関数Eへの連結矢印は消去されている。
【００６８】
図１１には、同じプログラムについて、設定されたモジュール単位がグループで抽出情報の設定がある場合の例を示している。例９として、抽出対象がグループPであり、グループ間の関数呼出箇所の数を示す依存関係を数値で表示する場合と、例１０として、抽出対象が関数Bであり依存関係を矢印の本数で表示する場合と、例１１として、抽出対象が全てで関数を重複表示する場合について、それぞれのモジュール関連図の例を示している。
【００６９】
例１１では、グループと関数を重複して表示することで、グループと関数の包含関係、および、グループ間の依存関係を同時に示している。
【００７０】
ここでは、設定されたモジュール単位がグループで、重複表示するモジュール単位が関数である場合の例を示したが、設定されたモジュール単位がライブラリで、重複表示するモジュール単位がファイルである場合など、他のモジュール単位の組み合わせでも良い。
【００７１】
ここで例９、例１０、例１１では、図５が示す設定情報記録部１２０２の内容と、図６が示す解析結果記録部１２０３の内容に沿ったモジュール関連図を示している。ただし色情報は表現していない。
【００７２】
以上、本発明の実施形態について説明した。
【００７３】
なお、本発明の実施形態では、各処理部と各記録部が同じ記録装置１２に記録されているものとして説明したが、処理部と記録部が別の記録装置に記録されていても良い。
【００７４】
また、本発明の実施形態では、まずグループ情報データを生成し、そのデータを元に包含関係データを生成する場合の例を挙げて説明したが、包含関係データを生成した後に、グループ情報データを生成してもよい。例えば、ソースコードを解析して生成された包含関係データを利用者に提示し、利用者が関数が属するグループを設定してもよい。この時、図６の例で、ファイルLをグループPとして、ファイルMとファイルNをグループQとして設定する場合のように、関数以外に、ファイル、ライブラリ等の各モジュール単位を用いてグループを設定してもよい。
【００７５】
また、本発明の実施形態では、モジュール間の依存関係を、モジュールが含む関数の呼出箇所の数で表す場合の例を示したが、呼出箇所の数でなくても、呼元と呼先の関数の組合せの数や、呼出回数や、関数以外の他のモジュール単位での呼出の数など、他の指標を用いて依存関係を表してもよい。
【００７６】
本発明の実施形態によれば、関数間の呼び出し関係を、クラスやライブラリ等の単位で表したモジュール間の呼び出し関係に変換するため、解析目的に合わせた適切な粒度でプログラムモジュールの呼び出し関係を表示することができる。  また、本発明の実施形態によれば、設定した変数やファイル等に関連するモジュールの表示形態を変更するため、解析目的に合わせて必要なモジュールを強調表示したり、不要なモジュールを消去したり、特定変数に関連するモジュールを変数値や分岐条件とともに表示したりすることができる。
【００７７】
また、本発明の実施形態によれば、適切な粒度でのグループ間の依存度合い（呼び出し数の多さ）が可視化できる。
【００７８】
以上のように、本発明の実施形態によれば、プログラムのソースコードを解析し、その結果を解析目的に応じて効果的に表示することが可能となる。
【図面の簡単な説明】
【００７９】
【図１】本発明の実施形態におけるソースコード解析機器１の概略構成を示した図である。
【図２】本発明の実施形態におけるソースコード解析機器１の概略動作を示したフローチャートである。
【図３】本発明の実施形態におけるソースコード解析機器１の解析処理（ステップ１００５）の動作を示したフローチャートである。
【図４】本発明の実施形態におけるソースコード解析機器１の関連図作成処理（ステップ１００６）の動作を示したフローチャートである。
【図５】本発明の実施形態における設定情報記録部１２０２の例を示した図である。
【図６】本発明の実施形態における解析結果記録部１２０３の例を示した図である。
【図７】本発明の実施形態における入出力装置１３が出力するモジュール関連図の例１、例２および例３である。
【図８】本発明の実施形態における入出力装置１３が出力するモジュール関連図の例４および例５である。
【図９】本発明の実施形態における入出力装置１３が出力するモジュール関連図の例６、例７および例８である。
【図１０】本発明の実施形態におけるソースコード解析機器１の設定処理（ステップ１００８）の動作を示したフローチャートである。
【図１１】本発明の実施形態における入出力装置１３が出力するモジュール関連図の例９、例１０および例１１である。
【符号の説明】
【００８０】
１…ソースコード解析機器、１１…制御装置、１２…記録装置、１３…入出力装置。
【図１】
2008293486.tif 000003
【図２】
2008293486.tif 000004
【図３】
2008293486.tif 000005
【図４】
2008293486.tif 000006
【図５】
2008293486.tif 000007
【図６】
2008293486.tif 000008
【図７】
2008293486.tif 000009
【図８】
2008293486.tif 000010
【図９】
2008293486.tif 000011
【図１０】
2008293486.tif 000012
【図１１】
2008293486.tif 000013