"リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテストに用いられる情報処理装置であって、1つのセッションに属する2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットせず、当該サーバソフトウェアを実行するサーバ装置に対して送信する第1の送信処理を行い、また、前記2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する第2の送信処理を行う送信部と、前記第1の送信処理に対応して受信される第1のレスポンスと前記第2の送信処理に対応して受信される第2のレスポンスとを比較し、比較結果に基づいて、前記2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する判定部と、を有する情報処理装置。前記送信部は、リクエスト間に、前記サーバソフトウェアを実行するサーバ装置に対して記憶装置に記憶されたデータを復元するよう指示することで、当該サーバソフトウェアの状態をリセットする、請求項1記載の情報処理装置。前記送信部は、前記第2の送信処理では、2以上のサーバ装置、または、1またはそれ以上のサーバ装置を用いて動作する2以上の仮想サーバ装置に対して、前記2以上のリクエストを分散して送信する、請求項1記載の情報処理装置。前記判定部は、判定結果に応じて、前記2以上のリクエストで指定されたファイルパスを、リクエストを前記複数のサーバ装置に振り分けるときに参照される振り分けルールとして前記情報処理システムに登録する、請求項1記載の情報処理装置。前記判定部は、前記複数のサーバ装置が第1のサーバソフトウェアを第2のサーバソフトウェアに更新するとき、前記第2のサーバソフトウェアについて判定を行い、前記判定部は、前記第1のサーバソフトウェアに対応する第1の振り分けルールと判定結果に応じた第2の振り分けルールとから、前記第1のサーバソフトウェアから前記第2のサーバソフトウェアへの更新中に適用される第3の振り分けルールを生成する、請求項4記載の情報処理装置。前記情報処理装置は、前記2以上のリクエストを生成するクライアント装置、または、前記クライアント装置と前記複数のサーバ装置との間で前記2以上のリクエストを中継する中継装置である、請求項1記載の情報処理装置。リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテスト方法であって、情報処理装置が、1つのセッションに属する2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットせず、当該サーバソフトウェアを実行するサーバ装置に対して送信する第1の送信処理を行い、前記2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する第2の送信処理を行い、前記第1の送信処理に対応して受信される第1のレスポンスと前記第2の送信処理に対応して受信される第2のレスポンスとを比較し、比較結果に基づいて、前記2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する、情報処理システムのテスト方法。リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテストに用いられるプログラムであって、コンピュータに、1つのセッションに属する2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットせず、当該サーバソフトウェアを実行するサーバ装置に対して送信する第1の送信処理を行い、前記2以上のリクエストを、前記サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する第2の送信処理を行い、前記第1の送信処理に対応して受信される第1のレスポンスと前記第2の送信処理に対応して受信される第2のレスポンスとを比較し、比較結果に基づいて、前記2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する、処理を実行させるプログラム。ところで、サーバ装置で実行されるサーバソフトウェアの中には、同一のクライアント装置と複数回通信を行うことで、一連の纏まった処理を完結させるものがある。例えば、1つ目のリクエストを受けて、クライアント装置から指定された条件に合致する項目を検索して検索結果を提示し、2つ目のリクエストを受けて、先の検索結果の中から選択された項目についてデータベースを更新するサーバソフトウェアが考えられる。一連の纏まった処理に対応する1つのセッションでは、サーバソフトウェアは、クライアント装置からのリクエストの受信とクライアント装置へのレスポンスの送信とを複数回繰り返し得る。サーバソフトウェアは、先のリクエストと同一セッションに属する後のリクエストを処理するとき、リクエストの内容に応じて、先のリクエストに関するデータ例えば、処理結果を利用することもあるし、利用しないこともある。先のリクエストの処理から後のリクエストの処理にデータを引き継ぐ場合、サーバソフトウェアは、当該サーバソフトウェアが実行されているサーバ装置の記憶装置例えば、RAMRandomAccessMemoryやHDDHardDiskDriveにデータを書き込んでおくことが考えられる。先のリクエストに関するデータをサーバ装置上に保持することは、サーバソフトウェアの状態を変化させることになり、後のリクエストの処理に影響を与え得る。そこで、ロードバランシングでは、データの引き継ぎが生じ得る2以上のリクエストは同一のサーバ装置が処理するように、リクエストを振り分けることが好ましい。例えば、ロードバランサは、リクエストの内容例えば、リクエストが指定するファイルのパスとリクエストに含まれるセッションIDIdentifierとに基づいて、当該リクエストの転送先のサーバ装置を判定する。同一のサーバ装置が処理すべきであるというリクエストの特徴を、スティッキネスStickinessと呼ぶことがある。サーバソフトウェアを複数のサーバ装置に配置して情報処理システムの運用を開始するとき、ロードバランシングのルールが情報処理システムに設定される。しかし、ルールを設定するにあたり、ある2以上のリクエストが同一のサーバ装置によって処理されるべきものか否かを、どのように判定すればよいかが問題となる。同一のサーバ装置が処理すべき2以上のリクエストを異なるサーバ装置に振り分けると、処理が適切に行われなくなってしまう。一方、同一のサーバ装置が処理しなくてもよい2以上のリクエストを同一のサーバ装置が処理するよう制限すると、ロードバランシングの効率が低下し得る。一側面では、本発明は、複数のサーバ装置を備える情報処理システムにおけるロードバランシングのルールを判定することができる情報処理装置、情報処理システムのテスト方法およびプログラムを提供することを目的とする。一実施態様では、リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテストに用いられる情報処理装置が提供される。情報処理装置は、送信部と判定部とを有する。送信部は、1つのセッションに属する2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットせず、当該サーバソフトウェアを実行するサーバ装置に対して送信する第1の送信処理を行い、また、2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する第2の送信処理を行う。判定部は、第1の送信処理に対応して受信される第1のレスポンスと第2の送信処理に対応して受信される第2のレスポンスとを比較し、比較結果に基づいて、2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する。また、一実施態様では、リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテスト方法が提供される。情報処理装置が、1つのセッションに属する2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットせず、当該サーバソフトウェアを実行するサーバ装置に対して送信する第1の送信処理を行う。2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する第2の送信処理を行う。第1の送信処理に対応して受信される第1のレスポンスと第2の送信処理に対応して受信される第2のレスポンスとを比較し、比較結果に基づいて、2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する。また、一実施態様では、コンピュータに実行させるプログラムであって、リクエストを処理するためのサーバソフトウェアを実行可能な複数のサーバ装置を備える情報処理システムのテストに用いられるプログラムが提供される。一実施態様によれば、複数のサーバ装置を備える情報処理システムにおけるロードバランシングのルールを判定することができる。以下、本実施の形態を図面を参照して説明する。[第1の実施の形態]図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置10は、サーバ装置20,20aを備える情報処理システムのテストに用いられる。サーバ装置20,20aは、リクエストを処理するためのサーバソフトウェアを実行することができる。情報処理装置10とサーバ装置20,20aとは、ネットワークで接続されている。情報処理装置10は、リクエストを生成するクライアント装置でもよいし、クライアント装置とサーバ装置20,20aとの間でリクエストを中継する中継装置例えば、ロードバランサと呼ばれるものやリバースプロキシと呼ばれるものなどでもよい。情報処理装置10は、CPUCentralProcessingUnitなどのプロセッサとRAMなどのメモリとを備えてもよく、メモリに記憶されたプログラムをプロセッサが実行するコンピュータであってもよい。情報処理装置10は、送信部11および判定部12を有する。送信部11は、1つのセッションに属する同一の2以上のリクエストについて、第1の送信処理送信処理1と第2の送信処理送信処理2とを実行する。送信部11は、送信処理1では、2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットせずに、当該サーバソフトウェアを実行するサーバ装置に対して送信する。送信処理2では、2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットしつつ、当該サーバソフトウェアを実行するサーバ装置に対して送信する。送信部11は、送信処理1,2の何れを先に実行してもよい。送信処理1では、好ましくは、2以上のリクエストが単一のサーバ装置例えば、サーバ装置20に送信される。送信処理2では、2以上のリクエストが、単一のサーバ装置に送信されてもよいし、2以上のサーバ装置例えば、サーバ装置20,20aに分散して送信されてもよい。また、送信処理2では、2以上のリクエストが、1またはそれ以上のサーバ装置で動作する2以上の仮想サーバ装置仮想マシンに分散して送信されてもよい。送信処理1の送信先と送信処理2の送信先とは異なってもよい。リクエストは、HTTPリクエストであってもよく、リクエスト対象のファイルのパス例えば、URLUniformResourceLocatorのパスを含んでもよい。サーバソフトウェアの状態は、例えば、サーバ装置20,20aが記憶装置例えば、RAMやHDDなど内のサーバソフトウェアの使用する記憶領域のデータを、リクエスト処理前のデータに戻すリバートすることでリセットすることができる。その場合、サーバ装置20,20aは、リクエスト処理前の上記記憶領域のデータを退避しておく。送信部11は、リクエスト間で、状態をリセットするようリクエストの送信先に指示してもよい。例えば、送信部11は、リクエスト1をサーバ装置20に送信し、サーバ装置20に状態のリセットを指示した後、リクエスト2をサーバ装置20に送信する。判定部12は、送信処理1に対応して受信される第1のレスポンスレスポンス1と、送信処理2に対応して受信される第2のレスポンスレスポンス2とを取得する。レスポンス1,2として、それぞれ、2以上のリクエストに対応する2以上のレスポンスが受信され得る。判定部12は、レスポンス1,2を比較し、比較結果に基づいて、送信部11が送信した2以上のリクエストが同じサーバ装置で処理されるべきか判定する。例えば、判定部12は、レスポンス1,2の内容が同じ場合、異なるサーバ装置で処理してもよいと判定し、レスポンス1,2の内容が異なる場合、同じサーバ装置で処理すべきと判定する。レスポンスは、HTTPレスポンスであってもよい。ここで、判定部12は、判定結果を情報処理システムの管理者に通知してもよいし、判定結果に基づいてロードバランシングのルールを生成して中継装置例えば、ロードバランサやリバースプロキシなどに登録してもよい。後者の場合、判定部12は、例えば、送信部11が送信した2以上のリクエストで指定されているパスを抽出し、抽出したパスを、同一セッションの先のリクエストと同じサーバ装置にリクエストを転送すべきパススティッキーなパスとしてルールに登録する。第1の実施の形態の情報処理装置10によれば、1つのセッションに属する2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットせず、サーバソフトウェアを実行するサーバ装置に対して送信する送信処理1。また、当該2以上のリクエストを、サーバソフトウェアの状態をリクエスト間でリセットしつつ、サーバソフトウェアを実行するサーバ装置に対して送信する送信処理2。送信処理1に対応して受信されるレスポンス1と送信処理2に対応して受信されるレスポンス2とを比較し、比較結果に基づいて、上記2以上のリクエストについて同じサーバ装置が処理するよう制限するか否か判定する。これにより、複数のサーバ装置を備える情報処理システムにおけるロードバランシングのルールを、効率的に判定することができる。例えば、サーバソフトウェアの状態の変化副作用と呼ぶことがあるを検出する方法として、サーバ装置20,20aが備えるRAMやHDDなどの記憶装置へのデータの書き込みを監視する方法も考えられる。しかし、この方法では、サーバソフトウェア毎に個別の改変が必要であり、サーバソフトウェアの改変や監視用ソフトウェアのサーバ装置20,20aへの追加を行うことになり、テストの負担が大きいという問題がある。また、サーバ装置20,20aの記憶装置に書き込まれるデータが、1つのリクエストの処理内で利用される一時的なデータに過ぎず、後のリクエストの処理に引き継がれない副作用でない場合もある。このため、スティッキネスの判定を誤る可能性がある。一方、情報処理装置10によれば、サーバ装置20,20aの外部から、スティッキネスを効率的に判定することができる。以下に説明する第2~第5の実施の形態では、HTTPを用いてHTMLHyperTextMarkupLanguage文書などのファイルを、サーバ装置からクライアント装置に送信するWWWシステムの例を挙げる。ただし、第1の実施の形態の方法は、WWWシステム以外の情報処理システムに適用することも可能である。[第2の実施の形態]図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、リバースプロキシサーバ100、アプリケーションサーバ200,200a,200b、データベースサーバ300およびクライアント400,400aを含む。ネットワーク31に、リバースプロキシサーバ100、アプリケーションサーバ200,200a,200bおよびデータベースサーバ300が接続されている。ネットワーク32に、リバースプロキシサーバ100およびクライアント400,400aが接続されている。ネットワーク31はLANLocalAreaNetworkでもよく、ネットワーク32はインターネットなどの広域ネットワークでもよい。ただし、アプリケーションサーバ200,200a,200bとクライアント400,400aが、同一ネットワークに接続されてもよい。リバースプロキシサーバ100は、ロードバランサおよびリバースプロキシとして動作するサーバコンピュータである。リバースプロキシサーバ100は、クライアント400,400aからリクエストを受信し、アプリケーションサーバ200,200a,200bの何れかに転送する。また、アプリケーションサーバ200,200a,200bからレスポンスを受信し、レスポンスで指定された宛先のクライアントに転送する。リバースプロキシサーバ100は、ロードバランシングのため、リバースプロキシサーバ100に設定されたルールに基づいて、受信したリクエストをアプリケーションサーバ200,200a,200bに振り分ける。アプリケーションサーバ200,200a,200bは、リクエストを処理するサーバソフトウェア例えば、Webアプリケーションソフトウェアを実行するサーバコンピュータである。アプリケーションサーバ200,200a,200bは、リクエストとしてHTTPリクエストを受信し、リクエストで指定されるパス例えば、URLのパスに応じた処理を行い、レスポンスとしてHTTPレスポンスを送信する。アプリケーションサーバ200,200a,200bは、リクエストの処理において、データの読み出しや更新のため、データベースサーバ300にアクセスすることがある。データベースサーバ300は、データベース管理システムDBMS:DatabaseManagementSystemを実行するサーバコンピュータである。データベースサーバ300は、アプリケーションサーバ200,200a,200bが利用するデータを不揮発性の記憶装置に記憶し、アクセスに応じてデータの読み出しや更新を行う。クライアント400,400aは、リクエストを発行するクライアントソフトウェア例えば、Webブラウザを実行するクライアントコンピュータであり、例えば、情報処理システムのユーザや管理者が操作する端末装置である。クライアント400,400aは、リクエストとしてHTTPリクエストを送信し、レスポンスとしてHTTPレスポンスを受信する。例えば、HTTPリクエストにはURLが含まれ、HTTPレスポンスにはHTML文書が含まれる。クライアント400,400aは、例えば、HTTPレスポンスに含まれるHTML文書をディスプレイに表示レンダリングする。ここで、同一のクライアントが行う一連のHTTP通信には、セッションIDが用いられる。クライアント400,400aは、セッションの最初では、セッションIDを含まないリクエストを送信する。アプリケーションサーバ200,200a,200bは、セッションIDを含まないリクエストを受信すると、新たなセッションIDを生成し、生成したセッションIDを含むレスポンスを送信する。クライアント400,400aは、レスポンスに含まれるセッションIDを自装置に保存し、以降、同一セッションでは、保存したセッションIDを含むリクエストを送信する。ロードバランシングでは、リクエストに含まれるパスとセッションIDとに基づいて、当該リクエストを処理するアプリケーションサーバが選択される。リクエスト振り分けのルールでは、スティッキーなパスが指定されている。リバースプロキシサーバ100は、リクエストがセッションIDを含まない場合、当該リクエストを任意のアプリケーションサーバに転送する。また、リクエストがスティッキーでないパスを指定している場合も、当該リクエストを任意のアプリケーションサーバに転送する。一方、リクエストがセッションIDを含みスティッキーなパスを指定している場合、同一セッションに属する先のリクエストと同じアプリケーションサーバに、当該リクエストを転送する。当該リクエストは、先のリクエストに関するデータを利用して処理される可能性があるためである。任意のアプリケーションサーバを選択する場合、ラウンドロビンによって転送先を選択してもよい。また、アプリケーションサーバ200,200a,200bの処理能力や現在の負荷に基づいて転送頻度を重み付けして、転送先を選択してもよい。先のリクエストと同じアプリケーションサーバを選択する場合、例えば、以下のような方法を用いる。まず、アプリケーションサーバ200,200a,200bが、セッションIDを生成したあとリバースプロキシサーバ100がアプリケーションサーバを識別できるようにする。例えば、セッションIDの末尾に、アプリケーションサーバを識別するための文字を付加する。一例として、アプリケーションサーバ200aからのレスポンスには.aをセッションIDの末尾に付加し、アプリケーションサーバ200bからのレスポンスには.bをセッションIDの末尾に付加するようにする。リバースプロキシサーバ100は、セッションIDの末尾を参照して当該セッションIDを付与したアプリケーションサーバを判定し、リクエストの転送先を選択する。ただし、上記方法は一例であり、他の方法を用いてもよい。例えば、リバースプロキシサーバ100が、アプリケーションサーバ200,200a,200bとセッションIDの対応関係を記憶してもよい。第2の実施の形態では、ロードバランシングのルールを設定するにあたり、リバースプロキシサーバ100、アプリケーションサーバ200およびクライアント400を用いて、アプリケーションソフトウェアのテストを行い、スティッキーなパスを判定する。以下、ロードバランシングのルールの設定方法を説明する。図3は、リバースプロキシサーバのハードウェア例を示すブロック図である。リバースプロキシサーバ100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、ディスクドライブ106および通信部107,108を有する。各ユニットがリバースプロキシサーバ100のバスに接続されている。アプリケーションサーバ200,200a,200b、データベースサーバ300およびクライアント400,400aも、リバースプロキシサーバ100と同様のハードウェアを用いて実装できる。CPU101は、リバースプロキシサーバ100の情報処理を制御するプロセッサである。CPU101は、HDD103に記憶されているプログラムやデータの少なくとも一部を読み出し、RAM102に展開してプログラムを実行する。なお、リバースプロキシサーバ100は、複数のプロセッサを設けて、プログラムを分散して実行してもよい。RAM102は、CPU101が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。なお、リバースプロキシサーバ100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。HDD103は、OSOperatingSystemプログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。HDD103は、CPU101の命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。なお、リバースプロキシサーバ100は、HDD以外の種類の不揮発性の記憶装置例えば、SSDなどを備えてもよく、複数の記憶装置を備えていてもよい。画像信号処理部104は、CPU101の命令に従って、リバースプロキシサーバ100に接続されたディスプレイ41に画像を出力する。ディスプレイ41としては、例えば、CRTCathodeRayTubeディスプレイや液晶ディスプレイを用いることができる。入力信号処理部105は、リバースプロキシサーバ100に接続された入力デバイス42から入力信号を取得し、CPU101に出力する。入力デバイス42としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。ディスクドライブ106は、記録媒体43に記録されたプログラムやデータを読み取る駆動装置である。記録媒体43として、例えば、フレキシブルディスクFD:FlexibleDiskやHDDなどの磁気ディスク、CDCompactDiscやDVDDigitalVersatileDiscなどの光ディスク、光磁気ディスクMO:MagnetoOpticaldiskを使用できる。ディスクドライブ106は、例えば、CPU101の命令に従って、記録媒体43から読み取ったプログラムやデータをRAM102またはHDD103に格納する。通信部107は、ネットワーク31を介してアプリケーションサーバ200,200a,200bと通信を行う通信インタフェースである。通信部108は、ネットワーク32を介してクライアント400,400aと通信を行う通信インタフェースである。通信部107,108は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。なお、リバースプロキシサーバ100は、1つの通信インタフェースで、ネットワーク31,32を介した通信を行えるようにしてもよい。図4は、第2の実施の形態のソフトウェア例を示すブロック図である。図4に示すユニットの一部または全部は、リバースプロキシサーバ100、アプリケーションサーバ200およびクライアント400が実行するプログラムのモジュールであってもよい。また、図4に示すユニットの一部または全部は、FPGAFieldProgrammableGateArrayやASICApplicationSpecificIntegratedCircuitなどの電子回路であってもよい。リバースプロキシサーバ100は、テスト中継部111,112、リクエスト処理部113、リクエスト記憶部114、レスポンス処理部115、レスポンス記憶部116、退避復元指示部117、ルール記憶部121および中継部122を有する。テスト中継部111は、サーバソフトウェアのテストに関して、クライアント400と通信を行う。テスト中継部111は、クライアント400からリクエストを受信し、受信したリクエストをリクエスト処理部113に出力する。また、レスポンス処理部115からレスポンスを取得し、取得したレスポンスをクライアント400に送信する。テスト中継部112は、サーバソフトウェアのテストに関して、アプリケーションサーバ200と通信を行う。テスト中継部112は、リクエスト処理部113からリクエストを取得し、取得したリクエストをアプリケーションサーバ200に送信する。また、アプリケーションサーバ200からレスポンスを受信し、受信したレスポンスをレスポンス処理部115に出力する。また、テスト中継部112は、アプリケーションサーバ200からのレスポンスの受信状況を、退避復元指示部117に通知する。リクエスト処理部113は、テストの第1フェーズにおいて、テスト中継部111からリクエストを取得し、取得したリクエストをリクエスト記憶部114に記憶し、また、取得したリクエストをテスト中継部112に出力する。また、リクエスト処理部113は、テストの第2フェーズにおいて、リクエスト記憶部114から第1フェーズで格納した順番に1つずつリクエストを読み出し、テスト中継部112に出力する。リクエスト記憶部114は、クライアント400が送信したリクエストを、送信順序を維持して記憶する。リクエスト記憶部114は、RAM102に確保された記憶領域でもよいし、HDD103に確保された記憶領域であってもよい。レスポンス処理部115は、テストの第1フェーズにおいて、テスト中継部112からレスポンスを取得し、取得したレスポンスをレスポンス記憶部116に記憶し、また、取得したレスポンスをテスト中継部111に出力する。また、レスポンス処理部115は、テストの第2フェーズにおいて、テスト中継部112からレスポンスを取得し、取得したレスポンスと第1フェーズでレスポンス記憶部116に格納したレスポンスを比較する。そして、比較結果に基づいて、リクエストで指定されたパスがスティッキーか判定する。レスポンス処理部115は、判定結果をクライアント400に報告する。レスポンス記憶部116は、アプリケーションサーバ200が送信したレスポンスを、送信順序を維持して記憶する。レスポンス記憶部116は、RAM102に確保された記憶領域でもよいし、HDD103に確保された記憶領域であってもよい。退避復元指示部117は、クライアント400からコマンドを受信し、サーバソフトウェアのテストを制御する。退避復元指示部117は、テストの第1フェーズの最初に、サーバソフトウェアの状態のスナップショットを作成する命令退避コマンドを、アプリケーションサーバ200に送信する。また、退避復元指示部117は、テストの第2フェーズの最初および第2フェーズのレスポンスを受信する毎に、サーバソフトウェアの状態を戻す命令復元コマンドを、アプリケーションサーバ200に送信する。ルール記憶部121は、ロードバランシングのルールを記憶する。ルールは、例えば、クライアント400を操作する管理者によって作成され、ルール記憶部121に登録される。ルールには、スティッキーなパスが含まれる。ルール記憶部121は、RAM102に確保された記憶領域でもよいし、HDD103に確保された記憶領域であってもよい。中継部122は、運用開始後のサーバソフトウェアに関して、リクエストおよびレスポンスを中継する。中継部122は、クライアント400,400aからリクエストを受信し、ルール記憶部121に記憶されたルールを参照し、受信したリクエストをアプリケーションサーバ200,200a,200bの何れかに転送する。また、中継部122は、アプリケーションサーバ200,200a,200bからレスポンスを受信し、受信したレスポンスを当該レスポンスが指定する宛先のクライアントに転送する。アプリケーションサーバ200は、コンピュータの仮想化技術を用いて、1またはそれ以上の仮想マシンを動作させる。アプリケーションサーバ200は、仮想マシン211およびハイパーバイザ212を有する。ハイパーバイザ212は、スナップショット管理部213、メモリデータ記憶部214およびディスク差分記憶部215を有する。仮想マシン211は、サーバソフトウェア例えば、Webアプリケーションソフトウェアを実行する仮想的なコンピュータである。アプリケーションサーバ200は、複数の仮想マシンを動作させてもよく、1またはそれ以上の仮想マシンにDBMSを実行させてもよい。各仮想マシンは、OSを実行し、ハイパーバイザ212から割り当てられたリソースCPUの処理能力やRAMの記憶領域などを用いて処理を行う。ハイパーバイザ212は、仮想マシン211を含む1またはそれ以上の仮想マシンにリソースを割り当て、仮想マシンを管理する制御ソフトウェアである。スナップショット管理部213は、サーバソフトウェアを実行する仮想マシン211のスナップショットを管理する。スナップショット管理部213は、リバースプロキシサーバ100から退避コマンドを受信すると、受信時点のRAM上にある仮想マシン211のデータを、メモリデータ記憶部214に退避する。また、受信時点のHDD上にある仮想マシン211のデータを、ディスク差分記憶部215に退避する。また、スナップショット管理部213は、リバースプロキシサーバ100から復元コマンドを受信すると、メモリデータ記憶部214に退避したデータをRAMに戻し、ディスク差分記憶部215に退避したデータをHDDに戻すリバートする。メモリデータ記憶部214は、RAM上にある仮想マシン211のある時点のデータスナップショットを記憶する。メモリデータ記憶部214は、例えば、HDDに確保された記憶領域とすることができる。ディスク差分記憶部215は、HDD上にある仮想マシン211のある時点のデータスナップショットを記憶する。ディスク差分記憶部215は、例えば、HDDに確保された記憶領域とすることができる。なお、ディスク差分記憶部215が管理するデータは、アプリケーションサーバ200で動作させる仮想マシンの基本となるイメージデータと、仮想マシン211の個別のディスクデータとの間の差分である。アプリケーションサーバ200は、基本となるイメージデータと仮想マシン211に対応する差分データとを合成することで、仮想マシン211のディスクデータを得ることができる。クライアント400は、テスト実行部411を有する。テスト実行部411は、クライアント400を操作する管理者の指示に応じて、サーバソフトウェアのテストを制御する。テスト実行部411は、テストの第1フェーズの開始を指示するコマンドをリバースプロキシサーバ100に送信する。そして、テストケースとして同一セッションに属する2以上のリクエストの列を生成し、2以上のリクエストを順次リバースプロキシサーバ100に送信する。例えば、テスト実行部411は、1つのリクエストの送信と当該リクエストに対応する1つのレスポンスの受信とを、テストケースに含まれる全てのリクエストを送信し終えるまで繰り返す。また、テスト実行部411は、テストの第2フェーズの開始を指示するコマンドをリバースプロキシサーバ100に送信する。テスト実行部411は、パスの判定結果をリバースプロキシサーバ100から受信し、ディスプレイに表示する。なお、第2の実施の形態のリバースプロキシサーバ100は、第1の実施の形態の情報処理装置10の一例である。通信部107、または、テスト中継部112および退避復元指示部117は、送信部11の一例である。CPU101およびRAM102、または、レスポンス処理部115は、判定部12の一例である。図5は、リクエスト記憶テーブルの例を示す図である。リクエスト記憶テーブル131は、リバースプロキシサーバ100のリクエスト記憶部114に記憶される。リクエスト記憶テーブル131は、順序、メソッド、パスおよびボディの項目を含む。順序の項目には、テストの第1フェーズでクライアント400から受信したリクエストの順序を示す値例えば、連番の自然数が登録される。メソッドの項目には、リクエストに含まれるHTTPメソッドが登録される。例えば、メソッド=GETは、URLで指定した情報の要求を示し、メソッド=POSTは、クライアントソフトウェアからサーバソフトウェアへのデータ送信を伴うことを示す。パスの項目には、リクエストに含まれるURL内のパス名が登録される。ボディの項目には、リクエストに含まれるHTTPのボディが登録される。リクエストは、ボディを含まない場合もある。URLは、例えば、プロトコルに応じたスキーム名とドメイン名を含むホスト名とに続けて、パス名を記述する。パスは、例えば、HTML文書、画像ファイル、HTML文書を生成するプログラムのファイルなどのファイルを指定する。図6は、レスポンス記憶テーブルの例を示す図である。レスポンス記憶テーブル132は、リバースプロキシサーバ100のレスポンス記憶部116に記憶される。レスポンス記憶テーブル132は、順序、レスポンスコードおよびボディの項目を含む。順序の項目には、テストの第1フェーズでアプリケーションサーバ200から受信したレスポンスの順序を示す値例えば、連番の自然数が登録される。レスポンスコードの項目には、レスポンスに含まれるレスポンスコードが登録される。レスポンスコードは、リクエストがサーバソフトウェアによってどのように処理されたかを示す。例えば、レスポンスコード=200は、リクエストの成功を示し、メソッド=GETに対応するレスポンスで使用され得る。レスポンス=304は、レスポンスのボディが前回から変化がないことを示し、メソッド=POSTに対応するレスポンスで使用され得る。ボディの項目には、レスポンスに含まれるHTTPのボディ例えば、HTML文書のテキストが登録される。レスポンスは、ボディを含まない場合もある。図7は、パス判定の処理例を示すフローチャートである。ステップS11テスト実行部411は、テストの第1フェーズの開始を示す開始コマンドを、リバースプロキシサーバ100に送信する。退避復元指示部117は、退避コマンドをアプリケーションサーバ200に送信する。スナップショット管理部213は、仮想マシン211について、退避コマンドを受信した時点のRAMのデータを、スナップショットとしてメモリデータ記憶部214に保存する。また、退避コマンドを受信した時点のHDDのディスクデータと基本となるイメージデータとの間の差分を算出し、差分データを、スナップショットしてディスク差分記憶部215に保存する。ステップS12テスト実行部411は、テストケースに含まれる1つのリクエストをリバースプロキシサーバ100に送信する。リクエスト処理部113は、テスト実行部411から受信したリクエストをリクエスト記憶部114に保存し、また、当該リクエストをアプリケーションサーバ200に転送する。仮想マシン211は、リバースプロキシサーバ100から受信したリクエストの指定するパスに応じた処理を行い、レスポンスをリバースプロキシサーバ100に送信する。このとき、仮想マシン211は、レスポンスにセッションIDを付与することがある。また、RAMやHDDに記憶されているセッションのデータを利用することがあり、セッションのデータを更新することもある。ステップS13レスポンス処理部115は、アプリケーションサーバ200から受信したレスポンスをレスポンス記憶部116に保存し、また、当該レスポンスをクライアント400に転送する。テスト実行部411は、レスポンスを受信する。ステップS14テスト実行部411は、テストケースに後続のリクエストが含まれているか判断する。後続のリクエストがある場合、後続のリクエストが先のリクエストと同一のセッションに属するように例えば、後続のリクエストがアプリケーションサーバ200から付与されたセッションIDを含むようにして、処理をステップS12に進める。後続のリクエストがない場合、処理をステップS15に進める。ステップS15テスト実行部411は、テストの第2フェーズの開始を示す開始コマンドを、リバースプロキシサーバ100に送信する。退避復元指示部117は、復元コマンドをアプリケーションサーバ200に送信する。スナップショット管理部213は、メモリデータ記憶部214にスナップショットとして記憶されたデータを、RAM102に書き戻す。また、ディスク差分記憶部215にスナップショットとして記憶された差分データを用いて、HDD103のディスクデータを復元する。これにより、仮想マシン211で実行されるサーバソフトウェアの状態が、テストケース実行前の状態に戻る。ステップS16リクエスト処理部113は、リクエスト記憶部114に記憶されたリクエストを、格納順序の早い方から1つ抽出し、リクエストをアプリケーションサーバ200に再送する。仮想マシン211は、リバースプロキシサーバ100から受信したリクエストの指定するパスに応じた処理を行い、レスポンスをリバースプロキシサーバ100に送信する。ステップS17レスポンス処理部115は、レスポンス記憶部116に記憶されたレスポンスを、格納順序の早い方から1つ抽出し、アプリケーションサーバ200から受信したレスポンスと比較する。レスポンス処理部115は、2つのレスポンスの内容の同一性を判定する。例えば、レスポンスコードとボディのテキストとの両方が一致したときに同一であると判定し、少なくとも一方が異なるときには同一でないと判定する。レスポンスコードとボディ以外の情報は、同一性の判定において無視してもよい。ステップS18退避復元指示部117は、第2フェーズにおけるレスポンスの受信を検出すると、復元コマンドをアプリケーションサーバ200に送信する。スナップショット管理部213は、メモリデータ記憶部214およびディスク差分記憶部215に記憶されたスナップショットを用いて、RAM102のデータおよびHDD103のディスクデータを復元する。これにより、サーバソフトウェアの状態が、ステップS16のリクエストを処理する前の状態に戻る。なお、レスポンス処理部115による判定処理ステップS17と、スナップショット管理部213による復元処理ステップS18とは、任意の順序で実行してよく、並列に実行することもできる。ステップS19リクエスト処理部113は、リクエスト記憶部114に残りのリクエストが記憶されているか判断する。残りのリクエストがある場合、処理をステップS16に進める。残りのリクエストがない場合、処理をステップS20に進める。ステップS20レスポンス処理部115は、パス判定結果をクライアント400に報告する。ステップS17で少なくとも1つのレスポンスについて同一でないと判定したときは、2以上のリクエストそれぞれで指定されたパスを、スティッキーなパスと判定する。一方、ステップS17で全てのレスポンスについて同一であると判定したときは、2以上のリクエストそれぞれで指定されたパスを、スティッキーでないパスと判定する。テスト実行部411は、リバースプロキシサーバ100から報告されたパス判定結果を、例えば、クライアント400に接続されたディスプレイに表示する。管理者は、パス判定結果を参照して、ロードバランシングのルールを作成することができる。なお、図7のフローでは、第2フェーズのステップS16~S18の処理を、テストケースに含まれる全てのリクエストについて行った。しかし、ステップS17で、あるレスポンスについて同一でないと判定された場合、その時点で第2フェーズを終了して以降のリクエストをアプリケーションサーバ200に再送しないようにしてもよい。図8は、パス判定の第1のシーケンス例を示す図である。クライアント400は、第1フェーズの開始コマンドを、リバースプロキシサーバ100に送信するステップS111。リバースプロキシサーバ100は、退避コマンドをアプリケーションサーバ200に送信する。アプリケーションサーバ200は、テストケース実行前のサーバソフトウェアの状態に対応するスナップショットを保存するステップS112。クライアント400は、テストケースに含まれるリクエストを1つリバースプロキシサーバ100に送信するステップS113。リバースプロキシサーバ100は、リクエストを保存し、また、当該リクエストをアプリケーションサーバ200に転送するステップS114アプリケーションサーバ200は、リクエストを処理し、レスポンスをリバースプロキシサーバ100に送信するステップS115。リバースプロキシサーバ100は、レスポンスを保存し、また、当該レスポンスをクライアント400に転送するステップS116。以下、ステップS113~S116のシーケンスが、リクエスト数に応じて繰り返される。クライアント400は、第2フェーズの開始コマンドを、リバースプロキシサーバ100に送信するステップS117。リバースプロキシサーバ100は、復元コマンドをアプリケーションサーバ200に送信する。アプリケーションサーバ200は、サーバソフトウェアの状態をテストケース実行前の状態にリバートするステップS118。リバースプロキシサーバ100は、保存しておいたリクエストを1つアプリケーションサーバ200に再送するステップS119。アプリケーションサーバ200は、リクエストを処理し、レスポンスをリバースプロキシサーバ100に送信する。リバースプロキシサーバ100は、第1フェーズのレスポンスと第2フェーズのレスポンスとを比較して、内容の同一性を判定するステップS120。リバースプロキシサーバ100は、復元コマンドをアプリケーションサーバ200に送信する。アプリケーションサーバ200は、サーバソフトウェアの状態をリクエスト処理前の状態にリバートするステップS121。以下、ステップS119~S121のシーケンスが、リクエスト数に応じて繰り返される。リバースプロキシサーバ100は、ステップS120で判定されたレスポンスの同一性に基づいて、リクエストで指定されたパスがスティッキーであるか否かを示すパス判定結果を、クライアント400に報告するステップS122。図9は、ロードバランシングの処理例を示すフローチャートである。ここでは、ロードバランシングのルールが設定された後、クライアント400aが送信したリクエストを、アプリケーションサーバ200a,200bが処理する場合を考える。ステップS21中継部122は、クライアント400aのリクエストを受信する。ステップS22中継部122は、受信したリクエストに含まれるURLのパスが、ルール記憶部121に記憶されたルールにスティッキーなパスとして登録されているか判断する。パスが登録されている場合、処理をステップS23に進める。パスが登録されていない場合、処理をステップS25に進める。ステップS23中継部122は、受信したリクエストがセッションIDを含むか判断する。セッションIDを含む場合、処理をステップS24に進める。セッションIDを含まない場合、処理をステップS25に進める。なお、セッションIDとしては、JSESSIONIDを用いてもよい。セッションIDは、URLに付加されていることもあるし、HTTPヘッダにCookieの値として挿入されていることもあるし、HTTPのボディにhidden項目として挿入されていることもある。ステップS24中継部122は、セッションIDから転送先のアプリケーションサーバを判定する。例えば、中継部122は、セッションIDの末尾を確認し、末尾が.aのときはアプリケーションサーバ200a、末尾が.bのときはアプリケーションサーバ200bを、転送先と判定する。そして、処理をステップS26に進める。ステップS25中継部122は、任意のアプリケーションサーバを、リクエストの転送先として選択する。例えば、中継部122は、ラウンドロビンにより、アプリケーションサーバ200a,200bを交互に選択する。選択アルゴリズムは、ルール記憶部121に記憶されるルールで指定しておいてもよい。ステップS26中継部122は、ステップS24またはステップS25で選択されたアプリケーションサーバに、受信したリクエストを転送する。ステップS27中継部122は、リクエストの転送先のアプリケーションサーバからレスポンスを受信し、レスポンスの宛先のクライアントに転送する。図10は、ロードバランシングのシーケンス例を示す図である。クライアント400aは、セッションの最初に、セッションIDを含まないリクエストをリバースプロキシサーバ100に送信するステップS211。リバースプロキシサーバ100は、任意のアプリケーションサーバ図10のシーケンス例では、アプリケーションサーバ200aを選択し、リクエストを転送するステップS212。アプリケーションサーバ200aは、セッションID=XXXを生成し、リクエストが指定するパスに応じた処理を行う。リクエストの処理では、アプリケーションサーバ200aが備えるRAMやHDDに、セッションIDと対応づけてデータが書き込まれることがある。アプリケーションサーバ200aは、セッションID=XXXを含むレスポンスを、リバースプロキシサーバ100に送信するステップS213。リバースプロキシサーバ100は、セッションIDをXXX.aに書き換えたレスポンスをクライアント400aに転送するステップS214。クライアント400aは、ステップS211と同一セッションのリクエストを、ステップS213で付与されたセッションID=XXX.aを付加して、リバースプロキシサーバ100に送信するステップS215。リバースプロキシサーバ100は、リクエストが指定するパスがスティッキーなパスであることを確認すると、セッションIDの末尾を参照してアプリケーションサーバ200aを選択し、セッションIDをXXXに書き換えたリクエストを転送するステップS216。アプリケーションサーバ200aは、リクエストが指定するパスに応じた処理を行う。リクエストの処理では、アプリケーションサーバ200aのRAMやHDDに記憶されているセッションID=XXX.aに対応するデータが利用されることがあり、当該データが更新されることもある。アプリケーションサーバ200aは、レスポンスをリバースプロキシサーバ100に送信するステップS217。リバースプロキシサーバ100は、レスポンスをクライアント400aに転送するステップS218。クライアント400aは、ステップS211,S215と異なるセッションのリクエストとして、セッションIDを含まないリクエストをリバースプロキシサーバ100に送信するステップS219。リバースプロキシサーバ100は、任意のアプリケーションサーバ図10のシーケンス例では、アプリケーションサーバ200bを選択し、リクエストをアプリケーションサーバ200bに転送するステップS220。アプリケーションサーバ200bは、セッションID=XXXを生成し、リクエストが指定するパスに応じた処理を行う。リクエストの処理では、アプリケーションサーバ200bが備えるRAMやHDDに、セッションIDと対応づけてデータが書き込まれることがある。アプリケーションサーバ200bは、セッションID=XXXを含むレスポンスを、リバースプロキシサーバ100に送信するステップS221。リバースプロキシサーバ100は、セッションIDをXXX.bに書き換えたレスポンスをクライアント400aに転送するステップS222。なお、以上の第2の実施の形態の説明では、サーバソフトウェアの状態を戻すために、ハイパーバイザ212が、仮想マシン211のスナップショットを退避しておき、復元時にRAMおよびHDD上にある仮想マシン211のデータを書き換えることとした。しかし、他の方法によって、サーバソフトウェアの状態を戻すこともできる。例えば、アプリケーションサーバ200は、ファイルシステム上のサーバソフトウェアが使用するディレクトリを退避しておき、復元時にchrootコマンドを用いて、サーバソフトウェアによって認識されるルートディレクトリを入れ替えるようにしてもよい。第2の実施の形態の情報処理システムによれば、ロードバランシングのルールに登録するスティッキーなパスを、効率的に判定することができる。第2の実施の形態の方法は、アプリケーションサーバ200が備えるRAMやHDDへのデータの書き込みを監視する方法と比べて、テストの負担を軽減することができ、また、判定精度を向上させることができる。また、リバースプロキシサーバ100が、アプリケーションサーバ200とクライアント400との間でテストを実行するため、特定の種類のサーバソフトウェアやクライアントソフトウェアに依存しない方法で、効率的にテストを実行できる。[第3の実施の形態]次に、第3の実施の形態を説明する。第2の実施の形態との差異を中心に説明し、第2の実施の形態と同様の事項については説明を省略する。第3の実施の形態の情報処理システムは、パス判定をリバースプロキシサーバでなくクライアントが実行する。図11は、第3の実施の形態のソフトウェア例を示すブロック図である。クライアント400bは、テスト実行部421、テスト中継部422、レスポンス処理部423、レスポンス記憶部424および退避復元指示部425を有する。図11に示すクライアント400bのユニットの一部または全部は、クライアント400bが実行するプログラムのモジュールであってもよく、FPGAやASICなどの電子回路であってもよい。テスト実行部421は、サーバソフトウェアのテストを制御する。テスト実行部421は、テストケースとして同一セッションに属する2以上のリクエストの列を生成する。そして、テストの第1フェーズおよび第2フェーズそれぞれにおいて、生成した2以上のリクエストをテスト中継部422に順次出力する。テスト中継部422は、サーバソフトウェアのテストに関する通信を行う。テスト中継部422は、テスト実行部421からリクエストを取得し、取得したリクエストをアプリケーションサーバ200に送信する。また、アプリケーションサーバ200からレスポンスを受信し、受信したレスポンスをレスポンス処理部423に出力する。レスポンス処理部423は、テストの第1フェーズにおいて、テスト中継部422からレスポンスを取得し、取得したレスポンスをレスポンス記憶部424に記憶する。また、レスポンス処理部423は、テストの第2フェーズにおいて、テスト中継部422からレスポンスを取得し、取得したレスポンスとレスポンス記憶部424に格納したレスポンスを比較する。そして、比較結果に基づいて、リクエストで指定されたパスがスティッキーか判定する。レスポンス処理部423は、例えば、判定結果をディスプレイに表示する。レスポンス記憶部424は、アプリケーションサーバ200が送信したレスポンスを、送信順序を維持して記憶する。レスポンス記憶部424は、クライアント400bが備えるRAMやHDDに確保された記憶領域であってもよい。退避復元指示部425は、テストの第1フェーズの最初に、退避コマンドをアプリケーションサーバ200に送信する。また、退避復元指示部425は、テストの第2フェーズの最初および第2フェーズのレスポンスを受信する毎に、サーバソフトウェアの状態の復元リバートを示す復元コマンドを、アプリケーションサーバ200に送信する。なお、第3の実施の形態のクライアント400bは、第1の実施の形態の情報処理装置10の一例である。クライアント400bが備える通信部、または、テスト中継部422および退避復元指示部425は、送信部11の一例である。クライアント400bが備えるCPUおよびRAM、または、レスポンス処理部423は、判定部12の一例である。第3の実施の形態の情報処理システムによれば、第2の実施の形態と同様、ロードバランシングのルールに登録するスティッキーなパスを、効率的に判定することができる。また、第3の実施の形態では、クライアント400bがテストを実行するため、リバースプロキシサーバを改変せずにテストを実行できる。なお、図11において、アプリケーションサーバ200とクライアント400bの間で、リバースプロキシサーバがリクエストおよびレスポンスを中継してもよい。また、前述のように、アプリケーションサーバ200は、chrootコマンドを用いて、サーバソフトウェアの状態を復元するようにしてもよい。[第4の実施の形態]次に、第4の実施の形態を説明する。第2および第3の実施の形態との差異を中心に説明し、第2および第3の実施の形態と同様の事項については説明を省略する。第4の実施の形態の情報処理システムは、テストの第2フェーズを、1またはそれ以上のアプリケーションサーバ上で動作する複数の仮想マシンを用いて並行処理する。図12は、第4の実施の形態のソフトウェア例を示すブロック図である。図12に示すリバースプロキシサーバ100aおよびアプリケーションサーバ200c,200dのモジュールの一部または全部は、各サーバに実行させるプログラムのモジュールでもよいし、FPGAやASICなどの電子回路であってもよい。リバースプロキシサーバ100aは、テスト中継部111,118、リクエスト処理部113、リクエスト記憶部114、レスポンス処理部115、レスポンス記憶部116、退避復元指示部117、ルール記憶部121および中継部122を有する。テスト中継部118は、テストの第1フェーズでは、リクエスト処理部113から取得する一連のリクエストを、あるアプリケーションサーバ例えば、アプリケーションサーバ200c上で動作する単一の仮想マシン宛てに送信する。また、テストの第2フェーズでは、リクエスト処理部113から取得する一連のリクエストを、アプリケーションサーバ200c,200d上で動作する複数の仮想マシンに振り分けて送信する。また、テスト中継部118は、アプリケーションサーバ200c,200dからレスポンスを受信し、受信したレスポンスをレスポンス処理部115に出力する。なお、テストの第2フェーズにおけるリクエストの振り分けは、ラウンドロビン方式で行ってもよい。また、復元コマンドに応じて状態の復元が完了した仮想マシン次のリクエストを受け付け可能な仮想マシンの中から、選択するようにしてもよい。アプリケーションサーバ200cは、コンピュータの仮想化技術を用いて、複数の仮想マシンを動作させる。アプリケーションサーバ200cは、仮想マシン211,216およびハイパーバイザ212を有する。アプリケーションサーバ200dも、アプリケーションサーバ200cと同様のモジュールを用いて実現できる。仮想マシン211,216は、それぞれ、サーバソフトウェア例えば、Webアプリケーションソフトウェアを実行する。仮想マシン211,216は、それぞれ、リバースプロキシサーバ100aから受信したリクエストを、他の仮想マシンとは独立に処理する。仮想マシン211と仮想マシン216は、セッションのデータを共有しない。アプリケーションサーバ200cのRAMおよびHDD上にある仮想マシン211,216のデータは、ハイパーバイザ212によって仮想マシン毎に管理される。図13は、パス判定の第2のシーケンス例を示す図である。クライアント400は、第1フェーズの開始コマンドを、リバースプロキシサーバ100aに送信するステップS131。リバースプロキシサーバ100aは、アプリケーションサーバ200c,200dに退避コマンドを送信する。アプリケーションサーバ200cは、テストケース実行前の仮想マシン211,216のスナップショットを保存する。アプリケーションサーバ200dも同様に退避処理を行うステップS132。クライアント400は、テストケースに含まれるリクエストを1つリバースプロキシサーバ100aに送信するステップS133。リバースプロキシサーバ100aは、リクエストを仮想マシン211宛てに転送するステップS134。仮想マシン211は、リクエストを処理し、レスポンスをリバースプロキシサーバ100aに送信するステップS135。リバースプロキシサーバ100aは、レスポンスをクライアント400に転送するステップS136。クライアント400は、ステップS133のリクエストに続くリクエストを、リバースプロキシサーバ100aに送信するステップS137。リバースプロキシサーバ100aは、リクエストを、ステップS134の宛先と同じ仮想マシン211宛てに転送するステップS138。仮想マシン211は、リクエストを処理し、レスポンスをリバースプロキシサーバ100aに送信するステップS139。リバースプロキシサーバ100aは、レスポンスをクライアント400に転送するステップS140。このように、第1フェーズのリクエスト処理が、単一の仮想マシンを用いて実行される。クライアント400は、第2フェーズの開始コマンドを、リバースプロキシサーバ100aに送信するステップS141。リバースプロキシサーバ100aは、仮想マシン211の状態を復元する復元コマンドを、アプリケーションサーバ200cに送信する。アプリケーションサーバ200cは、スナップショットを用いて、仮想マシン211の状態をテストケース実行前の状態にリバートするステップS142。リバースプロキシサーバ100aは、複数の仮想マシンの中から仮想マシン211を選択し、リクエストを仮想マシン211宛てに再送するステップS143。仮想マシン211は、リクエストを処理し、レスポンスをリバースプロキシサーバ100aに送信する。リバースプロキシサーバ100aは、第1フェーズのレスポンスと第2フェーズのレスポンスとを比較して、内容の同一性を判定するステップS144。リバースプロキシサーバ100aは、仮想マシン211の状態を復元する復元コマンドを、アプリケーションサーバ200cに送信する。アプリケーションサーバ200cは、スナップショットを用いて、仮想マシン211の状態をリクエスト処理前の状態にリバートするステップS145。リバースプロキシサーバ100aは、複数の仮想マシンの中から、ステップS143の宛先と異なる仮想マシン216を選択し、リクエストを仮想マシン216宛てに再送するステップS146。仮想マシン216は、リクエストを処理し、レスポンスをリバースプロキシサーバ100aに送信する。リバースプロキシサーバ100aは、第1フェーズのレスポンスと第2フェーズのレスポンスとを比較して、内容の同一性を判定するステップS147。リバースプロキシサーバ100aは、仮想マシン216の状態を復元する復元コマンドを、アプリケーションサーバ200cに送信する。アプリケーションサーバ200cは、スナップショットを用いて、仮想マシン216の状態をリバートするステップS148。このように、第2フェーズのリクエスト処理が、複数の仮想マシンを用いて実行される。リバースプロキシサーバ100aは、ステップS144,S147で判定されたレスポンスの同一性に基づいて、リクエストで指定されたパスがスティッキーであるか否かを示すパス判定結果を、クライアント400に報告するステップS149。第4の実施の形態の情報処理システムによれば、第2および第3の実施の形態と同様、ロードバランシングのルールに登録するスティッキーなパスを、効率的に判定することができる。また、第4の実施の形態では、テストの第2のフェーズで複数の仮想マシンを使用するため、ある仮想マシンがリバート中でも他の仮想マシンにリクエストを処理させることができ、リバート待ちの時間を削減し、テストの実行時間を短縮できる。なお、前述のように、アプリケーションサーバ200cは、chrootコマンドを用いて、仮想マシン211,216の状態を復元するようにしてもよい。[第5の実施の形態]次に、第5の実施の形態を説明する。第2乃至第4の実施の形態との差異を中心に説明し、第2乃至第4の実施の形態と同様の事項については説明を省略する。第5の実施の形態の情報処理システムは、クライアントへのサービス提供を停止せずにサーバソフトウェアを旧バージョンから新バージョンに移行するとき、移行を円滑に行えるように、ロードバランシングのルールを自動的に生成してリバースプロキシサーバに適用する。図14は、第5の実施の形態のソフトウェア例を示すブロック図である。リバースプロキシサーバ100bは、テスト中継部111,112、リクエスト処理部113、リクエスト記憶部114、レスポンス処理部115、レスポンス記憶部116、退避復元指示部117、ルール記憶部121、中継部122、サーバ更新部123およびルール更新部124を有する。リバースプロキシサーバ100bのユニットの一部または全部は、プログラムのモジュールでもよく、FPGAやASICなどの電子回路であってもよい。サーバ更新部123は、サーバソフトウェアのローリングアップデートを実行する。ローリングアップデートでは、アプリケーションサーバ200,200a,200bを順番に更新していく。例えば、サーバ更新部123は、アプリケーションサーバ200に更新を指示し、アプリケーションサーバ200の更新が完了すると、アプリケーションサーバ200aに更新を指示する。アプリケーションサーバ200aの更新が完了すると、アプリケーションサーバ200bに更新を指示する。なお、更新中のアプリケーションサーバは、リクエストの転送先から除外される。ルール更新部124は、新バージョンのサーバソフトウェアについてのパス判定結果をレスポンス処理部115から取得し、スティッキーなパスを含む新ルールを生成する。そして、新ルールとルール記憶部121に記憶された旧ルールから、ローリングアップデート中に適用する一時ルールを生成する。ルール更新部124は、ローリングアップデートの開始時、旧ルールに代えて一時ルールをルール記憶部121に書き込み、ローリングアップデートの終了時、一時ルールに代えて新ルールをルール記憶部121に書き込む。図15は、サーバ更新時の一時ルールの生成例を示す図である。第1のパス/www/は、旧バージョンのサーバソフトウェアに対応する旧ルールでスティッキーであり、新バージョンのサーバソフトウェアに対応する新ルールでもスティッキーである。第2のパス/xxx/は、旧ルールではスティッキーであるが、新ルールではスティッキーでない。第3のパス/yyy/は、旧ルールではスティッキーでないが、新ルールではスティッキーである。第4のパス/zzz/は、旧ルールでスティッキーでなく、新ルールでもスティッキーでない。ここで、ローリングアップデート中は、旧ルールと新ルールの少なくとも一方でスティッキーであると指定されているパスは、スティッキーとして取り扱う。よって、一時ルールでは、第1乃至第3のパスがスティッキーであると指定されることになる。もし、ローリングアップデートの開始時に新ルールを適用すると、第2のパスを含むリクエストが、同一セッションの先のリクエストと異なるアプリケーションサーバに転送され得る。このとき、転送先のアプリケーションサーバがまだ旧バージョンのサーバソフトウェアを実行していると、リクエストが正常に処理されないおそれがある。また、ローリングアップデートの終了まで旧ルールを適用すると、第3のパスを含むリクエストが、同一セッションの先のリクエストと異なるアプリケーションサーバに転送され得る。このとき、転送先のアプリケーションサーバが既に新バージョンのサーバソフトウェアを実行していると、リクエストが正常に処理されないおそれがある。そこで、ローリングアップデート中は、第2および第3のパスの両方をスティッキーとして取り扱う。図16は、サーバ更新の処理例を示すフローチャートである。ステップS31レスポンス処理部115は、図7に示した方法で、新バージョンのサーバソフトウェアについて、スティッキーなパスを判定する。ステップS32ルール更新部124は、ステップS31の判定結果から、ロードバランシングの新ルールを生成する。ルール更新部124は、ルール記憶部121に記憶されている旧ルールと生成した新ルールとから、ローリングアップデート中に適用する一時ルールを生成する。一時ルールが指定するスティッキーなパスは、新ルールが指定するパスと旧ルールが指定するパスの和集合である。ルール更新部124は、生成した一時ルールを、ルール記憶部121に書き込んで適用を開始する。ステップS33サーバ更新部123は、アプリケーションサーバ200,200a,200bから、未更新のアプリケーションサーバを1つ選択する。ステップS34中継部122は、ステップS33で選択されたアプリケーションサーバを、リクエストの転送先の候補から除外する。ステップS35サーバ更新部123は、ステップS33で選択したアプリケーションサーバに、サーバソフトウェアの更新を指示する。指示を受けたアプリケーションサーバの仮想マシンは、実行中の旧バージョンのサーバソフトウェアを停止し、新バージョンのサーバソフトウェアのプログラムを読み込んで起動する。サーバ更新部123は、当該アプリケーションサーバから、更新完了の報告を受信する。ステップS36中継部122は、更新完了の報告があると、ステップS33で選択されたアプリケーションサーバを、リクエストの転送先の候補に戻す。ステップS37サーバ更新部123は、未更新のアプリケーションサーバが存在するか判断する。存在する場合、処理をステップS33に進める。存在しない場合、ローリングアップデートが完了したと判断し、処理をステップS37に進める。ステップS38ルール更新部124は、ステップS32で生成した新ルールを、ルール記憶部121に書き込んで適用を開始する。第5の実施の形態の情報処理システムによれば、第2乃至第4の実施の形態と同様、ロードバランシングのルールに登録するスティッキーなパスを、効率的に判定することができる。また、第5の実施の形態では、リバースプロキシサーバ100bが、旧ルールと新ルールとに基づいて一時ルールを生成してローリングアップデート中に適用する。これにより、先のリクエストに関するデータを取得できないことによる不具合を抑制し、ローリングアップデート中もクライアント400へのサービス提供を継続することができる。なお、前述のように、アプリケーションサーバ200は、chrootコマンドを用いて、仮想マシン211の状態を復元するようにしてもよい。"