JP2001229044A - デバッグ方法 - Google Patents

デバッグ方法

Info

Publication number
JP2001229044A
JP2001229044A JP2000043536A JP2000043536A JP2001229044A JP 2001229044 A JP2001229044 A JP 2001229044A JP 2000043536 A JP2000043536 A JP 2000043536A JP 2000043536 A JP2000043536 A JP 2000043536A JP 2001229044 A JP2001229044 A JP 2001229044A
Authority
JP
Japan
Prior art keywords
test
value
debugger
variable
variables
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
JP2000043536A
Other languages
English (en)
Inventor
Takeshi Horiuchi
毅 堀内
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2000043536A priority Critical patent/JP2001229044A/ja
Publication of JP2001229044A publication Critical patent/JP2001229044A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】デバッガを用いて行う複数モジュールからなる
プログラムの単体テストおよび部分結合テストにおい
て、スタブ作成や外部変数の設定等の前処理を行わず
に、テストを開始できるようにする。 【解決手段】デバッガの中にグローバル変数等の被テス
トプログラム内にない変数に関する変数参照管理テーブ
ル114を設け、そのような変数の参照がある毎にテーブ
ルを参照し、既に適切な値が設定されているならばそれ
を用いる。値が未だ設定されていない場合や、テストの
ために値を換える必要がある場合には、ユーザがその場
で値を指定することによって、デバッガのコマンドを生
成し実行する機能を提供する。ユーザの指示はデバッグ
コマンドファイル107として保存し、後の再テストや同
種のテストにおいて同じ操作を行わなくても良いように
する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソフトウェア開発
工程のテスト工程に関し、特にデバッガを用いてプログ
ラムを構成するモジュールの単体テストおよび部分結合
テストを行う場合のデバッグ方法に関する。
【0002】
【従来の技術】複数モジュールからなるプログラムの単
体テストおよび部分結合テストをデバッガを用いて行う
場合、特にその他のモジュールが完成していない場合、
ドライバやスタブを作成し、被テストプログラムと共に
コンパイル・リンクして用いるか、デバッガ用に必要な
データを設定するためのテストコマンドファイルを予め
作成しておいたり、デバッグ時にユーザが中断点を設け
たり、必要な値を直接設定したりする等の方法が取られ
ていた。
【0003】複数モジュールからなるプログラムの単体
テストおよび部分結合テストに対しては、例えば「テス
トプログラム作成装置」(特開平5−143393号)
や「テストコマンド作成方法」(特開平6−25088
3号)や「テストコマンド生成方法」(持開平7−84
828号)にあるように、被テストプログラムを静的に
解析することによって、ドライバ関数やテストコマンド
を生成する方法が提案されている。
【0004】さらに「モジュールテスト方法および装
置」(特開平7−219810号)では、被テストプロ
グラムに記載されたインタフェース情報を読み込み、そ
の情報に基づいてデータを設定させることによって、目
的プログラム毎にサンプル・プログラムを作成、変更さ
せることを避ける方法が提案されている。
【0005】
【発明が解決しようとする課題】しかし上記従来技術で
は、スタブを用いる場合にはテスト条件を変える毎にス
タブを書き換え、コンパイル・リンクしなければならな
いという問題があった。またスタブを用いる方法やデバ
ッガ用のテストコマンドを作成する方法では、プログラ
ムの実行に先立ってそれらを作成する必要があった。そ
のため、実際に呼ばれる子関数や必要となる値等が明確
でない場合、無駄に多くの子関数を作成したり、グロー
バル変数等に値を設定することになるという問題があっ
た。さらにデバッグ時にユーザがデバッグコマンドとし
て直接設定する場合には、設定漏れが発生したり、設定
した情報を後のテスト等で再利用することが難しいとい
う問題があった。
【0006】本発明の第一の目的は、プログラムの単体
テストおよび部分結合テストにおいて、デバッグ前に行
なっていたスタブ作成やグローバル変数の値設定、およ
びコマンドファイル作成を不要にしたデバッグ方法を提
供することである。
【0007】また、本発明の第二の目的は、ユーザがデ
バッグ中に入力したデバッグコマンドを、入力したタイ
ミングや位置情報と共に格納し、後で再利用できる機能
を有したデバッグ方法を提供することである。
【0008】
【課題を解決するための手段】第一の観点では、本発明
の第一の目的を達成するため、デバッガの中に、変数参
照管理テーブル、関数呼出管理テーブル、条件判定管理
テーブルを設け、さらに通常のデバッグモードと切替え
るためのフラグを用意し、そのフラグの値によってデバ
ッガの命令実行部の動作を変えるようにすることによ
り、未解決な関数やグローバル変数の値が必要となった
時点でユーザに対応を指定させる。
【0009】第二の観点では、本発明の第二の目的を達
成するため、ユーザが入力したコマンドを記憶する領域
を用意し、入力に適した形式でのその位置情報を一緒に
格納するようにする。
【0010】
【発明の実施の形態】以下、本発明の一実施形態例を図
面により説明する。なお、本実施形態例によって本発明
が限定されるものではない。
【0011】図1は、本発明のデバッグ方法の実施形態
の機能構成図である。図中101は本発明のデバッグ方法
を実現したデバッガ、102は主に従来のデバッガの一構
成例、114〜116はそれぞれ変数参照、関数呼出、条件判
定を管理するテーブルを表す。
【0012】デバッガへの入力は、ソースコードファイ
ル105、オブジェクトファイル106、デバッグコマンドフ
ァイル107、ユーザからの入力103であり、出力は、CR
T画面等の結果表示104とデバッグコマンドファイル107
である。113は本発明の方法を使用するか否かを切替え
るフラグであり、これをOFFにすることによって従来
通りのデバッグを行うこともできる。
【0013】図2は、変数参照に関する処理を表した流
れ図である。図中201は対象としている変数がグローバ
ル変数か否かを判定する手段、203はそのグローバル変
数の状態が、解決済か否かを判定する手段、204はユー
ザに対応を指定させる手段である。図3は、関数呼出に
関する処理を表した流れ図である。図4は、条件判定処
理に関する処理を表した流れ図である。これら関数呼出
や条件判定に係る処理は、変数参照に関する処理と類似
したものである。
【0014】図5は、変数参照管理テーブルの一例であ
る。図中505は、その変数の状態を保持する欄であり、
対象とするテスト内でその値が決定しているか、未だ値
が設定されていないかの区別を表す。本例ではシンボリ
ックデバッガを意識して、位置をソースプログラムの行
番号で表し、変数名を用いているが、変数のアドレスと
長さを管理することによって、ソースの情報が利用でき
ない場合にも対応することができる。
【0015】図6は、動作を説明するためのモジュール
の例である。図中601は関数呼出の例、602は条件判定の
例、604、605は変数参照の例を表す。また図7は、図6
の例から作成されたデバッグコマンドの一例である。
【0016】以上の図を用いて、処理の詳細を説明す
る。101のデバッガの基本的動作は、従来のデバッガと
同じであり、切替えフラグ113がOFFであれば特別な
処理は行わない。したがってフラグ113をONにして、
本発明のデバッグ方法を用いる場合について説明する。
図6に示したような処理を含むモジュールをデバッグす
る場合について述べる。このソースコード105とそれを
単体でコンパイルしてできたオブジェクト106を入力と
してデバッガを起動し、プログラムの実行を開始する。
フラグがONの場合には、常に図2〜図4の処理が働い
ており、201でグローバル変数の参照を、301で関数呼出
を、401で条件判定命令を監視している。
【0017】これらの監視にかからなかったコードは、
実行するのに必要な情報が全て解決していることになる
ので通常通り実行することができる。もちろん、それら
の一般的な命令コードに対してデバッガの中断機能等を
用いて中断し、値を設定したり、処理の名が得れを変え
る事は問題なく行える。
【0018】図3に関する関数呼出の扱いについて、60
1の関数funcの呼出を例として説明する。プログラムの
実行がここに来ると、301の判定処理がYes側に流れ、関
数呼出管理テーブル302を参照することによってその関
数の状態を検査し次の判定処理303に行く。この判定処
理303において、その関数funcがリンク済であると分か
った場合、つまりシステムに組込まれている関数であっ
たり、本モジュールと一緒にコンパイルされて、オブジ
ェクトコード内に実態があると判定された場合には、30
7の処理によりその関数を実行することになる。逆に判
定処理303においてリンクが未だとなった場合、処理304
においてユーザからの対応法について指示を待つ。ここ
で関数を実行することによる効果を考えると、関数の返
値が得られることと、その関数によって引き起こされる
副作用、つまりグローバル変数に対する値の書き換えが
行われることがある。ユーザの指示はデバッグコマンド
として与えることになるため、例えば図7(a)のよう
に、関数の返値として変数v02に数値100を設定し、関数
funcが実行されたとした場合に、その中で値を設定する
グローバル変数v01に数値28を設定し、該関数の呼出処
理を行わず次の処理に進ませるために、デバッグコマン
ドで次の行に制御を移すように指定する。そのデバッグ
コマンド実行前に処理305を行い、今グローバル変数に
値を設定したことを管理テーブルに反映させる。特に変
数参照管理テーブルにおいては、両変数の状態を「決定
済」に書き換えておく。関数呼出管理テーブルに関して
は、次に同じ関数呼出があった場合、再度対応を指示す
るか、今回の指示をそのまま使うかで、「対応指示済」
か「対応指示未」の設定を行う。その後で、306の処理
を行いプログラムの実行を続けるようにする。
【0019】別の指示方法として、関数funcの副作用や
効果を考えず、v01やv02に値を設定するように指示する
代りに、それらの値を実際に参照する時点まで値の決定
を保留することもできる。この場合、既にv01やv02が
「決定済」であれば、それを「未解決」に書き換える。
そうすることによって、次にそれらの変数が参照された
時に、値の設定等の指示をすることができるようにな
る。この場合、デバッグコマンドとしては、単に次の行
に制御を移すだけで良いので、「g +1」とすれば良いこ
とになる。
【0020】次に、図4に関する条件判定の扱いについ
て、602のifを例として処理の説明を行う。プログラム
の実行がここに来ると、401の判定がYes側に流れ、条件
判定管理テーブル402を参照することによってその分岐
の状態を検査し次の判定処理403に行く。この判定処理4
03において、そのifの条件式に未解決な項があるか否か
の判定がされる。未解決項がない場合には、さらに判定
処理407において、そのifの条件を強制的に真か偽に指
定するか否かを指定させる。本処理は本来必要ないもの
であるが、単体テストを行うためにあらゆるパターンを
実行させる必要性に対して解を与えることを主目的に用
意してある。また、別の目的として、グローバル変数や
関数の返値を、プログラムがそれを必要している時点で
ユーザ指示に基づいて設定しているため、後の使用時点
となるifの条件での影響まで考慮できていない場合に対
する、自由度の確保がある。特に条件式が複雑で、いく
つかのグローバル変数や関数の返値を使用している場合
には、条件式の中身より、直接その真偽を指定できる方
が便利な場合もあるためである。元に戻って、判定処理
403で未解決項ありと判断された場合、または判定処理4
07で真偽の指定を行うと指定した場合には、処理404に
おいてそのifの真偽をユーザに指定させる。
【0021】具体的には、条件式の値を持つ内部変数を
書き換えるのではなく、そのif判定結果に従って実行さ
れる文に制御を移すように指定する。602の例では、v02
の値が未解決であれば必ず、解決済だとしても判定407
で真偽を指定するとした場合には、その制御をデバッグ
コマンドとして指定することになる。具体的には、602
のifを真としたければ、61行目に制御を移し、偽とした
ければ70行目に制御を移すようにする。図7(b)に示した
バッチコマンドの例では、偽と指定した場合の処理であ
る「g 70;」を示した。もちろん逆に真と指定する場合
は「g +1」または「g 61」とすれは良い。
【0022】さらに、図2に関するグローバル変数参照
の扱いについて、604および605を例として説明する。こ
こで、単純変数v01と配列変数a(7)がグローバル変数
であり、numやsはローカル変数である。604のコードが
実行されると、判定処理201でv01がグローバル変数であ
るためYesとなり処理202で変数参照管理テーブル501が
参照される。前述の通り、変数v01は601の関数funcの中
で値が設定されているため、管理テーブル501では507に
示したように情報が格納されているはずである。
【0023】特に601での処理内で、v01の設定を後に影
響が残らないようにしない限り、その状態欄505は「決
定済」となっている。その結果として、判定処理203に
おいて「未設定」ではないと判定され、そのまま処理が
続くことになる。この時には、デバッグコマンドは、特
に何もせず、図7(c)にあるように、単に「g」を発行
するだけで、自動的に次の処理に制御が移る。仮に601
のfuncを処理する中でv01の値を設定しないで放置して
いた場合や、仮の値を設定しただけで後の参照時に再設
定させるつもりで、管理テーブルの501の状態項目505を
「未解決」のままにしていた場合について考えると、こ
の場で改めてデバッグコマンドを発行して、値を設定す
ることになる。
【0024】同様の例であるが、605のコードの場合に
ついて説明を続ける。先の例と異なる点は、この例にお
けるグローバル変数aが配列変数であることである。図
2の処理の流れとしては、まず判定手段201で、グロー
バル変数であるからYesとなり、処理202で変数参照管理
テーブル501を調べる。変数a(7)の状態506は「未解
決」であるので、2O3の判定により対応を指定する処理2
04に移る。ここで、数値200を設定する場合のデバッグ
コマンドの例が図7(d)である。このコマンドを実行す
る前に、処理205において、変数参照管理テーブル501の
a(7)の状態505を「決定済」に書き換えておく。
【0025】変数a(7)の情報は、テーブル内に509の
ように入っているが、ここで変数名を配列の要素毎に取
っているのが、本発明の特長の1つである。つまり、配
列の要素数が大きくても、実際に使われるものだけをそ
の時点で設定すれば、プログラムが正しく動作すること
ができる。従来のスタブ作成においては、テスト対象の
プログラムを静的に解析することには限度があるため、
ほぼ全ての変数を設定することになりがちであった。こ
の例のように、配列の添字が直接数値で書かれていなけ
れば、配列変数の内、どの要素が実際に使用されるのか
知るのは困難であるため、配列に関しても全要素を初期
化することが多かった。
【0026】本発明の方法のように、プログラムを動作
させ、実際に変数の値が必要になった時点で、未だ値が
設定されていないものを認識する機能を用意することに
よって、別の効果も期待できる。つまり、元々グローバ
ル変数というものは、プログラムのメモリ空間上に存在
するものであるため、その設定を怠ったとしても、何ら
かの値(0で初期化されていたり、ゴミデータが残って
いたりする)が入っているため、値が参照できないとい
う警告を出すことができない。そのため、グローバル変
数一部の設定を忘れたまま、プログラムを実行させてし
まうこともあり、テスト結果が正しくない時の原因究明
に時間を取られることもあった。本発明のように、最初
の参照時点で必ず止まって、指定させることによって、
そのような設定漏れによる意図しない動作を防ぐことも
可能となる。
【0027】最後に、デバッグコマンドの再利用につい
て説明する。図7に示したデバッグコマンドには、{}内
に記したユーザが指定したコマンド以外に、ユーザがコ
マンドを指定したタイミング、または位置情報を記録す
るようにしてある。例えば、図7(a)では「b50;」とい
うように、50行目で止まるという指示を記録している。
【0028】それ以外の場所やタイミングの指定につい
ては、ベースとなるデバッガによるが、例えば、ある変
数がアクセスされた時や、ある関数が呼ばれた時、とい
うようなものも考えられる。また中断後の実行再開に関
して、図7(b)のように絶対位置指定で指定するだけで
なく、図7(a)のように相対的な位置を指定する方法も
あるため、それらを組み合わせることによって、例えば
ある関数が呼ばれたら、どの変数とどの変数に値を設定
し、制御はその次の文に移すというような指定も可能で
ある。これら一連のコマンドは1つのコマンドファイル
107として、1回のデバッグ終了時に出力される。この
ファイルの形式は、デバッガ101の入力として使えるテ
キストファイルであるため、そのまま再利用できるし、
一般のエディタで編集して使用することもできる。本発
明の方法を用いて、ある条件の元で1度モジュールを実
行させておくと、そのモジュールに必要な外部変数等の
設定を全て行うことになる。そのとき作成されたコマン
ドファイルを用いて、さらに他の条件でテストを行って
いくと、さらなる実行のために必要な設定のみを追加で
行えば良いことになる。また、デバッガ101の切替えフ
ラグ113をOFFにして従来のデバッグを行う場合に
も、1度作成されたデバッグコマンド107を使用するこ
とによって、必要なグローバル変数の設定や、未定義の
子関数に対応するコマンドの設定を自動的に行う、デバ
ッグコマンドファイルとして使用することができる。
【0029】
【発明の効果】以上説明したように本発明によれば、デ
バッグ実行前の準備としてスタブ作成やコマンドファイ
ル作成等の作業を行わなくてもデバッグ作業を行うこと
ができるようになる。さらに1度対話的に実行した変数
の設定やデバッガに対する動作の指定をデバッグコマン
ドとして残すため、後のテストで再利用することができ
るようになる。それらの結果として、単体テストおよび
部分結合テストにおけるデバッグ作業の効率を上げるこ
とができる。
【図面の簡単な説明】
【図1】本発明のデバッグ方法の実施形態の機能構成図
である。
【図2】変数参照に関する処理を表した流れ図である。
【図3】関数呼出に関する処理を表した流れ図である。
【図4】条件判定処理に関する処理を表した流れ図であ
る。
【図5】変数参照管理テーブルの例を示す図である。
【図6】動作を説明するためのモジュールの例を示す図
である。
【図7】生成するデバッグコマンドの例を示す図であ
る。
【符号の説明】
102…従来のデバッガの一構成例、107…生成されるデバ
ッグコマンドファイル(入力としても利用される)、11
3…本発明の方法を使用するか否かを切替えるフラグ、1
14…変数参照管理テーブル、203…参照している変数の
状態を判定する手段。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 複数モジュールからなるプログラムの単
    体テストおよび部分結合テストにおけるデバッグ方法に
    関し、テスト対象のモジュールの実行に必要な子関数の
    スタブ作成やグローバル変数の値設定を前もって行うこ
    となくデバッグ実行し、該スタブやグローバル変数の値
    が必要となった時点で対話的にユーザに対応方法を指定
    させる機能を備えたことを特徴とするデバッグ方法。
  2. 【請求項2】 請求項1に記載のデバッグ方法におい
    て、上記のユーザに指定させる対応方法とそのタイミン
    グまたは位置情報を記録し、デバッガ用のテストコマン
    ドとして出力することによって、後のモジュールテスト
    で再利用できるようにしたことを特徴とするデバッグ方
    法。
