JP2004287858A - プログラムテスト装置 - Google Patents

プログラムテスト装置 Download PDF

Info

Publication number
JP2004287858A
JP2004287858A JP2003079226A JP2003079226A JP2004287858A JP 2004287858 A JP2004287858 A JP 2004287858A JP 2003079226 A JP2003079226 A JP 2003079226A JP 2003079226 A JP2003079226 A JP 2003079226A JP 2004287858 A JP2004287858 A JP 2004287858A
Authority
JP
Japan
Prior art keywords
lower module
unit
module
processing code
instruction
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
JP2003079226A
Other languages
English (en)
Inventor
Shigeya Takagi
繁彌 高木
Toshio Matsuki
敏夫 松木
Yuichiro Shimizu
雄一郎 清水
Naotoshi Izumi
直利 泉
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003079226A priority Critical patent/JP2004287858A/ja
Publication of JP2004287858A publication Critical patent/JP2004287858A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】プログラムの単体テストにおいて、テストドライバやスタブを設計、デバッグ、メンテナンスするにあたり、テストドライバとそれと共に用いられる多数のスタブの関連性を理解することが困難で、テストドライバやスタブの開発効率を十分に向上させることができなかった。
【解決手段】テストドライバ中にスタブの処理を記述することで、テストの流れの理解が容易になり、テストドライバやスタブの開発効率、さらにプログラムの開発効率を高めることができる。
【選択図】 図1

Description

