(57)【要約】【課題】従来、ハードウェアがエラーの場合のテスト対象プログラムのテストも自動的に容易にできない、という課題があった。【解決手段】テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、テスト情報が有する動作パターンを取得し、シミュレータプログラムに渡すテスト制御部と、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、テスト制御部がシミュレータプログラムに渡した動作パターンとを用いてシミュレータプログラムを実行する実行部とを具備するプログラムテスト装置により、ハードウェアがエラーの場合のテスト対象プログラムのテストも自動的に容易できる。【選択図】図１
2009176186.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象のプログラムであるテスト対象プログラムを格納しているテスト対象プログラム格納部と、
ハードウェアの動作をシミュレートするプログラムであり、テスト対象プログラムから渡される情報であるプログラム情報と動作パターンとに応じた動作を行うプログラムであるシミュレータプログラムを格納しているシミュレータプログラム格納部と、
前記テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、
前記テスト情報が有する動作パターンを取得し、前記シミュレータプログラムに渡すテスト制御部と、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンとを用いて前記シミュレータプログラムを実行する実行部とを具備するプログラムテスト装置。
【請求項２】
２以上のテスト情報を格納しているテスト情報格納部と、
前記テスト情報格納部から２以上のテスト情報を、順次、読み出し、前記テスト情報受付部に渡す自動テスト部とをさらに具備する請求項１記載のプログラムテスト装置。
【請求項３】
前記テスト情報は、
テスト対象プログラムの正常な動作結果である正解情報をも有し、
前記実行部における前記テスト対象プログラムの動作結果を取得し、当該動作結果と、前記テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力するテスト結果判断部をさらに具備する請求項２記載のプログラムテスト装置。
【請求項４】
前記テスト情報は、
前記シミュレータプログラムが動作に用いるＩＯ値をも有し、
前記テスト制御部は、
前記テスト情報が有する動作パターンおよびＩＯ値を取得し、前記シミュレータプログラムに渡し、
前記実行部は、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンおよびＩＯ値とを用いて前記シミュレータプログラムを実行する請求項１から請求項３いずれか記載のプログラムテスト装置。
【請求項５】
前記テスト制御部は、
前記シミュレータプログラムの動作結果であるＩＯ値を取得し、出力する処理をも行う請求項１から請求項３いずれか記載のプログラムテスト装置。
【請求項６】
前記動作パターンは、
少なくとも正常パターンと異常パターンを有する請求項１から請求項５いずれか記載のプログラムテスト装置。
【請求項７】
テスト対象のプログラムであり、ハードウェアの制御を行うプログラムであるテスト対象プログラムを格納しているテスト対象プログラム格納部と、
ハードウェアのエラーの動作をシミュレートするプログラムであるシミュレータプログラムを格納しているシミュレータプログラム格納部と、
前記テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、
前記テスト情報が有する動作パターンを取得するテスト制御部と、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、前記テスト制御部が取得した動作パターンが正常パターンであれば、前記テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させ、前記テスト制御部が取得した動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いて前記シミュレータプログラムを実行する実行部を具備するプログラムテスト装置。
【請求項８】
２以上のテスト情報を格納しているテスト情報格納部と、
前記テスト情報格納部から２以上のテスト情報を、順次、読み出し、前記テスト情報受付部に渡す自動テスト部とをさらに具備する請求項７記載のプログラムテスト装置。
【請求項９】
前記テスト情報は、
テスト対象プログラムの正常な動作結果である正解情報をも有し、
前記実行部における前記テスト対象プログラムの動作結果を取得し、当該動作結果と、前記テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力するテスト結果判断部をさらに具備する請求項８記載のプログラムテスト装置。
【請求項１０】
コンピュータを、
テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、
前記テスト情報が有する動作パターンを取得し、ハードウェアの動作をシミュレートするシミュレータプログラムに渡すテスト制御部と、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンとを用いて前記シミュレータプログラムを実行する実行部として機能させるためのプログラム。
【請求項１１】
前記テスト情報は、
前記シミュレータプログラムが動作に用いるＩＯ値をも有し、
前記テスト制御部は、
前記テスト情報が有する動作パターンおよびＩＯ値を取得し、前記シミュレータプログラムに渡し、
前記実行部は、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンおよびＩＯ値とを用いて前記シミュレータプログラムを実行するように、コンピュータを機能させるための請求項１０記載のプログラム。
【請求項１２】
前記テスト制御部は、
前記シミュレータプログラムの動作結果であるＩＯ値を取得し、出力する処理をも行うように、コンピュータを機能させるための請求項１０記載のプログラム。
【請求項１３】
コンピュータを、
テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、
前記テスト情報が有する動作パターンを取得するテスト制御部と、
前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、前記テスト制御部が取得した動作パターンが正常パターンであれば、前記テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させ、前記テスト制御部が取得した動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いてシミュレータプログラムを実行する実行部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主として、半導体製造装置等のハードウェアを制御するプログラムをテストするプログラムテスト装置等に関するものである。
【背景技術】
【０００２】
従来のプログラムテスト装置において、自動的にプログラムのテストを繰り返し行えるプログラム開発装置があった（例えば、特許文献１参照）。本装置は、以下の動作を行う、つまり、自動テスト装置にテストを行いたい命令を入力し、自動テスト装置が状態監視装置に、エミュレーション装置が自動テスト装置からの命令を、受信可能かどうかを問合わせる。命令受信可能であれば命令をエミュレーション装置へ送信する。エミュレーション装置は受信した命令でテストプログラムを実行し、実行結果を自動テスト装置に送信する。自動テスト装置は実行結果を保存し、全ての命令について繰り返し行うことでテストプログラムのテストを行う。
【特許文献１】特開２００３−２２１９９号公報（第１頁、第１図等）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のプログラムテスト装置においては、正常応答以外に異常応答や動作不良などのテストを行う際に、通常、シミュレータ側の動作を手作業で変更してテストを実施していた。そのため、異常応答や動作不良の場合のテストに、手作業が介在し、テストが煩雑であり、ミスも生じ得た。
【課題を解決するための手段】
【０００４】
本第一の発明のプログラムテスト装置は、テスト対象のプログラムであるテスト対象プログラムを格納しているテスト対象プログラム格納部と、ハードウェアの動作をシミュレートするプログラムであり、テスト対象プログラムから渡される情報であるプログラム情報と動作パターンとに応じた動作を行うプログラムであるシミュレータプログラムを格納しているシミュレータプログラム格納部と、前記テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得し、前記シミュレータプログラムに渡すテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンとを用いて前記シミュレータプログラムを実行する実行部とを具備するプログラムテスト装置である。
【０００５】
かかる構成により、シミュレータプログラムの動作パターンを自動的に切り替えてテストを行うことができる。そのため、特に、ハードウェアがエラーの場合のテスト対象プログラムのテストも自動的に容易にできる。
【０００６】
また、本第二の発明のプログラムテスト装置は、第一の発明に対して、２以上のテスト情報を格納しているテスト情報格納部と、前記テスト情報格納部から２以上のテスト情報を、順次、読み出し、前記テスト情報受付部に渡す自動テスト部とをさらに具備するプログラムテスト装置である。
【０００７】
かかる構成により、２以上のテスト項目について、自動的にテストできる。
【０００８】
また、本第三の発明のプログラムテスト装置は、第二の発明に対して、前記テスト情報は、テスト対象プログラムの正常な動作結果である正解情報をも有し、前記実行部における前記テスト対象プログラムの動作結果を取得し、当該動作結果と、前記テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力するテスト結果判断部をさらに具備するプログラムテスト装置である。
【０００９】
かかる構成により、テスト結果の正常／異常の自動判断ができる。
【００１０】
また、本第四の発明のプログラムテスト装置は、第一から第三いずれかの発明に対して、前記テスト情報は、前記シミュレータプログラムが動作に用いるＩＯ値をも有し、前記テスト制御部は、前記テスト情報が有する動作パターンおよびＩＯ値を取得し、前記シミュレータプログラムに渡し、前記実行部は、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンおよびＩＯ値とを用いて前記シミュレータプログラムを実行するプログラムテスト装置である。
【００１１】
かかる構成により、シミュレータプログラムの動作パターンを自動的に切り替えて、かつ、シミュレータプログラムが用いるＩＯ値を自動的に変更して、テストを行うことができる。そのため、特に、ハードウェアがエラーの場合のテスト対象プログラムのテストも自動的に容易にできる。
【００１２】
また、本第五の発明のプログラムテスト装置は、第一から第三いずれかの発明に対して、前記テスト制御部は、前記シミュレータプログラムの動作結果であるＩＯ値を取得し、出力する処理をも行うプログラムテスト装置である。
【００１３】
かかる構成により、テスト対象プログラムの動作結果を正確に把握、かつ判断できる。
【００１４】
また、本第六の発明のプログラムテスト装置は、第一から第五いずれかの発明に対して、前記動作パターンは、少なくとも正常パターンと異常パターンを有するプログラムテスト装置である。
【００１５】
かかる構成により、少なくとも正常パターンと異常パターンの両方のテストが自動的にできる。
【００１６】
また、本第七の発明のプログラムテスト装置は、テスト対象のプログラムであり、ハードウェアの制御を行うプログラムであるテスト対象プログラムを格納しているテスト対象プログラム格納部と、ハードウェアのエラーの動作をシミュレートするプログラムであるシミュレータプログラムを格納しているシミュレータプログラム格納部と、前記テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得するテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、前記テスト制御部が取得した動作パターンが正常パターンであれば、前記テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させ、前記テスト制御部が取得した動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いて前記シミュレータプログラムを実行する実行部を具備するプログラムテスト装置である。
【００１７】
かかる構成により、エラー状態を発生させにくいハードウェア上で動作するテスト対象プログラムであっても、正常時、および異常時の両方に対して、テストが行える。
【００１８】
また、本第八の発明のプログラムテスト装置は、第七の発明に対して、２以上のテスト情報を格納しているテスト情報格納部と、前記テスト情報格納部から２以上のテスト情報を、順次、読み出し、前記テスト情報受付部に渡す自動テスト部とをさらに具備するプログラムテスト装置である。
【００１９】
かかる構成により、２以上のテスト項目について、自動的にテストできる。
【００２０】
また、本第九の発明のプログラムテスト装置は、第八の発明に対して、前記テスト情報は、テスト対象プログラムの正常な動作結果である正解情報をも有し、前記実行部における前記テスト対象プログラムの動作結果を取得し、当該動作結果と、前記テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力するテスト結果判断部をさらに具備するプログラムテスト装置である。
【００２１】
かかる構成により、テスト結果の正常／異常の自動判断ができる。
【発明の効果】
【００２２】
本発明によるプログラムテスト装置によれば、テスト対象プログラムについて、ハードウェアがエラーの場合のテストも容易にできる。
【発明を実施するための最良の形態】
【００２３】
以下、プログラムテスト装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
（実施の形態１）
【００２４】
本実施の形態において、ハードウェア上で動作するソフトウェアのテストを行うプログラムテスト装置について説明する。
【００２５】
図１は、本実施の形態におけるプログラムテスト装置のブロック図である。
【００２６】
プログラムテスト装置１は、受付部１１、テスト対象プログラム格納部１２、シミュレータプログラム格納部１３、テスト情報格納部１４、自動テスト部１５、テスト情報受付部１６、テスト制御部１７、実行部１８、テスト結果判断部１９を具備する。
【００２７】
受付部１１は、ユーザからの入力を受け付ける。受付部１１が受け付ける入力は、例えば、テストの開始を指示するテスト開始指示などの各種指示や、テストに必要な情報（動作パターンやＩＯ値などの情報）の入力等である。各種指示などの入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。受付部１１は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
【００２８】
テスト対象プログラム格納部１２は、テスト対象のプログラムであるテスト対象プログラムを格納している。テスト対象プログラムは、通常、ハードウェアの制御プログラムである。また、テスト対象プログラムは、例えば、半導体製造装置やＦＰＤ製造装置などのハードウェアの制御プログラムである。テスト対象プログラム格納部１２は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。テスト対象プログラム格納部１２にテスト対象プログラムが記憶される過程は問わない。例えば、記録媒体を介してテスト対象プログラムがテスト対象プログラム格納部１２で記憶されるようになってもよく、通信回線等を介して送信されたテスト対象プログラムがテスト対象プログラム格納部１２で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたテスト対象プログラムがテスト対象プログラム格納部１２で記憶されるようになってもよい。
【００２９】
シミュレータプログラム格納部１３は、シミュレータプログラムを格納している。シミュレータプログラムは、ハードウェアの動作をシミュレートするプログラムである。シミュレータプログラムは、通常、テスト対象プログラムから渡される情報であるプログラム情報と動作パターンとに応じた動作を行うプログラムである。プログラム情報とは、テスト対象プログラムの制御対象のハードウェアに渡されるデータ（情報）である。動作パターンとは、ハードウェアの動作のパターンであり、少なくとも正常であるパターンを示す正常パターンと異常であるパターンを示す異常パターンを有する。また、異常パターンは、応答しないパターンである非応答パターン、アラームを発生するパターンであるアラームパターン、途中の処理まで正常であり、その後異常になる途中正常パターンなどの２以上のパターンが存在していても良い。また、シミュレータプログラムは、例えば、いわゆるスタブと呼ばれるソフトウェアであり、テストに用いられるソフトウェアである。シミュレータプログラムは、当該シミュレータプログラムの動作結果であるＩＯ値を書き込む処理を行っても良い。シミュレータプログラムは、例えば、同じ関数名またはメソッド名などを有する複数のプログラムを有し得る。複数のプログラムとは、例えば、正常パターンに対応する動作を行うプログラムと、異常パターンに対応する動作を行うプログラムである。ＩＯ値とは、ハードウェアが保持しており、テスト対象のプログラムの動作により、変更されたり、読み出されたりするある領域に記憶されている情報（データ）である。シミュレータプログラム格納部１３は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。シミュレータプログラム格納部１３にシミュレータプログラムが記憶される過程は問わない。例えば、記録媒体を介してシミュレータプログラムがシミュレータプログラム格納部１３で記憶されるようになってもよく、通信回線等を介して送信されたシミュレータプログラムがシミュレータプログラム格納部１３で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたシミュレータプログラムがシミュレータプログラム格納部１３で記憶されるようになってもよい。
【００３０】
テスト情報格納部１４は、２以上のテスト情報を格納している。テスト情報は、一テストの項目に対応する情報である。テスト情報は、通常、入力情報と動作パターンとを有する。入力情報とは、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である。入力情報とは、例えば、プログラムに与える引数である。なお、テスト情報に動作パターンを有しない場合、動作パターンは、デフォルト値（例えば、正常パターン）である。テスト情報は、テスト対象プログラムの正常な動作結果である正解情報をも有しても良い。正解情報は、テスト対象プログラムのリターン値でも良いし、テスト対象プログラムの実行結果であり、ハードウェアの記憶領域に記載されている値（ＩＯ値など）でも良い。テスト情報は、シミュレータプログラムが動作に用いるＩＯ値をも有しても良い。テスト情報格納部１４は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。テスト情報格納部１４にテスト情報が記憶される過程は問わない。例えば、記録媒体を介してテスト情報がテスト情報格納部１４で記憶されるようになってもよく、通信回線等を介して送信されたテスト情報がテスト情報格納部１４で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたテスト情報がテスト情報格納部１４で記憶されるようになってもよい。
【００３１】
自動テスト部１５は、テスト情報格納部１４から２以上のテスト情報を、順次、読み出し、順次、テスト情報をテスト情報受付部１６に渡す。自動テスト部１５は、通常、受付部１１がテスト開始指示を受け付けた場合に、テスト情報格納部１４から２以上のテスト情報を、順次、読み出し、テスト情報受付部１６に渡す。自動テスト部１５は、複数のテスト情報に対応するテスト項目を、繰り返し実行して、自動テストを実現する機能を果たす。自動テスト部１５は、通常、ＭＰＵやメモリ等から実現され得る。自動テスト部１５の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００３２】
テスト情報受付部１６は、テスト情報を受け付ける。テスト情報は、上述したように、通常、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有する。テスト情報受付部１６は、自動テスト部１５からテスト情報を受け付けても良いし、ユーザからの手入力によりテスト情報を受け付けても良い。テスト情報受付部１６は、ＭＰＵやメモリ等から実現され得る。テスト情報受付部１６の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。また、テスト情報受付部１６は、キーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現されても良い。
【００３３】
テスト制御部１７は、テスト情報受付部１６が受け付けたテスト情報が有する動作パターンを取得し、シミュレータプログラムに渡す。なお、テスト制御部１７は、動作パターンがデフォルト値の場合、動作パターンをシミュレータプログラムに渡さなくても良い。また、テスト制御部１７は、テスト情報が有する動作パターンおよびＩＯ値を取得し、シミュレータプログラムに渡しても良い。さらに、テスト制御部１７は、シミュレータプログラムが書き込んだＩＯ値を取得し、出力する処理をも行っても良い。テスト制御部１７は、例えば、動作パターンにより、シミュレータプログラムやシミュレータプログラムが利用するデータを書き換えても良い。かかる書き換え処理も、動作パターンをシミュレータプログラムに渡す処理と同意義である、とする。また、テスト制御部１７は、例えば、ＩＯ値を、予め決められたファイルや変数に書き込んでも良い。かかる処理も、ＩＯ値をシミュレータプログラムに渡す処理である。テスト制御部１７は、通常、ＭＰＵやメモリ等から実現され得る。テスト制御部１７の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００３４】
実行部１８は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、テスト制御部１７がシミュレータプログラムに渡した動作パターンとを用いてシミュレータプログラムを実行する。つまり、例えば、実行部１８によりシミュレータプログラムの実行により、動作パターンに応じて、起動されるシミュレータプログラムのメソッド（または関数など）が異なる。例えば、動作パターンが異なれば、同じメソッド名を有するが異なるメソッドが実行される、ということとなる。
【００３５】
なお、テスト対象プログラムに与える入力情報がＮＵＬＬの場合もあり得る。また、実行部１８は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、テスト制御部１７がシミュレータプログラムに渡した動作パターンおよびＩＯ値とを用いてシミュレータプログラムを実行しても良い。実行部１８は、通常、ＭＰＵやメモリ等から実現され得る。実行部１８の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００３６】
テスト結果判断部１９は、実行部１８におけるテスト対象プログラムの動作結果を取得し、当該動作結果と、テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力する。テスト結果判断部１９は、ＩＯ値を読み出し、予想されるＩＯ値（テスト情報が有する正解情報）と合致するか否かを判断し、当該判断結果を出力しても良い。正解情報とは、テストの結果の情報であり、テスト対象プログラムのリターン値や、テスト対象プログラムの動作の結果であるＩＯ値や、その他の記憶媒体内の情報などである。テスト結果判断部１９は、通常、ＭＰＵやメモリ等から実現され得る。テスト結果判断部１９の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００３７】
次に、プログラムテスト装置の動作について図２のフローチャートを用いて説明する。
【００３８】
（ステップＳ２０１）受付部１１は、テスト開始指示を受け付けたか否かを判断する。テスト開始指示を受け付ければステップＳ２０２に行き、テスト開始指示を受け付けなければステップＳ２０１に戻る。
【００３９】
（ステップＳ２０２）自動テスト部１５は、カウンタｉに１を代入する。
【００４０】
（ステップＳ２０３）自動テスト部１５は、ｉ番目のテスト情報が、テスト情報格納部１４に存在するか否かを判断する。ｉ番目のテスト情報が存在すればステップＳ２０４に行き、ｉ番目のテスト情報が存在しなければ処理を終了する。
【００４１】
（ステップＳ２０４）テスト制御部１７は、ｉ番目のテスト情報が有する動作パターンを取得する。
【００４２】
（ステップＳ２０５）テスト制御部１７は、ステップＳ２０４で取得した動作パターンを、シミュレータプログラムに渡す。なお、ここで、テスト制御部１７は、シミュレータプログラムが利用する動作パターンの格納領域（ファイルやメモリなどの領域）に、ステップＳ２０４で取得した動作パターンを書き込んでも良い。この処理も、動作パターンをシミュレータプログラムに渡す処理である。
【００４３】
（ステップＳ２０６）テスト制御部１７は、ｉ番目のテスト情報が有するＩＯ値を取得する。
【００４４】
（ステップＳ２０７）テスト制御部１７は、ステップＳ２０６で取得したＩＯ値を、シミュレータプログラムに渡す。なお、ここで、テスト制御部１７は、ＩＯ値の格納領域（ファイルやメモリなどの領域）に、ステップＳ２０６で取得したＩＯ値を書き込んでも良い。この処理も、ＩＯ値をシミュレータプログラムに渡す処理である。
【００４５】
（ステップＳ２０８）実行部１８は、ｉ番目のテスト情報が有する入力情報を取得する。
【００４６】
（ステップＳ２０９）実行部１８は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行する。なお、通常、テスト対象プログラムの実行により、テスト対象プログラムとシミュレータプログラムがデータのやり取りを行い、シミュレータプログラムも実行される。シミュレータプログラムの実行時に、シミュレータプログラムは、ステップＳ２０５で渡された動作パターン、ステップＳ２０７で渡されたＩＯ値を用いて、動作する。また、テスト情報が入力情報を有しない場合は、実行部１８は、テスト対象プログラムに入力情報を与えない。
【００４７】
（ステップＳ２１０）テスト制御部１７は、ＩＯ値を読み込む処理を行うか否かを判断する。テスト制御部１７は、例えば、入力情報がＩＯ値の読み込みを指示する命令を含む場合、ＩＯ値を読み込む処理を行うと判断する。ＩＯ値を読み込む処理を行う場合はステップＳ２１１に行き、ＩＯ値を読み込む処理を行わない場合はステップＳ２１２に行く。
【００４８】
（ステップＳ２１１）テスト制御部１７は、ＩＯ値を読み込む。
【００４９】
（ステップＳ２１２）テスト結果判断部１９は、実行部１８におけるテスト対象プログラムの動作結果を取得し、当該動作結果と、テスト情報が有する正解情報を用いて、テストの正常または異常を判断する。
【００５０】
（ステップＳ２１３）テスト結果判断部１９は、ステップＳ２１２における判断結果を出力する。
【００５１】
（ステップＳ２１４）自動テスト部１５は、カウンタｉを１、インクリメントする。ステップＳ２０３にもどる。
【００５２】
なお、図２のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【００５３】
以下、本実施の形態におけるプログラムテスト装置の具体的な動作について、２つの具体例を用いて説明する。
（具体例１）
【００５４】
今、図３に示すテスト情報管理表がテスト情報格納部１４に格納されている。テスト情報管理表は、１以上のテスト情報を管理する表である。テスト情報管理表は、「ＩＤ」と「テスト情報」を有するレコードを１以上保持している。「ＩＤ」は、レコードを識別する属性であり、表管理のために存在する。属性「テスト情報」内のテスト情報は、ここでは、プログラムの形式で記述されている。
【００５５】
テスト情報において、「＃」で開始されている行（図３の（１）など）はコメント行を示す。また、図３の（２）および（３）の行は、シミュレータプログラムが動作に用いるＩＯ値を設定するメソッドである。図３の（２）は、「DO_FullOpen」のＩＯ値を「CONTROL」という定数値に設定することを示している。図３の（３）は、「DO_FullClose」のＩＯ値を「FULL_CLOSE」という定数値に設定することを示している。また、図３の（４）は、テスト対象プログラム格納部１２に格納されているテスト対象プログラムの「InternalFullOpen()」を起動する（テストする）ことを示している。ここで、「InternalFullOpen()」は、テスト対象プログラムに与える入力情報の例である、と言える。また、図３の（４）における「Common_OK」は、テスト情報が有する正解情報の例である。つまり、「InternalFullOpen()」の実行の結果である戻り値が「Common_OK」であれば、この時点でのテスト結果が正常である、と判断される。なお、「Common_OK」に対応する値（例えば、「０」や「１」など）が予め決められている。
【００５６】
また、図３の（５）および（６）は、シミュレータプログラムの動作結果であるＩＯ値を取得し、想定される結果（正解情報）と一致するか否かを判断するための記述である。図３の（５）において、「DO_FullOpen」のＩＯ値を取得し、「FULL_OPEN」という定数値になっているか否かを判断することを示す。なお、「FULL_OPEN」は、テスト情報が有する正解情報である。また、図３の（６）において、「DO_FullClose」のＩＯ値を取得し、「CONTROL」という定数値になっているか否かを判断することを示す。なお、「CONTROL」は、テスト情報が有する正解情報である。また、図３のテスト情報は、動作パターンを有さない。つまり、動作パターンは、デフォルトの正常パターン（正常モード）である。
【００５７】
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部１１は、テスト開始指示を受け付ける。
【００５８】
次に、自動テスト部１５は、図３のテスト情報管理表から、１番目のテスト情報（「ＩＤ＝１」のレコード）を読み出す。
【００５９】
そして、テスト制御部１７は、図３の「ＩＤ＝１」のレコードを順に解釈し、実行する。つまり、テスト制御部１７は、１番目のテスト情報が有するコメント行を無視する（図３の（１））。次に、テスト制御部１７は、１番目のテスト情報が有する「DO_FullOpen」のＩＯ値「CONTROL」を取得し、メモリ上に配置する。そして、テスト制御部１７は、取得した「DO_FullOpen」のＩＯ値「CONTROL」を、シミュレータプログラムが使用できるようにするために、「DO_FullOpen」の領域に値「CONTROL」を書き込む（図３の（２））。また、テスト制御部１７は、１番目のテスト情報が有する「DO_FullClose」のＩＯ値「FULL_CLOSE」を取得し、メモリ上に配置する。そして、テスト制御部１７は、取得した「DO_FullClose」のＩＯ値「FULL_CLOSE」を、シミュレータプログラムが使用できるようにするために、「DO_FullClose」の領域に値「FULL_CLOSE」を書き込む（図３の（３））。
【００６０】
次に、実行部１８は、１番目のテスト情報が有する入力情報「InternalFullOpen()」を取得する。そして、実行部１８は、テスト対象プログラムを起動し、「InternalFullOpen()」を実行する。そして、「InternalFullOpen()」の実行により、通常、ＩＯ値が適切に書き換えられる（図３の（４））。
【００６１】
次に、テスト結果判断部１９は、実行部１８におけるテスト対象プログラムの動作結果（「InternalFullOpen()」の実行結果である戻り値）を取得する。そして、この戻り値とテスト情報が有する正解情報「Common_OK」を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。ここでは、例えば、「InternalFullOpen()」の実行結果である戻り値が「Common_OK」である、とする。そして、テスト結果判断部１９は、戻り値と正解情報「Common_OK」が一致するので、この段階でのテストは正常である、と判断する（図３の（４））。
【００６２】
次に、テスト制御部１７は、図３の（５）および（６）の解釈実行により、「DO_FullOpen」のＩＯ値を読み込む。そして、テスト結果判断部１９は、テスト対象プログラムの動作結果である「DO_FullOpen」のＩＯ値と、テスト情報が有する正解情報「Full_Open」と一致するか否かを判断する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。次に、同様に、テスト結果判断部１９は、テスト対象プログラムの動作結果である「DO_FullClose」のＩＯ値を取得し、テスト情報が有する正解情報「FULL_CLOSE」と一致するか否かを判断する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部１９は、判断結果（例えば、「正常」）を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部１９は、テスト情報の識別番号（ＩＤ）と、判断結果を対応付けて出力する。
【００６３】
以上の処理により、「ＩＤ＝１」のテスト情報の処理が終了する。なお、上記のテスト結果判断部１９における正常／異常の判断過程において、一致しない等の判断の場合、テスト結果判断部１９は、例えば、「異常」を示す判断結果を出力する。
【００６４】
次に、自動テスト部１５は、図３のテスト情報管理表から、２番目以降のテスト情報（「ＩＤ＝２」のレコード以降のレコード）を、順に、読み出し、１番目のテスト情報と同様に、順に解釈実行し、判断結果を出力する。
【００６５】
なお、図３の（１）から（６）等のテスト情報を解釈実行する処理は公知技術であるので、詳細な説明を省略する。
（具体例２）
【００６６】
今、図４に示すテスト情報管理表がテスト情報格納部１４に格納されている。図４において、「ＩＤ＝１」のテスト情報は、ＤＲＰ（ドライ真空ポンプ）の正常動作のテストを行うための情報である。また、「ＩＤ＝２」のテスト情報は、ＤＲＰのタイムアウト（異常動作）のテストを行うための情報である。また、図４において、「TagRawWrite」は、ＩＯ値を設定する関数（メソッド）を示す。つまり、（１）は、ＩＯ値「DO_RUN」に値「STOP」を設定することを示す。（２）は、ＩＯ値「DI_RUN」に値「STOP」を設定することを示す。（３）は、ＩＯ値「DI_ALARM」に値「NORMAL」を設定することを示す。また、「TagRead」は、ＩＯ値を取得し、正常か否かを確認する関数を示す。つまり、（４）は、ＩＯ値「DO_RUN」に値「STOP」が設定されていることを確認することを示す。（５）は、ＩＯ値「DI_RUN」に値「STOP」が設定されていることを確認することを示す。（６）は、ＩＯ値「DI_ALARM」に値「NORMAL」が設定されていることを確認することを示す。「SetPatarn」は、動作パターンを設定する関数を示す。つまり、（７）は、DO_RUNの動作パターンを「NORMAL」に設定することを示す。（９）は、ＩＯ値「DI_RUN」に値「RUN」が設定されていることを確認することを示す。
【００６７】
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部１１は、テスト開始指示を受け付ける。
【００６８】
次に、自動テスト部１５は、図４のテスト情報管理表から、１番目のテスト情報（「ＩＤ＝１」のレコード）を読み出す。
【００６９】
そして、テスト制御部１７は、図４の「ＩＤ＝１」のレコード内の情報（関数）を順に解釈し、実行する。つまり、図４（１）から、テスト制御部１７は、１番目のテスト情報が有する「DO_RUN」のＩＯ値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部１７は、取得した「DO_RUN」のＩＯ値「STOP」を、シミュレータプログラムが使用できるようにするために、「DO_RUN」の領域に書き込む。また、図４（２）から、テスト制御部１７は、１番目のテスト情報が有する「DI_RUN」のＩＯ値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部１７は、取得した「DI_RUN」のＩＯ値「STOP」を、シミュレータプログラムが使用できるようにするために、「DI_RUN」の領域に書き込む。また、図４（３）から、テスト制御部１７は、１番目のテスト情報が有する「DI_ARARM」のＩＯ値「NORMAL」を取得し、メモリ上に配置する。そして、テスト制御部１７は、取得した「DI_ARARM」のＩＯ値「NORMAL」を、シミュレータプログラムが使用できるようにするために、「DI_ARARM」の領域に値「NORMAL」を書き込む。
【００７０】
次に、図４（４）から、テスト制御部１７は、「DO_RUN」のＩＯ値を取得する。そして、テスト結果判断部１９は、「DO_RUN」のＩＯ値が「STOP」であるか否かを判断する。また、図４（５）から、テスト制御部１７は、「DI_RUN」のＩＯ値を取得する。そして、テスト結果判断部１９は、「DI_RUN」のＩＯ値が「STOP」であるか否かを判断する。さらに、図４（６）から、テスト制御部１７は、「DI_ARARM」のＩＯ値を取得する。そして、テスト結果判断部１９は、「DI_ARARM」のＩＯ値が「NORMAL」であるか否かを判断する。
【００７１】
次に、図４（７）から、テスト制御部１７は、１番目のテスト情報が有する動作パターン「DO_RUN，NORMAL」を取得する。なお、動作パターン「DO_RUN，NORMAL」は、「DO_RUN」の動作が「NORMAL」である、という動作パターンである。そして、テスト制御部１７は、「DO_RUN，NORMAL」をシミュレータプログラムに渡す。つまり、「DO_RUN」の動作が「NORMAL」となるように設定される。
【００７２】
次に、図４（８）から、実行部１８は、１番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部１８は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、「DRP.Run()」の実行により、ＤＲＰが動作し、通常、ＩＯ値が適切に書き換えられる。
【００７３】
次に、テスト結果判断部１９は、実行部１８におけるテスト対象プログラムの動作結果（「DRP.Run()」の実行結果である戻り値）を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
【００７４】
次に、図４（９）から、テスト制御部１７は、１番目のテスト情報が有する入力情報「TagRead(DI_RUN,RUN)」を取得する。そして、テスト制御部１７は、「TagRead(DI_RUN,RUN)」の解釈実行により、「DI_RUN」のＩＯ値を読み込む。そして、テスト結果判断部１９は、テスト対象プログラムの動作結果である「DI_RUN」のＩＯ値と、テスト情報が有する正解情報「RUN」と一致するか否かを判断する。そして、テスト結果判断部１９は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部１９は、判断結果（例えば、「正常」）を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部１９は、テスト情報の識別番号（ＩＤ）と、判断結果を対応付けて出力する。
【００７５】
以上の処理により、「ＩＤ＝１」のテスト情報の処理が終了する。なお、上記のテスト結果判断部１９における正常／異常の判断過程において、一致しない等の判断の場合、テスト結果判断部１９は、例えば、「異常」を示す判断結果を出力する。
【００７６】
次に、自動テスト部１５は、図４のテスト情報管理表から、２番目のテスト情報（「ＩＤ＝２」のレコード）を読み出す。
【００７７】
そして、テスト制御部１７は、図４の「ＩＤ＝２」のレコード内の関数を順に解釈し、実行する。つまり、テスト制御部１７は、図４の「ＩＤ＝２」のレコード中の（１０）から（１５）を、（１）から（６）と同様に処理する。
【００７８】
次に、テスト制御部１７は、２番目のテスト情報の（１６）から、動作パターン「DO_RUN，TIMEOUT」を取得する。なお、動作パターン「DO_RUN，TIMEOUT」は、「DO_RUN」の動作が「TIMEOUT」である、という動作パターンである。そして、テスト制御部１７は、「DO_RUN，TIMEOUT」をシミュレータプログラムに渡す。つまり、「DO_RUN」の動作が「TIMEOUT」となるように設定される。
【００７９】
次に、実行部１８は、２番目のテスト情報の（１７）から、入力情報「DRP.Run()」を取得する。そして、実行部１８は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、「DRP.Run()」の実行により、ＤＲＰが動作し、通常、ＩＯ値が適切に書き換えられる。
【００８０】
次に、テスト結果判断部１９は、実行部１８におけるテスト対象プログラムの動作結果（「DRP.Run()」の実行結果である戻り値）を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
【００８１】
次に、テスト制御部１７は、２番目のテスト情報が有する入力情報「TagRead(DI_RUN,STOP)」を取得する。そして、テスト制御部１７は、「TagRead(DI_RUN,STOP)」の解釈実行により、「DI_RUN」のＩＯ値を読み込む。そして、テスト結果判断部１９は、テスト対象プログラムの動作結果である「DI_RUN」のＩＯ値と、テスト情報が有する正解情報「STOP」と一致するか否かを判断する。そして、テスト制御部１７は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部１９は、判断結果（例えば、「正常」）を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部１９は、テスト情報の識別番号（ＩＤ）と、判断結果を対応付けて出力する。
【００８２】
以上の処理により、「ＩＤ＝２」のテスト情報の処理が終了する。なお、上記のテスト結果判断部１９における正常／異常の判断過程において、一致しない等の判断の場合、テスト結果判断部１９は、例えば、「異常」を示す判断結果を出力する。
【００８３】
次に、自動テスト部１５は、図４のテスト情報管理表から、３番目以降のテスト情報（「ＩＤ＝３」のレコード以降のレコード）を、順に、読み出し、１番目、２番目のテスト情報と同様に、順に解釈実行し、判断結果を出力する。
【００８４】
次に、本プログラムテスト装置の概念について説明する。従来のプログラムテスト装置の概念図の例を図５に示す。つまり、従来のプログラムテスト装置は、自動テストプログラム５１とテスト対象プログラム５２とシミュレータプログラム５３を有する。そして、自動テストプログラム５１は、自動的に１以上のテスト項目を実行するものである。テスト対象プログラム５２は、テスト対象プログラム格納部１２のテスト対象プログラムと同様であり、テストの対象となるプログラムである。シミュレータプログラム５３は、シミュレータプログラム格納部１３のシミュレータプログラムと同様であり、機器の応答をシミュレートするプログラムである。シミュレータプログラムは、一の関数（スタブ）に対して、正常パターンの関数（スタブ）と、異常パターンの関数（スタブ）を有している。なお、図５における「通信」とは、データ通信であっても、データの受け渡しであっても、関数の呼び出し等であっても良い。つまり、「通信」とは、テスト対象プログラム５２とシミュレータプログラム５３が協調的に動作をすれば良い。
【００８５】
このようなプログラムテスト装置において、テスト対象プログラムのテストとしては正常に動作するだけでなく、機器からアラームを発生させたり、起動タイムアウトが生じたりするような異常ケースもテストする必要がある。つまり、プログラムテスト装置において、正常パターンと異常パターン、異常パターンの中でも、応答しないパターンである非応答パターン、アラームを発生するパターンであるアラームパターン、途中の処理まで正常であり、その後異常になる途中正常パターンなどの、２以上の動作パターンについてテストをする必要がある。しかし、従来のプログラムテスト装置では、予めシミュレータプログラム側で動作パターンを設定しておき、テスト対象プログラムをテストすることとなる。つまり、複数の動作パターンのテストを行う場合には、手作業により、複数の動作パターンの書き換えを行い、かつ、動作させる関数を切り替える等しながらテストを進める、ということが行われており、複数の動作パターンを纏めて自動的にテストを行う事ができなかった。
【００８６】
一方、上記実施の形態で説明したプログラムテスト装置の概念図は、図６である。本プログラムテスト装置は、自動テストプログラム６１とテスト対象プログラム６２とシミュレータプログラム６３と自動制御用プログラム６４を有する。自動制御用プログラム６４は、主として、上述したテスト制御部１７に該当する。つまり、自動制御用プログラム６４は、シミュレータプログラム６３に対し、ＮＵｎｉｔなどの自動テストプログラム６１から動作パターンの切り替えを行うインターフェイスを提供することにより自動的に複数の動作パターンを連続してテストが行える。また、本プログラムテスト装置では、ＩＯの状態（ＩＯ値）も自動制御用プログラム６４から書き換える機能も提供し、機器の異常動作などもテスト対象プログラム６２側からシミュレートすることが可能になる。本プログラムテスト装置では、上記の構成により、正常ケース、異常ケースのテストを一つのテストプログラムからテストができるようになる。また、ＩＯの状態（ＩＯ値）を書き換え、読み取り可能にする事で、制御指示の実行結果だけでなく、実際にシミュレータプログラム？３側で値が変化した事を確認できるため、テスト対象プログラム？２の入力部（入力処理）と出力部（出力処理）のテストが可能となる。なお、ＮＵｎｉｔについては、http://www.divakk.co.jp/aoyagi/csharp_tips_nunit.html」等に説明されている。
【００８７】
以上、本実施の形態によれば、テスト対象プログラムについて、ハードウェアがエラーの場合のテスト対象プログラムのテストも容易にできる。さらに具体的には、自動的に複数の動作パターンを連続してテストが行える。また、本実施の形態によれば、ＩＯの状態（ＩＯ値）も自動制御用プログラム６４から書き換える機能も提供し、機器の異常動作なども、テスト対象プログラム６２側から精度の高くシミュレートすることが可能になる。さらに、本実施の形態によれば、ＩＯ値を読み取り可能にする事で、制御指示の実行結果だけでなく、実際にシミュレータプログラム側で値が変化した事を確認できるため、テスト対象プログラムの入力部と出力部のテストが可能となる。
【００８８】
なお、本実施の形態において、テスト情報の内容は問わないことは言うまでもない。
【００８９】
さらに、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをＣＤ−ＲＯＭなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態におけるプログラムテスト装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得し、ハードウェアの動作をシミュレートするシミュレータプログラムに渡すテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンとを用いて前記シミュレータプログラムを実行する実行部として機能させるためのプログラム、である。
【００９０】
また、上記プログラムにおいて、前記テスト情報は、前記シミュレータプログラムが動作に用いるＩＯ値をも有し、前記テスト制御部は、前記テスト情報が有する動作パターンおよびＩＯ値を取得し、前記シミュレータプログラムに渡し、前記実行部は、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンおよびＩＯ値とを用いて前記シミュレータプログラムを実行するように、コンピュータを機能させるプログラムであることは好適である。
【００９１】
また、上記プログラムにおいて、前記テスト制御部を、前記シミュレータプログラムの動作結果であるＩＯ値を取得し、出力する処理をも行うように、コンピュータを機能させるプログラムであることは好適である。
（実施の形態２）
【００９２】
本実施の形態において、正常系のテスト情報をハードウェアに与え、異常系のテスト情報をシミュレータプログラムに与えるプログラムテスト装置について説明する。本実施の形態におけるプログラムテスト装置は、正常パターンの場合は、ハードウェアを用いて、さらに精度高くテストを行い、異常パターンの場合は、シミュレータプログラムを用いてテストを行う、というものである。かかる処理により、ハードウェアでその状態（通常、異常パターン）を作り出すことが難しいテストケースのみをソフトウェアで行える。
【００９３】
図７は、本実施の形態におけるプログラムテスト装置２のブロック図である。プログラムテスト装置２は、受付部１１、テスト対象プログラム格納部１２、シミュレータプログラム格納部２３、テスト情報格納部１４、自動テスト部２５、テスト情報受付部１６、テスト制御部２７、実行部２８、テスト結果判断部２９を具備する。
【００９４】
シミュレータプログラム格納部２３は、ハードウェアのエラーの動作をシミュレートするプログラムであるシミュレータプログラムを格納している。シミュレータプログラムとは、通常、テスト対象プログラムから渡されるプログラム情報に応じた動作を行う。ただし、エラーコードを返すだけ、などの画一的な処理でも良い。シミュレータプログラム格納部２３は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。シミュレータプログラム格納部２３にシミュレータプログラムが記憶される過程は問わない。例えば、記録媒体を介してシミュレータプログラムがシミュレータプログラム格納部２３で記憶されるようになってもよく、通信回線等を介して送信されたシミュレータプログラムがシミュレータプログラム格納部２３で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたシミュレータプログラムがシミュレータプログラム格納部２３で記憶されるようになってもよい。
【００９５】
テスト制御部２７は、テスト情報受付部１６が受け付けたテスト情報が有する動作パターンを取得する。テスト制御部２７は、通常、ＭＰＵやメモリ等から実現され得る。テスト制御部２７の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００９６】
実行部２８は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行する。また、実行部２８は、テスト制御部２７が取得した動作パターンが正常パターンであるか否かを判断する。そして、動作パターンが正常パターンであれば、テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させる。また、実行部２８は、動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いてシミュレータプログラムを実行する。正常パターンでない場合とは、異常パターンである場合、および異常パターンが細分化されたパターンである、非応答パターン、アラームパターン、途中正常パターンなどの場合である。なお、プログラム情報は、テスト対象プログラムからハードウェアに渡される情報である、とも言える。実行部２８は、通常、ＭＰＵやメモリ等から実現され得る。実行部２８の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００９７】
次に、プログラムテスト装置の動作について図８のフローチャートを用いて説明する。図８のフローチャートにおいて、図２のフローチャートと重複するステップについて、説明を省略する。
【００９８】
（ステップＳ９０１）実行部２８は、テストを実行する。テスト実行処理について、図８のフローチャートを用いて、詳細に説明する。
【００９９】
なお、図８のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【０１００】
次に、テスト実行処理について、図９のフローチャートを用いて説明する。図９のフローチャートにおいて、図２のフローチャートと重複するステップについて、説明を省略する。
【０１０１】
（ステップＳ９０１）テスト制御部２７は、ステップＳ２０４で取得した動作パターンが正常パターンか否かを判断する。正常パターンであればステップＳ９０２に行き、正常パターンでなければステップＳ２１７に行く。
【０１０２】
（ステップＳ９０２）テスト制御部２７は、ステップＳ２０６で取得されたＩＯ値を、ハードウェアのＩＯ値として、ハードウェアに書き込む。ハードウェアに書き込む処理は、ハードウェアに渡す処理でも良い。
【０１０３】
（ステップＳ９０３）実行部２８は、テスト対象プログラムを実行する。
【０１０４】
（ステップＳ９０４）テスト制御部２７は、ステップＳ９０３における実行結果であるプログラム情報を取得する。
【０１０５】
（ステップＳ９０５）テスト制御部２７は、ステップＳ２０４で取得した動作パターンが正常パターンか否かを判断する。正常パターンであればステップＳ９０６に行き、正常パターンでなければステップＳ２０７に行く。
【０１０６】
（ステップＳ９０６）実行部２８は、ステップＳ９０４で取得したプログラム情報をハードウェアに渡し、ハードウェアを動作させる。
【０１０７】
（ステップＳ９０７）実行部２８は、ステップＳ９０４で取得したプログラム情報を用いてシミュレータプログラムを実行する。
【０１０８】
（ステップＳ９０８）テスト制御部２７は、ステップＳ９０６または、ステップＳ９０７における実行結果を受け付けたか否かを判断する。実行結果を受け付ければステップＳ９０９に良き、実行結果を受け付けなければステップＳ９０８に戻る。
【０１０９】
（ステップＳ９０９）テスト制御部２７は、ｉ番目のテスト情報のテストが終了したか否かを判断する。テストが終了した、との判断の場合は、ステップＳ９１０に行き、テストが終了していない、との判断の場合は、ステップＳ９０３に戻る。
【０１１０】
（ステップＳ９１０）テスト結果判断部２９は、ハードウェアから、または、シミュレータプログラムが書き込んだ情報から、ＩＯ値を取得する。ステップＳ２１２に行く。
【０１１１】
なお、図９のフローチャートにおける処理の流れは一例であることは言うまでもない。
【０１１２】
以下、本実施の形態におけるプログラムテスト装置の具体的な動作について説明する。
【０１１３】
今、図４に示すテスト情報管理表がテスト情報格納部１４に格納されている、とする。
【０１１４】
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部１１は、テスト開始指示を受け付ける。
【０１１５】
次に、自動テスト部２５は、図４のテスト情報管理表から、１番目のテスト情報（「ＩＤ＝１」のレコード）を読み出す。
【０１１６】
そして、テスト制御部２７は、図４の「ＩＤ＝１」のレコード内の関数を順に解釈し、実行する。つまり、テスト制御部２７は、１番目のテスト情報が有する「DO_RUN」のＩＯ値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部２７は、取得した「DO_RUN」のＩＯ値「STOP」をハードウェアに渡し、ハードウェアは「DO_RUN」の領域にＩＯ値「STOP」を書き込む。また、テスト制御部２７は、１番目のテスト情報が有する「DI_RUN」のＩＯ値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部２７は、取得した「DI_RUN」のＩＯ値「STOP」をハードウェアに渡し、ハードウェアは「DI_RUN」の領域にＩＯ値「STOP」を書き込む。また、テスト制御部２７は、１番目のテスト情報が有する「DI_ARARM」のＩＯ値「NORMAL」を取得し、メモリ上に配置する。そして、テスト制御部２７は、取得した「DI_ARARM」のＩＯ値「NORMAL」をハードウェアに渡し、ハードウェアは「DI_ARARM」の領域にＩＯ値「NORMAL」を書き込む。
【０１１７】
次に、テスト制御部２７は、「DO_RUN」のＩＯ値をハードウェアから読み出す。そして、テスト結果判断部２９は、「DO_RUN」のＩＯ値が「STOP」であるか否かを判断する。また、テスト制御部２７は、「DI_RUN」のＩＯ値をハードウェアから読み出す。そして、テスト結果判断部２９は、「DI_RUN」のＩＯ値が「STOP」であるか否かを判断する。さらに、テスト制御部２７は、「DI_ARARM」のＩＯ値をハードウェアから読み出す。そして、テスト結果判断部２９は、「DI_ARARM」のＩＯ値が「NORMAL」であるか否かを判断する。
【０１１８】
次に、テスト制御部２７は、１番目のテスト情報が有する動作パターン「DO_RUN，NORMAL」を取得する。なお、動作パターン「DO_RUN，NORMAL」は、「DO_RUN」の動作が「NORMAL」である、という動作パターンである。
【０１１９】
次に、実行部２８は、１番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部２８は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、実行部２８は、「DRP.Run()」の実行結果を取得する。
【０１２０】
次に、実行部２８は、テスト制御部２７が取得した動作パターン「DO_RUN，NORMAL」から、動作パターンが正常パターンであることを認識する。なお、実行部２８は、「NORMAL」と「正常パターン」を示す情報を対に、予め保持している。
【０１２１】
そして、実行部２８は、テスト対象プログラムの実行結果（「DRP.Run()」の実行結果）であるプログラム情報をハードウェアに渡し、ハードウェアを動作させる。
【０１２２】
次に、実行部２８は、ハードウェアの実行結果を得る。なお、「DRP.Run()」の実行により、通常、ハードウェア内のＩＯ値が適切に書き換えられる。そして、実行部２８は、ハードウェアの実行結果をテスト対象プログラムに渡す。
【０１２３】
次に、テスト結果判断部２９は、実行部２８におけるテスト対象プログラムの動作結果（「DRP.Run()」の実行結果である戻り値）を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
【０１２４】
次に、テスト制御部２７は、１番目のテスト情報が有する入力情報「TagRead(DI_RUN,RUN)」を取得する。そして、テスト制御部２７は、「TagRead(DI_RUN,RUN)」の解釈実行により、「DI_RUN」のＩＯ値を、ハードウェアから読み込む。そして、テスト結果判断部２９は、テスト対象プログラムの動作結果である「DI_RUN」のＩＯ値と、テスト情報が有する正解情報「RUN」と一致するか否かを判断する。そして、テスト結果判断部２９は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部２９は、判断結果（例えば、「正常」）を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部２９は、テスト情報の識別番号（ＩＤ）と、判断結果を対応付けて出力する。
【０１２５】
以上の処理により、「ＩＤ＝１」のテスト情報の処理が終了する。なお、上記のテスト結果判断部２９における正常／異常の判断過程において、一致しない等の判断の場合、テスト結果判断部２９は、例えば、「異常」を示す判断結果を出力する。
【０１２６】
次に、自動テスト部２５は、図４のテスト情報管理表から、２番目のテスト情報（「ＩＤ＝２」のレコード）を読み出す。
【０１２７】
そして、テスト制御部２７は、図４の「ＩＤ＝２」のレコードを順に解釈し、実行する。つまり、テスト制御部２７は、図４の「ＩＤ＝２」のレコード中の（１０）から（１５）を、（１）から（６）と同様に処理する。（１）から（６）の処理は、本実施の形態において、上記した処理である。
【０１２８】
次に、テスト制御部２７は、２番目のテスト情報の（１６）から、動作パターン「DO_RUN，TIMEOUT」を取得する。
【０１２９】
次に、実行部２８は、１番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部２８は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、実行部２８は、「DRP.Run()」の実行結果を取得する。
【０１３０】
次に、実行部２８は、テスト制御部２７が取得した動作パターン「DO_RUN，TIMEOUT」から動作パターンが正常パターンでない、と判断する。なお、実行部２８は、正常パターンでない１以上の動作パターンの情報を、予め保持していており、テスト制御部２７が取得した動作パターンが、保持している正常パターンでない動作パターンのいずれかの情報に合致すれば、テスト制御部２７が取得した動作パターンが正常パターンでない動作パターンであると判断しても良い。また、実行部２８は、正常パターンの動作パターンの情報を、予め保持していており、テスト制御部２７が取得した動作パターンが、保持している正常パターンの情報に合致しなければ、テスト制御部２７が取得した動作パターンが正常パターンでない動作パターンであると判断しても良い。
【０１３１】
そして、実行部２８は、テスト対象プログラムの実行結果（「DRP.Run()」の実行結果）であるプログラム情報を用いてシミュレータプログラムを実行する。このシミュレータプログラムは、異常パターンの場合のシミュレータプログラム（スタブなど）である。そして、実行部２８は、シミュレータプログラムの実行結果をテスト対象プログラムに渡す。
【０１３２】
次に、テスト結果判断部２９は、実行部２８におけるテスト対象プログラムの動作結果（「DRP.Run()」の実行結果である戻り値）を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
【０１３３】
次に、テスト制御部２７は、１番目のテスト情報が有する入力情報「TagRead(DI_RUN,STOP)」を取得する。そして、テスト制御部２７は、「TagRead(DI_RUN,STOP)」の解釈実行により、「DI_RUN」のＩＯ値を、ハードウェアから読み込む。そして、テスト結果判断部２９は、テスト対象プログラムの動作結果である「DI_RUN」のＩＯ値と、テスト情報が有する正解情報「STOP」と一致するか否かを判断する。そして、テスト結果判断部２９は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部２９は、判断結果（例えば、「正常」）を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部２９は、テスト情報の識別番号（ＩＤ）と、判断結果を対応付けて出力する。
【０１３４】
以上の処理により、「ＩＤ＝２」のテスト情報の処理が終了する。なお、上記のテスト結果判断部２９における正常／異常の判断過程において、一致しない等の判断の場合、テスト結果判断部２９は、例えば、「異常」を示す判断結果を出力する。
【０１３５】
以上、本実施の形態によれば、正常系のテスト情報をハードウェアに与え、異常系のテスト情報をシミュレータプログラムに与えるプログラムテスト装置を提供できる。かかるプログラムテスト装置により、正常パターンの場合は、ハードウェアを用いて、さらに精度高くテストを行い、異常パターンの場合は、シミュレータプログラムを用いてテストを行うことができる。かかる処理により、ハードウェアでその状態（通常、異常パターン）を作り出すことが難しいテストケースをソフトウェアで擬似的に行え、かつ、容易に状態（通常、正常パターン）を作り出すことができるテストケースについて、実際に運用されるハードウェアを用いて精度高くテストを行える。
【０１３６】
なお、本実施の形態の具体例において、実行部２８とハードウェアとの情報のやり取りは一度だけであったが、両者間で、連続したデータのやり取りがあっても良いことは言うまでもない。また、同様に、実行部２８とシミュレータプログラムとの情報のやり取りは一度だけであったが、両者間で、連続したデータのやり取りがあっても良いことは言うまでもない。
【０１３７】
さらに、本実施の形態におけるプログラムテスト装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得するテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、前記テスト制御部が取得した動作パターンが正常パターンであれば、前記テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させ、前記テスト制御部が取得した動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いてシミュレータプログラムを実行する実行部として機能させるためのプログラム、である。
【０１３８】
また、図１０は、本明細書で述べたプログラムを実行して、上述した実施の形態のプログラムテスト装置を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図１０は、このコンピュータシステム３４０の概観図であり、図１１は、コンピュータシステム３４０のブロック図である。
【０１３９】
図１０において、コンピュータシステム３４０は、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）ドライブ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ドライブを含むコンピュータ３４１と、キーボード３４２と、マウス３４３と、モニタ３４４とを含む。
【０１４０】
図１１において、コンピュータ３４１は、ＦＤドライブ３４１１、ＣＤ−ＲＯＭドライブ３４１２に加えて、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３４１３と、ＣＰＵ３４１３、ＣＤ−ＲＯＭドライブ３４１２及びＦＤドライブ３４１１に接続されたバス３４１４と、ブートアッププログラム等のプログラムを記憶するためのＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）３４１５と、ＣＰＵ３４１３に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３４１６と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク３４１７とを含む。ここでは、図示しないが、コンピュータ３４１は、さらに、ＬＡＮへの接続を提供するネットワークカードを含んでも良い。
【０１４１】
コンピュータシステム３４０に、上述した実施の形態のプログラムテスト装置の機能を実行させるプログラムは、ＣＤ−ＲＯＭ３５０１、またはＦＤ３５０２に記憶されて、ＣＤ−ＲＯＭドライブ３４１２またはＦＤドライブ３４１１に挿入され、さらにハードディスク３４１７に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ３４１に送信され、ハードディスク３４１７に記憶されても良い。プログラムは実行の際にＲＡＭ３４１６にロードされる。プログラムは、ＣＤ−ＲＯＭ３５０１、ＦＤ３５０２またはネットワークから直接、ロードされても良い。
【０１４２】
プログラムは、コンピュータ３４１に、上述した実施の形態のプログラムテスト装置の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能（モジュール）を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム３４０がどのように動作するかは周知であり、詳細な説明は省略する。
【０１４３】
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【０１４４】
また、上記各実施の形態において、各処理（各機能）は、単一の装置（システム）によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
【０１４５】
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０１４６】
以上のように、本発明にかかるプログラムテスト装置は、ハードウェアがエラーの場合のテスト対象プログラムのテストも自動的に容易にできる、という効果を有し、プログラムテスト装置等として有用である。
【図面の簡単な説明】
【０１４７】
【図１】実施の形態１におけるプログラムテスト装置のブロック図
【図２】同プログラムテスト装置の動作について説明するフローチャート
【図３】同テスト情報管理表を示す図
【図４】同テスト情報管理表を示す図
【図５】同従来のプログラムテスト装置の概念図
【図６】同実施の形態で説明したプログラムテスト装置の概念図
【図７】実施の形態２におけるプログラムテスト装置のブロック図
【図８】同プログラムテスト装置の動作について説明するフローチャート
【図９】同テスト実行処理の動作について説明するフローチャート
【図１０】同コンピュータシステムの概観図
【図１１】同コンピュータシステムのブロック図
【符号の説明】
【０１４８】
２  プログラムテスト装置
１１  受付部
１２  テスト対象プログラム格納部
１３、２３  シミュレータプログラム格納部
１４  テスト情報格納部
１５、２５  自動テスト部
１６  テスト情報受付部
１７、２７  テスト制御部
１８、２８  実行部
１９、２９  テスト結果判断部
【図１】
2009176186.tif 000003
【図２】
2009176186.tif 000004
【図３】
2009176186.tif 000005
【図４】
2009176186.tif 000006
【図５】
2009176186.tif 000007
【図６】
2009176186.tif 000008
【図７】
2009176186.tif 000009
【図８】
2009176186.tif 000010
【図９】
2009176186.tif 000011
【図１０】
2009176186.tif 000012
【図１１】
2009176186.tif 000013