JP2000043536A 2000-02-16 2000-02-16 デバッグ方法 Pending JP2001229044A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000043536A JP2001229044A (ja) 2000-02-16 2000-02-16 デバッグ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000043536A JP2001229044A (ja) 2000-02-16 2000-02-16 デバッグ方法

Publications (1)

Publication Number Publication Date
JP2001229044A true JP2001229044A (ja) 2001-08-24

Family

ID=18566442

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000043536A Pending JP2001229044A (ja) 2000-02-16 2000-02-16 デバッグ方法

Country Status (1)

Country Link
JP (1) JP2001229044A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007193586A (ja) * 2006-01-19 2007-08-02 Nec Corp プログラムテスト支援システム、方法及びプログラム
JP2009129132A (ja) * 2007-11-22 2009-06-11 Nec Corp ソフトウェア部分テストシステム、それに用いる方法およびプログラム
JP2015146178A (ja) * 2014-01-31 2015-08-13 富士通株式会社 テストコンテキストの生成

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007193586A (ja) * 2006-01-19 2007-08-02 Nec Corp プログラムテスト支援システム、方法及びプログラム
JP2009129132A (ja) * 2007-11-22 2009-06-11 Nec Corp ソフトウェア部分テストシステム、それに用いる方法およびプログラム
JP2015146178A (ja) * 2014-01-31 2015-08-13 富士通株式会社 テストコンテキストの生成

