(57)【特許請求の範囲】
【請求項１】
外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置であって、
前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部であって、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるテストシナリオ解釈実行部と、
前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信する被テストプログラム実行部と、
前記メッセージ受理信号を受信し記憶するメッセージ受理受付部と、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するメッセージ受信部と、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するメッセージ待合せ部とを有する被呼出しサービス模擬部と、
を備えることを特徴とするプログラムテスト装置。
【請求項２】
前記メッセージ待合せ部は、前記メッセージ受理受付部によるメッセージ受理信号の受信、及び、前記メッセージ受信部による前記被テストプログラムを呼び出し元とするメッセージの受信の何れか一方が発生してから、所定時間内に他方が発生しないと、前記テストシナリオ解釈実行部に、テストに失敗した旨を送信する、請求項１に記載のプログラムテスト装置。
【請求項３】
前記メッセージ待ち合わせ部は、前記被テストプログラムを呼び出し元とするメッセージが、前記被テストプログラムを呼び出し元とするメッセージに対する返信メッセージを要求するメッセージである場合、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、該メッセージを送信した旨を、前記被テストプログラム実行部に送信するするのに代えて、前記メッセージ受信部に送信し、
前記被呼出しサービス模擬部は、前記テストシナリオ解釈実行部から送信された、前記被テストプログラムを呼び出し元とするメッセージに対する返信メッセージを受信し記憶する返信メッセージ受信部と、前記メッセージ受信部が前記メッセージを送信した旨を受信し、かつ、前記返信メッセージ受信部が前記返信メッセージを受信すると、前記返信メッセージ受信部が記憶した返信メッセージを前記被テストプログラム実行部に送信し、該返信メッセージを送信した旨を前記テストシナリオ解釈実行部に送信する返信メッセージ待合せ部とを更に有し、
前記被テストプログラム実行部は、前記メッセージ受信部に、前記被テストプログラムを呼び出し元とするメッセージであって、該被テストプログラムを呼び出し元とするメッセージに対する返信メッセージを要求するメッセージを送信した後、前記返信メッセージ待合せ部から返信メッセージを受信するまで、被テストプログラムの進行を停止し、該返信メッセージを受信すると、被テストプログラムの進行を再開し、
前記テストシナリオ解釈実行部は、前記返信メッセージ受信部に返信メッセージを送信した後、前記返信メッセージ待合せ部から該返信メッセージを送信した旨を受信するまで、テストシナリオの進行を停止し、該返信メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開する
ことを特徴とする請求項１又は２に記載のプログラムテスト装置。
【請求項４】
前記テストシナリオ解釈実行部は、前記被テストプログラムを呼び出し元とするメッセージに対する返信メッセージの送信後、所定時間以内に、該返信メッセージを送信した旨を受信しないときには、テストに失敗した旨を出力する、請求項３に記載のプログラムテスト装置。
【請求項５】
前記テストシナリオ解釈実行部は、テストシナリオを最後まで進行すると、テストに成功した旨を出力する、請求項１〜４の何れか一に記載のプログラムテスト装置。
【請求項６】
外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置であって、前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部と、前記テストシナリオ解釈実行部により前記テストシナリオの実行が開始されると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部と、被テストプログラムに呼び出される外部サービスを模擬し、メッセージ受理受付部と、メッセージ受信部と、メッセージ待合せ部とを有する被呼出しサービス模擬部と、を備えるプログラムテスト装置を用いてテストするプログラムテスト方法であって、
前記テストシナリオ解釈実行部が、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるステップと、
前記被テストプログラム実行部が、前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信するステップと、
前記メッセージ受理受付部が、前記メッセージ受理信号を受信し記憶するステップと、
前記メッセージ受信部が、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するステップと、
前記メッセージ待合せ部が、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するステップと、
を備えたことを特徴とするプログラムテスト方法。
【請求項７】
コンピュータを、外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置として機能させるプログラムであって、前記コンピュータを、
前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部であって、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるテストシナリオ解釈実行部、
前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信する被テストプログラム実行部、
前記メッセージ受理信号を受信し記憶するメッセージ受理受付部と、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するメッセージ受信部と、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するメッセージ待合せ部とを有する被呼出しサービス模擬部、
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムテスト装置、方法、及び、プログラムに関し、更に詳しくは、メッセージ交換により実行を進行させるプログラムをテストするプログラムテスト装置、方法、及び、プログラムに関する。
【背景技術】
【０００２】
他のサービスやモジュールを呼び出し、呼び出したサービス等との間でメッセージ交換を行って処理を進行するプログラムがある。このようなプログラムをテストする技術としては、非特許文献１に記載された技術がある。図１７は、非特許文献１に記載されたプログラムテストシステムにおけるテストの様子を示している。この技術では、テストを実行するテストプログラム５０１と、被テストプログラムに呼び出されるオブジェクトの動作を模擬する模擬オブジェクト５０３とを用いて、被テストプログラム５０２をテストする。
【０００３】
図１８は、非特許文献１に記載されたプログラムテストシステムのテスト時の動作フローを示している。まず、テスト実施に先立って、模擬オブジェクト５０３に、被テストプログラムから呼び出された場合にどのような値を返すかなどの振る舞いを設定する（ステップＭ１）。次いで、被テストプログラム５０２を実行し（ステップＭ２）、模擬オブジェクト５０３が正しく呼び出されたかや、期待した値が渡されたかなどを検証する（ステップＭ３）。
【０００４】
ところで、テストシナリオを用いて試験対象のプログラムをテストする技術としては、特許文献１に記載された技術がある。図１９は、特許文献１に記載されたテストシステムの概略構成を示している。この技術では、テストシナリオ５０４と、テストシナリオを実行するテストプログラム５０５とを用い、ＧＵＩ環境における被テストプログラム５０６の動作をテストする。
【０００５】
図２０は、図１９に記載のテストシステムの動作手順を示している。テストプログラム５０５は、テストシナリオ５０４に従って、被テストプログラム５０６にマウス操作などの入力を与える（ステップＧ１）。被テストプログラム５０６は、入力に対する結果として、画面遷移などの出力をテストプログラム５０５に返す。テストプログラム５０５は、テストシナリオ５０４に従って、被テストプログラム５０６が期待した出力を返したか否かを検証する（ステップＧ２）。次いで、テストシナリオ５０４を最後まで実行したか否かを判断し（ステップＧ３）、最後まで実行していないときには、ステップＧ１に戻ってテストを続行する。
【０００６】
【特許文献１】特開２００２−３６６３８７号公報
【非特許文献１】エンドゥ  テスティング：ユニット  テスティング  ウィズ  モック  オブジェクツ（Ｅｎｄｏ−Ｔｅｓｔｉｎｇ：Ｕｎｉｔ  Ｔｅｓｔｉｎｇ  ｗｉｔｈ  Ｍｏｃｋ  Ｏｂｊｅｃｔｓ）（ＵＲＬ  http://www.connextra.com/about/Us/mockobjects.pdf）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
非特許文献１に記載の技術では、被テストプログラムから呼び出される模擬オブジェクトの振る舞いを、被テストプログラムを実行する前に設定する必要がある。このため、テストプログラム上で、ある事象が起こった後のことを、起こる前に書かなければならないという問題がある。また、模擬オブジェクトの振る舞いの設定と、その検証とが離れて書かれることで断片化しやすくなる。このように、特許文献１では、ある手順の流れをテストしたいにもかかわらず、テストプログラムがテスト手順の時系列とは異なる順で書かれ、或いは、断片化されることで、テストプログラムの可読性が悪くなり、メンテナンス性が悪いという問題がある。
【０００８】
また、非特許文献１に記載の技術では、模擬オブジェクトを呼び出して実行を進行することで、最終的にテストプログラムが実行を完了したか否かをテストすることはできる。しかし、テストプログラムが複数のサービス（模擬オブジェクト）を呼び出す場合には、どのような順序で模擬オブジェクトが呼び出されたかを容易に知ることができないという問題がある。
【０００９】
特許文献１に記載の技術は、被テストプログラムに入力を与えて、与えられた入力に対して返された出力を検証するものである。このため、被テストプログラムに入力を与えて、出力を返すまでの間に、被テストプログラムが他のサービスからの入力を受け付け、或いは、他のサービスを呼び出す場合には、その受付順序や呼出し順序まで検証することができないという問題がある。すなわち、特許文献１では、被テストプログラムがサービスを呼び出し、或いは、サービスから呼び出されることで実行が進行するものである場合、そのメッセージ交換順序に対するテストを行うことはできない。
【００１０】
上記各従来技術では、被テストプログラムへの呼び出し順に関しては考慮されているが、被テストプログラムからの呼び出し順に関しては十分に考慮されていない。このため、被テストプログラムによる外部サービスの呼出しと、外部サービスによる被テストプログラムの呼出しとが混在するときには、その順序が設計した通りであるか否かを検証することが困難であるという問題がある。
【００１１】
本発明は、上記従来技術の問題点を解消し、サービス等を呼び出し、或いは、サービス等に呼び出されて処理が進捗する被テストプログラムについて、テストの内容の可読性やテスト自身のメンテナンス性が高いプログラムテスト装置、方法、及び、プログラムを提供することを目的とする。
【００１２】
また、本発明は、被テストプログラムによる呼出しと、サービス等による被テストプログラムの呼出しとが混在する場合でも、テストシナリオに沿った順序で呼出しが行われていることを容易に検証することができるプログラムテスト装置、方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明のプログラムテスト装置は、外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置であって、前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部であって、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるテストシナリオ解釈実行部と、前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信する被テストプログラム実行部と、前記メッセージ受理信号を受信し記憶するメッセージ受理受付部と、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するメッセージ受信部と、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するメッセージ待合せ部とを有する被呼出しサービス模擬部と、を備えることを特徴とする。
【００１４】
本発明のプログラムテスト方法は、外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置であって、前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部と、前記テストシナリオ解釈実行部により前記テストシナリオの実行が開始されると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部と、被テストプログラムに呼び出される外部サービスを模擬し、メッセージ受理受付部と、メッセージ受信部と、メッセージ待合せ部とを有する被呼出しサービス模擬部と、を備えるプログラムテスト装置を用いてテストするプログラムテスト方法であって、前記テストシナリオ解釈実行部が、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるステップと、前記被テストプログラム実行部が、前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信するステップと、前記メッセージ受理受付部が、前記メッセージ受理信号を受信し記憶するステップと、前記メッセージ受信部が、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するステップと、前記メッセージ待合せ部が、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するステップと、を備えたことを特徴とする。
【００１５】
本発明のプログラムは、コンピュータを、外部サービスとの間でメッセージの送受信を行いつつ処理を進行する被テストプログラムを、該被テストプログラムとの間で送受信すべきメッセージが記述されたテストシナリオに従ってテストするプログラムテスト装置として機能させるプログラムであって、前記コンピュータを、前記テストシナリオを記憶装置から読み込み、該読み込んだテストシナリオを解釈して実行するテストシナリオ解釈実行部であって、前記テストシナリオに従って前記被テストプログラムを呼び出し元とするメッセージを受信する際には、メッセージを受理する旨のメッセージ受理信号を送信し、該メッセージ受理信号を送信した後、前記被テストプログラムを呼び出し元とするメッセージを受信するまで前記テストシナリオの進行を停止し、該メッセージを受信すると、前記テストシナリオの進行を再開し、前記テストシナリオに従って前記外部サービスを呼び出し元とするメッセージを送信する際には、当該外部サービスを呼び出し元とするメッセージを送信し、該外部サービスを呼び出し元とするメッセージに対する返信メッセージ又は該メッセージを受信した旨を受信すると前記テストシナリオを進行させるテストシナリオ解釈実行部、前記テストシナリオ解釈実行部より前記テストシナリオが読み込まれると、前記被テストプログラムを読み込み、該読み込んだ被テストプログラムを実行する被テストプログラム実行部であって、該被テストプログラムに従って、少なくとも前記被テストプログラムを呼び出し元とするメッセージを送信し、該メッセージが前記テストシナリオ解釈実行部に送信された後、該メッセージを送信した旨を受信するまで、被テストプログラムの進行を停止し、該メッセージを送信した旨を受信すると、該被テストプログラムの進行を再開し、前記外部サービスを呼び出し元とするメッセージを受信すると、該被テストプログラムに従って、該外部サービスを呼び出し元とするメッセージに対する返信メッセージを送信する被テストプログラム実行部、前記メッセージ受理信号を受信し記憶するメッセージ受理受付部と、前記被テストプログラム実行部から送信された前記被テストプログラムを呼び出し元とするメッセージを受信し記憶するメッセージ受信部と、前記メッセージ受理受付部が前記メッセージ受理信号を受信し、かつ、前記メッセージ受信部が前記被テストプログラムを呼び出し元とするメッセージを受信すると、前記メッセージ受信部が記憶したメッセージを前記テストシナリオ解釈実行部に送信し、該メッセージを送信した旨を前記被テストプログラム実行部に送信するメッセージ待合せ部とを有する被呼出しサービス模擬部、として機能させることを特徴とする。
【００１６】
本発明のプログラムテスト装置、方法、及び、プログラムでは、テストシナリオ側は、テストシナリオに従って、被テストプログラム側が呼び出し元となるメッセージを受信する旨のメッセージ受理信号を送信（発生）し、被テストプログラムによって送信されたメッセージの受信と、メッセージ受理信号との双方が揃うと、被テストプログラム側から送信されたメッセージが、テストシナリオ側に引き渡される。このように、テストシナリオ側は、メッセージ受理信号により、被テストプログラム側が呼び出し元となるメッセージを能動的に受信できるため、そのようなメッセージについても、メッセージの受信順序を、テストシナリオ側で制御することができる。従って、テストシナリオ側からの呼出しと、被テストプログラム側からの呼出しとを分離することなく同じスキームで実施でき、テストシナリオの断片化を避けて、テストシナリオの可読性やメンテナンス性を向上することができる。また、テストシナリオで示されるメッセージ送受信順序が、そのまま被テストプログラムによるメッセージ送受信の順序となるため、テストシナリオの構成が理解しやすくなる。
【００１７】
本発明のプログラムテスト装置では、前記メッセージ待合せ部は、前記メッセージ受理受付部によるメッセージ受理信号の受信、及び、前記メッセージ受信部によるメッセージの受信の何れか一方が発生してから、所定時間内に他方が発生しないと、前記テストシナリオ解釈実行部に、テストに失敗した旨を送信する構成を採用できる。この場合、例えばテストの進行が止まったままとなる事態を避けることができる。
【００１８】
本発明のプログラムテスト装置では、前記メッセージ待合せ部は、前記テストシナリオ解釈実行部にメッセージを送信すると、被テストプログラムによる呼出しが完了した旨を前記被テストプログラム実行部に送信する構成を採用できる。また、前記被テストプログラム実行部は、前記被呼出しサービス模擬部にメッセージを送信した後、該被呼出しサービス模擬部から前記呼出しが完了した旨を受信するまで、被テストプログラムの進行を停止する構成を採用できる。この場合、被テストプログラム実行部は、呼出しを完了したことを確認した後に、次の処理を開始できる。
【００１９】
本発明のプログラムテスト装置では、前記被呼出しサービス模擬部は、前記テストシナリオ解釈実行部から送信された、前記被テストプログラムを呼び出し元とするメッセージに対する返信メッセージを受信し記憶する返信メッセージ受信部と、前記メッセージ待合せ部が被テストプログラムを呼び出し元とするメッセージをテストシナリオ解釈実行部に送信し、かつ、前記返信メッセージ受信部が前記返信メッセージを受信すると、前記返信メッセージ受信部が記憶した返信メッセージを前記被テストプログラム実行部に送信する返信メッセージ待合せ部とを更に有する構成を採用できる。被テストプログラム側からの呼出しに対して、外部サービス側から返信メッセージが必要な場合がある。この場合には、被呼出しサービス模擬部において、テストシナリオ解釈実行部へメッセージを送信した後に、テストシナリオ解釈実行部から送信される返信メッセージを待ち合わせることで、被テストプログラム側へ返信メッセージを送信することができる。このようにすることで、返信メッセージをテストシナリオで指定することができ、被呼出しサービス模擬部にあらかじめ返信メッセージを設定する場合に比して、テストシナリオの可読性を向上することができる。
【００２０】
本発明のプログラムテスト装置では、前記被テストプログラム実行部は、前記被呼出しサービス模擬部にメッセージを送信した後、該被呼出しサービス模擬部から前記返信メッセージを受信するまで、被テストプログラムの進行を停止する構成を採用できる。また、前記返信メッセージ待合せ部は、前記被テストプログラム実行部に返信メッセージを送信すると、前記テストシナリオ解釈実行部に、返信メッセージの送信が完了した旨を送信する構成を採用できる。この場合、被テストプログラム実行部は、返信メッセージの受信によって呼出しを完了し、次の処理を開始できる。
【００２１】
本発明のプログラムテスト装置では、前記テストシナリオ解釈実行部は、前記被呼出しサービス模擬部に返信メッセージを送信した後、該被呼出しサービス模擬部から前記返信メッセージの送信が完了した旨を受信するまで、テストシナリオの進行を停止する構成を採用できる。この場合、テストシナリオ解釈実行部は、返信メッセージが送信されたことを確認した後に、テストシナリオの進行を再開できる。
【００２２】
本発明のプログラムテスト装置では、前記テストシナリオ解釈実行部は、前記返信メッセージの送信後、所定時間以内に、前記返信メッセージの送信が完了した旨を受信しないときには、テストに失敗した旨を出力する構成を採用できる。この場合、テストシナリオの進行が停止したままになる事態を回避できる。
【００２３】
本発明のプログラムテスト装置では、前記テストシナリオ解釈実行部は、テストシナリオを最後まで進行すると、テストに成功した旨を出力する構成を採用できる。テストシナリオには、被テストプログラムが外部サービスとの間で送受信するメッセージを、メッセージ送受信順序に従って記述できる。このため、テストシナリオを最後まで正しく実行できたということは、テストに成功したこと意味する。
【発明の効果】
【００２４】
本発明のプログラムテスト装置、方法、及び、プログラムでは、テストシナリオ側は、メッセージ受理信号の送信（発生）により、被テストプログラム側が呼び出し元となるメッセージを能動的に受信できる。このため、テストシナリオ側からの呼出しと、被テストプログラム側からの呼出しとを分離することなく同じスキームで実施でき、テストシナリオの断片化を避けて、テストシナリオの可読性やメンテナンス性を向上することができる。また、テストシナリオで示されるメッセージ送受信順序が、被テストプログラムによるメッセージ送受信の順序となるため、テストシナリオの構成が理解しやすくなる。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図１は、本発明の第１実施形態のプログラムテストシステムの構成を示している。テストシステム１０は、コンピュータ（中央処理装置、プロセッサ、又はデータ処理装置）１００と、テストシナリオ格納部１８０と、被テストプログラム格納部１９０とを有する。コンピュータ１００は、プログラム制御により動作し、テストシナリオ解釈実行部１０１と、被テストプログラム実行部１０２と、被テストプログラム呼出し部１０３と、被呼出しサービス模擬部１１０とを有する。
【００２６】
被テストプログラム格納部１９０は、テスト対象の被テストプログラム１６０を格納する。被テストプログラム１６０は、他のサービスやモジュールからメッセージを受信し、或いは、他のサービス等に対してメッセージを送信しつつ処理を進行する。被テストプログラム１６０としては、例えば、ＷＳ−ＢＰＥＬ（Web Services Business Process Execution Language）などのビジネスプロセス実行言語で書かれたプログラム、シェルスクリプトなどいくつかのコマンドを組み合わせて動作するプログラム、或いは、ソケットを用いていくつかのサーバやデーモンなどと連携するネットワークプログラムなどがある。被テストプログラム実行部１０２は、被テストプログラム１６０を読み込み、テストシナリオ解釈実行部１０１との間でメッセージの送受信をしつつ、被テストプログラム１６０に従った動作を実行する。
【００２７】
テストシナリオ格納部１８０は、被テストプログラム１６０のテストに用いられるテストシナリオ１５０を格納する。テストシナリオ１５０には、被テストプログラム１６０が、どのサービスとの間で、どのようなメッセージで、どのような方式でメッセージを交換するかについて、メッセージ交換が起きることを確認したい順で並べられている。テストシナリオ解釈実行部１０１は、テストシナリオ１５０を読み込み、テストシナリオ１５０に従って、被テストプログラム実行部１０２との間でメッセージを送受信しつつ、動作を進行する。
【００２８】
ここで、メッセージの送受信の方式には、同期送信・受信と、非同期送信・受信とがある。同期送信・受信とは、メッセージ送信後、相手側（送信先）に処理が移り、相手側の処理が終了すると、返信メッセージがある場合にはこれを受け取って、送信元の処理が再開する送信・受信形態を指す。一方、メッセージの非同期送信・受信とは、メッセージ送信後、直ちに次の処理に移ることができる送信・受信形態を指す。本実施形態においては、テストシナリオ解釈実行部１０１は、自身が呼び出し元となるときには、被テストプログラム実行部１０２との間で、同期又は非同期でメッセージを送受信する。また、被テストプログラム実行部１０２が呼び出し元となるときには、被テストプログラム実行部１０２から、メッセージを非同期で受信する。
【００２９】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、被テストプログラム１６０が外部サービスから同期又は非同期でメッセージを受信する旨が記述されている場合には、テストシナリオ解釈実行部１０１を呼び出し元とし、被テストプログラム呼出し部１０３を介して、同期又は非同期で、呼び出し先の被テストプログラム実行部１０２にメッセージを送信する。このとき、テストシナリオ解釈実行部１０１が送信したメッセージが同期送信である場合であって、被テストプログラム実行部１０２が、受信したメッセージに対して返信メッセージを同期送信するときには、テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２から、被テストプログラム呼出し部１０３を介して、その返信メッセージを同期受信する。
【００３０】
被呼出しサービス模擬部１１０は、被テストプログラム１６０によって呼び出される外部サービスを模擬し、呼び出される外部サービスに対応して用意される。テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、外部サービスが、被テストプログラム実行部１０２が呼び出し元となって非同期送信されたメッセージを受信する旨が記述されているときには、そのメッセージを、対応する被呼出しサービス模擬部１１０を介して受信する。
【００３１】
被呼出しサービス模擬部１１０は、メッセージ受理受付部１１１と、メッセージ待合せ部１１２と、メッセージ受信部１１３とを備える。被テストプログラム実行部１０２は、被テストプログラム１６０に従って、自身が呼び出し元となって、外部サービスにメッセージを非同期で送信する場合には、その外部サービスに対応する被呼出しサービス模擬部１１０にメッセージを送信する。メッセージ受信部１１３は、被テストプログラム実行部１０２が送信したメッセージを受信する。メッセージ受信部１１３は、被テストプログラム実行部１０２からメッセージを受信すると、その旨をメッセージ待合せ部１１２に通知する。
【００３２】
一方、テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、被テストプログラム実行部１０２が呼び出し元となって外部サービスにメッセージを送信する旨が記述されている場合には、対応する被呼出しサービス模擬部１１０にメッセージ受理を送信する。メッセージ受理受付部１１１は、テストシナリオ解釈実行部１０１が送信したメッセージ受理を受け付けて、メッセージ受理を受信した旨をメッセージ待合せ部１１２に通知する。
【００３３】
メッセージ待合せ部１１２は、被テストプログラム実行部１０２が送信するメッセージと、テストシナリオ解釈実行部１０１が送信するメッセージ受理との待ち合わせを行う。メッセージ待合せ部１１２は、メッセージ受信部１１３からメッセージを受信した旨の通知がされ、かつ、メッセージ受理受付部１１１がメッセージ受理を受け付けた旨の通知がされると、テストシナリオ解釈実行部１０１に受信したメッセージを送信する。また、被テストプログラム実行部１０２にメッセージを送信した旨を通知する。
【００３４】
メッセージ待合せ部１１２におけるメッセージ待合せの機構には、例えば、Ｊａｖａ言語の標準ライブラリに含まれるｊａｖａ．ｕｔｉｌ．ｃｏｎｃｕｒｒｅｎｔ．ＢｌｏｃｋｉｎｇＱｕｅｕｅなどを用いることができる。また、メッセージ及びメッセージ受理を記憶する領域と、それら領域にメッセージ又はメッセージ受理が記憶されたか否かをチェックするフラグとを設けて、フラグがセットされていなければ、セットされるまで待機し、フラグがセットされると、記憶されたメッセージ及びメッセージ受理を、それぞれテストシナリオ解釈実行部１０１及び被テストプログラム実行部１０２に送信する機構を採用することができる。
【００３５】
被テストプログラム実行部１０２は、被呼出しサービス模擬部１１０にメッセージを送信した後、被テストプログラム１６０の進行を一時停止する。また、テストシナリオ解釈実行部１０１は、メッセージ受理の送信後、テストシナリオ１５０の進行を一時停止する。テストシナリオ解釈実行部１０１は、被呼出しサービス模擬部１１０からメッセージを受信すると、テストシナリオ１５０の進行を再開し、被テストプログラム実行部１０２は、被呼出しサービス模擬部１１０から、テストシナリオ解釈実行部１０１にメッセージを送信した旨の通知を受け取ると、被テストプログラム１６０の進行を再開する。
【００３６】
なお、テストシステム１０は、典型的には、図２に示すように、ＣＰＵ１００１、メモリ１００２、及び、外部記憶装置１００３を含むコンピュータ１０００と、入力装置１００４と、出力装置１００５とを有するコンピュータシステムとして構成できる。テストシステム１０は、テストを実施するためのテスト作成実施プログラム１０１０をメモリ１００２上に読み込んで動作する。テストシナリオ１５０及び被テストプログラム１６０（図１）は、それぞれメモリ１００２又は外部記憶装置１００３に格納されている。テスト開始に際して、利用者は、マウスやキーボード、タッチパネルなどの入力装置１００４を通じて、テストの作成及び実施の開始を指令する。テストの結果は、ディスプレイ等の出力装置１００５に表示される。
【００３７】
図３は、テストシステムの動作手順をフローチャートで示している。利用者が入力装置１００４（図２）を通じてテストの開始を指示すると、テストシナリオ解釈実行部１０１（図１）は、テストシナリオ格納部１８０から、テストシナリオ１５０を読み込む（ステップＡ１）。また、被テストプログラム実行部１０２は、被テストプログラム格納部１９０から、被テストプログラム１６０を読み込み（ステップＡ２）、その実行を開始する（ステップＡ３）。その後、テストシナリオ解釈実行部１０１は、ステップＡ１で読み込んだテストシナリオ１５０の実行を開始する（ステップＡ４）。
【００３８】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、被テストプログラム実行部１０２にメッセージを送信するという指示があるか否かを調べ（ステップＡ５）、そのような指示があるときには、被テストプログラム呼出し部１０３を介して、被テストプログラム実行部１０２にメッセージを送信する（ステップＡ９）。テストシナリオ解釈実行部１０１は、外部サービスが被テストプログラム実行部１０２からメッセージを受信するという指示があるか否かを調べ（ステップＡ６）、そのような指示があるときには、被テストプログラム１６０からメッセージを受信し（ステップＡ１０）、受信したメッセージがテストシナリオ１５０で示されるメッセージであるか否かを確認する。テストシナリオ解釈実行部１０１は、メッセージが一致していないときには、テストに失敗したと判断して、その旨を出力する。
【００３９】
ステップＡ１０では、テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２から同期送信したメッセージに対する返信メッセージを受信する場合には、被テストプログラム呼出し部１０３を介して、返信メッセージを受信する。一方、被テストプログラム実行部１０２側が呼び出し元となって送信されたメッセージを受信する場合には、メッセージを受信すべき外部サービスに対応する被呼出しサービス模擬部１１０にメッセージ受理を送信し、被呼出しサービス模擬部１１０を介して、メッセージを受信する。
【００４０】
図４は、被テストプログラム実行部１０２側がメッセージを送信しテストシナリオ解釈実行部１０１がメッセージを受信する際の被呼出しサービス模擬部１１０の動作手順を示している。メッセージ受理受付部１１１は、テストシナリオ解釈実行部１０１からのメッセージ受理を受け付け（ステップＢ１）、メッセージ受理を受信すると、その旨を、メッセージ待合せ部１１２に通知し、メッセージ待合せ部１１２に、被テストプログラム実行部１０２からメッセージを受信した旨の通知がされるまで待機する（ステップＢ２）。
【００４１】
一方、被テストプログラム実行部１０２は、被テストプログラム１６０に従って、メッセージを送信すべき外部サービスに対応する被呼出しサービス模擬部１１０にメッセージを送信する。メッセージ受信部１１３は、被テストプログラム実行部１０２からのメッセージを受け付け（ステップＢ１１）、メッセージを受信すると、その旨をメッセージ待合せ部１１２に通知し、メッセージ待合せ部１１２に、テストシナリオ解釈実行部１０１からメッセージ受理を受け付けた旨の通知がされるまで待機する（ステップＢ１２）。
【００４２】
メッセージ待合せ部１１２は、メッセージを受信した旨の通知を受け、かつ、メッセージ受理を受け付けた旨の通知を受けると、テストシナリオ解釈実行部１０１に、被テストプログラム実行部１０２から受信したメッセージを送信する（ステップＢ３）。また、被テストプログラム実行部１０２に、テストシナリオ解釈実行部１０１にメッセージを送信した旨の通知を送信する（ステップＢ１３）。被テストプログラム実行部１０２は、メッセージ受理を受信すると、被テストプログラム１６０からの呼出しを完了し、被テストプログラム１６０の進行を再開する。また、テストシナリオ解釈実行部１０１は、被呼出しサービス模擬部１１０からメッセージを受信すると、停止していたテストシナリオ１５０の進行を再開する。
【００４３】
図３に戻り、テストシナリオ解釈実行部１０１は、テストシナリオ１５０を最後まで実行したか否かを判断する（ステップＡ７）。テストシナリオ解釈実行部１０１は、テストシナリオ１５０の実行が完了していないと判断したときには、ステップＡ５に戻って、テストシナリオ１５０に記述された次の処理を実行する。テストシナリオ解釈実行部１０１は、テストシナリオ１５０の実行が完了した判断すると、テストが成功した旨を出力し（ステップＡ８）、処理を終了する。
【００４４】
以下、テストシステム１０の動作について、具体例を挙げて説明する。以下では、被テストプログラム１６０（被テストプログラム実行部１０２）が、図５に示すように、複数のサービス（サービスＡ〜サービスＣ）との間でメッセージの送受信を行って動作する場合について考える。この例では、テストシナリオ１５０には、図６に示すように、各サービスとの間でのメッセージのやり取り、及び、その方法（同期受信・送信、又は、非同期受信・送信）が、メッセージ交換が生起すべき順番に並べられる。
【００４５】
図５の例では、被テストプログラム１６０が呼び出すサービスは、サービスＣであるため、コンピュータ１００内に、サービスＣに対応する被呼出しサービス模擬部１１０を用意する。被呼出しサービス模擬部１１０は、テスト開始に先立って、テスト（シナリオ）の作成者によって生成することができ、或いは、コンピュータ１００にテストシナリオ１５０を解析させることにより、機械的に生成してもよい。例えば、模擬したいサービスについて、そのサービスがどのような形式のメッセージをやり取りするかを定めたインタフェース定義を入力として、その定義に基づいてメッセージ受信部１１３を生成し、これと、あらかじめ用意しておいたメッセージ受理受付部１１１及びメッセージ待合せ部１１２とを合成して被呼出しサービス模擬部１１０を自動生成する。
【００４６】
テストシナリオ解釈実行部１０１は、まず、テストシナリオ１５０の第１項目（＃１）を読み込み、被テストプログラム１６０が、サービスＡからメッセージ１を非同期で受信することを知る。次いで、メッセージ１の内容を取得し、被テストプログラム呼出し部１０３を介して、被テストプログラム１６０に、メッセージ１を非同期で送信する。ここで、メッセージ１の内容は、テストシナリオ１５０内に直接記述することができる。或いは、テストシナリオ１５０にはポインタを記述しておき、そのポインタを参照して、外部記憶装置１００３やメモリ１００２（図２）からメッセージ１の内容を取得してもよい。テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２から、メッセージ１を受信した旨の応答を受け取ると、この項目に関しては、成功したとみなす。
【００４７】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０の第１項目に成功すると、第２項目（＃２）を読み込み、被テストプログラム１６０が、サービスＢからのメッセージ２を同期受信し、その後、メッセージ３を同期で返信する（＃３）ことを知る。テストシナリオ解釈実行部１０１は、メッセージ２の内容を取得し、取得したメッセージ２を、被テストプログラム呼出し部１０３を介して、被テストプログラム１６０に同期送信する。また、被テストプログラム呼出し部１０３を介して、被テストプログラム実行部１０２から、受信したメッセージ２に対する返信メッセージであるメッセージ３を受信する。
【００４８】
テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２から返信メッセージを受信すると、受信すべきメッセージ３の内容を取得し、受信した返信メッセージとメッセージ３とを比較して、メッセージ３を正しく受信できたか否かを判断する。テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２からメッセージ３を正しく受信できたときには、テストシナリオ１５０の第２項目及び第３項目に関しては、成功したとみなす。
【００４９】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０の第２項目及び第３項目に成功すると、第４項目（＃４）を読み込み、被テストプログラム１６０がサービスＣにメッセージ４を非同期で送信することを知る。テストシナリオ解釈実行部１０１は、サービスＣに対応する被呼出しサービス模擬部１１０にメッセージ受理を送信し、テストシナリオ１５０の進行を一時停止する。一方、被テストプログラム実行部１０２は、メッセージ３の送信後、被テストプログラム１６０に従った処理を実行し、その内容に従って、任意のタイミングで、メッセージ４をサービスＣに対応する被呼出しサービス模擬部１０３に送信し、被テストプログラム１６０の進行を一時停止する。
【００５０】
被テストプログラム実行部１０２によるメッセージ４の送信と、テストシナリオ解釈実行部１０１によるメッセージ受理の送信とは、どちらが先であってもかまわない。その理由は、メッセージ待合せ部１１２がメッセージ受理とメッセージの受信との待ち合わせを行うからである。サービスＣに対応する被呼出しサービス模擬部１１０は、メッセージ待合せ部１１２が、メッセージ受理受付部１１１からメッセージ受理を受信した旨の通知を受け、かつ、メッセージ受信部１１３からメッセージを受信した旨の通知を受けると、メッセージ４をテストシナリオ解釈実行部１０１に送信し、メッセージを送信した旨を被テストプログラム実行部１０２に送信する。テストシナリオ解釈実行部１０１は、受信すべきメッセージ４の内容を取得し、受信したメッセージとメッセージ４とを比較して、メッセージ４を正しく受信できたか否かを判断する。テストシナリオ１５０を最後まで正しく実行できたときには、ディスプレイやプリンタなど外部出力装置１００５（図２）にテストの結果を出力し、或いは、メモリ１００２やディスクなどの記憶装置１００３にテストの結果を書き込む。
【００５１】
テストシナリオ解釈実行部１０１は、被テストプログラム１６０のサービスＣへのメッセージの送信が行われるまで、テストシナリオ１５０の進行を中断することで、被テストプログラム１６０が、どのタイミングでメッセージを送信したかを認識することができる。すなわち、被テストプログラム実行部１０２がサービスＣにメッセージを送信する前に、他のサービスへメッセージを送信したとすると、テストシナリオ解釈実行部１０１は、サービスＣに対応する被呼出しサービス模擬部１１０からメッセージを受信することができないため、メッセージ交換順序が不正であることがわかる。また、被テストプログラム実行部１０２が、サービスＢとの間のメッセージ送受信の前にサービスＣにメッセージを送信した場合には、テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２とサービスＢとの間のメッセージの送受信が終わるまで、サービスＣにメッセージ受理を送信しないため、メッセージ交換順序が不正であることがわかる。
【００５２】
一般に、被テストプログラム実行部１０２側が呼び出し元となってメッセージを送信する場合には、呼出しを受ける側のテストシナリオ解釈実行部１０１は、受動的にメッセージを受信することになるため、メッセージの受信タイミングを制御することができない。本実施形態では、テストシナリオ解釈実行部１０１は、メッセージを受信すべきタイミングで、メッセージを受信すべきサービスに対応する被呼出しサービス模擬部１１０にメッセージ受理を送信することで、能動的にメッセージを受信するため、テストシナリオ解釈実行部１０１は、自身が呼出しを受ける側になる場合でも、能動的にメッセージを受信できる。
【００５３】
本実施形態では、被呼出しサービス模擬部１１０において、テストシナリオ解釈実行部１０１が送信したメッセージ受理と、被テストプログラム実行部１０２が送信したメッセージとの待ち合わせを行う。これにより、被テストプログラム１６０からの呼出し及び被テストプログラム１６０への呼出しの順序を、テストシナリオ１５０側で制御することができる。従って、被テストプログラム１６０からの呼出しと被テストプログラム１６０への呼出しとを分離することなく同じスキームで実施でき、テストシナリオ１５０の断片化を避けることができることにより、テストシナリオの可読性やメンテナンス性を向上することができる。また、テストシナリオ１５０で示される順序が、そのまま被テストプログラム１６０によるメッセージ交換の順序となるため、テストシナリオ１５０の構成が理解しやすくなる。
【００５４】
上記のように、テストシナリオ１５０側が、被テストプログラム１６０を呼び出すタイミングだけでなく、被テストプログラム１６０が送信したメッセージを受信するタイミングを制御できるようになった結果、テストシナリオ１５０側で、被テストプログラム１６０によるメッセージ交換の進捗が制御できる。このため、テストシナリオ１５０の進捗によって、被テストプログラム１６０によるメッセージ送受信の順序を検証することができ、ログを解析してメッセージ送受信の順序を調べる必要がないことから、メッセージ送受信の検証が容易となる。また、被テストプログラム１６０がサービスとの間で、テストシナリオ１５０の順序通りにメッセージを交換しない場合には、テストシナリオ１５０が進捗できなくなることから、テストシナリオ１５０を最後まで実行できたか否かを調べることにより、被テストプログラム１６０によるメッセージ交換の順序が正しく行われたか否かを容易に検証することができる。
【００５５】
図７は、本発明の第２実施形態のテストシステムの構成を示している。本実施形態は、コンピュータ１００ａが、被呼出しサービス模擬部１１０（図１）に代えて、図７に示す構成を有する被呼出しサービス模擬部１２０を備える点で、第１実施形態と相違する。被呼出しサービス模擬部１２０は、第１実施形態の被呼出しサービス模擬部１１０の構成に加えて、返信メッセージ受付部１１４及び返信メッセージ待合せ部１１５を更に有する。第１実施形態では、外部サービス等にメッセージを非同期で送信するプログラムを被テストプログラム１６０としたが、本実施形態では、外部サービス等にメッセージを同期送信するプログラムを、被テストプログラム１６０とする。
【００５６】
メッセージ受信部１１３は、被テストプログラム実行部１０２から同期送信で送信されたメッセージを受信し、メッセージを受信した旨をメッセージ待合せ部１１２に通知する。メッセージ受理受付部１１１は、テストシナリオ解釈実行部１０１によって送信されたメッセージ受理を受け付けて、その旨をメッセージ待合せ部１１２に通知する。メッセージ待合せ部１１２は、メッセージと、メッセージ受理とが揃うと、被テストプログラム実行部１０２が同期送信したメッセージを、テストシナリオ解釈実行部１０１に送信し、メッセージを送信した旨を、メッセージ受信部１１３に通知する。
【００５７】
メッセージ受信部１１３は、メッセージを送信した旨の通知を受けると、返信メッセージ待合せ部１１５に、返信メッセージを受理する旨の通知を行う。テストシナリオ解釈実行部１０１は、受信したメッセージがテストシナリオ１５０で示されるメッセージと一致するか否かを確認し、メッセージの確認後、返信メッセージを被呼出しサービス模擬部１２０に送信する。返信メッセージ受付部１１４は、テストシナリオ解釈実行部１０１から送信された返信メッセージを受け付けて、その旨を返信メッセージ待合せ部１１５に送信する。返信メッセージ待合せ部１２０は、返信メッセージと、返信メッセージ受理とが揃うと、被テストプログラム実行部１０２に返信メッセージを送信し、被テストプログラム実行部１０２に返信メッセージを送信した旨をテストシナリオ解釈実行部１０１に送信する。
【００５８】
図８は、テストシステムの動作手順をフローチャートで示している。テストシナリオ解釈実行部１０１は、テストシナリオ格納部１８０から、テストシナリオ１５０を読み込み、読み込んだテストシナリオ１５０の実行を開始する（ステップＣ１）。また、被テストプログラム実行部１０２は、被テストプログラム格納部１９０から、被テストプログラム１６０を読み込み、その実行を開始する。
【００５９】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、被テストプログラム実行部１０２にメッセージを送信するという指示があるか否かを調べ（ステップＣ２）、そのような指示があるときには、被テストプログラム呼出し部１０３を介して、被テストプログラム実行部１０２にメッセージを送信する（ステップＣ７）。また、テストシナリオ解釈実行部１０１は、外部サービスが被テストプログラム実行部１０２からメッセージを受信するという指示があるか否かを調べ（ステップＣ３）、そのような指示があるときには、被テストプログラム１６０からメッセージを受信し（ステップＣ８）、受信したメッセージがテストシナリオ１５０で示されるメッセージであるか否かを確認する。
【００６０】
ステップＣ８では、テストシナリオ解釈実行部１０１は、被テストプログラム実行部１０２から同期送信したメッセージに対する返信メッセージを受信する場合には、被テストプログラム呼出し部１０３を介して、返信メッセージを受信する。一方、被テストプログラム実行部１０２側が呼び出し元となって送信されたメッセージを受信する場合には、メッセージを受信すべき外部サービスに対応する被呼出しサービス模擬部１１０にメッセージ受理を送信し、被呼出しサービス模擬部１１０を介して、メッセージを受信する。
【００６１】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０に、同期受信したメッセージに対する返信メッセージを送信するという指示があるか否かを調べる（ステップＣ４）。テストシナリオ解釈実行部１０１は、そのような指示があるときには、被呼出しサービス模擬部１２０を介して、被テストプログラム実行部１０２に返信メッセージを送信する（ステップＣ９）。
【００６２】
図９は、被テストプログラム実行部１０２がメッセージを同期送信して、返信メッセージを受信する際の被呼出しサービス模擬部１２０の動作手順を示している。メッセージ受理受付部１１１は、テストシナリオ解釈実行部１０１からのメッセージ受理を受け付け（ステップＤ１）、メッセージ受理を受信すると、その旨を、メッセージ待合せ部１１２に通知し、メッセージ待合せ部１１２に、被テストプログラム実行部１０２からのメッセージを受信した旨の通知がされるまで待機する（ステップＤ２）。
【００６３】
一方、被テストプログラム実行部１０２は、被テストプログラム１６０に従って、メッセージを送信すべき外部サービスに対応する被呼出しサービス模擬部１１０にメッセージを送信する。メッセージ受信部１１３は、被テストプログラム実行部１０２からのメッセージを受け付け（ステップＤ１１）、メッセージを受信すると、その旨をメッセージ待合せ部１１２に通知し、メッセージ待合せ部１１２に、テストシナリオ解釈実行部１０１からメッセージ受理を受け付けた旨の通知がされるまで待機する（ステップＤ１２）。
【００６４】
メッセージ待合せ部１１２は、メッセージを受信した旨の通知を受け、かつ、メッセージ受理を受け付けた旨の通知を受けると、テストシナリオ解釈実行部１０１に、被テストプログラム実行部１０２から受信したメッセージを送信する（ステップＤ３）。このとき、メッセージ待合せ部１１２は、メッセージ受信部１１３に、テストシナリオ解釈実行部１０１にメッセージを送信した旨を通知する。
【００６５】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０に従って、返信メッセージを被呼出しサービス模擬部１２０に送信する。返信メッセージ受付部１１４は、テストシナリオ解釈実行部１０１が送信した返信メッセージを受け付けて（ステップＤ４）、返信メッセージを受信した旨を返信メッセージ待合せ部１１５に通知し、返信メッセージ待合せ部１１５に、返信メッセージを受理する旨の通知がされるまで待機する（ステップＤ５）。
【００６６】
一方、メッセージ受信部１１３は、メッセージ待合せ部１１２から、テストシナリオ解釈実行部１０１にメッセージを送信した旨の通知を受け取ると、返信メッセージを受理する旨を、返信メッセージ待合せ部１１５に通知する。その後、返信メッセージ待合せ部１１５に、テストシナリオ解釈実行部１０１からの返信メッセージを受信した旨の通知がされるまで待機する（ステップＤ１３）。
【００６７】
返信メッセージ待合せ部１１５は、返信メッセージと、返信メッセージ受理とが揃うと、被テストプログラム実行部１０２に返信メッセージを送信し（ステップＤ１４）、テストシナリオ解釈実行部１０１に返信メッセージを送信した旨を通知する（ステップＤ６）。被テストプログラム実行部１０２は、返信メッセージを受信すると、メッセージの同期送信・受信の処理を終了し、被テストプログラム１６０の進行を再開する。テストシナリオ解釈実行部１０１は、返信メッセージを送信した旨の通知を受け取ると、テストシナリオ１５０の進行を再開する。
【００６８】
図８に戻り、テストシナリオ解釈実行部１０１は、テストシナリオ１５０を最後まで実行したか否かを判断する（ステップＣ５）。テストシナリオ解釈実行部１０１は、テストシナリオ１５０の実行が完了していないと判断したときには、ステップＣ２に戻って、テストシナリオ１５０に記述された次の処理を実行する。テストシナリオ解釈実行部１０１は、テストシナリオ１５０の実行が完了した判断すると、テストが成功した旨を出力し（ステップＣ６）、処理を終了する。
【００６９】
次に、本実施形態のテストシステム１０ａの動作について、具体例を用いて説明する。図１０は、被テストプログラム１６０と外部サービスとの間のメッセージ交換の様子を示している。図１０では、被テストプログラム１６０が呼び出すサービスは、サービスＤであるため、コンピュータ１００ａ内に、サービスＤに対応する被呼出しサービス模擬部１２０が用意される。図１０に示す被テストプログラム１６０のテストには、図１１に示すテストシナリオ１５０が使用される。このテストシナリオ１５０の第１項〜第３項は、第１実施形態の説明で用いたテストシナリオ１５０（図６）と同じであり、テストシナリオ解釈実行部１０１は、第１実施形態で説明したのと同様な動作により、被テストプログラム１６０との間でメッセージを交換する。
【００７０】
テストシナリオ解釈実行部１０１は、テストシナリオ１５０の第３項（メッセージ３の同期返信）に成功すると、第４項（＃４）を読み込み、被テストプログラム１６０が、サービスＤへメッセージ５を同期送信することを知る。その後、テストシナリオ解釈実行部１０１は、サービスＤに対応する被呼出しサービス模擬部１２０に、メッセージ受理を送信し、テストシナリオ１５０の進行を一時停止する。被テストプログラム実行部１０２は、被テストプログラムに従って、任意のタイミングで、メッセージ５を、サービスＤに対応する被呼出しサービス模擬部１２０に同期送信し、被テストプログラム１６０の進行を一時停止する。
【００７１】
被呼出しサービス模擬部１２０では、メッセージ待合せ部１１２が、メッセージの受信とメッセージ受理の受信とを待ち合わせ、その双方が揃うと、受信したメッセージをテストシナリオ解釈実行部１０１に送信する。メッセージの送信後、メッセージ受信部１１３は、返信メッセージを受理する旨を、返信メッセージ待合せ部１１５に通知する。テストシナリオ解釈実行部１０１は、被呼出しサービス模擬部１２０からメッセージを受信すると、受信したメッセージが、受信すべきメッセージ５と一致することを確認する。
【００７２】
テストシナリオ解釈実行部１０１は、受信メッセージの確認後、テストシナリオ１５０の進行を再開して、その第５項（＃５）を読み込み、被テストプログラム１６０がサービスＤから返信メッセージ６を受信することを知る。テストシナリオ解釈実行部１０１は、送信すべき返信メッセージ６の内容を取得し、サービスＤに対応する被呼出しサービス模擬部１２０に、その返信メッセージ６を送信する。返信メッセージ受付部１１４は、テストシナリオ解釈実行部１０１から返信メッセージ６を受信して、返信メッセージを受信した旨を返信メッセージ待合せ部１１５に通知する。
【００７３】
返信メッセージ待合せ部１１５は、返信メッセージと返信メッセージ受理とが揃うと、返信メッセージ６を被テストプログラム実行部１０２に送信し、返信メッセージを送信した旨をテストシナリオ解釈実行部１０１に通知する。被テストプログラム実行部１０２は、返信メッセージ６を受信すると、サービスＤに対する呼出しを完了して、被テストプログラム１６０の進行を再開する。また、テストシナリオ解釈実行部１０１は、返信メッセージを送信した旨の通知を受けると、テストシナリオ１５０の進行を再開する。
【００７４】
本実施形態では、第１実施形態と同様に、被呼出しサービス模擬部１２０において、テストシナリオ解釈実行部１０１からのメッセージ受理と、被テストプログラム実行部１０２からのメッセージの送信とを、待ち合わせているため、テストシナリオ１５０で示された順序でメッセージの送受信が行われないと、テストシナリオ１５０が進行しなくなる。従って、本実施形態では、テストシナリオ１５０で示されたメッセージの送受信順序が、そのまま被テストプログラム１６０がメッセージを送受信すべき順序となるため、テストシナリオの可読性及びメンテナンス性を向上できる。
【００７５】
また、本実施形態では、返信メッセージ受付部１１４及び返信メッセージ待合せ部１１５によって返信メッセージの待ち合わせを行っているため、被テストプログラム実行部１０１が、被呼出しサービス模擬部１２０を同期呼出しした際には、被テストプログラム実行部１０２が受け取る返信メッセージに関して、その返信メッセージを返すべき時点まで、その返信メッセージの作成及び被呼出しサービス模擬部１２０への受け渡しを遅れさせることができる。すなわち、この返信メッセージの待ち合わせ機構がない場合には、テストシナリオ解釈実行部１０１へメッセージを送信した後に、直ちに被呼出しサービス模擬部１２０から返信メッセージを送信することが必要であるため、被呼出しサービス模擬部１２０に、あらかじめ返信メッセージを設定しておく必要があるが、返信メッセージを待ち合わせることにより、被呼出しサービス模擬部１２０にあらかじめ返信メッセージを設定しておく必要がなく、テストシナリオ１５０において、返信メッセージを指定することが可能となる。この結果、テストシナリオの可読性を向上させることができる。
【００７６】
図１２は、本発明の第３実施形態のテストシステムの構成を示している。本実施形態では、コンピュータ１００ｂは、被呼出しサービス模擬部（非同期）１１０と、被呼出しサービス模擬部（同期）１２０とを備えている。本実施形態のテストシステム１０ｂでは、被呼出しサービス模擬部（非同期）１１０は、第１実施形態の被呼出しサービス模擬部１１０と同様な動作により、被テストプログラム実行部１０２から非同期で送信されたメッセージを、テストシナリオ解釈実行部１０１に送信する。被呼出しサービス模擬部（同期）１２０は、第２実施形態の被呼出しサービス模擬部１２０と同様な動作により、被テストプログラム実行部１０２から同期送信されたメッセージをテストシナリオ解釈実行部１０１に送信し、テストシナリオ解釈実行部１０１が送信したメッセージを被テストプログラム実行部１０２に送信する。
【００７７】
例えば、被テストプログラム１６０が、図１３に示すように、各外部サービスとの間でメッセージの送受信をする場合について考える。この場合、テストシナリオ１５０は、メッセージ送受信順序に従って、図１４に示すように記述される。テストシナリオ１５０の第４項（＃４）では、テストシナリオ解釈実行部１０１は、被呼出しサービス模擬部（非同期）１１０を介して、被テストプログラム実行部１０２によって送信されたメッセージ４を受信する。また、テストシナリオ１５０の第５項（＃５）では、テストシナリオ解釈実行部１０１は、被呼出しサービス模擬部（同期）１２０を介して、メッセージ５を受信し、返信メッセージ６を被テストプログラム実行部１０２に返信する。
【００７８】
本実施形態では、被呼出しサービス模擬部（非同期）１１０と、被呼出しサービス模擬部（同期）１２０と備えることにより、被テストプログラム１６０に、同期送信によるメッセージ送信と、非同期送信によるメッセージ送信とが含まれる場合でも、テストが可能となる。その他の効果は、第１実施形態又は第２実施形態と同様である。
【００７９】
なお、上記各実施形態では、メッセージ待合せ部１１２又は返信メッセージ待合せ部１１５において、（返信）メッセージ受理と（返信）メッセージ受信との双方が揃わないと（待ち合わせが完了しないと）、テストシナリオ１５０の進行が停止したままとなる。このような事態を回避するため、メッセージ待合せ部１１２及び返信メッセージ待合せ部１１５は、メッセージ受理又はメッセージ受信が通知されるとタイマを起動し、所定時間内に、他方が通知されない場合には、待ち合わせを終了して、テストシナリオ１５０を満たさないとして、テストに失敗した旨を出力させる構成を採用することができる。或いは、ポーリングを指定回数だけ実施しても待ち合わせが完了しないときには、テストに失敗した旨を出力させてもよい。これらの場合には、被テストプログラム１６０の誤りによって待ち合わせが完了せず、テストの実施が途中で止まる事態を避けることができる。
【００８０】
また、図１５に示すように、テストシナリオ解釈実行部１０１、被呼出しサービス模擬部１１０、１２０、及び、被テストプログラム呼出し部１０３と、被テストプログラム実行部１０２とを、それぞれ別のコンピュータ２００（クライアント部）、３００（サーバ部）上に実現して、クライアント部２００とサーバ部３００との間をネットワーク４００で接続し、メッセージの送受信をネットワーク４００を介して行う構成を採用することもできる。この場合には、ネットワークを経由したテストの実施が可能となり、リモートで動作する被テストプログラム１６０に対するテストを実施することができる。
【００８１】
図１５に示すテストシステムは、典型的には、図１６に示すコンピュータシステムによって実現できる。このコンピュータシステムの構成は、図２に示した構成を、通信装置２００６、３００６によって、ネットワーク４０００を介して接続した構成に相当する。ネットワーク４０００は、ＬＡＮやＷＡＮ、インターネット等のネットワークとして構成される。通信装置２００６、３００６には、例えばイーサネットワークカード、モデル、ターミナルアダプタなど、ネットワーク４０００を介して通信を行うものを用いることができる。コンピュータ２０００は、テスト作成実施クライアントプログラム２０１０を読み込んで、これを実行することにより、クライアント部２００（図１５）として動作する。また、コンピュータ３０００は、テスト実施サーバプログラム３０１０を読み込んで、サーバ部３００として動作する。
【００８２】
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のプログラムテスト装置、方法、及び、プログラムは、上記実施形態例にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
【産業上の利用可能性】
【００８３】
本発明は、ＷＳ−ＢＰＥＬのようなＷｅｂサービスとの連携を記述したワークフローに対するテストの作成・実施といった用途に適用できる。また、ソケットを使ったネットワークプログラミングをした際のプログラムのテストの作成・実施といった用途にも適用可能である。
【図面の簡単な説明】
【００８４】
【図１】本発明の第１実施形態のプログラムテストシステムの構成を示すブロック図。
【図２】テストシステム１０を実現するコンピュータシステムの構成を示すブロック図。
【図３】テストシステムの動作手順を示すフローチャート。
【図４】被テストプログラム実行部１０２側がメッセージを送信しテストシナリオ解釈実行部１０１がメッセージを受信する際の被呼出しサービス模擬部１１０の動作手順を示すフローチャート。
【図５】被テストプログラムと外部サービスとの間のメッセージ交換の様子を示すブロック図。
【図６】図５に示す被テストプログラムをテストする際に使用されるテストシナリオを示す図。
【図７】本発明の第２実施形態のテストシステムの構成を示すブロック図。
【図８】テストシステムの動作手順を示すフローチャート。
【図９】被テストプログラム実行部１０２がメッセージを同期送信して、返信メッセージを受信する際の被呼出しサービス模擬部１２０の動作手順を示すフローチャート。
【図１０】被テストプログラム１６０と外部サービスとの間のメッセージ交換の様子を示す図。
【図１１】図１０に示す被テストプログラムをテストする際に使用されるテストシナリオを示す図。
【図１２】本発明の第３実施形態のテストシステムの構成を示すブロック図。
【図１３】被テストプログラム１６０と外部サービスとの間のメッセージ交換の様子を示す図。
【図１４】図１３に示す被テストプログラムをテストする際に使用されるテストシナリオを示す図。
【図１５】図１のテストシステムの変形例のテストシステムの構成を示すブロック図。
【図１６】図１５に示すテストシステムを実現するコンピュータシステムの構成を示すブロック図。
【図１７】非特許文献１に記載されたプログラムテストシステムにおけるテストの様子を示す模式図。
【図１８】非特許文献１に記載されたプログラムテストシステムのテスト時の動作フローを示すフローチャート。
【図１９】特許文献１に記載されたテストシステムの概略構成を示すブロック図。
【図２０】図１９に記載のテストシステムの動作手順を示すフローチャート。
【符号の説明】
【００８５】
１０：テストシステム
１００：コンピュータ（中央処理装置、プロセッサ、データ処理装置）
１０１：テストシナリオ解釈実行部
１０２：被テストプログラム実行部
１０３：被テストプログラム呼出し部
１１０、１２０：被呼出しサービス模擬部
１１１：メッセージ受理受付部
１１２：メッセージ待合せ部
１１３：メッセージ受信部
１１４：返信メッセージ受付部
１１５：返信メッセージ待合せ部
１５０：テストシナリオ
１６０：被テストプログラム
１８０：テストシナリオ格納部
１９０：被テストプログラム格納部
２００：クライアント部（コンピュータ）
３００：サーバ部（コンピュータ）
４００：ネットワーク
【図１】
0004696744.tif 000002
【図２】
0004696744.tif 000003
【図３】
0004696744.tif 000004
【図４】
0004696744.tif 000005
【図５】
0004696744.tif 000006
【図６】
0004696744.tif 000007
【図７】
0004696744.tif 000008
【図８】
0004696744.tif 000009
【図９】
0004696744.tif 000010
【図１０】
0004696744.tif 000011
【図１１】
0004696744.tif 000012
【図１２】
0004696744.tif 000013
【図１３】
0004696744.tif 000014
【図１４】
0004696744.tif 000015
【図１５】
0004696744.tif 000016
【図１６】
0004696744.tif 000017
【図１７】
0004696744.tif 000018
【図１８】
0004696744.tif 000019
【図１９】
0004696744.tif 000020
【図２０】
0004696744.tif 000021