JPH09305432A - バグ自動検出装置 - Google Patents

バグ自動検出装置

Info

Publication number
JPH09305432A
JPH09305432A JP8123086A JP12308696A JPH09305432A JP H09305432 A JPH09305432 A JP H09305432A JP 8123086 A JP8123086 A JP 8123086A JP 12308696 A JP12308696 A JP 12308696A JP H09305432 A JPH09305432 A JP H09305432A
Authority
JP
Japan
Prior art keywords
instruction
location
dependency
control
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.)
Granted
Application number
JP8123086A
Other languages
English (en)
Other versions
JP2816666B2 (ja
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.)
ATR TSUSHIN SYST KENKYUSHO KK
Original Assignee
ATR TSUSHIN SYST KENKYUSHO KK
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 ATR TSUSHIN SYST KENKYUSHO KK filed Critical ATR TSUSHIN SYST KENKYUSHO KK
Priority to JP8123086A priority Critical patent/JP2816666B2/ja
Priority to US08/781,796 priority patent/US5854925A/en
Publication of JPH09305432A publication Critical patent/JPH09305432A/ja
Application granted granted Critical
Publication of JP2816666B2 publication Critical patent/JP2816666B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3636Debugging of software by tracing the execution of the program

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 ダイナミックスライシング技術およびスタテ
ィックスライシング技術に比べてプログラムデバッグ作
業を容易にすることである。 【解決手段】 ステップS5では、異常点までプログラ
ムを再実行する。この場合に、正常点と異常点との間の
分割点に対応する制御フローを導出するとともに、エラ
ーに影響を与える変数およびその変数の分割点における
値を4つの依存関係に基づき導出する。ブログラマは、
制御フローの誤りや、エラーに影響を与える変数の値の
誤りや、分岐命令/ループ命令で使用される変数の値の
誤りを判断する(S7,S9,S11)。このような処
理を繰返し、正常点と異常点との間に最終的に残った命
令を、ステップS27では、バグと判断する。ステップ
S29では、正常点と異常点との間に、異常点と依存関
係を持つ命令が存在しない場合には、正常点と異常点と
の間に命令の漏れに関するバグが存在すると判断する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】バグ自動検出装置に関し、特
に、自らエラーの原因を把握し、プログラマとの対話を
通して、自動的にバグを検出することにより、プログラ
ム・デバッグ作業を容易にする手続型プログラムのバグ
自動検出装置に関する。
【0002】
【従来の技術】プログラムのテスト結果が仕様に合わな
い場合には、ソースプログラムテキスト内で、その原因
となっている部分を見つけ修正する必要がある。この原
因をバグと呼ぶ。プログラム内にバグがあると、変数に
誤った値が設定されて、制御の流れが変わったりする。
バグを検出する従来の技術としては、スタティックスラ
イシング技術やダイナミックスライシング技術がある。
スタティックスライシング技術は、たとえば、J.R.Lyle
and M.Weiser,“Automatic Program Bug Location by
Program Slicing,”The Second International Confere
nce on Computersand Applicationas, June 1987, pp.8
77-883.に開示されている。ダイナミックスライシング
技術は、たとえば、H.Agrawal, R.A.DeMillo and E.H.S
pafford,“Debugging with Dynamic Slicing and Backt
raking, ”SOFTWARE-PRACTICE ANDEXPERIENCE, Vol.23,
No.6, pp.589-616(June 1993 ). に開示されてい
る。このようなスタティックスライシング技術やダイナ
ミックスライシング技術は、変数値エラーに関して、プ
ログラム内のバグの存在範囲を限定するものである。こ
こで変数値エラーとは、ある実行時点において、ある変
数の値が誤っているエラーである。実行時点について説
明する。実行された命令の列を実行系列と呼ぶ。この実
行系列内の命令には、1から順に番号を付ける。これを
実行時点と呼ぶ。
【0003】スタティックスライシング技術は、ある変
数の値が誤っている場合に、その変数の値に影響を与え
る可能性のあるすべての命令を、プログラム全体の中か
ら抽出する技術である。抽出された命令をスタティック
スライスと呼ぶ。
【0004】ダイナミックスライシング技術は、ある入
力を与えてプログラムを実行した結果、ある変数の値が
誤っている場合に、その変数の値に実際に影響を与え
た、すべての実行された命令を、プログラム全体の中か
ら抽出する技術である。抽出された命令をダイナミック
スライスと呼ぶ。
【0005】図17は、ダイナミックスライシング技術
を利用したバグ検出装置を示す概略ブロック図である。
ダイナミックスライシング技術を利用したバグ検出装置
は、インストルメント部1、コンパイル・リンク部3お
よびプログラム実行制御部35を備える。プログラム実
行制御部35は、データ依存関係記憶部37、制御依存
関係記録部39およびダイナミックスライス表示部41
を含んでいる。インストルメント部1は、命令の間の依
存関係(データ依存関係および制御依存関係)を記録す
るために必要なコードをデバッグ対象のソースプログラ
ム17に埋込み、ソースプログラム19を作成する。す
なわち、ソースプログラム19は、インストルメントさ
れたものである。なお、コンパイラを改造して、インス
トルメント部1と同等の機能をオブジェクトコードに持
たせてもよい。コンパイル・リンク部3は、ソースプロ
グラム19をコンパイルおよびリンクし、実行可能プロ
グラム21を作成する。プログラム実行制御部35は、
実行可能プログラム21の実行を制御する。データ依存
関係記録部37は、命令の間のデータ依存関係を記録す
る。制御依存関係記録部39は、制御依存関係を記録す
る。ダイナミックスライス表示部41は、発見された変
数値エラーをもとに、エラーを引き起こした命令を起点
として、命令の間の依存関係を解析することにより、ダ
イナミックスライスを抽出して、プログラムテキストウ
ィンドウ43に表示する。
【0006】
【発明が解決しようとする課題】スタティックスライシ
ング技術では、スタティックスライスの中にバグが含ま
れていることは確かであるが、スタティックスライスで
は、実行されなかった命令など、エラーに関係しない余
分な命令も抽出してしまうという問題点がある。また、
スタティックスライシング技術では、プログラマは、抽
出されたスタティックスライスの中からシステムの他の
有効な支援もなしに独力でバグを見つけなければならな
いという問題点がある。
【0007】ダイナミックスライシング技術では、ダイ
ナミックスライスは、スタティックスライスよりも小さ
な集合となるが、エラーを引き起こした原因であるバグ
を含む命令がダイナミックスライスから洩れてしまう場
合があるという問題点がある。このような問題について
は、T.Shimomura,“Critical-Slice Based Bug-Locatin
g Strategy in Variable Value Erors, “Trans.IPS Ja
pan, Vol.33, No.4, April 1992, pp.501-511.に説明さ
れている。また、ダイナミックスライシング技術では、
スタティックスライシング技術と同様に、プログラマ
は、抽出されたダイナミックスライスの中からシステム
の他の有効な支援もなしに独力でバグを見つけなければ
ならないという問題点がある。
【0008】このように、スタティックスライシング技
術や、ダイナミックスライシング技術では、プログラマ
は、抽出されたスライスの中から、誤りの原因を推定
し、プログラム状態を調べるという作業を繰返しなが
ら、独力でバグを見つけなければならない。
【0009】この発明は、以上のような問題点を解決す
るためになされたもので、スタティックスライシング技
術や、ダイナミックスライシング技術に比べ、プログラ
ムデバッグ作業を容易にすることができるバグ自動検出
装置を提供することを目的とする。
【0010】
【課題を解決するための手段】本発明の請求項1に記載
のバグ自動検出装置は、手続型言語で記述されたプログ
ラムのバグを検出するためのものである。このバグ自動
検出装置は、テスト制御手段と、プログラム再実行手段
と、依存関係解析手段と、分割検証制御手段とを備えて
いる。
【0011】テスト制御手段は、プログラムを実行さ
せ、プログラムからの出力情報の中から誤りを操作者に
指摘させ、その誤りを出力した命令が存在する命令箇所
を記録する。プログラム再実行手段は、第1の命令箇所
までプログラムを再実行させる。依存関係解析手段は、
再実行の際に、第2の命令箇所と、第1の命令箇所との
間の第3の命令箇所を選択し、この第3の命令箇所に制
御を移行する原因となった命令箇所における命令および
その命令の実行結果を求める。また、依存関係解析手段
は、データ依存関係、制御依存関係、制御定義依存関係
および設定洩れ依存関係に基づき、誤りに影響を与える
変数およびその変数の第3の命令箇所における値を求め
る。第1の命令箇所は、誤りを出力した命令が存在する
命令箇所である。第2の命令箇所はプログラムにおい
て、最初に実行する命令が存在する命令箇所である。
【0012】分割検証制御手段は、第3の命令箇所に制
御が移行する原因となった命令の実行結果が誤っている
場合には、その制御を移行する原因となった命令の中で
使用されている変数の値が誤っているかどうかを、操作
者に判断させる。また、分割検証制御手段は、第3の命
令箇所に制御が移行する原因となった命令の実行結果が
正しい場合には、誤りに影響を与える変数の第3の命令
箇所における値が誤っているかどうかを操作者に判断さ
せる。
【0013】操作者が、第3の命令箇所に制御を移行す
る原因となった命令の中で使用されている変数の値に誤
りがあると判断した場合には、第3の命令箇所に制御が
移行する原因となった命令箇所を、第1の命令箇所とし
て、プログラム再実行手段および依存関係解析手段は処
理を行なう。操作者が、第3の命令箇所に制御が移行す
る原因となった命令の中で使用されている変数の値が正
しいと判断した場合には、その制御が移行する原因とな
った命令を、分割検証制御手段はバグと判断する。操作
者が、誤りに影響を与える変数の第3の命令箇所におけ
る値が誤っていると判断した場合には、その第3の命令
箇所を、第1の命令箇所として、プログラム再実行手段
および依存関係解析手段は処理を行なう。操作者が、誤
りに影響を与える変数の第3の命令箇所における値が正
しいと判断した場合には、その第3の命令箇所を、第2
の命令箇所として、プログラム再実行手段および依存関
係解析手段は処理を行なう。
【0014】プログラム再実行手段、依存関係解析手段
および分割検証制御手段による処理を繰返し、最終的
に、第1の命令箇所と、第2の命令箇所との間に存在す
る命令箇所における命令を、分割検証制御手段は、バグ
と判断する。プログラム再実行手段、依存関係解析手段
および分割検証制御手段による処理を繰返し、第1の命
令箇所と、第2の命令箇所との間に、第1の命令箇所
と、データ依存関係、制御依存関係、制御定義依存関係
または設定漏れ依存関係を有する命令箇所が存在しない
場合は、分割検証制御手段は、第1の命令箇所と第2の
命令箇所との間に、命令の漏れに関するバグが存在する
と判断する。
【0015】ある命令箇所より前で、ある命令箇所に存
在する命令で使用される変数を最後に定義した命令箇所
とある命令箇所とは、データ依存関係にある。分岐命令
またはループ命令が存在する命令箇所と、分岐命令の分
岐内またはループ命令のループ内のある命令箇所とは、
制御依存関係にある。分岐命令の分岐内またはループ命
令のループ内に、ある命令箇所より前で、ある命令箇所
に存在する命令で使用される変数を最後に定義した命令
箇所を含み、分岐命令の分岐外またはループ命令のルー
プ外にある命令箇所が存在する場合に、分岐命令または
ループ命令が存在する命令箇所と、ある命令箇所とは、
制御定義依存関係にある。ある命令箇所より前で、ある
命令箇所に存在する命令に用いる変数を最後に定義した
命令箇所が、分岐命令またはループ命令の前に存在し、
分岐命令またはループ命令の実行結果が変わると変数を
定義し、分岐命令の分岐外またはループ命令のループ外
にある命令箇所が存在する場合に、分岐命令またはルー
プ命令が存在する命令箇所と、ある命令箇所とは、設定
洩れ依存関係にある。
【0016】
【発明の実施の形態】図1は、本発明の実施の形態によ
るバグ自動検出装置を示す概略ブロック図である。図1
を参照して、実施の形態によるバグ自動検出装置は、イ
ンストルメント部1、コンパイル・リンク部3およびプ
ログラム実行制御部5を備える。プログラム実行制御部
5は、テスト制御部7およびデバッグ制御部9を含む。
デバッグ制御部9は、AP再実行部11、依存関係解析
部13および分割検証制御部15を含んでいる。
【0017】実施の形態によるバグ自動検出装置におい
て、デバッグ対象のプログラム言語としては、FORTRAN,
COBOL, Ada, Pascal, Cなどの一般の手続型言語を想定
している。以下においては、説明を簡単にするため、プ
ログラム内の命令は、代入命令、分岐命令、ループ命
令、手続呼出命令、入力命令および出力命令からなると
する。
【0018】実施の形態によるバグ自動検出装置の説明
に用いる用語について説明する。実行された命令の列を
実行系列と呼ぶ。実行系列内の命令には、1から順に番
号を付ける。これを実行時点と呼ぶ。デバッグ開始時に
おいては、実行開始時点(最初に実行する命令が存在す
る実行時点)を正常点とし、エラーの発生している実行
時点を異常点とする。
【0019】図2は、図1のバグ自動検出装置における
処理を説明するためのフローチャートである。図1およ
び図2を参照して、図1のバグ自動検出装置における処
理の概要について説明する。ステップS1では、テスト
実行制御部7は、実行可能プログラム21を実行し、そ
の結果をテストウィンドウ23に表示する。ステップS
3では、プログラマが、テストウィンドウ23に表示さ
れた出力の中からエラー箇所を指摘する。
【0020】ステップS5では、AP再実行部11は、
実行開始時点から異常点まで実行可能プログラム21を
再実行させる。また、ステップ5では、依存関係解析部
13が、正常点から異常点までの実行系列を二分し、そ
の分割点に対応する制御フローを導出する。ここで、制
御フローとは、分割点に制御が移行する原因となった実
行時点における命令およびその命令の実行結果である。
具体的には、制御フローとは、分岐命令とその実行結
果、または、ループ命令とその実行結果である。さら
に、ステップS5では、依存関係解析部13は、エラー
に影響を与える変数およびその変数の分割点における値
を4つの依存関係に基づき導出する。また、ステップS
5では、分割検証制御部15は、分割検証ウィンドウ3
1に、制御フロー、エラーに影響を与える変数およびそ
の変数の分割点における値を表示する。
【0021】ステップS7において、正常点と異常点と
の間に、異常点における、値の誤った変数と何らかの依
存関係を持つ命令が存在しない場合には、すなわち、正
常点と異常点との間に、異常点と何らかの依存関係を持
つ実行時点が存在しない場合には、ステップS21に進
む。そして、ステップS21では、分割検証制御部15
は、正常点と異常点との間に命令の漏れに関するバグが
存在すると判断する。すなわち、正常点と異常点との間
にある変数の値の設定が洩れているというバグが検出さ
れる。なぜなら、異常点において、ある変数wの値が誤
っているのにもかかわらず、正常点においては、その変
数wの値が正しく、かつ、正常点から異常点に至る任意
のパス上に変数wに値を設定する命令が存在しないため
である。
【0022】また、ステップS7において、分割点と異
常点との間に存在する実行時点が1つの場合には、ステ
ップS23に進む。そして、ステップS23では、分割
検証制御部15が、この1つになった実行時点に存在す
る命令をバグと判断する。
【0023】さらに、ステップS7において、正常点と
異常点との間に、異常点と何らかの依存関係を持つ実行
時点が存在し、かつ、正常点と異常点との間に、2以上
の実行時点がある場合には、ステップS9に進む。
【0024】ステップS9では、プログラマが、分割検
証ウィンドウ31に表示された制御フローが誤っている
か否かを判断する。ステップS9で、制御フローが正し
いと判断された場合には、ステップS11に進む。ステ
ップS11では、プログラマは、分割検証ウィンドウ3
1に表示されたエラーに影響を与える変数の値が誤って
いるか否かを判断する。ステップS11で、エラーに影
響を与える変数の値が誤っていると判断された場合に
は、ステップS13に進む。ステップS13では、分割
点を異常点とする。そして、ステップS5に進む。ステ
ップS11で、プログラマが、エラーに影響を与える変
数の値が正しいと判断した場合には、ステップS15に
進む。ステップS15では、分割点を正常点とする。そ
して、ステップS5に進む。
【0025】ステップS9で、プログラマが制御フロー
が誤っていると判断した場合には、ステップS17に進
む。ステップS17では、プログラマが、分岐命令また
はループ命令(以下、「分岐命令/ループ命令」と表わ
す)で使用される変数の値が誤っているか否かを判断す
る。ステップS17で、プログラマが、分岐命令/ルー
プ命令で使用されている変数の値が誤りと判断した場合
には、ステップS19に進む。ステップS19では、誤
っている分岐命令/ループ命令が存在する実行時点を異
常点とする。そして、ステップS5に進む。
【0026】ステップS5,S7,S9,S11および
S13までの処理、ステップS5,S7,S9,S11
およびS15までの処理、または、ステップS5,S
7,S9,S17およびS19までの処理を「分割検
証」と呼ぶ。このような分割検証を繰返すと、最終的に
は正常点と異常点との間に存在する実行時点が1つにな
る。この1つになった実行時点に存在する命令が、バグ
を含んでいる。
【0027】ステップS17で、プログラマが、分岐命
令/ループ命令で使用されている変数の値が誤っている
と判断した場合には、ステップS25に進む。そして、
ステップS25では、分割検証制御部15は、その分岐
命令/ループ命令をバグと判断する。
【0028】ステップS5において、依存関係解析部1
3が、エラーに影響を与え変数および変数の分割点にお
ける値を導出するときに用いる4つの依存関係について
簡単に説明する。この4つの依存関係は、データ依存関
係、制御依存関係、制御定義依存関係および設定洩れ依
存関係である。
【0029】図3は、データ依存関係を説明するための
図である。図3を参照して、t1およびt2は、実行時
点を示している。実行時点t2より前で、実行時点t2
に存在する命令で使用される変数wを最後に定義した命
令(定義命令w:=)が存在する実行時点t1と、実行
時点t2とは、データ依存関係にある。なお、このよう
な場合、実行時点t1の命令と実行時点t2の命令と
が、データ依存関係にあるともいう。このようなデータ
依存関係を以下のように表わす。
【0030】Def(t2,w)=t1 …<1> 図4は、制御依存関係を説明するための図である。図4
を参照して、分岐命令/ループ命令が存在する実行時点
t1と、分岐命令の分岐内またはループ命令のループ内
の実行時点t2とは、制御依存関係にある。このような
場合、実行時点t1の命令と実行時点t2の命令とが制
御定義依存関係にあるともいう。このような制御依存関
係を以下のように表わす。
【0031】Ctl(t2)=t1 …<2> 図5は、制御定義依存関係を説明するための図である。
図5を参照して、t1,t2,t3は、実行時点を示
す。分岐命令の分岐内またはループ命令のループ内に、
実行時点t3より前で、実行時点t3に存在する命令で
使用される変数を最後に定義した命令(定義命令w:
=)が存在する実行時点t2を含み、分岐命令の分岐外
またはループ命令のループ外に実行時点t3が存在する
場合に、分岐命令/ループ命令が存在する実行時点t1
と、実行時点t3とは、制御定義依存関係にある。この
ような場合、実行時点t1の命令と実行時点t3の命令
とが制御定義依存関係にあるともいう。このような制御
定義依存関係を次のように表わす。
【0032】 CtlDef(t3,w)=t1 …<3> 図6は、設定洩れ依存関係を説明するための図である。
図6を参照して、t1,t2,t3は、実行時点を示し
ている。実行時点t3より前で、実行時点t3に存在す
る命令に用いる変数wを最後に定義した命令(定義命令
w:=)が存在する実行時点t1が、分岐命令/ループ
命令が存在する実行時点t2の前に存在し、かつ、実行
時点t2での分岐命令/ループ命令の実行結果が変わる
と変数wを定義し、かつ、分岐命令の分岐外またループ
命令のループ外に実行時点t3が存在する場合に、分岐
命令/ループ命令が存在する実行時点t2と、実行時点
t3とは、設定洩れ依存関係にある。このような場合、
実行時点t2の命令と実行時点t3の命令とが設定洩れ
依存関係にあるともいう。このような設定洩れ依存関係
を以下のように表わす。
【0033】 OmsCond(t3,w)=t2 …<4> なお、Def(t2,w)を実行時点t2におけるデー
タ依存関係、Ctl(t2)を実行時点t2における制
御依存関係、CtlDef(t3,w)を実行時点t3
における制御定義依存関係、OmsCond(t3,
w)を実行時点t3における設定洩れ依存関係と呼ぶこ
ともある。また、制御定義依存関係は、分岐命令または
ループ命令の実行結果の誤りにより、変数に値を誤って
設定するという影響を与える。設定洩れ依存関係は、分
岐命令またはループ命令の実行結果の誤りにより、変数
の値の設定洩れを引起こすという影響を与える。
【0034】次に、図1のインストルメント部1につい
て詳しく説明する。インストルメント部1は、実行可能
プログラム21内の各命令の実行時に、テスト制御部
7、AP再実行部11および依存関係解析部13に記述
した処理を実行するために必要なコードをソースプログ
ラム17内に埋込み、ソースプログラム19を作成す
る。すなわち、ソースプログラム19はインストルメン
トされたものである。
【0035】図1のコンパイル・リンク部3について説
明する。コンパイル・リンク部3は、ソースプログラム
19をコンパイルおよびリンクし、実行可能プログラム
21を作成する。
【0036】図1のプログラム実行制御部5のテスト制
御7について詳しく説明する。テスト制御部7は、実行
可能プログラム21を実行し、実行可能プログラム21
への入力および実行可能プログラム21からの出力をテ
ストウィンドウ23に表示する。そして、出力内容の中
の誤っている部分(エラー箇所)をプログラマがマウス
で選択したときに、テスト制御部7は、選択された部分
の出力を行なった出力命令、変数名、その変数の値およ
び実行時点をエラー情報25として記録する。
【0037】図1のプログラム実行制御部5に含まれる
デバッグ制御部9のAP再実行部11について詳しく説
明する。AP再実行部11は、エラー情報25として記
録されたエラーの発生した実行時点(異常点)まで、実
行可能プログラム21を再実行させる。そして、AP再
実行部11は、再実行された命令の列を(実行系列)
を、実行系列ウィンドウ27に表示する。
【0038】図1のプログラム制御部5に含まれるデバ
イス制御部9の依存関係解析部13について詳しく説明
する。依存関係解析部13は、実行可能プログラム21
の再実行中に、命令の間の各種の依存関係(データ依存
関係、制御依存関係、制御定義依存関係、設定洩れ依存
関係)を記録しながら、分割検証に必要となる分割検証
情報29を生成する。
【0039】依存関係解析部13が、実行可能プログラ
ム21の再実行時に記録する情報について説明する。分
岐命令あるいはループ命令を実行する場合には、その実
行時点pおよびその付属情報をスタックCurrent
Ctlにプッシュダウンする。ここで、付属情報は、分
岐命令あるいはループ命令を実行する場合において、そ
の命令、実行結果、使用した変数の集合およびそれらの
変数の値である。分岐文あるいはループ文の実行を終了
する場合には、スタックCurrentCtlを必要な
だけポップアップする。実行時点cにおけるスタックC
urrentCtl内の実行時点だけからなるスタック
(付属情報を除外したもの)を制御依存関係Ctl
(c)で表わす。
【0040】代入命令を実行し、変数wを定義する場合
には、その実行時点を、LastDef(w)に設定
し、実行時点dにおける制御依存関係Ctl(d)を、
LastDefCtl(w)に設定する。
【0041】分岐命令あるいはループ命令を実行する実
行時点pにおいて、w∈OmsVars(p)となる変
数wに対して、実行時点pをOmsCondCandi
dates(w)に追加する。OmsVars(p)
は、実行時点pにおける制御移行が変わると、定義され
る(値の設定される)可能性のある変数の集合である。
これは、分岐文のthen節、else節、あるいは、
ループ文内で定義される可能性のある変数の集合であ
り、分岐命令あるいはループ命令ごとに、インストルメ
ント部1で予め求めておく。
【0042】代入命令を実行し、変数wを定義する場合
には、OmsCondCandidetes(w)を空
集合φにする。
【0043】依存関係解析部13が行なう分割点の決定
について説明する。正常点と異常点とを二分する実行時
点の近傍で、分岐命令やループ命令のネストレベルの小
さい実行時点を分割点として選択する。
【0044】依存関係解析部13が行なう、分割点に対
応する制御フローの導出について説明する。分割点iに
制御が移行する原因となった実行時点における命令(分
岐命令またはループ命令)およびその命令の実行結果、
すなわち、制御フローは、分割点iにおけるスタックC
urrentCtlから得られる。また、分割点iに制
御が移行する原因となった命令(分岐命令またはループ
命令)で使用された変数とその変数の値も、分割点iに
おけるスタックCurrentCtlから得られる。
【0045】依存関係解析部13が行なう、エラーに影
響を与える変数およびその変数の分割点における値の導
出について説明する。まず、分割点iに対して、i≦j
となる各実行時点jと、各実行時点jで使用された各変
数wに関して、以下のようにして、データ依存関係De
f(j,w)、制御定義依存関係CtlDef(j,
w)、設定洩れ依存関係OmsCond(j,w)を求
める。
【0046】 Def(j,w):=LastDef(w) …<5> CtlDef(j,w):=LastDefCtl(w)−Ctl(j) …<6> OmsCond(j,w):=OmsCondCandidates(w)− Ctl(j) …<7> データ依存関係Def(j,w)<iならば、変数wと
その変数の値を実行時点jに付随するリンク情報Lin
kInf(j)に記録する。次に、各実行時点k∈De
f(j,w)∪CtlDef(j,w)∪OmsCon
d(j,w)に対して、i≦kならば、実行時点kに付
随するリンク情報LinkInf(k)を、実行時点j
に付随するリンク情報LinkInf(j)に追加す
る。分割点iにおける検証すべき変数とその変数の値
は、異常点におけるリンク情報から得られる。なお、C
tlは、CtlDefおよびOmsCondを定義する
ために用いる。
【0047】図1の分割検証制御部15について詳しく
説明する。分割検証制御部は、依存関係解析部13で生
成された分割検証情報(分割点、分割点に対応する制御
フロー、エラーに影響を与える変数およびエラーに影響
を与える変数の分割点における値)を分割検証ウィンド
ウ31に表示して、プログラマとの対話を行ない、バグ
の潜在する範囲を絞り込んでいき、最後には、バグを検
出して、モニタウィンドウ33に表示する。
【0048】図7は、実施の形態によるバック自動検出
装置、ダイナミックスライシング技術(DS)およびス
タティックスライシング技術(SS)が、それぞれ用い
る依存関係を比較して説明するための図である。図7を
参照して、(1)〜(6)は、実行時点を示し、[1]
〜[7]は、命令番号を示している。また、命令番号
[1]の命令(w:=)は、定義命令を示し、命令番号
[2]の命令(if x>1 then)は分岐命令を
示し、命令番号[3]の命令(y:=)は、定義命令を
示し、命令番号[4]の命令(if y<3 the
n)は分岐命令を示し、命令番号[5]の命令(z:
=)は定義命令を示し、命令番号[6]の命令(w:
=)は定義命令を示し、命令番号[7]の命令(put
(w))は出力命令を示している。
【0049】ダイナミックスライシング技術(DS)
は、データ依存関係Defだけを用いている。したがっ
て、エラーを引き起こした原因であるバグを含む命令が
洩れてしまうおそれがある。スタティックスライシング
技術(SS)は、2つの制御依存関係Ctlおよび3つ
のデータ依存関係Defを用いている。このように沢山
の命令を抽出するため、エラーに関係ない余分な命令を
抽出してしまう。実施の形態によるバグ自動検出装置で
は、2つのデータ依存関係Defと1つの設定洩れ依存
関係OmsCondを用いる。このように、実施の形態
によるバグ自動検出装置では、ダイナミックスライシン
グ技術(DS)およびスタティックスライシング技術
(SS)と比較して、抽出する命令が少なすぎもしない
し、多すぎもしない。なお、図に示したプログラムは一
例にすぎず、このプログラムの中には制御定義依存関係
CtlDefは存在していない。
【0050】以上のように、実施の形態によるバグ自動
検出装置では、バグ自動検出装置が、プログラマに代わ
ってエラーの原因を把握し、プログラマとの対話を通し
て、バグ自動検出装置が自動的にバグを検出する。この
ため、ダイナミックスライシング技術やスタティックス
ライシング技術に比べて、プログラムデバッグ作業が容
易となる。
【0051】さらに、実施の形態によるバグ自動検出装
置では、制御定義依存関係CtlDefおよび設定洩れ
依存関係OmsCondを用いている。このため、エラ
ーに関係しない余分な命令を抽出してしまうという問題
と、エラーを引き起こした原因であるバグを含む命令の
抽出が洩れてしまうという問題とを回避できる。
【0052】以下、先行技術文献(H.Agrawal, R.A. De
Millo and E.H. Spafford,“Debugging with Dynamic S
licing and Backtraking, ”SOFTWARE--PRACTICE AND E
XPERIENCE, Vol.23, No.6, pp.589-616 (June 1993
))から引用したC言語で記述されたプログラムtr
iangleを用いて、図1のバグ自動検出装置による
デバッグの一例を説明する。
【0053】図8は、図1のバグ自動検出装置によるデ
バッグの一例を説明するために用いるプログラムtri
angleのソーステキストを示す図である。なお、図
中、左側の番号は、命令番号である。このプログラムt
riangleは、N個の三角形の3辺の長さを読込
み、各三角形の面積を計算した上で、それらの合計su
mを出力する。各三角形はまず正(equilateral ),二
等辺(isosceles ),直角(right ),不等辺(scalen
e )に分類され、次に、対応する公式を用いて各三角形
の面積が求められる。
【0054】図1を参照して、まず、テスト制御部7
が、プログラムtriangleを、テストウィンドウ
23上で実行する。図9は、図1のテストウィンドウ2
3の表示例を示す図である。図9を参照して、2つの三
角形の3辺の長さとして、プログラマが3,3,3と
6,5,4とを入力する。各三角形の面積は3.90,
9.92となるので、正しい出力は13.82である。
しかし、プログラム内にバグがあるため、誤った値1
3.90が出力される。プログラマは、この誤った値を
マウスで選択し、Specifyボタンをクリックして
誤った値を出力した命令と変数名を確認した後、Con
firmボタンをクリックする。図1を参照して、テス
ト制御部7は、プログラマによて選択された、誤った出
力を行なった出力命令(printf(“Sum of
areas of the %d triangle
s is %.2f.\n”,N,sum);),変数
名(sum),値(13.90),および,実行時点
(39)をエラー情報25として記録する。
【0055】次に、AP再実行部11は、エラー情報2
5として記録されたエラーの発生した実行時点39ま
で、実行可能プログラム21を再実行させる。そして、
実行系列(実行された命令の列)を実行系列ウィンドウ
27に表示する。図10は、図1の実行系列ウィンドウ
27の表示例を示す図である。図10を参照して、実行
された各命令の実行時点は( )内に表示している。各
命令の直前にある数字は、図8のソースプログラム上で
の各命令の番号を表わしている。この実行系列ウィンド
ウでは、実行された命令の他に、入力されたデータも確
認することができる。
【0056】正常点の前には、「Correct Fl
ow Point Line(Before)」なる表
示をしている。分割点の前には、「Division
Point Line(Before)」なる表示をし
ている。異常点の前には、「Wrong Flow P
oint Line」なる表示をしている。
【0057】図1および図10を参照して、依存関係解
析部13は、分割点として実行時点26を選択し、実行
可能プログラム21の再実行中に、命令の間の各種の依
存関係を記録しながら、分割検証に必要となる分割検証
情報を生成する。分割点26における制御フローは、分
割点26におけるスタックCurrentCtlから得
られる。分割点26におけるスタックCurrentC
tlの内容は、実行時点15において、ループ命令“w
hile(i<N)”を実行するときに、スタックCu
rrentCtlにプッシュダウンされた内容である。
このため、分割点26におけるスタックCurrent
Ctlの内容は、{(実行時点15,“22 whil
e(i<N)”,True(真),i=0,N=2)}
である。
【0058】図11は、エラーに影響を与える変数およ
びその変数の分割点26における値を求めるために必要
な、命令の間の依存関係(データ依存関係Def,制御
定義依存関係CtlDef,設定洩れ依存関係OmsC
ond)を示す図である。なお、図11では、エラーに
影響を与える変数およびその変数の分割点26における
値を求めるために必要な依存関係のみを示している。ま
た、図10と同じ表示は、同じ意味である。以下、図1
1を参照して、エラーに影響を与える変数およびその変
数の分割点26における値を求めるために必要な処理に
ついて説明する。なお、その説明では、エラーに影響を
与える変数およびその変数の分割点26における値を求
めるために最小限必要な処理のみを抜粋している。
【0059】第1の処理について説明する。実行時点2
4を実行するときに、LastDef(sum)=24
を設定する。第2の処理について説明する。実行時点2
5を実行するときに、LastDef(i)=25を設
定する。
【0060】第3の処理について説明する。分割点26
に対して、26≦jとなる各実行時点jを実行するとき
には、そこで使用された各変数wに関して、データ依存
関係Def(j,w),制御定義依存関係CtlDef
(j,w)、設定洩れ依存関係OmsCond(j,
w)を求める。実行時点26を実行するときには、デー
タ依存関係Def(26,i)=LastDef(i)
=25となる。また、データ依存関係Def(26,
i)=25<26より、リンク情報LinkInf(2
6)={i=1}となる。ここでは、ループ命令を実行
するので、実行時点26およびその付属情報をプッシュ
ダウンして、スタックCurrentCtl={(実行
時点15,“22 while(i<N)”,True
(真),i=0,N=2),(実行時点26,“22
while(i<N)”,True(真),i=1,N
=2)}となる。第4の処理について説明する。実行時
点36を実行するときには、データ依存関係Def(3
6,sum)=Last Def(sum)=24とな
る。また、データ依存関係Def(36,sum)=2
4<26より、リンク情報LinkInf(36)=
{sum=3.897114}となる。ここでは、代入
命令を実行するので、新たにLastDef(sum)
=36と設定し、制御依存関係Ctl(36)をLas
tDefCtl(sum)に設定して、LastDef
Ctl(sum)={実行時点15,実行時点26}と
なる。
【0061】第5の処理について説明する。実行点38
を実行するときには、ループ命令が実行され、実行時点
38における制御移行が変わると、変数sumが定義さ
れる可能性があるため(OmsVars(38)={s
um,i,a_sqr,b_sqr,…}であるため)
OmsCondCandidates(sum)={3
8}となる。また、実行時点38の実行を終了するとき
には、ループ文の実行が終了するので、スタックCur
rentCtl=φとなる。
【0062】第6の処理について説明する。実行時点3
9を実行するときには、エラーを引き起こした出力命令
が実行され、データ依存関係Def(39,sum)=
LastDef(sum)=36となる。また、制御定
義依存関係CtlDef(39,sum)=LastD
efCtl(sum)−Ctl(39)={15,2
6}−φ={15,26}となる。さらに、設定洩れ依
存関係OmsCond(39,sum)=OmsCon
dCandidates(sum)−Ctl(39)=
{38}−φ={38}となる。さらに、Def(3
9,sum)∪CtlDef(39,sum)∪Oms
Cond(39,sum)={36}∪{15,26}
∪{38}={15,26,36,38}であり、分割
点26≦kとなる実行時点kに付随するリンク情報Li
nkInf(k)を、実行時点39に付随するリンク情
報LinkInf(39)に追加すると、LinkIn
f(39)=LinkInf(26)∪LinkInf
(36)∪LinkInf(38)={i=1,sum
=3.897114}となる。なお、割愛するが、リン
ク情報LinkInf(38)からは、新たに追加する
変数が存在しないことがわかっている。
【0063】以上のような第1〜第6の処理を行なうこ
とにより、エラーに影響を与える変数およびその変数の
分割点26における値は、変数i=1と、変数sum=
3.897114であることがわかる。
【0064】図1を参照して、分割検証制御部15は、
生成された分割検証情報(分割点,分割点に対応する制
御フロー,エラーに影響を与える変数およびその変数の
分割点における値)を、分割検証ウィンドウ31に表示
する。図12は、1回目の分割検証における分割検証ウ
ィンドウ31(図1)の表示例を示す図である。ここ
で、「Correct Flow Point(bef
ore 1)」なる表示の下の欄には、分割点26に対
応する制御フローが表示されている。また、「Divi
sion Point(before 26)」なる表
示の下の欄には、分割点および分割点に存在する命令が
表示されている。さらに、「Flow Data」なる
表示の下の欄には、エラーに影響を与える変数およびそ
の変数の分割点における値が表示されている。図1およ
び図12を参照して、分割点26までに、ループ文の1
回目の繰返し処理、すなわち、1番目の三角形の面積の
計算が完了しており、変数i=1,変数sum=3.8
97114の値は正しい。プログラマがOKをマウスで
選択し、Confirmボタンをクリックすると(O
K,NGのいずれも選択されていない場合には、OKと
みなす)、分割検証制御部15は、この分割点を正常点
として設定し、AP再実行部11に制御を渡して、正常
点から異常点までの間に存在するバグを検出するため
に、分割検証を続行する。ここで、注目したいのが、変
数i,sum以外の変数class,a_sqr,b_
sqr,c_sqr,area,sなどの値をこの時点
において調べる必要がないことである。1回目の分割検
証における分割検証ウィンドウにおいて、Confir
mボタンをクリックすると、2回目の分割検証における
分割検証ウィンドウに変わる。
【0065】図13は、2回目の分割検証における分割
検証ウィンドウ31(図1)の表示例を示す図である。
ここで、「Correct Flow Point(b
efore 26)」なる表示の下の欄には、分割点3
4に対応する制御フローが表示されている。また、「D
ivision Point(before 34)」
なる表示の下の欄は、分割点および分割点に存在する命
令を表示している。さらに、「Flow Data」な
る表示の下の欄は、エラーに影響を与える変数およびそ
の変数の分割点30における値を表示している。図13
を参照して、2回目の分割検証では、2番目の三角形の
面積計算の処理途中に分割点が取られている。ここで
は、エラーに影響を与える変数classの値righ
tが誤っている(正しい値はscalene)。そこ
で、NGを選択して、Confirmボタンをクリック
する。そして、2回目の分割検証における分割検証ウィ
ンドウが3回目の分割検証における分割検証ウィンドウ
に変わる。
【0066】図14は、3回目の分割検証における分割
検証ウィンドウ31(図1)の表示例を示す図である。
ここで、「Correct Flow Point(b
efore 26)」なる表示の下の欄には、分割点3
0に対応する制御フローが表示されている。また、「D
ivision Point(before 30)」
なる表示の下の欄は、分割点および分割点に存在する命
令が表示されている。さらに、「Flow Data」
なる表示の下の欄は、エラーに影響を与える変数および
その変数の分割点30における値が表示されている。図
14を参照して、エラーに影響を与える変数b_sqr
の値20が誤っている(正しい値は25)。そこで、N
Gを選択して、Confirmボタンをクリックする。
そして、3回目の分割検証における分割検証ウィンドウ
は4回目の分割検証における分割検証ウィンドウに変わ
る。ここで、3回目の分割検証における分割検証ウィン
ドウでは、制御フローに対してOKしか表示されていな
い。これは、1回目と2回目の分割検証で既にOKとプ
ログラマによって判定済みであるためである。
【0067】このような分割検証を繰返し、5回目の分
割検証において、分割検証制御部15は、自動的に命令
番号24の代入命令をバグとして検出する。図15は、
バグを検出したモニタウィンドウ33(図1)の表示例
を示す図である。図15を参照して、図9のテストウィ
ンドウに誤った値13.90が表示されたのは、辺bの
長さの平方が正しく計算されていなかったためである。
【0068】図16は、4回目の分割検証における実行
系列ウィンドウ27(図1)の表示例を示す図である。
なお、図10と同一の表示は同一の意味である。図16
を参照して、注目したいのは、正常点から異常点の間に
4つの命令だけしか存在しないことである。プログラマ
は、この範囲内に何らかのバグが必ず存在することを知
っているため、分割検証の最後のステップ(回)までい
かなくても、バグを発見することが可能である。
【0069】以上のように、実施の形態によるバグ自動
検出装置では、バグ自動検出装置が提示する、制御フロ
ーや変数の値が正しいかどうかをOK(正しい),ある
いは、NG(誤っている)で回答することを繰返すだけ
で、バグ自動検出装置がバグを含む命令の存在箇所や命
令の記述洩れのある範囲を指摘する。
【0070】
【発明の効果】本発明の請求項1に記載のバグ自動検出
装置では、バグ自動検出装置が、プログラマに代わって
エラーの原因を把握し、プログラマとの対話を通して、
バグ自動検出装置が、自動的にバグを検出する。このた
め、ダイナミックスライシング技術やスタティックスラ
イシング技術に比べて、プログラムデバッグ作業が容易
となる。
【0071】さらに、本発明の請求項1に記載のバグ自
動検出装置では、制御定義依存関係および設定洩れ依存
関係を用いている。このため、エラーに関係しない余分
な命令を抽出してしまうという問題と、エラーを引き起
こした原因であるバグを含む命令の抽出が洩れてしまう
という問題とを回避できる。
【図面の簡単な説明】
【図1】本発明の実施の形態によるバグ自動検出装置を
示す概略ブロック図である。
【図2】図1のバグ自動検出装置における処理を説明す
るためのフローチャートである。
【図3】データ依存関係を説明するための図である。
【図4】制御依存関係を説明するための図である。
【図5】制御定義依存関係を説明するための図である。
【図6】設定洩れ依存関係を説明するための図である。
【図7】図1のバグ自動検出装置、ダイナミックスライ
シング技術およびスタティックスライシング技術が、そ
れぞれ用いる依存関係を比較して説明するための図であ
る。
【図8】図1のバグ自動検出装置によるデバッグの一例
を説明するために用いるプログラムのtriangle
のソーステキストを示す図である。
【図9】図1のテストウィンドウの表示例を示す図であ
る。
【図10】1回目の分割検証における実行系列ウィンド
ウ(図1)の表示例を示す図である。
【図11】エラーに影響を与える変数およびその変数の
分割点における値を求めるために必要な、命令の間の依
存関係を示す図である。
【図12】1回目の分割検証における分割検証ウィンド
ウ(図1)の表示例を示す図である。
【図13】2回目の分割検証における分割検証ウィンド
ウ(図1)の表示例を示す図である。
【図14】3回目の分割検証における分割検証ウィンド
ウ(図1)の表示例を示す図である。
【図15】バグを検出したモニタウィンドウ(図1)の
表示例を示す図である。
【図16】4回目の分割検証における実行系列ウィンド
ウ(図1)の表示例を示す図である。
【図17】ダイナミックスライシング技術を利用したバ
グ検出装置を示す概略ブロック図である。
【符号の説明】
1 インストルメント部 3 コンパイル・リンク部 5,35 プログラム実行制御部 7 テスト制御部 9 デバッグ制御部 11 AP再実行部 13 依存関係解析部 15 分割検証制御部 17,19 ソースプログラム 21 実行可能プログラム 23 テストウィンドウ 25 エラー情報 27 実行系列ウィンドウ 29 分割検証情報 31 分割検証ウィンドウ 33 モニタウィンドウ 37 データ依存関係記録部 39 制御依存関係記録部 41 ダイナミックスライシング表示部 43 プログラムテストウィンドウ

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 手続型言語で記述されたプログラムのバ
    グを検出するためのバグ自動検出装置であって、 前記プログラムを実行させ、前記プログラムからの出力
    情報の中から誤りを操作者に指摘させ、その誤りを出力
    した命令が存在する命令箇所を記録するテスト制御手
    段、 第1の命令箇所まで前記プログラムを再実行させるプロ
    グラム再実行手段と、 前記再実行の際に、第2の命令箇所と、前記第1の命令
    箇所との間の第3の命令箇所を選択し、この第3の命令
    箇所に制御が移行する原因となった命令箇所における命
    令およびその命令の実行結果を求めるとともに、データ
    依存関係、制御依存関係、制御定義依存関係および設定
    洩れ依存関係に基づき、前記誤りに影響を与える変数お
    よびその変数の前記第3の命令箇所における値を求める
    依存関係解析手段とを備え、 前記第1の命令箇所は、前記誤りを出力した命令が存在
    する命令箇所であり、 前記第2の命令箇所は、前記プログラムにおいて、最初
    に実行する命令が存在する命令箇所であり、 前記バグ自動検出装置は、 前記第3の命令箇所に制御が移行する原因となった命令
    の実行結果が誤っている場合には、その制御が移行する
    原因となった命令の中で使用されている変数の値が誤っ
    ているかどうかを、前記操作者に判断させ、前記第3の
    命令箇所に制御が移行する原因となった命令の実行結果
    が正しい場合には、前記誤りに影響を与える変数の前記
    第3の命令箇所における値が誤っているかどうかを前記
    操作者に判断させる分割検証制御手段をさらに備え、 前記操作者が、前記第3の命令箇所に制御が移行する原
    因となった命令の中で使用されている変数の値に誤りが
    あると判断した場合に、前記第3の命令箇所に制御が移
    行する原因となった命令箇所を、前記第1の命令箇所と
    して、前記プログラム再実行手段および前記依存関係解
    析手段は処理を行ない、 前記操作者が、前記第3の命令箇所に制御が移行する原
    因となった命令の中で使用されている変数の値が正しい
    と判断した場合には、その制御が移行する原因となった
    命令を、前記分割検証制御手段はバグと判断し、 前記操作者が、前記誤りに影響を与える変数の前記第3
    の命令箇所における値が誤っていると判断した場合に
    は、その第3の命令箇所を、前記第1の命令箇所とし
    て、前記プログラム再実行手段および前記依存関係解析
    手段は処理を行ない、 前記操作者が、前記誤りに影響を与える変数の前記第3
    の命令箇所における値が正しいと判断した場合には、そ
    の第3の命令箇所を、前記第2の命令箇所として、前記
    プログラム再実行手段および前記依存関係解析手段は処
    理を行ない、 前記プログラム再実行手段、前記依存関係解析手段およ
    び前記分割検証制御手段による処理を繰返し、最終的
    に、前記第1の命令箇所と、前記第2の命令箇所との間
    に存在する命令箇所における命令を、前記分割検証制御
    手段は、バグと判断し、 前記プログラム再実行手段、前記依存関係解析手段およ
    び前記分割検証制御手段による処理を繰返し、前記第1
    の命令箇所と、前記第2の命令箇所との間に、前記第1
    の命令箇所と、データ依存関係、制御依存関係、制御定
    義依存関係または設定漏れ依存関係を有する命令箇所が
    存在しない場合は、前記分割検証制御手段は、前記第1
    の命令箇所と前記第2の命令箇所との間に、命令の漏れ
    に関するバグが存在すると判断し、 ある命令箇所より前で、前記ある命令箇所に存在する命
    令で使用される変数を最後に定義した命令箇所と前記あ
    る命令箇所とは、データ依存関係にあり、 分岐命令またはループ命令が存在する命令箇所と、前記
    分岐命令の分岐内または前記ループ命令のループ内のあ
    る命令箇所とは、制御依存関係にあり、 分岐命令の分岐内またはループ命令のループ内に、ある
    命令箇所より前で、前記ある命令箇所に存在する命令で
    使用される変数を最後に定義した命令箇所を含み、前記
    分岐命令の分岐外または前記ループ命令のループ外に前
    記ある命令箇所が存在する場合に、前記分岐命令または
    ループ命令が存在する命令箇所と、前記ある命令箇所と
    は、制御定義依存関係にあり、 ある命令箇所より前で、前記ある命令箇所に存在する命
    令に用いる変数を最後に定義した命令箇所が、分岐命令
    またはループ命令の前に存在し、前記分岐命令またはル
    ープ命令の実行結果が変わると前記変数を定義し、前記
    分岐命令の分岐外またはループ命令のループ外に前記あ
    る命令箇所が存在する場合に、前記分岐命令またはルー
    プ命令が存在する命令箇所と、前記ある命令箇所とは、
    設定洩れ依存関係にある、バグ自動検出装置。
