JPH06214825A - プログラム・バグ潜在域抽出装置 - Google Patents

プログラム・バグ潜在域抽出装置

Info

Publication number
JPH06214825A
JPH06214825A JP5004892A JP489293A JPH06214825A JP H06214825 A JPH06214825 A JP H06214825A JP 5004892 A JP5004892 A JP 5004892A JP 489293 A JP489293 A JP 489293A JP H06214825 A JPH06214825 A JP H06214825A
Authority
JP
Japan
Prior art keywords
program
dependency
bug
statement
variable
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
JP5004892A
Other languages
English (en)
Inventor
Takao Shimomura
隆夫 下村
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.)
NTT Inc
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP5004892A priority Critical patent/JPH06214825A/ja
Publication of JPH06214825A publication Critical patent/JPH06214825A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 プログラム中のバグの存在し得る場所を限定
できるプログラム・バグ潜在域抽出装置を提供する。 【構成】 プログラムの実行時に各実行時点ごとにデー
タ依存関係を抽出するデータ依存関係記録部21と制御
依存関係を抽出する制御依存関係記録部22の他に、変
数と当該変数への値の設定漏れに影響のある分岐文との
依存関係を取得して記録する分岐文設定漏れ依存関係記
録部23と、配列と当該配列の配列要素への値の設定漏
れに影響のある配列要素への代入文との依存関係を取得
して記録する配列要素設定漏れ依存関係記録部24とを
設ける。そして、値誤りバグ潜在域獲得部18によっ
て、データ・エラーが発見された場合に、当該データ・
エラーに対応する変数に関し、当該変数の存在する文に
対して前記各依存関係のいずれかの依存関係にある文の
集合を値誤りバグ潜在域として抽出する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般の手続き型言語で
記述されたプログラムのデバッグ時に使用されるデバッ
グ支援装置に関し、特に、データ・エラーが発生した場
合に、プログラム内の文の中でこのデータ・エラーの原
因となったバグの存在する範囲を限定してデバッグ作業
を容易にするプログラム・バグ潜在域抽出装置に関す
る。
【0002】
【従来の技術】プログラムが仕様に合わない、換言すれ
ば期待したように動作しない場合には、そのプログラム
のソーステキストの中から、仕様に合わないことの原因
となっている部分を見つけ出し、修正を行なう必要があ
る。仕様に合わないことの原因をバグと呼ぶ。
【0003】プログラムのバグは、文の記述が漏れてい
る場合(文記述漏れバグ)、余計な文の記述がある場合
(文記述過多バグ)および文の記述に誤りがある場合に
分類できる。さらに、文の記述に誤りがある場合は、代
入文において左辺(被代入側)の変数の名前を誤った場
合のように別の変数に値を設定するという誤りを引き起
こす場合(名前記述誤りバグ)と、代入文における右辺
(代入側)の式や分岐文などにおける分岐条件式の記述
を誤った場合(文記述誤りバグ)とに分類できる。ここ
では、文記述誤りバグと文記述過多バグを総称して、値
誤りバグと呼ぶことにする。
【0004】プログラム内にバグがあると、代入文にお
いて変数に誤った値が設定されたり、分岐文やループ文
において制御の流れが誤った方向に変わったりする。そ
の結果、ある実行時点においてある変数の値が誤ってい
るというデータ・エラーが発生する。データ・エラーが
発生した場合に、そのデータ・エラーに関係するバグの
存在箇所をプログラム内で限定する技術として、従来、
動的スライス技術がある。
【0005】動的スライスとは、実行された文の集合の
一種であって、ある入力データを与えてプログラムを実
行した場合に、変数が使用されたある実行時点において
その変数の値に実際に影響を与えた文の集合である。実
行された文を繰り返しも考慮して順に並べたものを、実
行系列と呼ぶ。この実行系列の中においてデータ依存関
係と制御依存関係の2つの依存関係をたどることによ
り、動的スライスを求めることができる(B. Korel and
J. Laski, "Dynamic Program Slicing", Information
Processing Letters, Vol. 29, No. 10, Oct. 1988, p
p. 155-163)。データ依存関係および制御依存関係は、
以下のように定義される。すなわち、実行時点t1にお
いて実行された文で使用された変数を最後に定義したの
が実行時点t2であるとき、「実行時点t1は実行時点t
2にデータ依存関係がある。」とする。また、実行時点
1およびt2があって、実行時点t2において分岐文あ
るいはループ文が実行されており、実行時点t1におい
て実行された文の実行の有無がその分岐文あるいはルー
プ文の制御移行結果に直接依存していたとき、「実行時
点t1は実行時点t2に制御依存関係がある。」とする。
【0006】図1は、この動的スライス技術に基づく従
来のプログラム・バグ潜在域抽出装置の構成を示すブロ
ック図である。
【0007】この装置は、インストルメント部52とコ
ンパイル・リンク部54とプログラム実行制御部56と
動的スライス獲得部58とによって構成されている。イ
ンストルメント部52は、ソースプログラム51を読み
込み、文と文との間の依存関係を記録するためのコード
をこのソースプログラムに埋め込んで、インストルメン
トされたソースプログラム53として出力するためのも
のである。コンパイル・リンク部54は、インストルメ
ントされたソースプログラム53を読み込んでコンパイ
ル、リンクし、実行可能プログラム55として出力する
ためのものである。プログラム実行制御部56は、実行
可能プログラム55の実行を制御するものであって、コ
ンパイル、リンクされた実行可能プログラム55を実際
に実行させ、プログラムが実行されたときの文の間の依
存関係を記録してプログラム実行依存関係情報57とし
て出力するものである。プログラム実行制御部56の内
部には、データ依存関係を記録するためのデータ依存関
係記録部61と、制御依存関係を記録するための制御依
存関係記録部62とが設けられている。そして、動的ス
ライス獲得部58は、発見されたデータ・エラーに基づ
きプログラム実行依存関係情報57を参照して文間の依
存関係を解析することにより動的スライスを求め、求め
た動的スライスを動的スライス情報58として出力し、
バグ存在箇所を抽出するためのものである。
【0008】この装置では、インストルメントされたソ
ースプログラム53をコンパイル・リンク後、プログラ
ム制御実行部56でこのプログラムを実行することによ
り、データ依存関係記録部61および制御依存関係記録
部62によって、データ依存関係と制御依存関係が、そ
れぞれプログラム実行依存関係情報57として記録され
る。そして、動的スライス獲得部58が、発見されたデ
ータ・エラーに基づいてプログラム実行依存関係情報5
7を解析することにより、バグが存在する可能性のある
文がプログラムの中から抽出される。
【0009】ここで、このプログラム・バグ潜在域抽出
装置を用い、図2に示されたサンプルプログラムからバ
グの存在し得る範囲を抽出する場合について、説明す
る。図2のプログラムは、一般のアルゴル系言語で記述
されたものであり、変数xとyのうち大きい方を変数max
で返し、小さい方を変数minで返すものである。関数get
(x,y)と関数put(max,min)は、それぞれ変数x,yを入力す
る関数、変数max,minを出力する関数である。このプロ
グラムにおいて、文番号104の文が間違っており(バ
グ)、この文の「if x>y then」は、正しくは「if x<
y then」である。
【0010】このプログラムに対し、x=2,y=3を与えて
実際に実行した場合の実行系列が、図3に示されてい
る。文番号104の文が間違っているため、変数minの
値が3と誤っている(正しくは2)。ここで、図3に示
された実行系列から、変数minに対するデータ依存関係
と制御依存関係を抽出すると、誤っているif文以降では
変数minへの値の代入が行なわれていないため、変数min
に対して制御依存関係がある文が存在しないことにな
る。このため、変数minに対してデータ依存関係にある
実行順1と3の文(文番号が101と103の文)のみ
が、動的スライスとして獲得される。したがって、動的
スライスに基づくプログラム・バグ潜在域抽出装置で
は、図2に示したプログラムに対し、文番号が101と
103の文をバグの存在し得る場所として抽出すること
となり、実際にバグの存在する文番号104の文をバグ
潜在域として抽出しないことになる。
【0011】
【発明が解決しようとする課題】上述のように、動的ス
ライスを用いた場合には、文の間のデータ依存関係およ
び制御依存関係に基づいてバグの潜在する場所を抽出す
るため、上記の図2に示したプログラムの例のように、
変数(上述の例では変数min)の値に対して直接影響を
与えた文を抽出することができる。しかし、この例に示
されるように、実際にバグを含む文を抽出できない場合
があるという問題点がある。すなわち、動的スライス技
術では、ある分岐文の分岐結果の誤りのために、ある変
数に値が設定されず、それが原因でデータ・エラーが引
き起こされているような場合には、当該分岐文および当
該分岐文が依存している文の集合が、まるごと動的スラ
イスから漏れてしまうという問題点がある。
【0012】本発明の目的は、動的スライス技術のもつ
このような問題点を改善でき、バグの潜在域を正しく抽
出できるプログラム・バグ潜在域抽出装置を提供するこ
とにある。
【0013】
【課題を解決するための手段】本発明のプログラム・バ
グ潜在域抽出装置は、手続き型言語で記述されたプログ
ラムのデバッグを行なう際に使用され、データ・エラー
が発生した場合に当該データ・エラーの原因となるバグ
の存在する可能性のある文を前記プログラム中から抽出
するプログラム・バグ潜在域抽出装置において、前記プ
ログラムの各文の間の依存関係を記録するためのソース
コードを前記プログラムのソーステキスト中に埋め込む
インストルメント部と、前記インストルメント部で作成
されたソースプログラムに対してコンパイルとリンクを
行ない、前記ソースプログラムを実行可能プログラムに
変換するコンパイル・リンク部と、変数と文との間の依
存関係を取得するために前記実行可能プログラムを実行
するプログラム実行制御部と、文の間のデータ依存関係
を前記実行可能プログラムの実行中に取得して記録する
データ依存関係記録部と、文の間の制御依存関係を前記
実行可能プログラムの実行中に取得して記録する制御依
存関係記録部と、変数と当該変数への値の設定漏れに影
響のある分岐文との依存関係を前記実行可能プログラム
の実行中に取得して記録する分岐文設定漏れ依存関係記
録部と、配列と当該配列の配列要素への値の設定漏れに
影響のある配列要素への代入文との依存関係を前記実行
可能プログラムの実行中に取得して記録する配列要素設
定漏れ依存関係記録部と、データ・エラーが発見された
場合に、当該データ・エラーに対応する変数に関し、当
該変数の存在する文に対して前記各依存関係のいずれか
の依存関係にある文の集合を値誤りバグ潜在域として抽
出する値誤りバグ潜在域獲得部とを有する。
【0014】
【作用】データ依存関係記録部と制御依存関係記録部の
他に、変数と当該変数への値の設定漏れに影響のある分
岐文との依存関係を取得して記録する分岐文設定漏れ依
存関係記録部と、配列と当該配列の配列要素への値の設
定漏れに影響のある配列要素への代入文との依存関係を
取得して記録する配列要素設定漏れ依存関係記録部とを
設けてあるので、値誤りバグの存在する可能性のある場
所(値誤りバグ潜在域)を正しく求めることができる。
【0015】ここで、値誤りバグ潜在域について説明す
る。値誤りバグ潜在域は、値誤りバグがあると仮定した
場合に、発見されたデータ・エラーを引き起こす可能性
のある文を含む最小の集合である。そして、値誤りバグ
潜在域に関し、値誤りバグ潜在域内の文に値誤りバグ
があると、その値誤りバグが、現在着目しているデータ
・エラーを引き起こした可能性がある、値誤りバグ潜
在域外の文に値誤りバグがあっても、その値誤りバグ
は、現在着目しているデータ・エラーを引き起こした原
因とはならない、の2つの事柄が成立する。したがっ
て、値誤りバグ潜在域外のバグを修正したとしても、現
在着目しているデータ・エラーが再び発生することとな
る。
【0016】本発明によれば、値誤りバグ潜在域が求め
られるので、プログラム中において値誤りバグの存在し
得る場所を限定することができ、バグの究明作業を容易
に行なえるようになる。
【0017】
【実施例】次に、本発明の実施例について図面を参照し
て説明する。図4は、本発明の一実施例のプログラム・
バグ存在域抽出装置の構成を示すブロック図である。
【0018】このプログラム・バグ潜在域抽出装置は、
デバッグ対象のプログラムに関しそのプログラムを実行
させたときにデータ・エラーが検出された場合に、その
データ・エラーの原因となった値誤りバグが存在する可
能性のある値誤りバグ潜在域を見つけ出すためのもので
ある。そして、この装置は、大別して、インストルメン
ト部12、コンパイル・リンク部14、プログラム実行
制御部16および値誤りバグ潜在域獲得部18とによっ
て構成されている。これら各部間では、データファイル
(インストルメントされたソースプログラム13、実行
可能プログラム15、プログラム実行依存関係情報1
7)の形式で、必要なデータが受け渡されるようになっ
ている。また、プログラム実行制御部16の内部には、
データ依存関係記録部21、制御依存関係記録部22、
分岐文設定漏れ依存関係記録部23および配列要素設定
漏れ依存関係記録部24が、設けられている。
【0019】データ依存関係記録部21は、文の間のデ
ータ依存関係をプログラムの実行中に取得して記録する
ためものである。制御依存関係記録部22は、文の間の
制御依存関係をプログラム実行中に取得して記録するた
めものである。分岐文設定漏れ依存関係記録部23は、
変数と当該変数への値の設定漏れに影響のある分岐文と
の依存関係(分岐文設定漏れ依存関係)をプログラム実
行中に取得して記録するためものである。配列要素設定
漏れ依存関係記録部24は、配列と当該配列の配列要素
への値の設定漏れに影響のある配列要素への代入文との
依存関係(配列要素設定漏れ依存関係)をプログラム実
行中に取得して記録するためのものである。
【0020】このプログラム・バグ潜在域抽出装置にお
けるデバッグ対象のプログラミング言語としては、Ad
a、Pascal、Cなどの一般の手続き型言語が想定
されている。以下においては、説明を簡単にするため、
プログラム内の文(ステートメント)は、代入文、if文
などの分岐文、while文などのループ文、手続き呼び出
し文(関数呼び出し文も含む)および入出力文からなる
ものとする。
【0021】インストルメント部12は、ソースプログ
ラム11を読み込み、文と文との間の依存関係を記録す
るためのコードをこのソースプログラムに埋め込んで、
インストルメントされたソースプログラム13として出
力するためのものである。コンパイル・リンク部14
は、インストルメントされたソースプログラム13を読
み込んでコンパイル、リンクし、実行可能プログラム1
5として出力するためのものである。
【0022】プログラム実行制御部16は、実行可能プ
ログラム15の実行を制御するものであって、コンパイ
ル、リンクされた実行可能プログラム15を実際に実行
させ、プログラムが実行されたときの文の間の依存関係
を記録してプログラム実行依存関係情報17として出力
するものである。ここで、プログラム実行制御部16に
よって、プログラム実行時に記録される情報について説
明する。
【0023】(1) CurCtl:現実行時点cにおける制御フ
ロー、すなわち、現在の実行時点cの実行を決定した分
岐実行時点(分岐文、ループ文、関数呼び出し文)の集
合である。この制御フローは、プログラムの実行方向と
は逆方向に、現在の実行時点cから制御依存関係をたど
ることによって得られる実行時点の集合のことである。
実行時点には、一般に、実行開始時からの連続番号がふ
られるので、制御フローCurCtlはこの付与された番号か
らなる集合として表わされる。この集合は、各分岐実行
時点を要素とするスタック構造を構成することにより、
容易に求めることができる。ここでは集合とスタックと
を同一視できるので、スタックCurCtlに要素(実行時
点)cをプッシュダウンする操作を「pushCurCtl
(c)」、スタックCurCtlから要素を一つポップアップす
る操作を「popCurCtl」で表わすことにする。また、一
般の実行時点sにおける制御フローをCtl(s)で表わすこ
とにする。
【0024】(2) CurDef(x):プログラム中の各変数x
に対して、変数xを定義した最新の実行時点pを返す関
数であり、データ依存関係に対応している。変数xを定
義する実行時点があるごとに、CurDef(x)の値を更新す
ればよい。
【0025】(3) CurDefCtl(x):プログラム中の各変数
xに対して、変数xを定義した最新の実行時点p(すな
わちCurDef(x))における制御フローCtl(p)である。つ
まり、Ctl(CurDef(x))で表わされる。
【0026】(4) OmsVars(j):分岐文を実行した各実行
時点jに対して、当該分岐文で実行されなかった方の分
岐パス上で定義される可能性のある変数の集合である。
この集合を求める方法は、最適化コンパイラにおいて行
なわれるものと同様のものであり、例えば、エイホ、ウ
ルマン著、土居訳、「コンパイラ」、培風館(1986)など
に、その記載がある。
【0027】(5) AssignArray(j):配列要素への代入文
の実行時点jに対して、値を設定した配列名を返す関数
である。
【0028】次に、プログラム実行制御部16によって
プログラム中の各文が実行されるごとに、文間の依存関
係を求めるためにこのプログラム実行制御部16によっ
て行なわれる処理について説明する。ここでは、現在実
行しようとしている実行時点をcとする。
【0029】(1) 代入文、入力文を実行する場合:この
代入文、入力文で定義される変数をwとすると、wを定
義した最新の実行時点がcということになるから、 CurDef(w):=c; CurDefCtl(w):=CurCtl; を実行する。
【0030】(2) 分岐文、ループ文、手続き呼び出し文
を実行する場合: pushCurCtl(c); を実行する。すなわちスタックCurCtlに実行時点cをプ
ッシュダウンする。
【0031】(3) 分岐文、ループ文、手続き呼び出し文
を終了する場合: popCurCtl; を実行する。すなわち、スタックCurCtlから実行時点を
一つポップアップする。ただし、ループ文を終了する場
合には、そのループ文本体部の繰り返し回数だけ「popC
urCtl;」を実行するものとする。以上の説明からよう
に、スタックCurCtlの内容を先頭から一番奥までたぐる
ことにより、その実行時点cにおける制御フローが得ら
れることになる。
【0032】(4) 文の実行時に変数wの値を使用する場
合:この場合には、データ依存関係記録部21、制御依
存関係記録部22、分岐文設定漏れ依存関係記録部23
および配列要素設定漏れ依存関係記録部24のそれぞれ
において、以下に示す処理が行なわれる。
【0033】(4-1) データ依存関係記録部21での処
理: Def(c,w):=CurDef(w); を実行する。ここでDef(c,w)は、実行時点cでの変数w
のデータ依存関係を表わす関数であり、その値は当該デ
ータ依存関係先となる実行時点である。
【0034】(4-2) 制御依存関係記録部22での処理: CtlDef(c,w):=CurDefCtl(w)-CurCtl; を実行する。ここでCtlDef(c,w)は、変数wを定義した
最新の実行時点の制御フローから現実行時点cでの制御
フローを除いたものである。
【0035】(4-3) 分岐文設定漏れ依存関係記録部23
での処理: i:=CurDef(w); OmsCond(c,w):={j|i<j<c,かつ,w∈OmsVars(j)}-CurCt
l; を実行する。ここでOmsCond(c,w)は、変数wの値を定義
した最新の実行時点から現実行時点cまでの各実行時点
のうち、その実行時点で実行されるものが分岐文であり
かつその分岐文の分岐しなかった方のパスで変数wが定
義される可能性があるものからからなる実行時点の集合
であって、現在の制御フローに含まれないものからなる
集合を表わしている。
【0036】(4-4) 配列要素設定漏れ依存関係記録部2
4での処理:変数wが配列要素である場合、すなわちw=
a[m]である場合、 i:=CurDef(w); OmsArray(c,w):={j|i<j<c,かつ,a=AssignArray(j)}; を実行する。ここでOmsArray(c,w)は、変数wの値を定
義した最新の実行時点から現実行時点cまでの各実行時
点のうち、配列aに対して値を設定した実行時点の集合
を表わしている。
【0037】結局、プログラム実行制御部16は、上述
のようにして各実行時点sごとに、上記の集合Def(s,
w),CtlDef(s,w),OmsCond(s,w),OmsArray(s,w)を求め、
プログラム実行依存関係情報17として記録することに
なる。
【0038】次に、値誤りバグ潜在域獲得部18につい
て説明する。
【0039】値誤りバグ潜在域獲得部18は、プログラ
ム実行依存関係情報17を参照し、各文の間のデータ依
存関係、制御依存関係、分岐文設定漏れ依存関係および
配列要素設定漏れ依存関係とを解析して、着目している
データ・エラーに対応する値誤りバグ潜在域を抽出し、
値誤りバグ潜在域情報19として出力するためのもので
ある。この値誤りバグ潜在域獲得部18は、実行可能プ
ログラム15の実行後、着目する変数に対して以下のよ
うな処理を行なう。この場合、プログラム実行制御部1
6によって、予め、全ての実行時点sおよびその実行時
点sにおいて使用している変数wに対して、Def(s,w),C
tlDef(s,w),OmsCond(s,w),OmsArray(s,w)が求められて
いるものとする。
【0040】まず実行時点sおよび変数wに対して、実
行時点の集合Oms(s,w)を次のように定義する。 Oms(s,w)=OmsCond(s,w)∪OmsArray(s,w) また、実行時点s、変数の集合Wに対して、w∈Wであ
る変数w全てについての集合Oms(s,w)の和集合Oms(s,W)
を次のように定義する(ただしw∈W)。 Oms(s,W)=∪Oms(s,w)
【0041】そして、実行時点tにおける、変数vに対
する実行時点集合CriticalEP(t,v)を次のように定義す
る。 CriticalEP(t,v)=CEP(t,{v},t) ただし、実行時点i,e(i≦e)、変数の集合AffectUseに対
して、関数CEP(i,AffectUse,e)は、図5に示されるよう
に、再帰的に定義される。なお、Use(x)は、実行時点x
で使用している変数の集合である。また、実行時点(1≦
j<t)に対して、変数の集合IndexVars(j)は、以下のよ
うに定められる。IndexVars(j)={w|実行時点jにおける
文の実行において、変数wは、左辺の配列要素の添字式
の中で使用された変数である。}
【0042】例えば、文が「a[x+y-1]:=z+2;」の場合に
は、IndexVars(j)={x,y}である。
【0043】ここで関数CEP(i,AffectUse,e)の動作につ
いて説明する。まず、求めようとする値誤りバグ潜在域
に対応する変数vをAffectUseとする。そうすると、文
番号206あるいは208の行で、AffectUseに含まれ
る変数について、データ依存関係、制御依存関係、分岐
文設定漏れ依存関係および配列要素設定漏れ依存関係の
いずれかの依存関係をその変数が有する実行時点の集合
Xが求められる。そして、文番号214〜221のルー
プの中で、この集合Xに含まれる全ての実行時点xに対
し、当該実行時点xで使用される変数の集合(配列へ値
の代入が行なわれる場合にはその左辺の配列要素の添字
式で使用される変数の集合)を新たにAffectUseXとし、
AffectUseをこのAffectUseXに置き換え、再帰的に関数C
EPを呼び出し(文番号220)、さらに依存関係のある
実行時点を求めている。この再帰的呼び出しを繰り返す
うちに集合Xの要素の数が減り、いずれX=φ(空集
合)となるから、そのときまでに集合Xの要素として一
度でも求められた実行時点の全て(集合EP)を関数CEP
は最終的に戻り値とする。
【0044】変数vに対する実行時点集合CriticalEP
(t,v)をCriticalEP(t,v)=CEP(t,{v},t)のように定義し
ているから、結局、実行時点集合CriticalEP(t,v)は、
変数vが、データ依存関係、制御依存関係、分岐文設定
漏れ依存関係および配列要素設定漏れ依存関係のいずれ
かの依存関係にある実行時点、さらにこの実行時点が依
存関係にある実行時点、さらにそのまた依存関係にある
実行時点...の集合となり、変数vに対する値誤りバグ
潜在域を表わすことになる。
【0045】ここで、図2に示したプログラムに対して
本実施例のプログラム・バグ潜在域抽出装置を適用した
例について説明する。ここでは、変数min(文番号10
7参照)に対する値誤りバグ潜在域を求めるものとす
る。この場合の各文の間の依存関係は、図6に矢印で示
すようになる。図6において、"◇"は分岐文やループ文
などの条件判断を伴う文を示し、"○"は代入文などを示
している。また、点線で示されているのは、分岐結果の
誤りのために動的スライスでは見逃される依存関係を示
している。
【0046】この場合、文番号107の文の実行順(実
行時点)が6であることにより、実行時点集合Critical
EP(6,min)を求めればよいことになる。この実行時点集
合CriticalEP(6,min)は、関数CEPを用いて以下のように
求められる。 CriticalEP(6,min) = CEP(6,{min},6) = {3,4}∪CEP(3,{x},6)∪CEP(4,{x,y},6) = {3,4}∪{1}∪{1} = {1,3,4}
【0047】したがって、実行時点1,3,4すなわち文
番号101,103,104の文が、値誤りバグ潜在域と
なる。この求められた値誤りバグ潜在域には、本当にバ
グを含む文番号104の文が含まれている。
【0048】
【発明の効果】以上説明したように本発明は、データ依
存関係記録部と制御依存関係記録部の他に、分岐文設定
漏れ依存関係記録部と配列要素設定漏れ依存関係記録部
とを設けたことにより、値誤りバグがあった場合にデー
タ・エラーを引き起こす可能性のある文を含む最小の集
合である値誤りバグ潜在域を正しく求めることができる
ので、値誤りバグの存在する場所を限定でき、従来技術
に比べバグの究明作業が容易になるという効果がある。
【図面の簡単な説明】
【図1】従来のプログラム・バグ潜在域抽出装置の構成
を示すブロック図である。
【図2】サンプルプログラムを示すソーステキストであ
る。
【図3】図2に示すサンプルプログラムを実行した場合
の実行系列を示す図である。
【図4】本発明の一実施例のプログラム・バグ潜在域抽
出装置の構成を示すブロック図である。
【図5】値誤りバグ潜在域を求めるために必要となる関
数CEPの処理内容を示す図である。
【図6】図2に示すサンプルプログラムを実行した時の
実行された文の間の依存関係を示す図である。
【符号の説明】
11 ソースプログラム 12 インストルメント部 13 インストルメントされたソースプログラム 14 コンパイル・リンク部 15 実行可能プログラム 16 プログラム実行制御部 17 プログラム実行依存関係情報 18 値誤りバグ潜在域獲得部 19 値誤りバグ潜在域情報 21 データ依存関係記録部 22 制御依存関係記録部 23 分岐文設定漏れ依存関係記録部 24 配列要素設定漏れ依存関係記録部

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 手続き型言語で記述されたプログラムの
    デバッグを行なう際に使用され、データ・エラーが発生
    した場合に当該データ・エラーの原因となるバグの存在
    する可能性のある文を前記プログラム中から抽出するプ
    ログラム・バグ潜在域抽出装置において、 前記プログラムの各文の間の依存関係を記録するための
    ソースコードを前記プログラムのソーステキスト中に埋
    め込むインストルメント部と、 前記インストルメント部で作成されたソースプログラム
    に対してコンパイルとリンクを行ない、前記ソースプロ
    グラムを実行可能プログラムに変換するコンパイル・リ
    ンク部と、 変数と文との間の依存関係を取得するために前記実行可
    能プログラムを実行するプログラム実行制御部と、 文の間のデータ依存関係を前記実行可能プログラムの実
    行中に取得して記録するデータ依存関係記録部と、 文の間の制御依存関係を前記実行可能プログラムの実行
    中に取得して記録する制御依存関係記録部と、 変数と当該変数への値の設定漏れに影響のある分岐文と
    の依存関係を前記実行可能プログラムの実行中に取得し
    て記録する分岐文設定漏れ依存関係記録部と、 配列と当該配列の配列要素への値の設定漏れに影響のあ
    る配列要素への代入文との依存関係を前記実行可能プロ
    グラムの実行中に取得して記録する配列要素設定漏れ依
    存関係記録部と、 データ・エラーが発見された場合に、当該データ・エラ
    ーに対応する変数に関し、当該変数の存在する文に対し
    て前記各依存関係のいずれかの依存関係にある文の集合
    を値誤りバグ潜在域として抽出する値誤りバグ潜在域獲
    得部とを有することを特徴とするプログラム・バグ潜在
    域抽出装置。
