以下、プログラムテスト装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態1)
本実施の形態において、ハードウェア上で動作するソフトウェアのテストを行うプログラムテスト装置について説明する。
図1は、本実施の形態におけるプログラムテスト装置のブロック図である。
プログラムテスト装置1は、受付部11、テスト対象プログラム格納部12、シミュレータプログラム格納部13、テスト情報格納部14、自動テスト部15、テスト情報受付部16、テスト制御部17、実行部18、テスト結果判断部19を具備する。
受付部11は、ユーザからの入力を受け付ける。受付部11が受け付ける入力は、例えば、テストの開始を指示するテスト開始指示などの各種指示や、テストに必要な情報(動作パターンやIO値などの情報)の入力等である。各種指示などの入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。受付部11は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
テスト対象プログラム格納部12は、テスト対象のプログラムであるテスト対象プログラムを格納している。テスト対象プログラムは、通常、ハードウェアの制御プログラムである。また、テスト対象プログラムは、例えば、半導体製造装置やFPD製造装置などのハードウェアの制御プログラムである。テスト対象プログラム格納部12は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。テスト対象プログラム格納部12にテスト対象プログラムが記憶される過程は問わない。例えば、記録媒体を介してテスト対象プログラムがテスト対象プログラム格納部12で記憶されるようになってもよく、通信回線等を介して送信されたテスト対象プログラムがテスト対象プログラム格納部12で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたテスト対象プログラムがテスト対象プログラム格納部12で記憶されるようになってもよい。
シミュレータプログラム格納部13は、シミュレータプログラムを格納している。シミュレータプログラムは、ハードウェアの動作をシミュレートするプログラムである。シミュレータプログラムは、通常、テスト対象プログラムから渡される情報であるプログラム情報と動作パターンとに応じた動作を行うプログラムである。プログラム情報とは、テスト対象プログラムの制御対象のハードウェアに渡されるデータ(情報)である。動作パターンとは、ハードウェアの動作のパターンであり、少なくとも正常であるパターンを示す正常パターンと異常であるパターンを示す異常パターンを有する。また、異常パターンは、応答しないパターンである非応答パターン、アラームを発生するパターンであるアラームパターン、途中の処理まで正常であり、その後異常になる途中正常パターンなどの2以上のパターンが存在していても良い。また、シミュレータプログラムは、例えば、いわゆるスタブと呼ばれるソフトウェアであり、テストに用いられるソフトウェアである。シミュレータプログラムは、当該シミュレータプログラムの動作結果であるIO値を書き込む処理を行っても良い。シミュレータプログラムは、例えば、同じ関数名またはメソッド名などを有する複数のプログラムを有し得る。複数のプログラムとは、例えば、正常パターンに対応する動作を行うプログラムと、異常パターンに対応する動作を行うプログラムである。IO値とは、ハードウェアが保持しており、テスト対象のプログラムの動作により、変更されたり、読み出されたりするある領域に記憶されている情報(データ)である。シミュレータプログラム格納部13は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。シミュレータプログラム格納部13にシミュレータプログラムが記憶される過程は問わない。例えば、記録媒体を介してシミュレータプログラムがシミュレータプログラム格納部13で記憶されるようになってもよく、通信回線等を介して送信されたシミュレータプログラムがシミュレータプログラム格納部13で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたシミュレータプログラムがシミュレータプログラム格納部13で記憶されるようになってもよい。
テスト情報格納部14は、2以上のテスト情報を格納している。テスト情報は、一テストの項目に対応する情報である。テスト情報は、通常、入力情報と動作パターンとを有する。入力情報とは、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である。入力情報とは、例えば、プログラムに与える引数である。なお、テスト情報に動作パターンを有しない場合、動作パターンは、デフォルト値(例えば、正常パターン)である。テスト情報は、テスト対象プログラムの正常な動作結果である正解情報をも有しても良い。正解情報は、テスト対象プログラムのリターン値でも良いし、テスト対象プログラムの実行結果であり、ハードウェアの記憶領域に記載されている値(IO値など)でも良い。テスト情報は、シミュレータプログラムが動作に用いるIO値をも有しても良い。テスト情報格納部14は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。テスト情報格納部14にテスト情報が記憶される過程は問わない。例えば、記録媒体を介してテスト情報がテスト情報格納部14で記憶されるようになってもよく、通信回線等を介して送信されたテスト情報がテスト情報格納部14で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたテスト情報がテスト情報格納部14で記憶されるようになってもよい。
自動テスト部15は、テスト情報格納部14から2以上のテスト情報を、順次、読み出し、順次、テスト情報をテスト情報受付部16に渡す。自動テスト部15は、通常、受付部11がテスト開始指示を受け付けた場合に、テスト情報格納部14から2以上のテスト情報を、順次、読み出し、テスト情報受付部16に渡す。自動テスト部15は、複数のテスト情報に対応するテスト項目を、繰り返し実行して、自動テストを実現する機能を果たす。自動テスト部15は、通常、MPUやメモリ等から実現され得る。自動テスト部15の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
テスト情報受付部16は、テスト情報を受け付ける。テスト情報は、上述したように、通常、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有する。テスト情報受付部16は、自動テスト部15からテスト情報を受け付けても良いし、ユーザからの手入力によりテスト情報を受け付けても良い。テスト情報受付部16は、MPUやメモリ等から実現され得る。テスト情報受付部16の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。また、テスト情報受付部16は、キーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現されても良い。
テスト制御部17は、テスト情報受付部16が受け付けたテスト情報が有する動作パターンを取得し、シミュレータプログラムに渡す。なお、テスト制御部17は、動作パターンがデフォルト値の場合、動作パターンをシミュレータプログラムに渡さなくても良い。また、テスト制御部17は、テスト情報が有する動作パターンおよびIO値を取得し、シミュレータプログラムに渡しても良い。さらに、テスト制御部17は、シミュレータプログラムが書き込んだIO値を取得し、出力する処理をも行っても良い。テスト制御部17は、例えば、動作パターンにより、シミュレータプログラムやシミュレータプログラムが利用するデータを書き換えても良い。かかる書き換え処理も、動作パターンをシミュレータプログラムに渡す処理と同意義である、とする。また、テスト制御部17は、例えば、IO値を、予め決められたファイルや変数に書き込んでも良い。かかる処理も、IO値をシミュレータプログラムに渡す処理である。テスト制御部17は、通常、MPUやメモリ等から実現され得る。テスト制御部17の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
実行部18は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、テスト制御部17がシミュレータプログラムに渡した動作パターンとを用いてシミュレータプログラムを実行する。つまり、例えば、実行部18によりシミュレータプログラムの実行により、動作パターンに応じて、起動されるシミュレータプログラムのメソッド(または関数など)が異なる。例えば、動作パターンが異なれば、同じメソッド名を有するが異なるメソッドが実行される、ということとなる。
なお、テスト対象プログラムに与える入力情報がNULLの場合もあり得る。また、実行部18は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、テスト制御部17がシミュレータプログラムに渡した動作パターンおよびIO値とを用いてシミュレータプログラムを実行しても良い。実行部18は、通常、MPUやメモリ等から実現され得る。実行部18の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
テスト結果判断部19は、実行部18におけるテスト対象プログラムの動作結果を取得し、当該動作結果と、テスト情報が有する正解情報を用いて、テストの正常または異常を判断し、当該判断結果を出力する。テスト結果判断部19は、IO値を読み出し、予想されるIO値(テスト情報が有する正解情報)と合致するか否かを判断し、当該判断結果を出力しても良い。正解情報とは、テストの結果の情報であり、テスト対象プログラムのリターン値や、テスト対象プログラムの動作の結果であるIO値や、その他の記憶媒体内の情報などである。テスト結果判断部19は、通常、MPUやメモリ等から実現され得る。テスト結果判断部19の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、プログラムテスト装置の動作について図2のフローチャートを用いて説明する。
(ステップS201)受付部11は、テスト開始指示を受け付けたか否かを判断する。テスト開始指示を受け付ければステップS202に行き、テスト開始指示を受け付けなければステップS201に戻る。
(ステップS202)自動テスト部15は、カウンタiに1を代入する。
(ステップS203)自動テスト部15は、i番目のテスト情報が、テスト情報格納部14に存在するか否かを判断する。i番目のテスト情報が存在すればステップS204に行き、i番目のテスト情報が存在しなければ処理を終了する。
(ステップS204)テスト制御部17は、i番目のテスト情報が有する動作パターンを取得する。
(ステップS205)テスト制御部17は、ステップS204で取得した動作パターンを、シミュレータプログラムに渡す。なお、ここで、テスト制御部17は、シミュレータプログラムが利用する動作パターンの格納領域(ファイルやメモリなどの領域)に、ステップS204で取得した動作パターンを書き込んでも良い。この処理も、動作パターンをシミュレータプログラムに渡す処理である。
(ステップS206)テスト制御部17は、i番目のテスト情報が有するIO値を取得する。
(ステップS207)テスト制御部17は、ステップS206で取得したIO値を、シミュレータプログラムに渡す。なお、ここで、テスト制御部17は、IO値の格納領域(ファイルやメモリなどの領域)に、ステップS206で取得したIO値を書き込んでも良い。この処理も、IO値をシミュレータプログラムに渡す処理である。
(ステップS208)実行部18は、i番目のテスト情報が有する入力情報を取得する。
(ステップS209)実行部18は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行する。なお、通常、テスト対象プログラムの実行により、テスト対象プログラムとシミュレータプログラムがデータのやり取りを行い、シミュレータプログラムも実行される。シミュレータプログラムの実行時に、シミュレータプログラムは、ステップS205で渡された動作パターン、ステップS207で渡されたIO値を用いて、動作する。また、テスト情報が入力情報を有しない場合は、実行部18は、テスト対象プログラムに入力情報を与えない。
(ステップS210)テスト制御部17は、IO値を読み込む処理を行うか否かを判断する。テスト制御部17は、例えば、入力情報がIO値の読み込みを指示する命令を含む場合、IO値を読み込む処理を行うと判断する。IO値を読み込む処理を行う場合はステップS211に行き、IO値を読み込む処理を行わない場合はステップS212に行く。
(ステップS211)テスト制御部17は、IO値を読み込む。
(ステップS212)テスト結果判断部19は、実行部18におけるテスト対象プログラムの動作結果を取得し、当該動作結果と、テスト情報が有する正解情報を用いて、テストの正常または異常を判断する。
(ステップS213)テスト結果判断部19は、ステップS212における判断結果を出力する。
(ステップS214)自動テスト部15は、カウンタiを1、インクリメントする。ステップS203にもどる。
なお、図2のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
以下、本実施の形態におけるプログラムテスト装置の具体的な動作について、2つの具体例を用いて説明する。
(具体例1)
今、図3に示すテスト情報管理表がテスト情報格納部14に格納されている。テスト情報管理表は、1以上のテスト情報を管理する表である。テスト情報管理表は、「ID」と「テスト情報」を有するレコードを1以上保持している。「ID」は、レコードを識別する属性であり、表管理のために存在する。属性「テスト情報」内のテスト情報は、ここでは、プログラムの形式で記述されている。
テスト情報において、「#」で開始されている行(図3の(1)など)はコメント行を示す。また、図3の(2)および(3)の行は、シミュレータプログラムが動作に用いるIO値を設定するメソッドである。図3の(2)は、「DO_FullOpen」のIO値を「CONTROL」という定数値に設定することを示している。図3の(3)は、「DO_FullClose」のIO値を「FULL_CLOSE」という定数値に設定することを示している。また、図3の(4)は、テスト対象プログラム格納部12に格納されているテスト対象プログラムの「InternalFullOpen()」を起動する(テストする)ことを示している。ここで、「InternalFullOpen()」は、テスト対象プログラムに与える入力情報の例である、と言える。また、図3の(4)における「Common_OK」は、テスト情報が有する正解情報の例である。つまり、「InternalFullOpen()」の実行の結果である戻り値が「Common_OK」であれば、この時点でのテスト結果が正常である、と判断される。なお、「Common_OK」に対応する値(例えば、「0」や「1」など)が予め決められている。
また、図3の(5)および(6)は、シミュレータプログラムの動作結果であるIO値を取得し、想定される結果(正解情報)と一致するか否かを判断するための記述である。図3の(5)において、「DO_FullOpen」のIO値を取得し、「FULL_OPEN」という定数値になっているか否かを判断することを示す。なお、「FULL_OPEN」は、テスト情報が有する正解情報である。また、図3の(6)において、「DO_FullClose」のIO値を取得し、「CONTROL」という定数値になっているか否かを判断することを示す。なお、「CONTROL」は、テスト情報が有する正解情報である。また、図3のテスト情報は、動作パターンを有さない。つまり、動作パターンは、デフォルトの正常パターン(正常モード)である。
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部11は、テスト開始指示を受け付ける。
次に、自動テスト部15は、図3のテスト情報管理表から、1番目のテスト情報(「ID=1」のレコード)を読み出す。
そして、テスト制御部17は、図3の「ID=1」のレコードを順に解釈し、実行する。つまり、テスト制御部17は、1番目のテスト情報が有するコメント行を無視する(図3の(1))。次に、テスト制御部17は、1番目のテスト情報が有する「DO_FullOpen」のIO値「CONTROL」を取得し、メモリ上に配置する。そして、テスト制御部17は、取得した「DO_FullOpen」のIO値「CONTROL」を、シミュレータプログラムが使用できるようにするために、「DO_FullOpen」の領域に値「CONTROL」を書き込む(図3の(2))。また、テスト制御部17は、1番目のテスト情報が有する「DO_FullClose」のIO値「FULL_CLOSE」を取得し、メモリ上に配置する。そして、テスト制御部17は、取得した「DO_FullClose」のIO値「FULL_CLOSE」を、シミュレータプログラムが使用できるようにするために、「DO_FullClose」の領域に値「FULL_CLOSE」を書き込む(図3の(3))。
次に、実行部18は、1番目のテスト情報が有する入力情報「InternalFullOpen()」を取得する。そして、実行部18は、テスト対象プログラムを起動し、「InternalFullOpen()」を実行する。そして、「InternalFullOpen()」の実行により、通常、IO値が適切に書き換えられる(図3の(4))。
次に、テスト結果判断部19は、実行部18におけるテスト対象プログラムの動作結果(「InternalFullOpen()」の実行結果である戻り値)を取得する。そして、この戻り値とテスト情報が有する正解情報「Common_OK」を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。ここでは、例えば、「InternalFullOpen()」の実行結果である戻り値が「Common_OK」である、とする。そして、テスト結果判断部19は、戻り値と正解情報「Common_OK」が一致するので、この段階でのテストは正常である、と判断する(図3の(4))。
次に、テスト制御部17は、図3の(5)および(6)の解釈実行により、「DO_FullOpen」のIO値を読み込む。そして、テスト結果判断部19は、テスト対象プログラムの動作結果である「DO_FullOpen」のIO値と、テスト情報が有する正解情報「Full_Open」と一致するか否かを判断する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。次に、同様に、テスト結果判断部19は、テスト対象プログラムの動作結果である「DO_FullClose」のIO値を取得し、テスト情報が有する正解情報「FULL_CLOSE」と一致するか否かを判断する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部19は、判断結果(例えば、「正常」)を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部19は、テスト情報の識別番号(ID)と、判断結果を対応付けて出力する。
以上の処理により、「ID=1」のテスト情報の処理が終了する。なお、上記のテスト結果判断部19における正常/異常の判断過程において、一致しない等の判断の場合、テスト結果判断部19は、例えば、「異常」を示す判断結果を出力する。
次に、自動テスト部15は、図3のテスト情報管理表から、2番目以降のテスト情報(「ID=2」のレコード以降のレコード)を、順に、読み出し、1番目のテスト情報と同様に、順に解釈実行し、判断結果を出力する。
なお、図3の(1)から(6)等のテスト情報を解釈実行する処理は公知技術であるので、詳細な説明を省略する。
(具体例2)
今、図4に示すテスト情報管理表がテスト情報格納部14に格納されている。図4において、「ID=1」のテスト情報は、DRP(ドライ真空ポンプ)の正常動作のテストを行うための情報である。また、「ID=2」のテスト情報は、DRPのタイムアウト(異常動作)のテストを行うための情報である。また、図4において、「TagRawWrite」は、IO値を設定する関数(メソッド)を示す。つまり、(1)は、IO値「DO_RUN」に値「STOP」を設定することを示す。(2)は、IO値「DI_RUN」に値「STOP」を設定することを示す。(3)は、IO値「DI_ALARM」に値「NORMAL」を設定することを示す。また、「TagRead」は、IO値を取得し、正常か否かを確認する関数を示す。つまり、(4)は、IO値「DO_RUN」に値「STOP」が設定されていることを確認することを示す。(5)は、IO値「DI_RUN」に値「STOP」が設定されていることを確認することを示す。(6)は、IO値「DI_ALARM」に値「NORMAL」が設定されていることを確認することを示す。「SetPatarn」は、動作パターンを設定する関数を示す。つまり、(7)は、DO_RUNの動作パターンを「NORMAL」に設定することを示す。(9)は、IO値「DI_RUN」に値「RUN」が設定されていることを確認することを示す。
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部11は、テスト開始指示を受け付ける。
次に、自動テスト部15は、図4のテスト情報管理表から、1番目のテスト情報(「ID=1」のレコード)を読み出す。
そして、テスト制御部17は、図4の「ID=1」のレコード内の情報(関数)を順に解釈し、実行する。つまり、図4(1)から、テスト制御部17は、1番目のテスト情報が有する「DO_RUN」のIO値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部17は、取得した「DO_RUN」のIO値「STOP」を、シミュレータプログラムが使用できるようにするために、「DO_RUN」の領域に書き込む。また、図4(2)から、テスト制御部17は、1番目のテスト情報が有する「DI_RUN」のIO値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部17は、取得した「DI_RUN」のIO値「STOP」を、シミュレータプログラムが使用できるようにするために、「DI_RUN」の領域に書き込む。また、図4(3)から、テスト制御部17は、1番目のテスト情報が有する「DI_ARARM」のIO値「NORMAL」を取得し、メモリ上に配置する。そして、テスト制御部17は、取得した「DI_ARARM」のIO値「NORMAL」を、シミュレータプログラムが使用できるようにするために、「DI_ARARM」の領域に値「NORMAL」を書き込む。
次に、図4(4)から、テスト制御部17は、「DO_RUN」のIO値を取得する。そして、テスト結果判断部19は、「DO_RUN」のIO値が「STOP」であるか否かを判断する。また、図4(5)から、テスト制御部17は、「DI_RUN」のIO値を取得する。そして、テスト結果判断部19は、「DI_RUN」のIO値が「STOP」であるか否かを判断する。さらに、図4(6)から、テスト制御部17は、「DI_ARARM」のIO値を取得する。そして、テスト結果判断部19は、「DI_ARARM」のIO値が「NORMAL」であるか否かを判断する。
次に、図4(7)から、テスト制御部17は、1番目のテスト情報が有する動作パターン「DO_RUN,NORMAL」を取得する。なお、動作パターン「DO_RUN,NORMAL」は、「DO_RUN」の動作が「NORMAL」である、という動作パターンである。そして、テスト制御部17は、「DO_RUN,NORMAL」をシミュレータプログラムに渡す。つまり、「DO_RUN」の動作が「NORMAL」となるように設定される。
次に、図4(8)から、実行部18は、1番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部18は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、「DRP.Run()」の実行により、DRPが動作し、通常、IO値が適切に書き換えられる。
次に、テスト結果判断部19は、実行部18におけるテスト対象プログラムの動作結果(「DRP.Run()」の実行結果である戻り値)を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
次に、図4(9)から、テスト制御部17は、1番目のテスト情報が有する入力情報「TagRead(DI_RUN,RUN)」を取得する。そして、テスト制御部17は、「TagRead(DI_RUN,RUN)」の解釈実行により、「DI_RUN」のIO値を読み込む。そして、テスト結果判断部19は、テスト対象プログラムの動作結果である「DI_RUN」のIO値と、テスト情報が有する正解情報「RUN」と一致するか否かを判断する。そして、テスト結果判断部19は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部19は、判断結果(例えば、「正常」)を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部19は、テスト情報の識別番号(ID)と、判断結果を対応付けて出力する。
以上の処理により、「ID=1」のテスト情報の処理が終了する。なお、上記のテスト結果判断部19における正常/異常の判断過程において、一致しない等の判断の場合、テスト結果判断部19は、例えば、「異常」を示す判断結果を出力する。
次に、自動テスト部15は、図4のテスト情報管理表から、2番目のテスト情報(「ID=2」のレコード)を読み出す。
そして、テスト制御部17は、図4の「ID=2」のレコード内の関数を順に解釈し、実行する。つまり、テスト制御部17は、図4の「ID=2」のレコード中の(10)から(15)を、(1)から(6)と同様に処理する。
次に、テスト制御部17は、2番目のテスト情報の(16)から、動作パターン「DO_RUN,TIMEOUT」を取得する。なお、動作パターン「DO_RUN,TIMEOUT」は、「DO_RUN」の動作が「TIMEOUT」である、という動作パターンである。そして、テスト制御部17は、「DO_RUN,TIMEOUT」をシミュレータプログラムに渡す。つまり、「DO_RUN」の動作が「TIMEOUT」となるように設定される。
次に、実行部18は、2番目のテスト情報の(17)から、入力情報「DRP.Run()」を取得する。そして、実行部18は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、「DRP.Run()」の実行により、DRPが動作し、通常、IO値が適切に書き換えられる。
次に、テスト結果判断部19は、実行部18におけるテスト対象プログラムの動作結果(「DRP.Run()」の実行結果である戻り値)を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
次に、テスト制御部17は、2番目のテスト情報が有する入力情報「TagRead(DI_RUN,STOP)」を取得する。そして、テスト制御部17は、「TagRead(DI_RUN,STOP)」の解釈実行により、「DI_RUN」のIO値を読み込む。そして、テスト結果判断部19は、テスト対象プログラムの動作結果である「DI_RUN」のIO値と、テスト情報が有する正解情報「STOP」と一致するか否かを判断する。そして、テスト制御部17は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部19は、判断結果(例えば、「正常」)を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部19は、テスト情報の識別番号(ID)と、判断結果を対応付けて出力する。
以上の処理により、「ID=2」のテスト情報の処理が終了する。なお、上記のテスト結果判断部19における正常/異常の判断過程において、一致しない等の判断の場合、テスト結果判断部19は、例えば、「異常」を示す判断結果を出力する。
次に、自動テスト部15は、図4のテスト情報管理表から、3番目以降のテスト情報(「ID=3」のレコード以降のレコード)を、順に、読み出し、1番目、2番目のテスト情報と同様に、順に解釈実行し、判断結果を出力する。
次に、本プログラムテスト装置の概念について説明する。従来のプログラムテスト装置の概念図の例を図5に示す。つまり、従来のプログラムテスト装置は、自動テストプログラム51とテスト対象プログラム52とシミュレータプログラム53を有する。そして、自動テストプログラム51は、自動的に1以上のテスト項目を実行するものである。テスト対象プログラム52は、テスト対象プログラム格納部12のテスト対象プログラムと同様であり、テストの対象となるプログラムである。シミュレータプログラム53は、シミュレータプログラム格納部13のシミュレータプログラムと同様であり、機器の応答をシミュレートするプログラムである。シミュレータプログラムは、一の関数(スタブ)に対して、正常パターンの関数(スタブ)と、異常パターンの関数(スタブ)を有している。なお、図5における「通信」とは、データ通信であっても、データの受け渡しであっても、関数の呼び出し等であっても良い。つまり、「通信」とは、テスト対象プログラム52とシミュレータプログラム53が協調的に動作をすれば良い。
このようなプログラムテスト装置において、テスト対象プログラムのテストとしては正常に動作するだけでなく、機器からアラームを発生させたり、起動タイムアウトが生じたりするような異常ケースもテストする必要がある。つまり、プログラムテスト装置において、正常パターンと異常パターン、異常パターンの中でも、応答しないパターンである非応答パターン、アラームを発生するパターンであるアラームパターン、途中の処理まで正常であり、その後異常になる途中正常パターンなどの、2以上の動作パターンについてテストをする必要がある。しかし、従来のプログラムテスト装置では、予めシミュレータプログラム側で動作パターンを設定しておき、テスト対象プログラムをテストすることとなる。つまり、複数の動作パターンのテストを行う場合には、手作業により、複数の動作パターンの書き換えを行い、かつ、動作させる関数を切り替える等しながらテストを進める、ということが行われており、複数の動作パターンを纏めて自動的にテストを行う事ができなかった。
一方、上記実施の形態で説明したプログラムテスト装置の概念図は、図6である。本プログラムテスト装置は、自動テストプログラム61とテスト対象プログラム62とシミュレータプログラム63と自動制御用プログラム64を有する。自動制御用プログラム64は、主として、上述したテスト制御部17に該当する。つまり、自動制御用プログラム64は、シミュレータプログラム63に対し、NUnitなどの自動テストプログラム61から動作パターンの切り替えを行うインターフェイスを提供することにより自動的に複数の動作パターンを連続してテストが行える。また、本プログラムテスト装置では、IOの状態(IO値)も自動制御用プログラム64から書き換える機能も提供し、機器の異常動作などもテスト対象プログラム62側からシミュレートすることが可能になる。本プログラムテスト装置では、上記の構成により、正常ケース、異常ケースのテストを一つのテストプログラムからテストができるようになる。また、IOの状態(IO値)を書き換え、読み取り可能にする事で、制御指示の実行結果だけでなく、実際にシミュレータプログラム?3側で値が変化した事を確認できるため、テスト対象プログラム?2の入力部(入力処理)と出力部(出力処理)のテストが可能となる。なお、NUnitについては、http://www.divakk.co.jp/aoyagi/csharp_tips_nunit.html」等に説明されている。
以上、本実施の形態によれば、テスト対象プログラムについて、ハードウェアがエラーの場合のテスト対象プログラムのテストも容易にできる。さらに具体的には、自動的に複数の動作パターンを連続してテストが行える。また、本実施の形態によれば、IOの状態(IO値)も自動制御用プログラム64から書き換える機能も提供し、機器の異常動作なども、テスト対象プログラム62側から精度の高くシミュレートすることが可能になる。さらに、本実施の形態によれば、IO値を読み取り可能にする事で、制御指示の実行結果だけでなく、実際にシミュレータプログラム側で値が変化した事を確認できるため、テスト対象プログラムの入力部と出力部のテストが可能となる。
なお、本実施の形態において、テスト情報の内容は問わないことは言うまでもない。
さらに、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをCD-ROMなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態におけるプログラムテスト装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得し、ハードウェアの動作をシミュレートするシミュレータプログラムに渡すテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンとを用いて前記シミュレータプログラムを実行する実行部として機能させるためのプログラム、である。
また、上記プログラムにおいて、前記テスト情報は、前記シミュレータプログラムが動作に用いるIO値をも有し、前記テスト制御部は、前記テスト情報が有する動作パターンおよびIO値を取得し、前記シミュレータプログラムに渡し、前記実行部は、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、当該テスト対象プログラムの実行結果であるプログラム情報と、前記テスト制御部が前記シミュレータプログラムに渡した動作パターンおよびIO値とを用いて前記シミュレータプログラムを実行するように、コンピュータを機能させるプログラムであることは好適である。
また、上記プログラムにおいて、前記テスト制御部を、前記シミュレータプログラムの動作結果であるIO値を取得し、出力する処理をも行うように、コンピュータを機能させるプログラムであることは好適である。
(実施の形態2)
本実施の形態において、正常系のテスト情報をハードウェアに与え、異常系のテスト情報をシミュレータプログラムに与えるプログラムテスト装置について説明する。本実施の形態におけるプログラムテスト装置は、正常パターンの場合は、ハードウェアを用いて、さらに精度高くテストを行い、異常パターンの場合は、シミュレータプログラムを用いてテストを行う、というものである。かかる処理により、ハードウェアでその状態(通常、異常パターン)を作り出すことが難しいテストケースのみをソフトウェアで行える。
図7は、本実施の形態におけるプログラムテスト装置2のブロック図である。プログラムテスト装置2は、受付部11、テスト対象プログラム格納部12、シミュレータプログラム格納部23、テスト情報格納部14、自動テスト部25、テスト情報受付部16、テスト制御部27、実行部28、テスト結果判断部29を具備する。
シミュレータプログラム格納部23は、ハードウェアのエラーの動作をシミュレートするプログラムであるシミュレータプログラムを格納している。シミュレータプログラムとは、通常、テスト対象プログラムから渡されるプログラム情報に応じた動作を行う。ただし、エラーコードを返すだけ、などの画一的な処理でも良い。シミュレータプログラム格納部23は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。シミュレータプログラム格納部23にシミュレータプログラムが記憶される過程は問わない。例えば、記録媒体を介してシミュレータプログラムがシミュレータプログラム格納部23で記憶されるようになってもよく、通信回線等を介して送信されたシミュレータプログラムがシミュレータプログラム格納部23で記憶されるようになってもよく、あるいは、入力デバイスを介して入力されたシミュレータプログラムがシミュレータプログラム格納部23で記憶されるようになってもよい。
テスト制御部27は、テスト情報受付部16が受け付けたテスト情報が有する動作パターンを取得する。テスト制御部27は、通常、MPUやメモリ等から実現され得る。テスト制御部27の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
実行部28は、テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行する。また、実行部28は、テスト制御部27が取得した動作パターンが正常パターンであるか否かを判断する。そして、動作パターンが正常パターンであれば、テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させる。また、実行部28は、動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いてシミュレータプログラムを実行する。正常パターンでない場合とは、異常パターンである場合、および異常パターンが細分化されたパターンである、非応答パターン、アラームパターン、途中正常パターンなどの場合である。なお、プログラム情報は、テスト対象プログラムからハードウェアに渡される情報である、とも言える。実行部28は、通常、MPUやメモリ等から実現され得る。実行部28の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、プログラムテスト装置の動作について図8のフローチャートを用いて説明する。図8のフローチャートにおいて、図2のフローチャートと重複するステップについて、説明を省略する。
(ステップS901)実行部28は、テストを実行する。テスト実行処理について、図8のフローチャートを用いて、詳細に説明する。
なお、図8のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
次に、テスト実行処理について、図9のフローチャートを用いて説明する。図9のフローチャートにおいて、図2のフローチャートと重複するステップについて、説明を省略する。
(ステップS901)テスト制御部27は、ステップS204で取得した動作パターンが正常パターンか否かを判断する。正常パターンであればステップS902に行き、正常パターンでなければステップS217に行く。
(ステップS902)テスト制御部27は、ステップS206で取得されたIO値を、ハードウェアのIO値として、ハードウェアに書き込む。ハードウェアに書き込む処理は、ハードウェアに渡す処理でも良い。
(ステップS903)実行部28は、テスト対象プログラムを実行する。
(ステップS904)テスト制御部27は、ステップS903における実行結果であるプログラム情報を取得する。
(ステップS905)テスト制御部27は、ステップS204で取得した動作パターンが正常パターンか否かを判断する。正常パターンであればステップS906に行き、正常パターンでなければステップS207に行く。
(ステップS906)実行部28は、ステップS904で取得したプログラム情報をハードウェアに渡し、ハードウェアを動作させる。
(ステップS907)実行部28は、ステップS904で取得したプログラム情報を用いてシミュレータプログラムを実行する。
(ステップS908)テスト制御部27は、ステップS906または、ステップS907における実行結果を受け付けたか否かを判断する。実行結果を受け付ければステップS909に良き、実行結果を受け付けなければステップS908に戻る。
(ステップS909)テスト制御部27は、i番目のテスト情報のテストが終了したか否かを判断する。テストが終了した、との判断の場合は、ステップS910に行き、テストが終了していない、との判断の場合は、ステップS903に戻る。
(ステップS910)テスト結果判断部29は、ハードウェアから、または、シミュレータプログラムが書き込んだ情報から、IO値を取得する。ステップS212に行く。
なお、図9のフローチャートにおける処理の流れは一例であることは言うまでもない。
以下、本実施の形態におけるプログラムテスト装置の具体的な動作について説明する。
今、図4に示すテスト情報管理表がテスト情報格納部14に格納されている、とする。
かかる状況において、ユーザは、テスト開始指示を入力した、とする。すると、受付部11は、テスト開始指示を受け付ける。
次に、自動テスト部25は、図4のテスト情報管理表から、1番目のテスト情報(「ID=1」のレコード)を読み出す。
そして、テスト制御部27は、図4の「ID=1」のレコード内の関数を順に解釈し、実行する。つまり、テスト制御部27は、1番目のテスト情報が有する「DO_RUN」のIO値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部27は、取得した「DO_RUN」のIO値「STOP」をハードウェアに渡し、ハードウェアは「DO_RUN」の領域にIO値「STOP」を書き込む。また、テスト制御部27は、1番目のテスト情報が有する「DI_RUN」のIO値「STOP」を取得し、メモリ上に配置する。そして、テスト制御部27は、取得した「DI_RUN」のIO値「STOP」をハードウェアに渡し、ハードウェアは「DI_RUN」の領域にIO値「STOP」を書き込む。また、テスト制御部27は、1番目のテスト情報が有する「DI_ARARM」のIO値「NORMAL」を取得し、メモリ上に配置する。そして、テスト制御部27は、取得した「DI_ARARM」のIO値「NORMAL」をハードウェアに渡し、ハードウェアは「DI_ARARM」の領域にIO値「NORMAL」を書き込む。
次に、テスト制御部27は、「DO_RUN」のIO値をハードウェアから読み出す。そして、テスト結果判断部29は、「DO_RUN」のIO値が「STOP」であるか否かを判断する。また、テスト制御部27は、「DI_RUN」のIO値をハードウェアから読み出す。そして、テスト結果判断部29は、「DI_RUN」のIO値が「STOP」であるか否かを判断する。さらに、テスト制御部27は、「DI_ARARM」のIO値をハードウェアから読み出す。そして、テスト結果判断部29は、「DI_ARARM」のIO値が「NORMAL」であるか否かを判断する。
次に、テスト制御部27は、1番目のテスト情報が有する動作パターン「DO_RUN,NORMAL」を取得する。なお、動作パターン「DO_RUN,NORMAL」は、「DO_RUN」の動作が「NORMAL」である、という動作パターンである。
次に、実行部28は、1番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部28は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、実行部28は、「DRP.Run()」の実行結果を取得する。
次に、実行部28は、テスト制御部27が取得した動作パターン「DO_RUN,NORMAL」から、動作パターンが正常パターンであることを認識する。なお、実行部28は、「NORMAL」と「正常パターン」を示す情報を対に、予め保持している。
そして、実行部28は、テスト対象プログラムの実行結果(「DRP.Run()」の実行結果)であるプログラム情報をハードウェアに渡し、ハードウェアを動作させる。
次に、実行部28は、ハードウェアの実行結果を得る。なお、「DRP.Run()」の実行により、通常、ハードウェア内のIO値が適切に書き換えられる。そして、実行部28は、ハードウェアの実行結果をテスト対象プログラムに渡す。
次に、テスト結果判断部29は、実行部28におけるテスト対象プログラムの動作結果(「DRP.Run()」の実行結果である戻り値)を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
次に、テスト制御部27は、1番目のテスト情報が有する入力情報「TagRead(DI_RUN,RUN)」を取得する。そして、テスト制御部27は、「TagRead(DI_RUN,RUN)」の解釈実行により、「DI_RUN」のIO値を、ハードウェアから読み込む。そして、テスト結果判断部29は、テスト対象プログラムの動作結果である「DI_RUN」のIO値と、テスト情報が有する正解情報「RUN」と一致するか否かを判断する。そして、テスト結果判断部29は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部29は、判断結果(例えば、「正常」)を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部29は、テスト情報の識別番号(ID)と、判断結果を対応付けて出力する。
以上の処理により、「ID=1」のテスト情報の処理が終了する。なお、上記のテスト結果判断部29における正常/異常の判断過程において、一致しない等の判断の場合、テスト結果判断部29は、例えば、「異常」を示す判断結果を出力する。
次に、自動テスト部25は、図4のテスト情報管理表から、2番目のテスト情報(「ID=2」のレコード)を読み出す。
そして、テスト制御部27は、図4の「ID=2」のレコードを順に解釈し、実行する。つまり、テスト制御部27は、図4の「ID=2」のレコード中の(10)から(15)を、(1)から(6)と同様に処理する。(1)から(6)の処理は、本実施の形態において、上記した処理である。
次に、テスト制御部27は、2番目のテスト情報の(16)から、動作パターン「DO_RUN,TIMEOUT」を取得する。
次に、実行部28は、1番目のテスト情報が有する入力情報「DRP.Run()」を取得する。そして、実行部28は、テスト対象プログラムを起動し、「DRP.Run()」を実行する。そして、実行部28は、「DRP.Run()」の実行結果を取得する。
次に、実行部28は、テスト制御部27が取得した動作パターン「DO_RUN,TIMEOUT」から動作パターンが正常パターンでない、と判断する。なお、実行部28は、正常パターンでない1以上の動作パターンの情報を、予め保持していており、テスト制御部27が取得した動作パターンが、保持している正常パターンでない動作パターンのいずれかの情報に合致すれば、テスト制御部27が取得した動作パターンが正常パターンでない動作パターンであると判断しても良い。また、実行部28は、正常パターンの動作パターンの情報を、予め保持していており、テスト制御部27が取得した動作パターンが、保持している正常パターンの情報に合致しなければ、テスト制御部27が取得した動作パターンが正常パターンでない動作パターンであると判断しても良い。
そして、実行部28は、テスト対象プログラムの実行結果(「DRP.Run()」の実行結果)であるプログラム情報を用いてシミュレータプログラムを実行する。このシミュレータプログラムは、異常パターンの場合のシミュレータプログラム(スタブなど)である。そして、実行部28は、シミュレータプログラムの実行結果をテスト対象プログラムに渡す。
次に、テスト結果判断部29は、実行部28におけるテスト対象プログラムの動作結果(「DRP.Run()」の実行結果である戻り値)を取得する。そして、この戻り値とテスト情報が有する正解情報を比較する。そして、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。
次に、テスト制御部27は、1番目のテスト情報が有する入力情報「TagRead(DI_RUN,STOP)」を取得する。そして、テスト制御部27は、「TagRead(DI_RUN,STOP)」の解釈実行により、「DI_RUN」のIO値を、ハードウェアから読み込む。そして、テスト結果判断部29は、テスト対象プログラムの動作結果である「DI_RUN」のIO値と、テスト情報が有する正解情報「STOP」と一致するか否かを判断する。そして、テスト結果判断部29は、両者が一致すればテストが正常であると判断し、両者が一致しなければテストが異常であると判断する。そして、テスト結果判断部29は、判断結果(例えば、「正常」)を出力する。ここで、出力とは、ディスプレイへの表示でも良いし、記録媒体への蓄積でも良い。また、出力の際には、テスト結果判断部29は、テスト情報の識別番号(ID)と、判断結果を対応付けて出力する。
以上の処理により、「ID=2」のテスト情報の処理が終了する。なお、上記のテスト結果判断部29における正常/異常の判断過程において、一致しない等の判断の場合、テスト結果判断部29は、例えば、「異常」を示す判断結果を出力する。
以上、本実施の形態によれば、正常系のテスト情報をハードウェアに与え、異常系のテスト情報をシミュレータプログラムに与えるプログラムテスト装置を提供できる。かかるプログラムテスト装置により、正常パターンの場合は、ハードウェアを用いて、さらに精度高くテストを行い、異常パターンの場合は、シミュレータプログラムを用いてテストを行うことができる。かかる処理により、ハードウェアでその状態(通常、異常パターン)を作り出すことが難しいテストケースをソフトウェアで擬似的に行え、かつ、容易に状態(通常、正常パターン)を作り出すことができるテストケースについて、実際に運用されるハードウェアを用いて精度高くテストを行える。
なお、本実施の形態の具体例において、実行部28とハードウェアとの情報のやり取りは一度だけであったが、両者間で、連続したデータのやり取りがあっても良いことは言うまでもない。また、同様に、実行部28とシミュレータプログラムとの情報のやり取りは一度だけであったが、両者間で、連続したデータのやり取りがあっても良いことは言うまでもない。
さらに、本実施の形態におけるプログラムテスト装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、テスト対象プログラムをテストするために当該テスト対象プログラムに与える情報である入力情報と動作パターンとを有するテスト情報を受け付けるテスト情報受付部と、前記テスト情報が有する動作パターンを取得するテスト制御部と、前記テスト情報が有する入力情報をテスト対象プログラムに与え、当該テスト対象プログラムを実行し、かつ、前記テスト制御部が取得した動作パターンが正常パターンであれば、前記テスト対象プログラムの実行結果であるプログラム情報をハードウェアに渡し、ハードウェアを動作させ、前記テスト制御部が取得した動作パターンが正常パターンでなければ、当該テスト対象プログラムの実行結果であるプログラム情報を用いてシミュレータプログラムを実行する実行部として機能させるためのプログラム、である。
また、図10は、本明細書で述べたプログラムを実行して、上述した実施の形態のプログラムテスト装置を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図10は、このコンピュータシステム340の概観図であり、図11は、コンピュータシステム340のブロック図である。
図10において、コンピュータシステム340は、FD(Flexible Disk)ドライブ、CD-ROM(Compact Disk Read Only Memory)ドライブを含むコンピュータ341と、キーボード342と、マウス343と、モニタ344とを含む。
図11において、コンピュータ341は、FDドライブ3411、CD-ROMドライブ3412に加えて、CPU(Central Processing Unit)3413と、CPU3413、CD-ROMドライブ3412及びFDドライブ3411に接続されたバス3414と、ブートアッププログラム等のプログラムを記憶するためのROM(Read-Only Memory)3415と、CPU3413に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのRAM(Random Access Memory)3416と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク3417とを含む。ここでは、図示しないが、コンピュータ341は、さらに、LANへの接続を提供するネットワークカードを含んでも良い。
コンピュータシステム340に、上述した実施の形態のプログラムテスト装置の機能を実行させるプログラムは、CD-ROM3501、またはFD3502に記憶されて、CD-ROMドライブ3412またはFDドライブ3411に挿入され、さらにハードディスク3417に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ341に送信され、ハードディスク3417に記憶されても良い。プログラムは実行の際にRAM3416にロードされる。プログラムは、CD-ROM3501、FD3502またはネットワークから直接、ロードされても良い。
プログラムは、コンピュータ341に、上述した実施の形態のプログラムテスト装置の機能を実行させるオペレーティングシステム(OS)、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム340がどのように動作するかは周知であり、詳細な説明は省略する。
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
また、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。