JP2009104252A - デバッグ支援装置およびデバッグ支援方法 - Google Patents

デバッグ支援装置およびデバッグ支援方法 Download PDF

Info

Publication number
JP2009104252A
JP2009104252A JP2007273104A JP2007273104A JP2009104252A JP 2009104252 A JP2009104252 A JP 2009104252A JP 2007273104 A JP2007273104 A JP 2007273104A JP 2007273104 A JP2007273104 A JP 2007273104A JP 2009104252 A JP2009104252 A JP 2009104252A
Authority
JP
Japan
Prior art keywords
function
component unit
program
priority
source code
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.)
Pending
Application number
JP2007273104A
Other languages
English (en)
Inventor
Makoto Sato
佐藤  誠
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2007273104A priority Critical patent/JP2009104252A/ja
Publication of JP2009104252A publication Critical patent/JP2009104252A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】プログラム開発におけるデバッグ作業を効率的に行うこと支援する。
【解決手段】異常動作時のログとプログラムのソースコード変更履歴より、優先度の高い関数を選択し、あらかじめ定めたデバッグ対象特定ルールに基づいてその関数に関係する関数の優先度を求めて、それら関数とその関数の優先順位を示したデバッグ対象候補リストを作成し、デバッグ作業においてデバッグ対象候補リストを参照してデバッグ対象の絞り込みを行ってデバッグ作業を効率的に行うことを支援する。
【選択図】図1

Description