【0001】
【発明の属する技術分野】
本発明は、プログラムの開発におけるテスト工程で、特にモジュールプログラムを単体テストするためのプログラムテスト装置に関する。
【0002】
【従来の技術】
プログラムをテストする場合、テスト対象となるモジュール(以下、被テストモジュールと呼ぶ)のテストを支援するためにテストドライバとスタブという2種類のプログラムを用いることがある。テストドライバとは、被テストモジュールの上位モジュールを模擬するもので、テスト用の入力データを被テストモジュールに与えて被テストモジュールを呼び出す。スタブとは、被テストモジュールの下位モジュールを模擬するもので、被テストモジュールからの呼出しに応答して被テストモジュールが期待する出力データを設定する。
【0003】
このようなテストドライバとスタブを用いることで上位モジュールや下位モジュールが未実装である場合や、あるいは実装されていたとしても処理内容を変更したい場合に、被テストモジュールをテストできる(例えば、特許文献1)。
【0004】
テストドライバとスタブを用いて被テストモジュールをテストするには、テストドライバは被テストモジュールをテストするのに十分な複数の入力データを設定し、スタブは被テストモジュールが期待する出力データを設定する必要があるが、スタブの出力データの設定は一意に決まるものではなく、被テストモジュールからスタブへの入力データや共有データの値によって適した出力データを設定しなければならない。
【0005】
スタブの出力データの設定は、第1の方法として、スタブが呼び出された時点でテスト実行を一時停止し、被テストモジュールが期待するデータをテスト者が入力装置から入力する方法と、第2の方法として、被テストモジュールが期待するデータをテスト内容の範囲で全て設定できるような処理をスタブに実装し、これを被テストモジュールとリンクする方法とがある。
【0006】
【特許文献1】
特開2001−229044号公報(図6,図7)
【0007】
【発明が解決しようとする課題】
しかし、スタブの出力データを設定する第1の方法では、テスト者が、モジュールの処理または仕様書を確認しながら被テストモジュールが期待するデータを設定する必要があるため、テスト者の負担が大きく、ヒューマンエラーが発生する可能性が高くなる。この作業を自動化したとしても、テストドライバの記述とスタブ応答処理の記述を別のファイルに対して行う必要があるために、テストドライバやスタブ応答処理の設計の効率やテストドライバやスタブ応答処理のデバッグの効率、さらに、それらのメンテナンスの効率が悪化する。テストドライバの記述やスタブ応答処理の記述には別な言語が用いられることが一般的であり、これも開発効率を落とす原因となっている。大きなシステムになるとテスト項目数は膨大であり、テスト効率の悪さは看過することはできない。
【0008】
スタブを被テストモジュールにリンクする第2の方法では、スタブに被テストモジュールが期待する応答をさせるための処理を実装することになるが、通常、スタブとなるモジュールが様々な被テストモジュールから呼び出されたり、あるいは、一つの被テストモジュールから何度も呼び出されることがあり、適切にテストを実施するには、スタブが呼び出されるごとに、スタブが呼び出されるタイミングや各種変数の内容などのプログラムの実行状況に応じてスタブが適切に応答する必要がある。また、スタブを呼び出す被テストモジュールの実行状況はテストドライバで行われる変数の設定や関数パラメータの設定にも大きく依存するために、スタブの設計とテストドライバの設計は同時並行的に綿密に行ってゆく必要がある。一方、テストドライバの設計やスタブの設計、あるいはこれらのデバッグや被テストモジュールのデバッグ、テスト項目の追加などのメンテナンス作業において、テストの流れを理解しようとするとき、テストドライバだけを見ても理解不可能であり、またスタブだけをみても理解できない。つまり、テストの流れは、テストドライバや被テストモジュール、そして複数のスタブの中に断片的に記述されており、たった1つのテストケースの内容を理解することすら容易ではない。被テストモジュールの規模や大きかったり、複数の被テストモジュールを組み合わせてテストする必要がある場合、テストドライバの処理内容は複雑化し、スタブの数も多くなり、テストドライバの設計やスタブの設計の工数が膨れ上がる。結果的にテスト工数の増大によりプロジェクトの遅延やプロジェクトの失敗、あるいは、テストを十分に実施することができずに重大な品質問題を発生させてしまうことにつながる可能性が大きくなる。
【0009】
本発明の目的は、上記問題点を解消し、被テストモジュールを効率的にテストできるプログラムテスト装置を提供することにある。
【0010】
【課題を解決するための手段】
本発明の請求項1記載のプログラムテスト装置は、モジュールプログラムをテストするプログラムテスト装置であって、実行可能命令を記憶する実行可能命令記憶部より命令を取り出し実行する命令実行部と、前記実行可能命令記憶部に設けられプログラムテストの対象となる被テストモジュールより呼び出される下位モジュールの呼出しの検出を行う設定をする下位モジュール呼出し検出設定部と、前記下位モジュールの呼出しを検出した際に下位モジュールの処理を記述した下位モジュール代替処理コードへ実行を遷移する処理を行う下位モジュール代替処理コード実行遷移部と、前記下位モジュール代替処理コードの終了を検出した際に、下位モジュールの呼出しの次の処理に遷移する処理を行う下位モジュール代替処理コード実行復帰遷移部とを設け、前記命令実行部には、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行い、下位モジュール呼出し検出設定命令が検出されたときは、前記下位モジュール呼出し検出設定部の処理を行う下位モジュール呼出し検出設定命令検出部と、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出しの検出を行い、下位モジュール呼出し命令が検出されたときは、前記下位モジュール代替処理コード実行遷移部の処理を行う下位モジュール呼出し命令検出部と、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行い、下位モジュール代替処理コード実行の終了が検出されたときは、前記下位モジュール代替処理コード実行復帰遷移部の処理を行う下位モジュール代替処理コード実行終了検出部とを設け、下位モジュールの呼出しの代わりにテストドライバモジュール内部の下位モジュール代替処理コードを実行することを特徴とする。
【0011】
本発明の請求項2記載のプログラムテスト装置は、請求項1において、前記下位モジュール代替処理コードで使用する呼出しパラメータを前記下位モジュール代替処理コードで使用できる位置に複写する処理を行う下位モジュール呼出しパラメータ複写部を設け、下位モジュール代替処理コードを実行しようとするとき、被テストモジュールによって下位モジュールの呼出しの際に渡されたパラメータを下位モジュール代替処理コードがアクセスできる領域へ複写することを特徴とする。
【0012】
本発明の請求項3記載のプログラムテスト装置は、請求項1において、前記下位モジュール代替処理コードを実行して戻り値がセットされる下位モジュール代替処理コード用戻り値格納領域より取得した戻り値を下位モジュール戻り値格納領域へ複写する処理を行う下位モジュール戻り値複写部を設け、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用戻り値格納領域の内容を下位モジュールからの戻り値として複写することを特徴とする。
【0013】
本発明の請求項4記載のプログラムテスト装置は、請求項1において、前記下位モジュール代替処理コードで使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数複写部と、前記下位モジュール代替処理コードで使用した下位モジュールの中のスタティック変数を、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数復帰部とをさらに備えたものであって、下位モジュール代替処理コードを実行しようとするとき、下位モジュール内のスタティック変数の値を複写し、かつ、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用スタティック変数格納領域から下位モジュール用スタティック変数格納領域へ復帰することを特徴とする。
【0014】
本発明の請求項5記載のプログラムテスト装置は、請求項1において、下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする下位モジュールスタティック変数アクセス検出設定部と、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスを検出する下位モジュール代替処理コード内スタティック変数アクセス検出部と、前記下位モジュール代替処理コード内スタティック変数アクセス検出部でアクセスが検出された場合に動作して、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う下位モジュールスタティック変数複写復帰部とをさらに備え、下位モジュール代替処理コードを参照しようとするとき、下位モジュール内のスタティック変数の値を下位モジュール代替処理コード用スタティック変数格納領域に複写し、かつ、命令実行部において下位モジュール代替処理コードが下位モジュール代替処理コード用スタティック変数格納領域を変更しようとするときに、下位モジュール用スタティック変数格納領域へ複写することを特徴とする。
【0015】
本発明の請求項6記載のプログラムテスト装置は、請求項1において、下位モジュールの中のスタティック変数を下位モジュール代替処理コードで使用する際に、スタティック変数のポインタを下位モジュール代替処理コードで宣言された一時ポインタ変数に複写する処理を行うスタティック変数ポインタ設定部をさらに備え、命令実行部において下位モジュール代替処理コードにより下位モジュール代替処理コード用スタティック変数ポインタを使って下位モジュール用スタティック変数格納領域へアクセスすることを特徴とする。
【0016】
本発明の請求項7記載のプログラムテスト装置は、請求項1において、呼出し順序を呼出し順序情報に格納する処理を行う下位モジュール呼出し順序記録部と、呼出し順序情報と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部とをさらに備え、下位モジュール呼出し順序に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【0017】
本発明の請求項8記載のプログラムテスト装置は、請求項1において、テスト実行時に実行時間を測定する実行時間測定部と、実行時間測定部で測定した実行時間と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部とをさらに備え、プログラムの実行時間に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【0018】
本発明の請求項9記載のプログラムテスト装置は、請求項1において、テスト実行時に下位モジュールを呼び出した呼出し元関数名を取得する呼出し元関数取得部と、呼出し元関数取得部で取得した関数名と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件を格納する選択条件情報よりテスト実行時に条件を取得する下位モジュール代替処理コード選択部とをさらに備え、下位モジュールを呼出した関数に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【0019】
本発明の請求項10記載のプログラムテスト装置は、請求項1において、下位モジュール代替処理コード内選択条件設定命令検出部と、代替コード選択条件取得部と、下位モジュール代替処理コード選択部とをさらに備え、下位モジュール代替処理コード内選択条件設定命令検出部は、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部において代替コード選択条件を取得しその条件を格納して下位モジュール代替処理コード選択部の処理を行って、テストドライバモジュール内に記述されている複数の下位モジュール代替処理コードの選択条件をテストドライバ中に記述できるよう構成したことを特徴とする。
【0020】
本発明の請求項11記載のプログラムテスト装置は、請求項1において、実行可能命令記憶部より読み出した下位モジュール内変数操作命令の判定を行う変数操作命令検出部と、前記変数操作命令検出部が変数操作命令を検出すると変数操作命令の引数から被テストモジュール内のstatic変数名、変更したい値を取得し、変数操作情報に登録設定する変数操作情報取得部と、実行可能命令記憶部より読み出した下位モジュール戻り値操作命令の判定を行う戻り値操作命令検出部と、前記戻り値操作命令検出部画戻り値操作命令を検出すると戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報に登録設定する戻り値操作情報取得部と、下位モジュール呼出し命令検出部が下位モジュール呼出し命令を検出すると前記変数操作情報から変更する変数情報を取り出し、実行用ワークメモリ領域の下位モジュール内スタティック格納領域に値を設定する下位モジュール内スタティック変数設定部と、前記戻り値操作情報から戻り値情報を取得し、前記実行用ワークメモリ領域の下位モジュール戻り値格納領域に値を設定する下位モジュール戻り値設定部とをさらに備え、下位モジュールを呼出したときに下位モジュールの持つスタティック変数に任意の値を設定したり、下位モジュールの戻り値を決める処理をテストドライバ処理コードの中に記述できるよう構成したことを特徴とする。
【0021】
本発明の請求項12記載のソースファイル変換装置は、下位モジュール代替処理コード抽出部と、下位モジュール呼出し位置検出部と、引数設定情報抽出部と、戻り値設定情報抽出部と、下位モジュール代替処理コード挿入部とを有し、被テストモジュールの中の下位モジュール呼出し記述をテストドライバモジュール中に記述された下位モジュール代替処理コードに置き換えるよう構成したことを特徴とする。
【0022】
【発明の実施の形態】
以下、本発明の各実施の形態を図1〜図41に基づいて説明する。
(実施の形態1)
本発明のこの(実施の形態1)は、テストドライバ中にスタブ処理などの被テストモジュールなどが呼び出す下位モジュールの処理を記述できることを示すもので、これによりテストドライバのファイルを見るだけでテストの流れを理解でき、テストドライバの設計やスタブの設計、デバッグ、テスト環境のメンテナンス効率を高めて、プログラムの開発期間を短縮できる。
【0023】
図1は本発明の(実施の形態1)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113から構成される。
【0024】
なお、(実施の形態1)から(実施の形態11)に関する命令実行部101はマイコンとして実現しても、あるいは、FPGAのような再構成可能なデバイスで実現しても、さらにまた、コンピュータ上で実行するシミュレータとして実現してもよい。また、インタープリタ型のプログラム言語や、近年普及しているJava(登録商標)の仮想マシン、さらにマイクロソフト社の提唱する“.Net”(ドットネット)のCLRのような仮想マシンにも適用可能である。
【0025】
実行可能命令記憶部106は、テストドライバモジュール107と、プログラムテストの対象となる被テストモジュール110と、被テストモジュール110より呼び出される下位モジュール111と、テスト支援の機能をもった関数群であるテスト支援モジュール115から構成される実行可能命令を記憶するものである。
【0026】
テストドライバモジュール107は、テスト実行処理を行うテストドライバ処理コード108と、下位モジュールの処理を記述した下位モジュール代替処理コード109から構成されている。
【0027】
呼出し検出設定情報114は、下位モジュール111の呼出し検出や、下位モジュール代替処理コード実行のための設定情報を記憶するものである。
命令実行部101は、実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112を備えている。
【0028】
下位モジュール呼出し検出設定命令検出部102は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行う。下位モジュール呼出し検出設定命令が検出されたときは、下位モジュール呼出し検出設定部103の処理を行う。
【0029】
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール代替処理コード実行遷移部105の処理を行う。
【0030】
下位モジュール代替処理コード実行終了検出部112は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行う。下位モジュール代替処理コード実行終了が検出されたときは、下位モジュール代替処理コード実行復帰遷移部113の処理を行う。
【0031】
下位モジュール呼出し検出設定部103は、下位モジュール111の呼出しの検出を行うための設定を行うものである。
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しの検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うものである。
【0032】
下位モジュール代替処理コード実行復帰遷移部113は、下位モジュール代替処理コード109の終了を検出した際に、下位モジュール111の呼出しの次の処理に遷移する処理を行うものである。
【0033】
テスト支援モジュール115は、下位モジュール呼出し検出の設定などのテスト支援の機能を持った関数群で、予め用意されているこれらの関数群をテスト実施者やプログラム作成者はテストドライバモジュール内で使用してテストドライバモジュールの作成を行う。
【0034】
次に、図1の下位モジュール呼出し検出設定部103の動作について詳細に説明する。
図14は下位モジュール呼出し検出設定部103を表す。
【0035】
下位モジュール呼出し検出設定部103は、下位モジュール111の呼出しの検出を行うための設定を行うものであり下位モジュール呼出し位置に識別命令を設定することで下位モジュール呼出し命令検出部104において検出を行えるようにする。
【0036】
下位モジュール呼出し検出設定部103の処理は、前述のテスト支援モジュール115のSetAltFunc()の呼出しによって実現される。
図14で示すように、前述のテスト支援モジュール115のSetAltFuncによって渡された下位モジュール名より下位モジュールの呼出し位置の取得を行い呼出し検出設定情報114に格納する(S1401)。
【0037】
次に、(S1401)において取得した下位モジュールの呼出し位置に、下位モジュール呼出し命令検出部104で検出するための識別命令の書き込みを行い、下位モジュール代替処理コードの開始位置の取得を行い、呼出し検出設定情報114に格納する(S1403)。
【0038】
次に、下位モジュール代替処理コード実行遷移部105の動作について詳細に説明する。
図15は下位モジュール代替処理コード実行遷移部105を表す。
【0039】
下位モジュール代替処理コード事項遷移部105は、下位モジュール呼出し命令検出部によって下位モジュールの呼出しが検出された際に、下位モジュール代替処理コード109に遷移する処理である。
【0040】
図15で示すように、コンテキストの内容を呼出し検出設定情報114に格納する。
コンテキストの内容は、現在使用されている、プログラムカウンタやスタックポインタレジスタ、汎用レジスタの内容などで、前記図14の(S1401)において格納した下位モジュール呼出し位置とともに格納し(S1501)、下位モジュールの戻り位置をスタックより取得し呼出し検出設定情報114に格納し(S1502)、下位モジュール代替処理コード109を実行するにあたって必要なスタックの確保を行い(S1503)、後述の図13において制御フラグAltCtrlFlagを“1”に変更し下位モジュール代替処理コード実行遷移部105を実行できるようにし(S1504)、前記図14の(S1403)において取得し呼出し検出設定情報114に格納した下位モジュール代替処理コード開始位置に実行の制御を遷移させる(S1505)。
【0041】
以上の処理により、被テストモジュール110より呼び出された下位モジュール111の処理を記述した下位モジュール代替処理コード109への遷移を行うことができる。
【0042】
次に、下位モジュール代替処理コード実行復帰遷移部113の動作について詳細に説明する。
図16は下位モジュール代替処理コード実行復帰遷移部113を表す。
【0043】
下位モジュール代替処理コード実行復帰遷移部113は、下位モジュール代替処理コード109の終了が検出された際に、下位モジュール111が呼び出された次の処理へ実行を遷移される処理である。
【0044】
図16に示すように、前述の制御フラグAltCtrlFlagを“0”に変更することで下位モジュール代替処理コード109が実行されないように設定し(S1601)、図15の(S1501)において呼出し検出設定情報114に退避させたコンテキストを呼出し検出設定情報114から取り出し復帰させ(S1602)(S1502)において呼出し検出設定情報114に格納した下位モジュールの戻り位置に実行位置を遷移させる(S1603)。
【0045】
このプログラムテスト装置を、図13のプログラム記述例に基づいて説明する。
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されている。
【0046】
(P1302)はテストドライバモジュールの記述例を、(P1303)は被テストモジュールの記述例をそれぞれ示しており、テスト実施者やプログラム作成者はこの部分を作成することになる。
【0047】
(P1301)の行番号L01の「SETALTCODESTART(funcname)」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、前記図1のテスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0048】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0049】
(P1302)の行番号L03から行番号L06のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L07の被テストモジュール呼出しの処理に移る。
【0050】
(P1303)の行番号L09において下位モジュール「func()」が呼び出されL03の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によって(P1302)の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更され(P1302)の行番号L04に処理が遷移する。
【0051】
(P1302)の行番号L06まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって(P1303)の行番号L10に遷移される。P1303の被テストモジュールtestfuncの実行が終わるとP1302のL08に実行が遷移し、被テストモジュールのテスト結果を判定する。L08で「count」が0より大きい値のときは、テストが合格したことを表わし(L09)、それ以外のときはテストが不合格したことを表わす(L11)。
【0052】
以上の処理により、被テストモジュールの下位モジュール呼出し位置の次の処理に遷移できる。
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0053】
(実施の形態2)
(実施の形態2)はテストドライバ中に記述された下位モジュール代替処理コードを実行する際に、被テストモジュールから下位モジュールを呼出した際に渡されるパラメータを取得し、下位モジュール代替処理コードに引き渡すための手段を示すもので、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0054】
図2は本発明の(実施の形態2)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュール呼出しパラメータ複写部201から構成される。
【0055】
実行可能命令記憶部106,呼出し検出設定情報114,命令実行部101,下位モジュール呼出し検出設定部103は、(実施の形態1)と同じである。
実行用ワークメモリ領域203は、実行可能命令記憶部106が実行時に使用する領域で、その内部に下位モジュールの呼出しの際のパラメータを格納されている領域である下位モジュール呼出しパラメータ格納領域204と、下位モジュール代替処理コード中で下位モジュール呼出しの際のパラメータを使用するための変数領域である下位モジュール代替処理コード用変数領域205などを格納するメモリ領域である。
【0056】
デバッグ情報202は、テストドライバモジュール107や被テストモジュール110や下位モジュール111やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【0057】
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しを検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うもので、この処理の後に下位モジュール呼出しパラメータ複写部201の処理を行う。
【0058】
下位モジュール呼出しパラメータ複写部201は、下位モジュール代替処理コード109で使用する呼出しパラメータを下位モジュール代替処理コード109で使用できる位置に複写する処理を行うものである。
【0059】
次に、下位モジュール呼出しパラメータ複写部201の動作の詳細について説明する。
図18は下位モジュール呼出しパラメータ複写部201を表す。
【0060】
デバッグ情報202より、下位モジュールの呼出しの際のパラメータの数を取得し(S1801)、カウンタMの値の初期化を行い(S1802)、カウンタNと(S1801)で取得したパラメータ数の比較を行う(S1803)。カウンタNがパラメータより大きくなったときに処理を終了する。
【0061】
下位モジュールのN番目のパラメータの情報をデバッグ情報から取得し(S1804)、下位モジュール代替処理コード中に(S1804)で取得したパラメータ情報と同じ型、同じ名前の変数(下位モジュール代替コード用変数領域205)が存在するか判定する(S1805)。もし存在するならば、その変数(下位モジュール代替コード用変数領域205)に、下位モジュール呼出しパラメータ格納旅域204より取得したパラメータの値を複写する(S1806)。なければカウンタNを“1”足して再び(S1803)の処理を行う。このようにして下位モジュールの呼出しパラメータの数だけこの判定を行い、下位モジュールの呼出しパラメータを下位モジュール代替処理コード用変数領域への複写を行う。
【0062】
本発明の(実施の形態2)にかかるプログラムテスト装置を、図17のプログラム記述例に基づいて説明する。
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【0063】
(P1701)はテストドライバモジュールの記述例を、(P1702)は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【0064】
(P1301)の行番号L01の「SETALTCODESTART(funcname)」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、前記図2のテスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0065】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112により下位モジュール代替処理コードの終了位置を検出できる。
【0066】
テストドライバモジュール(P1701)の行番号L03から行番号L06のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【0067】
(P1701)の行番号L04において、下位モジュール呼出しの時のパラメータ、つまり関数の引数の領域を宣言する。
下位モジュール代替処理コード内で下位モジュール呼出しの際のパラメータと同じ型、同じ名前で宣言を行うことで、下位モジュール呼出しパラメータ複写部201によってこの変数、つまり下位モジュール代替コード用変数領域に下位モジュールの呼出しパラメータの値が複写される。
【0068】
下位モジュール代替処理コード内ではこの変数を使用することで、通常の関数のようにその呼出しパラメータを使用できる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L07の被テストモジュール呼出しの処理に移る。
【0069】
被テストモジュール(P1702)の行番号L08において下位モジュール「func()」が呼び出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によってテストドライバモジュール1701の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更されテストドライバモジュール(P1701)の行番号L04に処理が遷移する。
【0070】
テストドライバモジュール(P1701)の行番号L06まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって被テストモジュール(P1702)の行番号L09に遷移される。
【0071】
図2の下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113の動作は、それぞれ(実施の形態1)の図14,図15,図16に示したフローチャートと同じである。
【0072】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0073】
(実施の形態3)
(実施の形態3)はテストドライバ中に記述された下位モジュール代替処理コードの実行完了の際に、下位モジュール代替処理コードで作られた戻り値を被テストモジュールへ引き渡すための手段を示すもので、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0074】
図3は本発明の(実施の形態3)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュール戻り値複写部301から構成される。
【0075】
実行可能命令記憶部106,呼出し検出設定情報114,命令実行部101,下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113は、(実施の形態1)と同じである。
【0076】
実行用ワークメモリ領域203は、実行可能命令記憶部106が実行時に使用する領域で、その内部に、下位モジュール代替処理コード用戻り値格納領域302と、下位モジュール戻り値格納領域303を有している。
【0077】
デバッグ情報202は、テストドライバモジュール107や被テストモジュール110や下位モジュール111やテスト支援モジュールなどの実行可能命令の、例えば、変数の格納先、各モジュールの定義位置などの情報である。
【0078】
下位モジュール代替処理コード実行遷移部105は、(実施の形態1)と同じである。
下位モジュール代替処理コード実行復帰遷移部113は、下位モジュール代替処理コード109の終了を検出した際に、下位モジュール111の呼出しの次の処理に遷移する処理を行うもので、この処理の後に下位モジュール戻り値複写部301の処理を行う。
【0079】
下位モジュール戻り値複写部301は、戻り値を下位モジュール戻り値格納領域303へ複写する処理を行うものである。
テスト支援モジュール115は(実施の形態1)と同じである。
【0080】
次に、下位モジュール戻り値複写部301の動作の詳細について説明する。
図20は下位モジュール戻り値複写部301を表す。
下位モジュール戻り値複写部301は、前述のテスト支援モジュール115の関数 AltCodeReturn() の呼出しによって実現される。
【0081】
テスト支援モジュール115の関数AltCodeReturn() 引数の格納領域が下位モジュール代替処理コード用戻り値格納領域302に相当し、この下位モジュール代替処理コード用戻り値格納領域302より戻り値の値を取得し(S2001)、取得した戻り値の値を下位モジュール戻り値格納領域303に複写する(S2002)。
【0082】
戻り値の型、下位モジュール戻り値格納領域303についてはデバッグ情報202を参照して取得する。
以上の処理により、下位モジュール代替処理コード109の戻り値を下位モジュールの戻り値として扱うことができる。
【0083】
本発明の(実施の形態3)にかかるプログラムテスト装置を、図19のプログラム記述例に基づいて説明する。
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【0084】
(P1901)はテストドライバモジュールの記述例を、(P1902)は被テストモジュールの記述例をそれぞれ示しており、テスト実施者やプログラム作成者はこの部分を作成することになる。
【0085】
(P1301)の行番号L01の「SETALTCODESTART(funcname)」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、テスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0086】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0087】
テストドライバモジュール(P1901)の行番号L03から行番号L07のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【0088】
(P1901)の行番号L04において、下位モジュール呼出しの時のパラメータ、つまり関数の引数の領域を宣言する。
(P1901)の行番号L06の「AltCodeReturn(cnt)」は、テスト支援モジュール115の中の関数で、上記の「AltFuncEnd()」と同様にこの関数の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0089】
また同時に、引数の「cnt」の値を前記図3の下位モジュール戻り値複写部301によって下位モジュール戻り値格納領域へ複写が行われる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L08の被テストモジュール呼出しの処理に移る。
【0090】
被テストモジュール(P1902)の行番号L08において下位モジュール「func()」が呼び出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によってテストドライバモジュール(P1901)の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更されテストドライバモジュール(P1901)の行番号L04に処理が遷移する。
【0091】
テストドライバモジュール(P1901)の行番号L07まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって被テストモジュール(P1902)の行番号L09に遷移される。
【0092】
図3の下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113は、それぞれ(実施の形態1)、図14,図15,図16に示すフローチャートと同じである。
【0093】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0094】
(実施の形態4)
(実施の形態4)は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数を複写して下位モジュール代替処理コードで扱えるようにし、さらに下位モジュール代替処理コードの実行完了の際に、下位モジュール代替処理コードで操作されたスタティック変数を下位モジュールへ引き渡すための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0095】
図4は本発明の(実施の形態4)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュール戻り値複写部301と、下位モジュールスタティック変数複写部401と、下位モジュールスタティック変数復帰部404から構成される。
【0096】
実行可能命令記憶部106,呼出し検出設定情報114は、(実施の形態1)と同じである。
実行用ワークメモリ領域203は、実行可能命令記憶部が実行時に使用する領域で、その内部に下位モジュール代替処理コード中で下位モジュールの中のスタティック変数を使用するための変数領域である下位モジュール代替処理コード用スタティック変数格納領域402と、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域403などを格納するメモリ領域である。
【0097】
デバッグ情報202は(実施の形態2)と同じで、テストドライバモジュール107や被テストモジュール110や下位モジュール111やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【0098】
命令実行部101は(実施の形態1)と同じである。
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しを検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数複写部401の処理を行う。
【0099】
下位モジュールスタティック変数複写部401は、下位モジュール代替処理コード109で使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域402に複写する処理を行うものである。
【0100】
下位モジュール代替処理コード実行復帰遷移部113は、下位モジュール代替処理コード109の終了を検出した際に、下位モジュール111の呼出しの次の処理に遷移する処理を行うもので、この処理の後に下位モジュール戻り値複写部301もしくは、下位モジュールスタティック変数復帰部404の処理を行う。
【0101】
下位モジュールスタティック変数復帰部404は、下位モジュール代替処理コード109で使用した下位モジュールの中のスタティック変数を下位モジュール用スタティック変数格納領域403に複写する処理を行うものである。
【0102】
テスト支援モジュール115は(実施の形態1)と同じである。
下位モジュールスタティック変数複写部401は、図22に示すように構成されている。
【0103】
下位モジュールスタティック変数複写部401の処理は、前述のテスト支援モジュール115のSetStaticVal()関数の呼出しによって実現される。
SetStaticVal()関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得し呼出し検出設定情報114に格納し(S2201)、SetStaticVal()関数で指定されるスタティック変数の値を格納する一時変数名からデバッグ情報を参照しその格納先を取得し(S2201)で取得したスタティック変数の格納先と共に呼出し検出設定情報114に格納し(S2202)(S2201)で取得したスタティック変数の格納先アドレス、つまり下位モジュール用スタティック変数格納領域403よりその値を取り出し、取り出したスタティック変数の値を値を(S2202)で取得した一時変数の格納先、つまり下位モジュール代替処理コード用スタティック変数格納領域402に複写する(S2203)。
【0104】
以上の処理により、下位モジュール代替処理コード中で下位モジュールで使用されているスタティック変数の値を参照できる。
下位モジュールスタティック変数復帰部404は、図23に示すように構成されている。
【0105】
(S2301)(S2302)では、前述の図22の(S2201)(S2202)において呼出し検出設定情報114に格納したスタティック変数の格納先、一時変数の格納先の情報を取得する。
【0106】
(S2303)では、呼出し検出設定情報114より取得した一時変数の格納先、つまり、下位モジュール代替処理コード用スタティック変数格納領域402よりその値を取り出し、その値をスタティック変数の格納先、つまり下位モジュール用スタティック変数格納領域402に複写する。
【0107】
以上により、下位モジュール代替処理コード109の中で変更されたスタティック変数の値を下位のモジュールのスタティック変数へ反映できる。
本発明の(実施の形態4)にかかるプログラムテスト装置を、図21のプログラム記述例に基づいて説明する。
【0108】
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【0109】
(P2101)はテストドライバモジュールの記述例を、(P2102)は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【0110】
(P1301)の行番号L01の「SETALTCODESTART(funcname) 」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、前記図4のテスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0111】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0112】
テストドライバモジュール(P2101)の行番号L03から行番号L08のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【0113】
(P2101)の行番号L04において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図4の下位モジュール代替処理コード用スタティック変数格納領域402になる。
【0114】
(P2101)の行番号L06の「SetStaticVal(”st_count”,”test.c”,”sval”)」がテスト支援モジュール115の中のテスト支援関数の1つで、この関数を呼び出すことによって下位モジュールスタティック変数複写部401により、第2引数のファイルの中に存在する第1引数のスタティック変数の値を第3引数の一時変数に複写を行う。
【0115】
これにより下位モジュールで使用されているスタティック変数を下位モジュール代替処理コード109の中で使用できる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L09の被テストモジュール呼出しの処理に移る。
【0116】
被テストモジュール(P2102)の行番号L08において下位モジュール「func()」が呼び出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によってテストドライバモジュール(P2101)の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更されテストドライバモジュール(P2101)の行番号L04に処理が遷移する。
【0117】
テストドライバモジュール(P2101)の行番号L08まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって被テストモジュール(P2102)の行番号L09に遷移される。
【0118】
また、このとき下位モジュールスタティック変数復帰部404により、下位モジュール代替処理コードで使用していたスタティック変数に相当する一時変数の値が下位モジュールのスタティック変数に複写される。
【0119】
下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113の構成は、それぞれ(実施の形態1)の図14,図15,図16と同じである。
【0120】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0121】
(実施の形態5)
(実施の形態5)は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数を特定し、下位モジュール代替処理コードの実行中に下位モジュール内で使用されているスタティック変数のダミーとなる変数をアクセスした場合、そのアクセスを検出して下位モジュール内で使用されているスタティック変数に複写したり、あるいは、下位モジュール内で使用されているスタティック変数からダミーとなる変数に複写したりするための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0122】
図5は本発明の(実施の形態5)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュールスタティック変数複写復帰部502と、下位モジュールスタティック変数アクセス検出設定部503から構成される。
【0123】
実行可能命令記憶部106は(実施の形態1)と同じである。呼出し検出設定情報114は(実施の形態2)と同じである。実行用ワークメモリ領域203,デバッグ情報202は(実施の形態4)と同じである。
【0124】
命令実行部101は、実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112と、下位モジュール代替処理コード内スタティック変数アクセス検出部501を備えている。
【0125】
下位モジュール代替処理コード内スタティック変数アクセス検出部501は、下位モジュールスタティック変数アクセス検出設定部503によって設定された下位モジュール代替処理コード内の一時変数へのアクセスを検出する処理である。アクセスが検出されると下位モジュールスタティック変数複写復帰部502の処理を行う。
【0126】
下位モジュールスタティック変数複写復帰部502は、下位モジュールスタティック変数アクセス検出設定部503によって設定された下位モジュール代替処理コード内の一時変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う処理である。
【0127】
下位モジュール呼出し検出設定命令検出部102,下位モジュール呼出し命令検出部104,下位モジュール代替処理コード実行終了検出部112,下位モジュール呼出し検出設定部103は、それぞれ(実施の形態1)と同じである。
【0128】
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しを検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数アクセス検出設定部503の処理を行う。
【0129】
下位モジュールスタティック変数アクセス検出設定部503は、下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする処理である。
【0130】
下位モジュール代替処理コード実行復帰遷移部113,テスト支援モジュール115は、それぞれ(実施の形態1)と同じである。
下位モジュールスタティック変数アクセス設定部503は図25に示すように構成されている。
【0131】
次に、下位モジュールスタティック変数アクセス設定部503の動作の詳細について説明する。
下位モジュールスタティック変数アクセス設定部503の処理は、前述のテスト支援モジュール115の SetStaticValLink() 関数の呼出しによって実現される。
【0132】
SetStaticValLink() 関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得し呼出し検出設定情報114に格納し(S2501)、SetStaticValLink() 関数で指定されるスタティック変数の値を格納する一時変数名からデバッグ情報を参照し、その格納先を取得し(S2501)で取得したスタティック変数の格納先と共に呼出し検出設定情報114に格納する(S2502)。
【0133】
以上の処理により、呼出し検出設定情報114に格納された一時変数の格納先を参照して前記図5の下位モジュール代替処理コード内スタティック変数アクセス検出部501はスタティック変数へのアクセスを検出できる。
【0134】
次に、下位モジュール代替処理コード内スタティック変数アクセス検出部501の動作の詳細について説明する。
図26は、下位モジュール代替処理コード内スタティック変数アクセス検出部501を表す。
【0135】
(S2601)では、実行可能命令記憶部106から呼び出された命令がメモリまたはレジスタに対するアクセスかどうかを判断する。命令がメモリまたはレジスタに対するアクセスの場合は、図25の(S2502)において呼出し検出設定情報114に格納された一時変数の格納位置と命令のアクセスする対象が同じかどうかを(S2602)判断する。同じであれば下位モジュールスタティック変数複写復帰部502の処理を行う。メモリまたはレジスタへのアクセス命令でない場合、設定情報とアクセス対象が異なる場合は処理を終了する。
【0136】
次に、下位モジュールスタティック変数複写復帰部502の動作の詳細について説明する。
図27は、下位モジュールスタティック変数複写復帰部502の動作を表すフローチャートである。
【0137】
下位モジュール代替処理コード109のスタティック変数に対応する一時変数へのアクセスがあった場合、書き込みであった場合は一時変数の値を下位モジュールのスタティック変数へ複写、読み込みであった場合は下位モジュールのスタティック変数の値を一時変数へ複写するといった処理を行う。
【0138】
まず、(S2701)では、図25の(S2501)(S2502)において呼出し検出設定情報114に格納された一時変数の格納先、下位モジュールのスタティック変数の格納先の情報を取得する。
【0139】
(S2702)では、メモリもしくはレジスタアクセスの命令が書き込みであるかを判断する。書き込み命令であれば(S2703)において、一時変数、つまり下位モジュール代替処理コード用スタティック変数格納領域402から変数の値を取得し、スタティック変数、つまり下位モジュール用スタティック変数格納領域403へその値を複写する。
【0140】
(S2702)において書き込み命令でない場合(読み込み命令)は、(S2704)において、下位モジュール用スタティック変数格納領域403からスタティック変数の値を読み出し、下位モジュール代替処理コード用スタティック変数格納領域402へその値を書き込む処理を行う。
【0141】
以上により、下位モジュールのスタティック変数の値をテストドライバモジュールに記述した下位モジュール代替処理コード109の中で扱うことができ、その値をリアルタイムに参照、変更できる。
【0142】
本発明の(実施の形態5)にかかるプログラムテスト装置を、図24のプログラム記述例に基づいて説明する。
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【0143】
(P2401)はテストドライバモジュールの記述例を、(P2402)は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【0144】
(P1301)の行番号L01の「SETALTCODESTART(funcname) 」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、前記図5のテスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0145】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0146】
テストドライバモジュール(P2401)の行番号L03から行番号L08のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【0147】
(P2401)の行番号L04において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図5の下位モジュール代替処理コード用スタティック変数格納領域402になる。
【0148】
(P2401)の行番号L06の「SetStaticValLink(”st_count”,”test.c”,”sval”)」がテスト支援モジュール115の中のテスト支援関数の1つで、この関数を呼び出すことによって下位モジュールスタティック変数アクセス検出設定部503により、第3引数の一時変数にアクセスがあった場合その一時変数の値を参照、変更せずに第1引数で設定されたスタティック変数へアクセスする設定を行う。
【0149】
これにより下位モジュールで使用されているスタティック変数を下位モジュール代替処理コード109の中でリアルタイムに参照、変更できるようになる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L09の被テストモジュール呼出しの処理に移る。
【0150】
被テストモジュール(P2402)の行番号L08において下位モジュール「func()」が呼出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によってテストドライバモジュール(P2401)の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更されテストドライバモジュール(P2401)の行番号L04に処理が遷移する。
【0151】
テストドライバモジュール(P2401)の行番号L08まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって被テストモジュール(P2402)の行番号L09に遷移される。
【0152】
下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113の構成は、それぞれ(実施の形態1)の図14,図15,図16と同じである。
【0153】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0154】
(実施の形態6)
(実施の形態6)は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数のポインタを複写して下位モジュール代替処理コードで扱えるようにするための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0155】
図6は本発明の(実施の形態6)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、スタティック変数ポインタ設定部601から構成される。
【0156】
実行可能命令記憶部106,呼出し検出設定情報114は、(実施の形態1)と同じである。
実行用ワークメモリ領域203は、実行可能命令記憶部が実行時に使用するメモリ領域であり、その内部には、下位モジュール代替処理コード中で下位モジュールの中のスタティック変数を使用するための変数領域である下位モジュール代替処理コード用スタティック変数格納領域602と、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域403などが設けられている。
【0157】
デバッグ情報202,命令実行部101,下位モジュール呼出し検出設定部103は(実施の形態4)と同じである。
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しを検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数ポインタ設定部601の処理を行う。
【0158】
下位モジュールスタティック変数ポインタ設定部601は、下位モジュール111の中のスタティック変数を下位モジュール代替処理コード109で使用する際に、スタティック変数のポインタを下位モジュール代替処理コード109で宣言された一時ポインタ変数に複写する処理を行うものである。
【0159】
下位モジュール代替処理コード実行復帰遷移部113,テスト支援モジュール115は、(実施の形態1)と同じである。
次に、スタティック変数ポインタ設定部601の動作の詳細について説明する。
【0160】
図29はスタティック変数ポインタ設定部601を表す。
スタティック変数ポインタ設定部601の処理は、前述のテスト支援モジュール115のSetStaticValPointer()関数の呼出しによって実現される。
【0161】
(S2901)では、SetStaticValPointer()関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得する。
(S2902)では、SetStaticValPointer()関数で指定されるスタティック変数のポインタを格納する一時変数名からデバッグ情報を参照し、その格納先を取得し(S2901)で取得したスタティック変数の格納先を設定する。
【0162】
以上の処理により、下位モジュールのスタティック変数の操作をポインタとしてテストドライバモジュール内で使用できる。
本発明の(実施の形態6)にかかるプログラムテスト装置を図28のプログラム記述例に基づいて説明する。
【0163】
(P1301)においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【0164】
(P2801)はテストドライバモジュールの記述例を、(P2802)は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【0165】
(P1301)の行番号L01の「SETALTCODESTART(funcname)」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号L02で記述されている「SetAltFunc(funcname)」は、前記図6のテスト支援モジュール115の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P1301)においては「func()」を代替する下位モジュールとして下位モジュール検出設定部103によって設定される。
【0166】
(P1301)の行番号L05の「SETALTCODEEND」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール115の中の関数群の中の一つである「AltFuncEnd()」の呼出しにより下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コードの終了位置を検出できる。
【0167】
テストドライバモジュール(P2801)の行番号L03から行番号L08のように、この2つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【0168】
(P2801)の行番号L04において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図6の下位モジュール代替処理コード用スタティック変数格納領域402になる。
【0169】
(P2801)の行番号L06の「SetStaticValPointer(”st_count”,”test.c”,”psval”)」がテスト支援モジュール115の中のテスト支援関数の1つで、この関数を呼び出すことによってスタティック変数ポインタ設定部601により、第2引数のファイルの中に存在する第1引数のスタティック変数のポインタを第3引数の一時変数(ポインタ)に複写する。
【0170】
これにより下位モジュールで使用されているスタティック変数に対するアクセスの下位モジュール代替処理コード109ができる。
下位モジュール代替処理コードの実行は(P1301)の行番号L03のif文の制御フラグ「AltCtrlFlag」によって制御され通常は実行されないようになっており、(P1301)の行番号L03において下位モジュール呼出し検出設定が終了すると行番号L09の被テストモジュール呼出しの処理に移る。
【0171】
被テストモジュール(P2802)の行番号L08において下位モジュール「func()」が呼出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部105によってテストドライバモジュール(P2801)の行番号L03、マクロ展開すると(P1301)の行番号L03に遷移する。このとき下位モジュール代替処理コード実行遷移部105によって制御フラグ「AltCtrlFlag」が“1”に変更されテストドライバモジュール(P2801)の行番号L04に処理が遷移する。
【0172】
テストドライバモジュール(P2801)の行番号L08まで実行されると上記のように下位モジュール代替処理コード実行終了検出部112によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部113によって被テストモジュール(P2802)の行番号L09に遷移される。
【0173】
下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113の構成は、それぞれ(実施の形態1)の図14,図15,図16と同じである。
【0174】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0175】
(実施の形態7)
(実施の形態7)は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、下位モジュールの呼出し順序に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0176】
図7は本発明の(実施の形態7)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュール呼出し順序記録部701と、下位モジュール代理コード選択部702から構成される。
【0177】
実行可能命令記憶部106は、テストドライバモジュール107と、プログラムテストの対象となる被テストモジュール110と、被テストモジュール110より呼び出される下位モジュール111と、テスト支援の機能をもった関数群であるテスト支援モジュール115から構成される実行可能命令を記憶するものである。
【0178】
テストドライバモジュール107は、テスト実行処理を行うテストドライバ処理コード108と、下位モジュールの処理を記述した複数の下位モジュール代替処理コード109,109,・・・,109nから構成されている。
【0179】
呼出し検出設定情報114は(実施の形態1)と同じである。デバッグ情報202は(実施の形態2)と同じである。
選択条件情報703は、複数からなる下位モジュール代替処理コード109,109,・・・,109nの中から1つを選択するための条件を格納するものである。
【0180】
呼出し順序情報704は、下位モジュール呼出し順序記録部701によって記録された呼出し順序情報を格納するものである。
命令実行部101,下位モジュール呼出し検出設定命令検出部102は、それぞれ(実施の形態1)と同じである。
【0181】
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部701の処理を行う。
【0182】
下位モジュール呼出し順序記録部701は、呼出し順序を呼出し順序情報704に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【0183】
下位モジュール代替処理コード選択部702は、下位モジュールの呼出し回数を呼出し順序情報704から、複数からなる下位モジュール代替処理コード109,109,・・・,109nの中から1つを選択するための条件を選択条件情報703からそれぞれ取り出し、その2つの情報から適切な下位モジュール代替処理コードの選択処理を行う。
【0184】
この処理の後、下位モジュール代替処理コード実行遷移部105の処理によってテストドライバモジュールのなかの下位モジュール代理コードに実行を遷移させる。
【0185】
下位モジュール代替処理コード実行終了検出部112,下位モジュール呼出し検出設定部103は、それぞれ(実施の形態1)と同じである。
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出しを検出した際に、下位モジュール代替処理コード109,109,・・・,109nへ実行を遷移する処理を行うものである。
【0186】
下位モジュール代替処理コード実行復帰遷移部113,テスト支援モジュール115は、先の実施の形態と同じである。
本発明の(実施の形態7)にかかるプログラムテスト装置を図30のプログラム記述例に基づいて説明する。なお、基本的な動作は、(実施の形態1)と同様なので、ここでの説明は省略する。
【0187】
図30に選択条件情報703の記述例とテストドライバモジュールの記述例を示した。
選択条件例703には、被テスト関数から呼び出される下位モジュールの名前(ここではfunc)と、その下位モジュールが呼び出された回数による条件と、その条件の時に行う処理のNoが記述されている。
【0188】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報703に格納しておく。
(P3001)の行番号L03〜L05にデフォルトの処理、行番号L06〜L08に処理No2の処理、行番号L09〜L11に処理No3の処理、行番号L12〜L14に処理No4の処理がそれぞれ記述されている。
【0189】
テスト実行時に、下位モジュール呼出し順序記録部701によってそれぞれの下位モジュールが呼出された回数を呼出し記憶情報に格納しておき、下位モジュール代替処理コード選択部702によって、選択条件情報703より条件を取得する。
【0190】
たとえば、10回目にfuncが呼ばれた場合は図30の(P3001)の行番号L06〜L08に記述された下位モジュール代替処理コードが実行される。
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0191】
(実施の形態8)
(実施の形態8)は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、プログラムの実行時間に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0192】
図8は本発明の(実施の形態8)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、下位モジュール代理コード選択部702とから構成される。
【0193】
実行可能命令記憶部106は、テストドライバモジュール107と、プログラムテストの対象となる被テストモジュール110と、被テストモジュール110より呼び出される下位モジュール111と、テスト支援の機能をもった関数群であるテスト支援モジュール115から構成される実行可能命令を記憶するものである。
【0194】
テストドライバモジュール107は、テスト実行処理を行うテストドライバ処理コード108と、下位モジュールの処理を記述した複数の下位モジュール代替処理コード109,109,・・・,109nから構成されている。
【0195】
呼出し検出設定情報114は、下位モジュール111の呼出し検出や、下位モジュール代替処理コード実行のための設定情報を記憶するものである。
デバッグ情報202は、テストドライバモジュール107や被テストモジュール110や下位モジュール111やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【0196】
選択条件情報703は、複数からなる下位モジュール代替処理コード109の中から1つを選択するための条件を格納するものである。
命令実行部101は、実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112と、テスト実行時に実行時間を測定する実行時間測定部801とを備えている。
【0197】
下位モジュール呼出し検出設定命令検出部102は、(実施の形態1)と同じである。
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部701の処理を行う。
【0198】
下位モジュール呼出し順序記録部701は、呼出し順序を呼出し順序情報704に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【0199】
下位モジュール代替処理コード選択部702は、現在の実行時間を実行時間測定部801から、複数からなる下位モジュール代替処理コード109,109,・・・,109nの中から1つを選択するための条件を選択条件情報703からそれぞれ取り出し、その2つの情報から適切な下位モジュール代替処理コードの選択処理を行う。
【0200】
この処理の後、下位モジュール代替処理コード実行遷移部105の処理によってテストドライバモジュールのなかの下位モジュール代理コードに実行を遷移させる。
【0201】
下位モジュール代替処理コード実行終了検出部112,下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105は、(実施の形態1)と同じである。
【0202】
下位モジュール代替処理コード実行復帰遷移部113,テスト支援モジュール115は、(実施の形態1)と同じである。
本発明の(実施の形態8)にかかるプログラムテスト装置を図40のプログラム記述例に基づいて説明する。なお、基本的な動作は、(実施の形態1)と同様なのでここでの説明は省略する。
【0203】
図40に、選択条件情報703の記述例とテストドライバモジュールの記述例を示した。
選択条件情報703には、被テスト関数から呼び出される下位モジュールの名前(ここではfunc)と、あらかじめ設定した時間による条件と、その条件の時に行う処理のNoが記述されている。
【0204】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報703に格納しておく。
(P4001)の行番号L03〜L05にデフォルトの処理、行番号L06〜L08に処理No2の処理、行番号L09〜L11に処理No3の処理、行番号L12〜L14に処理No4の処理がそれぞれ記述されている。
【0205】
テスト実行時に、実行時間測定部801によって実行時間を測定し、下位モジュール代替処理コード選択部702によって、選択条件情報703より条件を取得する。
【0206】
たとえば、funcの呼出し時に、10msであれば図40の(P4001)の行番号L06〜L08に記述された下位モジュール代替処理コードが実行される。
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0207】
(実施の形態9)
(実施の形態9)は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、下位モジュールを呼出した関数の種類に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0208】
図9は本発明の(実施の形態9)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、呼出し元関数取得部901と、下位モジュール代理コード選択部702から構成される。
【0209】
実行可能命令記憶部106,呼出し検出設定情報114は(実施の形態7)と同じである。
選択条件情報703は、複数からなる下位モジュール代替処理コード109,109,・・・,109nの中から1つを選択するための条件を格納するものである。
【0210】
命令実行部101は、(実施の形態1)と同じように実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112を備えている。
【0211】
下位モジュール呼出し検出設定命令検出部102は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行う。下位モジュール呼出し検出設定命令が検出されたときは、下位モジュール呼出し検出設定部103の処理を行う。
【0212】
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、呼出し元関数取得部901の処理を行う。
【0213】
呼出し元関数取得部901は、実行用ワークメモリ領域203により下位モジュールの呼出し元の関数を取得する処理で、この処理の後下位モジュール代理コード選択部702の処理を行う。
【0214】
下位モジュール代替処理コード実行終了検出部112は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール代替処理コード実行復帰遷移部113の処理を行う。
【0215】
下位モジュール呼出し検出設定部103は、下位モジュール111の呼出しの検出を行うための設定を行うものである。
下位モジュール代替処理コード実行遷移部105は、下位モジュール111の呼出し検出した際に、下位モジュール代替処理コード109へ実行を遷移する処理を行うものである。
【0216】
下位モジュール代替処理コード実行復帰遷移部113は、下位モジュール代替処理コード109の終了を検出した際に、下位モジュール111の呼出しの次の処理に遷移する処理を行うものである。
【0217】
テスト支援モジュール115は、下位モジュール呼出し検出の設定などのテスト支援の機能をもった関数群で、予め用意されているこれらの関数群をテスト実施者やプログラム作成者はテストドライバモジュール内で使用してテストドライバモジュールの作成を行う。
【0218】
本発明の(実施の形態9)にかかるプログラムテスト装置を図39のプログラム記述例に基づいて説明する。なお、基本的な動作は(実施の形態1)と同様なのでここでの説明は省略する。
【0219】
図39に、選択条件情報703の記述例とテストドライバモジュールの記述例を示した。
選択条件情報703の記述例には、被テストモジュールから呼び出される下位モジュールの名前(ここではfunc)と、その下位モジュールを呼び出す、呼出し元関数名という条件と、その条件の時に行う処理のNoが記述されている。
【0220】
この選択条件情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報703に格納しておく。
P3901の行番号L03〜L05にデフォルトの処理、行番号L06〜L08に処理No2の処理、行番号L09〜L11に処理No3の処理、行番号L12〜L14に処理No4の処理がそれぞれ記述されている。テスト実行時に、呼出し元関数取得部901によって下位モジュールを呼出した呼出し元関数名を取得し、下位モジュール代替処理コード選択部702によって、選択条件情報703より条件を取得する。
【0221】
たとえば、呼出し元関数sub_funcからfuncが呼び出された場合は図39のP3901の行番号L06〜L08に記述された下位モジュール代替処理コードが実行される。
【0222】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュールを効率的にテストできる。
【0223】
(実施の形態10)
(実施の形態10)は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段を持つ場合において、テストドライバ中に記述された下位モジュール代替処理コードの選択条件を取得する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【0224】
図10は本発明の(実施の形態10)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行遷移部105と、下位モジュール代替処理コード実行復帰遷移部113と、代替コード選択条件取得部1002と、下位モジュール代理コード選択部702から構成される。
【0225】
実行可能命令記憶部106,呼出し検出設定情報114,選択条件情報703は、(実施の形態7)と同じである。
命令実行部101は、実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112と、下位モジュール代替処理コード内選択条件設定命令検出部1001を備えている。
【0226】
下位モジュール代替処理コード内選択条件設定命令検出部1001とは、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部1002において代替コード選択条件を取得しその条件を選択条件情報703に格納する。この処理の後に下位モジュール代替処理コード選択部702の処理を行う。
【0227】
下位モジュール代替処理コード選択部702は、複数ある下位モジュール代替処理コードから、選択条件情報703に格納された条件に合ったものを選択する処理を行う。この処理の後に、下位モジュール代替処理コード実行遷移部105によって下位モジュール代替処理コードへ実行を遷移させる。
【0228】
下位モジュール呼出し検出設定命令検出部102は、(実施の形態7)と同じである。
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部701の処理を行う。
【0229】
下位モジュール呼出し順序記録部701は、呼出し順序を呼出し順序情報704に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【0230】
下位モジュール代替処理コード実行終了検出部112,下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行遷移部105,下位モジュール代替処理コード実行復帰遷移部113,テスト支援モジュール115は、(実施の形態7)と同じである。
【0231】
本発明の(実施の形態10)にかかるプログラムテスト装置を図41のプログラム記述例に基づいて説明する。なお、基本的な動作は、(実施の形態1)と同様なので、ここでの説明は省略する。
【0232】
図41に、選択条件情報703の記述例とテストドライバモジュールの記述例を示した。
選択条件例703には、被テスト関数から呼び出される下位モジュールの名前(ここではfunc)と、状態を表わす変数名(stat)と状態を表わす値による条件と、その条件の時に行う処理のNoが記述されている。
【0233】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報703に格納しておく。
(P4101)の行番号L03〜L05にデフォルトの処理、行番号L06〜L08に処理No2の処理、行番号L09〜L11に処理No3の処理、行番号L12〜L14に処理No4の処理がそれぞれ記述されている。
【0234】
テスト実行時に、下位モジュール呼出し順序記録部701によってそれぞれの下位モジュールが呼出された回数を呼出し記憶情報に格納しておき、下位モジュール代替処理コード選択部702によって、選択条件情報703より条件を取得する。
【0235】
たとえば、状態を表わす変数名(stat)の値が0x0001の状態でfuncが呼ばれた場合は図41の(P4101)の行番号L06〜L08に記述された下位モジュール代替処理コードが実行される。
【0236】
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を複数個記述し、その選択条件もテストドライバ中に記述することが可能となり、被テストモジュールを効率的にテストできる。
【0237】
(実施の形態11)
(実施の形態11)は被テストモジュールから呼び出される下位モジュールでの変数と戻り値に関わる応答処理をテストドライバ中に記述しそれを実行するための手段を示すもので、比較的簡単に効果のあるプログラムテスト装置を実現できることができ、これを使うことでプログラムの開発期間を短縮できる。
【0238】
図11は本発明の(実施の形態11)にかかるプログラムテスト装置を示す。
プログラムテスト装置100は、命令実行部101と、下位モジュール呼出し検出設定部103と、下位モジュール代替処理コード実行復帰遷移部113と、変数操作情報取得部1102と、下位モジュール内スタティック変数設定部1105と、下位モジュール戻り値設定部1106とから構成される。
【0239】
実行可能命令記憶部106,呼出し検出設定情報114は、(実施の形態1)と同じである。
命令実行部101は、実行可能命令記憶部106より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部102と、下位モジュール呼出し命令検出部104と、下位モジュール代替処理コード実行終了検出部112と、変数操作命令検出部1101と、戻り値操作命令検出部1103を備えている。
【0240】
下位モジュール呼出し検出設定命令検出部102は、(実施の形態1)と同じである。
下位モジュール呼出し命令検出部104は、実行可能命令記憶部106より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール内スタティック変数設定部1105、下位モジュール戻り値設定部1106の処理を行う。
【0241】
変数操作命令検出部1101は、実行可能命令記憶部106より読み出した下位モジュール内変数操作命令の判定を行う。下位モジュール内変数操作命令が検出されたときは、変数操作情報取得部1102の処理を行う。
【0242】
戻り値操作命令検出部1103は、実行可能命令記憶部106より読み出した下位モジュール戻り値操作命令の判定を行う。下位モジュール戻り値操作命令が検出されたときは、戻り値操作情報取得部1104の処理を行う。
【0243】
下位モジュール呼出し検出設定部103,下位モジュール代替処理コード実行復帰遷移部113は、(実施の形態1)と同じである。
図32は、変数操作命令検出部1101、変数操作情報取得部1102についての動作をあらわすフローチャートである。
【0244】
変数操作命令検出部1101は、変数操作命令を検出すると、変数操作情報取得部1102の処理が実行される。変数操作命令の引数から被テストモジュール内のstatic変数名、変更したい値を取得し、変数操作情報1107に登録設定する。
【0245】
図33は、戻り値操作命令検出部1103、戻り値操作情報取得部1104についての動作をあらわすフローチャートである。
戻り値操作命令検出部1103は、戻り値操作命令を検出すると、戻り値操作情報取得部1104の処理が実行される。戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報1108に登録設定する。
【0246】
図34は、下位モジュール呼出し命令検出部104、下位モジュール内スタティック変数設定部1105、下位モジュール戻り値設定部1106についての動作をあらわすフローチャートである。
【0247】
下位モジュール呼出し命令検出部104は、下位モジュール呼出し命令を検出すると、下位モジュール内スタティック変数設定部1105、下位モジュール戻り値設定部1106の処理が実行される。戻り値操作命令の引数から変更したい値を取得し、変数操作情報1107に登録設定する。
【0248】
本発明の(実施の形態11)にかかるプログラムテスト装置を図31のプログラム記述例に基づいて説明する。
(P3101)においては、はテストドライバモジュールの記述例を、(P3102)は、被テストモジュールの記述例をそれぞれ示している。
【0249】
(P3101)の行番号L03で記述されている「SetAltFunc(”func”);」を呼び出すことで下位モジュール呼出し検出設定命令検出部102により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した(P3101)においては「func()」を代替する下位モジュールとして下位モジュール呼出し検出設定部103によって設定される。
【0250】
(P3101)の行番号L04で記述されている「SetAltStatic(”func”,”func.c”,”fs”,10);」を呼び出すことで変数操作命令検出部1101により、変数操作命令の呼出し検出が行われる。この関数の引数で指定した(P3101)においてはfunc.c内のスタティック変数fsの情報をデバッグ情報202から変数操作情報取得部1102によって取得し、変数操作情報1107に設定する。
【0251】
(P3101)の行番号L05で記述されている「SetAltReturn(”func”,”func.c”,7);」を呼び出すことで戻り値操作命令検出部1103により、戻り値操作命令の呼出し検出が行われる。この関数の引数で指定した(P3101)においてはfuncの戻り値を戻り値操作情報取得部1104によって取得し、戻り値操作情報1108に設定する。
【0252】
(P3101)の行番号L07の被テストモジュール呼出しの処理に移る。
被テストモジュール(P3102)の行番号L09において下位モジュール「func()」が呼出されL02の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部104により下位モジュールの検出が行われる。このとき下位モジュール内スタティック変数設定部1105が変数操作情報1107から変更する変数情報を取り出し、実行用ワークメモリ領域203の下位モジュール内スタティック格納領域1109に値を設定する。次に、下位モジュール戻り値設定部1106が戻り値操作情報1108から戻り値情報を取得し、実行用ワークメモリ領域203の下位モジュール戻り値格納領域1110に値を設定する。
【0253】
被テストモジュール(P3102)の行番号L09の実行完了時には、スタティック変数fsは“10”に、funcの戻り値zは“7”に設定されている。
以上のように、このプログラムテスト装置100によれば、テストドライバモジュール107中に、テストの対象である被テストモジュール110から呼び出される下位モジュール111の処理を記述することで、被テストモジュール110を効率的にテストできる。
【0254】
(実施の形態12)
上記の各実施の形態では、プログラム実行時に動的に下位モジュール代替処理を行ってきたが、この(実施の形態12)ではプログラム実行以前に未作成の下位モジュール呼出し処理をテストドライバの下位モジュール代替処理コードに置き換えて新ソースファイルを生成する。
【0255】
詳しくは、(実施の形態12)のソースファイル変換装置では、被テストモジュールから呼び出される下位モジュールでの処理をテストドライバ中に記述し、その記述を抽出後、被テストモジュールの中に埋め込むための手段を示すもので、プログラム実行前に処理を行うことができるために適用範囲が広い。本発明を使うことでプログラムの開発期間を短縮できる。
【0256】
図12は本発明の(実施の形態12)にかかるソースファイル変換装置を示し、プログラムのコンパイル前に下位モジュール呼出し記述をテストドライバモジュールに記述された下位モジュール代替処理コードに置き換えるものである。
【0257】
このプログラムテスト装置は、ソースファイルA1207及びソースファイルB1212を入力とし、プログラムテスト用ソースファイル変換装置1201によって、新ソースファイルB1215が生成される。
【0258】
入力となるソースファイルA1207は、テストドライバ処理コード1209、コメントとして記述された下位モジュール代替処理コード1210が記述されたテストドライバモジュール1208で構成されている。
【0259】
ソースファイルB1211は、被テストモジュール1212、下位モジュール1213で構成する。
出力となる新ソースファイルB1214は、変更後被テストモジュール1215、下位モジュール1216で構成される。ソースファイルB1211の下位モジュール1213と新ソースファイルB1214の下位モジュール1216で同一である。
【0260】
プログラムテスト用ソースファイル変換装置1201は、ソースファイルA1207からコメントとして記述された下位モジュール代替処理コード1210を抽出して代替処理コード情報1217に格納する下位モジュール代替処理コード抽出部1202と、ソースファイルB1211から下位モジュール呼出し位置を検出を検出して下位モジュール呼出し位置情報1218に格納する下位モジュール呼出し位置検出部1203と、下位モジュール呼出し位置検出部1203で検出した下位モジュール呼出しコードから引数情報を抽出する引数設定情報抽出部1204と、同じく下位モジュール呼出しコードから戻り値情報を抽出する戻り値設定情報抽出部1205と、代替処理コード情報1217と引数設定情報1219と戻り値設定情報1220から変更するコードを作成して下位モジュール呼出し位置情報1218に格納された位置の記述を変更するコードに置き換える下位モジュール代替処理コード挿入部1206とから構成される。
【0261】
図35は新ソースファイルB1214の生成方法の一例を示す。
テストドライバモジュール(P3501)において、(P3501)の行番号L04の「$ALTCODESTART int subFunc(int x,int y)」はコメントアウトとして記述された下位モジュール代替処理コード1210の開始命令で、(P3501)の行番号L04から引数x、yについて引数型、引数名を抽出して引数設定情報1219に格納する。行番号L05の「//下位モジュール代替処理コード処理」から(P3501)の行番号L08の「fg=z*2;」までを代替処理コード情報1217に登録する。(P3501)の行番号L09の「$ALTCODERETURN z」はコメントとして記述された下位モジュール代替処理コード1210の戻り値設定命令で、戻り値zを抽出して戻り値設定情報1220に格納する。
【0262】
(P3501)の行番号L10「$ALTCODEEND」はコメントとして記述された下位モジュール代替処理コード1210の終了命令であり下位モジュール代替処理コードの抽出が終了する。
【0263】
被テストモジュール(P3502)おいて、下位モジュール呼出し以外の行はそのまま新ソースファイルに出力する。(P3502)の行番号L06の「fz = subFunc( fx,fy );」から引数fx、fyを引数設定情報1219に格納し、戻り値fzを戻り値設定情報1220に格納する。
【0264】
次に、下位モジュール代替処理コード挿入部1206が変更後被テストモジュール(P3503)の行番号L07,L08のように引数設定情報1219に格納されている引数fx、fyを(P3501)の行番号L04で抽出したx、yに代入する形にしてファイル出力する。次に、戻り値設定情報1220に格納されているzとfzを代替処理コード情報1217の内容を(P3503)のL09からL11に出力する。最後に、(P3503)の行番号L12のように戻り値設定情報1220に格納されているzをfzに代入する形にしてファイル出力する。なお、この部分は(P3503)のL06、L13で示すように{ }でくくる複文としてファイル出力する。以上の通りテストドライバモジュール(P3501)と被テストモジュール(P3502)を用いて変更後被テストモジュール(P3503)を生成する。
【0265】
図36は下位モジュール代替処理コード抽出部1202のフローチャートである。先ず(S3601)でソースファイルA1207から1行読み出しを行う。次に(S3602)でソースファイルA1207のファイルの終了判定を行い、ファイルの終了である場合は処理を終え、ファイルの終了でなければ(S3603)に移る。(S3603)では、下位モジュール代替処理コード中の開始命令であるかどうかを判定し、開始命令であれば(S3608)に、開始命令でなければ(S3604)に移る。(S3608)では、下位モジュール代替処理コードの開始命令を抽出したことを記録する処理開始フラグを設定する。次に、(S3609)では開始命令から開始命令から関数名を抽出して下位モジュール呼出し位置情報1218に格納して、引数の型、変数名を抽出して引数設定情報1219に格納し、(S3601)に移る。
【0266】
(S3604)では、下位モジュール代替処理コード中の戻り値設定命令であるかどうかを判定し、戻り値設定命令である場合は(S3601)で戻り値を抽出して戻り値設定情報1220に格納し、戻り値設定命令でない場合は(S3605)に移る。(S3605)では下位モジュール代替処理コード中の終了命令であるかどうかを判定し、終了命令である場合は(S3611)で下位モジュール代替処理コードの終了命令を抽出したことを記録するために処理開始フラグをクリアし、終了命令でない場合は、(S3606)に移る。(S3606)では処理開始フラグが設定されているかクリアされているかを判定して設定されていれば取得行を代替処理コード情報1217に追加し、クリアされていれば(S3601)に移る。
【0267】
図37は下位モジュール呼出し位置検出部1203と、引数設定情報抽出部1204と、戻り値設定情報抽出部1205のフローチャートである。
初めに、(P3701)でソースファイルB1207から1行読み出しを行う。(P3703)で下位モジュール呼出し位置情報1218に登録された関数名と現在取得した行の関数名が一致すれば、引数設定情報抽出、戻り値設定情報抽出、下位モジュール代替処理コード挿入処理を行う。一致しない場合は、そのまま取得行を新ソースファイルB1214へ出力する。(P3705)では引数値を引数設定情報1219に設定する。(P3706)では戻り値変数名を戻り値設定情報1220に設定する。次に(P3707)の処理に移る。なお(P3707)の処理は図38で説明する。
【0268】
図38は、下位モジュール代替処理コード挿入部1206を説明するフローチャートである。まず、複文の始まりを示す{を新ソースファイルB1214へ出力する。(P3801)では引数設定情報1219の引数型、引数名、引数値をもとにして代入式を作り、新ソースファイルB1214へ出力する。登録された引数分処理を繰り返す。
【0269】
(P3802)では、代替処理コード情報1217に登録されたコード全てを新ソースファイルB1214へ出力する。(P3803)では、戻り値設定情報1220の戻り値変数名、戻り値を基にして代入式を作り、新ソースファイルBへ出力する。最後に複文の終わりを示す}を新ソースファイルB1214へ出力する。
【0270】
生成された新ソースファイルB1214では、下位モジュールを呼び出す処理が、コメントとして記述された下位モジュール代替処理コード1210を用いて従来の装置で実行可能なプログラムに変換されるため、(実施の形態1)から(実施の形態11)のような装置を必要とせず、従来の装置でプログラムのテストが行える。
【0271】
以上のようにソースファイル変換装置1201によれば、テストドライバの中に記述された代替処理コードを抽出し、ソースファイル中の被テストモジュールの中の下位モジュール呼出し部分を抽出した代替処理コードで効率よく置き換えることができ、被テストモジュールを効率的にテストできる。
【0272】
【発明の効果】
以上のように本発明のプログラムテスト装置によれば、被テストモジュールなどから呼び出される下位モジュールに代替する処理をテストドライバ中に記述することができ、これによりテストドライバの動作や下位モジュールの動きを容易に理解できるようになるため、プログラムの単体テスト作成工数やデバッグ工数、メンテナンス工数を短縮できる。
【0273】
また、単体テストの作業効率を高めることで、従来、単体テストの効率の悪さから十分な単体テストが行われてこなかった慣行が改められ高品質プログラムの作成をローコストで実現できるようになる。
【0274】
さらに、本発明にかかるプログラムテスト装置は、ハードウェアによって実装されたものに限定されるものではなく、プロセッサの動作を模擬するシミュレータやエミュレータ、さらに、仮想マシンやインタープリタのようなものにも広範囲に適用できるもので、さまざまな種類のプログラムの単体テスト作業時間の短縮に寄与できる。
【図面の簡単な説明】
【図1】本発明の(実施の形態1)にかかるプログラムテスト装置の構成図
【図2】本発明の(実施の形態2)にかかるプログラムテスト装置の構成図
【図3】本発明の(実施の形態3)にかかるプログラムテスト装置の構成図
【図4】本発明の(実施の形態4)にかかるプログラムテスト装置の構成図
【図5】本発明の(実施の形態5)にかかるプログラムテスト装置の構成図
【図6】本発明の(実施の形態6)にかかるプログラムテスト装置の構成図
【図7】本発明の(実施の形態7)にかかるプログラムテスト装置の構成図
【図8】本発明の(実施の形態8)にかかるプログラムテスト装置の構成図
【図9】本発明の(実施の形態9)にかかるプログラムテスト装置の構成図
【図10】本発明の(実施の形態10)にかかるプログラムテスト装置の構成図
【図11】本発明の(実施の形態11)にかかるプログラムテスト装置の構成図
【図12】本発明の(実施の形態12)にかかるプログラムテスト装置の構成図
【図13】本発明の(実施の形態1)にかかるプログラムテスト装置のプログラム記述例
【図14】(実施の形態1)の下位モジュール呼出し検出設定部の動作を表すフローチャート
【図15】(実施の形態1)の下位モジュール代替処理コード実行遷移部の動作を表すフローチャート
【図16】(実施の形態1)の下位モジュール代替処理コード実行復帰遷移部の動作をあらわすフローチャート
【図17】本発明の(実施の形態2)にかかるプログラムテスト装置のプログラム記述例
【図18】(実施の形態2)の下位モジュール呼出しパラメータ複写部の動作を表すフローチャート
【図19】本発明の(実施の形態3)にかかるプログラムテスト装置のプログラム記述例
【図20】下位モジュール戻り値複写部の動作を表すフローチャート
【図21】本発明の(実施の形態4)にかかるプログラムテスト装置のプログラム記述例
【図22】(実施の形態4)の下位モジュールスタティック変数複写部の動作を表すフローチャート
【図23】(実施の形態4)の下位モジュールスタティック変数復帰部の動作を表すフローチャート
【図24】本発明の(実施の形態5)にかかるプログラムテスト装置のプログラム記述例
【図25】(実施の形態5)の下位モジュールスタティック変数アクセス設定部の動作を表すフローチャート
【図26】(実施の形態5)の下位モジュール代替処理コード内スタティック変数アクセス検出部の動作を表すフローチャート
【図27】(実施の形態5)の下位モジュールスタティック変数複写復帰部の動作を表すフローチャート
【図28】本発明の(実施の形態6)にかかるプログラムテスト装置のプログラム記述例
【図29】スタティック変数ポインタ設定部の動作を表すフローチャート
【図30】本発明の(実施の形態9)にかかるプログラムテスト装置のプログラム記述例
【図31】本発明の(実施の形態11)にかかるプログラムテスト装置のプログラム記述例
【図32】(実施の形態11)の変数操作部命令検出部、変数操作部命令取得部についての動作をあらわすフローチャート
【図33】(実施の形態11)の戻り値操作部命令検出部、戻り値操作部命令取得部についての動作をあらわすフローチャート
【図34】(実施の形態11)の下位モジュール呼出し命令検出部、被テストモジュール内スタティック変数設定部、下位モジュール戻り対設定部についての動作をあらわすフローチャート
【図35】本発明における(実施の形態12)を説明するためのプログラム記述例
【図36】(実施の形態12)の下位モジュール代替処理コード抽出部のフローチャート
【図37】(実施の形態12)の下位モジュール呼出し位置検出部と、引数設定情報抽出部と、戻り値設定情報抽出部のフローチャート
【図38】(実施の形態12)の下位モジュール代替処理コード挿入部を説明するフローチャート
【図39】本発明の(実施の形態9)にかかるプログラムテスト装置のプログラム記述例
【図40】本発明の(実施の形態8)にかかるプログラムテスト装置のプログラム記述例
【図41】本発明の(実施の形態10)にかかるプログラムテスト装置のプログラム記述例
【符号の説明】
100 プログラムテスト装置
101 命令実行部
102 下位モジュール呼出し検出設定命令検出部
103 下位モジュール呼出し検出設定部
104 下位モジュール呼出し命令検出部
105 下位モジュール代替処理コード実行遷移部
106 実行可能命令記憶部
107 テストドライバモジュール
108 テストドライバ処理コード
109 下位モジュール代替処理コード
110 被テストモジュール
111 下位モジュール
112 下位モジュール代替処理コード実行終了検出部
113 下位モジュール代替処理コード実行復帰遷移部
114 呼出し検出設定情報
115 テスト支援モジュール
201 下位モジュール呼出しパラメータ複写部
202 デバッグ情報
203 実行用ワークメモリ領域
204 下位モジュール呼出しパラメータ格納領域
205 下位モジュール代替処理コード用変数領域
301 下位モジュール戻り値複写部
302 下位モジュール代替処理コード用戻り値格納領域
303 下位モジュール戻り値格納領域
401 下位モジュールスタティック変数複写部
402 下位モジュール代替処理コード用スタティック変数格納領域
403 下位モジュール用スタティック変数格納領域
404 下位モジュールスタティック変数復帰部
501 下位モジュール代替処理コード内スタティック変数アクセス検出部
502 下位モジュールスタティック変数複写復帰部
503 下位モジュールスタティック変数アクセス検出設定部
601 スタティック変数ポインタ設定部
602 下位モジュール代替処理コード用スタティック変数ポインタ格納領域
701 下位モジュール呼出し順序記録部
702 下位モジュール代替処理コード選択部
703 選択条件情報
704 呼出し順序情報
801 実行時間測定部
901 呼出し元関数取得部
902 下位モジュール戻り番地格納領域
1001 下位モジュール代替処理コード内選択条件設定命令検出部
1002 代替コード選択条件取得部
1101 変数操作命令検出部
1102 変数操作情報取得部
1103 戻り値操作命令検出部
1104 戻り値操作情報取得部
1105 下位モジュール内スタティック変数設定部
1106 下位モジュール戻り値設定部
1107 変数操作情報
1108 戻り値操作情報
1109 下位モジュール用スタティック格納領域
1110 下位モジュール戻り値格納領域
1201 プログラムテスト用ソースファイル変換装置
1202 下位モジュール代替処理コード抽出部
1203 下位モジュール呼出し位置検出部
1204 引数設定情報抽出部
1205 戻り値設定情報抽出部
1206 下位モジュール代替処理コード挿入部
1207 ソースファイルA
1208 テストドライバモジュール
1209 テストドライバ処理コード
1210 コメントとして記述された下位モジュール代替処理コード
1211 ソースファイルB
1212 被テストモジュール
1213 下位モジュール
1214 新ソースファイルB
1215 変更後被テストモジュール
1216 下位モジュール
1217 代替処理コード情報
1218 下位モジュール呼出し位置情報
1219 引数設定情報
1220 戻り値設定情報

