トップ :: G 物理学 :: G06 計算;計数

【発明の名称】 バグ検出システム
【発明者】 【氏名】野田 敏晴
【課題】データを共有する複数のプログラムに潜在する類似のバグを検出するために、第一に、プログラムと潜在するバグの関係を明確にすること、第二に、プログラムと潜在するバグとデータ項目の関係を明確にする。

【解決手段】データを共有する複数のプログラムに潜在するバグを検出するバグ検出システムにおいて、各プログラムとそれらの参照するデータの関係を記憶する記憶手段と、バグの種類とそのバグの発生したデータとの関係を入力する入力手段と、当該入力内容と前記記憶手段の内容に基づき、プログラムとバグの関係を出力する出力手段とから構成する。
【特許請求の範囲】
【請求項1】データを共有する複数のプログラムに潜在するバグを検出するバグ検出システムにおいて、各プログラムとそれらの参照するデータの関係を記憶する記憶手段と、バグの種類とそのバグの発生したデータとの関係を入力する入力手段と、当該入力内容と前記記憶手段の内容に基づき、プログラムとバグの関係を出力する出力手段とを有することを特徴とするバグ検出システム。
【請求項2】請求項1の出力手段は、前記入力内容と前記記憶手段の内容に基づき、プログラムとバグとデータの関係を出力する出力手段であることを特徴とする請求項1のバグ検出システム。
【請求項3】コンピュータによってデータを共有する複数のプログラムに潜在するバグを検出するためのバグ検出プログラムを記録した記録媒体であって、各プログラムとそれらの参照するデータの関係を入力させる手段と、バグの種類とそのバグの発生したデータとの関係を入力させ手段と、これらの入力内容に基づき、プログラムとバグの関係を決定させる手段とを有することを特徴とするバグ検出プログラムを記録した記録媒体。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、ソフトウェアの開発・保守の工程で行われるソフトウェアに潜在するバグを検出するシステムに関する。具体的には、本発明は、データを共有する複数のプログラムに潜在する類似のバグを検出するシステムに関する。
【0002】
【従来の技術】図1は、バグのあるプログラムを実行させるコンピュータを示す。同図中101はプログラムを動作させるコンピュータシステムを、102はバグを内在するプログラムを表す。プログラム102は、C言語で書かれており、3つの整数20、10、30の平均値を求めるものである。
【0003】プログラム102をコンピュータシステム101で実行した場合、102bの「average=sum/n」の箇所で、実行エラーを生ずる。これは、102aで「n=0」と設定しており、102bでは0で定数sumを割算しているからである。このようなバグは、開発者等により検出され、第9図に示すようなバグ票として顕在化され、取り除かれる。
【0004】また、データを共有する複数のプロクラムでのバグ検出には、第2図に示すようなクロスリファレンス表が使用される。このクロスリファレンス表は、例えば、コンパイル結果や特開平5−265732号公報記載の先行技術を用いて生成される。第2図の表において、縦の項目はプログラム名を、横の項目はそのプログラムで参照・更新されるデータ項目を、R/Wは、それぞれ参照・更新を示し、0は、当該プログラムでは参照も更新もされないことを示す。同表によると、例えば、プログラムAは、データaとデータbを参照し、プログラムBは、データaを参照し、データcおよびデータdの更新を行っていることがわかる。
【0005】データを共有する複数のプログラムでのバグ検出の際、このクロスリファレンス表は、以下のように利用する。例えば、プログラムAにおいて、属性(例えば、和暦データと西暦データ等)の異なるデータaおよびデータbを比較することにより、実行エラーが検出されたとする。この場合、データaおよびデータbを参照・更新をしているプログラムは、同様のバグを内在している可能性が高い。したがって、開発者は、クロスリファレンス表を用いて、データaおよびデータbを参照・更新しているプログラムを探す。この場合、開発者は、同表おいて、プログラムCが上記バグと同様のバグを潜在する可能性があるとして、プログラムCに対して、デバッグを行う。
【0006】なお、プログラムBは、同表において、上記のバグ対象のデータの一部、すなわち、データaは参照しているが、データbは参照していない。したがって、開発者は、プログラムBが上記と同様のバグを内在する確率は低いと判断し、プログラムBに対して、デバッグを行わない。かかる先行技術は、プログラムの開発段階および保守段階において、バグの検出等を効率的に行うことができるため、有用な技術である。すなわち、上述の説明の通り、クロスリファレンス表は、一のプログラムで検出されたバグと同様のバグを、他のプログラムでも検出することを可能にする点で有用である。
【0007】しかし、最近は、プログラムのステップ数や一のプログラムを構成する部品プログラム数も増えたため、クロスリファレンス表自体が膨大なものとなり、クロスリファレンス表によるデバッグは容易ではなくなってきた。また、プログラム構成する部品プログラムおよびそこで参照・更新されるデータ項目が多くなると、プログラムとバグとデータ項目の関係が複雑となるため、当該クロスリファレンス表を、いちいち人が参照し、類似するバグを検出することは容易ではない。したがって、かかる場合においては、データを共有する複数のプログラムにおいて、当該プログラムとその中に潜在するバグの関係を明確にする技術が望まれている。
【0008】
【発明が解決しようとする課題】本発明は、データを共有する複数のプログラムに潜在する類似のバグを検出するために、第一に、プログラムと潜在するバグの関係を明確にすること、第二に、プログラムと潜在するバグとデータ項目の関係を明確にすることを課題とする。
【0009】
【課題を解決するための手段】第一の課題を解決するため、本発明を、データを共有する複数のプログラムに潜在するバグを検出するバグ検出システムにおいて、各プログラムとそれらの参照するデータの関係を記憶する記憶手段と、バグの種類とそのバグの発生したデータとの関係を入力する入力手段と、当該入力内容と前記記憶手段の内容に基づき、プログラムとバグの関係を出力する出力手段とにより、構成する。さらに、第二の課題を解決するため、本発明を、請求項1の出力手段は、前記入力内容と前記記憶手段の内容に基づき、プログラムとバグとデータの関係を出力する出力手段であるように構成する。
【0010】
【実施の形態】第3図は、本発明が実施されるハードウェア・ブロック図を示す。このハードウェアブロック図は、コンピュータシステム101のハードウェア構成でもある。同図中、301はCPUを、302はメモリを、303はハードディスク装置を、304はキーボードを、305はディスプレイを、306はプリンタ等の周辺機器を示す。本発明は、主に、CPU301により制御されるソフトウェアにより実現される。
【0011】第4図を用いて、第一の実施の形態の全体の概要を説明する。第4図は、プログラムとバグの関係を出力するフローチャートを示す。ステップ401では、バグ検出システムは、図2に示すようなクロスリファレンス表を解析する。ステップ402では、バグ検出システムは、当該解析結果から、各プログラムとデータ項目の関係を、行列Xから得、メモリ302上またはハードディスク装置303上に記憶する。ステップ403では、バグ検出システムは、各プログラムのテスト等により、キーボード304からバグとデータ項目の関係を入力させ、当該関係を行列Yとして得る。ステップ404では、バグ検出システムは、前記行列Xと行列Yに基づき、プログラムとバグとの関係を行列Zとして求め、当該関係をディスプレイ305またはプリンタ等の周辺機器306に出力する。
【0012】次に、第5図および第6図を用いて、ステップ401およびステップ402を詳述する。第5図は、クロスリファレンス表から、プログラムとデータ項目の関係を表す行列Xを生成するフローチャートを示す。ステップ501では、バグ検出システムは、カウンタI,Jの値を初期化し、I,J=0とする。バグ検出システムは、クロスリファレンス表(図2)を走査等により読み取り、プログラム数M、データ項目数Nを得る。
【0013】ステップ502では、バグ検出システムは、プログラムについてのカウンタIがプログラム数Mに達したか否かを判定する。カウンタIがM未満の場合は、ステップ503に進む。一方、カウンタIがM以上の場合は、処理を終了する。ステップ503では、バグ検出システムは、データ項目についてのカウンタJがデータ項目数Nに達した否かを判定する。カウンタJがN未満の場合は、ステップ505に進む。一方、カウンタJがN以上の場合は、ステップ504において、I=I+1,J=0として、ステップ502に戻る。
【0014】ステップ505では、バグ検出システムは、クロスリファレンス表(第2図)のI行J列の要素に、RまたはWの値であるか否かを判定する。当該要素がR/Wである場合は、ステップ506に進み、行列XのI行J列の要素X(I,J)=1とする。一方、当該要素がR/Wでない場合、つまり第2図の例においては当該行列要素が0の場合、ステップ507に進み、X(I,J)=0とする。
【0015】次に、ステップ508では、データ項目のカウンタJを1だけ進め、処理をステップ503に戻す。以上のステップにより、バグ検出システムは、プログラムとデータ項目の関係を示す行列Xを得る。第6A図は、第5図に開示したステップにより、第2図のクロスリファレンス表から得た行列Xを示す。第6A図の行列Xにおいて、第2図の表でR/Wをもつ要素は1を持ち、第2図の表でR/W以外の値を持つ要素は0を持つ。したがって、行列X(第6A図)において、1を持つ行列要素は、あるプログラムであるデータが参照または更新されたことを示しており、クロスリファレンス表の情報を維持している。
【0016】次に、第6図および第8図を用いて、データ項目とバグの関係を示す行列Yを求めるフローを説明する。第8図は、各プログラムのデバッグにより得られたデータ項目とバグの関係を示すバグ票である。当該バグ票は、どのプログラムにおいて、どのデータが、どのような原因によりバグが発生したかを示すものである。
【0017】第8A図は、プログラムAのバグ票である。当該バグ票には、「プログラムAにおいて、データbをデータaで除算した結果をデータbに格納しているが、データaの値は0であるため、0割算によるオーバフローが発生した。」旨が記載されている。また、第8B図プログラムCのバグ票には、「プログラムCにおいて、データbとデータcとの乗算結果をデータdに格納しているが、データdの桁不足によるオーバーフローが発生した」旨を記載されている。当該記載により、バグの原因となるデータ項目とバグの種類が明確となる。
【0018】バグ検出システムは、当該バグ票の結果の入力を求め、行列Yとともにバグ数pを得る。第6B図は、行列Yを示し、行はデータ項目を、列はバグの種類を示す。同行列は、データaおよびデータbにおいて、バグ1(0割算によるオーバーフロー)が発生したことを、データb、データcおよびデータdにおいて、バグ2(桁不足によるオーバーフロー)が発生したことを示している。
【0019】以上の処理により、バグ検出システムは、プログラムとデータ項目の関係を示す行列Xと、データ項目とバグの関係を示す行列Yを得た。次に、第9図を用いて、行列Xと行列Yから、プログラムと潜在するバグの関係を示す行列Zを求めるフローを説明する。まず、ステップ901において、バグ検出システムは、行列Yを規格化し、行列RYする。具体的には、行列Yの同一のバグについての要素を足して、1となるように、行列Yの要素をスケーリングする。第6C図は、行列Yを規格化した行列RYの行列要素を示す。同図により、行列RYの同一のバグについての要素(各列の成分)を足すと、1になるように、規格化されていることが確認される。この規格化は、以下に出てくる相関係数を1以下にするためのものである。
【0020】次に、ステップ902において、バグ検出システムは、行列Xと行列RYの掛け算を行い、行列Wを得る。行列Wの行列要素は、第7A図に示される。次に、ステップ903において、バグ検出システムは、行列Wから1未満の要素を0とおくことにより、行列Zを得る。この操作は、一のプログラムでデータaとデータbにバグが検出された場合に、データaおよびデータbの両方を参照・更新するプログラム(行列Zの値が1)を抽出し、データaまたはデータbの一方のみを参照・更新するプログラム(行列Zの値が1未満)を除外することに対応する。
【0021】このステップにより得られる行列Zの行列要素は、第7B図に示される。行列Zの行はプログラムA乃至プログラムDを示し、列はバグ1乃至バグ2を示す。行列Zの行列要素が非ゼロ値のところが、潜在するバグを示している。バグ票により、プログラムAにおいてバグ1が検出されていた場合には、当該行列Zにより、同様のバグがプログラムCに潜在している可能性が強いことが分かる。
【0022】次に、第10図および第11図を用いて、本発明の第二の実施の形態を説明する。第10図は、第10A図と第10B図からなり、プログラムとバグの関係(行列Z)から、プログラムとバグとデータ項目の関係を求めるフローチャートである。第11図は、当該フローチャートの処理結果の出力例を示している。ステップ1001において、バグ検出プログラムは、行列Zのプログラム(行要素)についてのカウンタLおよびバグ(列要素)についてのカウンタJを初期化し、J、L=0とする。ステップ1002において、バグ検出プログラムは、行列ZのプログラムについてのカウンタLがプログラム数Mに達したか否かを判定する。達した場合は、処理を終了する。一方、達しない場合は、行列ZのバグについてのカウンタJがバグ数Pに達したか否かを判定する。
【0023】達した場合は、ステップ1006に進み、J=0,L=L+1とし、ステップ1002に戻る。一方、達していない場合は、ステップ1004において、行列要素Z(L,J)が1か否かを判定する。行列要素Z(L,J)が1でない場合、つまり、バグがない場合は、ステップ1005において、カウンタJをJ+1と更新し、ステップ1003に戻る。一方、Z(L,J)が1の場合は、ステップ1007において、行列Yについてのデータ項目についてのカウンタKを初期化し、K=0とする。
【0024】次に、ステップ1008において、バグ検出システムは、カウンタKがデータ項目数Nに達したか否かを判定する。達している場合は、ステップ1005において、行列ZのバグについてのカウンタJをJ+1に更新し、ステップ1003に戻る。一方、達していない場合は、ステップ1009において、行列要素Y(K,J)が1か否か、つまり、L番目のプログラムのJ番目のバグに、K番目のデータ項目が関係しているかを判定する。関係なし、つまり、Y(K,J)=0の場合は、ステップ1010において、カウンタKをK+1に更新し、ステップ1008に戻る。一方、当該データ項目が関係する、つまり、Y(K,J)=1の場合は、ステップ1011において、L番目のプログラムとJ番目のバグを、K番目のデータ項目と関連づけて出力し、ステップ1010において、カウンタKをK+1に更新し、ステップ1008に戻る。
【0025】このようにして、ディスプレイ305またはプリンタ等の周辺機器306に出力される出力結果は、第11A図に示す通りである。同図の類似バグ検出票には、第8A図のバグ票と同様に、プログラムAにおいて、バグ1(0割算によるオーバーフロー)が、データaおよびデータbで検出されている。この他に、類似バグ検出票(第11a図)には、プログラムBにおいても、同様のバグ1(0割算によるオーバフロー)が潜在していることを示している。本発明により、クロスリファレンス表を見なくても、プログラムにおいて、潜在するバグを検出することができるため、デバッグの効率が向上する。また、出力結果においては、潜在するバグに関係したデータ項目も出力するため、利用者は、当該データ項目を手掛かりに、文字検索等により、プログラムにおけるバグの潜在箇所を、直ちに特定することができ、デバッグの効率を一層向上させることができる。
【0026】第11B図は、バグの種類単位の出力結果を示している。当該出力結果は、第10図のフローチャートにおいて、参照する行列等を変更すれば、得られるものである。この変更は、当業者であれば容易に理解できるため、説明は省略する。当該出力結果においても、プログラムとバグとそのデータ項目の関係が明確となるため、潜在するバグを容易に取り除くことができる。
【0027】第12図は、第三の実施の形態を示す。同図1201は、第1図101のようなコンピュータシステムである。第一の実施の形態および第二の実施の形態は、コンピュータシステム101(または1202)中のメモリ302またはハードディスク装置303を用いて、本発明を実施する形態を示したものであった。第三の実施の形態では、その他の記録媒体を用いて、本発明が実施される。同図中、1203はサーバのDASDを、1204は公衆回線、インターネット等の通信回線を、1202はCD−ROM等の可搬型記録媒体を示す。
【0028】本発明に係るプログラムは、DASD1203に記録することができる。利用者は、DASD1203上のプログラムを、通信回線1204を介して、コンピュータシステム1201内のメモリ302またはハードディスク303にダウンロードする。かかるプログラムを実行する場合は、当該プログラムをメモリ302にロードし、実行する。この後の処理等については、第一の実施の形態および第二の実施の形態での説明と重複するので、省略する。
【0029】また、本発明に係るプログラムは、CD−ROM1202に記録することができる。利用者は、CD−ROM1202内のプログラムを、CD−ROMドライブ(周辺機器306)からメモリ302にロードし、実行する。この後の処理等については、第一の実施の形態および第二の実施の形態での説明と重複するので、省略する。
【0030】
【発明の効果】上述の説明から明らかな通り、本発明は、以下の効果を奏する。第一に、プログラムとその中に潜在するバグの関係が明確となるため、潜在するバグを取り除くべきプログラムを特定することができ、デバッグ効率を向上させることができる。第二に、プログラムとその中に潜在するバグの関係に加えて、そのバグの関係するデータ項目の関係も明確となるため、当該プログラムをデバッグする際、バグの潜在する箇所(データ項目)に迅速にアクセスすることができ、さらにデバッグ効率を向上させることができる。
【出願人】 【識別番号】000005223
【氏名又は名称】富士通株式会社
【出願日】 平成9年(1997)9月12日
【代理人】 【弁理士】
【氏名又は名称】井桁 貞一
【公開番号】 特開平11−85563
【公開日】 平成11年(1999)3月30日
【出願番号】 特願平9−248926