本発明は、ソフトウェアのデバッグ支援装置およびデバッグ支援方法に係り、特にソフトウェアの修正時におけるデバッグ支援装置およびデバッグ支援方法に関する。
近年、システムの機能変更を当該システムのコンピュータ上で稼動するプログラムの修正で実現されることが多く、またそのプログラムの修正作業に要する時間の短縮が求められている。
例えば、プログラムのソースコードに変更を加えたことで動作に不具合(異常動作)が生じた場合に、ソースコードの変更履歴を記録し管理するCVS(Concurrent Versions System)などの構成管理ツールを利用することで、正常に動作していた状態のソースコードまで遡り、異常動作時のソースコードと、正常動作時のソースコードとの差分を抽出してデバッグ作業を支援することができるものがある。この場合、従来では差異がある箇所全てがデバッグ対象範囲となるので、そのデバッグ対象中には動作上問題が無かった箇所や、実行されなかった箇所が含まれることになるので、デバッグ作業の効率が悪い問題があった。
また、プログラム実行時に、ソースコードがどのような順序で実行されたか分かるように、実行パスをログに記録して、正常動作時のログと異常動作時のログを比較することで差異がある箇所をデバッグ対象範囲とするものがある。この場合、異常動作時の不具合がさまざまな箇所に影響をおよぼし、例えば、不具合が含まれない部分の実行パスまで変化してログに記録されてしまうため、ログの差異から不具合箇所を特定するのは困難であった。
また、ユーザが指定した注目箇所に関係する箇所についてのみログを記録するようにし、そのログを使用することでデバッグ作業を効率よく支援する技術が提案されている(例えば、特許文献1参照。)。
特開2000−207246号公報
しかしながら、特許文献1の発明のように、ユーザが指定した注目箇所に関係する箇所についてのみ実行過程を記録してデバッグで使用する情報を減らしてデバッグ作業を支援する方法は、ユーザの思い込みなどによって注目箇所の指定を誤ると正しい検査ができなくなり、注目箇所の指定が難しい問題がある。
本発明は、上記問題を解決するためになされたもので、異常動作時のログと、ソースコードの変更情報から異常動作との関連性の高さを判定するルールを適用してデバッグ対象範囲を自動的に絞り込むことでデバッグ作業の効率向上を実現するデバッグ支援装置およびデバッグ支援方法を提供することを目的とする。
上記目的を達成するために、本発明のデバッグ支援装置は、プログラムの構成要素単位を指定できるプログラム言語で記述したプログラムのデバッグ支援装置であって、前記プログラムの異常動作時の実行履歴を前記構成要素単位の情報を含むデバッグ情報とともに記憶する実行ログ記憶手段と、前記プログラムのソースコードが記憶されるソースコード記憶手段と、前記ソースコードの変更履歴を記憶するソースコードの変更履歴記憶手段と、前記実行ログ記憶手段に記憶された実行ログの前記構成要素単位で、前記ソースコード記憶手段と前記ソースコードの変更履歴記憶手段から一番最近に変更された構成要素単位を選択するバージョン解析手段と、デバッグ対象特定ルールを記憶するデバッグ対象特定ルール記憶手段と、前記バージョン解析手段で選択された前記構成要素単位と、当該構成要素単位の前記デバッグ対象特定ルールに基づいて追加選択された構成要素単位とに対して、前記デバッグ対象特定ルールに基づき前記構成要素単位の優先度を求め、その優先度に基づいて前記構成要素単位の優先順位を定めて、前記構成要素単位とその構成要素単位の前記優先順位を含むデバッグ対象箇所候補リストを作成するデバッグ対象特定手段とを有することを特徴とする。
また、本発明のデバッグ支援方法は、プログラムの構成要素単位を指定できるプログラム言語で記述したプログラムのデバッグ支援方法であって、前記プログラムの異常動作時の実行履歴を構成要素単位の情報を含むデバッグ情報とともに実行ログとして記憶するステップと、前記プログラムのソースコードを記憶するステップと、前記ソースコードの変更履歴を記憶するステップと、前記実行ログに含まれる前記構成要素単位で、前記ソースコードと前記ソースコードの変更履歴から一番最近に変更された構成要素単位を選択するステップと、デバッグ対象特定ルールを記憶するステップと、前記選択された構成要素単位と、当該構成要素単位の前記デバッグ対象特定ルールに基づいて追加選択された構成要素単位とに対して、前記デバッグ対象特定ルールに基づき前記構成要素単位の優先度を求め、その優先度に基づいて前記構成要素単位の優先順位を定めて、前記構成要素単位とその構成要素単位の前記優先順位を含むデバッグ対象箇所候補リストを作成するステップとを有することを特徴とする。
本発明によれば、プログラムの不具合原因の候補関数とその関数の優先順位を示したデバッグ対象箇所候補リストとが自動的に作成され、そのデバッグ対象箇所候補リストを参照してデバッグ対象箇所の漏れの無い絞り込みが行えるので、デバッグ作業を効率的に進めることができる。
以下、本発明の実施例を説明する。
本発明に係るソフトウェアのデバッグ支援装置およびデバッグ支援方法の実施例を、図1乃至図14を参照して説明する。
図1は、実施例のデバッグ支援機能を有するソフトウェア開発システムのシステム構成図である。図2乃至図5は、デバッグ対象のソースプログラムのリストである。図6乃至図11は、デバッグ支援装置で参照および生成されるファイルのデータ構成を示す図である。図12は、候補関数を選択する処理手順を示すフローチャートである。図13は、デバッグ対象箇所を特定する処理手順を示すフローチャートである。図14は、ソフトウェア開発システムの表示装置の画面の様子である。
ソフトウェア開発システムのシステム構成を、図1を用いて説明する。
ソフトウェア開発システムは計算機を用いて動作するシステムであり、明示しないが通常の計算機システムの有する演算装置や記憶装置および入出力装置が使用される。ソフトウェアのソースプログラム10は、図示していない編集プログラムで作成編集され、構成管理ツール40でソースプログラム10の編集履歴がバージョンで管理される。
編集されたソースプログラム10は、コンパイラ11でコンパイルされて実行プログラム12が生成される。生成された実行プログラム12は、プログラム実行部13でシミュレーション動作が実行されて、実行履歴の実行ログ20がファイル出力される。バージョン解析部30は、構成管理ツール40から出力された変更履歴一覧表41を受け、そしてソースプログラム10と実行ログ20とを入力して、デバッグ対象となる候補関数リスト50(詳細は後述する)を生成して出力する。デバッグ対象特定部60は、バージョン解析部30で生成された候補関数リスト50とデバッグ対象特定ルール70とソースプログラム10と変更履歴一覧表41を受けて、デバッグ対象箇所を抽出して(詳細は後述する)、それに基づくデバッグ対象箇所候補リスト80を生成して出力する。
本発明のソフトウェア開発システムにあってもソフトウェア開発の基本手順は、通常のソフトウェア開発システムの手順と同様である。すなわち、ソースプログラム10を作成編集し、編集したソースプログラム10をコンパイラ11でコンパイルして、実行プログラム12を生成する。そして、生成された実行プログラム12をプログラム実行部13のシミュレータで実行して実行ログ20を得る。そして、プログラムの機能を確認し、結果に不具合(バグ)があれば、実行ログ20を参照して不具合の原因を調べて、ソースプログラム10を修正編集する手順を実行して、不具合を解消する(デバッグ)。ソフトウェアの所望の機能が実現されるまで、このデバッグ作業が繰り返される。
また、最近ではソフトウェア開発が複数人で行われることなどから、ソースプログラム10は構成管理ツール40で管理されている。そして、ソフトウェア開発作業者に対し、構成管理ツール40からソースプログラムの最新バージョンの組合せが提供されるようになっており、例えば古いバージョンのソースプログラムを誤って用いるような不具合を生じさせない仕組みとなっている。
また、明示していないがこれら一連のデバッグ作業を含む開発作業を統合した環境下で行えるIDEツールプログラム(IDE:Integrated Development Environment)がソフトウェア開発システムに使用されている。
すなわち、ソフトウェア開発作業者は、IDEツールのインターフェースを介してソースプログラム10の編集プログラムによる編集作業、コンパイラ11によるコンパイル作業、図示していないリンカーによるリンク作業、シミュレータによるシミュレーション作業、およびデバッガプログラムによるデバッグ作業などを行う。このような環境下では、開発するソフトウェアの環境情報(関連ファイル、配置後のメモリアドレス、デバッグの有無など)を設定すれば、個々のプログラムの起動オプション設定作業などが不要になり、設定ミスなどに起因する不具合を減らす仕組みが使用されている。
このような操作ミスによる不具合を減少させる仕組みがソフトウェア開発システムに使用されても、プログラムのアーキテクチャや記述が原因の不具合は解消されず、プログラムの実行結果を解析してデバッグ作業を行うことになる。以下に、このデバッグ作業を支援する本発明のデバッグ支援装置の動作を候補関数の選択とデバッグ対象箇所の選択の2つの処理ステップ(以下、フェーズと記す)に分けて図2乃至図13を用いて説明する。
なお、本発明のデバッグ支援装置は、不具合が検出された時、デバッグ対象の絞り込みを関数単位としていて、ソースプログラム10の不具合解析を関数単位で行えるようにしている。これは、本実施例がC言語で記述されたソースプログラム10をデバッグ対象としているためである。C言語では関数が、ソースプログラムの見通しの良さや可読性を高めるプログラムの階層構造化の単位として用いられている。しかし、デバッグ作業でプログラム解析が行い易い機能単位などでまとめられているプログラム構成要素単位であれば、他の表現のまとまりを使用してもよく、例えばソースプログラム記述言語がアセンブラ言語であればサブルーチン単位としてもよい。
ここで図2乃至図5は、C言語で記述されたソースプログラムリストで、図2はFile1.cのリストを示し、図3および図4はFile2.cのリストを示し、図5はglobal.hのリストを示すものであり、実施例の説明のためのプログラムである。図6は、デバッグ情報を出力するように指定してコンパイルした実行プログラム12をプログラム実行部13でシミュレーション動作を実行させて得られた実行ログ20の一例である。
この図6の実行ログ20は、全てのステップのデバッグ情報を記録するのではなく、実行プログラム12を実行した時に、関数を呼び出す(コール)毎に、関数名とその関数定義記述を含むソースプログラム10の「ファイル名」と、ソースプログラムファイルにおけるその関数定義記述の「先頭行の位置情報」とから構成されるログ情報を記録したもので、図6の上部より下部に向かって実行順に記録されている。例えば、第3行目は、実行プログラム12の実行開始後に3番目にコールされた関数は、関数名が「Search_MIN」でソースプログラム記述はファイル名「File2.c」に含まれ、ファイルFile2.cの「36」行目(図3の3A行)から上記Search_MINの関数定義記述が始まることを示している。なお、この実施例では、関数定義記述の先頭行は、関数や変数の宣言文に続く、関数の実行プログラムのコードに対応するソースプログラム記述の開始行を指す。
図7は、構成管理ツール40が出力するソースプログラム10の変更履歴一覧表の一例を示すものである。例えば、図2に示したファイル名「File1.c」のソースプログラム記述は、バージョン1.0のみが存在していることを示している。また、図3および図4に示したファイル名「File2.c」のソースプログラム記述は、バージョン1.0〜バージョン1.5までの5つのバージョン(版)が存在し、バージョン1.5が最新バージョンであることを示している。また、図5に示したファイル名「global.h」のソースプログラム記述は、バージョン1.0のみが存在していることを示している。
(第1フェーズ):
第1フェーズとして、バージョン解析部30で行われる候補関数選択の処理手順を、図2乃至図9および図12を用いて説明する。図12は、バージョン解析部30による候補関数を選択する処理手順を示すフローチャートである。
最初に、ファイルされた実行ログ20の先頭(実行順序の一番古いログ情報位置)へのポインタ設定(n=1)と、バージョン解析部30内に設けられる関数確認リスト30aの初期化と、候補関数リスト50の初期化が行われる(ステップS100)。
次に、実行ログ20のn(=1)行目のログ情報を読み込む(ステップS110)。
次に、読み込まれたログ情報の関数Xが、関数確認リスト30aに登録済みのものであるか否か調べ(ステップS120)、登録済みであれば、実行ログ20から次のログ情報を読み込むためにステップS180に進み、ポインタnが1増加させられる。
ステップS120で読み込まれたログ情報の関数Xが関数確認リスト30aに登録されていなければ、関数確認リスト30aに当該ログ情報の関数Xを登録し、その関数定義記述を含むソースプログラム10の最新バージョンを読み込む(ステップS130)。
次に、そのソースプログラム10の変更履歴一覧表41より、一つ前の古いバージョン(一世代前)の有無を調べ(ステップS140)、古いバージョンが無ければ関数Xの記述変化が無いことを、図8の関数確認リスト30aに記録する(ステップS170)。
一方、ステップS140で古いバージョンがあった場合、一世代前のソースプログラム10を読み込み、最新バージョンの関数定義の記述と一世代前のソースプログラム10における同箇所の関数Xの定義記述を比較する(ステップS150)。その比較において、関数定義の記述が一致すれば関数Xの記述変化が無いことを図8の関数確認リスト30aに記録する(ステップS170)。
ステップS150の比較において、一世代前のバージョンのソースプログラム10に関数Xの定義記述が無いかまたは、関数定義の記述(具体的には、コメント記述などを除いたアルゴリズムに係る記述の部分)が最新バージョンと異なる場合は、関数定義記述の変化有りとし、当該関数とファイル名と関数定義記述のファイルの先頭からの位置とを図9に示す候補関数リスト50に登録する(ステップS160)。
次に、関数記述の変化が有ったことを、図8の関数確認リスト30aにファイル名と関数定義記述のファイルの先頭からの位置と関数と関数定義の記述の変化「有り」を追加登録する(ステップS170)。
次に、実行ログ20の読み込み行数nを1増加させる(ステップS180)。
次に、実行ログ20の読み込み行数nが実行ログの最終行を超えたか否か調べ(ステップS190)、超えていなければステップS110に戻り、同じ処理を繰り返し実行する。そして、最終行を超えていれば、第1フェーズの候補関数の選択を終了する。
これにより、不具合が確認された実行ログ20に記録された関数の中で、最新の編集作業で記述に変更が加えられた関数が、不具合原因の候補関数リスト50として提供されることになる。
(第2フェーズ):
次に、第2フェーズとしてデバッグ対象特定部60で行われるデバッグ対象箇所の選択の処理手順を、図2乃至図7および図9乃至図11および図13を用いて説明する。図13は、デバッグ対象特定部60によるデバッグ対象箇所を特定する処理手順を示すフローチャートである。
ここで、図10は、デバッグ対象特定ルール70の一覧表である。デバッグ対象特定ルール70は、デバッグ対象箇所を選択するための手順を示すものである。すなわち、「ルール名」で処理対象概要が示されるルール毎に定められた処理手順に従って関連候補関数の追加と、候補関数と追加された関連候補関数を含む全ての関数(デバッグ対象箇所)毎に優先度が与えられて、最終的にデバッグ対象箇所とその優先順位が示される。また、デバッグ対象特定ルール70は、ルール毎に関連候補関数の追加の有無とその追加方法とデバッグ対象箇所に付与する優先度の値をコントロールできるように構成されていて、デバッグ状況に応じて柔軟にデバッグ対象の絞り込みを制御できる。
デバッグ対象特定部60は最初に、デバッグ対象特定ルール70を読み込み、また候補関数リスト50へのアクセスポインタPを初期化し(P=1)、またデバッグ対象特定部60内に設けられる仮候補リスト60aとデバッグ対象箇所候補リスト80を初期化する(ステップS300)。
次に、候補関数リスト50のP番目の関数を読み込み、候補関数に設定する。P=1の場合は、候補関数として「Search_MIN」が設定される。そして、図10に示したデバッグ対象特定ルール70のアクセスポインタQ=1の1番目ルール「変更された関数」を適用する処理を行う。このルールの第2カラム「デバッグ対象候補として扱う」の記述は、規定値として「Yes」でありルールを適用するので、その候補関数の優先度合計に第4カラムに指定された「10」を設定する(ステップS310)。
そして次に、デバッグ対象特定部60は、その候補関数(P=1の場合は、「Search_MIN」)と、その優先度合計「10」をデバッグ対象箇所候補リスト80に登録する(ステップS320)。なお、デバッグ対象箇所候補リスト80への登録では、当該関数がデバッグ対象箇所候補リスト80に登録されていなければ、ファイル名と、関数定義記述の先頭行位置と、関数名と、優先度合計とが追加登録される。一方、既にデバッグ対象箇所候補リスト80に存在する場合は、既に登録されている関数の優先度合計に当該関数の優先度合計が加算され、優先度合計が更新されて登録される。
そして次に、デバッグ対象特定部60は、デバッグ対象特定ルール70のアクセスポインタQに「2」を設定する(ステップS330)。
次に、Q(=2)番目のデバッグ対象特定ルール70の第2「デバッグ対象候補として扱う」の記述から、このルールを適用するのか否を調べ(ステップS340)、ルールを適用しなければステップS380に進む。
ステップS340で同ルールを適用するとした場合(Yes)、Q=2(「変更された関数をコールする関数」)の時、最新バージョンのソースプログラム10の中から「候補関数をコールする関数」の記述を探索し、候補関数をコールする関数が見つかる毎に、関連関数として仮候補リスト60aに登録する。なお、仮候補リスト60aへの登録では、既に同じ関数が登録されている時は関連関数として追加されないが、以下に示す関連関数の計算で求められる優先度が加算される。そして、同ルールの第3カラムの「オプション」で探索するコールの深さ(ネスト)が指定されている時は、その深さまで階層構造で記述されたソースプログラム10を探索する。例えば、ネストの深さ指定が「2」の時は、「候補関数をコールした関連関数をコールした関数」までが関連関数として探索される。そして、ルールの第4カラムの「優先度」で指定されるルールに従って優先度が計算されて、当該関連関数に付与されて仮候補リスト60aに登録される(ステップS350)。例えば、ネストの深さ段数「2」で見出された関数(候補関数をコールした関連関数をコールした関数)の優先度は5/2=2.5となる。
なお、このステップS350で、Q=3(「変更された関数からコールされる関数」)の時は、最新バージョンのソースプログラム10の候補関数の定義記述でコールする関数記述を探索し、コールする関数が見つかる毎に関連関数として仮候補リスト60aに登録する。仮候補リスト60aに登録では上述のように、既に同じ関数が登録されている時は関連関数として追加されないが、以下に示す関連関数の計算で求められる優先度が加算される。そして、第3カラムの「オプション」で探索するコールの深さ(ネスト)が指定されている時は、その深さまで階層構造記述されたソースプログラム10を探索する。そして、第4カラムの「優先度」で指定されるルールに従って関連関数に与えられる優先度が計算されて付与される。
また、このステップS350で、Q=4(「変更された関数と同じ共有変数を持つ関数」)の時は、最新バージョンのソースプログラム10の候補関数の定義記述で使用される共有変数を関数定義において使用している関数を探索して、関連関数として仮候補リスト60aに登録する、仮候補リスト60aに登録では上述のように、既に同じ関数が登録されている時は関連関数として追加されないが、以下に示す関連関数の計算で求められる優先度が加算される。そして第4カラムの記述にあるようにその関連関数の定義記述で共有する共有変数の数の合計が求められ関連関数の優先度として付与される。
上述のルールの処理は、構文解釈や比較など一般的なソフトウェア処理で実現できるため、詳細のフローチャートの記載を省略している。
次に、仮候補リスト60aに登録された関連関数が優先度合計とともに、デバッグ対象候補リストに追加登録される(ステップS360)。
このデバッグ対象箇所候補リスト80への関数の追加登録においても、ステップS320と同様に、既に同じ関数が登録されている時は、関連関数の優先度合計がデバッグ対象箇所候補リスト80の既に登録された同じ関数の優先度合計に加算される。
次に、関連関数と優先度合計を登録する仮候補リスト60aは次のルールの処理で使用できるように、登録内容が消去されて初期化される(ステップS370)。
そして次に、デバッグ対象特定ルール70のアクセスポインタQを1増加させる(ステップS380)。
次に、Q番目のデバッグ対象特定ルール70が存在するか調べ(ステップS390)、存在すればステップS340に戻り、存在しなければ次のステップに進む。
次に、候補関数リスト50のアクセスポインタPを1増加させる(ステップS400)。
次に、候補関数リスト50のP(=2)番目の候補関数が存在しないか調べ(ステップS410)、候補関数リスト50のP番目に候補関数が存在する時は、ステップS310に戻り、候補関数リスト50の終端で候補関数が存在しない時は、全ての候補関数についての処理が終了したので次のステップに進む。
次にデバッグ対象箇所候補リスト80の優先度合計の大きなものから優先順位を付与し(ステップS420)、第2フェーズの処理を終了する。
ここで、図11は、優先度および優先順位が付与されたデバッグ対象箇所候補リスト80である。図11の第1行目の関数「main」と第2行目の関数「Set_Numbers」と第5行目の関数「Search_Num」を例に各項目の内容について説明する。
関数「main」は、File1.cのソースプログラムファイルの7行目(図2の2A行)から関数定義記述が始まり、優先度合計は、デバッグ対象特定ルール2が適用されて「12.5=(5+2.5x3)」となり、優先順位は第「3」位であることを示している。優先度の「5」は、関数「main」が候補関数「Search_MIN」(図2の2B行)をコール「ネスト=1」していることを示し、「2.5x3」は、候補関数「Search_Num」(図3の3A行)をコール「ネスト=2」する時、関数「Search_MIN」(図2の2B行)、関数「Search_MAX」(図2の2C行)、関数「Print_Result」(図2の2D行)の3つの関数を介してコールしていることを示している。
また、関数「Set_Numbers」は、File2.cのソースプログラムファイルの9行目(図3の3B行)から関数定義記述が始まり、優先度合計は、候補関数と同じ共有変数が2つ含まれる(Glob_Num、Glob)のでデバッグ対象特定ルール4が適用されて「2=(1+1)」となり、優先順位は第「6」位であることを示している。
さらにまた、関数「Search_Num」は、File2.cのソースプログラムファイルの47行目(図4の4A行)から関数定義記述が始まり、優先度合計は、デバッグ対象特定ルール1(「Search_Num」が候補関数)とデバッグ対象特定ルール3(候補関数「Search_MIN」からコール「ネスト=1」された関連関数)が適用されて「15(10+5)」となり、優先度合計の値がデバッグ候補箇所候補リスト80の中で一番大きいため第「1」位となったことを示している。
このようにしてデバッグ支援装置によって生成されたデバッグ対象箇所候補リスト80は図14に示す統合開発環境で、デバッグ作業を行うソフトウェア開発者に示される。ソフトウェア開発者がデバッグ対象箇所候補リスト80の優先順位の高い関数「Search_Num」を指示(クリック)すると、関数「Search_Num」(図4の4A行)の定義記述(ソースプログラム)が編集プログラムで表示されるようになって作業効率が図られる。
上述のようにあらかじめ定められたルールに従って、不具合の原因箇所の自動絞り込みが行われるので、デバッグ対象箇所候補リスト80の優先順位に従って作業することで不具合原因に関連が深い箇所の関数記述から解析を進めて行くことができ、ソフトウェア開発におけるデバッグ作業時間の短縮が見込まれてデバッグ作業の効率を向上させることができる。
また、あらかじめ定められたルールに従って、不具合原因の箇所がリストアップされるので思い込みなどによるデバッグ対象箇所の見落としが減ってソフトウェア開発におけるデバッグ作業の信頼性や効率を向上させることができる。
本発明は、上記実施例に限定されるものではなく、発明の要旨を逸脱しない範囲で、種々、変形して実施できることは勿論である。
例えば、デバッグ対象箇所候補リストの優先度を合計だけでなく候補関数毎に分割した値も表示するようにすれば、候補関数の変更内容や変更量などの情報が得られる場合には、関数の解析順序をより適切とすることができ、ソフトウェア開発におけるデバッグ作業時間の短縮が見込まれてデバッグ作業の効率を向上させることができる。
本発明によるソフトウェアデバッグ支援装置およびデバッグ支援方法の実施例を含むソフトウェア開発システムのシステム構成図。 デバッグ対象のソースプログラム(File1.c)のリスト。 デバッグ対象のソースプログラム(File2.c)のリスト。 デバッグ対象のソースプログラム(File2.cの続き)のリスト。 デバッグ対象のソースプログラム(global.h)のリスト。 実行ログリスト。 ソースプログラムの変更履歴一覧表。 関数確認リスト。 候補関数リスト。 デバッグ対象特定ルールの一覧表。 デバッグ対象箇所候補リスト。 統合開発環境の表示画面を示す図。 本実施例のデバッグ支援装置のバージョン解析部の処理手順を示すフローチャート。 本実施例のデバッグ支援装置のデバッグ対象特定部の処理手順を示すフローチャート。
符号の説明
1 ソフトウェア開発システム
10 ソースプログラム
11 コンパイラ
12 実行プログラム
13 プログラム実行部
20 実行ログ
30 バージョン解析部
30a 関数確認リスト
40 ソースプログラム構成管理ツール
41 変更履歴一覧表
50 候補関数リスト
60 デバッグ対象特定部
60a 仮候補リスト
70 デバッグ対象特定ルール
80 デバッグ対象箇所候補リスト