JP5004892A 1993-01-14 1993-01-14 プログラム・バグ潜在域抽出装置 Pending JPH06214825A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5004892A JPH06214825A (ja) 1993-01-14 1993-01-14 プログラム・バグ潜在域抽出装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5004892A JPH06214825A (ja) 1993-01-14 1993-01-14 プログラム・バグ潜在域抽出装置

Publications (1)

Publication Number Publication Date
JPH06214825A true JPH06214825A (ja) 1994-08-05

Family

ID=11596329

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5004892A Pending JPH06214825A (ja) 1993-01-14 1993-01-14 プログラム・バグ潜在域抽出装置

Country Status (1)

Country Link
JP (1) JPH06214825A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011113126A (ja) * 2009-11-24 2011-06-09 Fujitsu Ltd プログラムの解析装置及び解析方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011113126A (ja) * 2009-11-24 2011-06-09 Fujitsu Ltd プログラムの解析装置及び解析方法

Similar Documents

Publication Publication Date Title
US6430741B1 (en) System and method for data coverage analysis of a computer program
Korel et al. Application of Dynamic Slicing in Program Debugging.
KR950006619B1 (ko) 번역 코드 실행용의 개선된 에러 기록 방법 및 시스템
EP1636701B1 (en) An intermediate representation for multiple exception handling models
US6412109B1 (en) Method for optimizing java bytecodes in the presence of try-catch blocks
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US20010013043A1 (en) System and method for determining browser package and version compatibility of a web document
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US20100199269A1 (en) Program optimization device and program optimization method
JP4939973B2 (ja) 試験制御装置、試験制御方法及び試験制御プログラム
US20030088810A1 (en) Methods and apparatus for determining software component sizes associated with errors
JP2000081983A (ja) ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
JP6845429B2 (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
CN102207902B (zh) 用于分析包含校准值的软件的方法和设备
US20080028373A1 (en) Method and apparatus for performing conditional compilation
US5854925A (en) Automatic bug locator for automatically locating bugs through interaction with an operator
CN110928760B (zh) 一种嵌入式系统中的单元测试方法与装置
US7624381B1 (en) Portable detection of start and completion of object construction
Mahmud et al. Acid: an api compatibility issue detector for android apps
CN117828600A (zh) Android个人信息违规收集行为动态检测方法
EP1202171A2 (en) Compile method and program recording medium
JPH06214825A (ja) プログラム・バグ潜在域抽出装置
JPH06202905A (ja) クリティカルスライス・プログラムデバッグシステム
JP2000207246A (ja) デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体
JP4055197B2 (ja) プログラムに含まれる手続きの解析装置