(57)【要約】【課題】プログラムの単体テストにおいて、テストドライバやスタブを設計、デバッグ、メンテナンスするにあたり、テストドライバとそれと共に用いられる多数のスタブの関連性を理解することが困難で、テストドライバやスタブの開発効率を十分に向上させることができなかった。【解決手段】テストドライバ中にスタブの処理を記述することで、テストの流れの理解が容易になり、テストドライバやスタブの開発効率、さらにプログラムの開発効率を高めることができる。【選択図】      図１
2004287858.tif 000002
【特許請求の範囲】
【請求項１】
モジュールプログラムをテストするプログラムテスト装置であって、
実行可能命令を記憶する実行可能命令記憶部より命令を取り出し実行する命令実行部と、
前記実行可能命令記憶部に設けられプログラムテストの対象となる被テストモジュールより呼び出される下位モジュールの呼出しの検出を行う設定をする下位モジュール呼出し検出設定部と、
前記下位モジュールの呼出しを検出した際に下位モジュールの処理を記述した下位モジュール代替処理コードへ実行を遷移する処理を行う下位モジュール代替処理コード実行遷移部と、
前記下位モジュール代替処理コードの終了を検出した際に、下位モジュールの呼出しの次の処理に遷移する処理を行う下位モジュール代替処理コード実行復帰遷移部と
を設け、前記命令実行部には、
前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行い、下位モジュール呼出し検出設定命令が検出されたときは、前記下位モジュール呼出し検出設定部の処理を行う下位モジュール呼出し検出設定命令検出部と、
前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出しの検出を行い、下位モジュール呼出し命令が検出されたときは、前記下位モジュール代替処理コード実行遷移部の処理を行う下位モジュール呼出し命令検出部と、
前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行い、下位モジュール代替処理コード実行の終了が検出されたときは、前記下位モジュール代替処理コード実行復帰遷移部の処理を行う下位モジュール代替処理コード実行終了検出部と
を設け、下位モジュールの呼出しの代わりにテストドライバモジュール内部の下位モジュール代替処理コードを実行することを特徴とする
プログラムテスト装置。
【請求項２】
前記下位モジュール代替処理コードで使用する呼出しパラメータを前記下位モジュール代替処理コードで使用できる位置に複写する処理を行う下位モジュール呼出しパラメータ複写部を設け、
下位モジュール代替処理コードを実行しようとするとき、被テストモジュールによって下位モジュールの呼出しの際に渡されたパラメータを下位モジュール代替処理コードがアクセスできる領域へ複写する
請求項１記載のプログラムテスト装置。
【請求項３】
前記下位モジュール代替処理コードを実行して戻り値がセットされる下位モジュール代替処理コード用戻り値格納領域より取得した戻り値を下位モジュール戻り値格納領域へ複写する処理を行う下位モジュール戻り値複写部を設け、
下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用戻り値格納領域の内容を下位モジュールからの戻り値として複写する
請求項１記載のプログラムテスト装置。
【請求項４】
前記下位モジュール代替処理コードで使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数複写部と、
前記下位モジュール代替処理コードで使用した下位モジュールの中のスタティック変数を、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数復帰部と
をさらに備えたものであって、下位モジュール代替処理コードを実行しようとするとき、下位モジュール内のスタティック変数の値を複写し、かつ、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用スタティック変数格納領域から下位モジュール用スタティック変数格納領域へ復帰することを特徴とする
請求項１記載のプログラムテスト装置。
【請求項５】
下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする下位モジュールスタティック変数アクセス検出設定部と、
前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスを検出する下位モジュール代替処理コード内スタティック変数アクセス検出部と、
前記下位モジュール代替処理コード内スタティック変数アクセス検出部でアクセスが検出された場合に動作して、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う下位モジュールスタティック変数複写復帰部と
をさらに備え、下位モジュール代替処理コードを参照しようとするとき、下位モジュール内のスタティック変数の値を下位モジュール代替処理コード用スタティック変数格納領域に複写し、かつ、命令実行部において下位モジュール代替処理コードが下位モジュール代替処理コード用スタティック変数格納領域を変更しようとするときに、下位モジュール用スタティック変数格納領域へ複写する
請求項１記載のプログラムテスト装置。
【請求項６】
下位モジュールの中のスタティック変数を下位モジュール代替処理コードで使用する際に、スタティック変数のポインタを下位モジュール代替処理コードで宣言された一時ポインタ変数に複写する処理を行うスタティック変数ポインタ設定部をさらに備え、命令実行部において下位モジュール代替処理コードにより下位モジュール代替処理コード用スタティック変数ポインタを使って下位モジュール用スタティック変数格納領域へアクセスする
請求項１記載のプログラムテスト装置。
【請求項７】
呼出し順序を呼出し順序情報に格納する処理を行う下位モジュール呼出し順序記録部と、
呼出し順序情報と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部と
をさらに備え、下位モジュール呼出し順序に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行する
請求項１記載のプログラムテスト装置。
【請求項８】
テスト実行時に実行時間を測定する実行時間測定部と、
実行時間測定部で測定した実行時間と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部と
をさらに備え、プログラムの実行時間に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする
請求項１記載のプログラムテスト装置。
【請求項９】
テスト実行時に下位モジュールを呼出した呼出し元関数名を取得する呼出し元関数取得部と、
呼出し元関数取得部で取得した関数名と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件を格納する選択条件情報よりテスト実行時に条件を取得する下位モジュール代替処理コード選択部と
をさらに備え、下位モジュールを呼出した関数に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする
請求項１記載のプログラムテスト装置。
【請求項１０】
下位モジュール代替処理コード内選択条件設定命令検出部と、
代替コード選択条件取得部と、
下位モジュール代替処理コード選択部と
をさらに備え、
下位モジュール代替処理コード内選択条件設定命令検出部は、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部において代替コード選択条件を取得しその条件を格納して下位モジュール代替処理コード選択部の処理を行って、テストドライバモジュール内に記述されている複数の下位モジュール代替処理コードの選択条件をテストドライバ中に記述できるよう構成したことを特徴とする
請求項１記載のプログラムテスト装置。
【請求項１１】
実行可能命令記憶部より読み出した下位モジュール内変数操作命令の判定を行う変数操作命令検出部と、
前記変数操作命令検出部が変数操作命令を検出すると変数操作命令の引数から被テストモジュール内のｓｔａｔｉｃ変数名、変更したい値を取得し、変数操作情報に登録設定する変数操作情報取得部と、
実行可能命令記憶部より読み出した下位モジュール戻り値操作命令の判定を行う戻り値操作命令検出部と、
前記戻り値操作命令検出部画戻り値操作命令を検出すると戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報に登録設定する戻り値操作情報取得部と、
下位モジュール呼出し命令検出部が下位モジュール呼出し命令を検出すると前記変数操作情報から変更する変数情報を取り出し、実行用ワークメモリ領域の下位モジュール内スタティック格納領域に値を設定する下位モジュール内スタティック変数設定部と、
前記戻り値操作情報から戻り値情報を取得し、前記実行用ワークメモリ領域の下位モジュール戻り値格納領域に値を設定する下位モジュール戻り値設定部と
をさらに備え、下位モジュールを呼出したときに下位モジュールの持つスタティック変数に任意の値を設定したり、下位モジュールの戻り値を決める処理をテストドライバ処理コードの中に記述できるよう構成したことを特徴とする
請求項１記載のプログラムテスト装置。
【請求項１２】
下位モジュール代替処理コード抽出部と、
下位モジュール呼出し位置検出部と、
引数設定情報抽出部と、
戻り値設定情報抽出部と、
下位モジュール代替処理コード挿入部と
を有し、被テストモジュールの中の下位モジュール呼出し記述をテストドライバモジュール中に記述された下位モジュール代替処理コードに置き換えるソースファイル変換装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムの開発におけるテスト工程で、特にモジュールプログラムを単体テストするためのプログラムテスト装置に関する。
【０００２】
【従来の技術】
プログラムをテストする場合、テスト対象となるモジュール（以下、被テストモジュールと呼ぶ）のテストを支援するためにテストドライバとスタブという２種類のプログラムを用いることがある。テストドライバとは、被テストモジュールの上位モジュールを模擬するもので、テスト用の入力データを被テストモジュールに与えて被テストモジュールを呼び出す。スタブとは、被テストモジュールの下位モジュールを模擬するもので、被テストモジュールからの呼出しに応答して被テストモジュールが期待する出力データを設定する。
【０００３】
このようなテストドライバとスタブを用いることで上位モジュールや下位モジュールが未実装である場合や、あるいは実装されていたとしても処理内容を変更したい場合に、被テストモジュールをテストできる（例えば、特許文献１）。
【０００４】
テストドライバとスタブを用いて被テストモジュールをテストするには、テストドライバは被テストモジュールをテストするのに十分な複数の入力データを設定し、スタブは被テストモジュールが期待する出力データを設定する必要があるが、スタブの出力データの設定は一意に決まるものではなく、被テストモジュールからスタブへの入力データや共有データの値によって適した出力データを設定しなければならない。
【０００５】
スタブの出力データの設定は、第１の方法として、スタブが呼び出された時点でテスト実行を一時停止し、被テストモジュールが期待するデータをテスト者が入力装置から入力する方法と、第２の方法として、被テストモジュールが期待するデータをテスト内容の範囲で全て設定できるような処理をスタブに実装し、これを被テストモジュールとリンクする方法とがある。
【０００６】
【特許文献１】
特開２００１−２２９０４４号公報（図６，図７）
【０００７】
【発明が解決しようとする課題】
しかし、スタブの出力データを設定する第１の方法では、テスト者が、モジュールの処理または仕様書を確認しながら被テストモジュールが期待するデータを設定する必要があるため、テスト者の負担が大きく、ヒューマンエラーが発生する可能性が高くなる。この作業を自動化したとしても、テストドライバの記述とスタブ応答処理の記述を別のファイルに対して行う必要があるために、テストドライバやスタブ応答処理の設計の効率やテストドライバやスタブ応答処理のデバッグの効率、さらに、それらのメンテナンスの効率が悪化する。テストドライバの記述やスタブ応答処理の記述には別な言語が用いられることが一般的であり、これも開発効率を落とす原因となっている。大きなシステムになるとテスト項目数は膨大であり、テスト効率の悪さは看過することはできない。
【０００８】
スタブを被テストモジュールにリンクする第２の方法では、スタブに被テストモジュールが期待する応答をさせるための処理を実装することになるが、通常、スタブとなるモジュールが様々な被テストモジュールから呼び出されたり、あるいは、一つの被テストモジュールから何度も呼び出されることがあり、適切にテストを実施するには、スタブが呼び出されるごとに、スタブが呼び出されるタイミングや各種変数の内容などのプログラムの実行状況に応じてスタブが適切に応答する必要がある。また、スタブを呼び出す被テストモジュールの実行状況はテストドライバで行われる変数の設定や関数パラメータの設定にも大きく依存するために、スタブの設計とテストドライバの設計は同時並行的に綿密に行ってゆく必要がある。一方、テストドライバの設計やスタブの設計、あるいはこれらのデバッグや被テストモジュールのデバッグ、テスト項目の追加などのメンテナンス作業において、テストの流れを理解しようとするとき、テストドライバだけを見ても理解不可能であり、またスタブだけをみても理解できない。つまり、テストの流れは、テストドライバや被テストモジュール、そして複数のスタブの中に断片的に記述されており、たった１つのテストケースの内容を理解することすら容易ではない。被テストモジュールの規模や大きかったり、複数の被テストモジュールを組み合わせてテストする必要がある場合、テストドライバの処理内容は複雑化し、スタブの数も多くなり、テストドライバの設計やスタブの設計の工数が膨れ上がる。結果的にテスト工数の増大によりプロジェクトの遅延やプロジェクトの失敗、あるいは、テストを十分に実施することができずに重大な品質問題を発生させてしまうことにつながる可能性が大きくなる。
【０００９】
本発明の目的は、上記問題点を解消し、被テストモジュールを効率的にテストできるプログラムテスト装置を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の請求項１記載のプログラムテスト装置は、モジュールプログラムをテストするプログラムテスト装置であって、実行可能命令を記憶する実行可能命令記憶部より命令を取り出し実行する命令実行部と、前記実行可能命令記憶部に設けられプログラムテストの対象となる被テストモジュールより呼び出される下位モジュールの呼出しの検出を行う設定をする下位モジュール呼出し検出設定部と、前記下位モジュールの呼出しを検出した際に下位モジュールの処理を記述した下位モジュール代替処理コードへ実行を遷移する処理を行う下位モジュール代替処理コード実行遷移部と、前記下位モジュール代替処理コードの終了を検出した際に、下位モジュールの呼出しの次の処理に遷移する処理を行う下位モジュール代替処理コード実行復帰遷移部とを設け、前記命令実行部には、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行い、下位モジュール呼出し検出設定命令が検出されたときは、前記下位モジュール呼出し検出設定部の処理を行う下位モジュール呼出し検出設定命令検出部と、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール呼出しの検出を行い、下位モジュール呼出し命令が検出されたときは、前記下位モジュール代替処理コード実行遷移部の処理を行う下位モジュール呼出し命令検出部と、前記実行可能命令記憶部より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行い、下位モジュール代替処理コード実行の終了が検出されたときは、前記下位モジュール代替処理コード実行復帰遷移部の処理を行う下位モジュール代替処理コード実行終了検出部とを設け、下位モジュールの呼出しの代わりにテストドライバモジュール内部の下位モジュール代替処理コードを実行することを特徴とする。
【００１１】
本発明の請求項２記載のプログラムテスト装置は、請求項１において、前記下位モジュール代替処理コードで使用する呼出しパラメータを前記下位モジュール代替処理コードで使用できる位置に複写する処理を行う下位モジュール呼出しパラメータ複写部を設け、下位モジュール代替処理コードを実行しようとするとき、被テストモジュールによって下位モジュールの呼出しの際に渡されたパラメータを下位モジュール代替処理コードがアクセスできる領域へ複写することを特徴とする。
【００１２】
本発明の請求項３記載のプログラムテスト装置は、請求項１において、前記下位モジュール代替処理コードを実行して戻り値がセットされる下位モジュール代替処理コード用戻り値格納領域より取得した戻り値を下位モジュール戻り値格納領域へ複写する処理を行う下位モジュール戻り値複写部を設け、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用戻り値格納領域の内容を下位モジュールからの戻り値として複写することを特徴とする。
【００１３】
本発明の請求項４記載のプログラムテスト装置は、請求項１において、前記下位モジュール代替処理コードで使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数複写部と、前記下位モジュール代替処理コードで使用した下位モジュールの中のスタティック変数を、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域に複写する処理を行う下位モジュールスタティック変数復帰部とをさらに備えたものであって、下位モジュール代替処理コードを実行しようとするとき、下位モジュール内のスタティック変数の値を複写し、かつ、下位モジュール代替処理コードの実行終了時に、下位モジュール代替処理コード用スタティック変数格納領域から下位モジュール用スタティック変数格納領域へ復帰することを特徴とする。
【００１４】
本発明の請求項５記載のプログラムテスト装置は、請求項１において、下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする下位モジュールスタティック変数アクセス検出設定部と、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスを検出する下位モジュール代替処理コード内スタティック変数アクセス検出部と、前記下位モジュール代替処理コード内スタティック変数アクセス検出部でアクセスが検出された場合に動作して、前記下位モジュールスタティック変数アクセス検出設定部によって設定された下位モジュール代替処理コード内のスタティック変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う下位モジュールスタティック変数複写復帰部とをさらに備え、下位モジュール代替処理コードを参照しようとするとき、下位モジュール内のスタティック変数の値を下位モジュール代替処理コード用スタティック変数格納領域に複写し、かつ、命令実行部において下位モジュール代替処理コードが下位モジュール代替処理コード用スタティック変数格納領域を変更しようとするときに、下位モジュール用スタティック変数格納領域へ複写することを特徴とする。
【００１５】
本発明の請求項６記載のプログラムテスト装置は、請求項１において、下位モジュールの中のスタティック変数を下位モジュール代替処理コードで使用する際に、スタティック変数のポインタを下位モジュール代替処理コードで宣言された一時ポインタ変数に複写する処理を行うスタティック変数ポインタ設定部をさらに備え、命令実行部において下位モジュール代替処理コードにより下位モジュール代替処理コード用スタティック変数ポインタを使って下位モジュール用スタティック変数格納領域へアクセスすることを特徴とする。
【００１６】
本発明の請求項７記載のプログラムテスト装置は、請求項１において、呼出し順序を呼出し順序情報に格納する処理を行う下位モジュール呼出し順序記録部と、呼出し順序情報と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部とをさらに備え、下位モジュール呼出し順序に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【００１７】
本発明の請求項８記載のプログラムテスト装置は、請求項１において、テスト実行時に実行時間を測定する実行時間測定部と、実行時間測定部で測定した実行時間と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件とから適切な下位モジュール代替処理コードを選択処理を行う下位モジュール代替処理コード選択部とをさらに備え、プログラムの実行時間に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【００１８】
本発明の請求項９記載のプログラムテスト装置は、請求項１において、テスト実行時に下位モジュールを呼び出した呼出し元関数名を取得する呼出し元関数取得部と、呼出し元関数取得部で取得した関数名と、複数からなる下位モジュール代替処理コードの中から１つを選択するための条件を格納する選択条件情報よりテスト実行時に条件を取得する下位モジュール代替処理コード選択部とをさらに備え、下位モジュールを呼出した関数に応じてテストドライバモジュール内に記述されている複数の下位モジュール代替処理コードを選択的に実行することを特徴とする。
【００１９】
本発明の請求項１０記載のプログラムテスト装置は、請求項１において、下位モジュール代替処理コード内選択条件設定命令検出部と、代替コード選択条件取得部と、下位モジュール代替処理コード選択部とをさらに備え、下位モジュール代替処理コード内選択条件設定命令検出部は、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部において代替コード選択条件を取得しその条件を格納して下位モジュール代替処理コード選択部の処理を行って、テストドライバモジュール内に記述されている複数の下位モジュール代替処理コードの選択条件をテストドライバ中に記述できるよう構成したことを特徴とする。
【００２０】
本発明の請求項１１記載のプログラムテスト装置は、請求項１において、実行可能命令記憶部より読み出した下位モジュール内変数操作命令の判定を行う変数操作命令検出部と、前記変数操作命令検出部が変数操作命令を検出すると変数操作命令の引数から被テストモジュール内のｓｔａｔｉｃ変数名、変更したい値を取得し、変数操作情報に登録設定する変数操作情報取得部と、実行可能命令記憶部より読み出した下位モジュール戻り値操作命令の判定を行う戻り値操作命令検出部と、前記戻り値操作命令検出部画戻り値操作命令を検出すると戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報に登録設定する戻り値操作情報取得部と、下位モジュール呼出し命令検出部が下位モジュール呼出し命令を検出すると前記変数操作情報から変更する変数情報を取り出し、実行用ワークメモリ領域の下位モジュール内スタティック格納領域に値を設定する下位モジュール内スタティック変数設定部と、前記戻り値操作情報から戻り値情報を取得し、前記実行用ワークメモリ領域の下位モジュール戻り値格納領域に値を設定する下位モジュール戻り値設定部とをさらに備え、下位モジュールを呼出したときに下位モジュールの持つスタティック変数に任意の値を設定したり、下位モジュールの戻り値を決める処理をテストドライバ処理コードの中に記述できるよう構成したことを特徴とする。
【００２１】
本発明の請求項１２記載のソースファイル変換装置は、下位モジュール代替処理コード抽出部と、下位モジュール呼出し位置検出部と、引数設定情報抽出部と、戻り値設定情報抽出部と、下位モジュール代替処理コード挿入部とを有し、被テストモジュールの中の下位モジュール呼出し記述をテストドライバモジュール中に記述された下位モジュール代替処理コードに置き換えるよう構成したことを特徴とする。
【００２２】
【発明の実施の形態】
以下、本発明の各実施の形態を図１〜図４１に基づいて説明する。
（実施の形態１）
本発明のこの（実施の形態１）は、テストドライバ中にスタブ処理などの被テストモジュールなどが呼び出す下位モジュールの処理を記述できることを示すもので、これによりテストドライバのファイルを見るだけでテストの流れを理解でき、テストドライバの設計やスタブの設計、デバッグ、テスト環境のメンテナンス効率を高めて、プログラムの開発期間を短縮できる。
【００２３】
図１は本発明の（実施の形態１）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３から構成される。
【００２４】
なお、（実施の形態１）から（実施の形態１１）に関する命令実行部１０１はマイコンとして実現しても、あるいは、ＦＰＧＡのような再構成可能なデバイスで実現しても、さらにまた、コンピュータ上で実行するシミュレータとして実現してもよい。また、インタープリタ型のプログラム言語や、近年普及しているＪａｖａ（登録商標）の仮想マシン、さらにマイクロソフト社の提唱する“．Ｎｅｔ”（ドットネット）のＣＬＲのような仮想マシンにも適用可能である。
【００２５】
実行可能命令記憶部１０６は、テストドライバモジュール１０７と、プログラムテストの対象となる被テストモジュール１１０と、被テストモジュール１１０より呼び出される下位モジュール１１１と、テスト支援の機能をもった関数群であるテスト支援モジュール１１５から構成される実行可能命令を記憶するものである。
【００２６】
テストドライバモジュール１０７は、テスト実行処理を行うテストドライバ処理コード１０８と、下位モジュールの処理を記述した下位モジュール代替処理コード１０９から構成されている。
【００２７】
呼出し検出設定情報１１４は、下位モジュール１１１の呼出し検出や、下位モジュール代替処理コード実行のための設定情報を記憶するものである。
命令実行部１０１は、実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２を備えている。
【００２８】
下位モジュール呼出し検出設定命令検出部１０２は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行う。下位モジュール呼出し検出設定命令が検出されたときは、下位モジュール呼出し検出設定部１０３の処理を行う。
【００２９】
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール代替処理コード実行遷移部１０５の処理を行う。
【００３０】
下位モジュール代替処理コード実行終了検出部１１２は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行う。下位モジュール代替処理コード実行終了が検出されたときは、下位モジュール代替処理コード実行復帰遷移部１１３の処理を行う。
【００３１】
下位モジュール呼出し検出設定部１０３は、下位モジュール１１１の呼出しの検出を行うための設定を行うものである。
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しの検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うものである。
【００３２】
下位モジュール代替処理コード実行復帰遷移部１１３は、下位モジュール代替処理コード１０９の終了を検出した際に、下位モジュール１１１の呼出しの次の処理に遷移する処理を行うものである。
【００３３】
テスト支援モジュール１１５は、下位モジュール呼出し検出の設定などのテスト支援の機能を持った関数群で、予め用意されているこれらの関数群をテスト実施者やプログラム作成者はテストドライバモジュール内で使用してテストドライバモジュールの作成を行う。
【００３４】
次に、図１の下位モジュール呼出し検出設定部１０３の動作について詳細に説明する。
図１４は下位モジュール呼出し検出設定部１０３を表す。
【００３５】
下位モジュール呼出し検出設定部１０３は、下位モジュール１１１の呼出しの検出を行うための設定を行うものであり下位モジュール呼出し位置に識別命令を設定することで下位モジュール呼出し命令検出部１０４において検出を行えるようにする。
【００３６】
下位モジュール呼出し検出設定部１０３の処理は、前述のテスト支援モジュール１１５のＳｅｔＡｌｔＦｕｎｃ（）の呼出しによって実現される。
図１４で示すように、前述のテスト支援モジュール１１５のＳｅｔＡｌｔＦｕｎｃによって渡された下位モジュール名より下位モジュールの呼出し位置の取得を行い呼出し検出設定情報１１４に格納する（Ｓ１４０１）。
【００３７】
次に、（Ｓ１４０１）において取得した下位モジュールの呼出し位置に、下位モジュール呼出し命令検出部１０４で検出するための識別命令の書き込みを行い、下位モジュール代替処理コードの開始位置の取得を行い、呼出し検出設定情報１１４に格納する（Ｓ１４０３）。
【００３８】
次に、下位モジュール代替処理コード実行遷移部１０５の動作について詳細に説明する。
図１５は下位モジュール代替処理コード実行遷移部１０５を表す。
【００３９】
下位モジュール代替処理コード事項遷移部１０５は、下位モジュール呼出し命令検出部によって下位モジュールの呼出しが検出された際に、下位モジュール代替処理コード１０９に遷移する処理である。
【００４０】
図１５で示すように、コンテキストの内容を呼出し検出設定情報１１４に格納する。
コンテキストの内容は、現在使用されている、プログラムカウンタやスタックポインタレジスタ、汎用レジスタの内容などで、前記図１４の（Ｓ１４０１）において格納した下位モジュール呼出し位置とともに格納し（Ｓ１５０１）、下位モジュールの戻り位置をスタックより取得し呼出し検出設定情報１１４に格納し（Ｓ１５０２）、下位モジュール代替処理コード１０９を実行するにあたって必要なスタックの確保を行い（Ｓ１５０３）、後述の図１３において制御フラグＡｌｔＣｔｒｌＦｌａｇを“１”に変更し下位モジュール代替処理コード実行遷移部１０５を実行できるようにし（Ｓ１５０４）、前記図１４の（Ｓ１４０３）において取得し呼出し検出設定情報１１４に格納した下位モジュール代替処理コード開始位置に実行の制御を遷移させる（Ｓ１５０５）。
【００４１】
以上の処理により、被テストモジュール１１０より呼び出された下位モジュール１１１の処理を記述した下位モジュール代替処理コード１０９への遷移を行うことができる。
【００４２】
次に、下位モジュール代替処理コード実行復帰遷移部１１３の動作について詳細に説明する。
図１６は下位モジュール代替処理コード実行復帰遷移部１１３を表す。
【００４３】
下位モジュール代替処理コード実行復帰遷移部１１３は、下位モジュール代替処理コード１０９の終了が検出された際に、下位モジュール１１１が呼び出された次の処理へ実行を遷移される処理である。
【００４４】
図１６に示すように、前述の制御フラグＡｌｔＣｔｒｌＦｌａｇを“０”に変更することで下位モジュール代替処理コード１０９が実行されないように設定し（Ｓ１６０１）、図１５の（Ｓ１５０１）において呼出し検出設定情報１１４に退避させたコンテキストを呼出し検出設定情報１１４から取り出し復帰させ（Ｓ１６０２）（Ｓ１５０２）において呼出し検出設定情報１１４に格納した下位モジュールの戻り位置に実行位置を遷移させる（Ｓ１６０３）。
【００４５】
このプログラムテスト装置を、図１３のプログラム記述例に基づいて説明する。
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されている。
【００４６】
（Ｐ１３０２）はテストドライバモジュールの記述例を、（Ｐ１３０３）は被テストモジュールの記述例をそれぞれ示しており、テスト実施者やプログラム作成者はこの部分を作成することになる。
【００４７】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、前記図１のテスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【００４８】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【００４９】
（Ｐ１３０２）の行番号Ｌ０３から行番号Ｌ０６のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０７の被テストモジュール呼出しの処理に移る。
【００５０】
（Ｐ１３０３）の行番号Ｌ０９において下位モジュール「ｆｕｎｃ（）」が呼び出されＬ０３の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によって（Ｐ１３０２）の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更され（Ｐ１３０２）の行番号Ｌ０４に処理が遷移する。
【００５１】
（Ｐ１３０２）の行番号Ｌ０６まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって（Ｐ１３０３）の行番号Ｌ１０に遷移される。Ｐ１３０３の被テストモジュールｔｅｓｔｆｕｎｃの実行が終わるとＰ１３０２のＬ０８に実行が遷移し、被テストモジュールのテスト結果を判定する。Ｌ０８で「ｃｏｕｎｔ」が０より大きい値のときは、テストが合格したことを表わし（Ｌ０９）、それ以外のときはテストが不合格したことを表わす（Ｌ１１）。
【００５２】
以上の処理により、被テストモジュールの下位モジュール呼出し位置の次の処理に遷移できる。
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【００５３】
（実施の形態２）
（実施の形態２）はテストドライバ中に記述された下位モジュール代替処理コードを実行する際に、被テストモジュールから下位モジュールを呼出した際に渡されるパラメータを取得し、下位モジュール代替処理コードに引き渡すための手段を示すもので、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【００５４】
図２は本発明の（実施の形態２）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュール呼出しパラメータ複写部２０１から構成される。
【００５５】
実行可能命令記憶部１０６，呼出し検出設定情報１１４，命令実行部１０１，下位モジュール呼出し検出設定部１０３は、（実施の形態１）と同じである。
実行用ワークメモリ領域２０３は、実行可能命令記憶部１０６が実行時に使用する領域で、その内部に下位モジュールの呼出しの際のパラメータを格納されている領域である下位モジュール呼出しパラメータ格納領域２０４と、下位モジュール代替処理コード中で下位モジュール呼出しの際のパラメータを使用するための変数領域である下位モジュール代替処理コード用変数領域２０５などを格納するメモリ領域である。
【００５６】
デバッグ情報２０２は、テストドライバモジュール１０７や被テストモジュール１１０や下位モジュール１１１やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【００５７】
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しを検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うもので、この処理の後に下位モジュール呼出しパラメータ複写部２０１の処理を行う。
【００５８】
下位モジュール呼出しパラメータ複写部２０１は、下位モジュール代替処理コード１０９で使用する呼出しパラメータを下位モジュール代替処理コード１０９で使用できる位置に複写する処理を行うものである。
【００５９】
次に、下位モジュール呼出しパラメータ複写部２０１の動作の詳細について説明する。
図１８は下位モジュール呼出しパラメータ複写部２０１を表す。
【００６０】
デバッグ情報２０２より、下位モジュールの呼出しの際のパラメータの数を取得し（Ｓ１８０１）、カウンタＭの値の初期化を行い（Ｓ１８０２）、カウンタＮと（Ｓ１８０１）で取得したパラメータ数の比較を行う（Ｓ１８０３）。カウンタＮがパラメータより大きくなったときに処理を終了する。
【００６１】
下位モジュールのＮ番目のパラメータの情報をデバッグ情報から取得し（Ｓ１８０４）、下位モジュール代替処理コード中に（Ｓ１８０４）で取得したパラメータ情報と同じ型、同じ名前の変数（下位モジュール代替コード用変数領域２０５）が存在するか判定する（Ｓ１８０５）。もし存在するならば、その変数（下位モジュール代替コード用変数領域２０５）に、下位モジュール呼出しパラメータ格納旅域２０４より取得したパラメータの値を複写する（Ｓ１８０６）。なければカウンタＮを“１”足して再び（Ｓ１８０３）の処理を行う。このようにして下位モジュールの呼出しパラメータの数だけこの判定を行い、下位モジュールの呼出しパラメータを下位モジュール代替処理コード用変数領域への複写を行う。
【００６２】
本発明の（実施の形態２）にかかるプログラムテスト装置を、図１７のプログラム記述例に基づいて説明する。
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【００６３】
（Ｐ１７０１）はテストドライバモジュールの記述例を、（Ｐ１７０２）は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【００６４】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、前記図２のテスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【００６５】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２により下位モジュール代替処理コードの終了位置を検出できる。
【００６６】
テストドライバモジュール（Ｐ１７０１）の行番号Ｌ０３から行番号Ｌ０６のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【００６７】
（Ｐ１７０１）の行番号Ｌ０４において、下位モジュール呼出しの時のパラメータ、つまり関数の引数の領域を宣言する。
下位モジュール代替処理コード内で下位モジュール呼出しの際のパラメータと同じ型、同じ名前で宣言を行うことで、下位モジュール呼出しパラメータ複写部２０１によってこの変数、つまり下位モジュール代替コード用変数領域に下位モジュールの呼出しパラメータの値が複写される。
【００６８】
下位モジュール代替処理コード内ではこの変数を使用することで、通常の関数のようにその呼出しパラメータを使用できる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０７の被テストモジュール呼出しの処理に移る。
【００６９】
被テストモジュール（Ｐ１７０２）の行番号Ｌ０８において下位モジュール「ｆｕｎｃ（）」が呼び出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によってテストドライバモジュール１７０１の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更されテストドライバモジュール（Ｐ１７０１）の行番号Ｌ０４に処理が遷移する。
【００７０】
テストドライバモジュール（Ｐ１７０１）の行番号Ｌ０６まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって被テストモジュール（Ｐ１７０２）の行番号Ｌ０９に遷移される。
【００７１】
図２の下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３の動作は、それぞれ（実施の形態１）の図１４，図１５，図１６に示したフローチャートと同じである。
【００７２】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【００７３】
（実施の形態３）
（実施の形態３）はテストドライバ中に記述された下位モジュール代替処理コードの実行完了の際に、下位モジュール代替処理コードで作られた戻り値を被テストモジュールへ引き渡すための手段を示すもので、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【００７４】
図３は本発明の（実施の形態３）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュール戻り値複写部３０１から構成される。
【００７５】
実行可能命令記憶部１０６，呼出し検出設定情報１１４，命令実行部１０１，下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３は、（実施の形態１）と同じである。
【００７６】
実行用ワークメモリ領域２０３は、実行可能命令記憶部１０６が実行時に使用する領域で、その内部に、下位モジュール代替処理コード用戻り値格納領域３０２と、下位モジュール戻り値格納領域３０３を有している。
【００７７】
デバッグ情報２０２は、テストドライバモジュール１０７や被テストモジュール１１０や下位モジュール１１１やテスト支援モジュールなどの実行可能命令の、例えば、変数の格納先、各モジュールの定義位置などの情報である。
【００７８】
下位モジュール代替処理コード実行遷移部１０５は、（実施の形態１）と同じである。
下位モジュール代替処理コード実行復帰遷移部１１３は、下位モジュール代替処理コード１０９の終了を検出した際に、下位モジュール１１１の呼出しの次の処理に遷移する処理を行うもので、この処理の後に下位モジュール戻り値複写部３０１の処理を行う。
【００７９】
下位モジュール戻り値複写部３０１は、戻り値を下位モジュール戻り値格納領域３０３へ複写する処理を行うものである。
テスト支援モジュール１１５は（実施の形態１）と同じである。
【００８０】
次に、下位モジュール戻り値複写部３０１の動作の詳細について説明する。
図２０は下位モジュール戻り値複写部３０１を表す。
下位モジュール戻り値複写部３０１は、前述のテスト支援モジュール１１５の関数  ＡｌｔＣｏｄｅＲｅｔｕｒｎ（）  の呼出しによって実現される。
【００８１】
テスト支援モジュール１１５の関数ＡｌｔＣｏｄｅＲｅｔｕｒｎ（）  引数の格納領域が下位モジュール代替処理コード用戻り値格納領域３０２に相当し、この下位モジュール代替処理コード用戻り値格納領域３０２より戻り値の値を取得し（Ｓ２００１）、取得した戻り値の値を下位モジュール戻り値格納領域３０３に複写する（Ｓ２００２）。
【００８２】
戻り値の型、下位モジュール戻り値格納領域３０３についてはデバッグ情報２０２を参照して取得する。
以上の処理により、下位モジュール代替処理コード１０９の戻り値を下位モジュールの戻り値として扱うことができる。
【００８３】
本発明の（実施の形態３）にかかるプログラムテスト装置を、図１９のプログラム記述例に基づいて説明する。
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【００８４】
（Ｐ１９０１）はテストドライバモジュールの記述例を、（Ｐ１９０２）は被テストモジュールの記述例をそれぞれ示しており、テスト実施者やプログラム作成者はこの部分を作成することになる。
【００８５】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、テスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【００８６】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【００８７】
テストドライバモジュール（Ｐ１９０１）の行番号Ｌ０３から行番号Ｌ０７のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【００８８】
（Ｐ１９０１）の行番号Ｌ０４において、下位モジュール呼出しの時のパラメータ、つまり関数の引数の領域を宣言する。
（Ｐ１９０１）の行番号Ｌ０６の「ＡｌｔＣｏｄｅＲｅｔｕｒｎ（ｃｎｔ）」は、テスト支援モジュール１１５の中の関数で、上記の「ＡｌｔＦｕｎｃＥｎｄ（）」と同様にこの関数の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【００８９】
また同時に、引数の「ｃｎｔ」の値を前記図３の下位モジュール戻り値複写部３０１によって下位モジュール戻り値格納領域へ複写が行われる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０８の被テストモジュール呼出しの処理に移る。
【００９０】
被テストモジュール（Ｐ１９０２）の行番号Ｌ０８において下位モジュール「ｆｕｎｃ（）」が呼び出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によってテストドライバモジュール（Ｐ１９０１）の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更されテストドライバモジュール（Ｐ１９０１）の行番号Ｌ０４に処理が遷移する。
【００９１】
テストドライバモジュール（Ｐ１９０１）の行番号Ｌ０７まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって被テストモジュール（Ｐ１９０２）の行番号Ｌ０９に遷移される。
【００９２】
図３の下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３は、それぞれ（実施の形態１）、図１４，図１５，図１６に示すフローチャートと同じである。
【００９３】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【００９４】
（実施の形態４）
（実施の形態４）は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数を複写して下位モジュール代替処理コードで扱えるようにし、さらに下位モジュール代替処理コードの実行完了の際に、下位モジュール代替処理コードで操作されたスタティック変数を下位モジュールへ引き渡すための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【００９５】
図４は本発明の（実施の形態４）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュール戻り値複写部３０１と、下位モジュールスタティック変数複写部４０１と、下位モジュールスタティック変数復帰部４０４から構成される。
【００９６】
実行可能命令記憶部１０６，呼出し検出設定情報１１４は、（実施の形態１）と同じである。
実行用ワークメモリ領域２０３は、実行可能命令記憶部が実行時に使用する領域で、その内部に下位モジュール代替処理コード中で下位モジュールの中のスタティック変数を使用するための変数領域である下位モジュール代替処理コード用スタティック変数格納領域４０２と、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域４０３などを格納するメモリ領域である。
【００９７】
デバッグ情報２０２は（実施の形態２）と同じで、テストドライバモジュール１０７や被テストモジュール１１０や下位モジュール１１１やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【００９８】
命令実行部１０１は（実施の形態１）と同じである。
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しを検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数複写部４０１の処理を行う。
【００９９】
下位モジュールスタティック変数複写部４０１は、下位モジュール代替処理コード１０９で使用する下位モジュールの中のスタティック変数を下位モジュール代替処理コード用スタティック変数格納領域４０２に複写する処理を行うものである。
【０１００】
下位モジュール代替処理コード実行復帰遷移部１１３は、下位モジュール代替処理コード１０９の終了を検出した際に、下位モジュール１１１の呼出しの次の処理に遷移する処理を行うもので、この処理の後に下位モジュール戻り値複写部３０１もしくは、下位モジュールスタティック変数復帰部４０４の処理を行う。
【０１０１】
下位モジュールスタティック変数復帰部４０４は、下位モジュール代替処理コード１０９で使用した下位モジュールの中のスタティック変数を下位モジュール用スタティック変数格納領域４０３に複写する処理を行うものである。
【０１０２】
テスト支援モジュール１１５は（実施の形態１）と同じである。
下位モジュールスタティック変数複写部４０１は、図２２に示すように構成されている。
【０１０３】
下位モジュールスタティック変数複写部４０１の処理は、前述のテスト支援モジュール１１５のＳｅｔＳｔａｔｉｃＶａｌ（）関数の呼出しによって実現される。
ＳｅｔＳｔａｔｉｃＶａｌ（）関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得し呼出し検出設定情報１１４に格納し（Ｓ２２０１）、ＳｅｔＳｔａｔｉｃＶａｌ（）関数で指定されるスタティック変数の値を格納する一時変数名からデバッグ情報を参照しその格納先を取得し（Ｓ２２０１）で取得したスタティック変数の格納先と共に呼出し検出設定情報１１４に格納し（Ｓ２２０２）（Ｓ２２０１）で取得したスタティック変数の格納先アドレス、つまり下位モジュール用スタティック変数格納領域４０３よりその値を取り出し、取り出したスタティック変数の値を値を（Ｓ２２０２）で取得した一時変数の格納先、つまり下位モジュール代替処理コード用スタティック変数格納領域４０２に複写する（Ｓ２２０３）。
【０１０４】
以上の処理により、下位モジュール代替処理コード中で下位モジュールで使用されているスタティック変数の値を参照できる。
下位モジュールスタティック変数復帰部４０４は、図２３に示すように構成されている。
【０１０５】
（Ｓ２３０１）（Ｓ２３０２）では、前述の図２２の（Ｓ２２０１）（Ｓ２２０２）において呼出し検出設定情報１１４に格納したスタティック変数の格納先、一時変数の格納先の情報を取得する。
【０１０６】
（Ｓ２３０３）では、呼出し検出設定情報１１４より取得した一時変数の格納先、つまり、下位モジュール代替処理コード用スタティック変数格納領域４０２よりその値を取り出し、その値をスタティック変数の格納先、つまり下位モジュール用スタティック変数格納領域４０２に複写する。
【０１０７】
以上により、下位モジュール代替処理コード１０９の中で変更されたスタティック変数の値を下位のモジュールのスタティック変数へ反映できる。
本発明の（実施の形態４）にかかるプログラムテスト装置を、図２１のプログラム記述例に基づいて説明する。
【０１０８】
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【０１０９】
（Ｐ２１０１）はテストドライバモジュールの記述例を、（Ｐ２１０２）は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【０１１０】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）  」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、前記図４のテスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【０１１１】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【０１１２】
テストドライバモジュール（Ｐ２１０１）の行番号Ｌ０３から行番号Ｌ０８のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【０１１３】
（Ｐ２１０１）の行番号Ｌ０４において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図４の下位モジュール代替処理コード用スタティック変数格納領域４０２になる。
【０１１４】
（Ｐ２１０１）の行番号Ｌ０６の「ＳｅｔＳｔａｔｉｃＶａｌ（”ｓｔ＿ｃｏｕｎｔ”，”ｔｅｓｔ．ｃ”，”ｓｖａｌ”）」がテスト支援モジュール１１５の中のテスト支援関数の１つで、この関数を呼び出すことによって下位モジュールスタティック変数複写部４０１により、第２引数のファイルの中に存在する第１引数のスタティック変数の値を第３引数の一時変数に複写を行う。
【０１１５】
これにより下位モジュールで使用されているスタティック変数を下位モジュール代替処理コード１０９の中で使用できる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０９の被テストモジュール呼出しの処理に移る。
【０１１６】
被テストモジュール（Ｐ２１０２）の行番号Ｌ０８において下位モジュール「ｆｕｎｃ（）」が呼び出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によってテストドライバモジュール（Ｐ２１０１）の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更されテストドライバモジュール（Ｐ２１０１）の行番号Ｌ０４に処理が遷移する。
【０１１７】
テストドライバモジュール（Ｐ２１０１）の行番号Ｌ０８まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって被テストモジュール（Ｐ２１０２）の行番号Ｌ０９に遷移される。
【０１１８】
また、このとき下位モジュールスタティック変数復帰部４０４により、下位モジュール代替処理コードで使用していたスタティック変数に相当する一時変数の値が下位モジュールのスタティック変数に複写される。
【０１１９】
下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３の構成は、それぞれ（実施の形態１）の図１４，図１５，図１６と同じである。
【０１２０】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０１２１】
（実施の形態５）
（実施の形態５）は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数を特定し、下位モジュール代替処理コードの実行中に下位モジュール内で使用されているスタティック変数のダミーとなる変数をアクセスした場合、そのアクセスを検出して下位モジュール内で使用されているスタティック変数に複写したり、あるいは、下位モジュール内で使用されているスタティック変数からダミーとなる変数に複写したりするための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０１２２】
図５は本発明の（実施の形態５）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュールスタティック変数複写復帰部５０２と、下位モジュールスタティック変数アクセス検出設定部５０３から構成される。
【０１２３】
実行可能命令記憶部１０６は（実施の形態１）と同じである。呼出し検出設定情報１１４は（実施の形態２）と同じである。実行用ワークメモリ領域２０３，デバッグ情報２０２は（実施の形態４）と同じである。
【０１２４】
命令実行部１０１は、実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２と、下位モジュール代替処理コード内スタティック変数アクセス検出部５０１を備えている。
【０１２５】
下位モジュール代替処理コード内スタティック変数アクセス検出部５０１は、下位モジュールスタティック変数アクセス検出設定部５０３によって設定された下位モジュール代替処理コード内の一時変数へのアクセスを検出する処理である。アクセスが検出されると下位モジュールスタティック変数複写復帰部５０２の処理を行う。
【０１２６】
下位モジュールスタティック変数複写復帰部５０２は、下位モジュールスタティック変数アクセス検出設定部５０３によって設定された下位モジュール代替処理コード内の一時変数へのアクセスがあった場合に、この一時変数に関連付けられた下位モジュールのスタティック変数の値を参照または変更を行う処理である。
【０１２７】
下位モジュール呼出し検出設定命令検出部１０２，下位モジュール呼出し命令検出部１０４，下位モジュール代替処理コード実行終了検出部１１２，下位モジュール呼出し検出設定部１０３は、それぞれ（実施の形態１）と同じである。
【０１２８】
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しを検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数アクセス検出設定部５０３の処理を行う。
【０１２９】
下位モジュールスタティック変数アクセス検出設定部５０３は、下位モジュールのスタティック変数の代わりとなる下位モジュール代替処理コード用スタティック変数格納領域へのアクセスの検出を行う設定をする処理である。
【０１３０】
下位モジュール代替処理コード実行復帰遷移部１１３，テスト支援モジュール１１５は、それぞれ（実施の形態１）と同じである。
下位モジュールスタティック変数アクセス設定部５０３は図２５に示すように構成されている。
【０１３１】
次に、下位モジュールスタティック変数アクセス設定部５０３の動作の詳細について説明する。
下位モジュールスタティック変数アクセス設定部５０３の処理は、前述のテスト支援モジュール１１５の  ＳｅｔＳｔａｔｉｃＶａｌＬｉｎｋ（）  関数の呼出しによって実現される。
【０１３２】
ＳｅｔＳｔａｔｉｃＶａｌＬｉｎｋ（）  関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得し呼出し検出設定情報１１４に格納し（Ｓ２５０１）、ＳｅｔＳｔａｔｉｃＶａｌＬｉｎｋ（）  関数で指定されるスタティック変数の値を格納する一時変数名からデバッグ情報を参照し、その格納先を取得し（Ｓ２５０１）で取得したスタティック変数の格納先と共に呼出し検出設定情報１１４に格納する（Ｓ２５０２）。
【０１３３】
以上の処理により、呼出し検出設定情報１１４に格納された一時変数の格納先を参照して前記図５の下位モジュール代替処理コード内スタティック変数アクセス検出部５０１はスタティック変数へのアクセスを検出できる。
【０１３４】
次に、下位モジュール代替処理コード内スタティック変数アクセス検出部５０１の動作の詳細について説明する。
図２６は、下位モジュール代替処理コード内スタティック変数アクセス検出部５０１を表す。
【０１３５】
（Ｓ２６０１）では、実行可能命令記憶部１０６から呼び出された命令がメモリまたはレジスタに対するアクセスかどうかを判断する。命令がメモリまたはレジスタに対するアクセスの場合は、図２５の（Ｓ２５０２）において呼出し検出設定情報１１４に格納された一時変数の格納位置と命令のアクセスする対象が同じかどうかを（Ｓ２６０２）判断する。同じであれば下位モジュールスタティック変数複写復帰部５０２の処理を行う。メモリまたはレジスタへのアクセス命令でない場合、設定情報とアクセス対象が異なる場合は処理を終了する。
【０１３６】
次に、下位モジュールスタティック変数複写復帰部５０２の動作の詳細について説明する。
図２７は、下位モジュールスタティック変数複写復帰部５０２の動作を表すフローチャートである。
【０１３７】
下位モジュール代替処理コード１０９のスタティック変数に対応する一時変数へのアクセスがあった場合、書き込みであった場合は一時変数の値を下位モジュールのスタティック変数へ複写、読み込みであった場合は下位モジュールのスタティック変数の値を一時変数へ複写するといった処理を行う。
【０１３８】
まず、（Ｓ２７０１）では、図２５の（Ｓ２５０１）（Ｓ２５０２）において呼出し検出設定情報１１４に格納された一時変数の格納先、下位モジュールのスタティック変数の格納先の情報を取得する。
【０１３９】
（Ｓ２７０２）では、メモリもしくはレジスタアクセスの命令が書き込みであるかを判断する。書き込み命令であれば（Ｓ２７０３）において、一時変数、つまり下位モジュール代替処理コード用スタティック変数格納領域４０２から変数の値を取得し、スタティック変数、つまり下位モジュール用スタティック変数格納領域４０３へその値を複写する。
【０１４０】
（Ｓ２７０２）において書き込み命令でない場合（読み込み命令）は、（Ｓ２７０４）において、下位モジュール用スタティック変数格納領域４０３からスタティック変数の値を読み出し、下位モジュール代替処理コード用スタティック変数格納領域４０２へその値を書き込む処理を行う。
【０１４１】
以上により、下位モジュールのスタティック変数の値をテストドライバモジュールに記述した下位モジュール代替処理コード１０９の中で扱うことができ、その値をリアルタイムに参照、変更できる。
【０１４２】
本発明の（実施の形態５）にかかるプログラムテスト装置を、図２４のプログラム記述例に基づいて説明する。
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【０１４３】
（Ｐ２４０１）はテストドライバモジュールの記述例を、（Ｐ２４０２）は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【０１４４】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）  」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、前記図５のテスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【０１４５】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【０１４６】
テストドライバモジュール（Ｐ２４０１）の行番号Ｌ０３から行番号Ｌ０８のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【０１４７】
（Ｐ２４０１）の行番号Ｌ０４において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図５の下位モジュール代替処理コード用スタティック変数格納領域４０２になる。
【０１４８】
（Ｐ２４０１）の行番号Ｌ０６の「ＳｅｔＳｔａｔｉｃＶａｌＬｉｎｋ（”ｓｔ＿ｃｏｕｎｔ”，”ｔｅｓｔ．ｃ”，”ｓｖａｌ”）」がテスト支援モジュール１１５の中のテスト支援関数の１つで、この関数を呼び出すことによって下位モジュールスタティック変数アクセス検出設定部５０３により、第３引数の一時変数にアクセスがあった場合その一時変数の値を参照、変更せずに第１引数で設定されたスタティック変数へアクセスする設定を行う。
【０１４９】
これにより下位モジュールで使用されているスタティック変数を下位モジュール代替処理コード１０９の中でリアルタイムに参照、変更できるようになる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０９の被テストモジュール呼出しの処理に移る。
【０１５０】
被テストモジュール（Ｐ２４０２）の行番号Ｌ０８において下位モジュール「ｆｕｎｃ（）」が呼出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によってテストドライバモジュール（Ｐ２４０１）の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更されテストドライバモジュール（Ｐ２４０１）の行番号Ｌ０４に処理が遷移する。
【０１５１】
テストドライバモジュール（Ｐ２４０１）の行番号Ｌ０８まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって被テストモジュール（Ｐ２４０２）の行番号Ｌ０９に遷移される。
【０１５２】
下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３の構成は、それぞれ（実施の形態１）の図１４，図１５，図１６と同じである。
【０１５３】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０１５４】
（実施の形態６）
（実施の形態６）は、テストドライバ中に記述された下位モジュール代替処理コードの実行開始の際に下位モジュール内で使用されているスタティック変数のポインタを複写して下位モジュール代替処理コードで扱えるようにするための手段を示すものである。通常は、スタティック変数は他のモジュールからは操作できないものであるため、これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０１５５】
図６は本発明の（実施の形態６）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、スタティック変数ポインタ設定部６０１から構成される。
【０１５６】
実行可能命令記憶部１０６，呼出し検出設定情報１１４は、（実施の形態１）と同じである。
実行用ワークメモリ領域２０３は、実行可能命令記憶部が実行時に使用するメモリ領域であり、その内部には、下位モジュール代替処理コード中で下位モジュールの中のスタティック変数を使用するための変数領域である下位モジュール代替処理コード用スタティック変数格納領域６０２と、下位モジュールの中のスタティック変数の格納領域である下位モジュール用スタティック変数格納領域４０３などが設けられている。
【０１５７】
デバッグ情報２０２，命令実行部１０１，下位モジュール呼出し検出設定部１０３は（実施の形態４）と同じである。
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しを検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うもので、この処理の後に下位モジュールスタティック変数ポインタ設定部６０１の処理を行う。
【０１５８】
下位モジュールスタティック変数ポインタ設定部６０１は、下位モジュール１１１の中のスタティック変数を下位モジュール代替処理コード１０９で使用する際に、スタティック変数のポインタを下位モジュール代替処理コード１０９で宣言された一時ポインタ変数に複写する処理を行うものである。
【０１５９】
下位モジュール代替処理コード実行復帰遷移部１１３，テスト支援モジュール１１５は、（実施の形態１）と同じである。
次に、スタティック変数ポインタ設定部６０１の動作の詳細について説明する。
【０１６０】
図２９はスタティック変数ポインタ設定部６０１を表す。
スタティック変数ポインタ設定部６０１の処理は、前述のテスト支援モジュール１１５のＳｅｔＳｔａｔｉｃＶａｌＰｏｉｎｔｅｒ（）関数の呼出しによって実現される。
【０１６１】
（Ｓ２９０１）では、ＳｅｔＳｔａｔｉｃＶａｌＰｏｉｎｔｅｒ（）関数で指定されたスタティック変数の名前とファイル名から、デバッグ情報を参照しその格納先を取得する。
（Ｓ２９０２）では、ＳｅｔＳｔａｔｉｃＶａｌＰｏｉｎｔｅｒ（）関数で指定されるスタティック変数のポインタを格納する一時変数名からデバッグ情報を参照し、その格納先を取得し（Ｓ２９０１）で取得したスタティック変数の格納先を設定する。
【０１６２】
以上の処理により、下位モジュールのスタティック変数の操作をポインタとしてテストドライバモジュール内で使用できる。
本発明の（実施の形態６）にかかるプログラムテスト装置を図２８のプログラム記述例に基づいて説明する。
【０１６３】
（Ｐ１３０１）においては、テストドライバモジュール中に記述する下位モジュール代替処理コードの開始位置、終了位置を定義するためのコードが記述であり予め用意されているものである。
【０１６４】
（Ｐ２８０１）はテストドライバモジュールの記述例を、（Ｐ２８０２）は、被テストモジュールの記述例をそれぞれ示しておりテスト実施者やプログラム作成者はこの部分を作成することになる。
【０１６５】
（Ｐ１３０１）の行番号Ｌ０１の「ＳＥＴＡＬＴＣＯＤＥＳＴＡＲＴ（ｆｕｎｃｎａｍｅ）」が下位モジュール代替処理コードの開始位置を定義するものでマクロ定義で実現されている。行番号Ｌ０２で記述されている「ＳｅｔＡｌｔＦｕｎｃ（ｆｕｎｃｎａｍｅ）」は、前記図６のテスト支援モジュール１１５の中の関数群の中の一つで、この関数を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ１３０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール検出設定部１０３によって設定される。
【０１６６】
（Ｐ１３０１）の行番号Ｌ０５の「ＳＥＴＡＬＴＣＯＤＥＥＮＤ」が下位モジュール代替処理コードの終了位置を定義するもので、開始位置同様にテスト支援モジュール１１５の中の関数群の中の一つである「ＡｌｔＦｕｎｃＥｎｄ（）」の呼出しにより下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コードの終了位置を検出できる。
【０１６７】
テストドライバモジュール（Ｐ２８０１）の行番号Ｌ０３から行番号Ｌ０８のように、この２つのマクロ定義で囲まれた間に、下位モジュール代替処理コードを記述することになる。
【０１６８】
（Ｐ２８０１）の行番号Ｌ０４において、下位モジュールの中で使用されているスタティック変数を格納するための一時変数を宣言する。これが前記図６の下位モジュール代替処理コード用スタティック変数格納領域４０２になる。
【０１６９】
（Ｐ２８０１）の行番号Ｌ０６の「ＳｅｔＳｔａｔｉｃＶａｌＰｏｉｎｔｅｒ（”ｓｔ＿ｃｏｕｎｔ”，”ｔｅｓｔ．ｃ”，”ｐｓｖａｌ”）」がテスト支援モジュール１１５の中のテスト支援関数の１つで、この関数を呼び出すことによってスタティック変数ポインタ設定部６０１により、第２引数のファイルの中に存在する第１引数のスタティック変数のポインタを第３引数の一時変数（ポインタ）に複写する。
【０１７０】
これにより下位モジュールで使用されているスタティック変数に対するアクセスの下位モジュール代替処理コード１０９ができる。
下位モジュール代替処理コードの実行は（Ｐ１３０１）の行番号Ｌ０３のｉｆ文の制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」によって制御され通常は実行されないようになっており、（Ｐ１３０１）の行番号Ｌ０３において下位モジュール呼出し検出設定が終了すると行番号Ｌ０９の被テストモジュール呼出しの処理に移る。
【０１７１】
被テストモジュール（Ｐ２８０２）の行番号Ｌ０８において下位モジュール「ｆｕｎｃ（）」が呼出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われ下位モジュール代替処理コード実行遷移部１０５によってテストドライバモジュール（Ｐ２８０１）の行番号Ｌ０３、マクロ展開すると（Ｐ１３０１）の行番号Ｌ０３に遷移する。このとき下位モジュール代替処理コード実行遷移部１０５によって制御フラグ「ＡｌｔＣｔｒｌＦｌａｇ」が“１”に変更されテストドライバモジュール（Ｐ２８０１）の行番号Ｌ０４に処理が遷移する。
【０１７２】
テストドライバモジュール（Ｐ２８０１）の行番号Ｌ０８まで実行されると上記のように下位モジュール代替処理コード実行終了検出部１１２によりで下位モジュール代替処理コード終了が検出され、下位モジュール代替処理コード実行復帰遷移部１１３によって被テストモジュール（Ｐ２８０２）の行番号Ｌ０９に遷移される。
【０１７３】
下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３の構成は、それぞれ（実施の形態１）の図１４，図１５，図１６と同じである。
【０１７４】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０１７５】
（実施の形態７）
（実施の形態７）は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、下位モジュールの呼出し順序に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０１７６】
図７は本発明の（実施の形態７）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュール呼出し順序記録部７０１と、下位モジュール代理コード選択部７０２から構成される。
【０１７７】
実行可能命令記憶部１０６は、テストドライバモジュール１０７と、プログラムテストの対象となる被テストモジュール１１０と、被テストモジュール１１０より呼び出される下位モジュール１１１と、テスト支援の機能をもった関数群であるテスト支援モジュール１１５から構成される実行可能命令を記憶するものである。
【０１７８】
テストドライバモジュール１０７は、テスト実行処理を行うテストドライバ処理コード１０８と、下位モジュールの処理を記述した複数の下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎから構成されている。
【０１７９】
呼出し検出設定情報１１４は（実施の形態１）と同じである。デバッグ情報２０２は（実施の形態２）と同じである。
選択条件情報７０３は、複数からなる下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎの中から１つを選択するための条件を格納するものである。
【０１８０】
呼出し順序情報７０４は、下位モジュール呼出し順序記録部７０１によって記録された呼出し順序情報を格納するものである。
命令実行部１０１，下位モジュール呼出し検出設定命令検出部１０２は、それぞれ（実施の形態１）と同じである。
【０１８１】
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部７０１の処理を行う。
【０１８２】
下位モジュール呼出し順序記録部７０１は、呼出し順序を呼出し順序情報７０４に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【０１８３】
下位モジュール代替処理コード選択部７０２は、下位モジュールの呼出し回数を呼出し順序情報７０４から、複数からなる下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎの中から１つを選択するための条件を選択条件情報７０３からそれぞれ取り出し、その２つの情報から適切な下位モジュール代替処理コードの選択処理を行う。
【０１８４】
この処理の後、下位モジュール代替処理コード実行遷移部１０５の処理によってテストドライバモジュールのなかの下位モジュール代理コードに実行を遷移させる。
【０１８５】
下位モジュール代替処理コード実行終了検出部１１２，下位モジュール呼出し検出設定部１０３は、それぞれ（実施の形態１）と同じである。
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出しを検出した際に、下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎへ実行を遷移する処理を行うものである。
【０１８６】
下位モジュール代替処理コード実行復帰遷移部１１３，テスト支援モジュール１１５は、先の実施の形態と同じである。
本発明の（実施の形態７）にかかるプログラムテスト装置を図３０のプログラム記述例に基づいて説明する。なお、基本的な動作は、（実施の形態１）と同様なので、ここでの説明は省略する。
【０１８７】
図３０に選択条件情報７０３の記述例とテストドライバモジュールの記述例を示した。
選択条件例７０３には、被テスト関数から呼び出される下位モジュールの名前（ここではｆｕｎｃ）と、その下位モジュールが呼び出された回数による条件と、その条件の時に行う処理のＮｏが記述されている。
【０１８８】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報７０３に格納しておく。
（Ｐ３００１）の行番号Ｌ０３〜Ｌ０５にデフォルトの処理、行番号Ｌ０６〜Ｌ０８に処理Ｎｏ２の処理、行番号Ｌ０９〜Ｌ１１に処理Ｎｏ３の処理、行番号Ｌ１２〜Ｌ１４に処理Ｎｏ４の処理がそれぞれ記述されている。
【０１８９】
テスト実行時に、下位モジュール呼出し順序記録部７０１によってそれぞれの下位モジュールが呼出された回数を呼出し記憶情報に格納しておき、下位モジュール代替処理コード選択部７０２によって、選択条件情報７０３より条件を取得する。
【０１９０】
たとえば、１０回目にｆｕｎｃが呼ばれた場合は図３０の（Ｐ３００１）の行番号Ｌ０６〜Ｌ０８に記述された下位モジュール代替処理コードが実行される。
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０１９１】
（実施の形態８）
（実施の形態８）は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、プログラムの実行時間に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０１９２】
図８は本発明の（実施の形態８）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、下位モジュール代理コード選択部７０２とから構成される。
【０１９３】
実行可能命令記憶部１０６は、テストドライバモジュール１０７と、プログラムテストの対象となる被テストモジュール１１０と、被テストモジュール１１０より呼び出される下位モジュール１１１と、テスト支援の機能をもった関数群であるテスト支援モジュール１１５から構成される実行可能命令を記憶するものである。
【０１９４】
テストドライバモジュール１０７は、テスト実行処理を行うテストドライバ処理コード１０８と、下位モジュールの処理を記述した複数の下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎから構成されている。
【０１９５】
呼出し検出設定情報１１４は、下位モジュール１１１の呼出し検出や、下位モジュール代替処理コード実行のための設定情報を記憶するものである。
デバッグ情報２０２は、テストドライバモジュール１０７や被テストモジュール１１０や下位モジュール１１１やテスト支援モジュールなどの実行可能命令の、たとえば変数の格納先、各モジュールの定義位置などの情報である。
【０１９６】
選択条件情報７０３は、複数からなる下位モジュール代替処理コード１０９の中から１つを選択するための条件を格納するものである。
命令実行部１０１は、実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２と、テスト実行時に実行時間を測定する実行時間測定部８０１とを備えている。
【０１９７】
下位モジュール呼出し検出設定命令検出部１０２は、（実施の形態１）と同じである。
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部７０１の処理を行う。
【０１９８】
下位モジュール呼出し順序記録部７０１は、呼出し順序を呼出し順序情報７０４に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【０１９９】
下位モジュール代替処理コード選択部７０２は、現在の実行時間を実行時間測定部８０１から、複数からなる下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎの中から１つを選択するための条件を選択条件情報７０３からそれぞれ取り出し、その２つの情報から適切な下位モジュール代替処理コードの選択処理を行う。
【０２００】
この処理の後、下位モジュール代替処理コード実行遷移部１０５の処理によってテストドライバモジュールのなかの下位モジュール代理コードに実行を遷移させる。
【０２０１】
下位モジュール代替処理コード実行終了検出部１１２，下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５は、（実施の形態１）と同じである。
【０２０２】
下位モジュール代替処理コード実行復帰遷移部１１３，テスト支援モジュール１１５は、（実施の形態１）と同じである。
本発明の（実施の形態８）にかかるプログラムテスト装置を図４０のプログラム記述例に基づいて説明する。なお、基本的な動作は、（実施の形態１）と同様なのでここでの説明は省略する。
【０２０３】
図４０に、選択条件情報７０３の記述例とテストドライバモジュールの記述例を示した。
選択条件情報７０３には、被テスト関数から呼び出される下位モジュールの名前（ここではｆｕｎｃ）と、あらかじめ設定した時間による条件と、その条件の時に行う処理のＮｏが記述されている。
【０２０４】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報７０３に格納しておく。
（Ｐ４００１）の行番号Ｌ０３〜Ｌ０５にデフォルトの処理、行番号Ｌ０６〜Ｌ０８に処理Ｎｏ２の処理、行番号Ｌ０９〜Ｌ１１に処理Ｎｏ３の処理、行番号Ｌ１２〜Ｌ１４に処理Ｎｏ４の処理がそれぞれ記述されている。
【０２０５】
テスト実行時に、実行時間測定部８０１によって実行時間を測定し、下位モジュール代替処理コード選択部７０２によって、選択条件情報７０３より条件を取得する。
【０２０６】
たとえば、ｆｕｎｃの呼出し時に、１０ｍｓであれば図４０の（Ｐ４００１）の行番号Ｌ０６〜Ｌ０８に記述された下位モジュール代替処理コードが実行される。
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０２０７】
（実施の形態９）
（実施の形態９）は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段で、下位モジュールを呼出した関数の種類に応じて下位モジュール代替処理コードを選択する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０２０８】
図９は本発明の（実施の形態９）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、呼出し元関数取得部９０１と、下位モジュール代理コード選択部７０２から構成される。
【０２０９】
実行可能命令記憶部１０６，呼出し検出設定情報１１４は（実施の形態７）と同じである。
選択条件情報７０３は、複数からなる下位モジュール代替処理コード１０９１，１０９２，・・・，１０９ｎの中から１つを選択するための条件を格納するものである。
【０２１０】
命令実行部１０１は、（実施の形態１）と同じように実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２を備えている。
【０２１１】
下位モジュール呼出し検出設定命令検出部１０２は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出し検出設定の検出を行う。下位モジュール呼出し検出設定命令が検出されたときは、下位モジュール呼出し検出設定部１０３の処理を行う。
【０２１２】
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、呼出し元関数取得部９０１の処理を行う。
【０２１３】
呼出し元関数取得部９０１は、実行用ワークメモリ領域２０３により下位モジュールの呼出し元の関数を取得する処理で、この処理の後下位モジュール代理コード選択部７０２の処理を行う。
【０２１４】
下位モジュール代替処理コード実行終了検出部１１２は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール代替処理コード実行終了の検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール代替処理コード実行復帰遷移部１１３の処理を行う。
【０２１５】
下位モジュール呼出し検出設定部１０３は、下位モジュール１１１の呼出しの検出を行うための設定を行うものである。
下位モジュール代替処理コード実行遷移部１０５は、下位モジュール１１１の呼出し検出した際に、下位モジュール代替処理コード１０９へ実行を遷移する処理を行うものである。
【０２１６】
下位モジュール代替処理コード実行復帰遷移部１１３は、下位モジュール代替処理コード１０９の終了を検出した際に、下位モジュール１１１の呼出しの次の処理に遷移する処理を行うものである。
【０２１７】
テスト支援モジュール１１５は、下位モジュール呼出し検出の設定などのテスト支援の機能をもった関数群で、予め用意されているこれらの関数群をテスト実施者やプログラム作成者はテストドライバモジュール内で使用してテストドライバモジュールの作成を行う。
【０２１８】
本発明の（実施の形態９）にかかるプログラムテスト装置を図３９のプログラム記述例に基づいて説明する。なお、基本的な動作は（実施の形態１）と同様なのでここでの説明は省略する。
【０２１９】
図３９に、選択条件情報７０３の記述例とテストドライバモジュールの記述例を示した。
選択条件情報７０３の記述例には、被テストモジュールから呼び出される下位モジュールの名前（ここではｆｕｎｃ）と、その下位モジュールを呼び出す、呼出し元関数名という条件と、その条件の時に行う処理のＮｏが記述されている。
【０２２０】
この選択条件情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報７０３に格納しておく。
Ｐ３９０１の行番号Ｌ０３〜Ｌ０５にデフォルトの処理、行番号Ｌ０６〜Ｌ０８に処理Ｎｏ２の処理、行番号Ｌ０９〜Ｌ１１に処理Ｎｏ３の処理、行番号Ｌ１２〜Ｌ１４に処理Ｎｏ４の処理がそれぞれ記述されている。テスト実行時に、呼出し元関数取得部９０１によって下位モジュールを呼出した呼出し元関数名を取得し、下位モジュール代替処理コード選択部７０２によって、選択条件情報７０３より条件を取得する。
【０２２１】
たとえば、呼出し元関数ｓｕｂ＿ｆｕｎｃからｆｕｎｃが呼び出された場合は図３９のＰ３９０１の行番号Ｌ０６〜Ｌ０８に記述された下位モジュール代替処理コードが実行される。
【０２２２】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュールを効率的にテストできる。
【０２２３】
（実施の形態１０）
（実施の形態１０）は、テストドライバ中に記述された一つの下位モジュールに対応した複数の下位モジュール代替処理コードを選択して実行する手段を持つ場合において、テストドライバ中に記述された下位モジュール代替処理コードの選択条件を取得する手段を示すものである。これにより本プログラムテスト装置の適用範囲を広めることができ、プログラムの開発期間を短縮できる。
【０２２４】
図１０は本発明の（実施の形態１０）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行遷移部１０５と、下位モジュール代替処理コード実行復帰遷移部１１３と、代替コード選択条件取得部１００２と、下位モジュール代理コード選択部７０２から構成される。
【０２２５】
実行可能命令記憶部１０６，呼出し検出設定情報１１４，選択条件情報７０３は、（実施の形態７）と同じである。
命令実行部１０１は、実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２と、下位モジュール代替処理コード内選択条件設定命令検出部１００１を備えている。
【０２２６】
下位モジュール代替処理コード内選択条件設定命令検出部１００１とは、下位モジュール代替処理コード中に記述された下位モジュール代替処理コード内選択条件命令を検出する処理を行い、代替コード選択条件取得部１００２において代替コード選択条件を取得しその条件を選択条件情報７０３に格納する。この処理の後に下位モジュール代替処理コード選択部７０２の処理を行う。
【０２２７】
下位モジュール代替処理コード選択部７０２は、複数ある下位モジュール代替処理コードから、選択条件情報７０３に格納された条件に合ったものを選択する処理を行う。この処理の後に、下位モジュール代替処理コード実行遷移部１０５によって下位モジュール代替処理コードへ実行を遷移させる。
【０２２８】
下位モジュール呼出し検出設定命令検出部１０２は、（実施の形態７）と同じである。
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール呼出し順序記録部７０１の処理を行う。
【０２２９】
下位モジュール呼出し順序記録部７０１は、呼出し順序を呼出し順序情報７０４に格納する処理を行うもので、この処理の後下位モジュール代理コード選択部の処理を行う。
【０２３０】
下位モジュール代替処理コード実行終了検出部１１２，下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行遷移部１０５，下位モジュール代替処理コード実行復帰遷移部１１３，テスト支援モジュール１１５は、（実施の形態７）と同じである。
【０２３１】
本発明の（実施の形態１０）にかかるプログラムテスト装置を図４１のプログラム記述例に基づいて説明する。なお、基本的な動作は、（実施の形態１）と同様なので、ここでの説明は省略する。
【０２３２】
図４１に、選択条件情報７０３の記述例とテストドライバモジュールの記述例を示した。
選択条件例７０３には、被テスト関数から呼び出される下位モジュールの名前（ここではｆｕｎｃ）と、状態を表わす変数名（ｓｔａｔ）と状態を表わす値による条件と、その条件の時に行う処理のＮｏが記述されている。
【０２３３】
この選択情報は、テスト実行前にあらかじめテスト実施者などによって作成され選択条件情報７０３に格納しておく。
（Ｐ４１０１）の行番号Ｌ０３〜Ｌ０５にデフォルトの処理、行番号Ｌ０６〜Ｌ０８に処理Ｎｏ２の処理、行番号Ｌ０９〜Ｌ１１に処理Ｎｏ３の処理、行番号Ｌ１２〜Ｌ１４に処理Ｎｏ４の処理がそれぞれ記述されている。
【０２３４】
テスト実行時に、下位モジュール呼出し順序記録部７０１によってそれぞれの下位モジュールが呼出された回数を呼出し記憶情報に格納しておき、下位モジュール代替処理コード選択部７０２によって、選択条件情報７０３より条件を取得する。
【０２３５】
たとえば、状態を表わす変数名（ｓｔａｔ）の値が０ｘ０００１の状態でｆｕｎｃが呼ばれた場合は図４１の（Ｐ４１０１）の行番号Ｌ０６〜Ｌ０８に記述された下位モジュール代替処理コードが実行される。
【０２３６】
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を複数個記述し、その選択条件もテストドライバ中に記述することが可能となり、被テストモジュールを効率的にテストできる。
【０２３７】
（実施の形態１１）
（実施の形態１１）は被テストモジュールから呼び出される下位モジュールでの変数と戻り値に関わる応答処理をテストドライバ中に記述しそれを実行するための手段を示すもので、比較的簡単に効果のあるプログラムテスト装置を実現できることができ、これを使うことでプログラムの開発期間を短縮できる。
【０２３８】
図１１は本発明の（実施の形態１１）にかかるプログラムテスト装置を示す。
プログラムテスト装置１００は、命令実行部１０１と、下位モジュール呼出し検出設定部１０３と、下位モジュール代替処理コード実行復帰遷移部１１３と、変数操作情報取得部１１０２と、下位モジュール内スタティック変数設定部１１０５と、下位モジュール戻り値設定部１１０６とから構成される。
【０２３９】
実行可能命令記憶部１０６，呼出し検出設定情報１１４は、（実施の形態１）と同じである。
命令実行部１０１は、実行可能命令記憶部１０６より命令を取り出し実行を行うもので、内部に下位モジュール呼出し検出設定命令検出部１０２と、下位モジュール呼出し命令検出部１０４と、下位モジュール代替処理コード実行終了検出部１１２と、変数操作命令検出部１１０１と、戻り値操作命令検出部１１０３を備えている。
【０２４０】
下位モジュール呼出し検出設定命令検出部１０２は、（実施の形態１）と同じである。
下位モジュール呼出し命令検出部１０４は、実行可能命令記憶部１０６より読み出した命令の判定を行い下位モジュール呼出しの検出を行う。下位モジュール呼出し命令が検出されたときは、下位モジュール内スタティック変数設定部１１０５、下位モジュール戻り値設定部１１０６の処理を行う。
【０２４１】
変数操作命令検出部１１０１は、実行可能命令記憶部１０６より読み出した下位モジュール内変数操作命令の判定を行う。下位モジュール内変数操作命令が検出されたときは、変数操作情報取得部１１０２の処理を行う。
【０２４２】
戻り値操作命令検出部１１０３は、実行可能命令記憶部１０６より読み出した下位モジュール戻り値操作命令の判定を行う。下位モジュール戻り値操作命令が検出されたときは、戻り値操作情報取得部１１０４の処理を行う。
【０２４３】
下位モジュール呼出し検出設定部１０３，下位モジュール代替処理コード実行復帰遷移部１１３は、（実施の形態１）と同じである。
図３２は、変数操作命令検出部１１０１、変数操作情報取得部１１０２についての動作をあらわすフローチャートである。
【０２４４】
変数操作命令検出部１１０１は、変数操作命令を検出すると、変数操作情報取得部１１０２の処理が実行される。変数操作命令の引数から被テストモジュール内のｓｔａｔｉｃ変数名、変更したい値を取得し、変数操作情報１１０７に登録設定する。
【０２４５】
図３３は、戻り値操作命令検出部１１０３、戻り値操作情報取得部１１０４についての動作をあらわすフローチャートである。
戻り値操作命令検出部１１０３は、戻り値操作命令を検出すると、戻り値操作情報取得部１１０４の処理が実行される。戻り値操作命令の引数から変更したい値を取得し、戻り値操作情報１１０８に登録設定する。
【０２４６】
図３４は、下位モジュール呼出し命令検出部１０４、下位モジュール内スタティック変数設定部１１０５、下位モジュール戻り値設定部１１０６についての動作をあらわすフローチャートである。
【０２４７】
下位モジュール呼出し命令検出部１０４は、下位モジュール呼出し命令を検出すると、下位モジュール内スタティック変数設定部１１０５、下位モジュール戻り値設定部１１０６の処理が実行される。戻り値操作命令の引数から変更したい値を取得し、変数操作情報１１０７に登録設定する。
【０２４８】
本発明の（実施の形態１１）にかかるプログラムテスト装置を図３１のプログラム記述例に基づいて説明する。
（Ｐ３１０１）においては、はテストドライバモジュールの記述例を、（Ｐ３１０２）は、被テストモジュールの記述例をそれぞれ示している。
【０２４９】
（Ｐ３１０１）の行番号Ｌ０３で記述されている「ＳｅｔＡｌｔＦｕｎｃ（”ｆｕｎｃ”）；」を呼び出すことで下位モジュール呼出し検出設定命令検出部１０２により、下位モジュールの呼出し検出が行われる。この関数の引数で指定した（Ｐ３１０１）においては「ｆｕｎｃ（）」を代替する下位モジュールとして下位モジュール呼出し検出設定部１０３によって設定される。
【０２５０】
（Ｐ３１０１）の行番号Ｌ０４で記述されている「ＳｅｔＡｌｔＳｔａｔｉｃ（”ｆｕｎｃ”，”ｆｕｎｃ．ｃ”，”ｆｓ”，１０）；」を呼び出すことで変数操作命令検出部１１０１により、変数操作命令の呼出し検出が行われる。この関数の引数で指定した（Ｐ３１０１）においてはｆｕｎｃ．ｃ内のスタティック変数ｆｓの情報をデバッグ情報２０２から変数操作情報取得部１１０２によって取得し、変数操作情報１１０７に設定する。
【０２５１】
（Ｐ３１０１）の行番号Ｌ０５で記述されている「ＳｅｔＡｌｔＲｅｔｕｒｎ（”ｆｕｎｃ”，”ｆｕｎｃ．ｃ”，７）；」を呼び出すことで戻り値操作命令検出部１１０３により、戻り値操作命令の呼出し検出が行われる。この関数の引数で指定した（Ｐ３１０１）においてはｆｕｎｃの戻り値を戻り値操作情報取得部１１０４によって取得し、戻り値操作情報１１０８に設定する。
【０２５２】
（Ｐ３１０１）の行番号Ｌ０７の被テストモジュール呼出しの処理に移る。
被テストモジュール（Ｐ３１０２）の行番号Ｌ０９において下位モジュール「ｆｕｎｃ（）」が呼出されＬ０２の下位モジュールの位置に遷移すると下位モジュール呼出し命令検出部１０４により下位モジュールの検出が行われる。このとき下位モジュール内スタティック変数設定部１１０５が変数操作情報１１０７から変更する変数情報を取り出し、実行用ワークメモリ領域２０３の下位モジュール内スタティック格納領域１１０９に値を設定する。次に、下位モジュール戻り値設定部１１０６が戻り値操作情報１１０８から戻り値情報を取得し、実行用ワークメモリ領域２０３の下位モジュール戻り値格納領域１１１０に値を設定する。
【０２５３】
被テストモジュール（Ｐ３１０２）の行番号Ｌ０９の実行完了時には、スタティック変数ｆｓは“１０”に、ｆｕｎｃの戻り値ｚは“７”に設定されている。
以上のように、このプログラムテスト装置１００によれば、テストドライバモジュール１０７中に、テストの対象である被テストモジュール１１０から呼び出される下位モジュール１１１の処理を記述することで、被テストモジュール１１０を効率的にテストできる。
【０２５４】
（実施の形態１２）
上記の各実施の形態では、プログラム実行時に動的に下位モジュール代替処理を行ってきたが、この（実施の形態１２）ではプログラム実行以前に未作成の下位モジュール呼出し処理をテストドライバの下位モジュール代替処理コードに置き換えて新ソースファイルを生成する。
【０２５５】
詳しくは、（実施の形態１２）のソースファイル変換装置では、被テストモジュールから呼び出される下位モジュールでの処理をテストドライバ中に記述し、その記述を抽出後、被テストモジュールの中に埋め込むための手段を示すもので、プログラム実行前に処理を行うことができるために適用範囲が広い。本発明を使うことでプログラムの開発期間を短縮できる。
【０２５６】
図１２は本発明の（実施の形態１２）にかかるソースファイル変換装置を示し、プログラムのコンパイル前に下位モジュール呼出し記述をテストドライバモジュールに記述された下位モジュール代替処理コードに置き換えるものである。
【０２５７】
このプログラムテスト装置は、ソースファイルＡ１２０７及びソースファイルＢ１２１２を入力とし、プログラムテスト用ソースファイル変換装置１２０１によって、新ソースファイルＢ１２１５が生成される。
【０２５８】
入力となるソースファイルＡ１２０７は、テストドライバ処理コード１２０９、コメントとして記述された下位モジュール代替処理コード１２１０が記述されたテストドライバモジュール１２０８で構成されている。
【０２５９】
ソースファイルＢ１２１１は、被テストモジュール１２１２、下位モジュール１２１３で構成する。
出力となる新ソースファイルＢ１２１４は、変更後被テストモジュール１２１５、下位モジュール１２１６で構成される。ソースファイルＢ１２１１の下位モジュール１２１３と新ソースファイルＢ１２１４の下位モジュール１２１６で同一である。
【０２６０】
プログラムテスト用ソースファイル変換装置１２０１は、ソースファイルＡ１２０７からコメントとして記述された下位モジュール代替処理コード１２１０を抽出して代替処理コード情報１２１７に格納する下位モジュール代替処理コード抽出部１２０２と、ソースファイルＢ１２１１から下位モジュール呼出し位置を検出を検出して下位モジュール呼出し位置情報１２１８に格納する下位モジュール呼出し位置検出部１２０３と、下位モジュール呼出し位置検出部１２０３で検出した下位モジュール呼出しコードから引数情報を抽出する引数設定情報抽出部１２０４と、同じく下位モジュール呼出しコードから戻り値情報を抽出する戻り値設定情報抽出部１２０５と、代替処理コード情報１２１７と引数設定情報１２１９と戻り値設定情報１２２０から変更するコードを作成して下位モジュール呼出し位置情報１２１８に格納された位置の記述を変更するコードに置き換える下位モジュール代替処理コード挿入部１２０６とから構成される。
【０２６１】
図３５は新ソースファイルＢ１２１４の生成方法の一例を示す。
テストドライバモジュール（Ｐ３５０１）において、（Ｐ３５０１）の行番号Ｌ０４の「＄ＡＬＴＣＯＤＥＳＴＡＲＴ  ｉｎｔ  ｓｕｂＦｕｎｃ（ｉｎｔ  ｘ，ｉｎｔ  ｙ）」はコメントアウトとして記述された下位モジュール代替処理コード１２１０の開始命令で、（Ｐ３５０１）の行番号Ｌ０４から引数ｘ、ｙについて引数型、引数名を抽出して引数設定情報１２１９に格納する。行番号Ｌ０５の「／／下位モジュール代替処理コード処理」から（Ｐ３５０１）の行番号Ｌ０８の「ｆｇ＝ｚ＊２；」までを代替処理コード情報１２１７に登録する。（Ｐ３５０１）の行番号Ｌ０９の「＄ＡＬＴＣＯＤＥＲＥＴＵＲＮ  ｚ」はコメントとして記述された下位モジュール代替処理コード１２１０の戻り値設定命令で、戻り値ｚを抽出して戻り値設定情報１２２０に格納する。
【０２６２】
（Ｐ３５０１）の行番号Ｌ１０「＄ＡＬＴＣＯＤＥＥＮＤ」はコメントとして記述された下位モジュール代替処理コード１２１０の終了命令であり下位モジュール代替処理コードの抽出が終了する。
【０２６３】
被テストモジュール（Ｐ３５０２）おいて、下位モジュール呼出し以外の行はそのまま新ソースファイルに出力する。（Ｐ３５０２）の行番号Ｌ０６の「ｆｚ  ＝  ｓｕｂＦｕｎｃ（  ｆｘ，ｆｙ  ）；」から引数ｆｘ、ｆｙを引数設定情報１２１９に格納し、戻り値ｆｚを戻り値設定情報１２２０に格納する。
【０２６４】
次に、下位モジュール代替処理コード挿入部１２０６が変更後被テストモジュール（Ｐ３５０３）の行番号Ｌ０７，Ｌ０８のように引数設定情報１２１９に格納されている引数ｆｘ、ｆｙを（Ｐ３５０１）の行番号Ｌ０４で抽出したｘ、ｙに代入する形にしてファイル出力する。次に、戻り値設定情報１２２０に格納されているｚとｆｚを代替処理コード情報１２１７の内容を（Ｐ３５０３）のＬ０９からＬ１１に出力する。最後に、（Ｐ３５０３）の行番号Ｌ１２のように戻り値設定情報１２２０に格納されているｚをｆｚに代入する形にしてファイル出力する。なお、この部分は（Ｐ３５０３）のＬ０６、Ｌ１３で示すように｛  ｝でくくる複文としてファイル出力する。以上の通りテストドライバモジュール（Ｐ３５０１）と被テストモジュール（Ｐ３５０２）を用いて変更後被テストモジュール（Ｐ３５０３）を生成する。
【０２６５】
図３６は下位モジュール代替処理コード抽出部１２０２のフローチャートである。先ず（Ｓ３６０１）でソースファイルＡ１２０７から１行読み出しを行う。次に（Ｓ３６０２）でソースファイルＡ１２０７のファイルの終了判定を行い、ファイルの終了である場合は処理を終え、ファイルの終了でなければ（Ｓ３６０３）に移る。（Ｓ３６０３）では、下位モジュール代替処理コード中の開始命令であるかどうかを判定し、開始命令であれば（Ｓ３６０８）に、開始命令でなければ（Ｓ３６０４）に移る。（Ｓ３６０８）では、下位モジュール代替処理コードの開始命令を抽出したことを記録する処理開始フラグを設定する。次に、（Ｓ３６０９）では開始命令から開始命令から関数名を抽出して下位モジュール呼出し位置情報１２１８に格納して、引数の型、変数名を抽出して引数設定情報１２１９に格納し、（Ｓ３６０１）に移る。
【０２６６】
（Ｓ３６０４）では、下位モジュール代替処理コード中の戻り値設定命令であるかどうかを判定し、戻り値設定命令である場合は（Ｓ３６０１）で戻り値を抽出して戻り値設定情報１２２０に格納し、戻り値設定命令でない場合は（Ｓ３６０５）に移る。（Ｓ３６０５）では下位モジュール代替処理コード中の終了命令であるかどうかを判定し、終了命令である場合は（Ｓ３６１１）で下位モジュール代替処理コードの終了命令を抽出したことを記録するために処理開始フラグをクリアし、終了命令でない場合は、（Ｓ３６０６）に移る。（Ｓ３６０６）では処理開始フラグが設定されているかクリアされているかを判定して設定されていれば取得行を代替処理コード情報１２１７に追加し、クリアされていれば（Ｓ３６０１）に移る。
【０２６７】
図３７は下位モジュール呼出し位置検出部１２０３と、引数設定情報抽出部１２０４と、戻り値設定情報抽出部１２０５のフローチャートである。
初めに、（Ｐ３７０１）でソースファイルＢ１２０７から１行読み出しを行う。（Ｐ３７０３）で下位モジュール呼出し位置情報１２１８に登録された関数名と現在取得した行の関数名が一致すれば、引数設定情報抽出、戻り値設定情報抽出、下位モジュール代替処理コード挿入処理を行う。一致しない場合は、そのまま取得行を新ソースファイルＢ１２１４へ出力する。（Ｐ３７０５）では引数値を引数設定情報１２１９に設定する。（Ｐ３７０６）では戻り値変数名を戻り値設定情報１２２０に設定する。次に（Ｐ３７０７）の処理に移る。なお（Ｐ３７０７）の処理は図３８で説明する。
【０２６８】
図３８は、下位モジュール代替処理コード挿入部１２０６を説明するフローチャートである。まず、複文の始まりを示す｛を新ソースファイルＢ１２１４へ出力する。（Ｐ３８０１）では引数設定情報１２１９の引数型、引数名、引数値をもとにして代入式を作り、新ソースファイルＢ１２１４へ出力する。登録された引数分処理を繰り返す。
【０２６９】
（Ｐ３８０２）では、代替処理コード情報１２１７に登録されたコード全てを新ソースファイルＢ１２１４へ出力する。（Ｐ３８０３）では、戻り値設定情報１２２０の戻り値変数名、戻り値を基にして代入式を作り、新ソースファイルＢへ出力する。最後に複文の終わりを示す｝を新ソースファイルＢ１２１４へ出力する。
【０２７０】
生成された新ソースファイルＢ１２１４では、下位モジュールを呼び出す処理が、コメントとして記述された下位モジュール代替処理コード１２１０を用いて従来の装置で実行可能なプログラムに変換されるため、（実施の形態１）から（実施の形態１１）のような装置を必要とせず、従来の装置でプログラムのテストが行える。
【０２７１】
以上のようにソースファイル変換装置１２０１によれば、テストドライバの中に記述された代替処理コードを抽出し、ソースファイル中の被テストモジュールの中の下位モジュール呼出し部分を抽出した代替処理コードで効率よく置き換えることができ、被テストモジュールを効率的にテストできる。
【０２７２】
【発明の効果】
以上のように本発明のプログラムテスト装置によれば、被テストモジュールなどから呼び出される下位モジュールに代替する処理をテストドライバ中に記述することができ、これによりテストドライバの動作や下位モジュールの動きを容易に理解できるようになるため、プログラムの単体テスト作成工数やデバッグ工数、メンテナンス工数を短縮できる。
【０２７３】
また、単体テストの作業効率を高めることで、従来、単体テストの効率の悪さから十分な単体テストが行われてこなかった慣行が改められ高品質プログラムの作成をローコストで実現できるようになる。
【０２７４】
さらに、本発明にかかるプログラムテスト装置は、ハードウェアによって実装されたものに限定されるものではなく、プロセッサの動作を模擬するシミュレータやエミュレータ、さらに、仮想マシンやインタープリタのようなものにも広範囲に適用できるもので、さまざまな種類のプログラムの単体テスト作業時間の短縮に寄与できる。
【図面の簡単な説明】
【図１】本発明の（実施の形態１）にかかるプログラムテスト装置の構成図
【図２】本発明の（実施の形態２）にかかるプログラムテスト装置の構成図
【図３】本発明の（実施の形態３）にかかるプログラムテスト装置の構成図
【図４】本発明の（実施の形態４）にかかるプログラムテスト装置の構成図
【図５】本発明の（実施の形態５）にかかるプログラムテスト装置の構成図
【図６】本発明の（実施の形態６）にかかるプログラムテスト装置の構成図
【図７】本発明の（実施の形態７）にかかるプログラムテスト装置の構成図
【図８】本発明の（実施の形態８）にかかるプログラムテスト装置の構成図
【図９】本発明の（実施の形態９）にかかるプログラムテスト装置の構成図
【図１０】本発明の（実施の形態１０）にかかるプログラムテスト装置の構成図
【図１１】本発明の（実施の形態１１）にかかるプログラムテスト装置の構成図
【図１２】本発明の（実施の形態１２）にかかるプログラムテスト装置の構成図
【図１３】本発明の（実施の形態１）にかかるプログラムテスト装置のプログラム記述例
【図１４】（実施の形態１）の下位モジュール呼出し検出設定部の動作を表すフローチャート
【図１５】（実施の形態１）の下位モジュール代替処理コード実行遷移部の動作を表すフローチャート
【図１６】（実施の形態１）の下位モジュール代替処理コード実行復帰遷移部の動作をあらわすフローチャート
【図１７】本発明の（実施の形態２）にかかるプログラムテスト装置のプログラム記述例
【図１８】（実施の形態２）の下位モジュール呼出しパラメータ複写部の動作を表すフローチャート
【図１９】本発明の（実施の形態３）にかかるプログラムテスト装置のプログラム記述例
【図２０】下位モジュール戻り値複写部の動作を表すフローチャート
【図２１】本発明の（実施の形態４）にかかるプログラムテスト装置のプログラム記述例
【図２２】（実施の形態４）の下位モジュールスタティック変数複写部の動作を表すフローチャート
【図２３】（実施の形態４）の下位モジュールスタティック変数復帰部の動作を表すフローチャート
【図２４】本発明の（実施の形態５）にかかるプログラムテスト装置のプログラム記述例
【図２５】（実施の形態５）の下位モジュールスタティック変数アクセス設定部の動作を表すフローチャート
【図２６】（実施の形態５）の下位モジュール代替処理コード内スタティック変数アクセス検出部の動作を表すフローチャート
【図２７】（実施の形態５）の下位モジュールスタティック変数複写復帰部の動作を表すフローチャート
【図２８】本発明の（実施の形態６）にかかるプログラムテスト装置のプログラム記述例
【図２９】スタティック変数ポインタ設定部の動作を表すフローチャート
【図３０】本発明の（実施の形態９）にかかるプログラムテスト装置のプログラム記述例
【図３１】本発明の（実施の形態１１）にかかるプログラムテスト装置のプログラム記述例
【図３２】（実施の形態１１）の変数操作部命令検出部、変数操作部命令取得部についての動作をあらわすフローチャート
【図３３】（実施の形態１１）の戻り値操作部命令検出部、戻り値操作部命令取得部についての動作をあらわすフローチャート
【図３４】（実施の形態１１）の下位モジュール呼出し命令検出部、被テストモジュール内スタティック変数設定部、下位モジュール戻り対設定部についての動作をあらわすフローチャート
【図３５】本発明における（実施の形態１２）を説明するためのプログラム記述例
【図３６】（実施の形態１２）の下位モジュール代替処理コード抽出部のフローチャート
【図３７】（実施の形態１２）の下位モジュール呼出し位置検出部と、引数設定情報抽出部と、戻り値設定情報抽出部のフローチャート
【図３８】（実施の形態１２）の下位モジュール代替処理コード挿入部を説明するフローチャート
【図３９】本発明の（実施の形態９）にかかるプログラムテスト装置のプログラム記述例
【図４０】本発明の（実施の形態８）にかかるプログラムテスト装置のプログラム記述例
【図４１】本発明の（実施の形態１０）にかかるプログラムテスト装置のプログラム記述例
【符号の説明】
１００    プログラムテスト装置
１０１    命令実行部
１０２    下位モジュール呼出し検出設定命令検出部
１０３    下位モジュール呼出し検出設定部
１０４    下位モジュール呼出し命令検出部
１０５    下位モジュール代替処理コード実行遷移部
１０６    実行可能命令記憶部
１０７    テストドライバモジュール
１０８    テストドライバ処理コード
１０９    下位モジュール代替処理コード
１１０    被テストモジュール
１１１    下位モジュール
１１２    下位モジュール代替処理コード実行終了検出部
１１３    下位モジュール代替処理コード実行復帰遷移部
１１４    呼出し検出設定情報
１１５    テスト支援モジュール
２０１    下位モジュール呼出しパラメータ複写部
２０２    デバッグ情報
２０３    実行用ワークメモリ領域
２０４    下位モジュール呼出しパラメータ格納領域
２０５    下位モジュール代替処理コード用変数領域
３０１    下位モジュール戻り値複写部
３０２    下位モジュール代替処理コード用戻り値格納領域
３０３    下位モジュール戻り値格納領域
４０１    下位モジュールスタティック変数複写部
４０２    下位モジュール代替処理コード用スタティック変数格納領域
４０３    下位モジュール用スタティック変数格納領域
４０４    下位モジュールスタティック変数復帰部
５０１    下位モジュール代替処理コード内スタティック変数アクセス検出部
５０２    下位モジュールスタティック変数複写復帰部
５０３    下位モジュールスタティック変数アクセス検出設定部
６０１    スタティック変数ポインタ設定部
６０２    下位モジュール代替処理コード用スタティック変数ポインタ格納領域
７０１    下位モジュール呼出し順序記録部
７０２    下位モジュール代替処理コード選択部
７０３    選択条件情報
７０４    呼出し順序情報
８０１    実行時間測定部
９０１    呼出し元関数取得部
９０２    下位モジュール戻り番地格納領域
１００１    下位モジュール代替処理コード内選択条件設定命令検出部
１００２    代替コード選択条件取得部
１１０１    変数操作命令検出部
１１０２    変数操作情報取得部
１１０３    戻り値操作命令検出部
１１０４    戻り値操作情報取得部
１１０５    下位モジュール内スタティック変数設定部
１１０６    下位モジュール戻り値設定部
１１０７    変数操作情報
１１０８    戻り値操作情報
１１０９    下位モジュール用スタティック格納領域
１１１０    下位モジュール戻り値格納領域
１２０１    プログラムテスト用ソースファイル変換装置
１２０２    下位モジュール代替処理コード抽出部
１２０３    下位モジュール呼出し位置検出部
１２０４    引数設定情報抽出部
１２０５    戻り値設定情報抽出部
１２０６    下位モジュール代替処理コード挿入部
１２０７    ソースファイルＡ
１２０８    テストドライバモジュール
１２０９    テストドライバ処理コード
１２１０    コメントとして記述された下位モジュール代替処理コード
１２１１      ソースファイルＢ
１２１２    被テストモジュール
１２１３    下位モジュール
１２１４    新ソースファイルＢ
１２１５    変更後被テストモジュール
１２１６    下位モジュール
１２１７    代替処理コード情報
１２１８    下位モジュール呼出し位置情報
１２１９    引数設定情報
１２２０    戻り値設定情報
【図１】
2004287858.tif 000003
【図２】
2004287858.tif 000004
【図３】
2004287858.tif 000005
【図４】
2004287858.tif 000006
【図５】
2004287858.tif 000007
【図６】
2004287858.tif 000008
【図７】
2004287858.tif 000009
【図８】
2004287858.tif 000010
【図９】
2004287858.tif 000011
【図１０】
2004287858.tif 000012
【図１１】
2004287858.tif 000013
【図１２】
2004287858.tif 000014
【図１３】
2004287858.tif 000015
【図１４】
2004287858.tif 000016
【図１５】
2004287858.tif 000017
【図１６】
2004287858.tif 000018
【図１７】
2004287858.tif 000019
【図１８】
2004287858.tif 000020
【図１９】
2004287858.tif 000021
【図２０】
2004287858.tif 000022
【図２１】
2004287858.tif 000023
【図２２】
2004287858.tif 000024
【図２３】
2004287858.tif 000025
【図２４】
2004287858.tif 000026
【図２５】
2004287858.tif 000027
【図２６】
2004287858.tif 000028
【図２７】
2004287858.tif 000029
【図２８】
2004287858.tif 000030
【図２９】
2004287858.tif 000031
【図３０】
2004287858.tif 000032
【図３１】
2004287858.tif 000033
【図３２】
2004287858.tif 000034
【図３３】
2004287858.tif 000035
【図３４】
2004287858.tif 000036
【図３５】
2004287858.tif 000037
【図３６】
2004287858.tif 000038
【図３７】
2004287858.tif 000039
【図３８】
2004287858.tif 000040
【図３９】
2004287858.tif 000041
【図４０】
2004287858.tif 000042
【図４１】
2004287858.tif 000043