(57)【要約】【課題】アプリケーションテスト生成の手間を軽減する。【解決手段】命令列分割手段１１は、命令列２１を読み出し、区切り命令で命令列を分割する。通信ログ取得・分類手段１２は、分割された分割命令列を再生し、ユーザエージェント４０に操作命令を出力する。そして、操作命令に応じてユーザエージェント４０が送信したリクエストと、リクエストに対するレスポンスの通信ログを取得し、分割命令列ごとに分類する。自動テスト生成手段１３は、分類された通信ログに基づいて対象のリクエストを改変するテスト核を生成し、命令列と組み合わせた自動テスト２４を生成する。【選択図】図１
2010250583.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムにおいて、
コンピュータを、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段、
として機能させることを特徴とするアプリケーションテスト生成プログラム。
【請求項２】
前記命令列分割手段は、前記リクエストに基づいて前記アプリケーション装置から前記レスポンスを受けた後の状態が安定状態となったことを示唆する命令を前記区切り命令とする、ことを特徴とする請求項１記載のアプリケーションテスト生成プログラム。
【請求項３】
前記自動テスト生成手段は、前記分割命令列を順次再生して前記ユーザエージェントに出力させるとともに、前記分割命令列に対し前記テスト核が設定されていなかったときは、前記テスト核を実行する実行部の動作を無効とし、前記分割命令列に対し前記テスト核が設定されていたときは、前記実行部の動作を有効とする手順を前記自動テストに組み込む、ことを特徴とする請求項１または２記載のアプリケーションテスト生成プログラム。
【請求項４】
ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成方法において、
コンピュータに、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手順と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手順と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手順と、
を実行させることを特徴とするアプリケーションテスト生成方法。
【請求項５】
ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト装置において、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段と、
前記ユーザエージェントと前記アプリケーション装置との間のリクエスト及びレスポンスを中継する中継手段の動作を制御し、前記ユーザエージェントに対し、前記分割命令列を再生して前記ユーザエージェントに前記所定の処理の実行を実行させるとともに、前記テスト核が生成された前記リクエストを送信する前記分割命令列の再生時には、対応する前記テスト核に基づいて前記リクエストの横取りと改変を前記中継手段に実行させる制御手段と、
を有することを特徴とするアプリケーションテスト装置。
【発明の詳細な説明】
【技術分野】
【０００１】
アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置に関し、特に、ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置に関する。
【背景技術】
【０００２】
近年、ネットワークを介してアプリケーション装置に接続し、所定のサービスを受ける利用形態が広く普及している。例えば、Ｗｅｂサーバが提供するＷｅｂアプリケーションは、クライアント・コンピュータのＷｅｂブラウザを操作して利用することができる。このようなアプリケーションの動作確認は、操作あるいはデータの一部を変更してテストを繰り返し行う必要がある。このため、その作業は膨大となり、テストの自動化が検討されてきた。
【０００３】
ところで、アプリケーションテストの手順には、テスト対象のリクエストが通常処理される状況を作る作業と、テスト対象のリクエストをテストの目的に合うように改変し、レスポンスを検証する作業と、がある。以下の説明では前者の作業を「再現」、後者の作業を「テスト核」と呼ぶ。
【０００４】
再現に適している自動テスト手法として、例えば、Ｗｅｂブラウザに対する操作を自動化するブラウザ操作方式と呼ばれる手法がある。ブラウザ操作方式としては、Ｓｅｌｅｎｉｕｍ  ＲＣ（HYPERLINK "http://selenium-rc.openqa.org/"http://selenium-rc.openqa.org/参照）がよく知られている。また、Ｗｅｂブラウザの操作履歴に基づいて、操作の一部や入力データの一部を変更してテストを自動生成し、繰り返し実行させる方法も提案されている（例えば、特許文献１参照）。
【０００５】
一方、テスト核に適している自動テスト手法として、例えば、通信途中のリクエスト・レスポンスを横取りし、リクエストの任意の部分を改変する通信横取り方式と呼ばれる手法がある。通信横取り方式では、Ｗｅｂブラウザの操作に応じてＷｅｂサーバに対して送信されたリクエストを横取りし、予め決められたシナリオに沿って任意の部分を改変し、改変されたリクエストをＷｅｂサーバに送信する。そして、このリクエストを処理したＷｅｂサーバからのレスポンスを横取りして検証する。なお、リクエストなどの改変は、インタラクティブに手動で行うこともできる。また、リクエストの中には、サーバ装置に引き渡すべき引数を含むものもあるため、これを検出し、改変処理のシナリオにパラメータとして組み込む方法も提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−２６６９５４号公報
【特許文献２】特開２００７−２６４９６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来のアプリケーションテストは、テスト生成の自動化が容易ではないという問題点があった。
上述のように、アプリケーションテストには、テスト対象のリクエストが通常処理される状況を作る再現と、テスト対象のリクエストをテストの目的に合うように改変するテスト核と、がある。
【０００８】
再現に適しているブラウザ操作方式は、ブラウザ利用者ができることの多くを自動化することができる。しかし、この方法はブラウザ上から操作できない項目をテストすることはできないため、テスト核には適さない。例えば、Ａｊａｘ（Asynchronous JavaScript + XML）のような非同期的に生じるリクエストの改変とそのレスポンスの検証、ＪａｖａＳｃｒｉｐｔ（登録商標）などが動的に生成するリクエストの改変、ブラウザ上に表示されないフォームデータの改変などはできない。
【０００９】
一方、テスト核に適している通信横取り方式は、ブラウザ利用者の操作をシミュレートする能力は低いため、再現にはあまり適さない。
このように、ブラウザ操作方式は再現、通信横取り方式はテスト核に、それぞれ適しており、良いアプリケーションテストの自動化のためには、これらを組み合わせる必要があった。しかし、これらを組み合わせてテストを作成することは容易ではなかった。通信横取り方式では、テスト対象とするリクエスト・レスポンスだけを横取りするという仕組みがない。これは、リクエストからだけでは、リクエストがどのブラウザ操作に対応するのかを判断することは難しいことによる。従って、あるブラウザ操作に対応するリクエスト・レスポンスをテスト対象としたい場合でも、テスト対象以外のリクエスト・レスポンスも横取りしてしまう。このため、テスト全体が正しく実行されなくなる可能性がある。
【００１０】
一例として、Ｗｅｂブラウザの操作を何回か行った後に表示されるテスト対象の入力画面において、ある操作を行ったときに送信されるリクエストを改変し、アプリケーションテストを行う場合について説明する。便宜的に、テスト対象の入力画面までのＷｅｂブラウザの操作によって通信されるリクエスト・レスポンスをＲ１，Ｒ２，Ｒ３とし、テスト対象のリクエスト・レスポンスをＲ４とする。アプリケーションテストでは、Ｒ１，Ｒ２，Ｒ３については改変を行わない再現で検証し、テスト対象のＲ４のみをリクエストを改変するテスト核で検証するという制御を行うことが望ましい。しかし、上述のように、ブラウザ操作方式では、Ｒ１，Ｒ２，Ｒ３の再現を行うことはできるが、Ｒ４のリクエスト改変はできない。一方、通信横取り方式では、Ｒ１，Ｒ２，Ｒ３，Ｒ４に対応するリクエストを識別できない。このため、Ｒ４についてのみリクエストを改変するということは難しい。
【００１１】
このように、再現とテスト核とは、異なる方式で行われるため、双方の機能を満たすアプリケーションテストの自動生成は容易ではなかった。このため、アプリケーションテストの生成及び実行制御は、人手で行うほかなく、多大な手間と時間を要していた。
【００１２】
このような点に鑑み、アプリケーションテスト生成を自動化し、テスト作成の手間を軽減することが可能なアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムが提供される。このアプリケーションテスト生成プログラムは、コンピュータを、命令列分割手段、通信ログ取得・分類手段及び自動テスト生成手段として機能させる。命令列分割手段は、所定のサービスの提供を受けるユーザエージェントに対し、アプリケーション装置に対するテスト対象のリクエストの送信及びリクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得する。そして、命令列の表す処理が区切れる区切り命令を命令列から検出し、区切り命令ごとに命令列を分割して、分割命令列を生成する。通信ログ取得・分割手段は、分割命令列ごとに、分割命令列に含まれる命令列に基づいてユーザエージェントへの指示を再生して出力する。そして、ユーザエージェントが送信したリクエストと、リクエストに対応してアプリケーション装置から送信されたレスポンスと、を通信ログとして取得する。この通信ログを、通信ログ取得時に再生した分割命令列に対応付けて記憶手段に記憶し、通信ログを分割命令列ごとに分類したログ分類表を生成する。自動テスト生成手段は、ログ分類表からテスト対象のリクエストを発生させた命令列を含む分割命令列に対応付けられている前記通信ログを抽出する。そして、抽出された通信ログに基づいてリクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、分割命令列とテスト核とを協働して実行させる自動テストを生成する。
【００１４】
このようなアプリケーションテスト生成プログラムによれば、コンピュータを、アプリケーションテスト生成装置として機能させる。所定のサービスの提供を受けるユーザエージェントは、アプリケーション装置に対し、サービスを要求するリクエストを送信し、レスポンスを得て所定の処理を行う。アプリケーションテスト生成装置は、ユーザエージェントに対し、アプリケーション装置に対するテスト対象のリクエストの送信及びレスポンス処理を含む所定の処理の実行を指示する命令から成る命令列を取得する。そして、命令列に含まれる区切り命令によって命令列を分割し、分割命令列を生成する。次に、分割命令列ごとに、分割命令列を再生し、ユーザエージェントに出力して所定の処理を実行させる。このとき、ユーザエージェントが送信したリクエストと、これに対するレスポンスとを通信ログとして取得し、再生した分割命令列に対応付けて記憶手段に記憶する。分割命令列ごとにこの手順を繰り返し、通信ログを分割命令列ごとに分類したログ分類表を生成する。次に、ログ分類表に基づき、テスト対象のリクエストを含む通信ログを抽出し、リクエストの改変を含むテスト手順を記述したテスト核を生成する。こうして生成されたテスト核と分割命令列とを組み合わせ、分割命令列とテスト核を協働して実行させる自動テストを生成する。
【００１５】
また、上記課題を解決するために、コンピュータに、上記の処理機能によって実現される処理手順を実行させるアプリケーションテスト生成方法と、アプリケーションテストを実行するアプリケーションテスト装置と、が提供される。
【発明の効果】
【００１６】
開示のアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置によれば、再現テストと、テスト核テストとを協働して実行させることができるアプリケーションテストを自動的に生成することができる。これによって、アプリケーションテストの作成に要する手間を軽減することができる。
【図面の簡単な説明】
【００１７】
【図１】発明の概要を示した図である。
【図２】実施の形態のシステムのハードウェア構成を示した図である。
【図３】テスト生成装置のソフトウェア構成を示した図である。
【図４】命令列（Ｓｅｌｅｎｅｓｅ）の一例を示した図である。
【図５】命令列分割表の一例を示した図である。
【図６】ログ群（ｄ１〜ｄ３）の一例を示した図である。
【図７】ログ群（ｄ４〜ｄ９）の一例を示した図である。
【図８】ログ分類表の一例を示した図である。
【図９】アプリケーションテスト生成処理の手順を示したフローチャートである。
【図１０】命令列分割処理の手順を示したフローチャートである。
【図１１】通信ログ取得・分類処理の手順を示したフローチャートである。
【図１２】自動テスト装置の構成を示した図である。
【発明を実施するための形態】
【００１８】
以下、実施の形態を図面を参照して説明する。まず、発明の概要について説明し、その後、具体的な内容を説明する。
図１は、発明の概要を示した図である。
【００１９】
テスト生成装置１０は、所定のサービスを提供するアプリケーション装置として動作するサーバ６０に、ネットワークを介して接続する。そして、サーバ６０のアプリケーションプログラムを対象とするアプリケーションテストを生成する。
【００２０】
ここで、ユーザエージェント４０とサーバ６０の関係について説明する。ユーザエージェント４０は、ユーザから指示を受けたとき、指示に対応するリクエストをサーバ６０に送信する。サーバ６０は、リクエストに対応する処理を実行し、レスポンスを返す。そして、ユーザエージェント４０は、応答として得られたレスポンスに基づくサービスをユーザに提供する。例えば、ユーザエージェント４０は、表示画面上に操作ボタンを表示しておく。ユーザが操作ボタンを操作して指示すると、操作ボタンに応じた情報を要求するリクエストをサーバ６０に送信する。サーバ６０から要求された情報を含むレスポンスが送られてきたときは、レスポンスに基づく表示を行い、ユーザに情報を提供する。
【００２１】
なお、通信ログ取得装置５０は、ユーザエージェント４０と、サーバ６０との間で交換されるリクエスト及びレスポンスを中継し、通過したリクエスト及びレスポンスを通信ログとして残す処理を行う。
【００２２】
テスト生成装置１０は命令列分割手段１１、通信ログ取得・分類手段１２及び自動テスト生成手段１３の各処理手段と、記憶手段１４とを有し、サーバ６０のアプリケーションテストを生成する。各処理手段は、コンピュータが、アプリケーションテスト生成プログラムを実行することにより、その処理機能を実現する。
【００２３】
命令列分割手段１１は、命令列２１を取得し、所定の区切り命令で命令列を分割する。命令列２１には、ユーザの指令と同様の操作命令をユーザエージェント４０に出力することを指示する命令が実行順に記述されている。例えば、ユーザエージェント４０に対し、「表示画面上に表示されている最初のリンクをクリックせよ」というような操作命令が記述される。この命令列２１に基づいて、ユーザエージェント４０に対する操作命令を再生することにより、ユーザができることの多くを自動化することができる。命令列分割手段１１では、この命令列２１に記述される命令を解析し、命令列から再生される操作命令が区切れる区切り命令を検出する。区切り命令は、予めユーザが設定しておいてもよい。例えば、ユーザエージェント４０の表示画面でリンクが設定されているアイコンをクリックしてあるページを開くという操作について、「アイコンをクリック」、「ページが読込まれるのを待つ」、「ページが要求したものかをチェックする」という命令列が記述されていたとする。この命令の中で処理が区切られる命令列を検出し、区切り命令とする。この場合、「アイコンをクリック」と、「ページが読込まれるのを待つ」という一連の操作命令がエージェント４０で実行されると、リクエストが送信され、それに対するレスポンスが完了したと推定される。そこで、「ページが読込まれるのを待つ」、あるいは、「ページが要求したものかをチェックする」を区切り命令とする。これは、ユーザエージェント４０がリクエストをしてレスポンスを受けた後に状態が安定したことを示唆する命令と言い換えることもできる。命令列分割手段１１は、指定された区切り命令を表す文字パターンと、命令列２１の各命令列の文字パターンとを照合し、一致するものを命令列から検出する。そして、区切り命令ごとに命令列を分割し、分割命令列を生成する。どこで分割したかは、命令列分割表２２に登録しておく。
【００２４】
通信ログ取得・分類手段１２は、分割命令列を再生してユーザエージェント４０に操作命令を出力する。そして、このときの通信ログを分割命令列ごとに分類する。操作命令に応じた処理を実行するときにユーザエージェント４０から送信されたリクエストと、リクエストを受けて所定のアプリケーション処理を行ったサーバ６０からのレスポンスは、通信ログ取得装置５０によって通信ログとして記録される。通信ログ取得・分類手段１２は、分割命令列を再生し、このとき通信ログ取得装置５０から取得した通信ログを再生した分割命令列に対応付け、記憶手段１４に格納する。これを分割命令列ごとに繰り返すことにより、分割命令列ごとに分類された通信ログが得られる。具体的には、通信ログと、このときに再生された分割命令列とを対応付け、その対応関係をログ分類表２３に登録する。上記の例で、「ページが要求したものかをチェックする」命令を区切り命令とし、分割命令列を実行すると、「アイコンをクリック」から区切り命令までの処理で発行されたリクエストと、レスポンスとが通信ログとして記録される。こうして、分割命令列と、これに対応する通信ログとの対応関係が、ログ分類表２３に登録される。
【００２５】
自動テスト生成手段１３は、ログ分類表２３に基づいて、テスト核を生成するテスト対象のリクエストに対応する通信ログを抽出する。例えば、テスト核を通信ログに含まれるリクエストの各フォームパラメータについて１つずつ生成する場合には、テスト対象のリクエストは、フォームパラメータを含むリクエストになる。そして、抽出された通信ログに基づいて、リクエストの改変を含むテスト手順を記述したテスト核を生成する。例えば、リクエストの各フォームパラメータについて、その値を無効な値に改変する手順が生成される。さらに、テスト核を分割命令列と組み合わせ、分割命令列とテスト核とを協働して実行させる自動テストを生成する。
【００２６】
記憶手段１４には、命令列分割手段１１によって分割された命令列の区分を示した命令列分割表２２、分割命令列と通信ログとを対応付けたログ分類表２３などの情報が記憶される。
【００２７】
このような構成のテスト生成装置１０の動作及びアプリケーションテスト生成方法について説明する。
テスト生成装置１０は、処理が開始されると、ユーザエージェント４０への操作命令の出力を指示する命令列２１を取得する。命令列分割手段１１は、区切り命令と命令列の命令とを照合し、一致する区切り命令を検出する。そして、検出された区切り命令で命令列を分割する。区切り命令は、サーバ６０の対応処理が区切られる命令、例えば、ユーザエージェント４０がリクエストをしてレスポンスを受けた後に状態が安定したことを示唆する命令が予め設定される。分割した命令列に関する情報は、命令列分割表２２として記憶手段１４に格納される。
【００２８】
通信ログ取得・分類手段１２は、命令列分割表２２に基づいて、分割命令列単位で命令列を再生し、ユーザエージェント４０への操作命令を出力する。ユーザエージェント４０は、操作命令に応じてリクエストをサーバ６０に送信する。サーバ６０は、リクエストに応じたアプリケーション処理を行い、レスポンスを返す。このときのリクエストとレスポンスは、通信ログ取得装置５０が、通信ログとして記録している。通信ログ取得・分類手段１２は、分割命令列再生時の通信ログを通信ログ取得装置５０から取得し、分割命令列に対応付け、その対応関係をログ分類表２３に登録する。分割命令列ごとに、分割命令列の再生と、そのときの通信ログの取得とログ分類表２３への登録を行うことにより、ログ分類表２３には、分割命令列ごとに分類された通信ログの情報が登録される。
【００２９】
自動テスト生成手段１３は、ログ分類表２３に基づいてテスト核を生成するテスト対象のリクエストに対応する通信ログを抽出する。そして、抽出した通信ログに基づいて、リクエストの改変を含むテスト手順を指示したテスト核を生成する。テスト核は、分割命令列と組み合わせられ、分割命令列とテスト核とを協働して実行させる自動テスト２４が生成される。例えば、テスト核が生成されたリクエストを含む分割命令列が実行されるとき、このテスト核も実行させるように対応付けられる。リクエストにテスト核が生成されていない分割命令列では、テスト核は実行させない。
【００３０】
これにより、再現とテスト核とを組み合わせた自動テスト２４が生成される。自動テスト２４が実行されると、命令列２１に設定された命令列が分割命令列単位で順次再生される。このとき、命令列にテスト核が対応付けられていなければ、再現のみが実行される。すなわち、命令列に基づいてユーザエージェント４０へ操作指示を行い、ユーザの操作を自動的に再現する作業のみが行われる。そして、命令列にテスト核が対応付けられていれば、再現とともにテスト核が実行される。例えば、再現によって再生された操作命令に応じてユーザエージェント４０が送信したテスト対象のリクエストを横取りし、横取りしたリクエストをテスト核で改変した後、サーバ６０へ送信することができる。
【００３１】
このように、テスト生成装置１０によれば、再現とテスト核とを協働させることの可能なアプリケーションテストを自動生成することが可能となる。また、生成されたアプリケーションテストを使ったテストでは、テスト対象のリクエストが発生するときのみテスト核を実行させ、サーバ６０の動作確認を行うことが可能となる。
【００３２】
以下、ユーザエージェント４０がＷｅｂブラウザであり、サーバ６０がＷｅｂアプリケーションであるアプリケーションテスト生成を例にとり、実施の形態を説明する。
図２は、実施の形態のシステムのハードウェア構成を示した図である。
【００３３】
テスト生成装置１００は、ネットワーク７００を介して、テスト対象のアプリケーションを搭載するサーバ６００に接続する。
テスト生成装置１００のハードウェア構成について説明する。テスト生成装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、及び通信インタフェース１０６が接続されている。
【００３４】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理装置１０４には、モニタ１０８が接続されており、ＣＰＵ１０１からの命令に従って画像をモニタ１０８の画面に表示させる。入力インタフェース１０５には、キーボード１０９ａやマウス１０９ｂが接続されており、キーボード１０９ａやマウス１０９ｂから送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。通信インタフェース１０６は、ネットワーク７００に接続されており、ネットワーク７００を介してサーバ６００との間でデータの送受信を行う。
【００３５】
このようなハードウェア構成によって、テスト生成装置１００の処理機能を実現することができる。
次に、テスト生成装置１００のソフトウェア構成について説明する。図３は、テスト生成装置のソフトウェア構成を示した図である。
【００３６】
テスト生成装置１００は、テスト生成部１１０、Ｗｅｂブラウザ（以下、ブラウザとする）１２０、ブラウザ操作部１３０、ログ取得部１４０及び記憶部１５０を有し、ネットワークを介してサーバ６００と接続する。
【００３７】
テスト生成部１１０は、ブラウザ操作部１３０を制御し、命令列に従ってブラウザ１２０への操作を自動再生させる。また、ログ取得部１４０を制御し、ブラウザ１２０とサーバ６００との間の通信ログを取得する。そして取得した通信ログと、命令列とを協働させて実行するアプリケーションテストを自動生成する。詳細は後述する。
【００３８】
ブラウザ１２０は、サーバ６００が提供するＨＴＭＬ（Hyper Text Markup Language）ファイルや画像ファイル、音楽ファイルなどをダウンロードし、モニタ１０８、あるいは音声出力装置に再生出力する。表示画面の操作入力などに応じてリクエストをサーバ６００に送信し、サーバ６００からのレスポンスからレイアウトを解析して表示・再生する。
【００３９】
ブラウザ操作部１３０は、ブラウザ１２０に対する命令列を再生し、ブラウザ１２０への操作命令を自動的に発生させる。ここでは、ブラウザ操作方式の自動テストを行うテストツールとして、「Ｓｅｌｅｎｉｕｍ（セレニウム）  ＲＣ」を用いるとする。
【００４０】
ログ取得部１４０は、ブラウザ１２０とサーバ６００との間の通信を中継する中継点に設置され、その通信を横取りして通信ログとして記録する。例えば、ＨＴＴＰ（Hyper Text Transfer Protocol）プロキシサーバとして実装する。
【００４１】
記憶部１５０は、テスト生成部１１０によって生成される命令列分割表２２、ログ分類表２３などの情報を記憶する。
サーバ６００は、Ｗｅｂサーバであり、ＨＴＭＬファイルや画像ファイルなどの情報を蓄積しておき、ユーザエージェントのブラウザ１２０からの要求に応じてアプリケーションプログラムを実行する。実行結果は、レスポンスとしてブラウザ１２０に返す。
【００４２】
ここで、テスト生成部１１０の詳細について説明する。
命令列分割部１１１は、ブラウザ１２０への操作を自動化する命令列を解析し、ブラウザ１２０の状態が安定したことを示唆する命令を区切り命令として、命令列を分割する。分割した分割命令列について命令列分割表２２を生成し、記憶部１５０に格納する。
【００４３】
通信ログ取得・分類部１１２は、命令列分割表２２に基づいて、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で命令列を再生させる。また、ログ取得部１４０を制御し、このときブラウザ１２０と、サーバ６００との間で交換されるリクエスト及びレスポンスを取得させる。そして、ログ取得部１４０が取得したリクエスト及びレスポンスを記録した通信ログを取得し、分割命令列ごとに分類する。ここでは、分割命令列を実行させ、そのときに取得された通信ログをこの分割命令列に分類する。この処理を分割命令列ごとに繰り返し、命令列全体の通信ログを分割命令列ごとに分類する。
【００４４】
テスト核生成部１１３は、ログ取得部１４０が取得した通信ログの各リクエストの各フォームパラメータについて１つずつテスト核を生成する。
自動テスト生成部１１４は、テスト核生成部１１３が生成したテスト核と、再現のための命令列とを協働させて動作させる自動テストを生成する。
【００４５】
このようなテスト生成装置１００の動作及びアプリケーションテスト生成方法について、具体例を用いて詳細に説明する。
命令列分割部１１１には、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０が実行する命令列が入力される。命令列は、例えば、Ｓｅｌｅｎｉｕｍ  ＲＣの命令列表記形式であるＳｅｌｅｎｅｓｅ形式で記述されている。
【００４６】
図４は、命令列（Ｓｅｌｅｎｅｓｅ）の一例を示した図である。
命令列（Ｓｅｌｅｎｅｓｅ）１０００には、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０が再生するブラウザに対する操作が、Ｓｅｌｅｎｅｓｅ形式で記述されている。Ｓｅｌｅｎｅｓｅ形式は、要素３つが１組となって構成される。具体的には、コマンド（command）１００１、ターゲット１００２（target）及び値（value）１００３が１つの組となり、命令列を構成している。コマンド１００１は、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０に対してどう動くかを指示する命令を表している。命令の詳細を含むＳｅｌｅｎｉｕｍについては、例えば、「Ｓｅｌｅｎｉｕｍ  徹底入門」（笠谷真也・宮澤信吾・増井雄一郎著、ＷＥＢ＋ＤＢ  ＰＲＥＳＳ編集部編「ＷＥＢ＋ＤＢ  ＰＲＥＳＳ」Ｖｏｌ．３６、技術評論社、２００６年、４１頁）に記載されている。
【００４７】
なお、図の最左欄は、行番号を表している。
例えば、行番号１の行は、コマンド１００１が「ｏｐｅｎ」、ターゲット１００２が「／」と記述されている。これは、「ＵＲＩ（Uniform Resource Identifier）が『／』であるページをリクエストし、ページが読込まれるまで待つ」という意味になる。行番号２の行は、コマンド１００１が「ａｓｓｅｒｔＴｉｔｌｅ」、ターゲット１００２が「トップページ」と記述されている。これは、「現在のページのタイトルが『トップページ』でなければエラーとする」という意味になる。そして、行番号が５の行は、コマンド１００１が「ｃｌｉｃｋＡｎｄＷａｉｔ」、ターゲット１００２が「／／ｉｎｐｕｔ［＠ｖａｌｕｅ＝‘ログイン’］」と記述されている。これは、「現在のページから値が『ログイン』であるｖａｌｕｅ属性を持つｉｎｐｕｔ要素を探し、それをクリックし、ページが読込まれるまで待つ」という意味になる。なお、Ｓｅｌｅｎｉｕｍ  ＲＣは、このような操作命令を、ブラウザ１２０上でＪａｖａＳｃｒｉｐｔによって解釈・実行する。
【００４８】
このようなブラウザ命令列（Ｓｅｌｅｎｅｓｅ）は、予めユーザによって設定されたものを読込む。ところで、有意義な自動テストを生成するためには、繰り返し何度か実行しても正常に動作する命令列になっていることが望ましい。そこで、ブラウザ命令列（Ｓｅｌｅｎｅｓｅ）の入力の際には、そのような入力を行うように促すようにしてもよい。
【００４９】
命令列分割部１１１では、このような命令列（Ｓｅｌｅｎｅｓｅ）１０００を解析し、所定の区切り命令で分割する。分割は、ブラウザ１２０の状態が安定したことを示唆する命令列の後で区切って行う。ブラウザ１２０の状態が安定するとは、ブラウザ１２０の動作が時間が経っても変化しないであろう状態であることをいう。
【００５０】
このようにブラウザ１２０の状態が安定したことを示唆するコマンド（区切り命令）には、「ｐａｕｓｅ」、「ｏｐｅｎ」、「・・・ＡｎｄＷａｉｔ」、「ｗａｉｔＦｏｒ・・・」がある。「ｐａｕｓｅ」は、ターゲットで指定された時間だけ待つという命令である。「ｏｐｅｎ」は、ターゲットで指定されたＵＲＩのページをリクエストし、ページが読込まれるまで待つという命令である。「・・・ＡｎｄＷａｉｔ」は、操作・・・をした後、ページが読込まれるまで待つという命令である。そして、「ｗａｉｔＦｏｒ・・・」は、状態・・・が成立するまで待つという命令である。
【００５１】
命令列分割部１１１は、命令列（Ｓｅｌｅｎｅｓｅ）１０００のコマンド１００１と、上記の区切り命令とを比較し、一致しているものがあれば、そのコマンドまでの一区切りとして命令列を分割する。例えば、上記の区切り命令「ｐａｕｓｅ」、「ｏｐｅｎ」、「・・・ＡｎｄＷａｉｔ」、「ｗａｉｔＦｏｒ・・・」を、図４の命令列（Ｓｅｌｅｎｅｓｅ）１０００に適用したとする。この場合、行番号１にコマンド「ｏｐｅｎ」が検出されるので、命令列をここで分割することができる。次に、行番号５のコマンド「ｃｌｉｃｋＡｎｄＷａｉｔ」、行番号８のコマンド「ｃｌｉｃｋＡｎｄＷａｉｔ」、行番号１１の「ｃｌｉｃｋＡｎｄＷａｉｔ」、行番号１３の「ｃｌｉｃｋＡｎｄＷａｉｔ」が検出され、分割される。命令列をどこで分割したかという情報は、命令列分割表１１００に登録される。
【００５２】
なお、分割の方法として、上記の区切り命令の直後で区切るのではなく、後続の連続した、操作の指示ではない命令（例えば、「ａｓｓｅｒｔ・・・」や「ｖｅｒｉｆｙ・・・」など）の後で区切っても良い。
【００５３】
図５は、命令列分割表の一例を示した図である。
命令列分割表１１００は、区分識別子１１０１及び命令列行番号１１０２の情報項目を有し、分割後の各区分と、命令列の行番号との対応付けを記した表である。
【００５４】
区分識別子１１０１は、分割された分割命令列を識別するため、文字「ｓ」と、通し番号とを連結した識別子である。「ｓ１」が最初の命令列を含む区分を識別し、順に「ｓ２」、「ｓ３」、・・・、「ｓｎ」と対応する命令列の番号が大きくなる（なお、ｎは任意の整数）。
【００５５】
命令列行番号１１０２は、区分識別子１１０１に対応する命令列の行番号を示している。
図５の命令列分割表１１００は、上述の命令列の行番号１，５，８，１１，１３で命令列を分割した場合を示している。例えば、区分ｓ１には行番号１、区分ｓ２には行番号２〜５、区分ｓ３には行番号６〜８、区分ｓ４には行番号９〜１１、区分ｓ５には行番号１２〜１３、区分ｓ６には行番号１４、の命令列がそれぞれ対応付けられている。生成された命令列分割表１１００は、記憶部１５０に格納される。
【００５６】
続いて、通信ログ取得・分類部１１２によって、命令列分割部１１１が分割した分割命令列を単位として通信ログが取得され、分割命令列ごとに分類される。
まず、ログ取得部１４０の動作について説明する。ログ取得部１４０は、ブラウザ１２０からサーバ６００に送信されたリクエストを横取りし、通信ログに記録した後、サーバ６００に送信する。同様に、サーバ６００から送信されたレスポンスも横取りして通信ログに記録した後、ブラウザ１２０に返す。こうして取得した１組のリクエスト・レスポンスに、識別子を割り当て順次保存していく。ここでは、ＯＳのファイルシステムにディレクトリを生成し、そのディレクトリの下に通信ログを保存する。識別子は、文字「ｄ」と、通し番号を連結して生成するとする。「ｄ１」が最初に取得されたログの組で、順に、「ｄ２」、「ｄ３」、・・・「ｄｎ」と取得されたログが蓄積される。
【００５７】
図６，図７は、ログ群の一例を示した図である。図６は、ディレクトリｄ１からｄ３のログ群を示している。図７は、ディレクトリｄ４からｄ９のログ群を示している。
ログ群１２００ａ，１２００ｂは、図４に示した命令列を実行したときに、得られた通信ログを示している。また、図６，図７の各ディレクトリに対応する上段のログはリクエスト、下段のログはレスポンスを示している。
【００５８】
通信ログ取得・分類部１１２は、命令列分割表１１００に基づき、各区分の分割命令列をブラウザ操作部１３０で再生させ、そのときログ取得部１４０がログ群１２００ａ，１２００ｂに新たに設定したログを、当該分割命令列で発生した通信と判断する。そして、このログと、分割命令列の区分とを対応付けたログ分類表２３を生成する。
【００５９】
具体例で説明する。
図８は、ログ分類表の一例を示した図である。ログ分類表１３００ａは、区分識別子１３０１と、ログのディレクトリ名１３０２とが対応付けられている。ログ分類表１３００ｂ，１３００ｃも同様である。
【００６０】
（Ａ）ログ分類表（区分ｓ１まで）は、最初の区分ｓ１に対応する通信ログのディレクトリ名が登録された状態を示している。
通信ログ取得・分類部１１２は、図５に示した命令列分割表１１００の最初の区分ｓ１の命令列（命令列番号１）をブラウザ操作部１３０に実行させる。ブラウザ操作部１３０は、区分ｓ１に指定された、図４に示した命令列（Ｓｅｌｅｎｅｓｅ）１０００の命令列番号１の「ｏｐｅｎ」コマンドを実行する。これにより、ブラウザ１２０は、該当するページの情報を要求するリクエストをサーバ６００に送信し、サーバ６００からレスポンスが返る。そのやり取りは、ログ取得部１４０が記録しておく。図６に示したログ群１２００ａのディレクトリｄ１が設定される。通信ログ取得・分類部１１２は、ディレクトリｄ１の通信ログを取得して記憶部１５０に保存する。さらに、この通信は、区分ｓ１で発生したものとしてログ分類表１３００ａに登録する。ログ分類表１３００ａには、区分識別子ｓ１と、ログのディレクトリ名ｄ１とが対応付けて登録される。
【００６１】
（Ｂ）ログ分類表（区分ｓ２まで）は、次の区分ｓ２までの通信ログのディレクトリ名が登録された状態を示している。
通信ログ取得・分類部１１２は、上記と同様に、ブラウザ操作部１３０に指示し、次の区分ｓ２の分割命令列を再生させる。そして、そのとき記録された通信ログをログ取得部１４０から取得する。ここでは、ディレクトリｄ２とｄ３の通信ログが取得される。取得したログ群は、区分ｓ２で発生したものとして、ログ分類表１３００ｂに登録する。ログ分類表１３００ｂには、ログ分類表１３００ａの登録に加え、区分識別子ｓ２と、ログのディレクトリ名ｄ２，ｄ３とが対応付けて登録される。
【００６２】
以下、同様に、ログの取得と、ログ分類表の更新を交互もしくは並行して行う。
（Ｃ）ログ分類表（最終）は、最後の区分ｓ６まで実行されたときの通信ログのディレクトリ名が登録された状態を示している。
【００６３】
通信ログ取得・分類部１１２は、上記と同様の手順を、さらに、区分ｓ３，ｓ４，ｓ５，ｓ６と順に再生する。そして、再生に伴って取得された通信ログは随時保存していき、再生が終わったら保存されたログのディレクトリ名を区分に対応付けてログ分類表１３００ｃに登録する。なお、再生の途中で、命令列を正常に実行できないなどのエラーが起きたときは、その旨を通知する出力を行って、処理を終了する。
【００６４】
こうして、分割命令列ごとに、対応するブラウザ１２０とサーバ６００間のリクエスト・レスポンスのログが得られる。
テスト核生成部１１３は、ログ分類表１３００ｃの分類ごとに、ログを抽出し、抽出されたログのテスト対象のリクエストについてテスト核を生成する。ここでのテスト対象は、リクエストに含まれるフォームパラメータであるとする。フォームパラメータを有するリクエストについては、テスト核を生成し、フォームパラメータがないリクエストについては、テスト核は生成しない。なお、フォームパラメータかどうかは、リクエスト形式等で推測する。
【００６５】
生成されたテスト核には、識別子を与える。例えば、テスト核の元となった通信ログのディレクトリ名と、文字「−」と、パラメータ名とを連結した文字列などとすることができる。テスト核には、リクエストの改変など、テスト核における処理の実行手順が記述される。テスト核の一例を説明する。
【００６６】
（１）  横取りしたリクエストが、テスト対象のフォームパラメータを有するリクエストであることをＵＲＬやメソッドで確認する。違う場合は、そのリクエスト・レスポンスを通常のプロキシサーバと同様に中継する。
【００６７】
（２）  テスト対象のリクエストのフォームパラメータの値を文字「ａ」を１０，００１個連結した文字列に変更したリクエストを生成し、送信する。
（３）  サーバ６００からのレスポンスのステータスコードが５００以上のとき、エラーメッセージを出力する。
【００６８】
（４）  改変前の元のリクエストをサーバ６００に送信し、レスポンスを受信する。
（５）  ブラウザ１２０に、そのレスポンスを提供する。
（６）  テスト核の処理が完了した旨を出力する。
【００６９】
テスト核には、このような処理手順が、テスト装置が実行可能な形式で記述される。例えば、通信横取り方式の実装上で動作する処理（プログラム）として出力する。
この例のテスト核では、リクエストがテスト対象のリクエストであれば、フォームパラメータの値が改変され、文字「ａ」が１０，００１個付加され、サーバ６００に送信する。そして、そのレスポンスのステータスコードを確認し、５００以上であればエラーメッセージが出力されるという処理が行われる。このように、このテスト核は、バッファー・オーバーランの脆弱性を発見するのに役立つテスト内容となっている。また、（４）以降の処理は、このテスト自体には直接関係ないが、元と同じ（正常な）リクエストを発行することで、サーバ側の状態を安定させやすくすることができる。
【００７０】
このテスト核の内容を、図６に示したログ群１２００ａに適用した場合について説明する。
ディレクトリｄ１のリクエストにはフォームパラメータがないので、ｄ１については、テスト核を生成しない。
【００７１】
ディレクトリｄ２には、フォームパラメータが３つある。リクエストのボディ（最後の行）の「ａｃｔｉｏｎ＝ｌｏｇｉｎ＆ｕｓｅｒ＝ｔｅｓｔ＆ｐａｓｓｗｏｒｄ＝ｔｅｓｔ」に含まれる「ａｃｔｉｏｎ」、「ｕｓｅｒ」、「ｐａｓｓｗｏｒｄ」である。よって、ディレクトリｄ２については、それぞれのパラメータについて、識別子がｄ２−ａｃｔｉｏｎ、ｄ２−ｕｓｅｒ、ｄ２−ｐａｓｓｗｏｒｄという計３つのテスト核が生成される。
【００７２】
例として、テスト核ｄ２−ａｃｔｉｏｎの生成について説明する。上記（１）から（６）に示したテスト核の内容を適用すると、テスト核ｄ２−ａｃｔｉｏｎは次のようになる。
【００７３】
（１ａ）  横取りしたリクエストが、「ＰＯＳＴ  ／ｓｅｓｓｉｏｎ．ｊｓｐ  ＨＴＴＰ／」で始まっている場合のみ、以降の処理を進める。違う場合は、そのリクエスト・レスポンスを通常のプロキシサーバと同様に、中継する。
【００７４】
（２ａ）  リクエストのフォームパラメータ「ａｃｔｉｏｎ」の値を文字「ａ」を１０，００１個連結した文字列に変更したリクエストを生成し、送信する。なお、生成したリクエストのＣｏｎｔｅｎｔ−Ｌｅｎｇｔｈヘッダフィールドなども送信前に適切に変更しておく。
【００７５】
（３ａ）  レスポンスのステータスコードが５００以上のとき、エラーメッセージを出力する。
（４ａ）  元のリクエストを送信し、レスポンスを受信する。
【００７６】
（５ａ）  ブラウザ１２０側へそのレスポンスを提供する。
（６ａ）  テスト核ｄ２−ａｃｔｉｏｎの処理が終了した旨を出力する。
というテスト核ｄ２−ａｃｔｉｏｎが生成される。なお、（１ａ）は上記の（１）に対応する。（２ａ），（３ａ），（４ａ），（５ａ），（６ａ）についても同様である。
【００７７】
この例では、テスト核の内容を予め決めていた。しかし、テスト核の内容は、別途入力として受付けるとすることもできる。また、ここでは、フォームパラメータを変更するとしたが、それ以外のテスト核を生成するとしてもよい。さらに、識別子は、一例であり、生成するテスト核の内容に応じて適宜設定してよい。
【００７８】
こうして、テスト核が生成されると、自動テスト生成部１１４は、各テスト核を適当なタイミングで実行させる自動テストを生成する。
自動テストは、入力された命令列（Ｓｅｌｅｎｅｓｅ）と、テスト核とを協働させるテストである。すなわち、再現の実施には、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０を使い、テスト核の実施には、ＨＴＴＰのプロキシサーバとして実装した通信横取り装置を使う。
【００７９】
このような自動テストを生成するため、自動テスト生成部１４０は、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で命令列（Ｓｅｌｅｎｅｓｅ）を再生させながら、再生途中のあるタイミングでテスト核を有効化させるテスト手順を生成する。テスト核を有効化するタイミングは、例えば、テスト核に対応する区分識別子に属する命令列を再生する直前とする。
【００８０】
また、再生の途中、あるいは、所定のタイミングでテスト核の処理が完了したかを確認する手順を加えるとしてもよい。確認のタイミングは、例えば、テスト核に対応する区分識別子に対応する命令列を再生した直後とする。
【００８１】
自動テスト生成手順の一例を説明する。
＜１＞  テスト核の識別子から、対応するログのディレクトリ名を取得する。
＜２＞  そのディレクトリ名に対応する区分識別子を、ログ分類表１３００ｃから取得する。
【００８２】
＜３＞  その区分識別子に対応する命令列行番号を、命令列分割表１１００から取得する。以下、命令列行番号のうち、区分識別子に対応する最小の番号を最小行番号、最大の番号を最大行番号と、それぞれ呼ぶ。
【００８３】
＜４＞  ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０と、通信横取り装置を準備・起動する処理を出力する。
＜５＞  命令列（Ｓｅｌｅｎｅｓｅ）のうち、最小行番号より前の命令列（テスト対象の区分識別子より前の区分識別子に属する命令列）をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。
【００８４】
＜６＞  通信横取り装置でテスト核を有効化する処理を出力する。
＜７＞  命令列（Ｓｅｌｅｎｅｓｅ）のうち、最小行番号から最大行番号までの命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。
【００８５】
＜８＞  有効化したテスト核で処理が完了した旨の出力がされたことを確認する処理を出力する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力するようにする。
【００８６】
＜９＞  テスト核を無効化し、命令列（Ｓｅｌｅｎｅｓｅ）のうち最大行番号から後の命令列（テスト対象の区分識別子より後ろの区分識別子に属する命令列）をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。
【００８７】
なお、＜９＞の処理は、なくても意味のある自動テストとなるが、命令列（Ｓｅｌｅｎｅｓｅ）を最後まで再生することで、サーバ側の状態を安定しやすくすることができる。
この手順で生成した自動テストは、アプリケーションの自動テストを実行する自動テスト装置の制御部にロードされ、実行される。自動テスト装置の詳細については後述する。命令列（Ｓｅｌｅｎｅｓｅ）はＳｅｌｅｎｉｕｍ  ＲＣに、テスト核は通信横取り装置に、それぞれ出力される。
【００８８】
例として、テスト核ｄ２−ａｃｔｉｏｎに適用した場合について説明する。上記の自動テスト生成手順の内容を適用すると、テスト核ｄ２−ａｃｔｉｏｎに対応する自動テストの生成手順は次のようになる。
【００８９】
＜１ａ＞  テスト核の識別子「ｄ２−ａｃｔｉｏｎ」から、対応するログのディレクトリ名「ｄ２」を取得する。
＜２ａ＞  そのディレクトリ名「ｄ２」に対応する区分識別子「ｓ２」を、ログ分類表１３００ｃから取得する。
【００９０】
＜３ａ＞  その区分識別子「ｓ２」に対応する命令列行番号「２〜５」を、命令列分割表１１００から取得する。よって、最小行番号は「２」、最大行番号は「５」となる。
＜４ａ＞  ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０と、通信横取り装置を準備・起動する処理を出力する。
【００９１】
＜５ａ＞  命令列（Ｓｅｌｅｎｅｓｅ）のうち、命令列行番号「１」の命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。
＜６ａ＞  通信横取り装置でテスト核ｄ２−ａｃｔｉｏｎを有効化する処理を出力する。
【００９２】
＜７ａ＞  命令列（Ｓｅｌｅｎｅｓｅ）のうち、命令列行番号「２」から「５」までの命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。
＜８ａ＞  テスト核ｄ２−ａｃｔｉｏｎで処理が完了した旨の出力がされたことを確認する処理を出力する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力するようにする。
【００９３】
＜９ａ＞  テスト核ｄ２−ａｃｔｉｏｎを無効化し、命令列行番号「６」から「１４」までの命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する処理を出力する。なお、＜１ａ＞は上記の＜１＞に対応する。＜２ａ＞，＜３ａ＞，＜４ａ＞，＜５ａ＞，＜６ａ＞，＜７ａ＞，＜８ａ＞，＜９ａ＞についても同様である。
【００９４】
ここで、命令列（Ｓｅｌｅｎｅｓｅ）やテスト核ｄ２−ａｃｔｉｏｎといったデータは、生成する自動テストに含める。
上記テスト核ｄ２−ａｃｔｉｏｎに対応する自動テストの生成手順により、生成される自動テストの処理は次のようになる。
【００９５】
＜１−４ａ＞ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０と、通信横取り装置を準備・起動する。
＜２−５ａ＞命令列（Ｓｅｌｅｎｅｓｅ）のうち、命令列行番号「１」の命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する。
【００９６】
＜３−６ａ＞  通信横取り装置でテスト核ｄ２−ａｃｔｉｏｎを有効化する。
＜４−７ａ＞  命令列（Ｓｅｌｅｎｅｓｅ）のうち、命令列行番号「２」から「５」までの命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する。
【００９７】
＜５−８ａ＞  テスト核ｄ２−ａｃｔｉｏｎで処理が完了した旨の出力がされたことを確認する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力する。
【００９８】
＜６−９ａ＞  テスト核ｄ２−ａｃｔｉｏｎを無効化し、命令列行番号「６」から「１４」までの命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で再生する。なお、＜１−４ａ＞は上記の＜４ａ＞で出力された処理に対応する。＜２−５ａ＞，＜３−６ａ＞，＜４−７ａ＞，＜５−８ａ＞，＜６−９ａ＞についても同様である。
【００９９】
なお、上記では、自動テストを外部の自動テスト装置に出力するとしていた。しかし、自動テストを内部的に生成し、その実行と結果出力を同じ装置で行うとしてもよい。
以上のように、テスト生成装置１００によれば、命令列（Ｓｅｌｅｎｅｓｅ）を用意し、入力するだけで、その命令列によりリクエストされる範囲について、テスト核を組み合わせた自動テストを作成することができるようになる。
【０１００】
また、その自動テストは、テスト対象のリクエストが発生すると予測されるタイミングでのみテスト核を有効化するため、テスト対象以外のリクエストについて誤ってテストしてしまうことが少ない。さらに、テスト核でテスト対象のリクエストであるかどうかをＵＲＬやメソッドで確認すれば、誤ってテストが行われる可能性をより低くすることができる。
【０１０１】
ここで、テスト生成装置１００のアプリケーションテスト生成方法の処理手順を、フローチャートを用いて説明する。これまでの説明と同様に、テスト核を生成する対象は、リクエストのフォームパラメータとする。
【０１０２】
図９は、アプリケーションテスト生成処理の手順を示したフローチャートである。
再現テストに用いられる命令列（Ｓｅｌｅｎｅｓｅ）１０００が入力されて、処理が開始される。
【０１０３】
［ステップＳ０１］  入力された命令列（Ｓｅｌｅｎｅｓｅ）１０００を解析し、区切り命令で命令列を分割する命令列分割処理を行う。分割された区分を識別する区分識別子と、その区分に属する命令列の行番号とを対応付けた命令列分割表１１００が設定される。命令列分割処理の詳細は後述する。
【０１０４】
［ステップＳ０２］  ステップＳ０１で分割された区分ごとに、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０に、当該区分の分割命令列を実行させる。そして、そのときに得られた通信ログを保存するとともに、通信ログを分割命令列ごとに分類する通信ログ取得・分類処理を行う。再生された分割命令列の区分識別子と、このとき取得された通信ログを格納するディレクトリ名とを対応付けたログ分類表１３００ｃが設定される。通信ログ取得・分類処理の詳細は後述する。
【０１０５】
［ステップＳ０３］  ログ分類表１３００ｃに基づき、区分識別子で識別される区分ごとに通信ログを抽出し、この通信ログに基づいてテスト核を生成する。例えば、通信ログに記録されるリクエストのうち、フォームパラメータを有するリクエストのフォームパラメータの値を改変するなどのテスト手順をテスト核として記述する。１つのリクエストに複数のフォームパラメータが含まれるときは、すべてのフォームパラメータについてテスト核を生成する。こうして生成されたテスト核には、テスト核を識別する識別子を設定しておく。なお、テスト核は、リクエストを改変する通信横取り装置が実行可能なプログラムとして記述しておく。
【０１０６】
［ステップＳ０４］  命令列（Ｓｅｌｅｎｅｓｅ）と、ステップＳ０３で生成されたテスト核とを組み合わせた自動テストを生成する。自動テストでは、再現を行う命令列（Ｓｅｌｅｎｅｓｅ）１０００を順次実行するとともに、命令列が属する区分にテスト核が設定されていたときは、このテスト核を有効化させるというテスト手順が生成される。また、このテスト核に対応する区分に属する命令列の実行が終了したときには、テスト核を無効化する手順も設定される。
【０１０７】
以上の処理手順が実行されることにより、命令列（Ｓｅｌｅｎｅｓｅ）１０００から、所定の範囲の命令列実行時に、テスト核によるテストが実行される自動テストが生成される。
【０１０８】
次に、命令列分割処理と通信ログ取得・分類処理について説明する。
図１０は、命令列分割処理の手順を示したフローチャートである。
命令列（Ｓｅｌｅｎｅｓｅ）１０００が入力され、処理が開始される。
【０１０９】
［ステップＳ１１］  命令列（Ｓｅｌｅｎｅｓｅ）を１行読込む。最初の処理であれば、行番号１の命令列が読込まれる。それ以降の処理であれば、前回処理を行った命令列の次の行番号の命令列が読込まれる。
【０１１０】
［ステップＳ１２］  命令列に記述される命令（コマンド）と、区切り命令に指定される命令とを照合する。区切り命令には、ブラウザ１２０が安定状態となったことを示唆する命令が指定される。例えば、ある状態となるまで、あるいは必要な情報が得られるまで「待つ」という命令が該当する。Ｓｅｌｅｎｅｓｅであれば、「ｐａｕｓｅ」、「ｏｐｅｎ」、「・・・ＡｎｄＷａｉｔ」、「ｗａｉｔＦｏｒ・・・」などが該当する。照合した命令列が区切り命令であれば、処理をステップＳ１３に進める。区切り命令でなければ、処理をステップＳ１４に進める。
【０１１１】
［ステップＳ１３］  命令列が区切り命令であれば、前に区切り命令が出現した次の命令列からステップＳ１２で検出された区切り命令列までを１区分として、命令列分割表１１００に登録する。命令列分割表１１００には、区分を識別する区分識別子に対応付けて、この区分に分割された命令列の行番号が設定される。分割された範囲の最小の行番号と、最大の行番号とを登録するとしてもよい。
【０１１２】
［ステップＳ１４］  次の命令列が有るかどうかを判定する。無であれば、処理をステップＳ１５に進める。有であれば、処理をステップＳ１１に戻し、次の命令列の処理を行う。
［ステップＳ１５］  どこにも区分分けされていない命令列が残っているかどうかを判定する。残っているときは、処理をステップＳ１６に進める。残っていないときは、処理を終了する。
［ステップＳ１６］  どこにも区分分けされてない命令列が残っているときは、これらをまとめ、１つの区分を設定し、命令列分割表１１００に登録する。その後、処理を終了する。
【０１１３】
以上の処理手順が実行されることにより、区切り命令で命令列が分割され、命令列分割表１１００が生成される。
次に、通信ログ取得・分類処理について説明する。
【０１１４】
図１１は、通信ログ取得・分類処理の手順を示したフローチャートである。
［ステップＳ２１］  ログ取得部１４０を起動する。
［ステップＳ２２］  命令列分割表１１００に基づき、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０で実行する分割命令列を指定する。最初に、処理対象の区分識別子ｓｎ（ｎは任意の整数）として、ｓ１を指定する。
【０１１５】
［ステップＳ２３］  該当する区分識別子の範囲の命令列をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０に実行させる。ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）１３０が命令列（Ｓｅｌｅｎｅｓｅ）を実行する間、ログ取得部１４０は、ブラウザ１２０とサーバ６００との間で交換されるリクエスト及びレスポンスの通信ログを記録している。
【０１１６】
［ステップＳ２４］  区分識別子の範囲の命令列の実行が終了した後、この範囲の命令列を実行中にログ取得部１４０が収集した通信ログを取得する。
［ステップＳ２５］  ステップＳ２４で取得した通信ログを記憶部１５０に保存する。
【０１１７】
［ステップＳ２６］  ログ分類表１３００ｃに、ステップＳ２５で取得した通信ログの識別情報（通信ログのディレクトリ名）と、区分識別子とを登録する。
［ステップＳ２７］  命令列分割表１１００に次の区分が登録されているかどうか、すなわち、次の区分識別子が有るかどうかを調べる。有であれば、処理をステップＳ２８に進める。無であれば、処理を終了する。
【０１１８】
［ステップＳ２８］  次の区分識別子が有るときは、処理対象の区分識別子ｓｎとして、ｎの値を１増加させたｓ（ｎ＋１）を指定する。そして処理をステップＳ２３に戻し、次の区分についての通信ログを取得する。
【０１１９】
以上の処理手順が実行されることにより、区分ごとに命令列が実行され、取得された通信ログを分類したログ分類表１３００ｃが設定される。
次に、この自動テストを実行する自動テスト装置について説明する。図１２は、自動テスト装置の構成を示した図である。
【０１２０】
自動テスト装置２００は、制御部２１０、ブラウザ２２０、ブラウザ操作部２３０及び通信横取り装置２４０を有し、ネットワークを介して接続するサーバ６００のアプリケーションテストを実行する。
【０１２１】
制御部２１０は、自動テストの実行部であり、自動テストに基づいて、ブラウザ操作部２３０と通信横取り装置２４０を制御し、サーバ６００に対するアプリケーションテストを制御する。
【０１２２】
ブラウザ２２０は、ブラウザ１２０と同様に、サーバ６００が提供するＨＴＭＬファイルや画像ファイル、音楽ファイルなどをダウンロードし、モニタ１０８、あるいは音声出力装置に再生出力する。ブラウザ操作部２３０は、制御部２１０に従って、命令列（Ｓｅｌｅｎｅｓｅ）２５１で記述される命令列を実行し、ブラウザ２２０への操作命令などを自動的に発生させる。ここでは、ブラウザ操作方式の自動テストを行うテストツールとして、「Ｓｅｌｅｎｉｕｍ  ＲＣ」を用いる。通信横取り装置２４０は、ＨＴＴＰプロキシサーバとして実装される。制御部２１０に従って、テスト核２５２の処理を実行し、入力されたリクエストを改変してサーバ６００に送信するなどの処理を行う。
【０１２３】
このような自動テスト装置２００の動作及び自動テスト方法について、前述のテスト核ｄ２−ａｃｔｉｏｎに対応する自動テストを実行させる場合で説明する。
ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）２３０と、通信横取り装置２４０とが準備・起動される。
【０１２４】
準備が整った後、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）２３０に、命令列（Ｓｅｌｅｎｅｓｅ）２５１の行番号１を入力・再生させる。通信横取り装置１４０は通常のプロキシサーバと同様に、リクエスト・レスポンスを中継する。
【０１２５】
次に、制御部２１０は、通信横取り装置２４０に、テスト核ｄ２−ａｃｔｉｏｎを入力し、それを有効化するよう指示する。
続いて、制御部２１０は、ブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）２３０に、命令列（Ｓｅｌｅｎｅｓｅ）２５１の行番号２から５を入力・再生させる。このとき、サーバ６００に送信されるリクエストのうちテスト核ｄ２−ａｃｔｉｏｎが対象とするものは、通信横取り装置２４０で改変された後、サーバ６００に送信される。
【０１２６】
その後、テスト核ｄ２−ａｃｔｉｏｎで処理が終了した旨の出力を確認する。出力されていない場合は、正しいテストができなかった可能性がある旨のエラーメッセージを出力する。処理が終了した旨の出力がされている場合は、テスト核ｄ２−ａｃｔｉｏｎを無効化し、命令列（Ｓｅｌｅｎｅｓｅ）の行番号６以降をブラウザ操作部（Ｓｅｌｅｎｉｕｍ  ＲＣ）２３０に入力・再生させる。
【０１２７】
このように、自動テスト装置２００は、利用者が実行制御を行うことなく、自動でアプリケーションテストを行うことができる。
なお、上記の説明では、自動テスト装置２００と、テスト生成装置１００とを別装置としたが、同一の装置に搭載することもできる。例えば、自動テスト装置２００にテスト生成部１１０を搭載し、ブラウザ操作部２３０と、通信横取り装置２４０とを接続する。テスト生成部１１０は、ブラウザ操作部２３０をブラウザ操作部１３０、通信横取り装置２４０をログ取得部１４０として動作させ、自動テストを生成する。
【０１２８】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、テスト生成装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読取り可能な記録媒体に記録しておくことができる。
【０１２９】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３０】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１３１】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムにおいて、
コンピュータを、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段、
として機能させることを特徴とするアプリケーションテスト生成プログラム。（１、図１）
（付記２）  前記命令列分割手段は、前記リクエストに基づいて前記アプリケーション装置から前記レスポンスを受けた後の状態が安定状態となったことを示唆する命令を前記区切り命令とする、ことを特徴とする付記１記載のアプリケーションテスト生成プログラム。
【０１３２】
（付記３）  前記命令列分割手段は、前記リクエストに基づいて前記アプリケーション装置から前記レスポンスを受けた後の状態が安定状態となったことを示唆する命令の次の実行順の命令を前記区切り命令とする、ことを特徴とする付記１記載のアプリケーションテスト生成プログラム。
【０１３３】
（付記４）  前記命令列分割手段は、前記アプリケーション装置から送信される前記レスポンスの受信を待つことを指示する命令を前記区切り命令とする、ことを特徴とする付記２または３記載のアプリケーションテスト生成プログラム。
【０１３４】
（付記５）  前記命令列分割手段は、前記アプリケーション装置から送信される前記レスポンスが受信できたことを示唆する命令を前記区切り命令とする、ことを特徴とする付記２または３記載のアプリケーションテスト生成プログラム。
【０１３５】
（付記６）  前記自動テスト生成手段は、前記分割命令列を順次再生して前記ユーザエージェントに出力させるとともに、前記分割命令列に対し前記テスト核が設定されていなかったときは、前記テスト核を実行する実行部の動作を無効とし、前記分割命令列に対し前記テスト核が設定されていたときは、前記実行部の動作を有効とする手順を前記自動テストに組み込む、ことを特徴とする付記１または２記載のアプリケーションテスト生成プログラム。
【０１３６】
（付記７）  前記自動テスト生成手段は、前記テスト核を生成する対象のリクエストを含む前記通信ログから前記リクエストに含まれる前記アプリケーション装置のアドレス情報を含む該リクエストを特徴付ける特徴情報を抽出し、前記特徴情報と、前記ユーザエージェントが送信した前記リクエストに含まれる特徴情報とを比較し、一致したときのみ前記ユーザエージェントが送信した前記リクエストの任意の部分の改変を行う手順を前記自動テストに組み込む、ことを特徴とする付記１記載のアプリケーションテスト生成プログラム。
【０１３７】
（付記８）  前記自動テスト生成手段は、前記リクエストを改変するテスト終了時に、改変前の前記リクエストを前記アプリケーション装置に送信し、応答を得る手順を前記テスト核に組み込む、ことを特徴とする付記１記載のアプリケーションテスト生成プログラム。
【０１３８】
（付記９）  前記自動テスト生成手段は、前記テスト核に対応する前記命令列の実行終了時に、該テスト核の処理が終了したかどうかを判断し、終了していないときはエラーを通知する手順を前記自動テストに組み込む、ことを特徴とする付記１記載のアプリケーションテスト生成プログラム。
【０１３９】
（付記１０）  ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成方法において、
コンピュータに、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手順と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手順と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手順と、
を実行させることを特徴とするアプリケーションテスト生成方法。
【０１４０】
（付記１１）  ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト装置において、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段と、
前記ユーザエージェントと前記アプリケーション装置との間のリクエスト及びレスポンスを中継する中継手段の動作を制御し、前記ユーザエージェントに対し、前記分割命令列を再生して前記ユーザエージェントに前記所定の処理の実行を実行させるとともに、前記テスト核が生成された前記リクエストを送信する前記分割命令列の再生時には、対応する前記テスト核に基づいて前記リクエストの横取りと改変を前記中継手段に実行させる制御手段と、
を有することを特徴とするアプリケーションテスト装置。
【符号の説明】
【０１４１】
１０  テスト生成装置
１１  命令列分割手段
１２  通信ログ取得・分類手段
１３  自動テスト生成手段
１４  記憶手段
２１  命令列
２２  命令列分割表
２３  ログ分類表
２４  自動テスト
４０  ユーザエージェント
５０  通信ログ取得装置
６０  サーバ
【図１】
2010250583.tif 000003
【図２】
2010250583.tif 000004
【図３】
2010250583.tif 000005
【図４】
2010250583.tif 000006
【図５】
2010250583.tif 000007
【図６】
2010250583.tif 000008
【図７】
2010250583.tif 000009
【図８】
2010250583.tif 000010
【図９】
2010250583.tif 000011
【図１０】
2010250583.tif 000012
【図１１】
2010250583.tif 000013
【図１２】
2010250583.tif 000014