JP8123086A 1996-05-17 1996-05-17 バグ自動検出装置 Expired - Lifetime JP2816666B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP8123086A JP2816666B2 (ja) 1996-05-17 1996-05-17 バグ自動検出装置
US08/781,796 US5854925A (en) 1996-05-17 1997-01-10 Automatic bug locator for automatically locating bugs through interaction with an operator

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8123086A JP2816666B2 (ja) 1996-05-17 1996-05-17 バグ自動検出装置

Publications (2)

Publication Number Publication Date
JPH09305432A true JPH09305432A (ja) 1997-11-28
JP2816666B2 JP2816666B2 (ja) 1998-10-27

Family

ID=14851867

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8123086A Expired - Lifetime JP2816666B2 (ja) 1996-05-17 1996-05-17 バグ自動検出装置

Country Status (2)

Country Link
US (1) US5854925A (ja)
JP (1) JP2816666B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094753A (ja) * 2005-09-29 2007-04-12 Hitachi Ltd ロジック抽出支援装置
WO2017168560A1 (ja) * 2016-03-29 2017-10-05 三菱電機株式会社 開発支援装置及び開発支援方法

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6094529A (en) * 1995-09-19 2000-07-25 Jeffries; Robin Method, apparatus and computer program product for linking stack messages to relevant information
US6179491B1 (en) * 1997-02-05 2001-01-30 International Business Machines Corporation Method and apparatus for slicing class hierarchies
US7013457B2 (en) * 2001-07-26 2006-03-14 Springsoft, Inc. Prioritized debugging of an error space in program code
US6928449B2 (en) * 2001-10-18 2005-08-09 Sun Microsystems, Inc. Mechanism for facilitating backtracking
CA2408457A1 (en) * 2002-10-17 2004-04-17 Ibm Canada Limited-Ibm Canada Limitee Collection and detection of differences of values of expressions/variables when debugging a computer process
US20050038832A1 (en) * 2003-08-14 2005-02-17 International Business Machines Corporation Application error recovery using solution database
US7028494B2 (en) * 2003-08-22 2006-04-18 Carrier Corporation Defrosting methodology for heat pump water heating system
JP2005222108A (ja) * 2004-02-03 2005-08-18 Matsushita Electric Ind Co Ltd バグ分析方法および装置
US7788539B2 (en) * 2006-07-12 2010-08-31 International Business Machines Corporation Method and system to debug a command
US20080196012A1 (en) * 2007-02-12 2008-08-14 Panaya Ltd. System and methods for static analysis of large computer programs and for presenting the results of the analysis to a user of a computer program
US8612954B2 (en) * 2009-08-17 2013-12-17 International Business Machines Corporation Fine slicing: generating an executable bounded slice for program
US8583965B2 (en) 2011-06-21 2013-11-12 International Business Machines Corporation System and method for dynamic code analysis in presence of the table processing idiom

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161216A (en) * 1989-03-08 1992-11-03 Wisconsin Alumni Research Foundation Interprocedural slicing of computer programs using dependence graphs

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094753A (ja) * 2005-09-29 2007-04-12 Hitachi Ltd ロジック抽出支援装置
WO2017168560A1 (ja) * 2016-03-29 2017-10-05 三菱電機株式会社 開発支援装置及び開発支援方法
JP6289783B1 (ja) * 2016-03-29 2018-03-07 三菱電機株式会社 開発支援装置及び開発支援方法