Claims (12)

  1. モジュールプログラムをテストするプログラムテスト装置であって、
    実行可能命令を記憶する実行可能命令記憶部より命令を取り出し実行する命令実行部と、
    前記実行可能命令記憶部に設けられプログラムテストの対象となる被テストモジュールより呼び出される下位モジュールの呼出しの検出を行う設定をする下位モジュール呼出し検出設定部と、
    前記下位モジュールの呼出しを検出した際に下位モジュールの処理を記述した下位モジュール代替処理コードへ実行を遷移する処理を行う下位モジュール代替処理コード実行遷移部と、
    前記下位モジュール代替処理コードの終了を検出した際に、下位モジュールの呼出しの次の処理に遷移する処理を行う下位モジュール代替処理コード実行復帰遷移部と
    を設け、前記命令実行部には、
    前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行い、下位モジュール呼出し検出設定命令が検出されたときは、前記下位モジュール呼出し検出設定部の処理を行う下位モジュール呼出し検出設定命令検出部と、
    前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出しの検出を行い、下位モジュール呼出し命令が検出されたときは、前記下位モジュール代替処理コード実行遷移部の処理を行う下位モジュール呼出し命令検出部と、
    前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行い、下位モジュール代替処理コード実行の終了が検出されたときは、前記下位モジュール代替処理コード実行復帰遷移部の処理を行う下位モジュール代替処理コード実行終了検出部と
    を設け、下位モジュールの呼出しの代わりにテストドライバモジュール内部の下位モジュール代替処理コードを実行することを特徴とする
    プログラムテスト装置。
  2. 前記下位モジュール代替処理コードで使用する呼出しパラメータを前記下位モジュール代替処理コードで使用できる位置に複写する処理を行う下位モジュール呼出しパラメータ複写部を設け、
    下位モジュール代替処理コードを実行しようとするとき、被テストモジュールによって下位モジュールの呼出しの際に渡されたパラメータを下位モジュール代替処理コードがアクセスできる領域へ複写する
    請求項1記載のプログラムテスト装置。
  3. 前記下位モジュール代替処理コードを実行して戻り値がセットされる下位モジュール代替処理コード用戻り値格納領域より取得した戻り値を下位モジュール戻り値格納領域へ複写する処理を行う下位モジュール戻り値複写部を設け、
    下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用戻り値格納領域の内容を下位モジュールからの戻り値として複写する
    請求項1記載のプログラムテスト装置。
  4. 前記下位モジュール代替処理コードで使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数複写部と、
    前記下位モジュール代替処理コードで使用した下位モジュールの中のスタティック変数を、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数復帰部と
    をさらに備えたものであって、下位モジュール代替処理コードを実行しようとするとき、下位モジュール内のスタティック変数の値を複写し、かつ、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用スタティック変数格納領域から下位モジュール用スタティック変数格納領域へ復帰することを特徴とする
    請求項1記載のプログラムテスト装置。
  5. 下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする下位モジュールスタティック変数アクセス検出設定部と、
    前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスを検出する下位モジュール代替処理コード内スタティック変数アクセス検出部と、
    前記下位モジュール代替処理コード内スタティック変数アクセス検出部でアクセスが検出された場合に動作して、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う下位モジュールスタティック変数複写復帰部と
    をさらに備え、下位モジュール代替処理コードを参照しようとするとき、下位モジュール内のスタティック変数の値を下位モジュール代替処理コード用スタティック変数格納領域に複写し、かつ、命令実行部において下位モジュール代替処理コードが下位モジュール代替処理コード用スタティック変数格納領域を変更しようとするときに、下位モジュール用スタティック変数格納領域へ複写する
    請求項1記載のプログラムテスト装置。
  6. 下位モジュールの中のスタティック変数を下位モジュール代替処理コードで使用する際に、スタティック変数のポインタを下位モジュール代替処理コードで宣言された一時ポインタ変数に複写する処理を行うスタティック変数ポインタ設定部をさらに備え、命令実行部において下位モジュール代替処理コードにより下位モジュール代替処理コード用スタティック変数ポインタを使って下位モジュール用スタティック変数格納領域へアクセスする
    請求項1記載のプログラムテスト装置。
  7. 呼出し順序を呼出し順序情報に格納する処理を行う下位モジュール呼出し順序記録部と、
    呼出し順序情報と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部と
    をさらに備え、下位モジュール呼出し順序に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行する
    請求項1記載のプログラムテスト装置。
  8. テスト実行時に実行時間を測定する実行時間測定部と、
    実行時間測定部で測定した実行時間と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部と
    をさらに備え、プログラムの実行時間に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする
    請求項1記載のプログラムテスト装置。
  9. テスト実行時に下位モジュールを呼出した呼出し元関数名を取得する呼出し元関数取得部と、
    呼出し元関数取得部で取得した関数名と、複数からなる下位モジュール代替処理コードの中から1つを選択するための条件を格納する選択条件情報よりテスト実行時に条件を取得する下位モジュール代替処理コード選択部と
    をさらに備え、下位モジュールを呼出した関数に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする
    請求項1記載のプログラムテスト装置。
  10. 下位モジュール代替処理コード内選択条件設定命令検出部と、
    代替コード選択条件取得部と、
    下位モジュール代替処理コード選択部と
    をさらに備え、
    下位モジュール代替処理コード内選択条件設定命令検出部は、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部において代替コード選択条件を取得しその条件を格納して下位モジュール代替処理コード選択部の処理を行って、テストドライバモジュール内に記述されている複数の下位モジュール代替処理コードの選択条件をテストドライバ中に記述できるよう構成したことを特徴とする
    請求項1記載のプログラムテスト装置。
  11. 実行可能命令記憶部より読み出した下位モジュール内変数操作命令の判定を行う変数操作命令検出部と、
    前記変数操作命令検出部が変数操作命令を検出すると変数操作命令の引数から被テストモジュール内のstatic変数名、変更したい値を取得し、変数操作情報に登録設定する変数操作情報取得部と、
    実行可能命令記憶部より読み出した下位モジュール戻り値操作命令の判定を行う戻り値操作命令検出部と、
    前記戻り値操作命令検出部画戻り値操作命令を検出すると戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報に登録設定する戻り値操作情報取得部と、
    下位モジュール呼出し命令検出部が下位モジュール呼出し命令を検出すると前記変数操作情報から変更する変数情報を取り出し、実行用ワークメモリ領域の下位モジュール内スタティック格納領域に値を設定する下位モジュール内スタティック変数設定部と、
    前記戻り値操作情報から戻り値情報を取得し、前記実行用ワークメモリ領域の下位モジュール戻り値格納領域に値を設定する下位モジュール戻り値設定部と
    をさらに備え、下位モジュールを呼出したときに下位モジュールの持つスタティック変数に任意の値を設定したり、下位モジュールの戻り値を決める処理をテストドライバ処理コードの中に記述できるよう構成したことを特徴とする
    請求項1記載のプログラムテスト装置。
  12. 下位モジュール代替処理コード抽出部と、
    下位モジュール呼出し位置検出部と、
    引数設定情報抽出部と、
    戻り値設定情報抽出部と、
    下位モジュール代替処理コード挿入部と
    を有し、被テストモジュールの中の下位モジュール呼出し記述をテストドライバモジュール中に記述された下位モジュール代替処理コードに置き換えるソースファイル変換装置。