Claims (5)

  1. プログラムの構成要素単位を指定できるプログラム言語で記述したプログラムのデバッグ支援装置であって、
    前記プログラムの異常動作時の実行履歴を前記構成要素単位の情報を含むデバッグ情報とともに記憶する実行ログ記憶手段と、
    前記プログラムのソースコードが記憶されるソースコード記憶手段と、
    前記ソースコードの変更履歴を記憶するソースコードの変更履歴記憶手段と、
    前記実行ログ記憶手段に記憶された実行ログの前記構成要素単位で、前記ソースコード記憶手段と前記ソースコードの変更履歴記憶手段から一番最近に変更された構成要素単位を選択するバージョン解析手段と、
    デバッグ対象特定ルールを記憶するデバッグ対象特定ルール記憶手段と、
    前記バージョン解析手段で選択された前記構成要素単位と、当該構成要素単位の前記デバッグ対象特定ルールに基づいて追加選択された構成要素単位とに対して、前記デバッグ対象特定ルールに基づき前記構成要素単位の優先度を求め、その優先度に基づいて前記構成要素単位の優先順位を定めて、前記構成要素単位とその構成要素単位の前記優先順位を含むデバッグ対象箇所候補リストを作成するデバッグ対象特定手段と
    を有することを特徴とするデバッグ支援装置。
  2. 前記ソースコードの前記構成要素単位が関数であることを特徴とする請求項1に記載のデバッグ支援装置。
  3. 前記デバッグ対象特定ルールが編集可能であることを特徴とする請求項1に記載のデバッグ支援装置。
  4. プログラムの構成要素単位を指定できるプログラム言語で記述したプログラムのデバッグ支援方法であって、
    前記プログラムの異常動作時の実行履歴を構成要素単位の情報を含むデバッグ情報とともに実行ログとして記憶するステップと、
    前記プログラムのソースコードを記憶するステップと、
    前記ソースコードの変更履歴を記憶するステップと、
    前記実行ログに含まれる前記構成要素単位で、前記ソースコードと前記ソースコードの変更履歴から一番最近に変更された構成要素単位を選択するステップと、
    デバッグ対象特定ルールを記憶するステップと、
    前記選択された構成要素単位と、当該構成要素単位の前記デバッグ対象特定ルールに基づいて追加選択された構成要素単位とに対して、前記デバッグ対象特定ルールに基づき前記構成要素単位の優先度を求め、その優先度に基づいて前記構成要素単位の優先順位を定めて、前記構成要素単位とその構成要素単位の前記優先順位を含むデバッグ対象箇所候補リストを作成するステップと
    を有することを特徴とするデバッグ支援方法。
  5. 前記ソースコードの前記構成要素単位が関数であることを特徴とする請求項4に記載のデバッグ支援方法。
