(57)【特許請求の範囲】
【請求項１】
プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込部と、
前記変更履歴情報読込部によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込み部と、
プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析部と、
を備えたデバッグ支援装置。
【請求項２】
前記実行結果解析部は、前記実行結果および前記トレース情報の変動推移に基づいて、前記デバッグ候補となる関数および変数に優先順位を付与し、付与した優先順位を表す情報をさらに出力することを特徴とする請求項１に記載のデバッグ支援装置。
【請求項３】
前記変更履歴情報読込部は、前記プログラムの各バージョンについて更新を行った更新者を表す情報をさらに取得し、
前記実行結果解析部は、前記各バージョンの更新者を表す情報をさらに出力することを特徴とする請求項１または請求項２に記載のデバッグ支援装置。
【請求項４】
前記変更履歴情報を格納した変更履歴情報格納装置と、
前記デバッグソースコードを実行するプログラム実行装置と、
請求項１から請求項３のいずれか１項に記載のデバッグ支援装置と、
を備えたデバッグ支援システム。
【請求項５】
プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出し、
抽出した変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成し、
プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する、デバッグ支援方法。
【請求項６】
プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込ステップと、
前記変更履歴情報読込ステップで抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込みステップと、
プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析ステップと、
をコンピュータ装置に実行させるデバッグ支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、改修されたコンピュータ・プログラムのデバッグを支援する技術に関する。
【背景技術】
【０００２】
正常に稼働するコンピュータ・プログラムを改修する際には、改修したプログラムロジックの正当性を検証する必要がある。このような検証作業は、リグレッションテストと呼ばれる。リグレッションテストは、プログラムロジックの改修によって、改修していないプログラムロジックに影響を与えていないことを検証するテストである。リグレッションテストを確実に行うことは、システムの品質を維持する上で重要である。
【０００３】
しかしながら、リグレッションテストの結果、改修したプログラムロジックに誤りがあると判明した場合、プログラム開発担当者は、経験則を元に、誤りのある改修箇所を推測する。このため、誤りのある改修箇所の特定は、プログラム開発担当者の熟練度に依存する部分が大きい。推測が誤っている場合、誤りのある改修箇所が特定されるまでに、多くの時間が必要となる。
【０００４】
さらに、分散開発が行われる大規模開発等では、プログラムソースの改修も、複数人によって行われることが多い。この場合、複数人によって実施された改修内容の中から、誤りのある改修箇所を特定する必要がある。そのため、プログラム開発担当者は、誤りのある改修箇所の推測するために、担当外のプログラムソースも確認する必要がある。このように、大規模開発では、誤りのある改修箇所の特定作業は、さらに複雑となり、多くの時間を要している。
【０００５】
このような誤りのある改修箇所の特定を支援する関連技術が、特許文献１に記載されている。この関連技術は、プログラムソースと実行結果とを対にしてリポジトリで管理する。そして、この関連技術は、実行結果に差異が発生した場合、正しい実行結果と対になるプログラムソースと、誤りのある実行結果と対になるプログラムソースとの差分を出力する。ユーザは、出力された差分の中から、誤りのある改修箇所を推定することができる。
【０００６】
また、誤りのある改修箇所の特定を支援する他の関連技術が、特許文献２に記載されている。この関連技術は、プログラムのソースコードの変更履歴を記憶しておく。また、この関連技術は、プログラムの実行ログを、関数単位で記録する。そして、この関連技術は、プログラムの異常動作時の実行ログに記録された関数のうち、一番最近の改修で変更された関数を、ソースコードの変更履歴に基づいて特定する。そして、この関連技術は、あらかじめ定めておいたデバッグ対象特定ルールに基づいて、変更された関数と、変更された関数に関連のある関数とを、デバッグ対象箇所候補リストとして、優先順位をつけて出力する。これにより、ユーザは、デバッグ対象箇所の関数を優先順位の順に確認し、誤りのある改修箇所を推定することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−４２５５号公報
【特許文献２】特開２００９−１０４２５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、リグレッションテストにおいて検出されたプログラムロジックの誤りは、いわゆるデグレードバグである。デグレードバグは、設計段階で実施する影響分析の不足により、内部データが想定外の値に変更されたことが要因であることが多い。デグレードバグが検出された場合、設計工程に遡り、影響分析を再実施すべき当該関数および内部データを洗い出す作業が必要となる。
【０００９】
しかしながら、特許文献１〜特許文献２に記載された関連技術には、以下の課題がある。
【００１０】
特許文献１に記載された関連技術は、差分を提示することにより、誤りのある箇所を推測する範囲を若干狭めている。しかしながら、提示される差分には、実行結果に影響を与えない改修箇所も含まれている。このため、ユーザは、提示された差分の中から、誤りのある改修箇所、影響分析を実施すべき関数、および、内部データ情報を、プログラム開発担当者の経験則で推測して特定する必要がある。
【００１１】
また、特許文献２に記載された関連技術は、デバッグ対象箇所の関数に優先順位付けを行うので、実行結果に影響を与えた可能性のある関数を絞り込むことはできる。しかしながら、ユーザは、誤りが生じている可能性のある内部データ情報については、プログラム開発担当者の経験則で推測して特定する必要がある。
【００１２】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援する技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明のデバッグ支援装置は、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込部と、前記変更履歴情報読込部によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込み部と、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析部と、を備える。
【００１４】
また、本発明のデバッグ支援システムは、前記変更履歴情報を格納した変更履歴情報格納装置と、前記デバッグソースコードを実行するプログラム実行装置と、上述のデバッグ支援装置と、を備える。
【００１５】
また、本発明のデバッグ支援方法は、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出し、抽出した変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成し、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する。
【００１６】
また、本発明のデバッグ支援プログラムは、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込ステップと、前記変更履歴情報読込ステップで抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込みステップと、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１７】
本発明は、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援する技術を提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態としてのデバッグ支援システムの構成を示すブロック図である。
【図２】本発明の第１の実施の形態としてのデバッグ支援システムのハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態としてのデバッグ支援システムの動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としてのデバッグ支援システムの構成を示すブロック図である。
【図５】本発明の第２の実施の形態における変更履歴情報の構成の一例を示す図である。
【図６】本発明の第２の実施の形態におけるトレース埋め込み情報の構成の一例を示す図である。
【図７】本発明の第２の実施の形態としてのデバッグ支援システムの動作の概略を説明するフローチャートである。
【図８】本発明の第２の実施の形態としてのデバッグ支援システムのトレース処理埋め込み動作の詳細を説明するフローチャートである。
【図９】本発明の第２の実施の形態においてトレース処理が埋め込まれたデバッグソースコードの一例を示す図である。
【図１０】本発明の第２の実施の形態としてのデバッグ支援システムの実行結果解析動作の詳細を説明するフローチャートである。
【図１１】本発明の第２の実施の形態としてのデバッグ支援システムの優先順位付与動作の一例を説明するフローチャートである。
【図１２】本発明の第２の実施の形態における各バージョンのデバッグソースコードの実行結果の一例を示す図である。
【図１３】本発明の第２の実施の形態における各バージョンのデバッグソースコードの実行により出力されるトレース情報の一例を示す図である。
【図１４】本発明の第２の実施の形態において出力される解析結果の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２０】
（第１の実施の形態）
本発明の第１の実施の形態としてのデバッグ支援システム１の機能ブロック構成を図１に示す。図１において、デバッグ支援システム１は、デバッグ支援装置１０と、変更履歴情報格納装置８０と、プログラム実行装置９０とを備える。また、デバッグ支援装置１０は、変更履歴情報読込部１１と、トレース処理埋め込み部１２と、実行結果解析部１３とを備える。また、デバッグ支援装置１０は、変更履歴情報格納装置８０およびプログラム実行装置９０と、それぞれ通信可能に接続される。
【００２１】
ここで、デバッグ支援システム１を構成する各装置は、図２に示すようなハードウェア要素によって構成可能である。図２において、デバッグ支援装置１０は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、出力装置１００３、入力装置１００４、および、ネットワークインタフェース１００５を含むコンピュータ装置によって構成可能である。メモリ１００２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等によって構成される。メモリ１００２には、コンピュータ装置をデバッグ支援装置１０として機能させるコンピュータ・プログラムが格納される。出力装置１００３は、ディスプレイ装置やプリンタ等のように、情報を出力する装置によって構成される。入力装置１００４は、キーボードやマウス等のように、ユーザ操作の入力を受け付ける装置によって構成される。ネットワークインタフェース１００５は、ネットワークに接続するインタフェースである。デバッグ支援装置１０の各機能ブロックは、メモリ１００２に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するＣＰＵ１００１によって構成される。
【００２２】
また、図２において、変更履歴情報格納装置８０は、ＣＰＵ８００１、メモリ８００２、および、ネットワークインタフェース８００５を含むコンピュータ装置によって構成可能である。メモリ８００２は、ＲＡＭ、ＲＯＭ、補助記憶装置（ハードディスク等）等によって構成される。メモリ８００２には、コンピュータ装置を変更履歴情報格納装置８０として機能させるコンピュータ・プログラムが格納される。ネットワークインタフェース８００５は、ネットワークに接続するインタフェースである。ＣＰＵ８００１は、メモリ８００２に格納されたコンピュータ・プログラムを読み込んで実行し各部を制御する。
【００２３】
また、図２において、プログラム実行装置９０は、ＣＰＵ９００１、メモリ９００２、および、ネットワークインタフェース９００５を含むコンピュータ装置によって構成可能である。メモリ９００２は、ＲＡＭ、ＲＯＭ、補助記憶装置（ハードディスク等）等によって構成される。メモリ９００２には、コンピュータ装置をプログラム実行装置９０として機能させるコンピュータ・プログラムが格納される。ネットワークインタフェース９００５は、ネットワークに接続するインタフェースである。ＣＰＵ９００１は、メモリ９００２に格納されたコンピュータ・プログラムを読み込んで実行し各部を制御する。
【００２４】
なお、デバッグ支援システム１を構成する各装置のハードウェア構成は、上述の構成に限定されない。
【００２５】
変更履歴情報格納装置８０は、変更履歴情報を格納している。変更履歴情報とは、コンピュータ装置に実行させるためのプログラムの各バージョンについて、更新前のバージョンに対する変更差分を表す情報である。例えば、変更履歴情報格納装置８０は、プログラムソースコードのバージョン管理を行う一般的な構成管理ツールによって構成されていてもよい。
【００２６】
プログラム実行装置９０は、対象となるプログラム言語のソースコードを実行する装置である。なお、翻訳が必要なプログラム言語の場合、プログラム実行装置９０は、ソースコードを翻訳して実行可能プログラムを生成し、生成した実行可能プログラムを実行すればよい。
【００２７】
デバッグ支援装置１０の変更履歴情報読込部１１は、変更履歴情報格納装置８０に格納された変更履歴情報を読み込む。そして、変更履歴情報読込部１１は、上述した変更差分に基づいて、プログラム中で改修された関数を特定する。例えば、変更履歴情報読込部１１は、最終的に正常であることが確認されているバージョンに対して、少なくともいずれかのその後のバージョンにおいて改修されている関数を特定すればよい。そして、変更履歴情報読込部１１は、特定した関数において、その関数の外部に影響を与える変数を抽出する。
【００２８】
なお、変更履歴情報読込部１１は、変更履歴情報格納装置８０に変更履歴情報が格納されている各バージョンのうち、解析対象として指定される複数のバージョンについて、改修された関数の特定および変数の抽出を行ってもよい。そのような複数のバージョンとは、最終的に正常であることが確認されているバージョンを含み、そのバージョン以降に改修された各バージョンを含んでいてもよい。この場合、解析対象となる複数のバージョンを指定する情報は、入力装置１００４を介して入力されてもよい。
【００２９】
トレース処理埋め込み部１２は、変更履歴情報読込部１１によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成する。具体的には、トレース処理埋め込み部１２は、各バージョンのプログラムのソースコードにおいて、変更履歴情報読込部１１によって特定された関数の内部に、抽出された変数の値をその関数名と共に出力するトレース処理の記述を埋め込めばよい。
【００３０】
実行結果解析部１３は、プログラム実行装置９０に、各バージョンのデバッグソースコードを実行させる。そして、実行結果解析部１３は、各バージョンのデバッグソースコードの実行結果、および、トレース処理により出力されたトレース情報の変動推移を解析する。実行結果は、例えば、実行結果が正常であるか異常であるかを表す。また、トレース情報は、各バージョンについて、埋め込まれたトレース処理により出力される変数の値および関数名を含む。そして、実行結果解析部１３は、解析結果に基づいて、デバッグ候補となる関数および変数を表す情報を、実行結果およびトレース情報の変動推移を表す情報と共に出力する。例えば、実行結果解析部１３は、変更履歴情報読込部１１によって特定された関数および抽出された変数を全てデバッグ候補として、変動推移を表す情報と共に出力してもよい。あるいは、実行結果解析部１３は、変更履歴情報読込部１１によって特定された関数および抽出された変数の中から、実行結果の変動推移とトレース情報の変動推移との関連性に基づいて、デバッグ候補となる関数および変数を選択してもよい。そして、実行結果解析部１３は、デバッグ候補として選択した関数および変数を表す情報を、変動推移を表す情報と共に出力してもよい。
【００３１】
なお、実行結果解析部１３は、上述の情報を、出力装置１００３に出力してもよい。あるいは、実行結果解析部１３は、上述の情報を、メモリ１００２等に出力してもよい。あるいは、実行結果解析部１３は、上述の情報を、ネットワークインタフェース１００５を介して接続される他の装置に対して出力してもよい。
【００３２】
以上のように構成されたデバッグ支援システム１の動作について、図３を参照して説明する。
【００３３】
まず、変更履歴情報読込部１１は、変更履歴情報格納装置８０に格納された変更履歴情報を読み込んで、改修された関数を特定する。そして、変更履歴情報読込部１１は、それらの関数において外部に影響を与える変数を抽出する（ステップＳ１）。
【００３４】
次に、トレース処理埋め込み部１２は、特定された関数において抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのソースコードに埋め込んで、デバッグソースコードを生成する（ステップＳ２）。
【００３５】
次に、実行結果解析部１３は、ステップＳ２で生成された各バージョンのデバッグソースコードを、プログラム実行装置９０に出力する。これにより、プログラム実行装置９０は、各バージョンのデバッグソースコードを実行する（ステップＳ３）。
【００３６】
次に、実行結果解析部１３は、各バージョンのデバッグソースコードの実行結果の変動推移、および、トレース処理により出力されたトレース情報の変動推移を解析する（ステップＳ４）。
【００３７】
次に、実行結果解析部１３は、ステップＳ４の解析結果に基づきデバッグ候補となる関数および変数を表す情報を、実行結果およびトレース情報の変動推移を表す情報と共に出力する（ステップＳ５）。
【００３８】
以上で、デバッグ支援システム１は、動作を終了する。
【００３９】
次に、本発明の第１の実施の形態の効果について述べる。
【００４０】
本発明の第１の実施の形態としてのデバッグ支援システムは、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援することができる。
【００４１】
その理由について述べる。本実施の形態では、デバッグ支援装置の変更履歴情報読込部が、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報を変更履歴情報格納装置から読み込む。そして、変更履歴情報読込部が、変更差分に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する。そして、トレース処理埋め込み部が、特定された関数において抽出された変数の値を関数名と共に出力するトレース処理の記述を、各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成する。そして、プログラム実行装置が各バージョンのデバッグソースコードを実行する。そして、デバッグ支援装置の実行結果解析部が、各バージョンのデバッグソースコードの実行結果の変動推移およびトレース処理により出力されたトレース情報の変動推移を解析する。そして、実行結果解析部が、解析結果に基づきデバッグ候補となる関数および変数を、実行結果およびトレース情報の変動推移と共に出力するからである。
【００４２】
これにより、本実施の形態を利用するプログラム開発担当者は、リグレッションテストの結果、実行結果に誤りがあると判明した際、実行結果の変動推移およびトレース情報の変動推移を照合することができる。その結果、プログラム開発担当者は、経験則に頼ることなく、実行結果が正常から異常に変化したバージョンにおいて、変数の値が変動している関数を中心に、誤りのある箇所の候補を絞り込むことができる。また、プログラム開発担当者は、そのような関数において用いられている内部データの変動推移を容易に把握できる。また、プログラム開発担当者は、経験則に頼ることなく、そのような関数を中心に、影響分析を再実施すべき関数の候補を絞り込むことができる。
【００４３】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００４４】
まず、本発明の第２の実施の形態としてのデバッグ支援システム２の構成を図４に示す。図４において、デバッグ支援システム２は、本発明の第１の実施の形態としてのデバッグ支援システム１に対して、デバッグ支援装置１０に替えてデバッグ支援装置２０と、変更履歴情報格納装置８０に替えて変更履歴情報格納装置８１とを備える点が異なる。デバッグ支援装置２０は、変更履歴情報読込部２１と、トレース処理埋め込み部２２と、実行結果解析部２３とを備える。
【００４５】
変更履歴情報格納装置８１は、変更履歴情報として、コンピュータ装置に実行させるためのプログラムの各バージョンについて、更新前のバージョンに対する変更差分を表す情報に加えて、そのバージョンを更新した担当者（更新者）を表す情報を記憶している。
【００４６】
変更履歴情報格納装置８１に格納される変更履歴情報の構成の一例を図５に示す。図５では、変更履歴情報は、更新者、バージョン、更新行位置、更新前ソースおよび更新後ソースをそれぞれ表す情報からなる。更新者は、更新者の名前やＩＤ等、そのバージョンの更新を担当した担当者や担当グループ等を識別可能な情報を表す。バージョンは、更新されたソースコードに付与されたバージョンを表す。更新行位置は、更新されたソースコードにおいて、更新前のソースコードに対して更新のある行番号を表す。更新前ソースは、更新前のソースコードを表す。更新後ソースは、更新後のソースコードを表す。
【００４７】
デバッグ支援装置２０の変更履歴情報読込部２１は、本発明の第１の実施の形態における変更履歴情報読込部１１と略同様に構成されるが、以下の詳細な点が異なる。
【００４８】
詳細には、変更履歴情報読込部２１は、改修された関数およびその関数において外部に影響を与える変数として、改修された関数のパラメータ、戻り値、関数内部で使用されるグローバル変数を抽出する。
【００４９】
例えば、変更履歴情報読込部２１は、抽出した変数について、トレース埋め込み情報を生成してもよい。トレース埋め込み情報の構成の一例を図６に示す。図６において、トレース埋め込み情報は、関数名、パラメータ名、パラメータ属性、戻り値名、戻り値属性、グローバル変数名およびグローバル変数属性をそれぞれ表す情報からなる。トレース埋め込み情報に、各変数について属性を表す情報が含まれているのは、トレース出力処理において、出力対象の属性を指定するためである。ただし、属性を指定しなくても出力処理が可能なプログラミング言語であれば、必ずしも属性は抽出されなくてもよい。
【００５０】
また、変更履歴情報読込部２１は、変更履歴情報から、各バージョンの更新者を表す情報を読み込む。読み込まれた更新者を表す情報は、後述の実行結果解析部２３によって利用される。
【００５１】
トレース処理埋め込み部２２は、本発明の第１の実施の形態におけるトレース処理埋め込み部１２と略同様に構成されるが、以下の詳細な点が異なる。
【００５２】
詳細には、トレース処理埋め込み部２２は、各バージョンのプログラムのソースコードに対して、上述のトレース埋め込み情報に基づいて、改修された各関数におけるパラメータ、戻り値、グローバル変数を、関数名と共に出力するトレース処理を埋め込む。なお、トレース処理によって出力される情報の形式は、後述の実行結果解析部２３によって解析可能に定められた形式であるものとする。また、トレース処理埋め込み部２２は、改修された関数において、１つの変数について少なくとも１つのトレース処理を埋め込む。例えば、トレース処理埋め込み部２２は、パラメータのトレース処理を、改修された関数の開始部分（ローカル変数宣言の直後等）に埋め込んでもよい。また、トレース処理埋め込み部２２は、戻り値のトレース処理を、改修された関数の終了部分（戻り値の返却処理の直前等）に埋め込んでもよい。また、トレース処理埋め込み部２２は、グローバル変数のトレース処理を、そのグローバル変数に関する更新処理の直後に埋め込んでもよい。なお、トレース処理埋め込み部２２は、改修された関数において、必要に応じて、１つの変数について複数の箇所にトレース処理を埋め込んでもよい。例えば、トレース処理埋め込み部２２は、該当する変数に関する更新処理の記述箇所毎に、その直後にトレース処理を埋め込んでもよい。
【００５３】
実行結果解析部２３は、本発明の第１の実施の形態における実行結果解析部１３と略同様に構成されるが、以下の詳細な点が異なる。
【００５４】
詳細には、実行結果解析部２３は、各バージョンのデバッグソースコードの実行結果の変動推移およびトレース情報の変動推移に基づいて、デバッグ候補となる関数および変数に優先順位を付与する。
【００５５】
例えば、実行結果解析部２３は、実行結果の変動推移と、トレース情報の変動推移との関連性に基づいて、トレース情報を出力した関数および変数の組合せのそれぞれに優先順位を付与する。具体的には、実行結果解析部２３は、変数の値が全バージョンにわたって出力されない（値が設定されていない）場合、その変数および関数の組合せに対して、最も低い優先順位（例えば、０）を付与してもよい。また、例えば、実行結果解析部２３は、実行結果が変動しているにも関わらず、変数の値が全バージョンにわたって変動しない場合、その変数および関数の組合せに、次に低い優先順位（例えば、１）を付与してもよい。また、例えば、実行結果解析部２３は、実行結果が変動したバージョンと、変数の値が変動したバージョンとが一致する場合、その変数および関数の組合せに、最も高い優先順位（例えば、３）を付与してもよい。また、例えば、実行結果解析部２３は、実行結果が変動したバージョンと、変数の値が変動したバージョンとが一致しない場合、その変数および関数の組合せに、次に高い優先順位（例えば、２）を付与してもよい。
【００５６】
また、実行結果解析部２３は、デバッグ候補となる関数および変数を表す情報と、実行結果およびトレース情報の変動推移を表す情報とに加えて、付与した優先順位と、各バージョンの更新者とを表す情報を出力する。
【００５７】
以上のように構成されたデバッグ支援システム２の動作について、図面を参照して説明する。まず、デバッグ支援システム２の動作の概略を、図７に示す。
【００５８】
図７では、まず、変更履歴情報読込部２１は、変更履歴情報格納装置８１に格納された変更履歴情報を読み込んで、改修された関数を特定する。そして、変更履歴情報読込部２１は、特定した各関数について、パラメータ、戻り値、関数内部で使用されるグローバル変数を抽出し、トレース埋め込み情報を生成する（ステップＳ１１）。
【００５９】
次に、変更履歴情報読込部２１は、変更履歴情報格納装置８１から、各バージョンの更新者を読み込む（ステップＳ１２）。
【００６０】
次に、トレース処理埋め込み部２２は、トレース埋め込み情報に基づき、トレース処理の記述を各バージョンのソースコードに埋め込んで、デバッグソースコードを生成する（ステップＳ１３）。このステップの詳細については後述する。
【００６１】
次に、実行結果解析部２３は、ステップＳ１３で生成された各バージョンのデバッグソースコードを、プログラム実行装置９０に出力する。これにより、プログラム実行装置９０は、各バージョンのデバッグソースコードを実行する（ステップＳ３）。
【００６２】
次に、実行結果解析部２３は、各バージョンの実行結果の変動推移、および、トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補の関数および変数の組合せに優先順位を付与する（ステップＳ１４）。このステップの詳細については後述する。
【００６３】
次に、実行結果解析部２３は、デバッグ候補となる関数および変数と、その優先順位と、実行結果およびトレース情報の変動推移と、各バージョンの更新者とをそれぞれ表す情報を出力する（ステップＳ１５）。
【００６４】
以上で、デバッグ支援システム２は、動作を終了する。
【００６５】
次に、ステップＳ１３におけるトレース処理埋め込み動作の詳細を図８に示す。
【００６６】
図８では、まず、トレース処理埋め込み部２２は、ステップＳ１１で生成されたトレース埋め込み情報を読み込む（ステップＳ２１）。前述したように、トレース埋め込み情報は、改修された各関数におけるパラメータ、戻り値、グローバル変数のそれぞれについて生成されている。
【００６７】
次に、トレース処理埋め込み部２２は、各バージョンのソースコードについて、トレース埋め込み情報にしたがって、改修された各関数に、パラメータ、戻り値、グローバル変数のそれぞれのトレース処理を埋め込む（ステップＳ２２）。
【００６８】
以上で、トレース処理埋め込み部２２は、トレース処理埋め込み動作を終了する。
【００６９】
このようなトレース処理埋め込み動作によって生成されたあるバージョンのデバッグソースコードの一例を、図９に示す。図９において、改修された関数名は「subproc」である。また、下線部は、埋め込まれたトレース処理を表す。図９に示すように、トレース処理埋め込み部２２は、関数「subproc」の記述において、関数名「subproc」と共に「パラメータ「param1」、「param2」の値を出力するトレース処理を、冒頭のローカル変数の宣言・初期化の直後に埋め込んでいる。また、トレース処理埋め込み部２２は、関数「subproc」の記述において、関数名「subproc」と共にグローバル変数「gtr」の値を出力するトレース処理を、グローバル変数「gtr」に関する更新処理の直後に埋め込んでいる。また、トレース処理埋め込み部２２は、関数「subproc」の記述において、関数名「subproc」と共に戻り値「rtn」の値を出力するトレース処理を、戻り値「rtn」を返却する処理の直前に埋め込んでいる。
【００７０】
次に、ステップＳ１４における実行結果解析動作の詳細を図１０に示す。
【００７１】
図１０では、まず、実行結果解析部２３は、各バージョンについて、プログラム実行装置９０による実行結果および出力されたトレース情報を取得する（ステップＳ３１）。
【００７２】
次に、実行結果解析部２３は、トレース情報の示す各変数について、変数の値の変動推移と、実行結果の変動推移との関連性に基づいて、優先順位を付与する（ステップＳ３２）。
【００７３】
以上で、実行結果解析部２３は、実行結果解析動作を終了する。
【００７４】
ここで、ステップＳ３２において、各変数について優先順位を付与する処理の一例を、図１１を参照して説明する。
【００７５】
ここでは、まず、実行結果解析部２３は、この変数についてトレース処理による値の出力があるか否かを判断する（ステップＳ４１）。
【００７６】
ここで、全バージョンにわたってこの変数の値が出力されていない場合、実行結果解析部２３は、この変数に、優先順位として「０」を付与する（ステップＳ４２）。
【００７７】
一方、少なくともいずれかのバージョンでこの変数の値が出力されている場合、実行結果解析部２３は、この変数についてトレース処理により出力された値がバージョンによって変動しているか否かを判断する（ステップＳ４３）。
【００７８】
ここで、全バージョンにわたってこの変数の値に変動がない場合、実行結果解析部２３は、この変数に、優先順位として「１」を付与する（ステップＳ４４）。
【００７９】
一方、この変数の値が変動している場合、実行結果解析部２３は、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致しているか否かを判断する（ステップＳ４５）。
【００８０】
ここで、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致していない場合、実行結果解析部２３は、この変数に、優先順位として「２」を付与する（ステップＳ４６）。
【００８１】
一方、この変数の値が変動したバージョンが、実行結果が変動したバージョンと一致している場合、実行結果解析部２３は、この変数に、優先順位として「３」を付与する（ステップＳ４７）。
【００８２】
以上で、優先度を付与する処理の一例の説明を終了する。
【００８３】
なお、この例では、優先順位は、値が大きいほどデバッグ候補としての優先順位が高いことを示す。また、優先順位「０」は、デバッグ候補から除外可能であることを示すと定めておいてもよい。
【００８４】
このような実行結果解析動作の具体例について説明する。
【００８５】
ここでは、まず、ステップＳ３１において、実行結果解析部２３が、プログラム実行装置９０から取得した各バージョンの実行結果の一例を図１２に示す。図１２は、バージョン「ＲＥＶ１０１」、「ＲＥＶ１０２」、「ＲＥＶ１０３」の各デバッグソースコードの実行結果が、それぞれ「ＯＫ」（正常）であったことを表している。また、図１２は、バージョン「ＲＥＶ１０４」、「ＲＥＶ１０５」の各デバッグソースコードの実行結果が、それぞれ「ＮＧ」（異常）であったことを表している。
【００８６】
次に、ステップＳ３１において、実行結果解析部２３が、プログラム実行装置９０から取得した各バージョンのトレース情報の一例を図１３に示す。例えば、図１３の１行目は、関数１の変数１については、バージョン「ＲＥＶ１０１」〜「ＲＥＶ１０５」にわたって、トレース処理により出力された値が無かった（変数１に値が設定されなかった）ことを表している。
【００８７】
図１２および図１３に示した実行結果およびトレース情報が取得されているとき、実行結果解析部２３は、次のように優先順位を付与する。
【００８８】
具体的には、まず、実行結果解析部２３は、実行結果が「ＯＫ」から「ＮＧ」に変動したのは、バージョン「ＲＥＶ１０４」であると特定する。つまり、バージョン「ＲＥＶ１０４」以降で障害が発生している。
【００８９】
ここで、図１３のトレース情報の１行目が示す関数１の変数１は、全てのバージョンにわたって出力がない（ステップＳ４１でＮｏ）。そこで、実行結果解析部２３は、この変数について、バージョン「ＲＥＶ１０４」以降の障害に影響している可能性はないと判断する。したがって、実行結果解析部２３は、関数１の変数１について、優先順位「０」を付与する（ステップＳ４２）。
【００９０】
また、２行目が示す関数２の変数２は、全てのバージョンにわたって値が１であり変動していない（ステップＳ４３でＮｏ）。そこで、実行結果解析部２３は、この変数について、バージョン「ＲＥＶ１０４」以降の障害に影響している可能性は低いとみなす。したがって、実行結果解析部２３は、関数２の変数２について、優先順位「１」を付与する（ステップＳ４４）。
【００９１】
また、３〜５行目が示す関数３の変数３、関数４の変数４、関数５の変数４のそれぞれは、変数の値が変動したバージョンが「ＲＥＶ１０３」であり、実行結果が変動したバージョン「ＲＥＶ１０４」と一致していない（ステップＳ４５でＮｏ）。そこで、実行結果解析部２３は、これらの変数について、バージョン「ＲＥＶ１０４」以降の障害に影響している可能性が中程度であるとみなす。したがって、実行結果解析部２３は、これらの変数について、優先順位「２」を付与する（ステップＳ４６）。
【００９２】
また、６〜８行目が示す関数６の変数６、関数７の変数７、関数８の変数８のそれぞれは、変数の値が変動したバージョンが「ＲＥＶ１０４」であり、実行結果が変動したバージョン「ＲＥＶ１０４」と一致とする（ステップＳ４５でＹｅｓ）。そこで、実行結果解析部２３は、これらの変数について、バージョン「ＲＥＶ１０４」以降の障害に影響している可能性が高いとみなす。したがって、実行結果解析部２３は、これらの変数について、優先順位「３」を付与する（ステップＳ４７）。
【００９３】
このように優先順位が付与された場合、ステップＳ１５において出力される情報の一例を、図１４に示す。図１４に示すように、実行結果解析部２３は、トレース処理により出力した関数および変数の各組合せについて、その変動推移と共に、優先順位を出力する。また、実行結果解析部２３は、各変数の値の変動推移と比較可能に、実行結果の変動推移を併せて出力する。また、実行結果解析部２３は、各バージョンの更新者を表す情報を、併せて出力する。
【００９４】
以上で、デバッグ支援システム２の動作の具体例の説明を終了する。
【００９５】
次に、本発明の第２の実施の形態の効果について述べる。
【００９６】
本発明の第２の実施の形態としてのデバッグ支援システムは、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく、さらに効率的に絞り込むことを支援することができる。
【００９７】
その理由について述べる。本実施の形態は、本発明の第１の実施の形態と同様の構成に加えて、実行結果解析部が、実行結果の変動推移およびトレース情報の変動推移に基づいて、改修された関数における外部に影響のある変数に優先順位を付与して出力するからである。例えば、実行結果解析部は、実行結果の変動推移に関わらずトレース情報の出力が無い変数については、障害に影響する可能性がないことを表す優先順位を付与するからである。また、例えば、実行結果解析部は、実行結果の変動推移に関わらずトレース情報の出力に変動がない変数については、障害に影響する可能性が低いことを示す優先順位を付与するからである。また、例えば、実行結果解析部は、実行結果の変動推移とトレース情報の出力の変動推移が一致しない変数については、障害に影響する可能性が中程度であることを示す優先順位を付与するからである。また、例えば、実行結果の変動推移とトレース情報の出力の変動推移が一致する変数については、障害に影響する可能性が高いことを示す優先順位を付与するからである。
【００９８】
そして、実行結果解析部が、改修された関数において外部に影響のある変数について、その値の変動推移を優先順位とともに出力するからである。また、実行結果解析部が、あわせて、実行結果の変動推移と、各バージョンの更新者とを出力するからである。
【００９９】
これにより、プログラム開発担当者は、経験則に頼ることなく、優先順位の高い関数および変数から順に、誤りのある箇所の候補を、内部データの変動推移を確認しながら効率的に確認することができる。また、プログラム開発担当者は、経験則に頼ることなく、そのような優先順位のより高い関数から順に、影響分析を再実施すべき関数の候補を絞り込むことができる。また、プログラム設計担当者は、そのような関数における変数の変動推移を確認することで、設計段階で想定した影響分析に誤りがないかの再点検が出来る。また、プログラム開発担当者は、誤りのある箇所の候補となる関数において、変数の値が変動したバージョンを更新したプログラム開発者を絞り込むことができる。
【０１００】
なお、本実施の形態において、変更履歴情報の構成の一例を図５に示したが、本発明における変更履歴情報の構成を限定するものではない。
【０１０１】
また、本実施の形態において、変更履歴情報読込部によって生成されるトレース埋め込み情報の構成の一例を図６に示した。ただし、本発明において変更履歴情報読込部によって抽出される情報の構成を限定するものではない。
【０１０２】
また、本実施の形態において、実行結果解析部がプログラム実行装置から取得する各バージョンの実行結果およびトレース情報の一例を図１２および図１３に示した。ただし、本発明において用いられる実行結果およびトレース情報の構成を限定するものではない。
【０１０３】
また、本実施の形態において、図１２〜図１３には、トレース出力される情報およびデバッグ候補の一例として、１つの関数につき１つの変数を示した。ただし、本発明において、トレース出力される情報およびデバッグ候補となる関数ごとの変数の数を限定するものではない。
【０１０４】
また、本実施の形態において、図１２〜図１４に示したように、実行結果解析部は、変更履歴情報読込部によって特定された関数および抽出された変数を全て出力する例を示した。これに限らず、実行結果解析部は、変更履歴情報読込部によって特定された関数および抽出された変数のうち、所定条件を満たす（例えば、付与した優先順位が閾値以上である等の）関数および変数を、デバッグ候補として出力してもよい。
【０１０５】
また、本実施の形態において、実行結果解析部が、改修された各関数における各変数に優先順位を付与する際の判定基準として、次の基準を例示した。すなわち、トレース処理による変数値の出力の有無、変数値の変動の有無、および、変数値の変動したバージョンが実行結果の変動したバージョンと一致するか否かに基づく判定基準である。ただし、本発明において、実行結果解析部は、実行結果の変動推移およびトレース情報の変動推移に基づくその他の基準を用いて、該当する変数に優先順位を付与してもよい。
【０１０６】
また、本実施の形態において、実行結果解析部が、０〜３までの４段階の優先順位を付与する例を中心に説明した。ただし、本発明において付与される優先順位の段階数を限定するものではない。
【０１０７】
また、本実施の形態において、実行結果解析部によって出力される情報の一例を図１４に示した。ただし、本発明において、実行結果解析部によって出力される情報の構成およびレイアウトを限定するものではない。
【０１０８】
また、上述した本発明の各実施の形態において、デバッグ支援装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。ただし、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１０９】
また、上述した本発明の各実施の形態において、デバッグ支援装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０１１０】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したデバッグ支援装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１１１】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１１２】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０１１３】
１、２    デバッグ支援システム
１０、２０    デバッグ支援装置
１１、２１    変更履歴情報読込部
１２、２２    トレース処理埋め込み部
１３、２３    実行結果解析部
８０、８１    変更履歴情報格納装置
９０    プログラム実行装置
１００１、８００１、９００１    ＣＰＵ
１００２、８００２、９００２    メモリ
１００３    出力装置
１００４    入力装置
１００５、８００５、９００５    ネットワークインタフェース
【図１】
0006451417.tif 000002
【図２】
0006451417.tif 000003
【図３】
0006451417.tif 000004
【図４】
0006451417.tif 000005
【図５】
0006451417.tif 000006
【図６】
0006451417.tif 000007
【図７】
0006451417.tif 000008
【図８】
0006451417.tif 000009
【図９】
0006451417.tif 000010
【図１０】
0006451417.tif 000011
【図１１】
0006451417.tif 000012
【図１２】
0006451417.tif 000013
【図１３】
0006451417.tif 000014
【図１４】
0006451417.tif 000015