Also Published As

Publication number Publication date
JP2816666B2 (ja) 1998-10-27
US5854925A (en) 1998-12-29

Similar Documents

Publication Publication Date Title
JP2816666B2 (ja) バグ自動検出装置
US6658649B1 (en) Method, apparatus and article of manufacture for debugging a user defined region of code
Zhang et al. Locating faults through automated predicate switching
Gupta et al. An approach to regression testing using slicing.
JP2765888B2 (ja) プログラム生成方法および実行方法
US8627290B2 (en) Test case pattern matching
Korel et al. Application of Dynamic Slicing in Program Debugging.
Rubey Quantitative aspects of software validation
US20060041864A1 (en) Error estimation and tracking tool for testing of code
US20090183141A1 (en) Application program development assisting method, program, and information processing apparatus
US7401322B1 (en) Software debugging tool
US7178135B2 (en) Scope-based breakpoint selection and operation
US20030088810A1 (en) Methods and apparatus for determining software component sizes associated with errors
Milliken et al. Beyond pip install: Evaluating llm agents for the automated installation of python projects
CN102207902B (zh) 用于分析包含校准值的软件的方法和设备
CN107247663B (zh) 一种冗余变异体识别方法
KR102694010B1 (ko) Cfg 타당성 검사용 테스트 장치 및 그 방법
US20030018957A1 (en) Debugger monitor with anticipatory highlights
JPH11224211A (ja) ソフトウェア検査支援装置
Matthews et al. Automatic relative debugging of OpenMP programs
JP4200534B2 (ja) データフロー異常検査装置
JPH01177165A (ja) 配列の定義/引用関係検査方式
JP7760317B2 (ja) ソフトウェア不具合分析装置及びソフトウェア不具合分析方法
JP3394813B2 (ja) テストカバレジ測定方法
JPS62216047A (ja) リグレツシヨン防止用テストケ−スの決定方式

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19980714