JP2007273104A 2007-10-19 2007-10-19 デバッグ支援装置およびデバッグ支援方法 Pending JP2009104252A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007273104A JP2009104252A (ja) 2007-10-19 2007-10-19 デバッグ支援装置およびデバッグ支援方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007273104A JP2009104252A (ja) 2007-10-19 2007-10-19 デバッグ支援装置およびデバッグ支援方法

Publications (1)

Publication Number Publication Date
JP2009104252A true JP2009104252A (ja) 2009-05-14

Family

ID=40705886

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007273104A Pending JP2009104252A (ja) 2007-10-19 2007-10-19 デバッグ支援装置およびデバッグ支援方法

Country Status (1)

Country Link
JP (1) JP2009104252A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014109966A (ja) * 2012-12-04 2014-06-12 Hitachi Ltd テストケース生成システムおよび方法
JP2014126900A (ja) * 2012-12-25 2014-07-07 Nec Corp プログラム解析装置、プログラム解析方法、及び、プログラム解析プログラム
JP2019057118A (ja) * 2017-09-21 2019-04-11 株式会社東芝 デバッグ支援装置、デバッグ支援プログラム
JPWO2021084735A1 (ja) * 2019-11-01 2021-05-06
JP2021077264A (ja) * 2019-11-13 2021-05-20 富士通株式会社 解析プログラム、解析方法及び解析装置
WO2022118627A1 (ja) * 2020-12-01 2022-06-09 株式会社日立製作所 計算機及びソフトウェアの修正箇所の選択方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014109966A (ja) * 2012-12-04 2014-06-12 Hitachi Ltd テストケース生成システムおよび方法
JP2014126900A (ja) * 2012-12-25 2014-07-07 Nec Corp プログラム解析装置、プログラム解析方法、及び、プログラム解析プログラム
JP2019057118A (ja) * 2017-09-21 2019-04-11 株式会社東芝 デバッグ支援装置、デバッグ支援プログラム
JPWO2021084735A1 (ja) * 2019-11-01 2021-05-06
WO2021084735A1 (ja) * 2019-11-01 2021-05-06 三菱電機株式会社 ソースコード解析装置
JP7237186B2 (ja) 2019-11-01 2023-03-10 三菱電機株式会社 ソースコード解析装置
JP2021077264A (ja) * 2019-11-13 2021-05-20 富士通株式会社 解析プログラム、解析方法及び解析装置
WO2022118627A1 (ja) * 2020-12-01 2022-06-09 株式会社日立製作所 計算機及びソフトウェアの修正箇所の選択方法
JP7423497B2 (ja) 2020-12-01 2024-01-29 株式会社日立製作所 計算機及びソフトウェアの修正箇所の選択方法

