(57)【要約】【課題】あるサーバに関するメッセージを利用した他のサーバの検証を容易にする。【解決手段】情報処理装置１０は、クライアント２１とサーバ２２の間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを取得する。情報処理装置１０は、複数のパラメータの中から、取得した複数のメッセージのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出する。情報処理装置１０は、検出結果に応じて、複数のパラメータのうち複数のメッセージをサーバ２３の検証に用いるときに値を書き換える書換パラメータを決定する。【選択図】図１
2014191673.tif 000002
【特許請求の範囲】
【請求項１】
クライアントと１または２以上のサーバの間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを記憶する記憶部と、
前記複数のパラメータのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、検出結果に応じて、前記複数のパラメータのうち前記複数のメッセージを他のサーバの検証に用いるときに値を書き換える書換パラメータを決定する決定部と、
を有する情報処理装置。
【請求項２】
前記決定部は、前記複数のメッセージを送信順序に応じて複数のブロックに分割し、時間的に離れたブロック間のメッセージの比較を、時間的に隣接するブロック間のメッセージの比較よりも優先的に行うことで、前記異なる値が設定されたパラメータを検出する、
請求項１記載の情報処理装置。
【請求項３】
前記決定部は、前記クライアントが送信または受信した異なるメッセージにおいて前記異なる値が設定されたパラメータを、前記書換パラメータと決定する、
請求項１または２記載の情報処理装置。
【請求項４】
前記記憶部は、他のクライアントと前記１または２以上のサーバの間で送信された１または２以上の他のメッセージを更に記憶し、
前記決定部は、前記複数のパラメータのうち一のメッセージと一の他のメッセージとにおいて同じ値が設定されたパラメータを、前記複数のメッセージを前記他のサーバの検証に用いるときに値を書き換えない非書換パラメータと決定する、
請求項１乃至３の何れか一項に記載の情報処理装置。
【請求項５】
前記複数のメッセージには、前記クライアントが送信した複数の要求メッセージと前記１または２以上のサーバが送信した複数の応答メッセージとが含まれ、
前記決定部は、前記複数の要求メッセージの間の比較を優先的に行うことで、前記異なる値が設定されたパラメータを検出する、
請求項１乃至４の何れか一項に記載の情報処理装置。
【請求項６】
前記決定部は、前記書換パラメータを含む要求メッセージより前に前記クライアントに送信された応答メッセージに基づいて、前記書換パラメータの値の書換方法を決定する、
請求項５記載の情報処理装置。
【請求項７】
クライアントとの間で、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを送信または受信する１または２以上のサーバと、
他のサーバと、
前記複数のメッセージを取得し、取得した前記複数のメッセージを用いて前記他のサーバを検証する検証装置と、を有し、
前記検証装置は、前記複数のパラメータのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、検出結果に応じて、前記複数のパラメータのうち前記他のサーバを検証するときに値を書き換える書換パラメータを決定する、
情報処理システム。
【請求項８】
コンピュータが実行する検証制御方法であって、
クライアントと１または２以上のサーバの間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを取得し、
前記複数のパラメータの中から、取得した前記複数のメッセージのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、
検出結果に応じて、前記複数のパラメータのうち前記複数のメッセージを他のサーバの検証に用いるときに値を書き換える書換パラメータを決定する、
検証制御方法。
【請求項９】
コンピュータに、
クライアントと１または２以上のサーバの間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを取得し、
前記複数のパラメータの中から、取得した前記複数のメッセージのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、
検出結果に応じて、前記複数のパラメータのうち前記複数のメッセージを他のサーバの検証に用いるときに値を書き換える書換パラメータを決定する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、情報処理システム、検証制御方法およびプログラムに関する。
【背景技術】
【０００２】
情報処理システムを運用・保守する過程で、あるコンピュータと他のコンピュータとが同等の機能を有するか検証したいことがある。例えば、現在使用しているコンピュータを新たなコンピュータに交換する前に、元のコンピュータの機能が新たなコンピュータでも実現されているか検証することがある。また、例えば、あるコンピュータのソフトウェアをアップデートする前に、テスト用のコンピュータ上で試験的にアップデートを行い、アップデートの影響によって他のソフトウェアの動作が変化しないか確認する退行テストを行うことがある。また、例えば、業務用のコンピュータで障害が発生したとき、デバッグ用のコンピュータ上で障害を再現して障害原因を分析することがある。
【０００３】
検証するコンピュータとしては、クライアントから要求メッセージを受信し、要求メッセージに応じて応答メッセージをクライアントに送信するサーバが考えられる。クライアントやサーバは、物理的なコンピュータ（物理マシンと言うことがある）でもよいし、仮想的なコンピュータ（仮想マシンと言うことがある）でもよい。この場合、検証方法として、あるサーバとクライアントとの間で過去に送信されたメッセージを用いて他のサーバを検証するブラックボックス方式の検証方法を採用することができる。
【０００４】
例えば、検証装置は、過去にクライアントからサーバに送信された要求メッセージと、過去に当該サーバからクライアントに送信された応答メッセージとを取得する。検証装置は、取得した過去の要求メッセージを他のサーバに送信し、その要求メッセージに対する応答メッセージを当該他のサーバから受信する。そして、検証装置は、他のサーバから受信した応答メッセージと取得した過去の応答メッセージとを比較することで、他のサーバにおいて元のサーバと同等の機能が実現されているか判定する。
【０００５】
なお、現用系サーバとの間で送信されたパケットをキャプチャし、キャプチャしたパケットを予備系サーバに転送することで、現用系サーバに対する予備系サーバの相対的な性能を評価する試験装置が提案されている。また、クライアントに提供するＷｅｂページ内のパラメータ名が、クライアントからのアクセス毎に変化するようなＷｅｂアプリケーションをテストするためのテスト基盤装置が提案されている。テスト基盤装置は、名前が変化するパラメータを定義したパラメータ定義ルールを予め保持しておく。テスト基盤装置は、Ｗｅｂページの中からパラメータ定義ルールに適合するパラメータを抽出し、抽出したパラメータの名前および値を所定の名前および所定の値に置換して、クライアント上で動作する自動テストツールがＷｅｂページを処理できるようにする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１９９６８０号公報
【特許文献２】特開２０１０−１１３３８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、あるサーバおよび他のサーバが要求メッセージに含まれるパラメータの値に応じた動作をするものである場合、過去にクライアントとサーバとの間で送信された要求メッセージをそのまま使用すると他のサーバを正しく検証できないことがある。
【０００８】
例えば、クライアントがサーバに、セッションＩＤや認証情報などセッションに依存するパラメータの値を含む要求メッセージを送信することがある。その場合、過去の要求メッセージをそのまま他のサーバに送信すると、他のサーバはパラメータの値が実在しないセッションに関する異常な値であると判断してクライアントにエラーを返すことがある。また、例えば、クライアントがサーバに、サーバのＭＡＣ（Media Access Control）アドレスなどサーバの物理状態に依存するパラメータの値を含む要求メッセージを送信することがある。その場合も、過去の要求メッセージをそのまま他のサーバに送信すると、他のサーバはパラメータの値が不適切と判断してクライアントにエラーを返すことがある。
【０００９】
そこで、あるサーバとクライアントとの間で過去に送信されたメッセージを利用するにあたって、メッセージに含まれるパラメータの値の少なくとも一部を書き換えることが考えられる。しかし、メッセージに含まれ得るパラメータのうち値を書き換えるべきパラメータを、検証を指示するユーザが予め定義しておくことは、ユーザの負担が大きいという問題がある。これは、値を書き換えるべきパラメータを正確に定義しておくには、メッセージ処理を行うソフトウェアの詳細をユーザが知らないと難しいためである。
【００１０】
１つの側面では、本発明は、あるサーバに関するメッセージを利用した他のサーバの検証を容易にする情報処理装置、情報処理システム、検証制御方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、記憶部と決定部とを有する情報処理装置が提供される。記憶部は、クライアントと１または２以上のサーバの間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを記憶する。決定部は、複数のパラメータのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、検出結果に応じて、複数のパラメータのうち複数のメッセージを他のサーバの検証に用いるときに値を書き換える書換パラメータを決定する。
【００１２】
また、１つの態様では、１または２以上のサーバと他のサーバと検証装置とを有する情報処理システムが提供される。１または２以上のサーバは、クライアントとの間で、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを送信または受信する。検証装置は、複数のメッセージを取得し、取得した複数のメッセージを用いて他のサーバを検証する。検証装置は、複数のパラメータのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出し、検出結果に応じて、複数のパラメータのうち他のサーバを検証するときに値を書き換える書換パラメータを決定する。
【００１３】
また、１つの態様では、コンピュータが実行する検証制御方法が提供される。クライアントと１または２以上のサーバの間で送信された、それぞれ複数のパラメータの少なくとも１つと当該パラメータの値とを含む複数のメッセージを取得する。複数のパラメータの中から、取得した複数のメッセージのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出する。検出結果に応じて、複数のパラメータのうち複数のメッセージを他のサーバの検証に用いるときに値を書き換える書換パラメータを決定する。
【００１４】
また、１つの態様では、コンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１５】
１つの側面では、あるサーバに関するメッセージを利用した他のサーバの検証が容易になる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】メッセージに含まれるパラメータの例を示す図である。
【図４】検証装置のハードウェア例を示すブロック図である。
【図５】検証装置の機能例を示すブロック図である。
【図６】メッセージテーブルの例を示す図である。
【図７】パラメータ検出テーブルの例を示す図である。
【図８】解析結果テーブルの例を示す図である。
【図９】パラメータ静的解析の手順例を示すフローチャートである。
【図１０】サーバ検証の手順例を示すフローチャートである。
【図１１】検証メッセージの例を示す図である。
【図１２】メッセージの選択方法の第１の例を示す図である。
【図１３】パラメータ静的解析の他の手順例を示すフローチャートである。
【図１４】メッセージの選択方法の第２の例を示す図である。
【図１５】サーバ装置の他の機能例を示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムを示す図である。
【００１８】
第１の実施の形態の情報処理システムは、情報処理装置１０、クライアント２１およびサーバ２２，２３を含む。この情報処理システムは、クライアント２１とサーバ２２（または、サーバ２２を含む２以上のサーバ）との間で送信されたメッセージを利用して、サーバ２３（または、サーバ２３を含む２以上のサーバ）の動作を検証する。サーバ２３としては、例えば、サーバ２２と交換予定の新たなサーバ、サーバ２２のソフトウェアをアップデートする前にアップデート後の動作をテストするサーバ、サーバ２２で発生した障害を再現して原因を分析するためのデバッグ用サーバなどが考えられる。
【００１９】
クライアント２１およびサーバ２２，２３は、物理マシンでもよいし仮想マシンでもよい。前者の場合、例えば、情報処理装置１０、クライアント２１およびサーバ２２，２３が、スイッチなどの通信装置を有するネットワークに接続される。後者の場合、クライアント２１およびサーバ２２，２３のうちの２つ以上が同一の物理マシン上で動作していてもよい。仮想マシンが動作する物理マシンは、情報処理装置１０であってもよい。
【００２０】
情報処理装置１０は、記憶部１１および決定部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置でもよい。決定部１２は、例えば、プロセッサを用いて実現される。決定部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）などを含んでもよい。プロセッサを用いる場合、例えば、当該プロセッサが以下に説明する処理を行うためのプログラムを実行する。
【００２１】
記憶部１１は、クライアント２１とサーバ２２（または、サーバ２２を含む２以上のサーバ）との間で送信された複数のメッセージを記憶する。各メッセージは、複数のパラメータの少なくとも１つと当該パラメータの値とを含む。記憶部１１に記憶されるメッセージは、例えば、情報処理装置１０がクライアント２１とサーバ２２との間で送信されたパケットをキャプチャすることで収集される。収集するメッセージは、ＨＴＴＰ（Hypertext Transfer Protocol）など所定のプロトコルに関するメッセージに限定されてもよい。
【００２２】
一例として、記憶部１１に記憶される複数のメッセージに、クライアント２１からサーバ２２に送信されたメッセージ１〜３が含まれる。パラメータ名とパラメータの値の組として、メッセージ１がｐａｒａ１＝ａ０を含み、メッセージ２がｐａｒａ１＝ａ０とｐａｒａ２＝ｂ０を含み、メッセージ３がｐａｒａ２＝ｂ１とｐａｒａ３＝ｃ０を含む。すなわち、ｐａｒａ１はメッセージ１，２に含まれ、その値はメッセージ１とメッセージ２で同じである。ｐａｒａ２はメッセージ２，３に含まるが、その値はメッセージ２とメッセージ３で異なる。なお、パラメータは、例えば、ＨＴＴＰヘッダやＨＴＴＰボディに記載されたものなど、アプリケーションレイヤのパラメータである。
【００２３】
決定部１２は、記憶部１１に記憶されたメッセージから、メッセージに含まれ得る複数のパラメータのうち異なるメッセージにおいて異なる値が設定されたパラメータを検出する。そして、決定部１２は、検出結果に応じて、記憶部１１に記憶されたメッセージをサーバ２３（または、サーバ２３を含む複数のサーバ）の検証に用いるときに値を書き換える書換パラメータを決定する。例えば、決定部１２は、同じクライアント（クライアント２１）が送信または受信した異なるメッセージにおいて異なる値が設定されたパラメータを、書換パラメータと決定する。上記の例の場合、決定部１２は、ｐａｒａ１，ｐａｒａ２，ｐａｒａ３のうちｐａｒａ２を、書換パラメータと決定する。
【００２４】
なお、決定部１２は、上記の条件を満たすパラメータを、クライアント２１が送信した要求メッセージとサーバ２２が送信した応答メッセージのうち、要求メッセージのみを参照して（または、要求メッセージを優先的に参照して）検索してもよい。また、決定部１２は、記憶部１１に記憶された複数のメッセージを、送信順序とは異なる順序で参照することで、上記の条件を満たすパラメータを検索してもよい。例えば、決定部１２は、送信タイミングが近いメッセージに含まれるパラメータの比較よりも、送信タイミングが離れたメッセージに含まれるパラメータの比較を優先的に行ってもよい。
【００２５】
その後、サーバ２３（または、サーバ２３を含む複数のサーバ）を検証するにあたっては、決定された書換パラメータの値が書き換えられる。一例として、ｐａｒａ２が書換パラメータと決定され、ｐａｒａ１，ｐａｒａ３が値を書き換えない非書換パラメータと決定される。すると、例えば、ｐａｒａ１＝ａ０を含むメッセージ１がサーバ２３に送信され、ｐａｒａ１＝ａ０とｐａｒａ２＝ｂ２を含むメッセージ２がサーバ２３に送信され、ｐａｒａ２＝ｂ３とｐａｒａ３＝ｃ０を含むメッセージ３がサーバ２３に送信される。
【００２６】
書換パラメータの値（例えば、上記のｂ２やｂ３）は、サーバ２３を検証する過程で自動的に算出し得る。決定部１２は、記憶部１１に記憶されたメッセージのうち、書換パラメータが含まれていた要求メッセージより前に送信された応答メッセージ（例えば、その要求メッセージの直前の応答メッセージ）に基づいて、値の書換方法を決定してもよい。その場合、検証の過程でサーバ２３が送信する応答メッセージに基づいて、その後にサーバ２３に送信される要求メッセージのパラメータの値が書き換えられる。なお、サーバ２３の検証は、情報処理装置１０が行ってもよいし他の情報処理装置が行ってもよい。
【００２７】
第１の実施の形態の情報処理システムによれば、メッセージに含まれ得るパラメータの中から、セッションに依存するパラメータやサーバの物理状態に依存するパラメータなど、値を書き換えるべきパラメータを判定することができる。よって、クライアント２１とサーバ２２との間で送信されたメッセージを利用してサーバ２３を検証するときに、パラメータ異常によって検証が正しく行えなくなることを抑制できる。また、値を書き換えるべきパラメータをユーザが事前に定義しておかなくてもよいため、ユーザはサーバ２３で実行されるソフトウェアの詳細を知らなくてもよく、ユーザの負担が軽減される。
【００２８】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。
第２の実施の形態の情報処理システムは、スイッチ３０、検証装置１００、クライアント装置２１１，２１２、サーバ装置２２１，２２２，２３１，２３２を有する。
【００２９】
スイッチ３０は、パケットを転送する通信装置である。スイッチ３０は、特定の通常ポートまたは全ての通常ポートを通過するパケットを複製し、複製したパケットを通常ポートとは異なるミラーポートから出力するポートミラーリング機能を備える。ミラーポートには、検証装置１００が接続されている。スイッチ３０は、クライアント装置２１１，２１２とサーバ装置２２１，２２２との間で送信されたパケットを複製し、検証装置１００に送信する。なお、検証装置１００がパケットをキャプチャする方法として、スイッチ３０に代えて、伝送媒体上の信号を複製するタップを利用してもよい。
【００３０】
クライアント装置２１１，２１２は、ユーザが操作する端末装置としてのクライアントコンピュータである。サーバ装置２２１，２２２，２３１，２３２は、要求メッセージを受信し、要求メッセージに応じた処理を行って応答メッセージを返信するサーバコンピュータである。第２の実施の形態では、主に、サーバ装置２２１，２２２，２３１，２３２としてＨＴＴＰ通信を行うＷｅｂサーバを想定する。ただし、サーバ装置２２１，２２２，２３１，２３２は、他の種類のサーバコンピュータであってもよい。
【００３１】
上記のサーバ装置のうちサーバ装置２２１，２２２は、現在業務に使用している現用系のサーバ装置である。サーバ装置２２１，２２２は、クライアント装置２１１，２１２から要求メッセージ（例えば、ＨＴＴＰリクエスト）を受信し、クライアント装置２１１，２１２に応答メッセージ（例えば、ＨＴＴＰレスポンス）を送信する。
【００３２】
一方、サーバ装置２３１，２３２は、現在業務に使用していない検証系のサーバ装置である。例えば、サーバ装置２３１，２３２として、サーバ装置２２１，２２２と交換予定の（システム移行後に業務に使用する予定の）サーバ装置が考えられる。また、例えば、サーバ装置２３１，２３２として、サーバ装置２２１，２２２のソフトウェアをアップデートする前にアップデート後の動作を確認するテスト用のサーバ装置が考えられる。また、例えば、サーバ装置２３１，２３２として、サーバ装置２２１，２２２で発生した障害を分析するデバッグ用のサーバ装置が考えられる。サーバ装置２３１，２３２は、検証装置１００から要求メッセージを受信し、検証装置１００に応答メッセージを送信する。
【００３３】
検証装置１００は、クライアント装置２１１，２１２とサーバ装置２２１，２２２との間で送信されたメッセージを用いて、サーバ装置２３１，２３２をブラックボックス方式で検証するコンピュータである。検証装置１００は、ユーザが操作する端末装置であってもよいし、端末装置からアクセスされるサーバ装置であってもよい。
【００３４】
サーバ装置２３１，２３２を検証するにあたり、検証装置１００は、スイッチ３０から受信するパケットをキャプチャし、キャプチャしたパケットから、サーバ装置２２１，２２２が送信または受信した過去のメッセージ（例えば、ＨＴＴＰメッセージ）抽出する。検証装置１００は、抽出された過去の要求メッセージをサーバ装置２３１，２３２に送信し、応答メッセージをサーバ装置２３１，２３２から受信する。そして、検証装置１００は、サーバ装置２３１，２３２から受信された応答メッセージと過去の応答メッセージとを比較することで、クライアント装置２１１，２１２から見たサーバ装置２３１，２３２の動作がサーバ装置２２１，２２２と同等になるか検証する。
【００３５】
ただし、クライアント装置２１１，２１２とサーバ装置２２１，２２２の間で送信されたメッセージには、セッション依存のパラメータやサーバ装置依存のパラメータなど、通信状況に依存するパラメータが含まれ得る。通信状況に依存するパラメータを含む過去の要求メッセージをそのままサーバ装置２３１，２３２に送信すると、パラメータの値が示すセッションやサーバ装置が不適切であるとして、サーバ装置２３１，２３２が要求メッセージを拒否する可能性がある。そこで、検証装置１００は、メッセージに含まれ得るパラメータの中から状況依存パラメータを判定し、サーバ装置２３１，２３２との通信状況に応じて、要求メッセージに含まれる状況依存パラメータの値を適宜書き換える。
【００３６】
図３は、メッセージに含まれるパラメータの例を示す図である。
ここでは、クライアント装置２１１とサーバ装置２２１との間で、ＨＴＴＰメッセージが送信される場合を考える。検証装置１００は、ＨＴＴＰメッセージのヘッダやボディに含まれるパラメータの中から状況依存パラメータを判定することになる。
【００３７】
パラメータ名とその値は、ＨＴＴＰリクエストのヘッダに記載されるＵＲＬ（Uniform Resource Locator）に付加されることがある。例えば、ＵＲＬとして／ｓｅｒｖｉｃｅ？ｐａｒａ１＝１１１と記載されている場合、ｐａｒａ１がパラメータ名であり１１１がその値である。また、パラメータ名とその値は、ＨＴＴＰリクエストのヘッダにＣｏｏｋｉｅとして記載されることがある。例えば、Ｃｏｏｋｉｅとしてｐａｒａ３＝“３３３”と記載されている場合、ｐａｒａ３がパラメータ名であり３３３がその値である。
【００３８】
また、パラメータ名とその値は、ＨＴＴＰリクエストのボディにＰＯＳＴメソッドの入力データとして記載されることがある。例えば、入力データとしてｐａｒａ２＝２２２と記載されている場合、ｐａｒａ２がパラメータ名であり２２２がその値である。また、パラメータ名とその値は、ＨＴＴＰレスポンスのボディに記載されるＨＴＭＬ（Hypertext Markup Language）タグの中に含まれることがある。例えば、ＨＴＭＬタグとして＜ｉｎｐｕｔ  ｔｙｐｅ＝“ｈｉｄｄｅｎ”  ｎａｍｅ＝“ｐａｒａ２”  ｖａｌｕｅ＝“２２２”＞と記載されている場合、ｐａｒａ２がパラメータ名であり２２２がその値である。
【００３９】
クライアント装置２１１が送信するＨＴＴＰリクエストに含まれるパラメータの値としては、そのＨＴＴＰリクエストより前にクライアント装置２１１が受信したＨＴＴＰレスポンスに含まれるパラメータの値が用いられることがある。例えば、サーバ装置２２１からクライアント装置２１１にｐａｒａ２＝２２２を含むＨＴＴＰレスポンスが送信されたとする。その場合、その直後にクライアント装置２１１からサーバ装置２２１に送信されるＨＴＴＰリクエストにｐａｒａ２＝２２２が含まれることがある。
【００４０】
前述したように、パラメータの中には、セッション依存のパラメータやサーバ装置依存のパラメータなどの状況依存パラメータが含まれていることがある。セッション依存のパラメータの例としては、セッションＩＤや認証情報を示すパラメータが挙げられる。
【００４１】
セッションＩＤは原則としてセッション毎に変わり、認証情報は原則としてサーバ装置２２１が認証を行う毎に変わる。例えば、サーバ装置２２１がクライアント装置２１１にセッションＩＤを含むＨＴＴＰレスポンスを送信し、クライアント装置２１１がそのセッションＩＤを含むＨＴＴＰリクエストをサーバ装置２２１に送信することで、サーバ装置２２１がＨＴＴＰリクエストの属するセッションを特定できるようにする。サーバ装置依存のパラメータの例としては、ＭＡＣアドレスなどの物理アドレスが挙げられる。サーバ装置依存のパラメータの値は、アクセス先のサーバ装置に応じて変わる。
【００４２】
図４は、検証装置のハードウェア例を示すブロック図である。
検証装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の決定部１２の一例であり、ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１の一例である。
【００４３】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、検証装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００４４】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、検証装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４５】
ＨＤＤ１０３は、ＯＳ（Operating System）やアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、検証装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４６】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、検証装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬＤ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４７】
入力信号処理部１０５は、検証装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、検証装置１００に、複数の種類の入力デバイスが接続されてもよい。
【００４８】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４９】
通信インタフェース１０７は、スイッチ３０に接続され、パケットを送信および受信するインタフェースである。通信インタフェース１０７は、クライアント装置２１１，２１２とサーバ装置２２１，２２２との間で送信されたパケットの複製をスイッチ３０から受信する。また、通信インタフェース１０７は、サーバ装置２３１，２３２にパケットを送信し、サーバ装置２３１，２３２からパケットを受信する。なお、検証装置１００は、パケットをキャプチャするための通信インタフェースと、サーバ装置２３１，２３２と通信するための通信インタフェースとを、別個に備えていてもよい。
【００５０】
ただし、検証装置１００は、媒体リーダ１０６を備えていなくてもよい。また、端末装置からネットワーク経由で検証装置１００を制御できる場合には、検証装置１００は、画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。
【００５１】
図５は、検証装置の機能例を示すブロック図である。
検証装置１００は、メッセージ記憶部１２１、パラメータ情報記憶部１２２、検証メッセージ記憶部１２３、学習部１３０、検証部１４０および表示制御部１５０を有する。メッセージ記憶部１２１、パラメータ情報記憶部１２２および検証メッセージ記憶部１２３は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現することができる。学習部１３０、検証部１４０および表示制御部１５０は、例えば、ＣＰＵ１０１が実行するソフトウェアのモジュールとして実現することができる。
【００５２】
メッセージ記憶部１２１は、クライアント装置２１１，２１２とサーバ装置２２１，２２２との間で送信されたメッセージ、または、メッセージに含まれる一部の情報を記憶する。パラメータ情報記憶部１２２は、メッセージに含まれるパラメータの解析結果と、解析の途中経過の情報とを記憶する。解析結果には、状況依存パラメータを示す情報、状況非依存パラメータを示す情報、および、検証時に状況依存パラメータの値を書き換える方法を示す情報が含まれる。検証メッセージ記憶部１２３は、サーバ装置２３１，２３２を検証するときに検証装置１００とサーバ装置２３１，２３２との間で送信されたメッセージ、または、メッセージに含まれる一部の情報を記憶する。
【００５３】
学習部１３０は、クライアント装置２１１，２１２とサーバ装置２２１，２２２との間で送信されたメッセージを解析して、サーバ装置２３１，２３２を検証する方法を学習する。学習部１３０は、キャプチャ部１３１およびパラメータ解析部１３２を有する。
【００５４】
キャプチャ部１３１は、スイッチ３０から受信されるパケット（例えば、ＩＰ（Internet Protocol）パケット）をキャプチャする。スイッチ３０が複製するパケットに、クライアント装置２１１，２１２やサーバ装置２２１，２２２以外のコンピュータによって送信されたものが含まれる場合、キャプチャ部１３１は、キャプチャするパケットを限定してもよい。そして、キャプチャ部１３１は、キャプチャしたパケットの集合からメッセージを抽出し、メッセージまたは当該メッセージに含まれる一部の情報をメッセージ記憶部１２１に格納する。このとき、キャプチャ部１３１は、抽出するメッセージを所定のアプリケーションレイヤのプロトコル（例えば、ＨＴＴＰ）に関するものに限定してもよい。
【００５５】
パラメータ解析部１３２は、メッセージ記憶部１２１を参照して、メッセージに含まれるパラメータを、サーバ装置２３１，２３２の検証が開始される前に解析する（静的解析）。後述するように、パラメータ解析部１３２は、メッセージを送信または受信したクライアント装置とメッセージに含まれるパラメータとパラメータの値の３つの事項を特定する。そして、パラメータ解析部１３２は、異なるメッセージ間における上記の３つの事項の一致不一致に基づいて、状況依存パラメータおよび状況非依存パラメータを判定する。パラメータ解析部１３２は、解析結果をパラメータ情報記憶部１２２に格納する。
【００５６】
検証部１４０は、学習部１３０の学習結果に基づいて、サーバ装置２３１，２３２の動作がサーバ装置２２１，２２２と同等であるか検証する。検証部１４０は、通信再現部１４１、応答比較部１４２およびパラメータ解析部１４３を有する。
【００５７】
通信再現部１４１は、メッセージ記憶部１２１を参照して、クライアント装置２１１，２１２からサーバ装置２２１，２２２に対して行われたアクセスを、サーバ装置２３１，２３２を対象として再現する。すなわち、通信再現部１４１は、過去にクライアント装置２１１，２１２からサーバ装置２２１，２２２に送信された要求メッセージを、送信順序を維持してサーバ装置２３１，２３２に送信する。このとき、通信再現部１４１は、パラメータ情報記憶部１２２に記憶されたパラメータの解析結果に基づいて、過去に送信された要求メッセージに含まれるパラメータの値を適宜書き換える。
【００５８】
検証の過程で、通信再現部１４１は、サーバ装置２３１，２３２に送信した要求メッセージ、または、要求メッセージに含まれる一部の情報を、検証メッセージ記憶部１２３に格納する。また、通信再現部１４１は、要求メッセージに対してサーバ装置２３１，２３２から受信した応答メッセージ、または、応答メッセージに含まれる一部の情報を、検証メッセージ記憶部１２３に格納する。ただし、要求メッセージまたは要求メッセージに含まれる一部の情報を、検証メッセージ記憶部１２３に格納しないようにしてもよい。
【００５９】
応答比較部１４２は、メッセージ記憶部１２１と検証メッセージ記憶部１２３を参照して、過去にサーバ装置２２１，２２２が送信した応答メッセージとサーバ装置２３１，２３２が送信した応答メッセージとを比較し、両者の同等性を判断する。２つの応答メッセージが同等でない場合、応答比較部１４２は、パラメータ解析部１４３を呼び出す。
【００６０】
このとき、応答メッセージにはセッション依存の情報やサーバ装置依存の情報が含まれ得るため、応答比較部１４２は、２つの応答メッセージの内容が完全に一致していなくても「同等」と判断することがある。例えば、応答比較部１４２は、ＨＴＴＰステータスコードが同じ応答メッセージを同等であると判断する。ＨＴＴＰステータスコードは、ＨＴＴＰリクエストの成功を示す２００番や、ＨＴＴＰリクエストの処理中にサーバ内部で予期しないエラーが発生したことを示す５００番など、サーバの状態を示すコードである。また、例えば、応答比較部１４２は、ＨＴＴＰレスポンスのボディに含まれる文字列の類似度が所定の閾値以上である応答メッセージを同等であると判断する。
【００６１】
パラメータ解析部１４３は、検証メッセージ記憶部１２３を参照して、検証装置１００とサーバ装置２３１，２３２との間で送信されたメッセージに含まれるパラメータを、検証の過程で解析する（動的解析）。これは、パラメータ解析部１３２の静的解析において全ての状況依存パラメータを特定できなかった可能性を考慮して行われる。
【００６２】
すなわち、サーバ装置２３１，２３２から受信された一の応答メッセージが、これに対応する過去の応答メッセージと同等でないと判断されると、パラメータ解析部１４３は、要求メッセージに含まれるパラメータの値の書換漏れがその原因であると仮定する。この仮定のもと、パラメータ解析部１４３は、上記の一の応答メッセージの前に送信された要求メッセージに含まれるパラメータを状況依存パラメータと推定し（状況依存パラメータを追加し）、パラメータ情報記憶部１２２に記憶された解析結果を更新する。
【００６３】
状況依存パラメータが追加された後は、通信再現部１４１によるサーバ装置２３１，２３２へのアクセスが再度行われる。状況依存パラメータを追加してもなお、サーバ装置２３１，２３２から受信された応答メッセージが過去の応答メッセージと同等にならない場合、例えば、パラメータ解析部１４３は、サーバ装置２３１，２３２に異常があると判断する。すなわち、クライアント装置２１１，２１２から見たサーバ装置２３１，２３２の動作が、サーバ装置２２１，２２２と同等にならないと判断される。
【００６４】
ただし、検証部１４０は、サーバ装置２２１，２２２の動作とサーバ装置２３１，２３２の動作の同等性を評価する前に、状況依存パラメータを先に確定させることもできる。例えば、検証部１４０は、サーバ装置２２１，２２２と同一のソフトウェアを実行させた状態のサーバ装置２３１，２３２に要求メッセージを送信する。検証部１４０は、このとき受信される全ての応答メッセージが過去にサーバ装置２２１，２２２から送信されたものと同等になるまで、状況依存パラメータと推定されるパラメータを追加していく。その後、検証部１４０は、サーバ装置２２１，２２２と異なるソフトウェアを実行させた状態のサーバ装置２３１，２３２に要求メッセージを送信して、動作の同等性を評価する。
【００６５】
表示制御部１５０は、検証部１４０の検証結果をディスプレイ１１１に表示させる。
なお、第２の実施の形態では、検証装置１００が学習部１３０と検証部１４０の両方を備えているとした。すなわち、同一の物理マシンが、状況依存パラメータの静的解析とサーバ装置２３１，２３２の検証の両方を行うこととした。しかし、状況依存パラメータの静的解析とサーバ装置２３１，２３２の検証を、異なる物理マシンが行ってもよい。その場合、例えば、一方の物理マシンが行ったパラメータの静的解析の結果を、サーバ装置２３１，２３２を検証する他方の物理マシンに通知するようにする。
【００６６】
図６は、メッセージテーブルの例を示す図である。
メッセージテーブル１２４は、現用系のサーバ装置２２１，２２２が送信または受信したメッセージについての情報を登録したテーブルであり、メッセージ記憶部１２１に記憶される。メッセージテーブル１２４は、メッセージ番号、時刻、送信元アドレス、宛先アドレス、メソッドまたはコード、パスおよび複数のパラメータの項目を含む。なお、検証系のサーバ装置２３１，２３２が送信または受信したメッセージについて、検証メッセージ記憶部１２３にメッセージテーブル１２４と同様の構造のテーブルが記憶される。
【００６７】
メッセージ番号は、メッセージを識別する識別子である。メッセージ番号は、例えば、送信タイミングの古い順にキャプチャ部１３１によって付与される。時刻の項目には、メッセージを含むパケットが検証装置１００においてキャプチャされた時刻が登録される。送信元アドレスの項目には、メッセージの送信元の識別子、例えば、メッセージを含むパケットの送信元ＩＰアドレスが登録される。宛先アドレスの項目には、メッセージの宛先の識別子、例えば、メッセージを含むパケットの宛先ＩＰアドレスが登録される。
【００６８】
メソッドは、ＨＴＴＰリクエストのヘッダで指定されるＧＥＴやＰＯＳＴなど、要求メッセージの種類を示す。ＰＯＳＴメソッドは、主にユーザからフォームに入力されたデータを送信するときに用いられ、ＧＥＴメソッドは、主にそのような入力されたデータが存在しないときに用いられる。コードは、ＨＴＴＰステータスコードなど、応答メッセージの種類を示す。応答メッセージに含まれるコードを見ることで、要求メッセージがサーバ装置２２１，２２２によって正常に処理されたか確認することができる。
【００６９】
パスの項目には、ＨＴＴＰリクエストのヘッダに記載されたＵＲＬなど、サーバ装置２２１，２２２に要求されたＷｅｂリソース（例えば、Ｗｅｂページ）の識別子が登録される。各パラメータの項目には、メッセージに含まれる一のパラメータのパラメータ名とその値の組が登録される。メッセージの中には、パラメータを含まないものや、パラメータを１つのみ含むものや、２以上のパラメータを含むものが存在し得る。
【００７０】
図７は、パラメータ検出テーブルの例を示す図である。
パラメータ検出テーブル１２５は、パラメータ解析部１３２がパラメータの静的解析を行う過程で生成され、パラメータ情報記憶部１２２に記憶される。パラメータ検出テーブル１２５は、クライアントアドレス、パラメータ名および値の項目を含む。
【００７１】
クライアントアドレスは、要求メッセージを送信したクライアント装置、または、応答メッセージの宛先となるクライアント装置のアドレス（例えば、ＩＰアドレス）である。このクライアントアドレスは、要求メッセージについてはメッセージテーブル１２４の送信元アドレスに相当し、応答メッセージについてはメッセージテーブル１２４の宛先アドレスに相当する。パラメータ名の項目には、メッセージに記載されたパラメータの識別子が登録される。値の項目には、メッセージに記載されたパラメータの値が登録される。
【００７２】
図８は、解析結果テーブルの例を示す図である。
解析結果テーブル１２６は、パラメータ情報記憶部１２２に記憶される。解析結果テーブル１２６は、判定結果、パラメータ名および書換方法の項目を含む。
【００７３】
判定結果の項目には、「依存」または「非依存」が記載される。「依存」は、パラメータが、サーバ装置２３１，２３２を検証する際に値を書き換えるべき状況依存パラメータであることを示す。「非依存」は、パラメータが、サーバ装置２３１，２３２を検証する際に値を書き換えなくてよい状況非依存パラメータであることを示す。
【００７４】
パラメータ名は、パラメータ検出テーブル１２５に登録されるものと同様である。書換方法の項目には、検証時に状況依存パラメータの値を求める方法が記載される。状況非依存パラメータについては、書換方法は記載されない。書換方法としては、例えば、状況依存パラメータを含む要求メッセージの直前にサーバ装置２３１，２３２から受信された応答メッセージの中から、特定のタグを探し、そのタグに記載された値を状況依存パラメータの値として用いる方法が考えられる。これにより、検証装置１００とサーバ装置２３１，２３２との間の通信の文脈に応じた適切な値が状況依存パラメータに設定される。
【００７５】
なお、解析結果テーブル１２６には、メッセージテーブル１２４に現れる全てのパラメータが登録されるとは限らない。パラメータ解析部１３２は、静的解析において状況依存パラメータとも状況非依存パラメータとも断定できないパラメータについては、解析結果テーブル１２６に登録しない。その場合、通信再現部１４１は、状況依存パラメータか状況非依存パラメータか確定していないパラメータを、最初は状況非依存パラメータとして取り扱う。ただし、パラメータ解析部１４３の動的解析によって、そのようなパラメータの一部または全部が状況依存パラメータであると推定されることがある。
【００７６】
次に、学習部１３０および検証部１４０の処理手順を説明する。
図９は、パラメータ静的解析の手順例を示すフローチャートである。
（Ｓ１０）パラメータ解析部１３２は、メッセージテーブル１２４からメッセージを１つ選択する。原則として、メッセージはメッセージ番号の小さい順に選択される。
【００７７】
（Ｓ１１）パラメータ解析部１３２は、選択したメッセージに少なくとも１つのパラメータが含まれているか判断する。メッセージに少なくとも１つのパラメータが含まれている場合、パラメータ毎に以下のステップＳ１２〜Ｓ１８の処理が行われる。１つのパラメータも含まれていない場合、ステップＳ１９の処理に進む。
【００７８】
（Ｓ１２）パラメータ解析部１３２は、選択したメッセージのクライアントアドレス（対象クライアントアドレス）と当該メッセージに含まれるパラメータのパラメータ名（対象パラメータ名）との組が、パラメータ検出テーブル１２５に既に登録されているか判断する。当該組がパラメータ検出テーブル１２５に既に登録されている場合、ステップＳ１４の処理に進み、未だ登録されていない場合、ステップＳ１３の処理に進む。
【００７９】
（Ｓ１３）パラメータ解析部１３２は、パラメータ検出テーブル１２５に、対象クライアントアドレスと、対象パラメータ名と、選択したメッセージにおいて設定されたパラメータの値（対象パラメータ値）とを対応付けて登録する。
【００８０】
（Ｓ１４）パラメータ解析部１３２は、パラメータ検出テーブル１２５から、クライアントアドレスとパラメータ名の組が、対象クライアントアドレスと対象パラメータ名の組と一致し、値が対象パラメータ値と異なるエントリを検索する。該当するエントリがある場合はステップＳ１５の処理に進み、ない場合はステップＳ１７の処理に進む。
【００８１】
（Ｓ１５）パラメータ解析部１３２は、対象パラメータ名が示すパラメータを、状況依存パラメータと判定し、判定結果と対応付けて解析結果テーブル１２６に登録する。
（Ｓ１６）パラメータ解析部１３２は、選択したメッセージの１つ前の応答メッセージから、対象パラメータ名を指定して値を設定する文（例えば、ＨＴＭＬのタグ）を検索する。そして、パラメータ解析部１３２は、検索された文の中で値を設定している箇所を特定し、当該箇所から値を抽出する方法を書換方法として解析結果テーブル１２６に登録する。その後、ステップＳ１９の処理に進む。
【００８２】
（Ｓ１７）パラメータ解析部１３２は、パラメータ検出テーブル１２５から、パラメータ名と値の組が、対象パラメータ名と対象パラメータ値の組と一致し、クライアントアドレスが対象クライアントアドレスと異なるエントリを検索する。該当するエントリがある場合はステップＳ１８の処理に進み、ない場合はステップＳ１９の処理に進む。
【００８３】
（Ｓ１８）パラメータ解析部１３２は、対象パラメータ名が示すパラメータを、状況非依存パラメータと判定し、判定結果と対応付けて解析結果テーブル１２６に登録する。
（Ｓ１９）パラメータ解析部１３２は、メッセージテーブル１２４に未選択のメッセージが残っているか判断する。未選択のメッセージがある場合はステップＳ１０の処理に進み、次のメッセージ（例えば、１つ大きい番号のメッセージ）を処理する。全てのメッセージを選択した場合はパラメータの静的解析を終了する。
【００８４】
このように、パラメータ解析部１３２は、同一のクライアント装置が送信または受信した異なるメッセージにおいて、異なる値が設定されていたパラメータを、状況依存パラメータと判定する。同一のクライアント装置が同じパラメータに対して異なる値を設定した場合、当該パラメータはセッションなどの通信状況に依存する可能性が高いためである。また、パラメータ解析部１３２は、異なるクライアント装置が送信または受信した異なるメッセージにおいて、同じ値が設定されていたパラメータを、状況非依存パラメータと判定する。異なるクライアント装置が一のパラメータに対して同じ値を設定した場合、当該パラメータはセッションなどの通信状況に依存しない可能性が高いためである。
【００８５】
ただし、パラメータ解析部１３２は、状況依存パラメータや状況非依存パラメータを判定するにあたり、パラメータ名の同一性に加えて、メソッドまたはコードの同一性やパスの同一性を要求してもよい。これにより、例えば、パスの異なるＷｅｂページの間では意味の異なるパラメータに対して同一のパラメータ名が使用される可能性があっても、このような意味の異なるパラメータを明確に区別することができる。その場合、パラメータ検出テーブル１２５に、メソッドまたはコードの項目やパスの項目を追加すればよい。
【００８６】
図１０は、サーバ検証の手順例を示すフローチャートである。
（Ｓ２０）通信再現部１４１は、メッセージ記憶部１２１から、送信元アドレスと宛先アドレスが同一のメッセージ（あるクライアント装置とあるサーバ装置との間で送信されたメッセージ）のリストを抽出する。リスト内では、複数のメッセージが送信タイミングの古い順に（例えば、メッセージ番号の小さい順に）並べられる。
【００８７】
（Ｓ２１）通信再現部１４１は、検証系のサーバ装置を１つ選択する。そして、通信再現部１４１は、リストから送信タイミングの古い順に要求メッセージを１つずつ選択し、その検証系のサーバ装置に送信していく。次の要求メッセージは、前の要求メッセージに対する応答メッセージを受信してから送信する。通信再現部１４１は、検証系のサーバ装置に送信した要求メッセージおよび検証系のサーバ装置から受信した応答メッセージ（または、各メッセージの一部の情報）を、検証メッセージ記憶部１２３に格納する。
【００８８】
要求メッセージを送信するにあたり、通信再現部１４１は、解析結果テーブル１２６を参照して、送信する要求メッセージに状況依存パラメータが含まれているか判断する。状況依存パラメータが含まれている場合、通信再現部１４１は、解析結果テーブル１２６に登録された書換方法に従ってその状況依存パラメータの値を書き換え、パラメータ書換後の要求メッセージを検証系のサーバ装置に送信する。例えば、通信再現部１４１は、直前に検証系のサーバ装置から受信した応答メッセージの中から状況依存パラメータの値を抽出し、送信しようとする要求メッセージの状況依存パラメータにその値を設定する。
【００８９】
（Ｓ２２）応答比較部１４２は、検証系のサーバ装置から受信された応答メッセージを１つ選択する。応答メッセージは受信タイミングの古い順に選択される。
（Ｓ２３）応答比較部１４２は、ステップＳ２０のリストの中から、選択した検証系の応答メッセージに対応する現用系の応答メッセージを特定し、検証系と現用系の応答メッセージを比較する。そして、応答比較部１４２は、２つの応答メッセージが同等であるか判断する。例えば、応答比較部１４２は、ＨＴＴＰステータスコードが同じであれば同等と判断し、異なれば同等でないと判断する。２つの応答メッセージが同等の場合はステップＳ２４の処理に進み、同等でない場合はステップＳ２５の処理に進む。
【００９０】
（Ｓ２４）応答比較部１４２は、検証系のサーバ装置から受信された応答メッセージのうち、ステップＳ２２で未選択のものが残っているか判断する。未選択のものがある場合はステップＳ２２の処理に進み、全て選択した場合はサーバ検証を終了する。後者の場合、例えば、表示制御部１５０が、検証系のサーバ装置の動作が現用系のサーバ装置２２１，２２２と同等である旨の検証結果をディスプレイ１１１に表示させる。
【００９１】
（Ｓ２５）パラメータ解析部１４３は、検証メッセージ記憶部１２３から、ステップＳ２２で選択した応答メッセージを受信する直前に検証系のサーバ装置に対して送信された要求メッセージを検索する。そして、パラメータ解析部１４３は、検索された要求メッセージに含まれるパラメータを確認する。この要求メッセージは、パラメータを１つも含まないこともあるし、２以上のパラメータを含むこともある。
【００９２】
（Ｓ２６）パラメータ解析部１４３は、ステップＳ２５で確認したパラメータの集合の中に、状況依存か状況非依存か判定されていないパラメータ（解析結果テーブル１２６に登録されていないもの）があるか判断する。未判定のものがある場合はステップＳ２７の処理に進み、未判定のものがない場合はステップＳ２９の処理に進む。
【００９３】
（Ｓ２７）パラメータ解析部１４３は、未判定のパラメータを状況依存パラメータと推定し、解析結果テーブル１２６に判定結果と対応付けて登録する。未判定のパラメータが２つ以上ある場合、パラメータ解析部１４３は、全ての未判定のパラメータを状況依存パラメータと推定してもよいし、任意の１つのみ状況依存パラメータと推定してもよい。
【００９４】
（Ｓ２８）パラメータ解析部１４３は、ステップＳ２５で検索された要求メッセージの直前に検証系のサーバ装置から受信された応答メッセージを検索する。そして、パラメータ解析部１４３は、検索された応答メッセージから、状況依存パラメータと推定したパラメータの値を設定する文を探して値の書換方法を決定し、解析結果テーブル１２６に登録する。その後、ステップＳ２１の処理に進み、通信再現部１４１が、更新された解析結果テーブル１２６に基づいて検証系のサーバ装置との通信を再度行う。
【００９５】
（Ｓ２９）表示制御部１５０は、検証系のサーバ装置の動作が現用系のサーバ装置２２１，２２２と異なる旨の検証結果（エラー）をディスプレイ１１１に表示させる。
なお、検証系と現用系の応答メッセージの比較（Ｓ２３）は、検証装置１００と検証系のサーバ装置との間の通信（Ｓ２１）が完了してから開始してもよいし、完了する前に開始してもよい。後者の場合、ある検証系と応答メッセージが現用系と同等でないと判断されると、その時点で検証装置１００と検証系のサーバ装置との通信を打ち切ってもよい。
【００９６】
図１１は、検証メッセージの例を示す図である。
ここでは、クライアント装置２１１とサーバ装置２２１との間でメッセージ＃１〜＃６が送信されたとする。メッセージ＃１は、要求メッセージである。メッセージ＃２は、コードが２００番（正常）の応答メッセージである。メッセージ＃３は、要求メッセージであり、ｐａｒａ１＝ａａａを含む。メッセージ＃４は、コードが２００番の応答メッセージであり、ｐａｒａ２＝ｂｂｂを含む。メッセージ＃５は、要求メッセージであり、ｐａｒａ１＝ａａａとｐａｒａ２＝ｂｂｂを含む。メッセージ＃６は、コードが２００番の応答メッセージである。また、パラメータ解析部１３２の静的解析によって、ｐａｒａ１が状況非依存パラメータと判定され、ｐａｒａ２が未判定であるとする。
【００９７】
メッセージ＃１〜＃６を利用してサーバ装置２３１を検証する場合、通信再現部１４１は、１回目ではパラメータの値を変換せずに要求メッセージをサーバ装置２３１に送信することになる。一例として、通信再現部１４１は、メッセージ＃１をサーバ装置２３１に送信し、コードが２００番のメッセージ＃２を受信する。また、通信再現部１４１は、ｐａｒａ１＝ａａａを含むメッセージ＃３をサーバ装置２３１に送信し、ｐａｒａ２＝ｃｃｃを含みコードが２００番のメッセージ＃４ａを受信する。また、通信再現部１４１は、ｐａｒａ１＝ａａａとｐａｒａ２＝ｂｂｂを含むメッセージ＃５をサーバ装置２３１に送信し、コードが５００番（エラー）のメッセージ＃６ａを受信する。
【００９８】
メッセージ＃１に対する応答メッセージは、コードが現用系と検証系とで同じであり同等と評価し得る。メッセージ＃３に対する応答メッセージも、コードが現用系と検証系とで同じであり同等と評価し得る。一方、メッセージ＃５に対する応答メッセージは、コードが現用系と検証系とで異なり同等とは言えない（正常とエラー）。
【００９９】
そこで、パラメータ解析部１４３は、エラーとなったメッセージ＃６ａの直前にサーバ装置２３１に送信されたメッセージ＃５から未判定のｐａｒａ２を抽出し、ｐａｒａ２を状況依存パラメータであると推定する。また、パラメータ解析部１４３は、メッセージ＃５の直前にサーバ装置２３１から受信されたメッセージ＃４ａから、状況依存パラメータの値の書換方法を決定する。ここでは、パラメータ解析部１４３は、メッセージ＃４ａに含まれるｐａｒａ２の値を、メッセージ＃５で使用すべきであったと判断する。
【０１００】
すると、通信再現部１４１は、２回目ではｐａｒａ２の値を変換しつつ要求メッセージをサーバ装置２３１に送信することになる。一例として、通信再現部１４１は、メッセージ＃１をサーバ装置２３１に送信し、コードが２００番のメッセージ＃２を受信する。また、通信再現部１４１は、ｐａｒａ１＝ａａａを含むメッセージ＃３をサーバ装置２３１に送信し、ｐａｒａ２＝ｄｄｄを含みコードが２００番のメッセージ＃４ｂを受信する。また、通信再現部１４１は、ｐａｒａ１＝ａａａとｐａｒａ２＝ｄｄｄを含むメッセージ＃５ｂをサーバ装置２３１に送信し、コードが２００番のメッセージ＃６ａを受信する。
【０１０１】
２回目の検証系の応答メッセージであるメッセージ＃２，＃４ｂ，＃６は、現用系のメッセージ＃２，＃４，＃６とコードが同じであり同等と評価し得る。このように、パラメータ解析部１３２の静的解析において未判定となったｐａｒａ２が、パラメータ解析部１４３の動的解析によって状況依存パラメータと推定される。これにより、セッション依存やサーバ装置依存のパラメータの値が適切に書き換えられていないために生じる応答メッセージの不一致を、検証系のサーバ装置との通信の過程で除去することができる。
【０１０２】
次に、パラメータ解析部１３２が行う静的解析の変形例を説明する。上記では、メッセージ間でパラメータ名とその値を比較するとき、メッセージ番号の小さいものから優先的に比較を行った。以下に説明する変形例では、上記と異なる優先順位で比較を行う。
【０１０３】
図１２は、メッセージの選択方法の第１の例を示す図である。
パラメータ解析部１３２は、メッセージテーブル１２４に登録されたメッセージの中から、応答メッセージよりも要求メッセージを優先的に選択して、クライアントアドレスとパラメータ名と値の組を抽出してもよい。また、パラメータ解析部１３２は、要求メッセージのみから、クライアントアドレスとパラメータ名と値の組を抽出してもよい。
【０１０４】
例えば、パラメータ解析部１３２は、番号＝１の要求メッセージからｖｅｒｓｉｏｎ＝１．０を抽出してパラメータ検出テーブル１２５に登録する。次に、パラメータ解析部１３２は、番号＝２の応答メッセージをスキップし、番号＝３の要求メッセージからａｕｔｈ＿ｔｏｋｅｎ＝０ｆａ５とｕｓｅｒ＝Ｔａｒｏを抽出してパラメータ検出テーブル１２５に登録する。次に、パラメータ解析部１３２は、番号＝４の応答メッセージをスキップし、番号＝５の要求メッセージからｖｅｒｓｉｏｎ＝１．０を抽出する。クライアントアドレスとパラメータ名と値が既出のものと同じため、パラメータ解析部１３２は、ここではｖｅｒｓｉｏｎを状況依存パラメータとも状況非依存パラメータとも判定しない。
【０１０５】
次に、パラメータ解析部１３２は、番号＝６の応答メッセージをスキップし、番号＝７の要求メッセージからａｕｔｈ＿ｔｏｋｅｎ＝３ｂ２ｃとｕｓｅｒ＝Ｔａｒｏを抽出する。ａｕｔｈ＿ｔｏｋｅｎについては、クライアントアドレスとパラメータ名が既出のものと同じ一方、値が既出のものと異なる。よって、パラメータ解析部１３２は、ａｕｔｈ＿ｔｏｋｅｎを状況依存パラメータと判定する。ｕｓｅｒについては、パラメータ解析部１３２は、ここでは状況依存パラメータとも状況非依存パラメータとも判定しない。
【０１０６】
次に、パラメータ解析部１３２は、番号＝８の応答メッセージをスキップし、番号＝９の要求メッセージからｖｅｒｓｉｏｎ＝１．０を抽出する。パラメータ名と値が既出のものと同じ一方、クライアントアドレスが既出のものと異なるため、パラメータ解析部１３２はｖｅｒｓｉｏｎを状況非依存パラメータと判定する。次に、パラメータ解析部１３２は、番号＝１０の応答メッセージをスキップし、番号＝１１の要求メッセージからａｕｔｈ＿ｔｏｋｅｎ＝ｄ９７ｅとｕｓｅｒ＝Ｊｉｒｏを抽出する。ｕｓｅｒについては、パラメータ解析部１３２は、状況依存パラメータとも状況非依存パラメータとも判定しない。
【０１０７】
このように、応答メッセージをスキップすることで、処理するメッセージの数を減らすことができる。また、要求メッセージに含まれるパラメータの数は、応答メッセージに含まれるパラメータの数よりも少ないことが多いため、パラメータ同士の比較回数を減らすことができる。一方で、サーバ装置２３１，２３２に要求メッセージを送信するときに値を書き換えるべきパラメータを検出するという観点からは、応答メッセージよりも要求メッセージに含まれるパラメータの方が重要となる。そのため、要求メッセージを優先的に選択することで、パラメータの静的解析を効率的に行うことができる。
【０１０８】
なお、パラメータ解析部１３２は、要求メッセージを優先的に処理した後、更に応答メッセージを処理してもよい。このとき、パラメータ解析部１３２は、要求メッセージを処理し終えた時点でユーザに静的解析を継続するか否か選択させ、ユーザが静的解析を継続することを選択した場合、更に応答メッセージを処理するようにしてもよい。また、パラメータ解析部１３２は、静的解析を開始してから要求メッセージの処理が完了するまでの経過時間が閾値以下であるとき、続けて応答メッセージを処理するようにしてもよい。また、パラメータ解析部１３２は、静的解析を開始してからの経過時間が閾値に達するまでメッセージを選択し続けるようにしてもよい。これにより、処理時間が長くなり過ぎない範囲で、状況依存パラメータの判定精度を向上させることができる。
【０１０９】
次に、更に他のメッセージの選択方法を説明する。
図１３は、パラメータ静的解析の他の手順例を示すフローチャートである。
（Ｓ３０）パラメータ解析部１３２は、メッセージテーブル１２４に登録されたメッセージの集合を、時間順序を維持して複数のブロックに分割する。例えば、パラメータ解析部１３２は、１ブロック当たりのメッセージ数（所定数）を予め決めておき、送信タイミングの古い方から順に所定数ずつメッセージを区切っていく。
【０１１０】
（Ｓ３１）パラメータ解析部１３２は、ブロック番号Ｎを１に初期化する。
（Ｓ３２）パラメータ解析部１３２は、時間順序を維持したブロック列の中から、上からＮ番目（送信タイミングの古い方からＮ番目）のブロックを選択する。
【０１１１】
（Ｓ３３）パラメータ解析部１３２は、ステップＳ３２で選択したブロック内で、図９に示したパラメータ静的解析を行う。例えば、パラメータ解析部１３２は、選択したブロック内で送信タイミングの古い方から順にメッセージを選択し、抽出したクライアントアドレスとパラメータ名と値をパラメータ検出テーブル１２５に登録する。
【０１１２】
（Ｓ３４）パラメータ解析部１３２は、ステップＳ３２または後述するステップＳ３５で未だ選択していないブロックが残っているか判断する。未選択のブロックがある場合はステップＳ３５の処理に進み、ない場合はパラメータ静的解析を終了する。
【０１１３】
（Ｓ３５）パラメータ解析部１３２は、時間順序を維持したブロック列の中から、下からＮ番目（送信タイミングの新しい方からＮ番目）のブロックを選択する。
（Ｓ３６）パラメータ解析部１３２は、ステップＳ３５で選択したブロック内で、図９に示したパラメータ静的解析を行う。例えば、パラメータ解析部１３２は、選択したブロック内で送信タイミングの古い方から順にメッセージを選択し、抽出したクライアントアドレスとパラメータ名と値をパラメータ検出テーブル１２５に登録する。
【０１１４】
（Ｓ３７）パラメータ解析部１３２は、ステップＳ３２またはステップＳ３５で未だ選択していないブロックが残っているか判断する。未選択のブロックがある場合はステップＳ３８の処理に進み、ない場合はパラメータ静的解析を終了する。
【０１１５】
（Ｓ３８）パラメータ解析部１３２は、ブロック番号Ｎをインクリメントして（値を１だけ加算して）ステップＳ３２の処理に進む。なお、ステップＳ３３，Ｓ３６のパラメータ解析を繰り返し行う間、パラメータ検出テーブル１２５は初期化せずに使い続ける。すなわち、あるブロックにおいて抽出されたクライアントアドレスとパラメータ名と値の組は、他のブロックにおいて抽出されたものと比較されることになる。
【０１１６】
図１４は、メッセージの選択方法の第２の例を示す図である。
ここでは、１００００個のメッセージがメッセージテーブル１２４に登録されており、それぞれ５個のメッセージを含む２０００個のブロックに分割されている。まず、パラメータ解析部１３２は、上から１番目のブロックに属するメッセージ＃１〜＃５を処理する。次に、パラメータ解析部１３２は、下から１番目のブロックに属するメッセージ＃９９９６〜＃１００００を処理する。次に、パラメータ解析部１３２は、上から２番目のブロックに属するメッセージ＃６〜＃１０を処理する。次に、パラメータ解析部１３２は、下から２番目のブロックに属するメッセージ＃９９９１〜＃９９９５を処理する。
【０１１７】
このように、パラメータ解析部１３２は、時間的に近いメッセージの間でのパラメータの比較よりも、時間的に離れたメッセージの間でのパラメータの比較を優先的に行うようにしてもよい。ここで、セッション依存のパラメータの値は、同じセッションに属するメッセージの間では原則として同じになる。また、同じクライアント装置が送信した送信タイミングの近いメッセージは、同じセッションに属する可能性が高い。そこで、パラメータ解析部１３２は、上記のような順序でメッセージを選択することで、異なるセッションに属するメッセージの間でのパラメータの比較を早い段階で行うことができ、セッション依存のパラメータを効率的に検出することができるようになる。
【０１１８】
第２の実施の形態の情報処理システムによれば、メッセージに含まれ得るパラメータの中から、セッション依存のパラメータやサーバ装置依存のパラメータなどの状況依存パラメータを自動的に判定することができる。よって、クライアント装置２１１，２１２と現用系のサーバ装置２２１，２２２との間で送信されたメッセージを利用して、検証系のサーバ装置２３１，２３２を検証するときに、パラメータの値の不備が原因で検証が正しく行えなくなることを抑制できる。また、値を書き換えるべき状況依存パラメータをユーザが事前に定義しておかなくてもよいため、ユーザはサーバ装置２２１，２２２，２３１，２３２で実行されるソフトウェアの詳細を知らなくてもよく、ユーザの負担が軽減される。
【０１１９】
［第３の実施の形態］
第３の実施の形態を説明する。前述の第２の実施の形態との違いを中心に説明し、第２の実施の形態と同様の事項については説明を省略する。
【０１２０】
第２の実施の形態では、検証装置１００、クライアント装置２１２，２１２およびサーバ装置２２１，２２２，２３１，２３２は、それぞれネットワークに接続された別個の物理マシンであった。しかし、上記のコンピュータのうちの２つ以上を仮想化し、その２つ以上の仮想マシンを同一の物理マシン上で動作させることも可能である。第３の実施の形態では、検証装置１００とサーバ装置２２１（現用系）とサーバ装置２３１（検証系）に相当する仮想マシンを、同一の物理マシン上で動作させる例を説明する。
【０１２１】
図１５は、サーバ装置の他の機能例を示すブロック図である。
サーバ装置３００は、仮想マシン３１０，３２０，３３０およびハイパーバイザ３４０を有する。仮想マシン３１０，３２０，３３０およびハイパーバイザ３４０は、例えば、ＣＰＵおよびＲＡＭを利用して動作する。仮想マシン３１０は第２の実施の形態のサーバ装置２２１に対応し、仮想マシン３２０は第２の実施の形態のサーバ装置２３１に対応する。仮想マシン３３０は、第２の実施の形態の検証装置１００に対応する。
【０１２２】
仮想マシン３１０上では、ＯＳおよびサーバソフトウェア３１１が実行される。サーバソフトウェア３１１は、サーバ装置２２１で実行されていたものと同じでもよい。仮想マシン３２０上では、ＯＳおよびサーバソフトウェア３２１が実行される。サーバソフトウェア３２１は、サーバ装置２３１で実行されていたものと同じでもよい。仮想マシン３３０上では、ＯＳおよび検証ソフトウェア３３１が実行される。検証ソフトウェア３３１は、例えば、学習部１３０および検証部１４０に相当するモジュールを含む。
【０１２３】
ハイパーバイザ３４０は、複数の仮想マシンが並行に動作するよう制御する。ハイパーバイザ３４０は、サーバ装置３００が備えるＣＰＵクロック数やＲＡＭ領域などのリソースを仮想マシン３１０，３２０，３３０に割り振る。各仮想マシン上で動作するＯＳは、ハイパーバイザ３４０から割り振られたリソースの範囲内で、当該仮想マシン上のアプリケーションソフトウェアが実行されるよう制御することになる。
【０１２４】
ハイパーバイザ３４０は、仮想スイッチ３４１を有する。仮想スイッチ３４１は、サーバ装置３００が備える通信インタフェースの帯域リソースを管理する。また、仮想スイッチ３４１は、仮想マシン３１０，３２０，３３０の間や、サーバ装置３００の外部の通信装置と仮想マシン３１０，３２０，３３０との間で、メッセージを中継する。例えば、仮想スイッチ３４１は、クライアント装置２１１，２１２と仮想マシン３１０との間でメッセージを中継し、当該メッセージの複製を仮想マシン３３０に出力する。また、仮想スイッチ３４１は、仮想マシン３２０と仮想マシン３３０の間でメッセージを中継する。
【０１２５】
第３の実施の形態の情報処理システムによれば、第２の実施の形態と同様の効果が得られる。更に、第３の実施の形態では、コンピュータの仮想化技術を用いて、機能の異なる複数のコンピュータを同一の物理マシンに集約することができ、情報処理システムの管理コストを抑制できる。また、仮想マシンを利用して、サーバソフトウェアが送信または受信したメッセージの収集やサーバソフトウェアの検証を効率的に実行できる。
【０１２６】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現することができる。また、第２の実施の形態の情報処理は、検証装置１００にプログラムを実行させることで実現することができ、第３の実施の形態の情報処理は、サーバ装置３００にプログラムを実行させることで実現することができる。
【０１２７】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムを複製して（インストールして）実行してもよい。
【符号の説明】
【０１２８】
１０  情報処理装置
１１  記憶部
１２  決定部
２１  クライアント
２２，２３  サーバ
【図１】
2014191673.tif 000003
【図２】
2014191673.tif 000004
【図３】
2014191673.tif 000005
【図４】
2014191673.tif 000006
【図５】
2014191673.tif 000007
【図６】
2014191673.tif 000008
【図７】
2014191673.tif 000009
【図８】
2014191673.tif 000010
【図９】
2014191673.tif 000011
【図１０】
2014191673.tif 000012
【図１１】
2014191673.tif 000013
【図１２】
2014191673.tif 000014
【図１３】
2014191673.tif 000015
【図１４】
2014191673.tif 000016
【図１５】
2014191673.tif 000017