以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としてのデバッグ支援システム1の機能ブロック構成を図1に示す。図1において、デバッグ支援システム1は、デバッグ支援装置10と、変更履歴情報格納装置80と、プログラム実行装置90とを備える。また、デバッグ支援装置10は、変更履歴情報読込部11と、トレース処理埋め込み部12と、実行結果解析部13とを備える。また、デバッグ支援装置10は、変更履歴情報格納装置80およびプログラム実行装置90と、それぞれ通信可能に接続される。
ここで、デバッグ支援システム1を構成する各装置は、図2に示すようなハードウェア要素によって構成可能である。図2において、デバッグ支援装置10は、CPU(Central Processing Unit)1001、メモリ1002、出力装置1003、入力装置1004、および、ネットワークインタフェース1005を含むコンピュータ装置によって構成可能である。メモリ1002は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)等によって構成される。メモリ1002には、コンピュータ装置をデバッグ支援装置10として機能させるコンピュータ・プログラムが格納される。出力装置1003は、ディスプレイ装置やプリンタ等のように、情報を出力する装置によって構成される。入力装置1004は、キーボードやマウス等のように、ユーザ操作の入力を受け付ける装置によって構成される。ネットワークインタフェース1005は、ネットワークに接続するインタフェースである。デバッグ支援装置10の各機能ブロックは、メモリ1002に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するCPU1001によって構成される。
また、図2において、変更履歴情報格納装置80は、CPU8001、メモリ8002、および、ネットワークインタフェース8005を含むコンピュータ装置によって構成可能である。メモリ8002は、RAM、ROM、補助記憶装置(ハードディスク等)等によって構成される。メモリ8002には、コンピュータ装置を変更履歴情報格納装置80として機能させるコンピュータ・プログラムが格納される。ネットワークインタフェース8005は、ネットワークに接続するインタフェースである。CPU8001は、メモリ8002に格納されたコンピュータ・プログラムを読み込んで実行し各部を制御する。
また、図2において、プログラム実行装置90は、CPU9001、メモリ9002、および、ネットワークインタフェース9005を含むコンピュータ装置によって構成可能である。メモリ9002は、RAM、ROM、補助記憶装置(ハードディスク等)等によって構成される。メモリ9002には、コンピュータ装置をプログラム実行装置90として機能させるコンピュータ・プログラムが格納される。ネットワークインタフェース9005は、ネットワークに接続するインタフェースである。CPU9001は、メモリ9002に格納されたコンピュータ・プログラムを読み込んで実行し各部を制御する。
なお、デバッグ支援システム1を構成する各装置のハードウェア構成は、上述の構成に限定されない。
変更履歴情報格納装置80は、変更履歴情報を格納している。変更履歴情報とは、コンピュータ装置に実行させるためのプログラムの各バージョンについて、更新前のバージョンに対する変更差分を表す情報である。例えば、変更履歴情報格納装置80は、プログラムソースコードのバージョン管理を行う一般的な構成管理ツールによって構成されていてもよい。
プログラム実行装置90は、対象となるプログラム言語のソースコードを実行する装置である。なお、翻訳が必要なプログラム言語の場合、プログラム実行装置90は、ソースコードを翻訳して実行可能プログラムを生成し、生成した実行可能プログラムを実行すればよい。
デバッグ支援装置10の変更履歴情報読込部11は、変更履歴情報格納装置80に格納された変更履歴情報を読み込む。そして、変更履歴情報読込部11は、上述した変更差分に基づいて、プログラム中で改修された関数を特定する。例えば、変更履歴情報読込部11は、最終的に正常であることが確認されているバージョンに対して、少なくともいずれかのその後のバージョンにおいて改修されている関数を特定すればよい。そして、変更履歴情報読込部11は、特定した関数において、その関数の外部に影響を与える変数を抽出する。
なお、変更履歴情報読込部11は、変更履歴情報格納装置80に変更履歴情報が格納されている各バージョンのうち、解析対象として指定される複数のバージョンについて、改修された関数の特定および変数の抽出を行ってもよい。そのような複数のバージョンとは、最終的に正常であることが確認されているバージョンを含み、そのバージョン以降に改修された各バージョンを含んでいてもよい。この場合、解析対象となる複数のバージョンを指定する情報は、入力装置1004を介して入力されてもよい。
トレース処理埋め込み部12は、変更履歴情報読込部11によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成する。具体的には、トレース処理埋め込み部12は、各バージョンのプログラムのソースコードにおいて、変更履歴情報読込部11によって特定された関数の内部に、抽出された変数の値をその関数名と共に出力するトレース処理の記述を埋め込めばよい。
実行結果解析部13は、プログラム実行装置90に、各バージョンのデバッグソースコードを実行させる。そして、実行結果解析部13は、各バージョンのデバッグソースコードの実行結果、および、トレース処理により出力されたトレース情報の変動推移を解析する。実行結果は、例えば、実行結果が正常であるか異常であるかを表す。また、トレース情報は、各バージョンについて、埋め込まれたトレース処理により出力される変数の値および関数名を含む。そして、実行結果解析部13は、解析結果に基づいて、デバッグ候補となる関数および変数を表す情報を、実行結果およびトレース情報の変動推移を表す情報と共に出力する。例えば、実行結果解析部13は、変更履歴情報読込部11によって特定された関数および抽出された変数を全てデバッグ候補として、変動推移を表す情報と共に出力してもよい。あるいは、実行結果解析部13は、変更履歴情報読込部11によって特定された関数および抽出された変数の中から、実行結果の変動推移とトレース情報の変動推移との関連性に基づいて、デバッグ候補となる関数および変数を選択してもよい。そして、実行結果解析部13は、デバッグ候補として選択した関数および変数を表す情報を、変動推移を表す情報と共に出力してもよい。
なお、実行結果解析部13は、上述の情報を、出力装置1003に出力してもよい。あるいは、実行結果解析部13は、上述の情報を、メモリ1002等に出力してもよい。あるいは、実行結果解析部13は、上述の情報を、ネットワークインタフェース1005を介して接続される他の装置に対して出力してもよい。
以上のように構成されたデバッグ支援システム1の動作について、図3を参照して説明する。
まず、変更履歴情報読込部11は、変更履歴情報格納装置80に格納された変更履歴情報を読み込んで、改修された関数を特定する。そして、変更履歴情報読込部11は、それらの関数において外部に影響を与える変数を抽出する(ステップS1)。
次に、トレース処理埋め込み部12は、特定された関数において抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのソースコードに埋め込んで、デバッグソースコードを生成する(ステップS2)。
次に、実行結果解析部13は、ステップS2で生成された各バージョンのデバッグソースコードを、プログラム実行装置90に出力する。これにより、プログラム実行装置90は、各バージョンのデバッグソースコードを実行する(ステップS3)。
次に、実行結果解析部13は、各バージョンのデバッグソースコードの実行結果の変動推移、および、トレース処理により出力されたトレース情報の変動推移を解析する(ステップS4)。
次に、実行結果解析部13は、ステップS4の解析結果に基づきデバッグ候補となる関数および変数を表す情報を、実行結果およびトレース情報の変動推移を表す情報と共に出力する(ステップS5)。
以上で、デバッグ支援システム1は、動作を終了する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としてのデバッグ支援システムは、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援することができる。
その理由について述べる。本実施の形態では、デバッグ支援装置の変更履歴情報読込部が、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報を変更履歴情報格納装置から読み込む。そして、変更履歴情報読込部が、変更差分に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する。そして、トレース処理埋め込み部が、特定された関数において抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成する。そして、プログラム実行装置が各バージョンのデバッグソースコードを実行する。そして、デバッグ支援装置の実行結果解析部が、各バージョンのデバッグソースコードの実行結果の変動推移およびトレース処理により出力されたトレース情報の変動推移を解析する。そして、実行結果解析部が、解析結果に基づきデバッグ候補となる関数および変数を、実行結果およびトレース情報の変動推移と共に出力するからである。
これにより、本実施の形態を利用するプログラム開発担当者は、リグレッションテストの結果、実行結果に誤りがあると判明した際、実行結果の変動推移およびトレース情報の変動推移を照合することができる。その結果、プログラム開発担当者は、経験則に頼ることなく、実行結果が正常から異常に変化したバージョンにおいて、変数の値が変動している関数を中心に、誤りのある箇所の候補を絞り込むことができる。また、プログラム開発担当者は、そのような関数において用いられている内部データの変動推移を容易に把握できる。また、プログラム開発担当者は、経験則に頼ることなく、そのような関数を中心に、影響分析を再実施すべき関数の候補を絞り込むことができる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としてのデバッグ支援システム2の構成を図4に示す。図4において、デバッグ支援システム2は、本発明の第1の実施の形態としてのデバッグ支援システム1に対して、デバッグ支援装置10に替えてデバッグ支援装置20と、変更履歴情報格納装置80に替えて変更履歴情報格納装置81とを備える点が異なる。デバッグ支援装置20は、変更履歴情報読込部21と、トレース処理埋め込み部22と、実行結果解析部23とを備える。
変更履歴情報格納装置81は、変更履歴情報として、コンピュータ装置に実行させるためのプログラムの各バージョンについて、更新前のバージョンに対する変更差分を表す情報に加えて、そのバージョンを更新した担当者(更新者)を表す情報を記憶している。
変更履歴情報格納装置81に格納される変更履歴情報の構成の一例を図5に示す。図5では、変更履歴情報は、更新者、バージョン、更新行位置、更新前ソースおよび更新後ソースをそれぞれ表す情報からなる。更新者は、更新者の名前やID等、そのバージョンの更新を担当した担当者や担当グループ等を識別可能な情報を表す。バージョンは、更新されたソースコードに付与されたバージョンを表す。更新行位置は、更新されたソースコードにおいて、更新前のソースコードに対して更新のある行番号を表す。更新前ソースは、更新前のソースコードを表す。更新後ソースは、更新後のソースコードを表す。
デバッグ支援装置20の変更履歴情報読込部21は、本発明の第1の実施の形態における変更履歴情報読込部11と略同様に構成されるが、以下の詳細な点が異なる。
詳細には、変更履歴情報読込部21は、改修された関数およびその関数において外部に影響を与える変数として、改修された関数のパラメータ、戻り値、関数内部で使用されるグローバル変数を抽出する。
例えば、変更履歴情報読込部21は、抽出した変数について、トレース埋め込み情報を生成してもよい。トレース埋め込み情報の構成の一例を図6に示す。図6において、トレース埋め込み情報は、関数名、パラメータ名、パラメータ属性、戻り値名、戻り値属性、グローバル変数名およびグローバル変数属性をそれぞれ表す情報からなる。トレース埋め込み情報に、各変数について属性を表す情報が含まれているのは、トレース出力処理において、出力対象の属性を指定するためである。ただし、属性を指定しなくても出力処理が可能なプログラミング言語であれば、必ずしも属性は抽出されなくてもよい。
また、変更履歴情報読込部21は、変更履歴情報から、各バージョンの更新者を表す情報を読み込む。読み込まれた更新者を表す情報は、後述の実行結果解析部23によって利用される。
トレース処理埋め込み部22は、本発明の第1の実施の形態におけるトレース処理埋め込み部12と略同様に構成されるが、以下の詳細な点が異なる。
詳細には、トレース処理埋め込み部22は、各バージョンのプログラムのソースコードに対して、上述のトレース埋め込み情報に基づいて、改修された各関数におけるパラメータ、戻り値、グローバル変数を、関数名と共に出力するトレース処理を埋め込む。なお、トレース処理によって出力される情報の形式は、後述の実行結果解析部23によって解析可能に定められた形式であるものとする。また、トレース処理埋め込み部22は、改修された関数において、1つの変数について少なくとも1つのトレース処理を埋め込む。例えば、トレース処理埋め込み部22は、パラメータのトレース処理を、改修された関数の開始部分(ローカル変数宣言の直後等)に埋め込んでもよい。また、トレース処理埋め込み部22は、戻り値のトレース処理を、改修された関数の終了部分(戻り値の返却処理の直前等)に埋め込んでもよい。また、トレース処理埋め込み部22は、グローバル変数のトレース処理を、そのグローバル変数に関する更新処理の直後に埋め込んでもよい。なお、トレース処理埋め込み部22は、改修された関数において、必要に応じて、1つの変数について複数の箇所にトレース処理を埋め込んでもよい。例えば、トレース処理埋め込み部22は、該当する変数に関する更新処理の記述箇所毎に、その直後にトレース処理を埋め込んでもよい。
実行結果解析部23は、本発明の第1の実施の形態における実行結果解析部13と略同様に構成されるが、以下の詳細な点が異なる。
詳細には、実行結果解析部23は、各バージョンのデバッグソースコードの実行結果の変動推移およびトレース情報の変動推移に基づいて、デバッグ候補となる関数および変数に優先順位を付与する。
例えば、実行結果解析部23は、実行結果の変動推移と、トレース情報の変動推移との関連性に基づいて、トレース情報を出力した関数および変数の組合せのそれぞれに優先順位を付与する。具体的には、実行結果解析部23は、変数の値が全バージョンにわたって出力されない(値が設定されていない)場合、その変数および関数の組合せに対して、最も低い優先順位(例えば、0)を付与してもよい。また、例えば、実行結果解析部23は、実行結果が変動しているにも関わらず、変数の値が全バージョンにわたって変動しない場合、その変数および関数の組合せに、次に低い優先順位(例えば、1)を付与してもよい。また、例えば、実行結果解析部23は、実行結果が変動したバージョンと、変数の値が変動したバージョンとが一致する場合、その変数および関数の組合せに、最も高い優先順位(例えば、3)を付与してもよい。また、例えば、実行結果解析部23は、実行結果が変動したバージョンと、変数の値が変動したバージョンとが一致しない場合、その変数および関数の組合せに、次に高い優先順位(例えば、2)を付与してもよい。
また、実行結果解析部23は、デバッグ候補となる関数および変数を表す情報と、実行結果およびトレース情報の変動推移を表す情報とに加えて、付与した優先順位と、各バージョンの更新者とを表す情報を出力する。
以上のように構成されたデバッグ支援システム2の動作について、図面を参照して説明する。まず、デバッグ支援システム2の動作の概略を、図7に示す。
図7では、まず、変更履歴情報読込部21は、変更履歴情報格納装置81に格納された変更履歴情報を読み込んで、改修された関数を特定する。そして、変更履歴情報読込部21は、特定した各関数について、パラメータ、戻り値、関数内部で使用されるグローバル変数を抽出し、トレース埋め込み情報を生成する(ステップS11)。
次に、変更履歴情報読込部21は、変更履歴情報格納装置81から、各バージョンの更新者を読み込む(ステップS12)。
次に、トレース処理埋め込み部22は、トレース埋め込み情報に基づき、トレース処理の記述を各バージョンのソースコードに埋め込んで、デバッグソースコードを生成する(ステップS13)。このステップの詳細については後述する。
次に、実行結果解析部23は、ステップS13で生成された各バージョンのデバッグソースコードを、プログラム実行装置90に出力する。これにより、プログラム実行装置90は、各バージョンのデバッグソースコードを実行する(ステップS3)。
次に、実行結果解析部23は、各バージョンの実行結果の変動推移、および、トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補の関数および変数の組合せに優先順位を付与する(ステップS14)。このステップの詳細については後述する。
次に、実行結果解析部23は、デバッグ候補となる関数および変数と、その優先順位と、実行結果およびトレース情報の変動推移と、各バージョンの更新者とをそれぞれ表す情報を出力する(ステップS15)。
以上で、デバッグ支援システム2は、動作を終了する。
次に、ステップS13におけるトレース処理埋め込み動作の詳細を図8に示す。
図8では、まず、トレース処理埋め込み部22は、ステップS11で生成されたトレース埋め込み情報を読み込む(ステップS21)。前述したように、トレース埋め込み情報は、改修された各関数におけるパラメータ、戻り値、グローバル変数のそれぞれについて生成されている。
次に、トレース処理埋め込み部22は、各バージョンのソースコードについて、トレース埋め込み情報にしたがって、改修された各関数に、パラメータ、戻り値、グローバル変数のそれぞれのトレース処理を埋め込む(ステップS22)。
以上で、トレース処理埋め込み部22は、トレース処理埋め込み動作を終了する。
このようなトレース処理埋め込み動作によって生成されたあるバージョンのデバッグソースコードの一例を、図9に示す。図9において、改修された関数名は「subproc」である。また、下線部は、埋め込まれたトレース処理を表す。図9に示すように、トレース処理埋め込み部22は、関数「subproc」の記述において、関数名「subproc」と共に「パラメータ「param1」、「param2」の値を出力するトレース処理を、冒頭のローカル変数の宣言・初期化の直後に埋め込んでいる。また、トレース処理埋め込み部22は、関数「subproc」の記述において、関数名「subproc」と共にグローバル変数「gtr」の値を出力するトレース処理を、グローバル変数「gtr」に関する更新処理の直後に埋め込んでいる。また、トレース処理埋め込み部22は、関数「subproc」の記述において、関数名「subproc」と共に戻り値「rtn」の値を出力するトレース処理を、戻り値「rtn」を返却する処理の直前に埋め込んでいる。
次に、ステップS14における実行結果解析動作の詳細を図10に示す。
図10では、まず、実行結果解析部23は、各バージョンについて、プログラム実行装置90による実行結果および出力されたトレース情報を取得する(ステップS31)。
次に、実行結果解析部23は、トレース情報の示す各変数について、変数の値の変動推移と、実行結果の変動推移との関連性に基づいて、優先順位を付与する(ステップS32)。
以上で、実行結果解析部23は、実行結果解析動作を終了する。
ここで、ステップS32において、各変数について優先順位を付与する処理の一例を、図11を参照して説明する。
ここでは、まず、実行結果解析部23は、この変数についてトレース処理による値の出力があるか否かを判断する(ステップS41)。
ここで、全バージョンにわたってこの変数の値が出力されていない場合、実行結果解析部23は、この変数に、優先順位として「0」を付与する(ステップS42)。
一方、少なくともいずれかのバージョンでこの変数の値が出力されている場合、実行結果解析部23は、この変数についてトレース処理により出力された値がバージョンによって変動しているか否かを判断する(ステップS43)。
ここで、全バージョンにわたってこの変数の値に変動がない場合、実行結果解析部23は、この変数に、優先順位として「1」を付与する(ステップS44)。
一方、この変数の値が変動している場合、実行結果解析部23は、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致しているか否かを判断する(ステップS45)。
ここで、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致していない場合、実行結果解析部23は、この変数に、優先順位として「2」を付与する(ステップS46)。
一方、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致している場合、実行結果解析部23は、この変数に、優先順位として「3」を付与する(ステップS47)。
以上で、優先度を付与する処理の一例の説明を終了する。
なお、この例では、優先順位は、値が大きいほどデバッグ候補としての優先順位が高いことを示す。また、優先順位「0」は、デバッグ候補から除外可能であることを示すと定めておいてもよい。
このような実行結果解析動作の具体例について説明する。
ここでは、まず、ステップS31において、実行結果解析部23が、プログラム実行装置90から取得した各バージョンの実行結果の一例を図12に示す。図12は、バージョン「REV101」、「REV102」、「REV103」の各デバッグソースコードの実行結果が、それぞれ「OK」(正常)であったことを表している。また、図12は、バージョン「REV104」、「REV105」の各デバッグソースコードの実行結果が、それぞれ「NG」(異常)であったことを表している。
次に、ステップS31において、実行結果解析部23が、プログラム実行装置90から取得した各バージョンのトレース情報の一例を図13に示す。例えば、図13の1行目は、関数1の変数1については、バージョン「REV101」〜「REV105」にわたって、トレース処理により出力された値が無かった(変数1に値が設定されなかった)ことを表している。
図12および図13に示した実行結果およびトレース情報が取得されているとき、実行結果解析部23は、次のように優先順位を付与する。
具体的には、まず、実行結果解析部23は、実行結果が「OK」から「NG」に変動したのは、バージョン「REV104」であると特定する。つまり、バージョン「REV104」以降で障害が発生している。
ここで、図13のトレース情報の1行目が示す関数1の変数1は、全てのバージョンにわたって出力がない(ステップS41でNo)。そこで、実行結果解析部23は、この変数について、バージョン「REV104」以降の障害に影響している可能性はないと判断する。したがって、実行結果解析部23は、関数1の変数1について、優先順位「0」を付与する(ステップS42)。
また、2行目が示す関数2の変数2は、全てのバージョンにわたって値が1であり変動していない(ステップS43でNo)。そこで、実行結果解析部23は、この変数について、バージョン「REV104」以降の障害に影響している可能性は低いとみなす。したがって、実行結果解析部23は、関数2の変数2について、優先順位「1」を付与する(ステップS44)。
また、3〜5行目が示す関数3の変数3、関数4の変数4、関数5の変数4のそれぞれは、変数の値が変動したバージョンが「REV103」であり、実行結果が変動したバージョン「REV104」と一致していない(ステップS45でNo)。そこで、実行結果解析部23は、これらの変数について、バージョン「REV104」以降の障害に影響している可能性が中程度であるとみなす。したがって、実行結果解析部23は、これらの変数について、優先順位「2」を付与する(ステップS46)。
また、6〜8行目が示す関数6の変数6、関数7の変数7、関数8の変数8のそれぞれは、変数の値が変動したバージョンが「REV104」であり、実行結果が変動したバージョン「REV104」と一致とする(ステップS45でYes)。そこで、実行結果解析部23は、これらの変数について、バージョン「REV104」以降の障害に影響している可能性が高いとみなす。したがって、実行結果解析部23は、これらの変数について、優先順位「3」を付与する(ステップS47)。
このように優先順位が付与された場合、ステップS15において出力される情報の一例を、図14に示す。図14に示すように、実行結果解析部23は、トレース処理により出力した関数および変数の各組合せについて、その変動推移と共に、優先順位を出力する。また、実行結果解析部23は、各変数の値の変動推移と比較可能に、実行結果の変動推移を併せて出力する。また、実行結果解析部23は、各バージョンの更新者を表す情報を、併せて出力する。
以上で、デバッグ支援システム2の動作の具体例の説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としてのデバッグ支援システムは、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく、さらに効率的に絞り込むことを支援することができる。
その理由について述べる。本実施の形態は、本発明の第1の実施の形態と同様の構成に加えて、実行結果解析部が、実行結果の変動推移およびトレース情報の変動推移に基づいて、改修された関数における外部に影響のある変数に優先順位を付与して出力するからである。例えば、実行結果解析部は、実行結果の変動推移に関わらずトレース情報の出力が無い変数については、障害に影響する可能性がないことを表す優先順位を付与するからである。また、例えば、実行結果解析部は、実行結果の変動推移に関わらずトレース情報の出力に変動がない変数については、障害に影響する可能性が低いことを示す優先順位を付与するからである。また、例えば、実行結果解析部は、実行結果の変動推移とトレース情報の出力の変動推移が一致しない変数については、障害に影響する可能性が中程度であることを示す優先順位を付与するからである。また、例えば、実行結果の変動推移とトレース情報の出力の変動推移が一致する変数については、障害に影響する可能性が高いことを示す優先順位を付与するからである。
そして、実行結果解析部が、改修された関数において外部に影響のある変数について、その値の変動推移を優先順位とともに出力するからである。また、実行結果解析部が、あわせて、実行結果の変動推移と、各バージョンの更新者とを出力するからである。
これにより、プログラム開発担当者は、経験則に頼ることなく、優先順位の高い関数および変数から順に、誤りのある箇所の候補を、内部データの変動推移を確認しながら効率的に確認することができる。また、プログラム開発担当者は、経験則に頼ることなく、そのような優先順位のより高い関数から順に、影響分析を再実施すべき関数の候補を絞り込むことができる。また、プログラム設計担当者は、そのような関数における変数の変動推移を確認することで、設計段階で想定した影響分析に誤りがないかの再点検が出来る。また、プログラム開発担当者は、誤りのある箇所の候補となる関数において、変数の値が変動したバージョンを更新したプログラム開発者を絞り込むことができる。
なお、本実施の形態において、変更履歴情報の構成の一例を図5に示したが、本発明における変更履歴情報の構成を限定するものではない。
また、本実施の形態において、変更履歴情報読込部によって生成されるトレース埋め込み情報の構成の一例を図6に示した。ただし、本発明において変更履歴情報読込部によって抽出される情報の構成を限定するものではない。
また、本実施の形態において、実行結果解析部がプログラム実行装置から取得する各バージョンの実行結果およびトレース情報の一例を図12および図13に示した。ただし、本発明において用いられる実行結果およびトレース情報の構成を限定するものではない。
また、本実施の形態において、図12〜図13には、トレース出力される情報およびデバッグ候補の一例として、1つの関数につき1つの変数を示した。ただし、本発明において、トレース出力される情報およびデバッグ候補となる関数ごとの変数の数を限定するものではない。
また、本実施の形態において、図12〜図14に示したように、実行結果解析部は、変更履歴情報読込部によって特定された関数および抽出された変数を全て出力する例を示した。これに限らず、実行結果解析部は、変更履歴情報読込部によって特定された関数および抽出された変数のうち、所定条件を満たす(例えば、付与した優先順位が閾値以上である等の)関数および変数を、デバッグ候補として出力してもよい。
また、本実施の形態において、実行結果解析部が、改修された各関数における各変数に優先順位を付与する際の判定基準として、次の基準を例示した。すなわち、トレース処理による変数値の出力の有無、変数値の変動の有無、および、変数値の変動したバージョンが実行結果の変動したバージョンと一致するか否かに基づく判定基準である。ただし、本発明において、実行結果解析部は、実行結果の変動推移およびトレース情報の変動推移に基づくその他の基準を用いて、該当する変数に優先順位を付与してもよい。
また、本実施の形態において、実行結果解析部が、0〜3までの4段階の優先順位を付与する例を中心に説明した。ただし、本発明において付与される優先順位の段階数を限定するものではない。
また、本実施の形態において、実行結果解析部によって出力される情報の一例を図14に示した。ただし、本発明において、実行結果解析部によって出力される情報の構成およびレイアウトを限定するものではない。
また、上述した本発明の各実施の形態において、デバッグ支援装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。ただし、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、デバッグ支援装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したデバッグ支援装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておく。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。