Similar Documents

Publication Publication Date Title
US9898387B2 (en) Development tools for logging and analyzing software bugs
EP0785510B1 (en) Program debugging system for debugging a program having a graphical user interface
US7353427B2 (en) Method and apparatus for breakpoint analysis of computer programming code using unexpected code path conditions
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
US8935673B1 (en) System and method for debugging computer program based on execution history
CN111796831B (zh) 一种多芯片兼容的编译方法和装置
US20080235660A1 (en) Depicting Changes to Structures in an Integrated Development Environment
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
JP2009104252A (ja) デバッグ支援装置およびデバッグ支援方法
US20110029953A1 (en) System and Method for Scalable Handling of Debug Information
US20090125873A1 (en) Using compiler commentary for configuring an integrated development environment
JP4675639B2 (ja) データ処理システム、アプリケーションプログラムのカスタマイズパラメータを表示する方法およびコンピュータプログラム製品
JP4874277B2 (ja) 自動テスト実行システム
JP2011170749A (ja) シミュレーション装置及びシミュレーション方法
JP4929121B2 (ja) ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム
JP4870956B2 (ja) 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部
JP2017041196A (ja) スタブ化対象判定装置、方法、及びプログラム
JP2007323299A (ja) レビュー実施順序決定装置、レビュー実施順序決定プログラム、レビュー実施順序決定プログラムが格納された記録媒体およびレビュー実施順序決定方法
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
JP5067705B2 (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム
CN114153750B (zh) 代码检查方法及装置、代码编写方法、电子设备
JPH10293683A (ja) プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
JP7549992B2 (ja) 不具合解析装置、プログラムおよび不具合解析方法
JP2013137716A (ja) マクロ展開装置及びプログラム
Merino et al. Bacatá: A language parametric notebook generator