JP2003079226A 2003-03-24 2003-03-24 プログラムテスト装置 Pending JP2004287858A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003079226A JP2004287858A (ja) 2003-03-24 2003-03-24 プログラムテスト装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003079226A JP2004287858A (ja) 2003-03-24 2003-03-24 プログラムテスト装置

Publications (1)

Publication Number Publication Date
JP2004287858A true JP2004287858A (ja) 2004-10-14

Family

ID=33293401

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003079226A Pending JP2004287858A (ja) 2003-03-24 2003-03-24 プログラムテスト装置

Country Status (1)

Country Link
JP (1) JP2004287858A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008262510A (ja) * 2007-04-13 2008-10-30 Fuji Xerox Co Ltd 電子回路装置、故障診断装置、故障診断システム、及び故障診断プログラム。
JP2009217531A (ja) * 2008-03-11 2009-09-24 Fujitsu Ltd 仮想ソフトウェア生成装置
JP2013041546A (ja) * 2011-08-19 2013-02-28 Fujitsu Ltd デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008262510A (ja) * 2007-04-13 2008-10-30 Fuji Xerox Co Ltd 電子回路装置、故障診断装置、故障診断システム、及び故障診断プログラム。
JP2009217531A (ja) * 2008-03-11 2009-09-24 Fujitsu Ltd 仮想ソフトウェア生成装置
JP2013041546A (ja) * 2011-08-19 2013-02-28 Fujitsu Ltd デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム

Similar Documents

Publication Publication Date Title
US5926638A (en) Program debugging system for debugging a program having graphical user interface
US5845064A (en) Method for testing and verification of a CPU using a reference model
US20070061641A1 (en) Apparatus and method for generating test driver
JP3699154B2 (ja) データを自己記述式に符号化するための方法および装置
US6697982B2 (en) Generating netlist test vectors by stripping references to a pseudo input
US7086033B2 (en) Software debugger having a monitor for monitoring conditional statements within a software program
CN112444731A (zh) 芯片测试方法、装置、处理器芯片及服务器
US7624381B1 (en) Portable detection of start and completion of object construction
JP2007310565A (ja) システムlsi検証装置及びシステムlsi検証プログラム
US8510708B2 (en) Method for optimizing a control program for actuators
JP2004287858A (ja) プログラムテスト装置
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
US7058864B1 (en) Test for processor memory cache
CN114239445A (zh) 一种信号采集方法及芯片验证平台
JP4633203B2 (ja) シミュレートされたプログラムの実行エラーの検出方法および装置
JP4149047B2 (ja) シミュレータ
JP3745968B2 (ja) 試験システム及び試験方法及び試験プログラム及び試験プログラムを記録した計算機で読み取り可能な記録媒体
JP2002014847A (ja) プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体
JP2005332110A (ja) シミュレーションシステム
JP5067705B2 (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム
JP2019067227A (ja) 情報処理装置、情報処理方法及びプログラム
EP1115072A2 (en) Gate addressing system for logic simulation machine
JP2795309B2 (ja) プロファイラ用コード追加方式
JP2943590B2 (ja) インタプリタ型シミュレーション方法