(57)【要約】【課題】プログラムのアルゴリズムの理解を容易とするととともに、アルゴリズムが実装されたソースコード群とそれらの関連を見やすい形式で表示すること。【解決手段】プログラム入出力装置（１４，１５）は、プログラム１１に対してプログラム入力値を設定するとともにプログラム１１を実行して得られたプログラム出力値を抽出し、これらをプログラム入出力値として出力し、トレース情報抽出装置１６は、プログラム１１を実行した際のモジュール入出力値とソースコード群１２の実行行を表すモジュール位置とを抽出して出力し、ソースコードダイジェスト表示部２０は、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを入力し、前記モジュール位置に基づいてソースコード群１２から実行行に含まれる文字列を抽出して前記プログラム入出力値と前記モジュール入出力値とともにダイジェスト表示に変換する。【選択図】図１
2008225760.tif 000002
【特許請求の範囲】
【請求項１】
ソースコード群から生成されたプログラムに対してプログラム入力値を設定するとともに前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出し、これらをプログラム入出力値として出力するプログラム入出力装置と、
前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出して出力するトレース情報抽出装置と、
前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを入力し、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力するダイジェスト表示部と、を備えたことを特徴とするソースコード解析装置。
【請求項２】
前記トレース情報抽出装置が、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出して出力するように構成されたことを特徴とする、請求項１に記載のソースコード解析装置。
【請求項３】
前記ダイジェスト表示部が、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組を入力し、それぞれの組について、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して、前記ダイジェスト表示を２以上出力するように構成されたことを特徴とする、請求項１または２に記載のソースコード解析装置。
【請求項４】
前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを入力して記録するとともに出力する記憶部をさらに備え、
前記ダイジェスト表示部が、前記記憶部から前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを読み出すように構成されたことを特徴とする請求項１ないし３のいずれかに記載のソースコード解析装置。
【請求項５】
（ａ）ソースコード群から生成されたプログラムに対してプログラム入力値を設定する工程と、
（ｂ）前記プログラム入力値に基づいて前記プログラムを実行する工程と、
（ｃ）前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出する工程と、
（ｄ）前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出するトレース情報抽出工程と、
（ｅ）前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力する工程と、を含むことを特徴とするソースコード解析方法。
【請求項６】
前記トレース情報抽出工程（ｄ）において、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出することを特徴とする、請求項５に記載のソースコード解析方法。
【請求項７】
前記表示工程（ｅ）において、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組に対して、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換し、ダイジェスト表示を２以上出力することを特徴とする、請求項５または６に記載のソースコード解析方法。
【請求項８】
（ａ）ソースコード群から生成されたプログラムに対してプログラム入力値を設定する処理と、
（ｂ）前記プログラム入力値に基づいて前記プログラムを実行する処理と、
（ｃ）前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出する処理と、
（ｄ）前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出するトレース情報抽出処理と、
（ｅ）前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力する処理と、をコンピュータに実行させることを特徴とするソースコード解析プログラム。
【請求項９】
前記トレース情報抽出処理（ｄ）において、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出する処理をコンピュータに実行させることを特徴とする、請求項８に記載のソースコード解析プログラム。
【請求項１０】
前記表示処理（ｅ）において、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組に対して、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換し、ダイジェスト表示を２以上出力する処理をコンピュータに実行させることを特徴とする、請求項８または９に記載のソースコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析装置、方法およびプログラムに関する。
【背景技術】
【０００２】
プログラムの処理内容を理解するためには、プログラムのソースコードを解読する必要がある。しかし、大量のソースコードによって生成された大規模プログラムの場合、これらのソースコードを解読する作業は、一般に、困難を伴い、高いスキルも要求される。
【０００３】
ソースコードの解読作業を支援するために、ソースコードを静的に解析して、プログラム全体の動作をシーケンス図等によって自動的に表示する装置が知られている。
【０００４】
従来のソースコード解析装置は、典型的な構成として図１０に示すように、ソースコード解析手段１０１と、概要図形作成手段１０２と、プログラム情報記憶部１０３と、表示装置２５から成る（例えば、特許文献１ないし３）。
【０００５】
従来のソースコード解析装置の動作は次の通りである。
【０００６】
ソースコード解析手段１０１は、ソースコード群１２を解析して幾つかの意味単位を抽出する。概要図形作成手段１０２は、抽出された意味単位とプログラム情報記憶部１０３に予め記録されたプログラム情報とに基づいて、シーケンス図、状態遷移図その他の決められた意味を持つ図に変換して、表示装置２５へ出力する。表示装置２５は、利用者に対して得られた図を表示する。
【０００７】
従来のソースコード解析装置は、プログラムのモジュール間の関連および動作全体の流れを図示することによって、ソースコード群１２の解読を支援する。
【０００８】
また、ソースコードの解読を支援する、その他の従来手法として、ソースコードを要約したダイジェスト表示を行うソースコード解析装置が、例えば、特許文献４において開示されている。
【０００９】
従来のソースコード解析装置によって得られたソースコードおよびソースコード解析結果を図１１の上段および下段に示す。
【００１０】
このソースコード解析装置は、プログラムのソースコード中で意味の無い（無効な）行の表示を、削除したり、目立たない色で表示したり、省略したことを表示する情報で表示したりして抑制する（特許文献４）。
【００１１】
図１１に示した例では、”ＰＡＳＳ１”が定義されている場合、”ｅｌｓｅ”と”ｅｎｄ  ｉｆ”で挟まれた節は無効となるため、下段のダイジェスト表示において省略されている。
【００１２】
このようなソースコードをダイジェスト表示にもとづいて、ソースコードの中で無効な行を非表示または省略表示とすることによって、ソースコードが持つ情報量を減らすことができる。
【００１３】
なお、ソースコードの内容を特定のプログラミング言語に依存しない自然言語に変換することによって、プログラミング言語に関する知識を持たない者であっても、ソースコードを理解することができるようにする手法も知られている。
【００１４】
【特許文献１】特開２００５−９２６０９号公報
【特許文献２】特開平９−２６５３８７号公報
【特許文献３】特開平８−２０２５４０号公報
【特許文献４】特開２０００−２１５０３７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
一般に、プログラムは複数のモジュールによって構成され、各モジュールは内部の処理がブラックボックス化（隠蔽）されている。したがって、プログラムを解読するためには、個々のモジュールに、特定の入力が与えられた際に、そのモジュールがどのような出力を生成するのかを確認しつつ、各モジュールのアルゴリズムが記載された複数のソースコードが互いにどのように関連し合っているのかを把握する必要がある。
【００１６】
しかし、従来のソースコード解析装置（図１０参照）においては、どのようなアルゴリズムに基づいて結果が導き出されたのかが表示されない。したがって、アルゴリズムを理解するためには、ソースコード群１２を直接参照しなければならない。また、ソースコード群１２を参照する際に、ソースコード解析装置によって得られた図とソースコード群１２とを対応づけつつ参照することになり、ソースコード解析装置の利用者は、非常に煩雑な作業を強いられる。
【００１７】
また、ソースコードを解読するためには、特定の値が入力されたときのプログラムの振る舞いをトレースする必要がある。しかし、従来のソースコード解析装置においては、入力され得る値に関しても、ソースコードまたはマニュアルもしくは仕様書を参照して解読しなければならない。
【００１８】
さらに、ソースコードを自然言語に変換する技術においては、ソースコードの情報量自体は不変であるため、プログラミング言語に馴染みのある者にとって、ソースコードを理解するための負荷が軽減されるわけではない。
【００１９】
したがって、プログラムのアルゴリズムの理解を容易とするととともに、アルゴリズムが実装されたソースコード群およびソースコード間の関連を見やすい形式で表示するソースコード解析装置を提供することが課題となる。
【課題を解決するための手段】
【００２０】
本発明の第１の視点に係るソースコード解析装置は、ソースコード群から生成されたプログラムに対してプログラム入力値を設定するとともに前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出し、これらをプログラム入出力値として出力するプログラム入出力装置と、前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出して出力するトレース情報抽出装置と、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを入力し、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力するダイジェスト表示部と、を備えたことを特徴とする。
【００２１】
本発明の第２の視点に係るソースコード解析方法は、（ａ）ソースコード群から生成されたプログラムに対してプログラム入力値を設定する工程と、（ｂ）前記プログラム入力値に基づいて前記プログラムを実行する工程と、（ｃ）前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出する工程と、（ｄ）前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出するトレース情報抽出工程と、（ｅ）前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力する工程と、を含むことを特徴とする。
【００２２】
本発明の第３の視点に係るソースコード解析プログラムは、（ａ）ソースコード群から生成されたプログラムに対してプログラム入力値を設定する処理と、（ｂ）前記プログラム入力値に基づいて前記プログラムを実行する処理と、（ｃ）前記プログラム入力値に基づいて前記プログラムを実行して得られたプログラム出力値を抽出する処理と、（ｄ）前記プログラム入力値に基づいて前記プログラムを実行した際のモジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出するトレース情報抽出処理と、（ｅ）前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して出力する処理と、をコンピュータに実行させることを特徴とする。
【００２３】
第１の展開形態のソースコード解析装置は、前記トレース情報抽出装置が、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出して出力するように構成されたことを特徴とする。
【００２４】
第２の展開形態のソースコード解析装置は、前記ダイジェスト表示部が、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組を入力し、それぞれの組について、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換して、前記ダイジェスト表示を２以上出力するように構成されたことを特徴とする。
【００２５】
第３の展開形態のソースコード解析装置は、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを入力して記録するとともに出力する記憶部をさらに備え、前記ダイジェスト表示部が、前記記憶部から前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とを読み出すように構成されたことを特徴とする。
【００２６】
第４の展開形態のソースコード解析装置は、前記トレース情報抽出工程（ｄ）において、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出することを特徴とする。
【００２７】
第５の展開形態のソースコード解析方法は、前記表示工程（ｅ）において、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組に対して、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換し、ダイジェスト表示を２以上出力することを特徴とする。
【００２８】
第６の展開形態のソースコード解析プログラムは、前記トレース情報抽出処理（ｄ）において、前記プログラムのモジュール内のループをモジュールとみなして前記モジュール入出力値と前記ソースコード群の実行行を表すモジュール位置とを抽出する処理をコンピュータに実行させることを特徴とする。
【００２９】
第７の展開形態のソースコード解析プログラムは、前記表示処理（ｅ）において、前記モジュール位置と前記プログラム入出力値と前記モジュール入出力値とからなる２以上の組に対して、前記モジュール位置に基づいて前記ソースコード群から実行行に含まれる文字列を抽出して前記プログラム入力値と前記プログラム出力値と前記モジュール入出力値とともに所定のフォーマットに従ったダイジェスト表示に変換し、ダイジェスト表示を２以上出力する処理をコンピュータに実行させることを特徴とする。
【発明の効果】
【００３０】
第１の効果として、ソースコードのアルゴリズムを理解する作業が容易となる。
【００３１】
本発明に係るソースコード解析装置、方法およびプログラムは、各モジュールが実際に動作したときの入力と出力をモジュールのコードと同時に表示し、さらにその出力を求めるために動作したソースコード中の文字列のみを表示するからである。
【００３２】
第２の効果として、複数のソースコード群の関連を把握する作業が容易となる。
【００３３】
本発明に係るソースコード解析装置、方法およびプログラムは、実際に動作したソースコードの文字列のみを表示し、複数に跨るソースコードを一まとめにして表示するため、複数のソースコードを別々に参照したり、同一ソースコード内を上下の行を行き来したりすることがなくなるからである。
【発明を実施するための最良の形態】
【００３４】
本発明の実施の形態に係るソースコード解析装置は、解析対象とするプログラムの最も代表的な入力値を与え、実際に動作させて得られるトレース情報から、該当するソースコードを抽出して表示し、さらに内部のモジュールに実際に与えられた入力値と出力値、および、そのモジュールのソースコードをまとめて表示することで、入力値から出力値が得られる過程を明確にすることで、対象となるプログラムの動作およびソースコードの理解を容易にするものである。
【００３５】
さらに、本発明の実施形態に係るソースコード解析装置は、複数の位置やファイルに跨った各モジュールのソースコードを、一度にまとめて表示することで、ソースコードの見通しを良くし、ソースコードを順序だてて読み進めることでプログラムの理解を容易にするものである。
【００３６】
（実施例１）
本発明の第１の実施例に係るソースコード解析装置について図面を参照して詳細に説明する。
【００３７】
図１を参照すると、本発明の第１の実施例に係るソースコード解析装置２６は、ソースコード群１２から生成され、プログラム実行装置１３において実行されるプログラム１１を解析するための装置であって、プログラム１１を実行する上での代表的な入力値（「プログラム入力値」）をプログラム１１に入力するプログラム入力値入力装置１４と、そのプログラム入力値に基づいてプログラム１１を実行して得られる出力結果（「プログラム出力値」）を抽出するプログラム出力値抽出装置１５と、実行時のプログラム１１のトレース情報として、内部データの遷移と動作したソースコード群１２における位置（「モジュール位置」）とを抽出するトレース情報抽出装置１６と、抽出したトレース情報ならびにプログラム入力値およびプログラム出力値を記録する実行情報記憶部１９と、後述するソースコードダイジェスト表示フォーマットに従うソースコードダイジェストを表示させるソースコードダイジェスト表示部２０と、を備える。
【００３８】
以下、図２の上段に示したプログラム入力値およびプログラム出力値ならびに図２の下段に示したトレース情報からなるデータの組を、実行情報と呼ぶ。
【００３９】
トレース情報抽出装置１６は、抽出する情報を定義する抽出情報定義部１７と、定義に従ってプログラム１１の実行情報を抽出する情報抽出部１８と、から構成される。
【００４０】
ソースコードダイジェスト表示部２０は、実行情報記憶部１９から、順次、実行情報を取り出す実行情報抽出部２１と、実行情報抽出部２１により抽出された実行情報をもとに、ソースコード群１２より該当するソースコード行（以下「ソース文字列」という。）を抽出するソース文字列抽出部２２と、実行情報抽出部２１から得られる実行情報と、ソース文字列抽出部２２から得られるソース文字列とを合成してソースコードダイジェストを出力するダイジェスト合成部２３と、ダイジェスト合成部２３から出力されたソースコードダイジェストを表示装置２５に出力するダイジェスト出力部２４と、から構成される。
【００４１】
図２の下段に示した、プログラム実行時のトレース情報には、実行されたソースコードの情報として、一行ごとに一意に振られる「Ｎｏ」と、各ソースコードのファイル名と行番号とを特定する「モジュール位置」と、メソッド（プログラミング言語に応じて、関数または手続きであってもよい。）の呼び出しによってソースコード位置が遷移した際の直前のＮｏを記録した「呼び出し元」と、モジュールに対する入力を表す「モジュール入力値」と、呼び出しの結果としてモジュールから出力される「モジュール出力値」と、が含まれる。
【００４２】
図６を参照すると、一つのモジュールを表示するためのソースコードダイジェスト表示フォーマットは、タブ文字と境界文字“｜”とから成る「ソースコード境界」と、モジュールの入力を示す「モジュール入力値」と、モジュールの出力を示す「モジュール出力値」と、「モジュール位置」と、クラス名とメソッド名とから成る「モジュール名」と、モジュールのソースコードのうち実際に動作した「ソース文字列」と、さらに内部で呼び出されたモジュールを表示する「ソースコードダイジェスト表示」と、から構成される。
【００４３】
図１に示した構成要素は、次のように動作する。
【００４４】
プログラム入力値入力装置１４は、プログラム１１を実行するプログラム実行装置１３に対してプログラム入力値を入力し、入力したプログラム入力値を実行情報記憶部１９に出力し、実行情報記憶部１９はプログラム入力値を記録する。
【００４５】
情報抽出部１８は、抽出情報定義部１７の定義に従い、随時、情報を抽出して実行情報記憶部１９へ出力する。実行情報記憶部１９は、抽出した情報を記録する。
【００４６】
情報抽出部１８として、例えば、既存のプログラムに対してトレース情報抽出用のプログラムを組み込むことを可能とするバイナリ変換技術を利用することができる。
【００４７】
プログラム出力値抽出装置１５は、プログラム実行装置１３から得られるプログラム出力値を抽出し、実行情報記憶部１９へ出力する。実行情報記憶部１９はプログラム出力値を記録する。
【００４８】
ソースコードダイジェスト表示部２０は、実行情報抽出部２１によって、実行情報記憶部１９から実行情報を取得し、取得した実行情報に基づいて、ソース文字列抽出部２２によって、ソースコード群１２に含まれるソース文字列を抽出し、ダイジェスト合成部２３により、取得したソース文字列と実行情報とを結合してソースコードダイジェスト表示フォーマット（図６）に従ったソースコードダイジェストを合成し、合成したソースコードダイジェストをダイジェスト出力部２４によって表示装置２５に出力する。
【００４９】
表示装置２５はソースコードダイジェストを利用者に向けて表示する。
【００５０】
次に、図１ないし図７を参照して、本発明の第１の実施例の動作について詳細に説明する。
【００５１】
まず、プログラム入力値入力装置１４を使ってプログラム入力値を入力する。
【００５２】
ここでは、一例として、プログラム入力値を「３０、２０、１０」とする。
【００５３】
トレース情報抽出装置１６が有する抽出情報定義部１７により、抽出するトレース情報を、例えば、「Ｎｏ、モジュール位置、呼び出し元、モジュール入力、モジュール出力」として定義し、情報抽出部１８により、プログラム１１のメソッドの呼び出しや条件分岐の前後に抽出情報定義部１７で定義した抽出情報を抽出するためのコードを組み込み、組み込み後のプログラム１１をプログラム実行装置１３によって実行する。
【００５４】
次に、プログラム入力値入力装置１４により、プログラム入力値を入力し、入力したプログラム入力値を実行情報記憶部１９に記録する（図２の上段参照）。
【００５５】
入力を得たプログラム実行装置１３は、プログラム１１を実行し、情報抽出部１８は、予め組み込まれた情報抽出用のコードにより出力されたトレース情報を抽出し、実行情報記憶部１９に記録する（図２の下段参照）。
【００５６】
プログラム出力値抽出装置１５によって、プログラム出力値を抽出し、実行情報記憶部１９にプログラム出力値を記録する（図２の上段参照）。
【００５７】
その後、ソースコードダイジェスト表示部２０は、以下の手順に基づいて、ソースコードダイジェストを表示装置２５へ出力する。
【００５８】
図５は、ダイジェスト表示部２０に備えたダイジェスト合成部２３の動作を示した流れ図である。
【００５９】
図５を参照すると、ダイジェスト合成部２３は、変数ｌｅｖｅｌの初期値を−１とする（ステップＳ１）。
【００６０】
次に、実行情報抽出部２１からモジュール入力値、モジュール出力値、モジュール位置を取得する（ステップＳ２）。
【００６１】
実行情報が終了していないと判定された（ステップＳ３）場合、処理を継続し、ソース文字列抽出部２２によりモジュール位置で示されるソース文字列をソースコード群１２から取得する（ステップＳ４）。
【００６２】
実行情報がメソッド呼び出しの開始を示すと判定された（ステップＳ５）場合、ｌｅｖｅｌの値を１加算し（ステップＳ６）、タブ文字と境界文字（“｜”）の組をｌｅｖｅｌ回とモジュール入力値とモジュール出力値とを出力し（ステップＳ７）、タブ文字と境界文字（“｜”）の組をｌｅｖｅｌ回と、モジュール位置と該当するモジュール名とを出力する（ステップＳ８）。
【００６３】
さらに、タブ文字と境界文字（“｜”）とからなる組をｌｅｖｅｌ回とソース文字列とを出力し（ステップＳ９）、メソッドの呼び出しの最後と判定された（ステップＳ１０）場合、ｌｅｖｅｌの値を１減算し（ステップＳ１１）、再度、実行情報抽出部２１から実行情報を取得するステップＳ２に戻る。
【００６４】
以上の処理を、実行情報を全て読み終えて、実行情報が終了したと判定される（ステップＳ３）まで繰り返す。
【００６５】
最後に、ダイジェスト合成部２３は、ソースコードダイジェスト表示フォーマット（図６参照）に従ったソースコードダイジェストを出力する。
【００６６】
ダイジェスト出力部２４は、出力されたソースコードダイジェストを表示装置２５に向けて出力する。
【００６７】
次に、本発明の第１の実施例に係るソースコード解析装置によって、Ｊａｖａ（登録商標）言語によるソースコードを解析した例について説明する。
【００６８】
例として、図３のＳｏｕｃｅＣｏｄｅ１．ｊａｖａと図４のＳｏｕｃｅＣｏｄｅ２．ｊａｖａの２つのソースコードからなるプログラムを稼動させ、プログラム入力値として、図２に示すように”３０、２０、１０”という引数を与えて実行する。
【００６９】
その結果ディスプレイに”（３０＋２０）／１０＝５”というプログラム出力値が得られ、プログラム実行の過程で図２の実行情報を得られた場合、ダイジェスト合成部２３は、前記手順に従って、ソースコードダイジェストを合成し、表示装置２５には、図７に示したソースコードダイジェストが表示される。
【００７０】
図７を参照すると、図７全体は図６のソースコードダイジェスト表示フォーマットに従っており、前記の手順（図５参照）において、変数ｌｅｖｅｌの値が０のときに出力された行はソースコード境界が表示されず、１２行目ないし１９行目のようにｌｅｖｅｌ＝１の場合には境界文字“｜”によって、ＳｏｕｒｃｅＣｏｄｅ１．ｊａｖａおよびＳｏｕｒｃｅＣｏｄｅ２．ｊａｖａで記述されたコードを区別している。また、１２行目〜１９行目の内容は、図６におけるソースコードダイジェスト表示に該当し、このソースコードダイジェスト表示も、図６のソースコードダイジェスト表示フォーマットに従って表示される。
【００７１】
次に、本発明の第１の実施例の効果について説明する。
【００７２】
本発明の第１の実施例では、対象のプログラム内に存在する複数のモジュールをモジュール入力と、モジュール出力と、そのモジュール出力を実際に生成した有効ソースコードを表示することで各モジュールの理解を容易にし、対象のプログラムのソースコードの理解を容易にする。
【００７３】
また、全てのモジュールを一度に表示することで、複数のソースコードの見通しがよく、ソースコードを初めの行から順次読み進めることができる。したがって、プログラム入力値からプログラム出力値が得られる過程をソースコードから読み取ることが容易になる。
【００７４】
（実施例２）
次に、本発明の第２の実施例の構成について図面を参照して詳細に説明する。
【００７５】
図８を参照すると、本発明の第２の実施例の構成は、メソッド呼び出し等のモジュール分割された部分以外にも、一つのモジュール中に含まれるループ構造自体も一つの内部モジュールとして扱い、トレース情報から得られる入力および出力ならびに各ループ構造内で実際に動作した部分を表示する。
【００７６】
抽出情報定義部１７において、プログラム内の内部変数の状態遷移にいたる、細部のトレース情報を抽出するように定義し、情報抽出部１８によって実行情報記憶部１９に記録する。
【００７７】
さらに、第１の実施例における、ソース文字列抽出部２２の代わりに、ソースコード解析部２７を用いて、ソースコード内のループ制御を一つのモジュールとして分割し、ループ制御ブロック外スコープの変数を入力と定義し、ループ制御ブロック外スコープの変数に対する変更を出力と定義し、ダイジェスト合成部２３に渡す。ダイジェスト合成部２３は、第１の実施例と同様、図５のフローチャートの手順に従ってソースコードダイジェストを出力し、ダイジェスト出力部２４によって、出力されたソースコードダイジェストを表示装置２５に表示する。
【００７８】
（実施例３）
次に、本発明の第３の実施例の構成について図面を参照して詳細に説明する。
【００７９】
図９を参照すると、本発明の第３の実施例は、第１の実施例における実行情報（図２参照）を複数抽出する場合である。
【００８０】
この場合、図９に示すように、実行情報の組が複数抽出されるため、プログラム入力値の一覧を表示して、表示されたプログラム入力値のいずれかを選択することによって、該当する処理において実行されたソースコードを表示装置に表示する。
【００８１】
本発明の第３の実施例の効果について説明する。
【００８２】
本発明の第３の実施例では、各プログラム入力値から得られるソースコードダイジェストの差分を比較することで、異なる結果に至る複数のプログラム入力値に対して、どの処理部分において差異が生じたのかを、ソースコードレベルで比較することができる。
【産業上の利用可能性】
【００８３】
本発明によれば、既存のプログラムを理解するために、膨大なマニュアルや仕様書を参照することなく、プログラムの代表的な動作をソースコードレベルで理解することができる。
【００８４】
また、全てのソースコードの関連または構成を理解していない技術者であっても、異常が発生するプログラム入力値を与えることで、異常が発生する原因の特定をソースコードレベルで行うといった用途にも適用できる。
【００８５】
さらに、本発明の第３の実施例のように、複数のプログラム入力値に正常時の入力と異常時の入力を与え、結果として得られた複数のソースコードダイジェストを比較し、その差異に基づいて障害時の一次解析を行うこともできる。
【図面の簡単な説明】
【００８６】
【図１】本発明の第１の実施例に係るソースコード解析装置の構成図である。
【図２】本発明の第１の実施例に係るソースコード解析装置によって得られた実行情報（プログラム入出力値およびトレース情報）を示した図である。
【図３】本発明の第１の実施例に係るソースコード解析装置に対するソースコードを例示した図である。
【図４】本発明の第１の実施例に係るソースコード解析装置に対するソースコードを例示した図である。
【図５】本発明の第１の実施例に係るソースコード解析装置におけるダイジェスト合成部２３の動作を示した流れ図である。
【図６】本発明の第１の実施例に係るソースコード解析装置におけるダイジェスト表示フォーマットを例示した図である。
【図７】本発明の第１の実施例に係るソースコード解析装置によって得られたダイジェスト表示を例示した図である。
【図８】本発明の第２の実施例に係るソースコードダイジェスト表示システムの構成を示すブロック図である。
【図９】本発明の第３の実施例における実行情報（プログラム入出力値およびトレース情報）を示した図である。
【図１０】従来のソースコード解析装置の構成図である。
【図１１】従来のソースコード解析装置によって得られたソースコードとソースコード解析結果とを例示した図である。
【符号の説明】
【００８７】
１１  プログラム
１２  ソースコード群
１３  プログラム実行装置
１４  プログラム入力値入力装置
１５  プログラム出力値抽出装置
１６  トレース情報抽出装置
１７  抽出情報定義部
１８  情報抽出部
１９  実行情報記憶部
２０  ソースコードダイジェスト表示部
２１  実行情報抽出部
２２  ソース文字列抽出部
２３  ダイジェスト合成部
２４  ダイジェスト出力部
２５  表示装置
２６  ソースコード解析装置
２７  ソースコード解析部
１０１  ソースコード解析手段
１０２  概要図形作成手段
１０３  プログラム情報記憶部
【図１】
2008225760.tif 000003
【図２】
2008225760.tif 000004
【図３】
2008225760.tif 000005
【図４】
2008225760.tif 000006
【図５】
2008225760.tif 000007
【図６】
2008225760.tif 000008
【図７】
2008225760.tif 000009
【図８】
2008225760.tif 000010
【図９】
2008225760.tif 000011
【図１０】
2008225760.tif 000012
【図１１】
2008225760.tif 000013