JP2016167180A - デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム - Google Patents

デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム Download PDF

Info

Publication number
JP2016167180A
JP2016167180A JP2015046692A JP2015046692A JP2016167180A JP 2016167180 A JP2016167180 A JP 2016167180A JP 2015046692 A JP2015046692 A JP 2015046692A JP 2015046692 A JP2015046692 A JP 2015046692A JP 2016167180 A JP2016167180 A JP 2016167180A
Authority
JP
Japan
Prior art keywords
version
program
function
execution result
debug
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015046692A
Other languages
English (en)
Other versions
JP6451417B2 (ja
Inventor
哲志 岩國
Tetsushi Iwakuni
哲志 岩國
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2015046692A priority Critical patent/JP6451417B2/ja
Publication of JP2016167180A publication Critical patent/JP2016167180A/ja
Application granted granted Critical
Publication of JP6451417B2 publication Critical patent/JP6451417B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、開発担当者の経験則に頼ることなく絞り込むことを支援する技術を提供すること。
【解決手段】変更履歴情報格納装置80に格納されたプログラムの各バージョンの変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込部11と、抽出された変数の値および関数名を出力するトレース処理の記述を、各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込み部12と、プログラム実行装置90に各バージョンのデバッグソースコードを実行させて、その実行結果および出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を変動推移を表す情報と共に出力する実行結果解析部13とを備える。
【選択図】図1

Description

本発明は、改修されたコンピュータ・プログラムのデバッグを支援する技術に関する。
正常に稼働するコンピュータ・プログラムを改修する際には、改修したプログラムロジックの正当性を検証する必要がある。このような検証作業は、リグレッションテストと呼ばれる。リグレッションテストは、プログラムロジックの改修によって、改修していないプログラムロジックに影響を与えていないことを検証するテストである。リグレッションテストを確実に行うことは、システムの品質を維持する上で重要である。
しかしながら、リグレッションテストの結果、改修したプログラムロジックに誤りがあると判明した場合、プログラム開発担当者は、経験則を元に、誤りのある改修箇所を推測する。このため、誤りのある改修箇所の特定は、プログラム開発担当者の熟練度に依存する部分が大きい。推測が誤っている場合、誤りのある改修箇所が特定されるまでに、多くの時間が必要となる。
さらに、分散開発が行われる大規模開発等では、プログラムソースの改修も、複数人によって行われることが多い。この場合、複数人によって実施された改修内容の中から、誤りのある改修箇所を特定する必要がある。そのため、プログラム開発担当者は、誤りのある改修箇所の推測するために、担当外のプログラムソースも確認する必要がある。このように、大規模開発では、誤りのある改修箇所の特定作業は、さらに複雑となり、多くの時間を要している。
このような誤りのある改修箇所の特定を支援する関連技術が、特許文献1に記載されている。この関連技術は、プログラムソースと実行結果とを対にしてリポジトリで管理する。そして、この関連技術は、実行結果に差異が発生した場合、正しい実行結果と対になるプログラムソースと、誤りのある実行結果と対になるプログラムソースとの差分を出力する。ユーザは、出力された差分の中から、誤りのある改修箇所を推定することができる。
また、誤りのある改修箇所の特定を支援する他の関連技術が、特許文献2に記載されている。この関連技術は、プログラムのソースコードの変更履歴を記憶しておく。また、この関連技術は、プログラムの実行ログを、関数単位で記録する。そして、この関連技術は、プログラムの異常動作時の実行ログに記録された関数のうち、一番最近の改修で変更された関数を、ソースコードの変更履歴に基づいて特定する。そして、この関連技術は、あらかじめ定めておいたデバッグ対象特定ルールに基づいて、変更された関数と、変更された関数に関連のある関数とを、デバッグ対象箇所候補リストとして、優先順位をつけて出力する。これにより、ユーザは、デバッグ対象箇所の関数を優先順位の順に確認し、誤りのある改修箇所を推定することができる。
特開2007−4255号公報 特開2009−104252号公報
ここで、リグレッションテストにおいて検出されたプログラムロジックの誤りは、いわゆるデグレードバグである。デグレードバグは、設計段階で実施する影響分析の不足により、内部データが想定外の値に変更されたことが要因であることが多い。デグレードバグが検出された場合、設計工程に遡り、影響分析を再実施すべき当該関数および内部データを洗い出す作業が必要となる。
しかしながら、特許文献1〜特許文献2に記載された関連技術には、以下の課題がある。
特許文献1に記載された関連技術は、差分を提示することにより、誤りのある箇所を推測する範囲を若干狭めている。しかしながら、提示される差分には、実行結果に影響を与えない改修箇所も含まれている。このため、ユーザは、提示された差分の中から、誤りのある改修箇所、影響分析を実施すべき関数、および、内部データ情報を、プログラム開発担当者の経験則で推測して特定する必要がある。
また、特許文献2に記載された関連技術は、デバッグ対象箇所の関数に優先順位付けを行うので、実行結果に影響を与えた可能性のある関数を絞り込むことはできる。しかしながら、ユーザは、誤りが生じている可能性のある内部データ情報については、プログラム開発担当者の経験則で推測して特定する必要がある。
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援する技術を提供することを目的とする。
本発明のデバッグ支援装置は、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込部と、前記変更履歴情報読込部によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込み部と、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析部と、を備える。
また、本発明のデバッグ支援システムは、前記変更履歴情報を格納した変更履歴情報格納装置と、前記デバッグソースコードを実行するプログラム実行装置と、上述のデバッグ支援装置と、を備える。
また、本発明のデバッグ支援方法は、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出し、抽出した変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成し、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する。
また、本発明のデバッグ支援プログラムは、プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込ステップと、前記変更履歴情報読込ステップで抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込みステップと、プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析ステップと、をコンピュータ装置に実行させる。
本発明は、プログラム改修による誤った実行結果に影響を与えた可能性のある関数および内部データ情報を、プログラム開発担当者の経験則に頼ることなく絞り込むことを支援する技術を提供することができる。
本発明の第1の実施の形態としてのデバッグ支援システムの構成を示すブロック図である。 本発明の第1の実施の形態としてのデバッグ支援システムのハードウェア構成の一例を示す図である。 本発明の第1の実施の形態としてのデバッグ支援システムの動作を説明するフローチャートである。 本発明の第2の実施の形態としてのデバッグ支援システムの構成を示すブロック図である。 本発明の第2の実施の形態における変更履歴情報の構成の一例を示す図である。 本発明の第2の実施の形態におけるトレース埋め込み情報の構成の一例を示す図である。 本発明の第2の実施の形態としてのデバッグ支援システムの動作の概略を説明するフローチャートである。 本発明の第2の実施の形態としてのデバッグ支援システムのトレース処理埋め込み動作の詳細を説明するフローチャートである。 本発明の第2の実施の形態においてトレース処理が埋め込まれたデバッグソースコードの一例を示す図である。 本発明の第2の実施の形態としてのデバッグ支援システムの実行結果解析動作の詳細を説明するフローチャートである。 本発明の第2の実施の形態としてのデバッグ支援システムの優先順位付与動作の一例を説明するフローチャートである。 本発明の第2の実施の形態における各バージョンのデバッグソースコードの実行結果の一例を示す図である。 本発明の第2の実施の形態における各バージョンのデバッグソースコードの実行により出力されるトレース情報の一例を示す図である。 本発明の第2の実施の形態において出力される解析結果の一例を示す図である。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第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が読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
1、2 デバッグ支援システム
10、20 デバッグ支援装置
11、21 変更履歴情報読込部
12、22 トレース処理埋め込み部
13、23 実行結果解析部
80、81 変更履歴情報格納装置
90 プログラム実行装置
1001、8001、9001 CPU
1002、8002、9002 メモリ
1003 出力装置
1004 入力装置
1005、8005、9005 ネットワークインタフェース

Claims (6)

  1. プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込部と、
    前記変更履歴情報読込部によって抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込み部と、
    プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析部と、
    を備えたデバッグ支援装置。
  2. 前記実行結果解析部は、前記実行結果および前記トレース情報の変動推移に基づいて、前記デバッグ候補となる関数および変数に優先順位を付与し、付与した優先順位を表す情報をさらに出力することを特徴とする請求項1に記載のデバッグ支援装置。
  3. 前記変更履歴情報読込部は、前記プログラムの各バージョンについて更新を行った更新者を表す情報をさらに取得し、
    前記実行結果解析部は、前記各バージョンの更新者を表す情報をさらに出力することを特徴とする請求項1または請求項2に記載のデバッグ支援装置。
  4. 前記変更履歴情報を格納した変更履歴情報格納装置と、
    前記デバッグソースコードを実行するプログラム実行装置と、
    請求項1から請求項3のいずれか1項に記載のデバッグ支援装置と、
    を備えたデバッグ支援システム。
  5. プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出し、
    抽出した変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成し、
    プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する、デバッグ支援方法。
  6. プログラムの各バージョンの更新前のバージョンに対する変更差分を表す変更履歴情報に基づいて、改修された関数を特定し、特定した関数において該関数外部に影響を与える変数を抽出する変更履歴情報読込ステップと、
    前記変更履歴情報読込ステップで抽出された変数の値を関数名と共に出力するトレース処理の記述を、前記各バージョンのプログラムのソースコードに埋め込んでデバッグソースコードを生成するトレース処理埋め込みステップと、
    プログラム実行装置に前記各バージョンのデバッグソースコードを実行させて、その実行結果および前記トレース処理により出力されたトレース情報の変動推移を解析することにより、デバッグ候補となる関数および変数を表す情報を前記変動推移を表す情報と共に出力する実行結果解析ステップと、
    をコンピュータ装置に実行させるデバッグ支援プログラム。
JP2015046692A 2015-03-10 2015-03-10 デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム Active JP6451417B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015046692A JP6451417B2 (ja) 2015-03-10 2015-03-10 デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015046692A JP6451417B2 (ja) 2015-03-10 2015-03-10 デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム

Publications (2)

Publication Number Publication Date
JP2016167180A true JP2016167180A (ja) 2016-09-15
JP6451417B2 JP6451417B2 (ja) 2019-01-16

Family

ID=56897793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015046692A Active JP6451417B2 (ja) 2015-03-10 2015-03-10 デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム

Country Status (1)

Country Link
JP (1) JP6451417B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019077738A1 (ja) * 2017-10-20 2019-04-25 三菱電機株式会社 データ検証装置、データ検証方法及びデータ検証プログラム
CN112860473A (zh) * 2021-04-27 2021-05-28 武汉深之度科技有限公司 程序运行错误时定位源代码的方法、装置及计算设备
CN113448866A (zh) * 2021-07-15 2021-09-28 杭州国芯科技股份有限公司 一种嵌入式软件开发辅助调试系统及调试方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015019504A1 (ja) * 2013-08-09 2015-02-12 富士通株式会社 検証方法、検証装置および検証プログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015019504A1 (ja) * 2013-08-09 2015-02-12 富士通株式会社 検証方法、検証装置および検証プログラム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019077738A1 (ja) * 2017-10-20 2019-04-25 三菱電機株式会社 データ検証装置、データ検証方法及びデータ検証プログラム
JPWO2019077738A1 (ja) * 2017-10-20 2020-04-02 三菱電機株式会社 データ検証装置、データ検証方法及びデータ検証プログラム
GB2580830A (en) * 2017-10-20 2020-07-29 Mitsubishi Electric Corp Data verification device, data verification method, and data verification program
US11288171B2 (en) 2017-10-20 2022-03-29 Mitsubishi Electric Corporation Data verification apparatus, method and medium for determining whether referring parts of source code are executed
GB2580830B (en) * 2017-10-20 2022-04-13 Mitsubishi Electric Corp Data verification apparatus, data verification method, and data verification program
CN112860473A (zh) * 2021-04-27 2021-05-28 武汉深之度科技有限公司 程序运行错误时定位源代码的方法、装置及计算设备
CN113448866A (zh) * 2021-07-15 2021-09-28 杭州国芯科技股份有限公司 一种嵌入式软件开发辅助调试系统及调试方法

Also Published As

Publication number Publication date
JP6451417B2 (ja) 2019-01-16

Similar Documents

Publication Publication Date Title
US11954461B2 (en) Autonomously delivering software features
US11775414B2 (en) Automated bug fixing using deep learning
US9389849B2 (en) Test case pattern matching
US9898387B2 (en) Development tools for logging and analyzing software bugs
JP6891779B2 (ja) テストスクリプト修正装置及びプログラム
JP6268029B2 (ja) テストケース生成装置及びテストケース生成方法
JP2016115175A (ja) ソフトウェアテスト装置およびソフトウェアテストプログラム
JP6409577B2 (ja) テスト選択プログラム、テスト選択方法、及びテスト選択装置
WO2015190203A1 (ja) 検出装置、修正システム、検出方法およびプログラム
JP5845888B2 (ja) ソフトウェア修正装置、ソフトウェア修正システム、ソフトウェア修正方法、及び、ソフトウェア修正プログラム
JP6451417B2 (ja) デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム
JP2018092362A (ja) テストスクリプト修正装置及びテストスクリプト修正プログラム
JP2018018197A (ja) ソースコード評価プログラム
KR101534493B1 (ko) 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법
JP6369177B2 (ja) 開発支援プログラム,開発支援方法及び開発支援装置
JP2018084939A (ja) 修正支援プログラム、修正支援方法、修正支援装置、およびコンパイラ
JP2007199800A (ja) デグレート防止支援プログラムおよびデグレート防止支援方法
JP2016173756A (ja) テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
JP2019021037A (ja) ソースコード評価装置、ソースコード評価方法及びソースコード評価プログラム
JP5516277B2 (ja) テストケース関係抽出方法、テストケース関係抽出装置及びテストケース関係抽出プログラム
JP2018116517A (ja) 開発支援装置、開発支援方法、およびプログラム
JP2010266909A (ja) プログラミング言語処理方法
JP6497271B2 (ja) テストデータ生成装置、方法、及びプログラム
JP5448907B2 (ja) プログラム検証装置、プログラム検証方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181023

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181113

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181126

R150 Certificate of patent or registration of utility model

Ref document number: 6451417

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150