(57)【要約】【課題】調べようとするプログラム機能の開始に関与するサブルーチンを、多数のサブルーチンの中から容易に特定することができるプログラム解析装置を提供する。【解決手段】調査対象機能を使う第一の手順と、該機能を使わない第二の手順とが準備され、第一の手順と第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとしてそれぞれ取得する。次に、第１の実行トレースと第２の実行トレースを比較し最初に差異が発生するトレース箇所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する。次に、検出されたサブルーチン呼出しまたはサブルーチン復帰に対応する、呼び出し関係図中のサブルーチン呼出しエッジを選択する。【選択図】図１
2010102663.tif 000002
【特許請求の範囲】
【請求項１】
調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得手段と、
前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出手段と、
を具備することを特徴とするプログラム解析装置。
【請求項２】
サブルーチンをノードとしサブルーチン間の呼出し関係をエッジとするグラフ構造からなる呼出し関係図を有し、前記検出手段により検出されたサブルーチン呼出しまたはサブルーチン復帰に対応する、呼び出し関係図中のサブルーチン呼出しエッジを選択する選択手段を備えたことを特徴とする請求項１に記載のプログラム解析装置。
【請求項３】
調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とが準備され、
前記第一の手順と前記第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得処理と、
前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出処理と、
を有することを特徴とするプログラム解析方法。
【請求項４】
サブルーチンをノードとしサブルーチン間の呼出し関係をエッジとするグラフ構造からなる呼出し関係図が準備され、
前記検出処理おいて検出されたサブルーチン呼出しまたはサブルーチン復帰に対応する、呼び出し関係図中のサブルーチン呼出しエッジを選択する選択処理を有することを特徴とする請求項３に記載のプログラム解析方法。
【請求項５】
調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とが準備され、
前記第一の手順と前記第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得処理と、
前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出処理と、
をコンピュータに実行させるためのプログラム解析用プログラム。
【請求項６】
サブルーチンをノードとしサブルーチン間の呼出し関係をエッジとするグラフ構造からなる呼出し関係図が準備され、
前記検出処理おいて検出されたサブルーチン呼出しまたはサブルーチン復帰に対応する、呼び出し関係図中のサブルーチン呼出しエッジを選択する選択処理をコンピュータに実行させることを特徴とする請求項５記載のプログラム解析用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、業務システム等のプログラムの保守や再構築に際し、プログラム内容の解析を容易に行うことができるプログラム解析装置およびプログラム解析方法並びにプログラム解析用プログラムに関する。
【背景技術】
【０００２】
業務システム等のプログラムの保守や再構築を効率的に行うためには、プログラムのデータ構造や制御構造を理解する必要がある。しかし、プログラムが大規模でなおかつ修正が頻繁に行われる場合には、データ構造や処理構造が容易には理解できない程にまで複雑化してしまうことが多い。また、プログラムの運用・保守が長期に渡ると、当初の開発者が不在となる場合や、ドキュメントがプログラムの変更内容と同期していない場合が多い。そこで、プログラムソースコードを解析し、サブルーチンなどのプログラム要素単位で相互の呼び出し関係を図式化して提示するプログラム解析技術が用いられてきた。
【０００３】
この種のプログラム解析装置の一例が、特許文献１に記載されている。この特許文献１記載の装置は、図９に示すように、プログラムを解析し、実行経路を分析する実行経路分析部５と、分析されたプログラムの中から実行経路にサブルーチンを含む条件分岐文の条件変数およびそのサブルーチンの呼出し先変数を検出する変数値取得部１２と、検出された変数について、変数検出箇所からプログラムの実行経路を順次遡り、変数の代入元の定数を探索し確定する変数値確定処理部７と、確定された変数値を基に条件分岐文の分岐箇所を限定し、限定した経路から呼出し先が確定したサブルーチンを抽出する実行経路限定部６とを備え、抽出したサブルーチンを基に予め指定されたプログラムの構成図を生成出力する。
【特許文献１】特開２００２−２１５３９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、プログラム解析においては、設計書が完備していないプログラムを保守するとき、保守対象の機能がプログラム内のどのサブルーチンによって実現されているかを特定し、それらサブルーチンがどのように相互作用しているかを調べる必要がある。このとき、上述した特許文献１に記載のプログラム解析技術には次の課題がある。すなわち、プログラムの規模が大きい場合に、サブルーチンの呼出し関係図の中でどこを最初に参照するとよいのかが容易に見出すことができない。その理由は、呼出し関係図には機能との関連を示す情報が含まれていないため、ひとつずつサブルーチンの内容を確認する必要があるためである。
【０００５】
本発明は、このような事情に鑑みてなされたもので、その目的は、調べようとするプログラム機能の開始に関与するサブルーチンを、呼出し関係図中に存在する多数のサブルーチンの中から容易に特定することができるプログラム解析装置およびプログラム解析方法並びにプログラム解析用プログラムを提供することにある。
【課題を解決するための手段】
【０００６】
本発明は、調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得手段と、前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出手段とを具備することを特徴とするプログラム解析装置である。
【０００７】
また、本発明は  調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とが準備され、前記第一の手順と前記第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得処理と、前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出処理とを有することを特徴とするプログラム解析方法である。
【０００８】
また、本発明は、調査対象機能を使う第一の手順と、前記調査対象機能を使わない第二の手順とが準備され、前記第一の手順と前記第二の手順とをそれぞれ実行して第一の実行トレースと第二の実行トレースとをそれぞれ取得するトレース取得処理と、前記第一の実行トレースと前記第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する検出処理とをコンピュータに実行させるためのプログラム解析用プログラムである。
【発明の効果】
【０００９】
本発明によれば、保守対象のプログラム機能について調べるときに、第一の実行トレースと第二の実行トレースとを時系列順に比較し、最初に差異が発生するトレース個所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出するようにしたので、最初に調べるべきサブルーチンを多数のサブルーチンの中から容易に見出すことができる効果がある。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照し、本発明の実施形態について説明する。
図１は本発明の一実施形態によるプログラム解析装置の構成を示すブロック図である。実施形態によるプログラム解析装置は、プログラム制御により動作するコンピュータ（中央処理装置；プロセッサ；データ処理装置）１００と、記憶装置２００から構成されている。コンピュータ１００は、対照トレース取得手段１１０と、サブルーチン選択手段１２０と、解析対象プログラム１３０とを含む。
【００１１】
対照トレース取得手段１１０は、あらかじめ準備された、調査対象機能を使う第１の手順と、調査対象機能を使わないように変更した第２の手順とを解析対象プログラム１３０に対してそれぞれ実行して第１の実行トレースと第２の実行トレースとをそれぞれ取得する（トレース取得処理）。ここで、トレースとは、プログラムの実行中に発生するサブルーチン呼び出しおよびサブルーチン復帰の系列である。
【００１２】
図２に、第１の手順と第２の手順の例を示す。例１では、第1の手順に調査対象機能１が含まれ、また、第１の手順から調査対象の機能１を除去したものが第２の手順である。例２のように機能２の操作手順からオプション設定を外すという変更も想定する。
また、対照トレース取得手段１１０は、第１の実行トレースと第２の実行トレースを比較し、最初に差異が発生するトレース箇所に相当するサブルーチン呼び出しまたはサブルーチン復帰を検出する（検出処理）。
【００１３】
サブルーチン選択手段１２０は、対照トレース取得手段１１０が検出したサブルーチン呼び出しまたはサブルーチン復帰に相当するサブルーチン呼出しに対応するサブルーチン呼出しを、あらかじめ準備された呼び出し関係図中で選択する（選択処理）。
【００１４】
次に、図３のフローチャートを参照して本実施形態の全体の動作について詳細に説明する。
まず、第１の手順を実行する（図３のステップＳ１１０）。次に、第１の手順の実行についての実行トレースを第１の実行トレースとして取得する（ステップＳ１２０）。次に、第２の手順を実行する（ステップＳ１３０）。次に、第２の手順の実行についての実行トレースを第２の実行トレースとして取得する（ステップＳ１４０）。次に、第１の実行トレースと第２の実行トレースを比較し、最初に差異が発生するサブルーチン呼び出しまたはサブルーチン復帰を検出する（ステップＳ１５０）。最後に、ステップＳ１６０において抽出したサブルーチン呼出しまたはサブルーチン復帰に相当するサブルーチン呼出しを呼び出し関係図中で選択する。すなわち、ステップS１６０では、サブルーチンをノードとしサブルーチン間の呼出し関係をエッジとするグラフ構造からなる呼出し関係図が準備され、検出されたサブルーチン呼出しまたはサブルーチン復帰に対応する、呼び出し関係図中のサブルーチン呼出しエッジを選択する。
【００１５】
上述した実施形態によれば、調査対象の機能を実行する場合とそうでない場合の二つの実行トレースの比較に基づいて、該機能の開始に関与するサブルーチン呼出しを呼び出し関係図中に示すように構成されているため、保守対象の機能について調べたい場合に、調べるべきサブルーチンを容易に見出すことができる。
（実施例）
【００１６】
次に、具体的な実施例を用いて上記実施形態の動作を説明する。
図４に示すような画面操作を受け付けるGUIプログラムを解析対象のプログラムとして動作を説明する。このプログラムは、main.exeというコマンドの発行により起動し、最初にログイン画面が表示され、ログイン画面でログイン操作を行った後に幾つかの操作を経て操作画面１が表示され、操作画面１においてパラメータを入力し処理Aのボタンを押すと、入力待ち状態１となるものである。
【００１７】
図５には、対照トレース取得手段１１０があらかじめ保持する第１の手順と第２の手順を示した。調査対象の機能は、操作画面１における処理Ａボタンの実行におけるオプション１であるとする。第１の手順と第２の手順の共通な手順は、main.exeコマンドの発行から操作画面１の表示に至るまでの操作手順である。第１の手順は共通な手順に引き続いて、操作画面においてパラメータ１に"aaa"をパラメータ２に"ccc"をパラメータ３に「有り」を設定して処理Aボタンを押すという操作手順を保持する。第２の手順は共通な手順に引き続いて、操作画面においてパラメータ１に"aaa"をパラメータ２に"ccc"をパラメータ３に「無し」を設定して処理Aボタンを押すという操作手順を保持する。つまり操作画面１のままとどまるものとする。
【００１８】
なお、調査対象の機能としてここではオプションの有無を扱ったが、一般には実行するボタンの種類の違いや、パラメータの値の違いを調査対象として操作手順を構成しても良い。
【００１９】
対照トレース取得手段１１０は、初期化手順と第１の手順の操作を順次実行しその間の実行トレースを第１の実行トレースとして取得する。次に、初期化手順と第２の手順の操作を順次実行し第２の実行トレースとして取得する。トレース取得の対象となるプログラムの構造を図６に示す。ここで、図４の画面において処理Aボタンを押したときにプログラム内部ではサブルーチン１が呼び出されるものとする。そして、オプション１が「無し」に設定されている場合はサブルーチン１においてサブルーチン２のみが呼び出され、オプション１が「有り」に設定されている場合はサブルーチン１においてサブルーチン２のあとにサブルーチン３が呼び出されるものとする。このとき、第１の実行トレース、第２の実行トレースは図７のようになる。
【００２０】
サブルーチン選択手段１２０は、図７に示す第１の実行トレースと第２の実行トレースを時系列順に比較し、差異を検出する。第１の実行トレースの側だけに、サブルーチン３の呼出しから復帰までの記録が余分に存在する。差異の最初の記録は「サブルーチン３呼出し」である。このサブルーチン３呼出しは、図６の呼び出し関係図中においてサブルーチン１からサブルーチン３への矢に相当する。相当する矢を選択した結果を図８に示す。なお、差異の先頭部分がサブルーチン復帰である場合は、そのサブルーチン開始に関するサブルーチン呼出しを選択する。
【００２１】
このように、実施形態によれば、第１の実行トレースと第２の実行トレースを時系列順に比較し、差異を検出することによって、調査対象機能（上記実施例では「オプション１有り」）に係るサブルーチン３の呼び出しを容易に検出することができる。
【産業上の利用可能性】
【００２２】
本発明は、プログラムの保守や再構築におけるプログラム内容の解析に用いて好適である。
【図面の簡単な説明】
【００２３】
【図１】本発明の一実施形態によるプログラム解析装置の構成を示すブロック図である。
【図２】同プログラム解析装置の動作を説明するための図である。
【図３】同プログラム解析装置の動作を説明するためのフローチャートである。
【図４】同プログラム解析装置の具体的動作を説明するための説明図である。
【図５】同プログラム解析装置の動作を説明するための手順図である。
【図６】同プログラム解析装置における処理の流れを示す流れ図である。
【図７】同プログラム解析装置における処理の流れを説明するための説明図である。
【図８】同プログラム解析装置における処理の流れを示す流れ図である。
【図９】従来のプログラム解析装置の一例を示すブロック図である。
【符号の説明】
【００２４】
１００…コンピュータ
１１０…対象トレース取得手段
１２０…サブルーチン選択手段
１３０…解析対象プログラム
２００…記憶装置
【図１】
2010102663.tif 000003
【図２】
2010102663.tif 000004
【図３】
2010102663.tif 000005
【図４】
2010102663.tif 000006
【図５】
2010102663.tif 000007
【図６】
2010102663.tif 000008
【図７】
2010102663.tif 000009
【図８】
2010102663.tif 000010
【図９】
2010102663.tif 000011