(57)【要約】      （修正有）【課題】複数のテスト実行マシンからＧＵＩアプリケーションについての複数のテストスクリプトを適正に実行可能なテスト実行システムを提供する。【解決手段】複数のテスト実行マシン１と、マシン１上でのＧＵＩへの操作に応答するサーバ２と、ＧＵＩのテストスクリプトを格納するＤＢ３と、ＧＵＩへの所定の操作が登録された操作ＤＢ４と、テスト結果に誤りを生じさせる複数のテストスクリプトの並列実行を回避するように排他制御を行う排他制御サーバ５と、を具備し、テスト実行マシン１が操作ＤＢ４に登録されている、テストスクリプト内の操作が設定された実行要求をサーバ５に送信し許可を得てこのテストスクリプトを実行し、排他制御サーバ５が、実行中のテストスクリプト内の操作の応答に誤りを生じさせる虞のある同時実行禁止操作を格納し、実行要求内の操作が同時実行禁止操作を含んでいないときに実行許可通知を応答として返信する構成を有している。【選択図】図１
2010186332.tif 000002
【特許請求の範囲】
【請求項１】
相互に通信可能に接続された、テスト対象のＧＵＩ（Graphical User Interface）アプリケーションが表示するＧＵＩへの各操作が登録された操作データベースと、前記ＧＵＩアプリケーションのテスト内容をなす前記各操作が記録された複数のテストスクリプトを格納するテストスクリプトデータベースと、前記テストスクリプトデータベース内の所定の１つ以上の前記テストスクリプトを一括して実行可能な複数のテスト実行マシンと、前記ＧＵＩへの操作に応答するテスト対象ＧＵＩ操作応答サーバと、前記複数のテスト実行マシン間で行われる前記テストスクリプトの実行をテスト結果に誤りが生じないように排他制御する排他制御サーバと、を具備するテスト実行システムであって、
前記テスト実行マシンは、
一括して実行する前記テストスクリプトのテストスケジュールを更新可能に格納し、前記テストスケジュールに従って、実行予定の前記テストスクリプトが前記テストスケジュールから無くなるまで、実行する前記テストスクリプトについての実行要求であってこのテストスクリプトにおける前記ＧＵＩへの前記操作のうちの前記操作データベースに登録されているものを含む実行要求を作成して前記排他制御サーバに送信し、前記排他制御サーバから実行が許可されるか否かの応答を受信し、許可の応答を受信するまで、同一の前記テストスクリプトについての前記実行要求の送信と前記応答の受信、又は次の前記テストスクリプトについての前記実行要求の作成及び送信と前記応答の受信を繰り返し、許可の応答を受信したときに許可された前記テストスクリプトを実行し、前記テストスクリプトの実行が終了したときに前記テストスケジュールを更新して実行終了通知を前記排他制御サーバに送信し、
前記排他制御サーバは、
前記操作データベースに登録された操作のうちの、他の操作の応答に誤りを生じさせる第１の操作と他の操作の実行によって応答に誤りを生じる第２の操作とからなるトリガ操作が登録されているトリガ操作データベースと、
前記第１の操作によって応答に誤りを生じる操作と前記第２の操作のテスト結果に誤りを生じさせる操作とからなるトリガ関連操作が登録されているトリガ関連操作データベースと、
先に実行が許可された前記テストスクリプト内の前記トリガ関連操作からなる同時実行禁止操作が更新可能に設定された同時実行禁止操作データベースと、
受信した実行要求内の前記各操作と前記同時実行禁止操作データベース内の前記各同時実行禁止操作とで一致するものの有無を判断し、一致するものがある場合に実行を許可しない通知を前記応答として返信し、一致するものがない場合に実行を許可する実行許可通知を前記応答として返信し、前記実行許可通知の送信に先立ち、受信した実行要求内の各操作についての前記トリガ関連操作を前記トリガ関連操作データベースから検索し前記同時実行禁止操作として前記同時実行禁止操作データベースに追加して設定する実行可能性判定部と、
前記実行終了通知に応答して対応する前記同時実行禁止操作を同時実行禁止操作データベースから削除する更新部と、
を備えることを特徴とする、テスト実行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＧＵＩ（Graphical User
Interface）アプリケーションプログラム（以下、単にＧＵＩアプリケーションという。）のテストスクリプトを実行するテスト実行システムに関するものである。
【背景技術】
【０００２】
ＧＵＩへの操作手順をスクリプト内に表現してコンピュータ上で実行させることによって、この操作手順の実行をあたかも人が行ったもののように実現することができる。この技術を利用することによって、従来は人が行っていたＧＵＩアプリケーションのテストを、コンピュータに実行させることができる（例えば、特許文献１、２参照。）。具体的には、テスト内容の操作手順をテストスクリプト内に記載してコンピュータ上で実行させることによって可能となる。
【０００３】
一方、テストスケジュールに従って一連のテストスクリプトを連続的に実行し、テストを纏めて行うことが可能なテストスクリプト一括実行装置が知られている。また、このテストスクリプト一括実行装置を内蔵するテスト実行マシンを備え、複数のＧＵＩアプリケーションのテストをテスト実行マシン上で一括して行うことが可能なテスト実行システムも知られている。
【０００４】
図１５は、従来のテスト実行システムの構成を示すブロック図である。従来のテスト実行システムは、ネットワーク２００を介して通信可能に接続された、テスト実行マシン１００、テスト対象ＧＵＩアプリケーションサーバ２、及びテストスクリプトデータベース３を具備する。ここで、テスト対象ＧＵＩアプリケーションサーバ２は、Ｗｅｂサーバ等として構成され、参照、更新等が可能な共有データベース２１を備える。また、テストスクリプトデータベース３には、テストスクリプトが登録されている。
【０００５】
テスト実行マシン１００は、テストスクリプト一括実行装置１７０、操作入力用の入力部１２０、表示部１３０、テスト対象ＧＵＩアプリケーションクライアント部１４０、テストスクリプト実行部１５０、及び送受信部１６０を備える。テスト対象ＧＵＩアプリケーションクライアント部１４０はテスト対象のＧＵＩアプリケーションのクライアントとなり、テストスクリプト実行部１５０はテストスクリプトを実行可能となっている。
【０００６】
また、テストスクリプト一括実行装置１７０は、テストスケジュール更新部１７１、結果出力部１７２、テストスケジュールを格納するテストスケジュールデータベース１７３、及び実行結果データベース１７４を備える。テストスケジュール更新部１７１は、テストスケジュールデータベース１７３を更新する。また、実行結果データベース１７４には、一括実行中に各テストスクリプトの実行結果が格納されていく。結果出力部１７２は、実行結果を実行結果データベース１７４に保存すると共に出力部１３０に出力して表示させる。
【０００７】
このような構成のテスト実行システムにおいて、テストスクリプト一括実行装置１７０は、入力部１２０を介した操作で一括実行を開始し、テストスケジュールに従って以下の手順を繰り返す。まず、テストスクリプト一括実行装置１７０は、テストスケジュールに従ってテスト対象ＧＵＩアプリケーションクライアント部１４０にテスト対象のＧＵＩアプリケーションの作動を要求する。
【０００８】
次に、テストスクリプト一括実行装置１７０は、テストスケジュールに従ってテストスケジュールに従ってテストスクリプト実行部１５０にテストスクリプトの実行を要求する。次に、テストスクリプト一括実行装置１７０は、テストスクリプトの実行完了後に実行結果を内部の実行結果データベース１７４に保存する。
【０００９】
次に、テストスクリプト一括実行装置１７０のテストスケジュール更新部１７１は、対応するテストスクリプトの実行状態が終了状態になるように、テストスケジュールデータベース１７３を更新する。全テストスクリプトに対して以上の処理が終了したとき、テストスクリプト一括実行装置１７０の結果出力部１７２は、実行結果データベース１７４から実行結果を表示部１３０に出力して表示させる。
【００１０】
このように、従来のテスト実行システムによって一括実行が可能になったが、近年増えてきた大規模システムの開発においては、種々のテストが必要となり、大量のテストスクリプトを実行する必要が生じている。大量のテストスクリプトの実行に要する膨大な時間を短縮するため、テストスクリプトを複数のテストスクリプト一括実行装置１７０に分担させて実効させることが検討されてきている。この場合、各テストスクリプト一括実行装置１７０は、分担されたテストスケジュールに従ってテストを実行する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００５−２６６９５４号公報
【特許文献２】特開２００７−１０２６５４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、従来のテスト実行システムでは、テストスクリプトを複数のテスト実行マシンから適正に実行できない場合があるという問題を有していた。具体的には、共有データベースを複数のクライアントが参照したり更新したりするＧＵＩアプリケーションに対しては、テスト中の参照と更新のタイミングによっては正しい結果が得られない場合がある。例えば、並列して実行されたとき、あるテストスクリプトにおける共有データベースを参照するテスト操作で、他のテストスクリプトによって更新された内容を参照することとなる場合がある。
【００１３】
各テストスクリプトの処理時間が正確に得られるのであれば、テスト結果に影響しうるテストスクリプトが同時に実行されないように、テストスケジュールを調整することができる。しかしながら、実際には、ネットワークやテスト対象アプリケーションの負荷状態等の様々な要因により、テストスクリプトの実行間はその都度変動する。そのため、上記のようなテストスクリプトの処理時間に基づいてテストスケジュールを調整することでは、問題は解消しない。
【００１４】
以上の現状に鑑み、本発明の目的は、複数のテスト実行マシンからＧＵＩアプリケーションについての複数のテストスクリプトを適正に実行可能なテスト実行システムを提供することにある。
【課題を解決するための手段】
【００１５】
上記の課題を解決すべく、本発明は以下の構成を提供する。
請求項１に係る発明は、相互に通信可能に接続された、テスト対象のＧＵＩアプリケーションが表示するＧＵＩへの各操作が登録された操作データベースと、前記ＧＵＩアプリケーションのテスト内容をなす前記各操作が記録された複数のテストスクリプトを格納するテストスクリプトデータベースと、前記テストスクリプトデータベース内の所定の１つ以上の前記テストスクリプトを一括して実行可能な複数のテスト実行マシンと、前記ＧＵＩへの操作に応答するテスト対象ＧＵＩ操作応答サーバと、前記複数のテスト実行マシン間で行われる前記テストスクリプトの実行をテスト結果に誤りが生じないように排他制御する排他制御サーバと、を具備するテスト実行システムであって、
前記テスト実行マシンは、
一括して実行する前記テストスクリプトのテストスケジュールを更新可能に格納し、前記テストスケジュールに従って、実行予定の前記テストスクリプトが前記テストスケジュールから無くなるまで、実行する前記テストスクリプトについての実行要求であってこのテストスクリプトにおける前記ＧＵＩへの前記操作のうちの前記操作データベースに登録されているものを含む実行要求を作成して前記排他制御サーバに送信し、前記排他制御サーバから実行が許可されるか否かの応答を受信し、許可の応答を受信するまで、同一の前記テストスクリプトについての前記実行要求の送信と前記応答の受信、又は次の前記テストスクリプトについての前記実行要求の作成及び送信と前記応答の受信を繰り返し、許可の応答を受信したときに許可された前記テストスクリプトを実行し、前記テストスクリプトの実行が終了したときに前記テストスケジュールを更新して実行終了通知を前記排他制御サーバに送信し、
前記排他制御サーバは、
前記操作データベースに登録された操作のうちの、他の操作の応答に誤りを生じさせる第１の操作と他の操作の実行によって応答に誤りを生じる第２の操作とからなるトリガ操作が登録されているトリガ操作データベースと、
前記第１の操作によって応答に誤りを生じる操作と前記第２の操作のテスト結果に誤りを生じさせる操作とからなるトリガ関連操作が登録されているトリガ関連操作データベースと、
先に実行が許可された前記テストスクリプト内の前記トリガ関連操作からなる同時実行禁止操作が更新可能に設定された同時実行禁止操作データベースと、
受信した実行要求内の前記各操作と前記同時実行禁止操作データベース内の前記各同時実行禁止操作とで一致するものの有無を判断し、一致するものがある場合に実行を許可しない通知を前記応答として返信し、一致するものがない場合に実行を許可する実行許可通知を前記応答として返信し、前記実行許可通知の送信に先立ち、受信した実行要求内の各操作についての前記トリガ関連操作を前記トリガ関連操作データベースから検索し前記同時実行禁止操作として前記同時実行禁止操作データベースに追加して設定する実行可能性判定部と、
前記実行終了通知に応答して対応する前記同時実行禁止操作を同時実行禁止操作データベースから削除する更新部と、を備えることを特徴とする。
【発明の効果】
【００１６】
請求項１に係る発明によれば、このように構成された操作データベースと、テストスクリプトデータベースと、複数のテスト実行マシンと、テスト対象ＧＵＩ操作応答サーバと、排他制御サーバと、を具備するテスト実行システムにおいて、テスト実行マシンは、一括して実行するテストスクリプトのテストスケジュールを更新可能に格納し、テストスケジュールに従って、実行予定のテストスクリプトがテストスケジュールから無くなるまで、実行するテストスクリプトについての実行要求であってこのテストスクリプトにおけるＧＵＩへの操作のうちの操作データベースに登録されているものを含む実行要求を作成して排他制御サーバに送信し、排他制御サーバから実行が許可されるか否かの応答を受信し、許可の応答を受信するまで、同一のテストスクリプトについての実行要求の送信と応答の受信、又は次のテストスクリプトについての実行要求の作成及び送信と応答の受信を繰り返し、許可の応答を受信したときに許可されたテストスクリプトを実行し、テストスクリプトの実行が終了したときにテストスケジュールを更新して実行終了通知を排他制御サーバに送信し、排他制御サーバは、操作データベースに登録された操作のうちの、他の操作の応答に誤りを生じさせる第１の操作と他の操作の実行によって応答に誤りを生じる第２の操作とからなるトリガ操作が登録されているトリガ操作データベースと、第１の操作によって応答に誤りを生じる操作と第２の操作のテスト結果に誤りを生じさせる操作とからなるトリガ関連操作が登録されているトリガ関連操作データベースと、先に実行が許可されたテストスクリプト内のトリガ関連操作からなる同時実行禁止操作が更新可能に設定された同時実行禁止操作データベースと、受信した実行要求内の各操作と同時実行禁止操作データベース内の各同時実行禁止操作とで一致するものの有無を判断し、一致するものがある場合に実行を許可しない通知を応答として返信し、一致するものがない場合に実行を許可する実行許可通知を応答として返信し、実行許可通知の送信に先立ち、受信した実行要求内の各操作についてのトリガ関連操作をトリガ関連操作データベースから検索し同時実行禁止操作として同時実行禁止操作データベースに追加して設定する実行可能性判定部と、実行終了通知に応答して対応する同時実行禁止操作を同時実行禁止操作データベースから削除する更新部と、を備えるため、複数のテスト実行マシンからＧＵＩアプリケーションについての複数のテストスクリプトを適正に実行可能なテスト実行システムを実現することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明によるテスト実行システムのシステム構成を示すブロック図である。
【図２】テスト対象のＧＵＩアプリケーションによって表示されるＧＵＩ画面の模式図である。
【図３】操作データベース４のデータ構成を示す説明図である。
【図４】図２のＧＵＩを表示する文字列登録用のＧＵＩアプリケーションのテストスクリプトについての説明図である。
【図５】テストスケジュールＤＢ１１４のデータ構成についての説明図である。
【図６】テストスクリプト一括実行ユニット１１が排他制御サーバ５に送信するＴＳ実行要求の通信フレームについての説明図である。
【図７】トリガ操作データベース５４のデータ構成についての説明図である。
【図８】トリガ関連操作データベース５５のデータ構成についての説明図である。
【図９】同時実行禁止操作ＤＢ５６のデータ構成についての説明図である。
【図１０】各テスト実行マシンが行うテストスクリプト一括実行処理についてのフローチャートである。
【図１１】テストスクリプト一括実行ユニットが行うテストスクリプト実行要求作成処理についてのフローチャートである。
【図１２】各テスト実行マシンからの所定のアクセスに応答して排他制御サーバが行うＴＳ実行要求応答処理についてのフローチャートである。
【図１３】排他制御サーバが行う実行可能性判断処理についてのフローチャートである。
【図１４】本テスト実行システムによる排他制御についてのタイムチャートである。
【図１５】従来のテスト実行システムの構成を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明によるテスト実行システムの実施形態について説明する。図１は、本発明によるテスト実行システムのシステム構成を示すブロック図である。本テスト実行システムは、複数のテスト実行マシン１と、テスト対象ＧＵＩ（Graphical User Interface）操作応答サーバ２と、テストスクリプトデータベース（以下、テストスクリプトＤＢという。）３と、操作データベース（以下、操作ＤＢという。）４と、排他制御サーバ５と、を具備する。ここで、これら１〜５は、ネットワーク２００を介して通信可能に接続されている。
【００１９】
この構成の下で、テスト対象のＧＵＩアプリケーションがＧＵＩをテスト実行マシン１に表示し、テスト内容がプログラミングされたテストスクリプトがテスト実行マシン１上でテスト操作を実行する。ここで、ＧＵＩの操作ボタン等がクライアント（以下、ＧＵＩクライアントという。）になり、テスト対象ＧＵＩ操作応答サーバ２がサーバとしてＧＵＩへのテスト操作に応答する。テストスクリプトＤＢ３は、１つ以上の上記のテストスクリプトを格納し、所定のテスト実行マシン１からアクセス可能となっている。操作ＤＢ４には、ＧＵＩクライアントへの所定の操作がテストスクリプトの記法で登録されている。排他制御サーバ５は、排他制御を行って、時間的な重複部分があるように実行された場合にテスト結果に誤りが生ずる虞のある複数のテストスクリプトの実行を禁止する。以下、複数のテストスクリプトが時間的な重複部分があるように実行されること、又は複数のテストが時間的な重複部分があるように行われることを、「並列実行」という。
【００２０】
図２は、テスト対象のＧＵＩアプリケーションによって表示されるＧＵＩ画面の模式図である。このＧＵＩアプリケーションは、クライアント／サーバ型の文字登録用アプリケーションであり、ウィンドウ、ボタン、エディットボックス、コンボボックス等のオブジェクトがＧＵＩクライアントになる。これらのオブジェクトは、Name属性、Caption属性等のプロパティを持ち、プロパティを介してオブジェクトが指定可能となっている。テストスクリプトには、プロパティを介してオブジェクト（ＧＵＩクライアント）が指定され、テストの内容をなすテスト操作が記述されている。
【００２１】
テスト実行マシン１は、テストスクリプト一括実行ユニット１１、入力部１２、表示部１３、テスト対象ＧＵＩアプリケーションクライアント部１４、テストスクリプト実行部１５、及び送受信部１６を備える。ここで、テストスクリプト一括実行ユニット１１は、複数のテストスクリプトの一括した実行（以下、一括実行という。）を可能にするための管理、制御等を行うようになっている。また、入力部１２を介してテストスクリプト一括実行ユニット１１に対する操作入力が可能となり、テストスクリプト一括実行ユニット１１からテストの実行結果が表示部１３に出力されて表示される。さらに、テスト対象ＧＵＩアプリケーションクライアント部１４は、テストスクリプト一括実行ユニット１１からの要求に応答して、テスト対象のＧＵＩアプリケーションに作動を要求するクライアントである。また、テストスクリプト実行部１５は、テストスクリプト一括実行ユニット１１からの要求に応答して、テストスクリプトＤＢ３内の所定のテストスクリプトの実行が可能となっている。
【００２２】
テストスクリプト一括実行ユニット１１は、テストスケジュールデータベース（以下、テストスケジュールＤＢという。）１１４、及び実行結果データベース（以下、実行結果ＤＢという。）１１５を有する。ここで、テストスケジュールＤＢ１１４には、テストスクリプトの実行のスケジュール（以下、実行スケジュールという。）が格納される。また、実行結果ＤＢ１１５には、各テストスクリプトの実行結果が格納される。
【００２３】
テストスクリプト一括実行ユニット１１は、また、テストスクリプト実行要求作成部１１１、テストスケジュール更新部１１２、及び結果出力部１１３を有する。ここで、テストスクリプト実行要求作成部１１１は、テストスクリプトの実行要求（以下、ＴＳ実行要求という。）の通信フレームを作成して排他制御サーバ５に送信する。もって、テストスクリプト実行要求作成部１１１は、ＴＳ実行要求に対する応答を介して実行の可否を確認することができる。また、テストスケジュール更新部１１２は、テストスケジュールＤＢ１１４内の実行スケジュールの追加、削除、更新等（以下、単に更新という。）を行う。この更新は、具体的には、新たな実行スケジュールの追加、古い実行スケジュールの削除等、実行スケジュール内の、テストスクリプトの実行状態の設定、変更等を対象とする。結果出力部１１３は、テストスクリプトの実行結果を実行結果ＤＢ１１５に格納させ、実行結果を表示部１３に出力して表示させる。
【００２４】
テスト対象ＧＵＩ操作応答サーバ２は、共有されるデータを格納する共有データベース（以下、共有ＤＢという。）２１を備え、ＧＵＩクライアントのサーバ、Ｗｅｂサーバ等としての機能を有する。そして、テスト対象ＧＵＩ操作応答サーバ２は、所定のＧＵＩクライアントからの要求に応答して共有ＤＢ２１内の情報の提供、更新等を行う。
【００２５】
テストスクリプトＤＢ３には、ＧＵＩクライアントへのテスト操作が記述されたテストスクリプトが、登録されている。また、本テスト実行システムでは、テストスクリプトの記述言語（記法ともいう。）はＧＵＩクライアントへの操作が表現可能なものであればよく、言語の種類を問わない。
【００２６】
操作ＤＢ４には、排他制御のために参照されるＧＵＩクライアントへの操作が、テストスクリプトの記法で登録されている。ＧＵＩクライアントへの各操作は、操作対象とこれへの操作内容を介して特定される。例えば、「Name属性が“文字列入力”のエディットボックスに文字列“001”を入力する」操作は、操作対象「Name属性が“文字列入力”のエディットボックス」と操作内容「文字列“001”を入力する」とによって特定される。そして、この操作は、例えば「EditBox(“Name=’文字列入力’”).SetText “001”」等として、テストスクリプトの記法で記述できる。
【００２７】
排他制御サーバ５は、トリガ操作データベース（以下、トリガ操作ＤＢという。）５４、トリガ関連操作データベース（以下、トリガ関連操作ＤＢという。）５５、及び同時実行禁止操作データベース（以下、同時実行禁止操作ＤＢという。）５６を備える。
【００２８】
トリガ操作ＤＢ５４には、トリガ操作を特定可能な情報が登録されている。例えばデータの更新は、並列実行中に他のテストスクリプト内の操作の実行によってデータが読み出されるときに、読み出し結果に影響する。トリガ操作は、並列実行したときに、このように他のテストスクリプト内の操作に対する応答に影響してしまう虞のある操作、又は逆に他のテストスクリプト内の操作の実行によって影響を受ける虞のある操作をいう。トリガ操作を含むテストスクリプトの実行中は、排他制御が行われて、影響を及ぼす又は受ける他のテストスクリプトの実行は、禁止される。
【００２９】
トリガ関連操作ＤＢ５５には、トリガ関連操作を特定可能な情報が登録されている。トリガ関連操作は、並列実行したときに、トリガ操作の応答に上記のように影響する、又はトリガ操作によって応答に上記のように影響を受ける虞のある操作をいう。
【００３０】
具体的には、例えばトリガ操作の応答がデータの読み出しであるときは、対象のデータを変更させる虞のある操作が、トリガ関連操作とされる。逆に、例えばトリガ操作の応答がデータの更新であるときは、対象のデータの読み出しを生じさせる操作も、トリガ関連操作とされる。トリガ関連操作を含むテストスクリプトの実行は、排他制御の対象となり、影響を及ぼす又は受ける他のテストスクリプトの実行中は禁止される。以下、トリガ操作を含むテストスクリプトを「トリガ操作テストスクリプト」といい、操作ＩＤ、エントリＩＤ等のＩＤの値Ｎがわかっているときのトリガ操作テストスクリプトをＩＤ（Ｎ）のトリガ操作テストスクリプトという。トリガ関連操作に関しても、同様である。
【００３１】
同時実行禁止操作ＤＢ５６には、実行許可テストスクリプト内のトリガ操作に対するトリガ関連操作が、例えばこれらを特定可能なＩＤを介して設定される。ここで、実行許可テストスクリプトは、排他制御サーバ５によって実行が許可され実行予定又は実行中のテストスクリプトである。また、同時実行禁止操作ＤＢ５６には、実行許可テストスクリプトの名称と実行するマシン名も設定され、以下ではトリガ関連操作を含むこれらの情報を同時実行禁止操作という。同時実行禁止操作のリガ関連操作は、実行許可テストスクリプト内のトリガ操作を介して、トリガ関連操作ＤＢ５５から特定可能となっている。同時実行禁止操作は、少なくとも対象の実行許可テストスクリプトの実行までには同時実行禁止操作ＤＢ５６に設定され、排他制御で参照される。
【００３２】
新たなＴＳ実行要求対象のテストスクリプト（以下、新テストスクリプトという。）内のいずれかの操作がこの同時実行禁止操作ＤＢ５６に設定されている場合、新テストスクリプトの並列実行は禁止される。実行許可テストスクリプトの実行が終了したときに、対応する同時実行禁止操作は、同時実行禁止操作ＤＢ５６から削除される。なお、同時実行禁止操作ＤＢ５６は、初期設定、実行許可テストスクリプトが１つもない状態などでは、レコード数が０個となるように設定されている。
【００３３】
排他制御サーバ５は、また、実行可能性判定部５１、同時実行禁止操作ＤＢ更新部５２、及び送受信部５３を備える。ここで、実行可能性判定部５１は、受信した、ＴＳ実行要求に応答してテストスクリプトが現状態で並列実行可能であるか否かを判定する。また、同時実行禁止操作ＤＢ更新部５２は、上記の同時実行禁止操作の追加、削除、更新等を行う。
【００３４】
以下、図２〜図９を用いて、詳細部分について更に具体的に記載する。図２に戻って、クライアント部１４を介してこのＧＵＩアプリケーションをテスト実行マシン１上で起動すると、文字列を登録するための文字列登録ウィンドウＤ１が表示される。次に、文字列登録ウィンドウＤ１の文字列入力エディットボックスＤ１２に文字列を入力して登録ボタンＤ１３をクリックすると、共有ＤＢ２１に文字列を登録するか否かの確認用の登録確認ウィンドウＤ２が表示される。この登録確認ウィンドウＤ２の登録ボタンＤ２１をクリックすると、入力された文字列が共有ＤＢ２１に登録され、登録確認ウィンドウＤ２が閉じ、登録された文字列が、文字列登録ウィンドウＤ１の登録文字列ラベルＤ１１に表示される。
【００３５】
一方、登録ボタンＤ２１の代わりにキャンセルボタンＤ２２をクリックすると、文字列は共有ＤＢ２１には登録されず、登録確認ウィンドウＤ２が閉じ、文字列登録ウィンドウＤ１の登録文字列ラベルＤ１１は更新されない。ここで、登録文字列ラベルＤ１１のName属性を“登録文字列”とし、エディットボックスＤ１２のName属性を“文字列入力”とする。
【００３６】
図３は、操作データベース４のデータ構成を示す説明図である。操作ＤＢ４には、テスト対象のＧＵＩアプリケーションが表示するＧＵＩクライアントへの各トリガ操作が、操作ＩＤ（Ｔ１１）、WindowAttachment属性Ｔ１２及びOperation属性Ｔ１３と対応付けられて登録されている。ここで、WindowAttachment属性Ｔ１２はウィンドウを特定し、Operation属性Ｔ１３はこのウィンドウに対する操作を特定する。なお、操作ＩＤ（Ｔ１１）は、レコードＩＤであってもよい。
【００３７】
WindowAttachment属性Ｔ１２には、特定のウィンドウへアタッチする操作がテストスクリプトの言語で記述される。例えば、「キャプションが“文字列登録”のウィンドウへアタッチする」操作は、「Window(“Caption=’文字列登録’”).Attach」のように記述される。
【００３８】
Operation属性Ｔ１３には、アタッチするウィンドウへの操作、又はこのウィンドウからのデータ取得がテストスクリプトの言語で記述される。例えば、「キャプションが“登録”のボタンをクリックする」操作は、「Button(“Caption=’登録’”).Click」のように記述される。また、「Name属性が“登録文字列”のラベルのキャプションを変数Xに代入する」操作は、データの読み出しを生じさせ、「X = Label(“Name=’登録文字列’”).Caption」のように記述される。
【００３９】
操作ＤＢ４の各レコードのWindowAttathment属性Ｔ１２とOperation属性Ｔ１３との組み合わせで、「特定のウィンドウへの操作又はデータ取得の操作」が表現されている。例えば、図３のレコードＴ１５には、「キャプションが“文字列登録”のウィンドウ内にある、キャプションが“登録”のボタンをクリックする」操作が登録されている。これは、同一の内容の操作又はデータ取得が複数のウィンドウに共存する場合であっても、正しいウィンドウを指定可能にするためである。
【００４０】
例えば、図３に示す２つのレコードＴ１５、Ｔ１６において、各Operation属性Ｔ１３は、同一のキャプション“登録”のボタンからなるオブジェクトへのクリック操作を指定している。しかし、WindowAttachment属性Ｔ１２によって、そのオブジェクトが配置されているウィンドウが区別されている。そのため、これらは、異なるレコードに登録される。
【００４１】
操作ＤＢ４の各レコードは、操作ＩＤ（Ｔ１１）を介して、排他制御サーバ５のトリガ操作ＤＢ５４、トリガ関連操作ＤＢ５５及び同時実行禁止操作ＤＢ５６の各レコードから参照される。
【００４２】
図４は、図２のＧＵＩを表示する文字列登録用のＧＵＩアプリケーションのテストスクリプトについての説明図である。テストスクリプトＴＳ１、ＴＳ２内のAssertAreEqual関数は、第１引数に設定された期待（主張）値と第２引数として得られる実際（登録）値とを比較し、これらの一致／不一致を決定し、その結果を実行結果ＤＢ１１５に出力する。
【００４３】
図４（ａ）のテストスクリプトＴＳ１は、名前が“TestScript001”であり、次のように動作する。テストスクリプトＴＳ１は、まず、文字列登録ウィンドウＤ１にアタッチし、文字列入力エディットボックスＤ１２に文字列“001”を入力して登録ボタンＤ１３をクリックする。テストスクリプトＴＳ１は、次に、登録確認ウィンドウＤ２にアタッチして登録ボタンＤ２１をクリックする。テストスクリプトＴＳ１は、最後に、文字列登録ウィンドウＤ１にアタッチし、登録文字列ラベルＤ１１に表示された文字列“001”と、文字列入力エディットボックスＤ１２に入力された文字列“001”とが等しいことを検証する。
【００４４】
図４（ｂ）のテストスクリプトＴＳ２は、名前が“TestScript002”であり、次のように動作する。テストスクリプトＴＳ２は、まず、文字列登録ウィンドウＤ１にアタッチし、登録文字列ラベルＤ１１に表示されている文字列“001”を保持する。テストスクリプトＴＳ２は、次に、文字列入力エディットボックスＤ１２に文字列“002”を入力して登録ボタンＤ１３をクリックする。テストスクリプトＴＳ２は、更に、登録確認ウィンドウＤ２にアタッチしてキャンセルボタンＤ２２をクリックする。テストスクリプトＴＳ２は、最後に、文字列登録ウィンドウＤ１にアタッチし、登録文字列ラベルＤ１１に表示された文字列“001”が変更されていないことを検証する。
【００４５】
テストスクリプトＴＳ１とテストスクリプトＴＳ２とは、適切に並列実行できない。テストスクリプトＴＳ２の１１行目で共有ＤＢ２１から文字列が取得される前にテストスクリプトＴＳ１の８行目でこの文字列が登録されてしまい、取得される文字列が変更されてしまう虞があるからである。これに対して、テストスクリプトＴＳ２は、共有ＤＢ２１の文字列を変更しないため、複数のテスト実行マシン１から並列実行可能である。
【００４６】
図５は、テストスケジュールＤＢ１１４のデータ構成についての説明図である。テストスケジュールＤＢ１１４には、テストスクリプト名Ｔ２１及び実行状態Ｔ２２からなる実行スケジュールが登録される。テストスクリプト一括実行ユニット１１は、この実行スケジュールに従って、テストスクリプトを実行する。
【００４７】
ここで、テストスクリプト名Ｔ２１には、テストスクリプトが１つずつ実行予定順に上から設定され、実行状態Ｔ２２には実行状態が設定される。実行状態Ｔ２２には、テストが既に終了しているときは“実行済”が設定され、実行前、実行中等のテストが未だ終了していないときは“未実行”が設定される。実行状態Ｔ２２は、テストスケジュール更新部１１２によって更新される。一括実行が終了したとき、実行スケジュールは、テストスケジュール更新部１１２によって削除される。
【００４８】
図５は、図４のテストスクリプトＴＳ１、ＴＳ２に関するものであり、この図から実行スケジュールのとりうる状態がわかる。図５（ｂ）において、実行状態Ｔ２２は、テストスクリプトＴＳ１が既に実行されて終了し、テストスクリプトＴＳ２が実行前又は実行中であることを示している。
【００４９】
図６は、テストスクリプト一括実行ユニット１１が排他制御サーバ５に送信するＴＳ実行要求の通信フレームについての説明図である。ＴＳ実行要求の通信フレームＦ１は、図６（ａ）に示すように、テスト実行マシン名Ｆ１１、テストスクリプト名Ｆ１２、操作ＩＤリストＦ１３等からなり、テストスクリプト実行要求作成部１１１によって作成される。
【００５０】
ここで、テスト実行マシン名Ｆ１１はＴＳ実行要求を送信するマシン名を特定し、テストスクリプト名Ｆ１２はＴＳ実行要求対象のテストスクリプトを特定する。また、操作ＩＤリストＦ１３には、ＴＳ実行要求対象のテストスクリプト内の操作を特定する操作ＩＤ（Ｔ１１）が全てリストされる。
【００５１】
さらに、操作ＩＤリストＦ１３は、操作ＩＤ数Ｆ１４、操作ＩＤ配列Ｆ１５等からなり、操作ＩＤ数Ｆ１４にはリストされる操作ＩＤの個数が設定され、操作ＩＤ配列Ｆ１５には操作ＩＤが列挙される。操作ＩＤリストＦ１３と同時実行禁止操作ＤＢ５６に基づいて、ＴＳ実行要求に対する実行可能性が判断される。具体的には、排他制御サーバ５が、同時実行禁止操作ＤＢ５６を参照し、操作ＩＤリストＦ１３中の各操作ＩＤをキーにして検索し、何れの操作ＩＤも検索されないときに、実行可能と判断する。
【００５２】
図６（ｂ）には、名前が“pc-a”のテスト実行マシンから送信される、テストスクリプトＴＳ１のＴＳ実行要求が示されている。同様に、図６（ｅ）には、名前が“pc-b”のテスト実行マシンから送信される、テストスクリプトＴＳ２のＴＳ実行要求が示されている。
【００５３】
図７は、トリガ操作データベース５４のデータ構成についての説明図である。トリガ操作ＤＢ５４には、トリガ操作を特定可能な情報が設定される。例えば、図３の操作ＩＤ（Ｔ１１）が１の操作は、「キャプションが“文字列登録”のウィンドウ内にある、Name属性が“登録文字列”のラベルのキャプションを変数Ｘに代入する」ことである。この操作は、共有ＤＢ２１内の登録文字列の読み出し又は参照を生じさせるため、トリガ操作である。
【００５４】
一方、図３の操作ＩＤ（Ｔ１１）が４の操作は、「キャプションが“登録確認”のウィンドウ内にある、キャプションが“登録”のボタンをクリックする」ことである。この操作は、通常、共有ＤＢ２１内の登録文字列の変更を生じさせるため、やはりトリガ操作である。各トリガ操作は、それぞれ図７に示すように、トリガエントリＩＤ（Ｔ３１）毎に操作ＩＤ（Ｔ３２）を介してトリガ操作ＤＢ５４に設定されている。
【００５５】
図８は、トリガ関連操作データベース５５のデータ構成についての説明図である。トリガ関連操作ＤＢ５５には、トリガ関連操作と対応するトリガ操作とを特定可能な情報が設定される。例えば、上記の操作ＩＤ（Ｔ１１）が１の操作と操作ＩＤ（Ｔ１１）が４の操作とは、相互にトリガ関連操作となる。各トリガ関連操作は、それぞれ図８に示すように、トリガ関連エントリＩＤ（Ｔ４１）毎に操作ＩＤ（Ｔ４２）を介してトリガ関連操作ＤＢ５５に設定されている。
【００５６】
ここで、トリガ関連エントリＩＤ（Ｔ４１）には、ＤＢ５４内の対応するトリガ操作も特定可能となるように、トリガエントリＩＤ（Ｔ３１）と同一のデータが設定される。具体的には、図８において、トリガ関連エントリＩＤ（Ｔ４１）が１は、４の値をとるトリガ関連操作の操作ＩＤ（Ｔ４２）を特定する。そして、図７において、このトリガ関連エントリＩＤ（Ｔ４１）は、同じ１の値をとるトリガエントリＩＤ（Ｔ３１）を介して対応するトリガ操作の操作ＩＤ（Ｔ３２）をも特定可能とする。図８に示すように、この場合のトリガ関連操作の操作ＩＤ（Ｔ４２）は４であり、対応するトリガ操作の操作ＩＤ（Ｔ３２）は１であり、既に説明したようにそれぞれトリガ関連操作と対応するトリガ操作の関係にある。
【００５７】
操作ＩＤ（Ｔ４２）には操作ＤＢ４内の対応する操作ＩＤ（Ｔ１１）が設定され、もって、対応するWindowAttachment属性Ｔ１２とOperation属性Ｔ１３の特定が可能となる。その結果、例えば、レコードＴ４３と図７とに基づいて、操作ＩＤ（１）のトリガ操作テストスクリプトの実行中は、操作ＩＤ（４）のトリガ関連操作テストスクリプトの実行が禁止されることがわかる。
【００５８】
操作ＩＤが４の操作は操作ＩＤが１のトリガ関連操作であるため、操作ＩＤ（１）のトリガ操作テストスクリプトの実行中は、操作ＩＤ（４）のトリガ関連操作テストスクリプトの実行が禁止される。同様に、レコードＴ４４には、操作ＩＤ（４）のトリガ操作テストスクリプトの実行中は、操作ＩＤ（１）のトリガ関連操作テストスクリプトの実行が禁止されることが示されている。本テスト実行システムでは、排他制御のためにトリガ操作とトリガ関連操作とが事前に設定され、参照される。
【００５９】
図９は、同時実行禁止操作ＤＢ５６のデータ構成についての説明図である。同時実行禁止操作は、テスト実行マシン名Ｔ５１、テストスクリプト名Ｔ５２、操作ＩＤ（Ｔ５３）等からなる。ここで、テストスクリプト名Ｔ５２は、実行許可テストスクリプトの名前を特定する。また、操作ＩＤ（Ｔ５３）は、トリガ関連操作を特定し、もって新テストスクリプトの実行が実行許可テストスクリプトの実行結果を誤りに導く虞があるか否かを識別可能にする。
【００６０】
ＴＳ実行要求に対して排他制御サーバ５が実行を許可する通知を返信されるまでに、対応する同時実行禁止操作は、同時実行禁止操作ＤＢ更新部５２によって同時実行禁止操作ＤＢ５６に追加される。そして、排他制御サーバ５がテストスクリプトの実行終了通知（以下、ＴＳ実行終了通知という。）をテスト実行マシン１から受信したときに、同時実行禁止操作は同時実行禁止操作ＤＢ更新部５２によって削除される。以下、上記の通知を実行許可通知といい、反対に、実行を許可しない通知を実行不許可通知という。
【００６１】
図９（ａ）は、名前が“pc-a”のテスト実行マシンからのテストスクリプトＴＳ１の実行が許可されたときの同時実行禁止操作の設定状態を示している。このテストスクリプトＴＳ１には操作ＩＤ（Ｔ１１）が１〜４の４つの操作が含まれているが、このうち、トリガ操作は上記のように操作ＩＤ（Ｔ１１）が１と４の２つである。そのため、ＴＳ実行要求の通信フレームは、図６（ｂ）に示すようになる。
【００６２】
１の値をとる操作ＩＤ（Ｆ１５、Ｔ１１）には、図７に示すように１の値をとるトリガエントリＩＤ（Ｔ３１）が対応し、さらに図８の同一の値をとるトリガ関連エントリＩＤ（Ｔ３１）のレコードＴ４３が対応する。同様に、４の値をとる操作ＩＤ（Ｆ１５、Ｔ１１）には、図７に示すように２の値をとるトリガエントリＩＤ（Ｔ３１）が対応し、さらに図８の同一の値をとるトリガ関連エントリＩＤ（Ｔ３１）のレコードＴ４４が対応する。その結果、これらに対応するトリガ関連操作の操作ＩＤ（Ｔ５３）はそれぞれ４又は１をとり、テストスクリプトＴＳ１に対する同時実行禁止操作は、図９（ａ）に示すものとなる。
【００６３】
同様に、図９（ｂ）は、名前が“pc-b”のテスト実行マシンからのテストスクリプトＴＳ２の実行が許可されたときの同時実行禁止操作の設定状態を示している。
【００６４】
以下、このように構成されたテスト実行システムの動作について説明する。まず、各テスト実行マシンが行うテストスクリプト一括実行処理について説明する。
図１０は、各テスト実行マシンが行うテストスクリプト一括実行処理についてのフローチャートである。テストスクリプト一括実行処理の開始に先立ち、操作ＤＢ４、トリガ操作ＤＢ５４及びトリガ関連操作ＤＢ５５には、それぞれ、必要な情報が設定されているものとする。
【００６５】
本テスト実行システムでは、複数のテスト実行マシンのそれぞれが独立してテストスクリプト一括実行処理を行う。まず、テストスクリプト一括実行ユニット１１は、テスト実行マシン１の入力部１２を介してテストスクリプト一括実行処理が開始されたとき、データベース１１４、１１５の初期化を行う（Ｓ１０１）。この初期化では、テストスケジュールＤＢ１１４に関しては、全テストスクリプト名Ｔ２１の実行状態Ｔ２２が“未実行”に設定され、実行結果ＤＢ１１５に関しては、残存する実行結果が全て削除される。
【００６６】
次に、テストスクリプト一括実行ユニット１１は、テストスケジュールＤＢ１１４を参照し、“未実行”をキーにして検索を行い（Ｓ１０２）、検出されたか否かを判断する（Ｓ１０３）。
【００６７】
ステップＳ１０３で“未実行”が検出されないと判断したとき、テストスクリプト一括実行ユニット１１は、実行結果ＤＢ１１５から実行結果を取得して表示部１３に出力し表示させる（Ｓ１０４）。実行結果は、全てのテストスクリプトに関して出力される。尚、ステップＳ１０４で実行結果が取得できないときに、テストスクリプト一括実行ユニット１１は、実行結果に代えて所定のメッセージを出力するのでもよい。
【００６８】
ステップＳ１０３で“未実行”が検出されたと判断したとき、テストスクリプト一括実行ユニット１１は、“未実行”が設定されたテストスクリプト名のうち実行順序が最も早いテストスクリプトの名称を変数ＴＳＮに代入する（Ｓ１０５）。
【００６９】
次に、テストスクリプト一括実行ユニット１１は、変数ＴＳＮで特定されるテストスクリプトについてのテストスクリプト実行要求作成処理を行う（Ｓ１１０）。テストスクリプト実行要求作成処理では、テスト実行マシン１から送信される、変数ＴＳＮのテストスクリプトについてのＴＳ実行要求が作成される。
【００７０】
次に、テストスクリプト一括実行ユニット１１は、送受信部１６経由でこのＴＳ実行要求を排他制御サーバ５に送信して（Ｓ１３１）、応答を待ち受けて受信する（Ｓ１３２）。この応答は、実行許可通知又は実行不許可通知である。
【００７１】
次に、ステップＳ１３２で応答を受信したとき、テストスクリプト一括実行ユニット１１は、応答が実行許可通知であるか否かを判断する（Ｓ１３３）。ステップＳ１３３で応答が実行不許可通知であると判断したとき、テストスクリプト一括実行ユニット１１は、テストスケジュールＤＢ１１４を参照し、“未実行”をキーにして検索を行う（Ｓ１３４）。次に、テストスクリプト一括実行ユニット１１は、ステップＳ１３４で検出されたものが複数であるか否かを判断する（Ｓ１３５）。これによって、実行されていない他のテストスクリプトの有無が分かる。
【００７２】
ステップＳ１３５で“未実行”が複数検出されなかったと判断したとき、同一の変数ＴＳＮのまま、処理はステップＳ１１０に戻り、テストスクリプト一括実行ユニット１１は以降のステップでの処理を繰り返す。なお、一定時間後に処理がステップＳ１３１に戻り、作成済みのＴＳ実行要求が再送されるのでもよい。
【００７３】
次に、ステップＳ１３５で“未実行”が複数検出されたと判断したとき、テストスクリプト一括実行ユニット１１は、検出されたものの内の現変数ＴＳＮと異なるテストスクリプト名を変数ＴＳＮに代入する（Ｓ１３６）。ここで、テストスクリプト一括実行ユニット１１は、作成済みのＴＳ実行要求を所定のメモリに格納しておき、後にこのＴＳ実行要求を再度送信するのでもよい。次に、処理はステップＳ１１０に戻り、テストスクリプト一括実行ユニット１１は、更新された変数ＴＳＮで、以降のステップでの処理を繰り返す。
【００７４】
一方、ステップＳ１３３でＴＳ実行要求に対する応答が実行許可通知であると判断したとき、テストスクリプト一括実行ユニット１１は、変数ＴＳＮで特定されるテストスクリプトをテスト実行マシン１上で実行する（Ｓ１３７）。次に、テストスクリプト一括実行ユニット１１は、このテストスクリプトの実行結果を実行結果ＤＢ１１５に格納する（Ｓ１３８）。ここで、変数ＴＳＮで特定されるテストスクリプトの実行が許可されているため、排他制御サーバ５は、同時実行禁止操作を含む他のテストスクリプトの実行を禁止している。
【００７５】
ステップＳ１３８で実行結果を実行結果ＤＢ１１５に格納したとき、テストスクリプト一括実行ユニット１１は、変数ＴＳＮで特定されるテストスクリプトのＴＳ実行終了通知を排他制御サーバ５に送信する（Ｓ１３９）。このＴＳ実行終了通知を介してテスト実行マシン名とテストスクリプト名ＴＳＮとが排他制御サーバ５に通知され、このテストスクリプトのために実行が禁止されていた他のテストスクリプトは、他に制限がない場合、実行が許可される。
【００７６】
ステップＳ１３９でＴＳ実行終了通知を送信したとき、テストスクリプト一括実行ユニット１１は、テストスケジュールＤＢ１１４の実行状態Ｔ２２のうち変数ＴＳＮに対応するものを“実行済”に変更する（Ｓ１４０）。次に、処理はステップＳ１０２に戻り、テストスクリプト一括実行ユニット１１は、実行状態Ｔ２２が“未実行”の残りのテストスクリプトについて、上記の処理を繰り返す。実行状態Ｔ２２に“未実行”がなくなったとき、全てのテストスクリプトの実行は完了し、ステップＳ１０４で実行結果が表示される。
【００７７】
図１１は、テストスクリプト一括実行ユニットが行うテストスクリプト実行要求作成処理についてのフローチャートである。テストスクリプト実行要求作成処理では、まず、テストスクリプト一括実行ユニット１１が、自己のテスト実行マシン名を変数ＰＣに代入し、実行対象のテストスクリプトの名前を変数ＴＳＮに代入する（Ｓ１１１）。次に、テストスクリプト一括実行ユニット１１は、変数ＴＳＮをキーにしてテストスクリプトＤＢ３から検索し、検出されたテストスクリプトＴＳを参照する（Ｓ１１２）。次に、テストスクリプト一括実行ユニット１１は、テストスクリプトＴＳの操作を特定する操作ＩＤ（Ｔ１１）をリストするための空のリスト変数ＯＬを作成する（Ｓ１１３）。
【００７８】
テストスクリプト一括実行ユニット１１は、次に、変数FLAGに“false”を代入して初期化する（Ｓ１１４）。この変数FLAGは、テストスクリプト内の対象の文がウィンドウにアタッチされた状態で操作を行うものであるか否かを識別するためのものである。変数FLAGには、アタッチされた状態であれば「true」、そうでなければ「false」が代入される。初めは、ウィンドウはアタッチされていないため、変数FLAGには「false」が設定される。
【００７９】
次に、処理はループＡに入り、テストスクリプト一括実行ユニット１１は、テストスクリプト内の文Ｘを行番号の若い順に最後まで抽出していく（Ｓ１１５）。そのため、初めは、最も若い文が抽出される。
【００８０】
テストスクリプト一括実行ユニット１１は、次に、抽出された文Ｘがウィンドウへのアタッチ文であるか否かを判断する（Ｓ１１６）。ステップＳ１１６で文Xがアタッチ文であると判断したとき、テストスクリプト一括実行ユニット１１は、操作ＤＢ４を参照し、文XのWindowAttachment属性をキーにして検索する（Ｓ１１７）。
【００８１】
次に、テストスクリプト一括実行ユニット１１は、ステップＳ１１７で検出されたか否かを判断する（Ｓ１１８）。テストスクリプト一括実行ユニット１１は、ステップＳ１１８で検出されたと判断したとき変数FLAGに「true」を代入し（Ｓ１１９）、検出されなかったと判断したとき「false」を代入する（Ｓ１２０）。このように更新される変数FLAGを参照することによって、操作が行われるウィンドウにアタッチしているか否かが識別可能となる。
【００８２】
テップＳ１１６で抽出された文Ｘがウィンドウへのアタッチ文でないと判断したとき、テストスクリプト一括実行ユニット１１は、変数FLAGが「true」であるか否かを判断する（Ｓ１２１）。ここで、ウィンドウへ既にアタッチされている場合、所定の操作が行われうる。
【００８３】
ステップＳ１２１で変数FLAGが「true」であると判断したとき、テストスクリプト一括実行ユニット１１は、操作ＤＢ４を参照し、文XのOperation属性Ｔ１３をキーにして検索する（Ｓ１２２）。ここで、操作ＤＢ４の参照は、ステップＳ１１７で検出されたWindowAttachment属性Ｔ１２に対応付けられたものに限定して行われる。
【００８４】
次に、テストスクリプト一括実行ユニット１１は、ステップＳ１２２で文XのOperation属性Ｔ１３が検出されたか否かを判断する（Ｓ１２３）。ステップＳ１２３で文XのOperation属性Ｔ１３が検出されたと判断したとき、テストスクリプト一括実行ユニット１１は、検出されたOperation属性Ｔ１３に対応する操作ＩＤ（Ｔ１１）をリスト変数ＯＬに追加する（Ｓ１２４）。リスト変数ＯＬに追加された操作ＩＤ（Ｔ１１）は、排他制御に使用される。
【００８５】
ステップＳ１１９若しくはＳ１２０が終了したとき、ステップＳ１２１で「false」であると判断されたとき、又はステップＳ１２３でOperation属性Ｔ１３が検出されなかったと判断したとき、文Xについての処理は終了する。そして、テストスクリプト一括実行ユニット１１は、ループＡ内で次に若い番号の文Ｘを抽出し、以降のステップでの処理を繰り返す。次に若い番号の文Ｘがないときは、処理はループＡに出る。
【００８６】
ループＡでの処理が完了したとき、テストスクリプト一括実行ユニット１１は、テスト実行マシン名ＰＣ、テストスクリプト名ＴＳＮ、及びリスト変数OPに基づいて、ＴＳ実行要求を作成する（Ｓ１２５）。これによって、図６に示すフレーム構成のＴＳ実行要求が作成され、このテストスクリプトについての処理は終了する。上記の処理は１つのテストスクリプトについてのものであるが、テストスクリプト一括実行ユニット１１は、実行状態Ｔ２２が“未実行”のテストスクリプトが無くなるまでこれらの処理を繰り返す。
【００８７】
ここで、図６（ｂ）及び図６（ｃ）に示すフレーム構成のＴＳ実行要求は、いずれも名前が“pc-a”のテスト実行マシンから送信されるものである。図６（ｂ）のＴＳ実行要求は、図４（ａ）に示すテストスクリプトＴＳ１についてこのテストスクリプト実行要求作成処理を行って得られたものである。同様に、図６（ｃ）に示すものは、図４（ｂ）に示すテストスクリプトＴＳ２についてのものである。
【００８８】
図１２は、各テスト実行マシンからの所定のアクセスに応答して排他制御サーバが行うＴＳ実行要求応答処理についてのフローチャートである。ＴＳ実行要求応答処理は、具体的には、各テスト実行マシンからのＴＳ実行要求と実行終了通知とに応答して行われる。
【００８９】
排他制御サーバ５は、まず、テスト実行マシン１から送信された情報を待ち受けて受信する（Ｓ２０１）。排他制御サーバ５は、次に、ステップＳ２０１で受信した情報がＴＳ実行終了通知であるか否かを判断する（Ｓ２０２）。
【００９０】
ステップＳ２０２でＴＳ実行終了通知を受信したと判断したとき、排他制御サーバ５は、通知から特定される全ての同時実行禁止操作を同時実行禁止操作ＤＢ５６から削除する（Ｓ２０３）。具体的には、ＴＳ実行終了通知にテスト実行マシン名Ｆ１１とテストスクリプト名Ｆ１２が指定され、これらによって特定される全ての同時実行禁止操作が同時実行禁止操作ＤＢ５６から削除される。
【００９１】
ステップＳ２０２でＴＳ実行終了通知を受信していないと判断したとき、排他制御サーバ５は、ステップＳ２０１で受信した情報がＴＳ実行要求であるか否かを判断する（Ｓ２０４）。ステップＳ２０４でＴＳ実行要求を受信していないと判断したとき、処理はステップＳ２０１に戻り、排他制御サーバ５は再び待ち受け受信を行う。
【００９２】
ステップＳ２０４でＴＳ実行要求を受信したと判断したとき、排他制御サーバ５は、受信したＴＳ実行要求に基づいて、対象のテストスクリプトが実行可能であるか否かを判断する実行可能性判断処理を行う（Ｓ２１０）。
【００９３】
排他制御サーバ５は、次に、実行可能性判断処理の結果に基づいて、実行可能であるか否かを判断する（Ｓ２２１）。ステップＳ２２１で実行できないと判断したとき、排他制御サーバ５は、実行不許可通知を応答としてテスト実行マシン１に返信する（Ｓ２２２）。ステップＳ２２２で実行不許可通知を返信したとき、処理はステップＳ２０１に戻り、排他制御サーバ５は再び待ち受け受信を行う。
【００９４】
ステップＳ２２１で実行可能であると判断したとき、処理はループＡに入り、排他制御サーバ５は、ＴＳ実行要求内の操作ＩＤ（Ｆ１５）を先頭から最後まで抽出していく（Ｓ２２３）。そのため、初めは、先頭の操作ＩＤ（Ｆ１５）が抽出される。次に、排他制御サーバ５は、トリガ操作ＤＢ５４を参照し、操作ＩＤ（Ｆ１５）をキーにして操作ＩＤ（Ｔ３２）の検索を行う（Ｓ２２４）。操作ＩＤ（Ｔ３２）を介して、対応するトリガエントリＩＤ（Ｔ３１）も検索されることになる。
【００９５】
次に、処理はループＢに入り、排他制御サーバ５は、ステップＳ２２４で検出したトリガ操作（Ｔ３２）に対応するトリガエントリＩＤ（Ｔ３１）を若い順に抽出していく（Ｓ２２５）。そのため、初めは、最も若いトリガエントリＩＤ（Ｔ３１）が抽出される。次に、排他制御サーバ５は、トリガ関連操作ＤＢ５５を参照し、ステップＳ２２５で抽出されたトリガエントリＩＤ（Ｔ３１）をキーにして、トリガ関連操作の操作ＩＤ（Ｔ４２）の検索を行う（Ｓ２２６）。この検索は、既に説明したように、トリガエントリＩＤ（Ｔ３１）と一致するトリガ関連エントリＩＤ（Ｔ４１）を検索し、検索されたトリガ関連エントリＩＤ（Ｔ４１）に対応する操作ＩＤ（Ｔ４２）を抽出するように、行われる。
【００９６】
次に、処理はループＣに入り、排他制御サーバ５は、ステップＳ２２６で検出したトリガ関連操作の操作ＩＤ（Ｔ４２）を若い順に抽出していく（Ｓ２２７）。そのため、初めは、最も若い操作ＩＤ（Ｔ４２）が抽出される。
【００９７】
次に、排他制御サーバ５は、検出された操作ＩＤ（Ｔ４２）に対する同時実行禁止操作を同時実行禁止操作Ｄ５６に追加する（Ｓ２２８）。この同時実行禁止操作は、既に説明したように、ＴＳ実行要求中のテスト実行マシン名Ｆ１１、テストスクリプト名Ｆ１２、及び操作ＩＤ（Ｔ４２）に基づいて作成される。
【００９８】
次に、排他制御サーバ５は、ループＣ内で次に若い番号の操作ＩＤ（Ｔ４２）を抽出し、以降のステップでの処理を繰り返す。次に若い番号の操作ＩＤ（Ｔ４２）がないとき、処理はループＣを出る。
【００９９】
処理がループＣを出たとき、排他制御サーバ５は、ループＢ内で次に若いトリガエントリＩＤ（Ｔ３１）を抽出し、以降のステップでの処理を繰り返す。次に若いトリガエントリＩＤ（Ｔ３１）がないとき、処理はループＢを出る。
【０１００】
処理がループＢを出たとき、排他制御サーバ５は、ループＡ内でＴＳ実行要求内の次に若い操作ＩＤ（Ｆ１５）を抽出し、以降のステップでの処理を繰り返す。次に若い操作ＩＤ（Ｆ１５）がないとき、処理はループＡを出る。
【０１０１】
処理がループＡを出たとき、排他制御サーバ５は、実行許可通知を応答としてテストスクリプト一括実行ユニット１１に返信する（Ｓ２２７）。次に、処理はステップＳ２０１に戻り、排他制御サーバ５は以降の各ステップでの処理を繰り返す。その結果、排他制御サーバ５は、ＴＳ実行要求を受信する度に実行許可通知又は実行不許可通知を応答として返信し、ＴＳ実行終了通知を受信する度に通知された同時実行禁止操作を全て削除するように動作する。
【０１０２】
図１３は、排他制御サーバが行う実行可能性判断処理についてのフローチャートである。実行可能性判断処理で、排他制御サーバ５は、まず、ＴＳ実行要求からテストスクリプト名Ｆ１２を変数ＴＳＮに代入し、操作ＩＤリストＦ１３をリスト変数ＯＬに代入する（Ｓ２１１）。次に、処理はループＤに入り、排他制御サーバ５は、リスト変数ＯＬの先頭から最後まで操作ＩＤ（Ｆ１５）を順に抽出していく（Ｓ２１２）。そのため、初めは、先頭の操作ＩＤ（Ｆ１５）が抽出される。
【０１０３】
次に、排他制御サーバ５は、同時実行禁止操作ＤＢ５６を参照し、抽出された操作ＩＤ（Ｆ１５）をキーにして検索する（Ｓ２１３）。次に、排他制御サーバ５は、ステップＳ２１３で操作ＩＤ（Ｆ１５）と一致する操作ＩＤ（Ｔ５３）が検出されたか否かを判断する（Ｓ２１４）。ステップＳ２１４で一致する操作ＩＤ（Ｔ５３）が検出されなかったと判断したとき、処理はステップＳ２１２に戻る。そして、排他制御サーバ５は、ループＤ内で次に若い操作ＩＤ（Ｆ１５）を抽出し、以降のステップでの処理を繰り返す。次の操作ＩＤ（Ｆ１５）がないときは、処理はループＤを出る。
【０１０４】
ステップＳ２１４で一致する操作ＩＤ（Ｔ５３）が検出されたと判断したとき、排他制御サーバ５は、変数ＴＳＮで特定されるテストスクリプトの実行は許可できないと決定する（Ｓ２１５）。ループＤで、リスト変数ＯＬ内の全ての操作ＩＤ（Ｆ１５）に対して、一致する操作ＩＤ（Ｔ５３）が検出されなかったとき、処理はループＤを出る。そして、排他制御サーバ５は、このテストスクリプトの実行が許可されると決定する（Ｓ２１６）。ステップＳ２１５とステップＳ２１６での決定が行われたとき、処理はステップＳ２２１に進む。
【０１０５】
図１４は、本テスト実行システムによる排他制御についてのタイムチャートである。図１４には、より早く許可を受けた名前が“pc-a”のテスト実行マシンと後から許可を受けた名前が“pc-b”のテスト実行マシンが、それぞれ、２つのテストスクリプトＴＳ１、ＴＳ２を一括実行する例について記載されている。以下、前者のマシンをテスト実行マシン“pc-a”といい、後者のマシンをテスト実行マシン“pc-b”という。
【０１０６】
図１４（ａ）はテスト実行マシン“pc-a”についてのものであり、一括実行は図５（ａ）のテストスケジュールに従って行われている。同様に、図１４（ｂ）はテスト実行マシン“pc-b”についてのものであり、一括実行は同一のテストスケジュールに従って行われている。
【０１０７】
区間Ｅ１は、何れのテスト実行マシンも一括実行を開始していない状態からテスト実行マシン“pc-a”が一括実行を開始した状態に変化する区間である。この区間で、テスト実行マシン“pc-a”が一括実行を開始してテストスクリプトＴＳ１のＴＳ実行要求（図６（ｂ））を排他制御サーバ５に送信し、実行許可通知が返信される。この区間１で、同時実行禁止操作ＤＢ５６は、何れの同時実行禁止操作も設定されていない状態から、テスト実行マシン“pc-a”のテストスクリプトＴＳ１に対する同時実行禁止操作が設定された状態（図９（ａ））に変化する。一方、両方のテスト実行マシンのテストスケジュールＤＢは、図５（ａ）の状態にある。
【０１０８】
区間Ｅ２は、テスト実行マシン“pc-a”がテストスクリプトＴＳ１の実行を開始してから、テスト実行マシン“pc-b”が一括実行を開始するまでの区間である。したがって、この区間Ｅ２で一括実行しているのはテスト実行マシン“pc-a”のみである。この区間Ｅ２では、同時実行禁止操作ＤＢ５６は図９（ａ）の状態のままであり、２つのテスト実行マシンのテストスケジュールＤＢ１１４はともに図５（ａ）の状態である。
【０１０９】
区間Ｅ３は、テスト実行マシン“pc-b”が一括実行を開始してから排他制御を受けて実際に最初のテストスクリプトの実行が開始するまでの区間である。この区間Ｅ３で、テスト実行マシン“pc-b”は、排他制御サーバ５にテストスクリプトＴＳ１のＴＳ実行要求（図６（ｄ））とテストスクリプトＴＳ２のＴＳ実行要求（図６（ｅ））を交互に送信する。また、一度作成された通信フレームは上記のように保存され短時間で再送されるようになっているものとする。
【０１１０】
両方の通信フレーム内の操作Ｔ１５には同時実行禁止操作ＤＢ５６に設定されているものが含まれているため、テスト実行マシン“pc-b”はこれらのいずれのＴＳ実行要求に対しても実行不許可通知を受信し続けている。テスト実行マシン“pc-b”による最初のテストスクリプトの実際の実行は、図１４からわかるように、テスト実行マシン“pc-a”によるテストスクリプトＴＳ１の実行が終了した後になる。テストスクリプトＴＳ１の実行が終了したとき、実行終了通知がテスト実行マシン“pc-a”から排他制御サーバ５に送信される。
【０１１１】
この実行終了通知は、区間３の終了までに行われるものとし、以下、他の区間でも同様とする。この区間Ｅ３では、同時実行禁止操作ＤＢ５６は図９（ａ）の状態であり、２つのテスト実行マシンのテストスケジュールＤＢ１１４はともに図５（ａ）の状態である。
【０１１２】
区間Ｅ４は、テスト実行マシン“pc-a”のテストスクリプトＴＳ１の実行が終了してテスト実行マシン“pc-b”のテストスクリプトＴＳ２の実行が開始し、テスト実行マシン“pc-a”の次のテストスクリプトＴＳ２の実行が開始するまでの区間である。テストスクリプトＴＳ２は複数実行可能であるため、テスト実行マシン“pc-a”がテストスクリプトＴＳ２のＴＳ実行要求（図６（ｄ））を送信したとき実行許可通知を受信することになり、この区間の終わりで実行を開始することになる。
【０１１３】
この区間Ｅ４では、同時実行禁止操作ＤＢ５６は図９（ｂ）に示す状態に変化している。また、テスト実行マシン“pc-a”のテストスケジュールＤＢ１１４は図５（ｂ）に示す状態に変化し、テスト実行マシン“pc-b”のテストスケジュールＤＢ１１４は図５（ａ）に示す状態のままである。
【０１１４】
区間Ｅ５は、テスト実行マシン“pc-a”がテストスクリプトＴＳ２の実行を開始し、テスト実行マシン“pc-b”がテストスクリプトＴＳ２の実行を終了するまでの区間である。この区間Ｅ５では、同時実行禁止操作ＤＢ５６は図９（ｃ）に示す状態に変化している。また、テスト実行マシン“pc-a”のテストスケジュールＤＢ１１４は図５（ｂ）に示す状態に変化し、テスト実行マシン“pc-b”のテストスケジュールＤＢ１１４は図５（ａ）に示す状態のままである。
【０１１５】
区間Ｅ６は、テスト実行マシン“pc-b”によるテストスクリプトＴＳ２の実行終了から、テスト実行マシン“pc-b”によるテストスクリプトＴＳ１の実行開始までの区間である。テスト実行マシン“pc-b”によるテストスクリプトＴＳ１の実行は、テスト実行マシン“pc-a”によるテストスクリプトＴＳ２の実行を妨げる虞があるため、このテストスクリプトＴＳ２の実行が完了するまで許可されない。そのため、テストスクリプトＴＳ２の実行が完了するまでの間、テスト実行マシン“pc-b”はテストスクリプトＴＳ１のＴＳ実行要求（図６（ｄ））を送信し続け、この区間の終わりまでに実行許可通知を受信する。
【０１１６】
この区間Ｅ６では、同時実行禁止操作ＤＢ５６は図９（ｄ）に示す状態に変化している。また、テスト実行マシン“pc-a”のテストスケジュールＤＢ１１４は図５（ｂ）に示す状態から最後で図５（ｄ）に示す状態となり、テスト実行マシン“pc-b”のテストスケジュールＤＢ１１４は図５（ｃ）に示す状態に変化する。
【０１１７】
区間Ｅ７は、テスト実行マシン“pc-a”による一括実行が終了し、テスト実行マシン“pc-b”によるテストスクリプトＴＳ２の実行が開始してから終了するまでの区間である。この区間Ｅ７では、同時実行禁止操作ＤＢ５６は図９（ｅ）に示す状態に変化している。また、テスト実行マシン“pc-a”のテストスケジュールＤＢ１１４は図５（ｄ）に示す状態のままで、テスト実行マシン“pc-b”のテストスケジュールＤＢ１１４は図５（ｃ）に示す状態から最後で図５（ｄ）に示す状態に変化する。
【０１１８】
区間Ｅ８は、テスト実行マシン“pc-a”による一括実行も終了している区間である。既に説明したように、区間Ｅ７の終わりまでに、テストスクリプトＴＳ１の実行終了通知は、テスト実行マシン“pc-b”によって排他制御サーバ５に送信されている。また、テストスケジュールＤＢ１１４は何れのテスト実行マシン“pc-a”、“pc-b”についても図５（ｄ）に示す状態にあり、同時実行禁止操作は全て同時実行禁止操作ＤＢ５６から削除された状態である。
【産業上の利用可能性】
【０１１９】
本発明によるｈｍは、プログラム製造業、通信機器製造業等において利用可能であり、このような製品の有用性を増進する。
【符号の説明】
【０１２０】
１  テスト実行マシン
２  テスト対象ＧＵＩ操作応答サーバ
３  テストスクリプトデータベース
４  操作データベース
５  排他制御サーバ
１１  テストスクリプト一括実行ユニット
１２、１２０  入力部
１３、１３０  表示部
１４、１４０  テスト対象ＧＵＩアプリケーションクライアント部
１５、１５０  テストスクリプト実行部
１６、１６０  送受信部
２１  共有データベース
５１  実行可能性判定部
５２  同時実行禁止操作ＤＢ更新部
５３  送受信部
５４  トリガ操作データベース
５５  トリガ関連操作データベース
５６  同時実行禁止操作データベース
１１１  テストスクリプト実行要求作成部
１１２、１７１  テストスケジュール更新部
１１３、１７２  結果出力部
１１４、１７３  テストスケジュールデータベース
１１５、１７４  実行結果データベース
１７０  テストスクリプト一括実行装置
２００  ネットワーク
Ｄ１  文字列登録ウィンドウ
Ｄ１１  登録文字列ラベル
Ｄ１２  文字列入力エディットボックス
Ｄ１３  登録ボタン
Ｄ２  登録確認ウィンドウ
Ｄ２１  登録ボタン
Ｄ２２  キャンセルボタン
Ｅ１〜Ｅ４  区間
Ｆ１  ＴＳ実行要求のフレーム
Ｆ１１、Ｔ５１  テスト実行マシン名
Ｆ１２、Ｔ５２  テストスクリプト名
Ｆ１３  操作ＩＤリスト
Ｆ１４  操作ＩＤ数
Ｆ１５  操作ＩＤ配列
Ｔ１１、Ｔ３２、Ｔ４２、Ｔ５３  操作ＩＤ
Ｔ１２  WindowAttachment属性
Ｔ１３  Operation属性
Ｔ１４〜Ｔ１６  操作データベースのレコード
Ｔ２１  テストスクリプト名
Ｔ２２  実行状態
Ｔ３１  トリガエントリＩＤ
Ｔ４１  トリガ関連エントリＩＤ
Ｔ５４  同時実行禁止操作データベースのレコード
ＴＳ１、ＴＳ２  テストスクリプト
【図１】
2010186332.tif 000003
【図２】
2010186332.tif 000004
【図３】
2010186332.tif 000005
【図４】
2010186332.tif 000006
【図５】
2010186332.tif 000007
【図６】
2010186332.tif 000008
【図７】
2010186332.tif 000009
【図８】
2010186332.tif 000010
【図９】
2010186332.tif 000011
【図１０】
2010186332.tif 000012
【図１１】
2010186332.tif 000013
【図１２】
2010186332.tif 000014
【図１３】
2010186332.tif 000015
【図１４】
2010186332.tif 000016
【図１５】
2010186332.tif 000017