Similar Documents

Publication Publication Date Title
US7487494B2 (en) Approach to monitor application states for self-managing systems
US7761855B2 (en) Computer program product and system for altering execution flow of a computer program
US5513317A (en) System and method for permitting rapid refinement of data output from a debugger
JP2001229044A (ja) デバッグ方法
JPH0766342B2 (ja) プログラムテスト装置
EP0801348A1 (en) Method of monitoring the operation of a computer
JPH0554277A (ja) プラント監視装置
JP2002055848A (ja) プログラム実行方式及び当該プログラム実行方式を格納した記憶媒体
JP2005326909A (ja) プラントエンジニアリングシステム
JP2007004516A (ja) 組込みシステムのプログラムデバッグ方法
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
JP2009129133A (ja) ソフトウェア部分テストシステム、ソフトウェア部分テスト方法およびソフトウェア部分テスト用プログラム
JPH10247142A (ja) プロセス制御プログラムのプログラミングシステムおよびプログラミング方法
JP2827724B2 (ja) プログラムデバッグ処理方法
JP2672968B2 (ja) デバッグ用ソースリスト出力処理方式
JP3368795B2 (ja) コンパイル制御方法、コンパイル装置及び記録媒体
JPH07311692A (ja) デバッグ方法
JPH09160611A (ja) プログラマブルコントローラ
JP2006146731A (ja) プログラム、記憶媒体、アセンブラ装置、コンパイラ装置、シミュレータ装置及びエミュレータ装置
JPH02210556A (ja) プログラム実行状態の視覚化装置
JPH05108404A (ja) デバツガシステム
JPH0619731B2 (ja) プログラムの単体テスト方式
JP3114686B2 (ja) プログラム・ディバグ方法
JP2008234405A (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム