(57)【要約】【課題】バグを検出した際のプログラム上のバグ発生箇所の発見時間を短縮すること。【解決手段】クライアント３０２がＨＴＴＰリクエストを送信する。Ｗｅｂサーバ３０１では、ＡＰサーバがリクエスト解析処理（Ｓ１２０１）、ビジネスロジック実行処理（Ｓ１２０２）を実行する。そして、ＪＳＰ展開エンジンによる出力項目展開処理（Ｓ１２０３）、メタ情報挿入エンジンによるアスペクト注入処理（Ｓ１２０４）、ＡＰサーバによるレスポンス生成処理（Ｓ１２０５）を実行する。そして、セッション情報取得エンジンによるセッション情報取得処理（Ｓ１２０６）を実行して、レスポンス生成処理（Ｓ１２０５）により生成されたレスポンスＨＴＭＬにセッション情報を埋め込む。ＡＰサーバは、セッション情報が埋め込まれたレスポンスＨＴＭＬをクライアントに送信するレスポンス送信処理（Ｓ１２０７）を実行する。【選択図】図１２
2010026600.tif 000002
【特許請求の範囲】
【請求項１】
一連のプログラム群を含むＷｅｂアプリケーションがインストールされているＷｅｂサーバを、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信手段、
前記受信手段によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行手段、
前記実行手段によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存手段、
前記実行手段によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成手段、
前記生成手段によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存手段によって前記記憶領域に保存されたセッション情報を挿入する挿入手段、
前記挿入手段によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信手段、
として機能させることを特徴とするＷｅｂアプリケーション検査プログラム。
【請求項２】
前記保存手段は、
前記プログラムに関する出力値を、前記プログラムのつぎに実行されるプログラムに入力されるセッション情報として前記記憶領域に保存することを特徴とする請求項１に記載のＷｅｂアプリケーション検査プログラム。
【請求項３】
前記保存手段は、
前記プログラム中の実行位置を特定する情報を前記プログラムに関する出力値およびその属性とともに前記セッション情報として前記記憶領域に保存することを特徴とする請求項１または２に記載のＷｅｂアプリケーション検査プログラム。
【請求項４】
前記挿入手段は、
前記クライアントのＷｅｂブラウザにおいて前記Ｗｅｂ画面に表示不能な形式で前記セッション情報を前記Ｗｅｂ画面に関するレスポンスに挿入することを特徴とする請求項１〜３のいずれか一つに記載のＷｅｂアプリケーション検査プログラム。
【請求項５】
一連のプログラム群を含むＷｅｂアプリケーションがインストールされているテスト実行装置であって、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信手段と、
前記受信手段によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行手段と、
前記実行手段によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存手段と、
前記実行手段によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成手段と、
前記生成手段によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存手段によって前記記憶領域に保存されたセッション情報を挿入する挿入手段と、
前記挿入手段によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信手段と、
を備えることを特徴とするテスト実行装置。
【請求項６】
一連のプログラム群を含むＷｅｂアプリケーションがインストールされているＷｅｂサーバが、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信工程と、
前記受信工程によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行工程と、
前記実行工程によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存工程と、
前記実行工程によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成工程と、
前記生成工程によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存工程によって前記記憶領域に保存されたセッション情報を挿入する挿入工程と、
前記挿入工程によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信工程と、
を実行することを特徴とするテスト実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＷｅｂサーバにインストールされているＷｅｂアプリケーションを、クライアントがＷｅｂサーバにアクセスすることにより検査するＷｅｂアプリケーション検査プログラム、テスト実行装置、およびテスト実行方法に関する。
【背景技術】
【０００２】
従来、Ｗｅｂアプリケーションのテストとして、Ｗｅｂブラウザに対する操作を繰返し行うことにより、Ｗｅｂアプリケーションが正しく動作するかを確認する手法が一般的に採られている。
【０００３】
この場合、複数の操作の組合せや複数の入力データの組合せによりバグが発生することもあるため、修正の必要な箇所を把握するために、一部のみ異なる操作やデータ入力を行い、他の部分については前回と同様の操作を行うことが必要となっていた。したがって、各テストにおいて、操作手順及び入力データをすべて記録しておくことが必要となるため、再帰テストにおける作業が煩雑なものとなっていた。
【０００４】
このような再帰テストにおける支援装置として、テスト結果の検証を行う際、保存されていたＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルとＷｅｂサーバから受信したＨＴＭＬファイルの内容が一致するか否かの判定をおこなう技術が開示されている（たとえば、下記特許文献１を参照。）。
【０００５】
【特許文献１】特開２００５−２６６９５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、通常、一つのジョブは複数のプログラムから構成されているため、データの異常の発生を検知することができても、当該異常がどの箇所で発生したものであるかを把握することができないという問題があった。
【０００７】
この発明は、上述した従来技術による問題点を解消するため、バグを検出した際のプログラム上のバグ発生箇所の発見時間の短縮化を図ることができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本開示技術では、一連のプログラム群を含むＷｅｂアプリケーションがインストールされているＷｅｂサーバが、前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信し、受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力し、出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存し、出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成し、生成された前記Ｗｅｂ画面に関するレスポンスに、前記記憶領域に保存されたセッション情報を挿入し、前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信することを要件とする。
【０００９】
また、Ｗｅｂサーバにアクセス可能なＷｅｂアプリケーション検査装置が、前記一連の画面遷移仕様が記述されたテスト仕様書データを受け付け、前記リクエストを前記Ｗｅｂサーバに送信した結果、前記Ｗｅｂ画面に関するレスポンスを前記Ｗｅｂサーバから取得し、取得された前記Ｗｅｂ画面に関するレスポンスの中から、前記画面項目に関する出力値と前記セッション情報とを抽出し、抽出された画面項目に関する出力値と前記セッション情報とを、前記Ｗｅｂ画面に関連付けて、前記受付工程によって受け付けられたテスト仕様書データに書き込むことを要件とする。
【発明の効果】
【００１０】
本開示技術によれば、バグを検出した際のプログラム上のバグ発生箇所の発見時間の短縮化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１１】
（本開示技術の概要）
以下に添付図面を参照して、本開示技術の概要を説明する。ＷｅｂサーバにインストールされたＷｅｂアプリケーションのリグレッション（回帰）テストの実行結果に誤りがある場合、実行結果を最終的に表示する画面を呼び出したプログラムのバグにより実行結果に誤りが発生したのか、それ以前のプログラムのバグに影響されて実行結果に誤りが発生したのかがわからない。ここでは、Ｗｅｂアプリケーションの例として、厄年表示プログラムを用いて説明する。
【００１２】
図１は、厄年表示プログラムの画面および処理の遷移を示す画面処理遷移図である。図２は、厄年表示プログラム１００のソースコードを示す説明図である。厄年表示プログラム１００は、利用者が入力した和暦の生年月日から、その人の厄年を計算、表示するＷｅｂアプリケーションである。
【００１３】
図１において、利用者は、Ｗｅｂブラウザを操作してＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）を入力して、そのＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）リクエストをＷｅｂサーバに送信する。Ｗｅｂサーバは、初期画面である生年月日入力画面１０１を生成して、レスポンスとしてクライアントに送信する。これにより、クライアントのＷｅｂブラウザでは、生年月日入力画面１０１に遷移する。
【００１４】
利用者は生年月日入力画面１０１上で元号、年、月、日を選択またはキー入力することで和暦の生年月日を入力し、サブミットボタンを押下する。これにより、和暦の生年月日を含むＨＴＴＰリクエストがＷｅｂサーバに送信される。Ｗｅｂサーバ上で和暦→西暦変換プログラム１０２が実行され、性別入力画面１０３を生成する。性別入力画面１０３はレスポンスとしてクライアントに送信され、Ｗｅｂブラウザ上に表示される。
【００１５】
性別入力画面１０３には、生年月日入力画面１０１で入力された情報が確認用に画面項目として表示され、さらに性別を入力するためのラジオボタン等の入力フォームが配置される。利用者は性別入力画面１０３上で性別を選択またはキー入力し、サブミットボタンを押下する。Ｗｅｂサーバでは厄年計算プログラム１０４が実行され、最終的な計算結果である厄年情報が表示される厄年表示画面１０５を生成する。厄年表示画面１０５はレスポンスとしてクライアントに送信され、Ｗｅｂブラウザ上に表示される。
【００１６】
このような厄年表示プログラム１００においては、画面出力上、性別入力画面１０３までテストをパスし、厄年表示画面１０５で障害を検出したとしても、バグが直前の厄年計算プログラム１０４にあると判断することはできない。通常、障害を検出した画面の直前の処理である厄年計算プログラム１０４にバグがあると考えるのが一般的だが、実際には和暦→西暦変換プログラム１０２にバグが潜んでいる可能性もあり、バグのある場所を特定することは困難である。
【００１７】
図２のソースコード２００を参照すると、下線の行がｂｉｒｔｈｄａｙ変数に影響を与える可能性のある命令であり、バグの可能性がある行である。本開示技術では、このようにバグが潜む位置を高精度に特定することにより、Ｗｅｂアプリケーションのテストに対する信頼性の向上を図る。
【００１８】
＜実施の形態１＞
まず、本開示技術の実施の形態１について説明する。実施の形態１では、バグにより出力される画面をバグ位置として特定する。まず、Ｗｅｂアプリケーション検査システムの概略構成について説明する。
【００１９】
（Ｗｅｂアプリケーション検査システムの概略構成）
図３は、実施の形態１にかかるＷｅｂアプリケーション検査システムの概略構成を示す説明図である。Ｗｅｂアプリケーション検査システム３００は、Ｗｅｂサーバ３０１とクライアント３０２とがインターネットなどのネットワーク３０３により相互に交信可能に接続されている。なお、Ｗｅｂサーバ３０１とクライアント３０２とは、一台のマシンとして構成することとしてもよい。
【００２０】
Ｗｅｂサーバ３０１は、検査対象となるＷｅｂアプリケーションがインストールされているコンピュータ装置である。Ｗｅｂサーバ３０１は、Ｗｅｂアプリケーションのテストを実行する。
【００２１】
クライアント３０２は、Ｗｅｂアプリケーション検査者が利用するコンピュータ装置であり、実施の形態１におけるＷｅｂアプリケーション検査装置に相当する。クライアント３０２は、テスト仕様書データを作成する。作成されたテスト仕様書データは、テスト仕様書ＤＢ（Ｄａｔａｂａｓｅ）３１０に格納される。この作成にあたり、クライアント３０２は、Ｗｅｂサーバ３０１にアクセスすることで、任意の画面遷移仕様のＷｅｂ画面を要求するリクエストをＷｅｂサーバ３０１に送信するとともに、そのレスポンスをＷｅｂサーバ３０１から受信する。そして、そのレスポンスを解析してディスプレイに表示することができる。
【００２２】
（コンピュータ装置のハードウェア構成）
図４は、実施の形態１にかかるコンピュータ装置のハードウェア構成を示すブロック図である。図４において、コンピュータ装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、ディスプレイ４０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０９と、キーボード４１０と、マウス４１１と、スキャナ４１２と、プリンタ４１３と、を備えている。また、各構成部はバス４００によってそれぞれ接続されている。
【００２３】
ここで、ＣＰＵ４０１は、コンピュータ装置の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。
【００２４】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２５】
ディスプレイ４０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ４０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２６】
インターフェース（以下、「Ｉ／Ｆ」と略する。）４０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３０３に接続され、このネットワーク３０３を介して他の装置に接続される。そして、Ｉ／Ｆ４０９は、ネットワーク３０３と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
キーボード４１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様の機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２８】
スキャナ４１２は、画像を光学的に読み取り、コンピュータ装置内に画像データを取り込む。なお、スキャナ４１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ４１３は、画像データや文書データを印刷する。プリンタ４１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２９】
（テスト仕様書データのデータ構造）
つぎに、テスト仕様書データのデータ構造について説明する。Ｗｅｂアプリケーションをテストする際には、まずテスト仕様書データを作成する必要がある。このような、テスト仕様書データを自動的に生成する方法では、一度テスト実施者がＷｅｂアプリケーションを実行させながら、入力情報と出力情報を抽出し、テスト仕様書データに書き込むものである。１回テストを実行しながらテスト仕様書データを作成することから、本テストを「初回テスト」と呼ぶ。
【００３０】
図５は、初回テスト用のテスト仕様書データのデータ構造を示す説明図である。図５では、作成開始前のテスト仕様書データＤ１を示しているため、期待値情報は空欄である。テスト仕様書データＤ１は、Ｗｅｂサーバ３０１にインストールされるＷｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様が記述された電子データであり、具体的には、たとえば、表形式のスプレッドシートなどのマクロファイルにより作成される。
【００３１】
このテスト仕様書データＤ１には、検査対象となるＷｅｂアプリケーションに対し、検査したいテストケースＴＣｉ（ｉ＝１，２，・・・，ｎ）ごとに、一連の画面遷移仕様と期待値情報とが記述される。図５では、例として２つ（ｎ＝２）のテストケースＴＣ１，ＴＣ２が示されている。画面遷移仕様は、手作業で記入しても良いし、その一部または全部を画面遷移図などの設計書情報から機械的に抽出することとしてもよい。
【００３２】
画面遷移仕様は、画面名と操作手順記述とにより特定される。画面名とは、クライアント３０２に表示されるＷｅｂ画面の画面ファイルを特定する名称であり、たとえば、米国サンマイクロシステムズが規定するＪＳＰ（ＪａｖａＳｅｒｖｅｒ  Ｐａｇｅｓ）およびＪａｖａ言語仕様に則る場合、ＪＳＰファイル名のように記述される。上述した厄年表示プログラム１００の場合、生年月日入力画面１０１、性別入力画面１０３、厄年表示画面１０５となる。
【００３３】
図６は、生年月日入力画面１０１の画面例を示す説明図である。図７は、性別入力画面１０３の画面例を示す説明図である。図８は、厄年表示画面１０５の画面例を示す説明図である。
【００３４】
また、操作手順記述は、対応付けられているＷｅｂ画面、すなわち、左隣のセルの画面名により特定されるＷｅｂ画面が表示されている場合のユーザの操作手順をあらわしている。この操作手順記述どおりにＷｅｂ画面に入力情報を与えると、左斜め下のセルの画面名のＷｅｂ画面が表示されることとなる。
【００３５】
たとえば、テストケースＴＣ１において図６に示した生年月日入力画面１０１が表示されている場合、図６に示した年号のプルダウンのうち、「平成」を選択し、年月日の入力欄にそれぞれ、「１３」、「１０」、「２５」を入力して、サブミットボタン（図６中、「性別入力画面１０３へ」のボタン）をクリックすると、図７に示した性別入力画面１０３に遷移する。
【００３６】
一方、期待値情報は、作成中に、ＷｅｂアプリケーションがインストールされているＷｅｂサーバ３０１からのレスポンスに基づいて記述される。あるテストケースＴＣｉについて、期待値情報における空欄のセルがすべて記述されると、そのテストケースＴＣｉに関するテスト仕様書データＤ１は完成する。
【００３７】
図９は、初回テスト済みのテスト仕様書データＤ１を示す説明図である。図９に示した仕様書データＤ１の期待値情報は、正常な値となる。また、図５および図９において、期待値情報中、メタ情報とは、タグクラスとその属性からなる情報である。タグクラスとは、Ｗｅｂアプリケーションのタグが属するクラスである。
【００３８】
属性とは、タグクラスの詳細情報であり、タグクラスに属するタグの属性名（ｎａｍｅ）と属性値（ｐｒｏｐｅｒｔｙ）とを含む。また、呼び出し回数とは、メタ情報の出現回数である。また、期待値とは、タグクラス、属性名、および属性値からなるメタ情報により特定されるタグを実行した場合に出力値として期待される値である。以降この期待値を、「画面項目期待値」と称す。
【００３９】
期待値情報中、セッション情報とは、後述するセッション情報取得エンジンにより取得される情報である。セッション情報の属性とは、セッションにおける属性を示す情報である。セッション情報の期待値とは、セッション時に期待される出力値である。以降この期待値を、「セッション期待値」と称す。
【００４０】
（各コンピュータ装置の詳細な内部構成）
つぎに、各コンピュータ装置の詳細な内部構成について説明する。図１０は、各コンピュータ装置の詳細な内部構成を示すブロック図である。まず、Ｗｅｂサーバ３０１の詳細な内部構成について説明する。
【００４１】
Ｗｅｂサーバ３０１は、ＡＰ（Ａｐｐｌｉｃａｔｉｏｎ）サーバ１０１１とプリプロセッサ１０１２とコンパイラ１０１３とＷｅｂアプリケーション１０１４とメタ情報挿入エンジン１０１７とセッション情報取得エンジン１０１８を有する。
【００４２】
ＡＰサーバ１０１１は、Ｗｅｂアプリケーション１０１４の実行環境となるプログラムであり、プリプロセッサ１０１２とコンパイラ１０１３を有している。ＡＰサーバ１０１１としては、具体的にはＡｐａｃｈｅ  Ｔｏｍｃａｔ等の、Ｊａｖａ言語で記述、コンパイラ１０１３によりコンパイルされたプログラムを実行できるミドルウェアが適用される。
【００４３】
ここで、米国サンマイクロシステムズが規定するＪＳＰおよびＪａｖａ言語仕様に則る場合、プリプロセッサ１０１２としてＪＳＰ展開エンジンを適用することができ、コンパイラ１０１３としてＪａｖａコンパイラを適用することができる。ＪＳＰ展開エンジン１０１２は、ＪＳＰ等のテンプレート記述言語を解釈しＪａｖａ言語及びＪａｖａクラスファイルに翻訳する。
【００４４】
また、ＡＰサーバ１０１１には、検査対象となるＷｅｂアプリケーション１０１４が実装され、ビジネスロジック１０１５とテンプレートファイル１０１６から構成される。Ｗｅｂアプリケーション１０１４はＪａｖａやＪＳＰ等の言語で記述されたプログラム群である。通常はＭＶＣ（Ｍｏｄｅｌ  Ｖｉｅｗ  Ｃｏｎｔｒｏｌｌｅｒ）等のデザインと処理ロジックを分離することが可能なフレームワークにより、クライアント３０２のＷｅｂブラウザからのＨＴＴＰリクエストに応じて、どのビジネスロジック１０１５とテンプレートファイル１０１６が呼び出されるかが決定される。しかし、上述のようなフレームワークを利用しなくても、ビジネスロジック１０１５とテンプレートファイル１０１６への振り分けは可能である。
【００４５】
ビジネスロジック１０１５とは、ビジネス取引などの動作処理を実行するＷｅｂアプリケーション１０１４の論理記述であり、たとえば、『お客様が買い物カゴに品物を入れた時に、在庫確認をするように決めている。』、『送信ボタンを押すと、カード会社に認証をとるようにしている。』といった、各々の業務の流れ方を取り決めた論理記述である。図１および図２に示した厄年表示プログラム１００は、ビジネスロジック１０１５に相当する。
【００４６】
なお、ビジネスロジック１０１５には、入力された検索条件に従う検索を実施したり、会員を認証したりといった処理ロジックが記述される。これらのビジネスロジック１０１５の中には、外部のデータベースにアクセスして情報を参照したり、データベースに対してデータを追加、更新、削除等のデータベース操作を行う論理記述も含まれる。
【００４７】
また、テンプレートファイル１０１６とは、画面デザインと出力項目の表示位置を定義するファイルである。Ｊａｖａを用いる場合、テンプレートファイル１０１６としてＪＳＰファイルを適用することができる。
【００４８】
図１に示した厄年表示プログラム１００を例に挙げて説明すると、生年月日入力画面１０１、性別入力画面１０３、厄年表示画面１０５のＷｅｂブラウザ１０２１上におけるデザインはテンプレートファイル１０１６としてＪＳＰ言語で開発される。また、和暦→西暦変換プログラム１０２および厄年計算プログラム１０４はビジネスロジック１０１５としてＪａｖａ言語で開発される。そして、コンパイラによりコンパイルされた結果がＪａｖａクラスファイルとして保存された状態で実行される。
【００４９】
利用者は最初に生年月日入力画面１０１に対応するテンプレートファイル１０１６のＵＲＬを入力することで、その画面へのアクセスが可能となる。生年月日入力画面１０１ではサブミットボタン押下時の遷移先ＵＲＬが記述されており、この遷移先ＵＲＬは和暦→西暦変換プログラム１０２を呼び出すようＡＰサーバ１０１１（または上述のフレームワーク）に定義されている。
【００５０】
和暦→西暦変換プログラム１０２は、その処理が完了すると次画面である性別入力画面１０３に対応するテンプレートファイル１０１６を指定する。これによりＡＰサーバ１０１１は性別入力画面１０３のＨＴＭＬをＷｅｂブラウザ１０２１に送信する。性別入力画面１０３から厄年計算プログラム１０４を呼び出し、結果として厄年表示画面１０５を表示するのも、同様の手順により実行される。
【００５１】
このように、近年のＷｅｂアプリケーション開発においては、デザイン機能とビジネスロジック機能を分離する手法が一般化しつつある。このため、ビジネスロジック１０１５内で処理された出力項目がＪＳＰファイル１０１６内のカスタムタグで指定された位置に表示されるような構造となる。
【００５２】
また、メタ情報挿入エンジン１０１７は、Ｊａｖａソース断片から、タグクラス、ｎａｍｅ属性の属性値、およびｐｒｏｐｅｒｔｙ属性の属性値からなるメタ情報を特定する。そして、出力項目のコメント文として挿入する。具体的には、ＪＳＰ展開エンジン１０１２が出力するＪａｖａクラスファイルに対してアスペクトを注入することで振る舞いが異なるＪａｖａクラスファイルへの変換を行う。
【００５３】
セッション情報取得エンジン１０１８は、Ｗｅｂサーバ３０１が保有するセッション情報（メモリ構造）について、テストをおこなうのに必要なものだけを画面単位で取得する。具体的には、たとえば、ＡＰサーバ１０１１から呼び出すことができる形式のプログラムとして記述され、Ｗｅｂアプリケーション１０１４が出力したＨＴＭＬ形式のテキスト情報にアクセスして変更するフィルタ処理を加えることができるようになっている。
【００５４】
より具体的には、たとえば、Ｊａｖａ  Ｓｅｒｖｌｅｔ仕様におけるフィルタ等の手段で開発されたＪａｖａ言語のプログラムであり、Ｊａｖａクラスファイルとしてコンパイル済みのものである。ここではフィルタを利用する方法を提示したが、アスペクト指向言語やＤＩ（Ｄｅｐｅｎｄｅｎｃｙ  Ｉｎｊｅｃｔｉｏｎ）コンテナ、フレームワーク等一般的な技術を利用しても同様のことを実現可能である。
【００５５】
つぎに、クライアント３０２の詳細な内部構成について説明する。クライアント３０２は、Ｗｅｂブラウザ１０２１と実行ナビゲータ１０２２とを有する。
【００５６】
Ｗｅｂブラウザ１０２１は、Ｗｅｂサーバ３０１のＷｅｂアプリケーション１０１４に対してＨＴＴＰリクエストを生成して送信したり、Ｗｅｂサーバ３０１からのＨＴＭＬ形式のレスポンスを受信する通信機能と、受信されたレスポンスＨＴＭＬを解析する解析機能と、その解析結果をディスプレイに描画する描画機能とを有するプログラムである。
【００５７】
また、実行ナビゲータ１０２２は、つぎに実行すべき操作手順記述を取得して、Ｗｅｂブラウザ１０２１に渡したり、レスポンスＨＴＭＬから抽出した情報をテスト仕様書データに書き込むためにインストールされたプログラムである。
【００５８】
具体的には、実行ナビゲータ１０２２は、Ｗｅｂブラウザ１０２１を経由して、レスポンスＨＴＭＬを取得する。レスポンスＨＴＭＬを取得する方法は、Ｗｅｂブラウザ１０２１が提供するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を利用する方法、Ｗｅｂブラウザ１０２１のログやキャッシュ等の出力情報を利用する方法、Ｗｅｂサーバ３０１からクライアント３０２に至るネットワーク経路上にプロキシサーバを挿入する方法等、様々な方法が考えられるが、ここではＷｅｂブラウザ１０２１上に配備されたプラグインにより、取得したレスポンスＨＴＭＬを実行ナビゲータ１０２２上に通知する方法を利用する。
【００５９】
実行ナビゲータ１０２２は、レスポンスＨＴＭＬ内のコメント部分を解析する。コメントには、メタ情報ＨＴＭＬコメントとセッションＨＴＭＬコメントの２種類がある。メタ情報ＨＴＭＬコメントは、メタ情報（画面項目のタグクラス名、画面項目の属性）、画面項目期待値に分解される。一方、セッションＨＴＭＬコメントはセッション情報の属性とセッション期待値に分解される。この分解では、「ｓｅｓｓｉｏｎＩｎｆｏ」で始まるＨＴＭＬコメントの「＝」の前と後ろの文字列をそれぞれセッション属性、セッション期待値に割り当てる。
【００６０】
テストケースＴＣｉが複数の画面遷移から構成される場合には、各画面について画面項目期待値とセッション期待値を取得する。通常、Ｗｅｂアプリケーション１０１４のテストを行う際には、Ｗｅｂアプリケーション１０１４の規模にも依るが数百から数千項目テストケースを実施することが一般的である。このようにＷｅｂアプリケーション１０１４の一連の動作を一個のテストケースとしてテスト仕様書ＤＢ３１０に保存していき、Ｗｅｂアプリケーション１０１４の品質を確保するのに十分な数のテストケースを蓄えていく。
【００６１】
また、実行ナビゲータ１０２２は、テスト仕様書ＤＢ３１０からテストケースを順に取得し、Ｗｅｂアプリケーション１０１４を自動実行しながら消化していく。さらに実行ナビゲータ１０２２はテストケース内の初期画面のＵＲＬから操作手順記述に従って画面を遷移させる。画面が遷移するごとに、実行ナビゲータ１０２２はその画面内に存在する画面項目の内容が期待値と一致するかどうかを判定する。
【００６２】
この自動実行時においても、Ｗｅｂアプリケーション１０１４にはメタ情報挿入エンジン１０１７が織り込まれた状態となっており、最新の実行結果を取得することができる。実行ナビゲータ１０２２は、画面項目期待値とこの最新実行結果とを比較することで、自動的な判定を行う。テストケースＴＣｉが複数の画面遷移から構成される場合は、上記手順を繰り返すことで、各テストケースＴＣｉ内のすべての手順が完了するまでテストを実施する。
【００６３】
図１０に示したようなシステム構成において、テストを実施する際の全体概要について説明する。Ｗｅｂアプリケーション１０１４をテストする際には、まずテスト仕様書データＤ１を作成する必要がある。このような、テスト仕様書データＤ１を自動的に生成する方法では、一度テスト実施者がＷｅｂアプリケーション１０１４を実行させながら、メタ情報挿入エンジン１０１７を利用して入力情報と出力情報を抽出し、テスト仕様書データＤ１に書き込むものである。最初に１回手動でテストを実行しながらテスト仕様書データＤ１を作成することから、本テストを「初回テスト」と呼ぶ。
【００６４】
本実施の形態１では、上述した入出力情報に加えてメモリの状態もテスト仕様書データＤ１内に保存しておくことにより、２回目以降のテストにおいて初回テストとの差異がＷｅｂアプリケーション１０１４全体におけるどこで発生したかを特定して、バグの位置を特定する。
【００６５】
初回テストにおいてテスト仕様書データＤ１が作成された状態では、Ｗｅｂアプリケーション１０１４への入力と期待される実行結果（期待値）とが入出力情報としてテスト仕様書データＤ１に書き込まれているので、その情報に基づき自動テストが実行される。この自動テストの方法については、特願２００６−２９４５０２号に開示されている。このテスト仕様書データＤ１が作成された状態で自動的に行われる２回目以降のテストを、本実施の形態では「リグレッションテスト」と呼ぶ。実施の形態１では、実行ナビゲータ１０２２により、この期待値とリグレッションテストの結果とを比較し、その比較結果が変化した場所をバグ位置と特定する。
【００６６】
以下、図１の厄年表示プログラム１００を用いて説明する。厄年表示プログラム１００では、厄年計算プログラム１０４において、利用者が生年月日入力画面１０１で入力した和暦の生年月日と性別入力画面１０３で入力した性別の両方に基づいて厄年が計算される。この例では、厄年計算プログラム１０４では、性別入力画面１０３で入力した内容にしかアクセスすることはできないものとする。厄年計算プログラム１０４が生年月日入力画面１０１から入力された情報にアクセスするための方法として、セッションオブジェクトを利用する方法がある。
【００６７】
セッションオブジェクトとは、Ｗｅｂセッション（同一クライアント３０２、同一Ｗｅｂブラウザ１０２１で同一のＷｅｂサーバ３０１に対して継続的に行われるアクセス）における状態を管理するために、Ｗｅｂサーバ３０１のメモリ上に確保された領域である。同一の利用者の過去の入力情報や途中の計算結果を一時的に保存するために使われる。このセッションオブジェクトは、メモリの状態であるため、デバッガを使わない限り外部からの参照はできない。
【００６８】
図１１は、セッションオブジェクトを示す説明図である。セッションオブジェクト１１００は、和暦→西暦変換プログラム１０２および厄年計算プログラム１０４から、ＡＰサーバ１０１１を通じてアクセスすることが可能である。図１１では、図１に示した厄年表示プログラム１００の画面処理遷移に合わせて説明する。
【００６９】
和暦→西暦変換プログラム１０２は、生年月日入力画面１０１から入力情報１１０１として「和暦の生年月日＝平成１３年１０月２５日」を受けると、出力情報１１０２として「西暦の生年月日＝２００１年１０月２５日」をセッションオブジェクト１１００に渡す。セッションオブジェクト１１００は、出力情報１１０２の“＝”の左側の「西暦の生年月日」を属性、“＝”の右側の「２００１年１０月２５日」を文字列表現として格納する。
【００７０】
厄年計算プログラム１０４は、性別入力画面１０３から入力情報１１０３として「性別＝男」を受けると、セッションオブジェクト１１００にアクセスして、セッションオブジェクト１１００に格納されている属性および文字列表現である「西暦の生年月日＝２００１年１０月２５日」を入力情報１１０４として読み出す。厄年計算プログラム１０４は、この入力情報１１０３，１１０４により厄年を計算する。そして、出力情報１１０５として「厄年＝２０２５年，２０４２年，２０６１年」を厄年表示画面１０５に埋め込んでクライアント３０２に出力する。
【００７１】
セッション情報取得エンジン１０１８では、処理（和暦→西暦変換プログラム１０２や厄年計算プログラム１０４）の直後で、かつ、画面遷移の直前のタイミング（図１１中、ＡまたはＢ）でセッション情報を取得する。このタイミングで、セッション情報のうちセッションオブジェクト１１００内のすべての属性情報を取得する。このように取得されたセッション情報は、次画面として生成されるＨＴＭＬ内にコメント文として埋め込まれる。したがって、Ｗｅｂブラウザ１０２１ではコメント文は表示されないが、Ｗｅｂブラウザ１０２１の解析対象となる。
【００７２】
（Ｗｅｂサーバ３０１のシーケンス）
図１２は、Ｗｅｂサーバ３０１のシーケンスを示すシーケンス図である。まず、クライアント３０２が、Ｗｅｂサーバ３０１のＵＲＬを含むＨＴＴＰリクエストを送信する。Ｗｅｂサーバ３０１では、ＡＰサーバ１０１１が、そのＨＴＴＰリクエストを受信し、リクエスト解析処理（ステップＳ１２０１）を実行する。そして、ＡＰサーバ１０１１は、ビジネスロジック実行処理（ステップＳ１２０２）を実行する。ビジネスロジック実行処理（ステップＳ１２０２）はビジネスロジック１０１５の実行やセッションオブジェクト１１００へのセッション情報の書込みをおこなう。
【００７３】
このあと、ＪＳＰ展開エンジンによる出力項目展開処理（ステップＳ１２０３）、メタ情報挿入エンジン１０１７によるアスペクト注入処理（ステップＳ１２０４）、ＡＰサーバ１０１１によるレスポンス生成処理（ステップＳ１２０５）を実行する。そして、セッション情報取得エンジン１０１８によるセッション情報取得処理（ステップＳ１２０６）を実行して、レスポンス生成処理（ステップＳ１２０５）により生成されたレスポンスＨＴＭＬにセッション情報を埋め込む。セッション情報取得処理（ステップＳ１２０６）の詳細な処理手順については後述する。ＡＰサーバ１０１１は、セッション情報が埋め込まれたレスポンスＨＴＭＬをクライアント３０２に送信するレスポンス送信処理（ステップＳ１２０７）を実行する。
【００７４】
ここで、リクエスト解析処理（ステップＳ１２０１）、ビジネスロジック実行処理（ステップＳ１２０２）、出力項目展開処理（ステップＳ１２０３）、アスペクト注入処理（ステップＳ１２０４）、およびレスポンス生成処理（ステップＳ１２０５）について、図１３〜図１５を用いて具体的に説明する。
【００７５】
図１３および図１４は、Ｗｅｂサーバ３０１によるＷｅｂアプリケーション実行処理内容を示す説明図である。まず、リクエスト解析処理（ステップＳ１２０１）では、ＡＰサーバ１０１１が、受信されたＨＴＴＰリクエストの内容（リクエスト行やメッセージ・ヘッダ、エンティティ・ボディ）を分析して、検査対象となるビジネスロジック１０１５を呼び出す。ビジネスロジック１０１５は、図１３（Ａ）に示したように、ＨＴＴＰリクエストの内容を分析して画面への出力項目を計算する。たとえば、ビジネスロジック１０１５が上述した和暦→西暦変換プログラム１０２である場合は、和暦の生年月日を西暦の生年月日に変換する。また、厄年計算プログラム１０４である場合は、厄年を計算する。
【００７６】
つぎに、Ｗｅｂサーバ３０１のＪＳＰ展開エンジン１０１２による出力項目展開処理（ステップＳ１２０３）では、ＪＳＰ展開エンジン１０１２が、図１３（Ａ）に示したように、ＪＳＰファイル１０１６内の出力項目１３１０の表示位置を決定する。たとえば、ビジネスロジック１０１５が上述した和暦→西暦変換プログラム１０２である場合は、出力項目である変換結果を性別入力画面１０３にて表示させないため、表示位置を決定する必要はない。一方、厄年計算プログラム１０４である場合は、出力項目１３１０の位置を決定する。
【００７７】
そして、図１３（Ｂ）に示したように、そのＪＳＰファイル１０１６を出力項目の出力位置が指定されたソースコードに変換する。ソースコードに変換することで、ＪＳＰファイル１０１６のカスタムタグ１３０１は、Ｊａｖａソース断片１３０３に変換される。
【００７８】
Ｊａｖａソース断片１３０３は、カスタムタグ１３０１に相当するクラスのｄｏＳｔａｒｔＴａｇ（）メソッドとｄｏＥｎｄＴａｇ（）メソッドを呼び出すようなコードである。そして、コンパイラは、図１３（Ｃ）に示したように、変換されたソースコードをバイナリファイルにコンパイルすることで、画面クラスファイル１３０４を生成する。
【００７９】
つぎに、Ｗｅｂサーバ３０１のメタ情報挿入エンジン１０１７によるアスペクト注入処理（ステップＳ１１０４）では、画面クラスファイル１３０４にメタ情報を挿入することで、図１３（Ｄ）に示したように、アスペクト付きＪａｖａクラスファイル１３１５を得る。
【００８０】
つぎに、Ｗｅｂサーバ３０１のＡＰサーバ１０１１によるレスポンス生成処理（ステップＳ１２０５）では、ＡＰサーバ１０１１が、アスペクト付きＪａｖａクラスファイル１３１５を実行することで、メタ情報付きのレスポンスＨＴＭＬ１３２０を生成する。図１３（Ｅ）に示したように、メタ情報付きのレスポンスＨＴＭＬ１３２０には、ＨＴＭＬコメント１３２１，１３２２が付加されている。たとえば、ビジネスロジック１０１５が上述した和暦→西暦変換プログラム１０２である場合は、出力項目である変換結果を性別入力画面１０３にて表示させないため、メタ情報は挿入されない。一方、厄年計算プログラム１０４である場合は、メタ情報が挿入される。
【００８１】
また、図１４では、アスペクト付きＪａｖａクラスファイル１３１５により動作が置き換えられることによって、どのようにメタ情報付きのレスポンスＨＴＭＬ１３２０が生成されるかを示している。メタ情報挿入エンジン１０１７はＡｓｐｅｃｔＪなどのアスペクト指向のプログラミング言語により構成されている場合、メタ情報挿入エンジン１０１７およびＡＰサーバ１０１１は、つぎの手順（１）〜（５）でメタ情報付きのレスポンスＨＴＭＬ１３２０を生成する。
【００８２】
（１）Ｊａｖａソース断片１３０３のｓｅｔＰａｇｅＣｏｎｔｅｘｔ（）メソッドが属するクラスのクラス名を取得する。この例では、図１３（Ｂ）および図１４（Ａ）に示したＪａｖａソース断片１３０３の１４５行目に記述されている「ｏｒｇ．ａｐａｃｈｅ．ｓｔｒｕｔｓ．ｔａｇｌｉｂ．ｂｅａｎ．ＷｒｉｔｅＴａｇ」が、カスタムタグ１３０１のタグクラスとして取得される。
【００８３】
（２）タグクラスとＪａｖａソース断片１３０３上のｓｅｔＸｘｘ（）メソッドを属性リストとして抽出する。この例では、図１３（Ｂ）および図１４（Ａ）に示したＪａｖａソース断片１３０３の１４８行目に記述されている「ＡｄｄＦｏｒｍ」がｎａｍｅ属性の属性値として、１４９行目に記述されている「ｒｅｓｕｌｔ」がｐｒｏｐｅｒｔｙ属性の属性値として、抽出される。
【００８４】
（３）ｄｏＳｔａｒｔＴａｇ（）メソッドが呼び出される直前に、メタ情報がＨＴＭＬとしてコメント化されたＨＴＭＬコメントを出力する。これにより、図１４（Ｂ）に示したように、「＜！−−ｔｅｓｔＳｔａｒｔ  ｃｌａｓｓ＝"ＷｒｉｔｅＴａｇ“  ｎａｍｅ＝“ＡｄｄＦｏｒｍ”  ｐｒｏｐｅｒｔｙ＝“ｒｅｓｕｌｔ”  −−＞」が表示される。
【００８５】
（４）ｄｏＳｔａｒｔＴａｇ（）メソッドおよびｄｏＥｎｄＴａｇ（）メソッドを実行し、Ｗｅｂアプリケーション１０１４を通常通り実行させる。これにより、図１４（Ｃ）に示したように、実行結果の出力項目１３１０として出力値「５」が表示される。
【００８６】
（５）ｄｏＥｎｄＴａｇ（）が終了した直後に、ＨＴＭＬコメントを出力する。これにより、図１４（Ｂ）に示したように、「＜！−−ｔｅｓｔＥｎｄ  −−＞」が表示される。
【００８７】
図１５は、上記（１）〜（５）によるＷｅｂアプリケーション１０１４の実行結果を示す説明図である。図１５に示したように、メタ情報付きのレスポンスＨＴＭＬ１３２０では、出力項目である出力値「５」の出力位置の前後に、メタ情報を示すＨＴＭＬコメント１３２１，１３２２が配置されて出力されることとなる。
【００８８】
つぎに、セッション情報取得処理（ステップＳ１２０６）について説明する。セッション情報取得処理（ステップＳ１２０６）は、セッション情報取得エンジン１０１８がおこなう処理である。セッション情報取得エンジン１０１８は、ＡＰサーバ１０１１がレスポンスＨＴＭＬを生成すると、ＡＰサーバ１０１１により呼び出される。そして、上述したセッションオブジェクト１１００を利用してセッション情報を取得し、レスポンス生成処理（ステップＳ１２０５）により生成されたレスポンスＨＴＭＬに対し、セッション情報を埋め込む。セッション情報が埋め込まれたレスポンスＨＴＭＬを、以降、「セッション情報付きレスポンスＨＴＭＬ」と称す。
【００８９】
図１６は、セッション情報取得処理（ステップＳ１２０６）の詳細な処理手順を示すフローチャートである。図１６において、まず、リクエストオブジェクトが検出されるのを待ち受け（ステップＳ１６０１：Ｎｏ）、リクエストオブジェクトが検出された場合（ステップＳ１６０１：Ｙｅｓ）、セッションオブジェクト１１００を取得する（ステップＳ１６０２）。そして、未選択の属性があるか否かを判断する（ステップＳ１６０３）。
【００９０】
未選択の属性がある場合（ステップＳ１６０３：Ｙｅｓ）、未選択の属性を選択し（ステップＳ１６０４）、選択属性の文字列表現を抽出する（ステップＳ１６０５）。そして、選択属性およびその文字列表現をセッションＨＴＭＬコメントとして、生成済みのレスポンスＨＴＭＬの末尾にコメント文として埋め込む（ステップＳ１６０６）。
【００９１】
Ｊａｖａ  Ｓｅｒｖｌｅｔ仕様では、属性名は文字列表現であることが指定されているが、属性値はプリミティブ型を除く任意のＪａｖａオブジェクトであるため、属性値を文字列表現に変換しＨＴＭＬコメント形式に整形する。セッション情報取得エンジン１０１８はこの文字列表現をセッションＨＴＭＬコメント文字列（「＜！−−」と「−−＞」に囲まれたＨＴＭＬコメント形式）に変換する。
【００９２】
たとえば、「西暦の生年月日」という属性の属性値が「２００１年１０月２５日」の場合、セッションＨＴＭＬコメント文字列は「＜！−−ｓｅｓｓｉｏｎＩｎｆｏ  西暦の生年月日＝“２００１年１０月２５日”  −−＞」となる。複数の属性が抽出された場合には、複数のセッションＨＴＭＬコメント文字列が列挙される。
【００９３】
図１７は、セッション情報付きレスポンスＨＴＭＬの一例を示す説明図である。図１７では、性別入力画面１０３に関するセッション情報付きレスポンスＨＴＭＬ１７００をあらわしている。このあと、図１６において、ステップＳ１６０３に戻る。ステップＳ１６０３において、未選択の属性がない場合（ステップＳ１６０３：Ｎｏ）、セッション情報取得処理（ステップＳ１２０６）を終了する。
【００９４】
（クライアント３０２による初回テスト時におけるテスト仕様書作成処理）
図１８は、クライアント３０２による初回テスト時におけるテスト仕様書作成処理手順を示すフローチャートである。図１８において、まず、図７に示した初回テスト用のテスト仕様書データＤ１を読み込む（ステップＳ１８０１）。そして、テストケースＴＣｉのインデックスｉをｉ＝１とし（ステップＳ１８０２）、ｉ＞ｎであるか否かを判断する（ステップＳ１８０３）。ｉ＞ｎでない場合（ステップＳ１８０３：Ｎｏ）、テストケースＴＣｉの期待値情報書き込み処理を実行する（ステップＳ１８０４）。このあと、ｉをインクリメントして（ステップＳ１８０５）、ステップＳ１８０３に戻る。
【００９５】
このあと、ｉ＞ｎの場合（ステップＳ１８０３：Ｙｅｓ）、Ｗｅｂブラウザ１０２１によりテスト仕様書データＤ１を表示する（ステップＳ１８０６）。このとき表示されるテスト仕様書データＤ１は、図１７のようになる。これにより、期待値情報を目視で確認することができる。
【００９６】
そして、テストケースの追加があったか否かを判断する（ステップＳ１８０７）。追加があった場合（ステップＳ１８０７：Ｙｅｓ）、ｉ＞ｍであるか否かを判断する（ステップＳ１８０８）。ｍは、追加後のテストケース総数である。
【００９７】
ｉ＞ｍでない場合（ステップＳ１８０８：Ｎｏ）、テストケースＴＣｉの期待値情報書き込み処理を実行する（ステップＳ１８０９）。このあと、ｉをインクリメントして（ステップＳ１８１０）、ステップＳ１８０８に戻る。
【００９８】
このあと、ｉ＞ｍの場合（ステップＳ１８０８：Ｙｅｓ）、Ｗｅｂブラウザ１０２１によりテスト仕様書データＤ１を表示する（ステップＳ１８１１）。これにより、追加分の期待値情報を目視で確認することができる。そして、ステップＳ１８０７に戻る。
【００９９】
また、ステップＳ１８０７において、テストケースの追加がない場合（ステップＳ１８０７：Ｎｏ）、テスト仕様書データＤ１について、テスト仕様書ＤＢ３１０への出力処理を実行する（ステップＳ１８１２）。これにより、一連の処理を終了する。
【０１００】
（テストケースＴＣｉの期待値情報書き込み処理）
つぎに、ステップＳ１８０４、Ｓ１８０９において示したテストケースＴＣｉの期待値情報書き込み処理の具体的な処理手順について説明する。図１９は、テストケースＴＣｉの期待値情報書き込み処理の具体的な処理手順を示すフローチャートである。
【０１０１】
図１９において、まず、初期画面のＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する（ステップＳ１９０１）。図５に示したテスト仕様書データＤ１のテストケースＴＣ１を例に挙げると、生年月日入力画面１０１が初期画面となるため、生年月日入力画面１０１のＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する。
【０１０２】
Ｗｅｂサーバ３０１にＨＴＴＰリクエストを送信したあと、このＨＴＴＰリクエストに応じたレスポンスＨＴＭＬを受信する（ステップＳ１９０２）。生年月日入力画面１０１ではセッション情報（セッションＨＴＭＬコメント文字列）が埋め込まれないため、受信されたＨＴＭＬレスポンスにはメタ情報やセッション情報が埋め込まれない。
【０１０３】
一方、性別入力画面１０３では、セッション情報が埋め込まれたセッション情報付きレスポンスＨＴＭＬを受信することとなる。また、厄年表示画面１０５では、メタ情報およびセッション情報が埋め込まれたセッション情報付きレスポンスＨＴＭＬが受信されることとなる。ここでは、これらを総称して「受信レスポンスＨＴＭＬ」と称す。
【０１０４】
そして、Ｗｅｂブラウザ１０２１により、受信レスポンスＨＴＭＬを表示する（ステップＳ１９０３）。受信レスポンスＨＴＭＬでは、埋め込まれたメタ情報やセッション情報がＷｅｂブラウザ１０２１による表示時には表示されることはないが、解析対象となる。
【０１０５】
このあと、Ｗｅｂブラウザ１０２１により受信レスポンスＨＴＭＬを解析して、期待値情報抽出処理を実行する（ステップＳ１９０４）。メタ情報またはセッション情報がない場合は、期待値情報抽出処理（ステップＳ１９０４）は実行されないが、メタ情報またはセッション情報がある場合は、期待値情報抽出処理（ステップＳ１９０４）は実行される。期待値情報抽出処理（ステップＳ１９０４）の詳細については後述する。
【０１０６】
そして、抽出された期待値情報をテストケースＴＣｉの空欄のセルに書き込む（ステップＳ１９０５）。このあと、テストケースＴＣｉにおいて、現在のＷｅｂ画面から遷移する遷移先画面があるか否かを判断する（ステップＳ１９０６）。
【０１０７】
遷移先画面がある場合（ステップＳ１９０６：Ｙｅｓ）、現在のＷｅｂ画面の操作手順記述どおりの入力情報が受け付けられるのを待ち受ける（ステップＳ１９０７：Ｎｏ）。図５に示したテスト仕様書データＤ１のテストケースＴＣ１を例に挙げると、生年月日入力画面１０１の操作手順記述『性別「男性」を選択、「厄年表示」をクリック』どおりに入力された入力情報が受け付けられるのを待ち受ける。
【０１０８】
入力情報が受け付けられた場合（ステップＳ１９０７：Ｙｅｓ）、遷移先画面のＨＴＴＰリクエスト、すなわち、この入力情報を含んだＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する（ステップＳ１９０８）。このあと、ステップＳ１９０２に戻る。一方、ステップＳ１９０６において、遷移先画面がない場合（ステップＳ１９０６：Ｎｏ）、ステップＳ１８０５（Ｓ１８１０）に移行する。これにより、一連のテストケースＴＣｉの期待値情報書き込み処理手順を終了する。
【０１０９】
（期待値情報抽出処理）
図２０は、期待値情報抽出処理（ステップＳ１９０４）の詳細な処理手順を示すフローチャートである。図２０において、まず、ｔｅｓｔＳｔａｒｔタグとｔｅｓｔＥｎｄタグに囲まれた位置から画面項目期待値を抽出する（ステップＳ２００１）。ｔｅｓｔＳｔａｒｔタグとｔｅｓｔＥｎｄタグがない場合は抽出しない。つぎに、ｓｅｓｓｉｏｎＩｎｆｏタグの一覧を取得する（ステップＳ２００２）。
【０１１０】
そして、未処理のｓｅｓｓｉｏｎＩｎｆｏタグがあるか否かを判断する（ステップＳ２００３）。未処理のｓｅｓｓｉｏｎＩｎｆｏタグがある場合（ステップＳ２００３：Ｙｅｓ）、未処理のｓｅｓｓｉｏｎＩｎｆｏタグの内容を取得する（ステップＳ２００４）。たとえば、図１７に示したセッション情報付きレスポンスＨＴＭＬ１７００では、セッションＨＴＭＬコメント文字列である「＜！−−ｓｅｓｓｉｏｎＩｎｆｏ  西暦の生年月日＝“２００１年１０月２５日”  −−＞」のうち、「西暦の生年月日＝“２００１年１０月２５日”」を取得する。
【０１１１】
そして、取得された内容のうち、「＝」の前の記述を属性名、後ろの記述を属性値と同定し（ステップＳ２００５）、ステップＳ２００３に戻る。先の例では、「西暦の生年月日」が属性名、「２００１年１０月２５日」が属性値となる。ステップＳ２００３において、未処理のｓｅｓｓｉｏｎＩｎｆｏタグがない場合（ステップＳ２００３：Ｎｏ）、ステップＳ１９０５移行する。これにより、ステップＳ１９０５では、画面項目期待値とセッション情報を対応付けてテスト仕様書データＤ１に書き込むこととなる。
【０１１２】
（クライアント３０２によるリグレッションテスト時におけるテスト仕様書作成処理）
つぎに、クライアント３０２によるリグレッションテスト時におけるテスト仕様書作成処理について説明する。テスト仕様書データの作成は、Ｗｅｂブラウザ１０２１および実行ナビゲータ１０２２がおこなう。クライアント３０２は、リグレッションテスト用のテスト仕様書データを読み込む。
【０１１３】
図２１は、リグレッションテスト用のテスト仕様書データを示す説明図である。図５に示した初回テスト用のテスト仕様書データＤ１との違いは、「期待値情報」が「実績値情報」に、「画面項目期待値」が「画面項目実績値」に、「セッション期待値」が「セッション実績値」に変わっている点である。リグレッションテスト用のテスト仕様書データＤ２において、リグレッションテスト前では、実績値情報のセルは空欄である。
【０１１４】
図２２は、リグレッションテスト時における自動作成後のテスト仕様書データＤ２を示す説明図である。リグレッションテストにより実績値情報が埋め込まれているセルがある。つぎに、クライアント３０２によるテスト仕様書作成処理手順について説明する。
【０１１５】
図２３は、クライアント３０２によるリグレッションテスト時におけるテスト仕様書作成処理手順を示すフローチャートである。図２３において、まず、図２１に示したリグレッションテスト用のテスト仕様書データＤ２を読み込む（ステップＳ２３０１）。
【０１１６】
そして、テストケースＴＣｉのインデックスｉをｉ＝１とし（ステップＳ２３０２）、ｉ＞ｎであるか否かを判断する（ステップＳ２３０３）。ｉ＞ｎでない場合（ステップＳ２３０３：Ｎｏ）、テストケースＴＣｉの実績値情報書き込み処理を実行する（ステップＳ２３０４）。このあと、ｉをインクリメントして（ステップＳ２３０５）、ステップＳ２３０３に戻る。
【０１１７】
このあと、ｉ＞ｎの場合（ステップＳ２３０３：Ｙｅｓ）、Ｗｅｂブラウザ１０２１によりテスト仕様書データＤ２を表示する（ステップＳ２３０６）。このとき表示されるテスト仕様書データＤ２は、図２２のようになる。これにより、実績値情報を目視で確認することができる。このあと、テスト仕様書データＤ２について、テスト仕様書ＤＢ３１０への出力処理を実行する（ステップＳ２３０７）。これにより、一連の処理を終了する。
【０１１８】
（テストケースＴＣｉの実績値情報書き込み処理）
つぎに、ステップＳ２３０４において示したテストケースＴＣｉの実績値情報書き込み処理の具体的な処理手順について説明する。図２４は、テストケースＴＣｉの実績値情報書き込み処理の具体的な処理手順を示すフローチャートである。
【０１１９】
図２４において、まず、初期画面のＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する（ステップＳ２４０１）。図２１に示したテスト仕様書データＤ２のテストケースＴＣ１を例に挙げると、生年月日入力画面１０１が初期画面となるため、生年月日入力画面１０１のＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する。
【０１２０】
Ｗｅｂサーバ３０１にＨＴＴＰリクエストを送信したあと、このＨＴＴＰリクエストに応じたレスポンスＨＴＭＬを受信する（ステップＳ２４０２）。生年月日入力画面１０１ではセッション情報（セッションＨＴＭＬコメント文字列）が埋め込まれないため、受信されたＨＴＭＬレスポンスにはメタ情報やセッション情報が埋め込まれない。
【０１２１】
一方、性別入力画面１０３では、セッション情報が埋め込まれたセッション情報付きレスポンスＨＴＭＬを受信することとなる。また、厄年表示画面１０５では、メタ情報およびセッション情報が埋め込まれたセッション情報付きレスポンスＨＴＭＬが受信されることとなる。ここでは、これらを総称して「受信レスポンスＨＴＭＬ」と称す。
【０１２２】
そして、Ｗｅｂブラウザ１０２１により、受信レスポンスＨＴＭＬを表示する（ステップＳ２４０３）。受信されたレスポンスＨＴＭＬでは、埋め込まれたメタ情報やセッション情報がＷｅｂブラウザ１０２１による表示時には表示されることはないが、解析対象となる。
【０１２３】
このあと、Ｗｅｂブラウザ１０２１により受信レスポンスＨＴＭＬを解析して、実績値情報抽出処理を実行する（ステップＳ２４０４）。メタ情報またはセッション情報がない場合は、実績値情報抽出処理（ステップＳ２４０４）は実行されないが、メタ情報またはセッション情報がある場合は、実績値情報抽出処理（ステップＳ２４０４）は実行される。実績値情報抽出処理（ステップＳ２４０４）の詳細については後述する。
【０１２４】
そして、抽出された実績値情報をテストケースＴＣｉの空欄のセルに書き込む（ステップＳ２４０５）。このあと、テストケースＴＣｉにおいて、現在のＷｅｂ画面から遷移する遷移先画面があるか否かを判断する（ステップＳ２４０６）。
【０１２５】
遷移先画面がある場合（ステップＳ２４０６：Ｙｅｓ）、現在のＷｅｂ画面の操作手順記述どおりの入力情報が受け付けられるのを待ち受ける（ステップＳ２４０７：Ｎｏ）。図２１に示したテスト仕様書データＤ２のテストケースＴＣ１を例に挙げると、生年月日入力画面１０１の操作手順記述『性別「男性」を選択、「厄年表示」をクリック』どおりに入力された入力情報が受け付けられるのを待ち受ける。
【０１２６】
入力情報が受け付けられた場合（ステップＳ２４０７：Ｙｅｓ）、遷移先画面のＨＴＴＰリクエスト、すなわち、この入力情報を含んだＨＴＴＰリクエストをＷｅｂサーバ３０１に送信する（ステップＳ２４０８）。このあと、ステップＳ２４０２に戻る。一方、ステップＳ２４０６において、遷移先画面がない場合（ステップＳ２４０６：Ｎｏ）、ステップＳ２３０５に移行する。これにより、一連のテストケースＴＣｉの実績値情報書き込み処理手順を終了する。
【０１２７】
（実績値情報抽出処理）
図２５は、実績値情報抽出処理（ステップＳ２４０４）の詳細な処理手順を示すフローチャートである。図２５において、まず、ｔｅｓｔＳｔａｒｔタグとｔｅｓｔＥｎｄタグに囲まれた位置から画面項目実績値を抽出する（ステップＳ２５０１）。ｔｅｓｔＳｔａｒｔタグとｔｅｓｔＥｎｄタグがない場合は抽出しない。つぎに、ｓｅｓｓｉｏｎＩｎｆｏタグの一覧を取得する（ステップＳ２５０２）。
【０１２８】
そして、未処理のｓｅｓｓｉｏｎＩｎｆｏタグがあるか否かを判断する（ステップＳ２５０３）。未処理のｓｅｓｓｉｏｎＩｎｆｏタグがある場合（ステップＳ２５０３：Ｙｅｓ）、未処理のｓｅｓｓｉｏｎＩｎｆｏタグの内容を取得する（ステップＳ２５０４）。たとえば、図１７に示したセッション情報付きレスポンスＨＴＭＬ１７００では、セッションＨＴＭＬコメント文字列である「＜！−−ｓｅｓｓｉｏｎＩｎｆｏ  西暦の生年月日＝“２００１年１０月２５日”  −−＞」のうち、「西暦の生年月日＝“２００１年１０月２５日”」を取得する。
【０１２９】
そして、取得された内容のうち、「＝」の前の記述を属性名、後ろの記述を属性値と同定し（ステップＳ２５０５）、ステップＳ２５０３に戻る。先の例では、「西暦の生年月日」が属性名、「２００１年１０月２５日」が属性値となる。ステップＳ２５０３において、未処理のｓｅｓｓｉｏｎＩｎｆｏタグがない場合（ステップＳ２５０３：Ｎｏ）、ステップＳ２４０５移行する。これにより、ステップＳ２４０５では、画面項目実績値とセッション情報を対応付けてテスト仕様書データＤ２に書き込むこととなる。
【０１３０】
（バグ位置特定処理）
つぎに、クライアント３０２によるバグ位置特定処理について説明する。バグ位置特定処理は、実行ナビゲータ１０２２がおこなう。バグ位置特定処理は、初回テスト済みの初回テスト用のテスト仕様書データＤ１（図９）と、リグレッションテスト済みのリグレッションテスト用のテスト仕様書データＤ２（図２２）とを比較しておこなう。
【０１３１】
図２６は、初回テスト用のテスト仕様書データＤ１との比較後のリグレッションテスト用のテスト仕様書データＤ２を示す説明図である。図２６のテスト仕様書データＤ２の実績値情報は、図２２のそれと同一である。図２２との違いは、テスト仕様書データＤ１と値が異なるセルを網掛けしている点である。
【０１３２】
たとえば、テストケースＴＣ１の性別入力画面１０３では、図９のセッション期待値が「２００１年１０月２５日」であるのに対し、図２６のセッション実績値は「２０００年１０月２５日」である。また、テストケースＴＣ１の厄年表示画面１０５では、図９の画面項目期待値が「２０２５年、２０４２年、２０６１年」であるのに対し、図２６の画面項目実績値は「２０２４年、２０４１年、２０６０年」である。さらに、図９のセッション期待値が「２００１年１０月２５日」であるのに対し、図２６のセッション実績値は「２０００年１０月２５日」である。
【０１３３】
図２６に示したように、テストケースＴＣ１では、Ｗｅｂブラウザ１０２１により厄年表示画面１０５に表示される画面項目実績値「２０２４年、２０４１年、２０６０年」が、図９の画面項目期待値が「２０２５年、２０４２年、２０６１年」と異なっているため、厄年表示画面１０５を出力した厄年計算プログラム１０４にバグがあると考えられる。しかし、セッション実績値を見ると、厄年表示画面１０５の遷移元画面である性別入力画面１０３のセッション実績値が、セッション期待値と異なっていることがわかる。
【０１３４】
したがって、この場合は、性別入力画面１０３を出力した和暦→西暦変換プログラム１０２にバグがあると判断すべきである。なお、実施の形態１では、Ｗｅｂアプリケーション１０１４のソースコード内のバグ位置までは特定しないため、この場合のバグ位置は、性別入力画面１０３となる。
【０１３５】
図２７は、バグ位置特定処理手順（その１）を示すフローチャートである。図２７において、まず、両テスト仕様書データＤ１，Ｄ２を読み込む（ステップＳ２７０１）。つぎに、初期画面を選択する（ステップＳ２７０２）。そして、選択画面についての期待値が仕様書データＤ１にあるか否かを判断する（ステップＳ２７０３）。ここでは、画面項目期待値またはセッション期待値のうち少なくともいずれか一方の期待値がテスト仕様書データＤ１のセルに書き込まれていれば、期待値があると判断する。
【０１３６】
期待値がない場合（ステップＳ２７０３：Ｎｏ）、ステップＳ２７０９に移行する。一方、期待値がある場合（ステップＳ２７０３：Ｙｅｓ）、存在する期待値に対応する実績値を仕様書データＤ２から特定する（ステップＳ２７０４）。そして、画面項目期待値と画面項目実績値とが一致するか否かを判断する（ステップＳ２７０５）。なお、画面項目期待値および画面項目実績値がない場合は、ステップＳ２７０７に移行する。不一致である場合（ステップＳ２７０５：Ｎｏ）、テスト仕様書データＤ２の画面項目実績値を強調表示して（ステップＳ２７０６）、ステップＳ２７０７に移行する。一方、一致する場合（ステップＳ２７０５：Ｙｅｓ）、ステップＳ２７０７に移行する。
【０１３７】
ステップＳ２７０７では、セッション期待値とセッション実績値が一致するか否かを判断する（ステップＳ２７０７）。なお、セッション期待値およびセッション実績値がない場合は、ステップＳ２７０９に移行する。不一致の場合（ステップＳ２７０７：Ｎｏ）、テスト仕様書データＤ２のセッション実績値を強調表示して（ステップＳ２７０８）、ステップＳ２７０９に移行する。一方、一致する場合（ステップＳ２７０７：Ｙｅｓ）、ステップＳ２７０９に移行する。
【０１３８】
ステップＳ２７０９では、遷移先画面があるか否かを判断する（ステップＳ２７０９）。遷移先画面がある場合（ステップＳ２７０９：Ｙｅｓ）、遷移先画面を選択して（ステップＳ２７１０）、ステップＳ２７０３に戻る。一方、遷移先画面がない場合（ステップＳ２７０９：Ｎｏ）、一連の処理を終了する。これにより、図２６に示したようなテスト仕様書データＤ２が得られるため、どの画面がバグ位置であるかを視認することができる。なお、本例ではテスト仕様書データＤ２を強調表示することとしたが、テスト仕様書データＤ１の方を強調表示することとしてもよい。
【０１３９】
図２８は、バグ位置特定処理手順（その２）を示すフローチャート（前半）であり、図２９は、バグ位置特定処理手順（その２）を示すフローチャート（後半）である。図２７に示したバグ位置特定処理手順（その１）では、テスト仕様書データＤ１と値が異なるテスト仕様書データＤ２のセルを強調表示してユーザが視認することでバグ位置を特定することとしたが、バグ位置特定処理手順（その２）では、バグ位置を自動特定する例である。なお、このバグ位置特定処理手順（その２）は、テストケースＴＣｉごとに実行する。
【０１４０】
図２８において、まず、両テスト仕様書データＤ１，Ｄ２を読み込む（ステップＳ２８０１）。つぎに、初期画面を選択する（ステップＳ２８０２）。そして、選択画面についての期待値が仕様書データＤ１にあるか否かを判断する（ステップＳ２８０３）。ここでは、画面項目期待値またはセッション期待値のうち少なくともいずれか一方の期待値がテスト仕様書データＤ１のセルに書き込まれていれば、期待値があると判断する。
【０１４１】
期待値がない場合（ステップＳ２８０３：Ｎｏ）、ステップＳ２８０９に移行する。一方、期待値がある場合（ステップＳ２８０３：Ｙｅｓ）、存在する期待値に対応する実績値を仕様書データＤ２から特定する（ステップＳ２８０４）。そして、画面項目期待値と画面項目実績値とが一致するか否かを判断する（ステップＳ２８０５）。
【０１４２】
なお、画面項目期待値および画面項目実績値がない場合は、ステップＳ２８０７に移行する。不一致である場合（ステップＳ２８０５：Ｎｏ）、画面項目不一致フラグをＯＮにして（ステップＳ２８０６）、ステップＳ２８０７に移行する。一方、一致する場合（ステップＳ２８０５：Ｙｅｓ）、ステップＳ２８０７に移行する。
【０１４３】
ステップＳ２８０７では、セッション期待値とセッション実績値が一致するか否かを判断する（ステップＳ２８０７）。なお、セッション期待値およびセッション実績値がない場合は、ステップＳ２８０９に移行する。不一致の場合（ステップＳ２８０７：Ｎｏ）、セッション不一致フラグをＯＮにして（ステップＳ２８０８）、ステップＳ２８０９に移行する。一方、一致する場合（ステップＳ２８０７：Ｙｅｓ）、ステップＳ２８０９に移行する。
【０１４４】
ステップＳ２８０９では、遷移先画面があるか否かを判断する（ステップＳ２８０９）。遷移先画面がある場合（ステップＳ２８０９：Ｙｅｓ）、遷移先画面を選択して（ステップＳ２８１０）、ステップＳ２８０３に戻る。一方、遷移先画面がない場合（ステップＳ２８０９：Ｎｏ）、図２９のステップＳ２９０１に移行する。
【０１４５】
図２９において、画面項目不一致フラグとセッション不一致フラグがともにＯＮの画面があるか否かを判断する（ステップＳ２９０１）。両フラグがともにＯＮの画面がない場合（ステップＳ２９０１：Ｎｏ）、バグなしと決定して（ステップＳ２９０２）、ステップＳ２９０７に移行する。
【０１４６】
一方、両フラグがともにＯＮの画面がある場合（ステップＳ２９０１：Ｙｅｓ）、少なくとも誤った値が表示されることとなる。したがって、最初にセッション不一致フラグがＯＮとなった画面を特定する（ステップＳ２９０３）。そして、特定された画面が、ステップＳ２９０１の両フラグＯＮの画面と同一画面であるか否かを判断する（ステップＳ２９０４）。
【０１４７】
同一画面でない場合（ステップＳ２９０４：Ｎｏ）、両フラグＯＮの画面をバグ表示画面、ステップＳ２９０３で特定された画面をバグ位置に決定し（ステップＳ２９０５）、ステップＳ２９０７に移行する。
【０１４８】
一方、両フラグＯＮと同一画面である場合（ステップＳ２９０４：Ｙｅｓ）、両フラグＯＮの画面をバグ位置に決定して（ステップＳ２９０６）、ステップＳ２９０７に移行する。ステップＳ２９０７では、各種決定結果を出力する（ステップＳ２９０７）。これにより、一連の処理を終了する。
【０１４９】
図２２のテスト仕様書データＤ２では、テストケースＴＣ１において、厄年表示画面１０５の画面項目実績値およびセッション実績値が、テスト仕様書データＤ１の厄年表示画面１０５の画面項目期待値およびセッション期待値と異なる。したがって、厄年表示画面１０５がステップＳ２９０１の「両フラグＯＮの画面」となる。また、性別入力画面１０３のセッション実績値が、テスト仕様書データＤ１のセッション期待値と異なる。
【０１５０】
したがって、性別入力画面１０３がステップＳ２９０３の「特定された画面」となる。これにより、このケースでは、ステップＳ２９０５により、厄年表示画面１０５がバグ表示画面となり、性別入力画面１０３がバグ位置と決定されることとなる。これにより、テスト実施者は、性別入力画面１０３を呼び出す和暦→西暦変換プログラム１０２にバグがあると判断することができる。
【０１５１】
仮に、性別入力画面１０３のセッション実績値が、テスト仕様書データＤ１のセッション期待値と一致する場合、厄年表示画面１０５がステップＳ２９０３の「特定された画面」となる。これにより、このケースでは、ステップＳ２９０５により、厄年表示画面１０５がバグ位置と決定されることとなる。これにより、テスト実施者は、厄年表示画面１０５を呼び出す厄年計算プログラム１０４にバグがあると判断することができる。
【０１５２】
このように、実施の形態１では、両テスト仕様書データＤ１，Ｄ２を比較することで、Ｗｅｂアプリケーション１０１４が出力するＷｅｂ画面の中からバグにより得られるＷｅｂ画面を自動特定することができる。したがって、バグ検出の時間を短縮することができ、バグの修正にかかる全体の時間も短縮することができる。これにより、開発サイクルの短縮化やソフトウェア開発全般の工期工数の低減を図ることができる。
【０１５３】
＜実施の形態２＞
次に、実施の形態２について説明する。実施の形態１では、両テスト仕様書データＤ１，Ｄ２を比較することで、バグにより出力される画面をバグ位置として特定した。すなわち、初回テストとリグレッションテスト時とで同一の入力操作を行った際に、セッション情報上に違いがあればその処理でバグが発生したと判断することとした。
【０１５４】
この比較対象となるセッション情報には、日付、受付番号／予約番号等のＩＤ番号等の情報が保持されることがある。このような情報は毎回変化する可能性がある情報であるため、テスト仕様書データＤ１とテスト仕様書データＤ２とで値が異なる場合が生じる。このため、実施の形態２では、バグ検出のための基礎情報として、必要なものと不要なものとをテスト実施者が指定可能にすることで、バグ検出時のバグ位置特定の精度の向上を図る。なお、実施の形態１と同一構成、同一処理については説明を省略する。
【０１５５】
図３０は、セッションオブジェクト１１００に情報を記録するためのプログラムを示す説明図である。実施の形態１では簡単のためにセッションオブジェクト１１００に対して単一の情報（「西暦の生年月日」という属性名の１個のオブジェクト）を格納する方法を示した。一方、より多くの情報をセッションオブジェクト１１００に記録する場合、それぞれの情報を一つ一つ記録するよりも、ＪａｖａＢｅａｎとしてまとめて記録することの方が好まれるケースが多い。
【０１５６】
図３１は、ＪａｖａＢｅａｎのソースコード例（その１）を示す説明図である。図３１では、１個のＪａｖａＢｅａｎに２個の情報（「西暦の誕生日」と「アクセス日」）が格納され、さらにこの複数の情報を保持するＪａｖａＢｅａｎが図３０の４行目でセッションオブジェクト１１００に格納されている。
【０１５７】
ＪａｖａＢｅａｎでは、ＪａｖａＢｅａｎ内に格納される各要素をプロパティ、プロパティに対して情報を読み書きするためのメソッドをアクセサと呼ぶ。特に、ＪａｖａＢｅａｎから情報を取得するためのメソッドをゲッターと呼び、ＪａｖａＢｅａｎに情報を書き込むメソッドをセッターと呼ぶ。
【０１５８】
図３１の例では、プロパティ「西暦の誕生日」は、生年月日入力画面１０１内で入力する情報が同一であれば常に同じ内容が取得できるはずである。逆に言えばバグを検出した際に誕生日の情報が初回テストとリグレッションテスト時とで異なればバグ位置の特定と判断することができる。
【０１５９】
一方、アクセス日はその和暦→西暦変換プログラム１０２が実行された瞬間のＷｅｂサーバ３０１のシステム時刻が格納されている。このため、初回テストとリグレッションテストでは必ず異なる時刻が格納されることになる。このアクセス日に関するセッション情報のセッション期待値を、テスト仕様書データＤ１に格納するセッション期待値から取り除く必要がある。
【０１６０】
図３２は、ＪａｖａＢｅａｎのソースコード例（その２）を示す説明図である。Ｗｅｂアプリケーション１０１４の開発者は、ＪａｖａＢｅａｎを開発する際に、アクセス日のように期待値として記録したくないプロパティの前に「＠Ｉｇｎｏｒｅ」というアノテーションを付加する。図３２の例では、ＪａｖａＢｅａｎにおける「アクセス日」プロパティの宣言の直前に「＠Ｉｇｎｏｒｅ」アノテーションを付加している。
【０１６１】
このＩｇｎｏｒｅという情報はＪａｖａのメタデータ仕様により解釈され、コンパイル後のアスペクト付きＪａｖａクラスファイル１３１５にも残すことが可能である。さらに、Ｗｅｂアプリケーション１０１４の実行時には、セッション情報取得エンジン１０１８により各プロパティに「＠Ｉｇｎｏｒｅ」アノテーションが付加されているかどうかを判断する。そして、付加されていないセッション情報を取り出すことも可能である。
【０１６２】
（セッション情報取得処理）
図３３および図３４は、実施の形態２にかかるセッション情報取得エンジン１０１８によるセッション情報取得処理手順を示すフローチャートである。なお、図１６と同一処理については同一ステップ番号を付し、その説明を省略する。
【０１６３】
まず、図３３において、ステップＳ１６０４で未選択の属性を選択（ステップＳ１６０４）したあと、選択属性がＪａｖａＢｅａｎであるか否かを判断する（ステップＳ３３００）。判段基準としては、属性のオブジェクトに“ｇｅｔ”で始まるメソッドが１個以上あればＪａｖａＢｅａｎであると判断し、そうでなければＪａｖａＢｅａｎではないものとする。ＪａｖａＢｅａｎでない場合（ステップＳ３３００：Ｎｏ）、選択属性の文字列表現を抽出する（ステップＳ１６０５）。一方、ＪａｖａＢｅａｎである場合（ステップＳ３３００：Ｙｅｓ）、図３４のステップＳ３４０１に移行する。
【０１６４】
ステップＳ３４０１では、未選択のプロパティがあるか否かを判断する（ステップＳ３４０１）。未選択のプロパティがある場合（ステップＳ３４０１：Ｙｅｓ）、未選択のプロパティを選択する（ステップＳ３４０２）。そして、選択プロパティに「＠Ｉｇｎｏｒｅ」アノテーションが付加されているか否かを判断する（ステップＳ３４０３）。「＠Ｉｇｎｏｒｅ」アノテーションが付加されている場合（ステップＳ３４０３：Ｙｅｓ）、その選択プロパティを無視してステップＳ３４０１に戻る。
【０１６５】
一方、「＠Ｉｇｎｏｒｅ」アノテーションが付加されていない場合（ステップＳ３４０３：Ｎｏ）、取得対象となるため、選択プロパティの文字列表現（プロパティ値）を抽出する（ステップＳ３４０４）。
【０１６６】
プロパティ自身は、プログラム上外部からアクセスできないプライベートスコープとして定義されることが多いことから、プロパティ名に対応するゲッターメソッドを呼び出してプロパティ値を取得する。ゲッターメソッドはプロパティ名の前に「ｇｅｔ」又は「Ｉｓ」を付加したものであるため、簡単に特定することが可能である。たとえば、プロパティ名が「西暦の誕生日」の場合、ゲッターメソッド名は「ｇｅｔ西暦の誕生日」となる。
【０１６７】
このあと、セッション情報の属性名とプロパティ名、プロパティ値をレスポンスＨＴＭＬの末尾にＨＴＭＬコメントとして埋め込む（ステップＳ３４０５）。セッション情報の属性名とプロパティ名の間にはデリミタ（情報と情報を分離する文字）として「．」（ピリオド）を指定する。この例では、セッション情報の属性名、プロパティ名、プロパティ値としてそれぞれ、「誕生日」、「西暦の誕生日」、「２００１年１０月２５日」が取得できたため、付加されるＨＴＭＬコメントの文字列は、「＜！−−ｓｅｓｓｉｏｎＩｎｆｏ  誕生日．西暦の誕生日＝“２００１年１０月２５日”  −−＞」となる。
【０１６８】
この動作をセッションオブジェクト１１００内の属性の数だけ繰り返し、すべての属性についての処理を完了すると全属性を出力済みとなり、処理を終了する。このように、セッションオブジェクト１１００に記録する情報をＪａｖａＢｅａｎとし、その中に期待値として使用する情報と使用しない情報とを分離して管理することにより、検査をする際に必要な情報のみを期待値として記録することができる。
【０１６９】
したがって、バグ位置特定に関する精度の向上を図ることができる。また、不要な情報を削除することが容易にできるようになることからテスト仕様書データＤ１，Ｄ２の可読性やメンテナンス性の向上、メモリやハードディスクといった資源使用量の削減にもつながる。
【０１７０】
実施の形態２では、ＪａｖａＢｅａｎのプロパティ（フィールドとも呼ぶ）定義文に対してアノテーションを付ける方法を提案したが、ゲッターメソッドにアノテーションを付加しても同様にセッション期待値（またはセッション実績値）として取り込むか否かを決定することが可能である。また、期待値として無視するプロパティにアノテーションを付与したが、逆にセッション期待値（またはセッション実績値）として取り込むプロパティにアノテーションを付けても良いし、無視するプロパティと取り込むプロパティそれぞれに異なる名称のアノテーションを付加しても良い。また、ＪａｖａＢｅａｎクラス全体に対するアノテーションを指定できるようにしてもよい。
【０１７１】
また、ＪＳＲ（Ｊａｖａ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｑｅｓｔ）−１７５メタデータに対応しないＪａｖａバーチャルマシンを利用している場合に、ｔｒａｎｓｉｅｎｔ等のキーワードを付与することで期待値としての取り込みの有無を指定してもよい。
【０１７２】
＜実施の形態３＞
つぎに、実施の形態３について説明する。実施の形態１，２では、画面単位のバグ位置の特定は可能だが、さらに細かいレベル（クラス単位、メソッド単位、行番号単位等）での診断は行えない。
【０１７３】
たとえば、性別入力画面１０３をバグ位置と特定した場合、プログラム上は和暦→西暦変換プログラム１０２にバグが存在することを特定できるが、たとえば和暦→西暦変換プログラム１０２内のどのクラス、メソッドなのかというところまでは特定できない。特に、和暦→西暦変換プログラム１０２が他のライブラリに依存している場合には、バグ位置の特定は人手に頼る部分が大きくなってしまう。
【０１７４】
実施の形態３では、セッション情報における書き込みを検出した際に、その書き込みを行ったプログラムのクラス名、メソッド名も取得し、レスポンスＨＴＭＬとしてＷｅｂブラウザ１０２１に出力することにより、画面レベルよりも詳細にバグ位置を特定する。なお、実施の形態１，２と同一構成、同一処理については説明を省略する。
【０１７５】
図３５および図３６は、Ｗｅｂアプリケーション１０１４を実行する際のシーケンス図である。このシーケンス図では、Ｗｅｂブラウザ１０２１とＡＰサーバ１０１１とが相互に通信を行い、ＡＰサーバ１０１１から呼び出されるＷｅｂアプリケーション１０１４（実施の形態１，２で示した厄年表示プログラム１００）とセッションオブジェクト１１００がどのように情報の交換を行うかを示している。
【０１７６】
まず、Ｗｅｂブラウザ１０２１が、初回アクセス、すなわち、１画面目（生年月日入力画面１０１）のＨＴＴＰリクエストをＡＰサーバ１０１１に送信する（ステップＳ３５０１）。ＡＰサーバ１０１１は、そのＨＴＴＰリクエストを受信して、ＨＴＴＰリクエストの内容に対応するＷｅｂアプリケーション１０１４を呼び出す（ステップＳ３５０２）。Ｗｅｂアプリケーション１０１４では、ビジネスロジック１０１５として和暦→西暦変換プログラム１０２を実行する（ステップＳ３５０３）。その中でセッションオブジェクト１１００への書き込みが行われる。セッションオブジェクト１１００への書き込みは以下の手順で行われる。
【０１７７】
Ｗｅｂアプリケーション１０１４はＡＰサーバ１０１１に対してセッションオブジェクト１１００の取得要求を行う（ステップＳ３５０４）。ＡＰサーバ１０１１はこの取得要求に応答するため、まずそのセッションに対するセッションオブジェクト１１００が既に存在するかどうかを検索する（ステップＳ３５０５）。セッションオブジェクト１１００が見つかれば、ＡＰサーバ１０１１はそのセッションオブジェクト１１００への参照をＷｅｂアプリケーション１０１４に返却する（ステップＳ３５０６）。
【０１７８】
セッションオブジェクト１１００が見つからなければ、セッションオブジェクト１１００のコンストラクタを呼び出してセッションオブジェクト１１００を作成する（ステップＳ３５０５）。セッションオブジェクト１１００はコンストラクタが呼び出されたので実行する（ステップＳ３５０７）。そして、セッションオブジェクト１１００のメソッドを呼び出して必要な情報を格納した後に、そのセッションオブジェクト１１００への参照をＷｅｂアプリケーション１０１４に返却する（ステップＳ３５０６）。
【０１７９】
これにより、Ｗｅｂアプリケーション１０１４はセッションオブジェクト１１００を取得し、その内部へのアクセスができるようになる（ステップＳ３５０８）。つぎに、Ｗｅｂアプリケーション１０１４は、セッション書き込み要求をおこなう（ステップＳ３５０９）。具体的には、セッションオブジェクト１１００のｓｅｔＡｔｔｒｉｂｕｔｅメソッドを呼び出して、セッションオブジェクト１１００に情報を書き込む（ステップＳ３５１０）。
【０１８０】
最後にＷｅｂアプリケーション１０１４はレスポンスＨＴＭＬを作成し、ＡＰサーバ１０１１に通知する（ステップＳ３５１１）。ＡＰサーバ１０１１はこのレスポンスＨＴＭＬをセッション情報取得エンジン１０１８に渡して、レスポンスＨＴＭＬの末尾にセッションＨＴＭＬコメントを付加した後に、セッション情報付きレスポンスＨＴＭＬをＷｅｂブラウザ１０２１に返却する（ステップＳ３５１２）。Ｗｅｂブラウザ１０２１はレスポンスＨＴＭＬを解析し、クライアント３０２の画面上に表示する（ステップＳ３５１３）。
【０１８１】
２画面目以降も同様の動作が行われる。図３６において、まず、性別入力画面１０３において性別を入力したあと、厄年計算ボタンをクリックすることで、そのＨＴＴＰリクエストをＡＰサーバ１０１１に送信する（ステップＳ３６０１）。ＡＰサーバ１０１１は、そのＨＴＴＰリクエストを受信して、ＨＴＴＰリクエストの内容に対応するＷｅｂアプリケーション１０１４を呼び出す（ステップＳ３６０２）。Ｗｅｂアプリケーション１０１４では、ビジネスロジック１０１５として厄年計算プログラム１０４を実行する（ステップＳ３６０３）。
【０１８２】
２画面目以降では、セッションオブジェクト１１００は既に作成済みの状態のため、Ｗｅｂアプリケーション１０１４がセッションの取得要求をすると（ステップＳ３６０４）、ＡＰサーバ１０１１は新規にセッションオブジェクト１１００を作成することなく、既存のセッションオブジェクト１１００への参照を返却する（ステップＳ３６０５）。
【０１８３】
これにより、Ｗｅｂアプリケーション１０１４はセッションオブジェクト１１００を取得し、その内部へのアクセスができるようになる（ステップＳ３６０６）。つぎに、Ｗｅｂアプリケーション１０１４は、セッションオブジェクト１１００からの情報取得をおこなう（ステップＳ３６０７）。具体的には、Ｗｅｂアプリケーション１０１４はセッションオブジェクト１１００のｇｅｔＡｔｔｒｉｂｕｔｅメソッドを呼び出してセッション情報にアクセスして情報を取り出す（ステップＳ３６０８）。Ｗｅｂアプリケーション１０１４は、セッションオブジェクト１１００から取得した情報に基づいてビジネスロジック１０１５（厄年計算プログラム１０４）による厄年計算を実行する（ステップＳ３６０９）。
【０１８４】
最後にＷｅｂアプリケーション１０１４はレスポンスＨＴＭＬを作成し、ＡＰサーバ１０１１に返却する（ステップＳ３６１０）。ＡＰサーバ１０１１はこのレスポンスＨＴＭＬをセッション情報取得エンジン１０１８に渡して、レスポンスＨＴＭＬの末尾にセッションＨＴＭＬコメントを付加した後に、セッション情報付きレスポンスＨＴＭＬをＷｅｂブラウザ１０２１に返却する（ステップＳ３６１１）。Ｗｅｂブラウザ１０２１はレスポンスＨＴＭＬを解析し、厄年表示画面１０５をクライアント３０２の画面上に表示する（ステップＳ３６１２）。
【０１８５】
実施の形態３では、上記の動作をする際におけるセッションオブジェクト１１００への書き込みを行うメソッドであるｓｅｔＡｔｔｒｉｂｕｔｅメソッドの実行前後にアスペクトを織り込むことにより、セッションオブジェクト１１００の振る舞いを変更し、セッションオブジェクト１１００の内容が変更されるタイミングを特定する。この織り込まれるアスペクトの動作について、詳細に説明する。
【０１８６】
アスペクトは、セッションオブジェクト１１００のクラスであるＨｔｔｐＳｅｓｓｉｏｎクラスのｓｅｔＡｔｔｒｉｂｕｔｅメソッドが呼び出される際に織り込まれる。アスペクトとは、メソッド呼び出し等特定のプログラムコードの前後に別のロジックを自動的に加える処理のことを指し、ここではｓｅｔＡｔｔｒｉｂｕｔｅメソッドが呼び出される前に、別の処理を追加している。ｓｅｔＡｔｔｒｉｂｕｔｅメソッドは、１回の画面処理（ＡＰサーバ１０１１がＨＴＴＰリクエストを受信してレスポンスＨＴＭＬを返却するまでの間を指す）の中で複数回の呼び出しが行われる可能性がある。アスペクトは、Ｊａｖａ言語の場合ＡｓｐｅｃｔＪ等のツールにより織り込みを行うことが可能である。
【０１８７】
アスペクトは、具体的には、以下の機能を有する。
・各画面の呼出しごとの初期化（１画面の処理で得られる呼び出し情報だけを記録）。
・ｓｅｔＡｔｔｒｉｂｕｔｅ（）の呼出元のクラス名、メソッド名の取得。
・ｓｅｔＡｔｔｒｉｂｕｔｅ（）を呼出元のプログラム上の行番号の取得。
・ｓｅｔＡｔｔｒｉｂｕｔｅ（）の第１引数、第２引数の取得。第２引数に対してはｔｏＳｔｒｉｎｇ（）を呼び出してＳｔｒｉｎｇ型表記に変換。
・上記全情報を格納する属性情報オブジェクト（Ｌｉｓｔ＜ＳｅｔＡｔｔｒｉｂｕｔｅＩｎｆｏ＞型）を作成。この属性情報オブジェクトもＨｔｔｐＳｅｓｓｉｏｎの属性をして記憶。
・ｓｅｔＡｔｔｒｉｂｕｔｅ（）が複数回呼び出される場合には、各情報を直列情報（Ｌｉｓｔの各要素）として時系列に記憶。
【０１８８】
図３７は、アスペクトの動作処理手順を示すフローチャートである。まず、ｓｅｔＡｔｔｒｉｂｕｔｅメソッドの呼び出しが検出されるのを待ち受け（ステップＳ３７０１：Ｎｏ）、検出された場合（ステップＳ３７０１：Ｙｅｓ）、書込データリストをクリアする（ステップＳ３７０２）。
【０１８９】
書込データリストとは、１回の画面処理の中で行われるセッションオブジェクト１１００への書き込み処理を管理するためのオブジェクトであり、リストとして複数のセッション書込情報を記憶することができる。これは１画面分のセッションオブジェクト１１００へのセッション書込情報のみを取り出し、テスト仕様書ＤＢ３１０に格納するためである。
【０１９０】
そして、ｓｅｔＡｔｔｒｉｂｕｔｅメソッドの呼び出し元プログラムのクラス名、メソッド名、行番号を取得する（ステップＳ３７０３）。また、ｓｅｔＡｔｔｒｉｂｕｔｅメソッドの第１引数、第２引数の値を取得し、それぞれ文字列型への変換を行う（ステップＳ３７０４）。
【０１９１】
つぎに、アスペクトは書込データリストに取り出したすべてのセッション書込情報（クラス名、メソッド名、行番号、第１引数、第２引数）を追記的に記録する（ステップＳ３７０５）。また、書込データリストもまたセッションオブジェクト１１００への属性として記録する（ステップＳ３７０６）。そして、ステップＳ３７０１に戻る。
【０１９２】
また、実施の形態３では、セッション情報取得エンジン１０１８は、この属性情報オブジェクトをＨＴＭＬのコメントとして出力する。出力形式としては、ＨｔｔｐＳｅｓｓｉｏｎオブジェクトの属性単位で、実施の形態１で出力するセッション情報に対する付随情報として出力する。
【０１９３】
具体的には、たとえば、ｓｅｔＡｔｔｒｉｂｕｔｅ（）の第１引数をキーとして得られる位置に出力する。１個のセッション情報に対して複数のセッション書込情報がある場合には時系列でカンマ区切りとする。各セッション書込情報のフォーマットはｓｅｔＡｔｔｒｉｂｕｔｅＩｎｆｏ＝“クラス名＃属性名（）：行番号：第２引数のＳｔｒｉｎｇ表現”とする。
【０１９４】
図３８は、実施の形態３にかかるセッション情報付きレスポンスＨＴＭＬの一例を示す説明図である。このセッション情報付きレスポンスＨＴＭＬ３８００では、Ｅｒａｃｈａｎｇｅクラスのｉｎｉｔメソッドで初期化（ｎｕｌｌをセット）し、ｅｘｅｃｕｔｅメソッドで値を書き込んでいる。
【０１９５】
図３９は、実施の形態３にかかるセッション情報取得エンジン１０１８によるセッション情報取得処理手順を示すフローチャート（その１）である。なお、図１６に示したフローチャートと同一処理については同一ステップ番号を付し、その説明を省略する。
【０１９６】
図３９において、セッションオブジェクト１１００を取得したあと（ステップＳ１６０２）、セッションオブジェクト１１００から書込データリストを抽出する（ステップＳ３９０１）。そして、未選択の属性があるか否かを判断する（ステップＳ１６０３）。また、ステップＳ１６０５において、選択属性の文字列表現を抽出したあと、書込データリストから選択属性のセッション書込情報（クラス名、メソッド名、行番号、第１引数、第２引数）を抽出する（ステップＳ３９０２）。そして、セッション情報およびセッション書込情報を含むセッションＨＴＭＬコメント文字列を、レスポンスＨＴＭＬにコメント文として埋め込む（ステップＳ３９０３）。そして、ステップＳ１６０３に戻る。
【０１９７】
図４０および図４１は、実施の形態３にかかるセッション情報取得エンジン１０１８によるセッション情報取得処理手順を示すフローチャート（その２）である。なお、図３３および図３４に示したフローチャートと同一処理については同一ステップ番号を付し、その説明を省略する。
【０１９８】
図４０において、セッションオブジェクト１１００を取得したあと（ステップＳ１６０２）、セッションオブジェクト１１００から書込データリストを抽出する（ステップＳ４００１）。そして、未選択の属性があるか否かを判断する（ステップＳ１６０３）。また、ステップＳ１６０５において、選択属性の文字列表現を抽出したあと、書込データリストから選択属性のセッション書込情報（クラス名、メソッド名、行番号、第１引数、第２引数）を抽出する（ステップＳ４００２）。
【０１９９】
そして、セッション情報およびセッション書込情報を含むセッションＨＴＭＬコメント文字列を、レスポンスＨＴＭＬにコメント文として埋め込む（ステップＳ４００３）。そして、ステップＳ１６０３に戻る。
【０２００】
また、図４１において、選択プロパティの文字列表現を抽出したあと（ステップＳ３４０４）、書込データリストから選択属性のセッション書込情報（クラス名、メソッド名、行番号、第１引数、第２引数）を抽出する（ステップＳ４１０１）。そして、セッション情報およびセッション書込情報を含むセッションＨＴＭＬコメント文字列を、レスポンスＨＴＭＬにコメント文として埋め込む（ステップＳ４１０２）。そして、ステップＳ３４０１に戻る。
【０２０１】
（初回テスト用のテスト仕様書データのデータ構造）
図４２は、実施の形態３にかかる初回テスト用のテスト仕様書データのデータ構造を示す説明図である。図４２は、初回テスト用のテスト仕様書データＤ３１であり、初回テスト前のため、期待値情報内のセルは空欄である。実施の形態１，２で用いたテスト仕様書データＤ１との違いは、期待値情報として、セッション書込情報が追加された点である。セッション書込情報には、クラス、メソッド、行番号、および第２引数が埋め込まれているため、これらを初回テスト実行時に書き込むこととなる。
【０２０２】
図４３は、実施の形態３にかかる初回テスト実行済みのテスト仕様書データＤ３１のデータ構造を示す説明図である。初回テスト実行済みであるため、期待値情報内のセルには情報が書き込まれている。
【０２０３】
（期待値情報抽出処理）
図４４は、実施の形態３にかかる期待値情報抽出処理の詳細な処理手順を示すフローチャートである。なお、図２０に示した処理と同一処理には同一ステップ番号を付し、その説明を省略する。ステップＳ２００５において同定をおこなったあと、「ｓｅｔＡｔｔｒｉｂｕｔｅＩｎｆｏ＝」の後の部分を解析し、クラス名、メソッド名、行番号、第２引数に分割する（ステップＳ４４００）。これにより、ステップＳ１９０５において、画面項目期待値とセッション期待値とセッション書込情報がテスト仕様書データＤ３１に書き込まれる。
【０２０４】
図３８の場合、１番目のセッション書込情報については、クラス名が「ＥｒａＣｈａｎｇｅｒ」、メソッド名が「ｉｎｉｔ」、行番号が「１２３」、第２引数が「ｎｕｌｌ」となる。また、２番目のセッション書込情報については、クラス名が「ＥｒａＣｈａｎｇｅｒ」、メソッド名が「ｅｘｅｃｕｔｅ」、行番号が「２３４」、第２引数が「２００１年１０月２５日」となる。この期待値情報抽出処理により、図４３に示したようなデータ構造となる。
【０２０５】
（リグレッションテスト用のテスト仕様書データのデータ構造）
図４５は、実施の形態３にかかるリグレッションテスト用のテスト仕様書データのデータ構造を示す説明図である。図４５は、リグレッションテスト用のテスト仕様書データＤ３２であり、リグレッションテスト前のため、実績値情報内のセルは空欄である。実施の形態１，２で用いたテスト仕様書データＤ２との違いは、実績値情報として、セッション書込情報が追加された点である。セッション書込情報には、クラス、メソッド、行番号、および第２引数が埋め込まれているため、これらをリグレッションテスト実行時に書き込むこととなる。
【０２０６】
図４６は、実施の形態３にかかるリグレッションテスト実行済みのテスト仕様書データＤ３２のデータ構造を示す説明図である。初回テスト実行済みであるため、実績値情報内のセルには情報が書き込まれている。
【０２０７】
（実績値情報抽出処理）
図４７は、実施の形態３にかかる実績値情報抽出処理の詳細な処理手順を示すフローチャートである。なお、図２５に示した処理と同一処理には同一ステップ番号を付し、その説明を省略する。ステップＳ２５０５において同定をおこなったあと、「ｓｅｔＡｔｔｒｉｂｕｔｅＩｎｆｏ＝」の後の部分を解析し、クラス名、メソッド名、行番号、第２引数に分割する（ステップＳ４７００）。これにより、ステップＳ２４０５において、画面項目実績値とセッション実績値とセッション書込情報がテスト仕様書データＤ３２に書き込まれる。
【０２０８】
（バグ位置特定処理）
図４８は、実施の形態３にかかるバグ位置特定処理手順を示すフローチャートである。なお、図２７に示した処理と同一処理には同一ステップ番号を付し、その説明を省略する。また、ここでは、図２７では、テスト仕様書データＤ１，Ｄ２を用いたが、ここでは、テスト仕様書データＤ３１，Ｄ３２を用いるものとする。
【０２０９】
ステップＳ２７０７において、セッション不一致である場合（ステップＳ２７０７：Ｎｏ）、セッション実績値とセッション書込情報を強調表示する（ステップＳ４８００）。そして、ステップＳ２７０９に移行する。これにより、セッション書込情報も強調表示することができ、バグを有するプログラムにより呼び出された画面を特定できるとともに、その呼び出し元プログラムのクラス名、メソッド名、行番号、第２引数も特定することができる。
【０２１０】
図４９は、バグ位置特定処理後のテスト仕様書データＤ３２のデータ構造を示す説明図である。テストケースＴＣ１の性別入力画面１０３では、ＥｒａＣｈａｎｇｅｒクラス、ｉｎｉｔメソッドの１２３行目で属性値がｎｕｌｌに設定され、ＥｒａＣｈａｎｇｅｒクラス、ｅｘｅｃｕｔｅメソッドの２３４行目で「２０００年１０月２５日」に設定されたという履歴を確認することができる。
【０２１１】
一方、図４３で示したテスト仕様書データＤ３１において、セッション期待値は「２００１年１０月２５日」であり、セッション書込情報は、ＥｒａＣｈａｎｇｅｒクラス、ｉｎｉｔメソッドの１２３行目がｎｕｌｌであり、ＥｒａＣｈａｎｇｅｒクラス、ｅｘｅｃｕｔｅメソッドの２３４行目が「２００１年１０月２５日」である。これらと比較すると、ＥｒａＣｈａｎｇｅｒクラス、ｅｘｅｃｕｔｅメソッドの２３４行目でバグが埋め込まれたと判断することができる。
【０２１２】
このように実施の形態３では、バグが存在する位置を画面単位ではなく、プログラムの具体的な位置まで特定することが可能となり、より精度の高いバグ位置の特定が可能となる。
【０２１３】
（静的解析との組み合わせ）
図５０は、静的解析との組み合わせを説明するためのプログラムのソースコードを示す説明図である。実施の形態３では、セッション書込情報は、プログラム上の別の場所で処理されて、変数等に格納された最終形が見えている可能性がある。
【０２１４】
例えば、図５０のようなソースコード５０００の場合、実施の形態３の適用だけだと５行目だけがバグ位置として特定されるが、このｂｉｒｔｈｄａｙ変数を実際に処理しているのは図５０のアンダーラインの行すべてが関連している。すなわち、９行目で処理されて得られたｙｅａｒ変数の内容が、関数呼び出し、返却等を経て、セッションオブジェクト１１００に書き込まれる。
【０２１５】
このような場合に、ｃｈｅｃｋｓｔｙｌｅやＦｉｎｄｂｕｇｓ等の既に提案されているソースプログラムの静的解析ツール等と組み合わせることにより、バグが発生したと考えられるコードと関連する変数への代入位置を特定することができるため、より詳細にバグの位置を特定、推量することができる。
【０２１６】
図５１は、静的解析を適用した場合のバグ位置特定処理手順を示すフローチャートである。図４８に示した実行結果から、障害発生原因のクラス名と行番号を取得する（ステップＳ５１０１）。つぎに、取得クラス名のクラスのソースコードを取得する（ステップＳ５１０２）。上記の例では、図５０のソースコードの５行目を取得することとなる。そして、静的解析により、取得行番号と関連するソースコードとその行番号を取得する（ステップＳ５１０３）。上記の例では、図５０のソースコードの４、５行目、９〜１２行目を取得する。そして、取得ソースコードのプログラム名と行番号を出力する（ステップＳ５１０４）。これにより、テスト実施者に通知される。
【０２１７】
＜Ｗｅｂアプリケーション１０１４検査システムの機能的構成＞
つぎに、上述した実施の形態１〜３にかかるＷｅｂアプリケーション検査システム３００の機能的構成について説明する。図５２は、実施の形態１〜３にかかるＷｅｂアプリケーション検査システム３００の機能的構成を示すブロック図である。各ブロックは、具体的には、たとえば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、Ｉ／Ｆ４０９により、その機能を実現する。
【０２１８】
まず、Ｗｅｂサーバ３０１から説明する。Ｗｅｂサーバ３０１は、通信部５２０１と、実行部５２０２と、保存部５２０３と、生成部５２０４と、挿入部５２０５と、を含む構成である。通信部５２０１は、Ｗｅｂアプリケーション１０１４のテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアント３０２から受信する機能を有する。具体的には、クライアント３０２からＨＴＴＰリクエストを受信する。たとえば、クライアント３０２のＷｅｂブラウザ１０２１において生年月日入力画面１０１が表示されている場合、その遷移先のＷｅｂ画面である性別入力画面１０３を要求するＨＴＴＰリクエストを受信する。
【０２１９】
また、通信部５２０１は、Ｗｅｂ画面に関するレスポンスをクライアント３０２に送信する機能を有する。具体的には、クライアント３０２からのＨＴＴＰリクエストに対するレスポンスＨＴＭＬを送信する。たとえば、性別入力画面１０３を要求するＨＴＴＰリクエストを受信した場合、性別入力画面１０３のレスポンスＨＴＭＬを送信する。送信されるレスポンスＨＴＭＬは、セッション情報付きレスポンスＨＴＭＬとなる。なお、この通信部５２０１は、図１０に示したＡＰサーバ１０１１に相当する。
【０２２０】
実行部５２０２は、通信部５２０１によって受信されたリクエストに基づいて、プログラム群のうちＷｅｂ画面を呼び出すプログラムを実行して、Ｗｅｂ画面に表示させる画面項目に関する出力値とプログラムに関する出力値およびその属性とを出力する機能を有する。具体的には、実行部５２０２は、受信されたリクエストを解析し、要求されたＷｅｂ画面を呼び出すプログラムを特定する。そして、その特定されたプログラムを実行する。
【０２２１】
また、Ｗｅｂ画面に表示させる画面項目に関する出力値とは、上述した画面項目期待値または画面項目実績値である。また、プログラムに関する出力値およびその属性とは、上述したセッション情報の属性値（セッション期待値またはセッション実績値）とその属性である。
【０２２２】
たとえば、性別入力画面１０３を要求するＨＴＴＰリクエストである場合、性別入力画面１０３を呼び出す和暦→西暦変換プログラム１０２を呼び出し、ＨＴＴＰに含まれている値（年号「平成」、年「１３」、月「１０」、日「２５」）を与えて実行する。そして、性別入力画面１０３を呼び出す。そして、Ｗｅｂ画面に表示させる画面項目に関する出力値として、「平成１３年１０月２５日」を出力するとともに、セッション情報の属性値とその属性として、「西暦の生年月日（属性）＝２００１年１０月２５日（属性値）」を出力する。この実行部５２０２は、Ｗｅｂアプリケーション１０１４をコンパイラによりコンパイルして実行するＡＰサーバ１０１１に相当する。
【０２２３】
保存部５２０３は、実行部５２０２によって出力されたプログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する機能を有する。具体的には、たとえば、セッション情報を上述したセッションオブジェクト１１００に保存する。上述した例では、セッション情報の属性値とその属性として出力された「西暦の生年月日（属性）＝２００１年１０月２５日（属性値）」をセッション情報として保存する。
【０２２４】
この保存されたセッション情報は、つぎに実行されるプログラムの入力情報として用いられる。たとえば、上述した例では、セッション情報である「西暦の生年月日（属性）＝２００１年１０月２５日（属性値）」は、和暦→西暦変換プログラム１０２のつぎに呼び出される厄年計算プログラム１０４の入力情報として用いられる。
【０２２５】
また、保存部５２０３は、プログラム中の実行位置を特定する情報（セッション書込情報）をプログラムに関する出力値およびその属性とともにセッション情報として記憶領域に保存する。具体的には、たとえば、実施の形態３で説明したように、セッション書込情報として、実行中のプログラムのクラス名、メソッド名、行番号、第２引数のうち少なくとも１つとして保存する。この保存部５２０３は、Ｗｅｂアプリケーション１０１４に応じてセッションオブジェクト１１００に保存するＡＰサーバ１０１１に相当する。
【０２２６】
生成部５２０４は、実行部５２０２によって出力された画面項目に関する出力値が埋め込まれたＷｅｂ画面に関するレスポンスを生成する機能を有する。具体的には、実行部５２０２によって実行中のプログラムが呼び出したＷｅｂ画面に関するレスポンスＨＴＭＬを生成する。このレスポンスＨＴＭＬには、Ｗｅｂ画面に表示させる画面項目に関する出力値（上述した例では、「平成１３年１０月２５日」）が埋め込まれる。
【０２２７】
また、生成部５２０４は、図１２〜図１５に示したように、メタ情報挿入エンジン１０１７、テンプレートファイル１０１６、プリプロセッサ１０１２、コンパイラ１０１３により、Ｗｅｂ画面に表示させる画面項目に関する出力値の出力位置を特定して、レスポンスＨＴＭＬを生成する。この生成部５２０４は、テンプレートファイル１０１６を実行するＡＰサーバ１０１１、プリプロセッサ１０１２、メタ情報挿入エンジン１０１７に相当する。
【０２２８】
挿入部５２０５は、生成部５２０４によって生成されたＷｅｂ画面に関するレスポンスに、保存部５２０３によって記憶領域に保存されたセッション情報を挿入する機能を有する。具体的には、上述した図１６や図３９に示したセッション情報取得処理（ステップＳ１２０６）を実行する。上述した例では、セッションオブジェクト１１００に保存されたセッション情報「西暦の生年月日（属性）＝２００１年１０月２５日（属性値）」を、生成された性別入力画面１０３のレスポンスＨＴＭＬの末尾にコメント文として埋め込む。このようにコメント文として埋め込むことにより、クライアント３０２のＷｅｂブラウザ１０２１では表示されないが、クライアント３０２の実行ナビゲータ１０２２では、解析対象とすることができる。
【０２２９】
また、実施の形態２（図３３および図３４）や実施の形態３（図４０および図４１）で説明したように、属性をＪａｖａＢｅａｎで表現する場合、セッション期待値やセッション実績値として記録したくないプロパティの前に「＠Ｉｇｎｏｒｅ」というアノテーションを付加する。そして、挿入部５２０５では、このアノテーションが付加されているか否かを判定する。アノテーションが付加されていれば、そのプロパティのセッション期待値（またはセッション実績値）をセッションオブジェクト１１００に保存しない。
【０２３０】
これにより、アクセス日などのように、テストする都度必然的に変化するセッション情報どうしの比較をおこなわないようにすることで、バグの誤検出を防止することができる。また、そのようなセッション情報はテスト仕様書データＤ１，Ｄ２に反映されないため、テスト対象にはならない。したがって、テスト時間の短縮化を図ることができる。
【０２３１】
つぎに、クライアント３０２について説明する。クライアント３０２は、受付部５２１１と、取得部５２１２と、抽出部５２１３と、書き込み部５２１４と、読み込み部５２１５と、特定部５２１６と、判断部５２１７と、設定部５２１８と、出力部５２１９と、決定部５２２０と、を含む構成である。これらは実行ナビゲータ１０２２に相当する機能である。
【０２３２】
受付部５２１１は、Ｗｅｂサーバ３０１にインストールされるＷｅｂアプリケーション１０１４のテストケースに含まれている一連の画面遷移仕様が記述されたテスト仕様書データを受け付ける機能を有する。具体的には、たとえば、図５に示したテスト仕様書データを読み込む。
【０２３３】
取得部５２１２は、任意の画面遷移仕様のＷｅｂ画面を要求するリクエストをＷｅｂサーバ３０１に送信する機能を有する。このリクエストは、具体的には、図５に示したテスト仕様書データの一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストである。そして、このリクエストをＷｅｂサーバ３０１に送信することにより、セッション情報付きレスポンスＨＴＭＬを受信する。
【０２３４】
また、抽出部５２１３は、取得部５２１２によって取得されたＷｅｂ画面に関するレスポンスの中から、期待値情報や実績値情報を抽出する機能を有する。具体的には、レスポンスＨＴＭＬにメタ情報が含まれている場合には、メタ情報を抽出する。また、画面項目に関する出力値が含まれている場合には、その画面項目に関する出力値を抽出する。さらに、セッション情報が含まれている場合には、そのセッション情報も抽出する。
【０２３５】
たとえば、初回テストのテストケースＴＣ１において、性別入力画面１０３に関するレスポンスＨＴＭＬを受信した場合、その中から、画面項目期待値として年号「平成」、年「１３」、月「１０」、日「２５」を抽出する。同様に、セッション情報として「西暦の生年月日（属性）＝２００１年１０月２５日（セッション期待値）」を抽出する。
【０２３６】
また、リグレッションテストのテストケースＴＣ１において、性別入力画面１０３に関するレスポンスＨＴＭＬを受信した場合、その中から、画面項目実績値として年号「平成」、年「１３」、月「１０」、日「２５」を抽出する。同様に、セッション情報として「西暦の生年月日（属性）＝２００１年１０月２５日（セッション実績値）」を抽出する。なお、この抽出部５２１３は、実行ナビゲータ１０２２に相当する。
【０２３７】
また、書き込み部５２１４は、抽出部５２１３によって抽出された期待値情報や実績値情報を画面遷移仕様に関連付けて、受付部５２１１によって受け付けられたテスト仕様書データへ書き込む。具体的には、たとえば、図９に示したように、初回テストのテストケースＴＣ１において、画面項目期待値として年号「平成」、年「１３」、月「１０」、日「２５」を抽出した場合、テストケースＴＣ１のレスポンスＨＴＭＬに相当する性別入力画面１０３の画面項目期待値に、年号「平成」、年「１３」、月「１０」、日「２５」を書き込む。
【０２３８】
同様に、セッション情報として「西暦の生年月日（属性）＝２００１年１０月２５日（セッション期待値）」を書き込む。これにより、テストケースＴＣ１の性別入力画面１０３のレコードを参照すると、画面項目期待値とセッション情報（属性およびセッション期待値）とが当該レコードに書き込まれる。したがって、両者が関連付けられることとなる。
【０２３９】
同様に、図２２に示したように、リグレッションテストのテストケースＴＣ１において、画面項目期待値として年号「平成」、年「１３」、月「１０」、日「２５」を抽出した場合、テストケースＴＣ１のレスポンスＨＴＭＬに相当する性別入力画面１０３の画面項目実績値に、年号「平成」、年「１３」、月「１０」、日「２５」を書き込む。
【０２４０】
同様に、セッション情報として「西暦の生年月日（属性）＝２０００年１０月２５日（セッション実績値）」を書き込む。これにより、テストケースＴＣ１の性別入力画面１０３のレコードを参照すると、画面項目実績値とセッション情報（属性およびセッション実績値）とが当該レコードに書き込まれる。したがって、両者が関連付けられることとなる。
【０２４１】
読み込み部５２１５は、Ｗｅｂアプリケーション１０１４に関する第１のテストについて書き込み部５２１４によって書き込まれた第１のテスト仕様書データと第１のテストのあとの第２のテストについて書き込み部５２１４によって書き込まれた第２のテスト仕様書データとを読み込む機能を有する。具体的には、たとえば、書き込み部５２１４による作成済みのテスト仕様書データＤ１，Ｄ２（図９および図２２を参照）を読み込む。また、書き込み部５２１４による作成済みのテスト仕様書データＤ３１，Ｄ３２（図４３および図４６を参照）を読み込んでもよい。
【０２４２】
特定部５２１６は、読み込み部５２１５によって読み込まれた第１および第２のテスト仕様書データ内のＷｅｂ画面ごとに、当該Ｗｅｂ画面に関連付けられているセッション情報を特定する機能を有する。具体的には、たとえば、各テスト仕様書データＤ１，Ｄ２（Ｄ３１，Ｄ３２）において、同一テストケースＴＣｉの同一Ｗｅｂ画面のレコードにおけるセッション情報を特定する。また、特定部５２１６は、同一テストケースＴＣｉの同一Ｗｅｂ画面において、当該Ｗｅｂ画面ごとに、テスト仕様書データＤ１の画面項目期待値とテスト仕様書データＤ２の画面項目実績値とを特定する。
【０２４３】
判断部５２１７は、特定部５２１６によって特定されたセッション情報が、第１および第２のテスト仕様書データで一致するか否かを判断する機能を有する。具体的には、たとえば、特定されたセッション情報ごとに、テスト仕様書データＤ１（Ｄ３１）において特定されたセッション情報とテスト仕様書データＤ２（Ｄ３２）において特定されたセッション情報とが一致するか否かを判断する。一致する場合は、初回テストのセッション期待値とリグレッションテストのセッション実績値とが一致することとなるため、そのＷｅｂ画面を呼び出すプログラム（ビジネスロジック１０１５）は正常（バグなし）であると判断される。
【０２４４】
また、判断部５２１７は、同一テストケースＴＣｉの同一Ｗｅｂ画面において、当該Ｗｅｂ画面ごとに、テスト仕様書データＤ１（Ｄ３１）の画面項目期待値とテスト仕様書データＤ２（Ｄ３２）の画面項目実績値とが特定された場合、画面項目期待値と画面項目実績値との一致判断をおこなってもよい。一致する場合は、そのＷｅｂ画面を呼び出すプログラム（ビジネスロジック１０１５）はバグを表示していないと判断される。
【０２４５】
設定部５２１８は、判断部５２１７によって不一致と判断された場合、テスト仕様書データＤ１，Ｄ２（Ｄ３１，Ｄ３２）内のそのセッション情報を強調表示する設定をおこなう機能を有する。具体的には、たとえば、そのセッション情報の文字サイズや色、フォントを他の一致する情報とは異なるようにタグに指定する。また、画面項目期待値と画面項目実績値とが不一致である場合も同様に強調表示設定することとしてもよい。なお、テスト仕様書データＤ１，Ｄ２のうち少なくともいずれか一方に対して強調表示設定すればよい。
【０２４６】
出力部５２１９は、設定部５２１８によって設定された第１または／および第２のテスト仕様書データを出力する機能を有する。具体的には、たとえば、セッション情報や画面項目期待値、画面項目実績値に対して強調表示設定されたテスト仕様書データＤ１，Ｄ２（Ｄ３１，Ｄ３２）を画面に表示したり、印刷出力したり、他の装置に送信したりする。
【０２４７】
また、決定部５２２０は、判断部５２１７によって判断された判断結果に基づいて、セッション情報に関連付けられているＷｅｂ画面をバグ位置に決定する機能を有する。具体的には、たとえば、テスト仕様書データＤ１（Ｄ３１）において特定されたセッション情報とテスト仕様書データＤ２（Ｄ３２）において特定されたセッション情報が一致する場合、そのセッション情報に関連付けられているＷｅｂ画面を呼び出すプログラム（ビジネスロジック１０１５）には、バグがないこととなる。
【０２４８】
一方、不一致の場合、そのセッション情報に関連付けられているＷｅｂ画面を呼び出すプログラム（ビジネスロジック１０１５）には、バグがあるか、それ以前に実行されるプログラムに影響されている可能性がある。したがって、不一致と判断された一連のＷｅｂ画面群のうち最初に呼び出されるＷｅｂ画面をバグ位置に決定する。これにより、バグ位置に決定されたＷｅｂ画面を呼び出すプログラム（ビジネスロジック１０１５）にバグがあることがわかる。
【０２４９】
たとえば、図９のテスト仕様書データＤ１（Ｄ３１）と図２２のテスト仕様書データＤ２（Ｄ３２）を比較すると、テストケースＴＣ１において、セッション期待値とセッション実績値とが不一致なＷｅｂ画面は、性別入力画面１０３と厄年表示画面１０５である。このＷｅｂ画面群のうち最初に呼び出されるＷｅｂ画面は、性別入力画面１０３であるため、性別入力画面１０３がバグ位置に決定される。したがって、性別入力画面１０３を呼び出す和暦→西暦変換プログラム１０２にバグがあることがわかる。
【０２５０】
また、同一テストケースＴＣｉの同一Ｗｅｂ画面におけるテスト仕様書データＤ１（Ｄ３１）の画面項目期待値とテスト仕様書データＤ２（Ｄ３２）の画面項目実績値とが不一致である場合、そのＷｅｂ画面が、不一致と判断された一連のＷｅｂ画面群のうち最初に呼び出されるＷｅｂ画面と同一画面であるか否かを判断する。そして、同一画面でない場合、テスト仕様書データＤ１（Ｄ３１）の画面項目期待値とテスト仕様書データＤ２（Ｄ３２）の画面項目実績値とが不一致となったＷｅｂ画面をバグ表示位置に決定する。
【０２５１】
たとえば、図９のテスト仕様書データＤ１（Ｄ３１）と図２２のテスト仕様書データＤ２（Ｄ３２）を比較すると、テストケースＴＣ１において、画面項目期待値と画面項目実績値とが不一致なＷｅｂ画面は、厄年表示画面１０５である。一方、セッション期待値とセッション実績値とが不一致なＷｅｂ画面は、性別入力画面１０３と厄年表示画面１０５である。このＷｅｂ画面群のうち最初に呼び出されるＷｅｂ画面は、性別入力画面１０３であるため、厄年表示画面１０５と一致しない。したがって、厄年表示画面１０５がバグ表示位置に決定される。
【０２５２】
具体的には、たとえば、バグ位置やバグ表示位置に決定されたＷｅｂ画面をＷｅｂブラウザ１０２１を介して表示する。また、上述した設定部５２１８により、テスト仕様書データＤ１において、バグ位置に決定された画面項目期待値やセッション情報を強調表示設定することとしてもよい。また、テスト仕様書データＤ２（Ｄ３２）において、バグ位置に決定された画面項目実績値やセッション情報を強調表示設定することとしてもよい。
【０２５３】
この場合、出力部５２１９は、決定部５２２０による決定結果を出力する。具体的には、たとえば、バグ位置に決定されたＷｅｂ画面を表示したり、印刷出力したり、他の装置に送信したりする。また、強調表示設定された場合、セッション情報や画面項目期待値、画面項目実績値に対して強調表示設定されたテスト仕様書データＤ１，Ｄ２（Ｄ３１，Ｄ３２）を画面に表示したり、印刷出力したり、他の装置に送信したりする。
【０２５４】
以上のことから、実施の形態１によれば、バグを検出した際のプログラム上のバグ発生箇所の発見時間を短縮することができる。したがって、バグの修正にかかる全体の時間も短縮することができ、開発サイクルの短縮化やソフトウェア開発全般の工期工数の低減を図ることができる。また、実施の形態２によれば、バグとは無関係のプログラム（ビジネスロジック１０１５）をバグと診断してしまう誤診断を防止することができ、診断精度の向上を図ることができる。また、実施の形態３によれば、バグの位置をより詳細に特定することができるため、バグの修正にかかる時間をさらに短縮することができる。
【０２５５】
なお、本実施の形態で説明したコンピュータ方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な媒体であってもよい。
【０２５６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２５７】
（付記１）一連のプログラム群を含むＷｅｂアプリケーションがインストールされているＷｅｂサーバを、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信手段、
前記受信手段によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行手段、
前記実行手段によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存手段、
前記実行手段によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成手段、
前記生成手段によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存手段によって前記記憶領域に保存されたセッション情報を挿入する挿入手段、
前記挿入手段によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信手段、
として機能させることを特徴とするＷｅｂアプリケーション検査プログラム。
【０２５８】
（付記２）前記保存手段は、
前記プログラムに関する出力値を、前記プログラムのつぎに実行されるプログラムに入力されるセッション情報として前記記憶領域に保存することを特徴とする付記１に記載のＷｅｂアプリケーション検査プログラム。
【０２５９】
（付記３）前記保存手段は、
前記プログラム中の実行位置を特定する情報を前記プログラムに関する出力値およびその属性とともに前記セッション情報として前記記憶領域に保存することを特徴とする付記１または２に記載のＷｅｂアプリケーション検査プログラム。
【０２６０】
（付記４）前記挿入手段は、
前記クライアントのＷｅｂブラウザにおいて前記Ｗｅｂ画面に表示不能な形式で前記セッション情報を前記Ｗｅｂ画面に関するレスポンスに挿入することを特徴とする付記１〜３のいずれか一つに記載のＷｅｂアプリケーション検査プログラム。
【０２６１】
（付記５）前記Ｗｅｂサーバを、
前記セッション情報の前記Ｗｅｂ画面に関するレスポンスへの挿入の可否を判定する判定手段として機能させ、
前記挿入手段は、
前記判定手段によって判定された判定結果に基づいて、前記Ｗｅｂ画面に関するレスポンスに前記セッション情報を挿入することを特徴とする付記１〜４のいずれか一つに記載のＷｅｂアプリケーション検査プログラム。
【０２６２】
（付記６）一連のプログラム群を含むＷｅｂアプリケーションがインストールされているテスト実行装置であって、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信手段と、
前記受信手段によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行手段と、
前記実行手段によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存手段と、
前記実行手段によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成手段と、
前記生成手段によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存手段によって前記記憶領域に保存されたセッション情報を挿入する挿入手段と、
前記挿入手段によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信手段と、
を備えることを特徴とするテスト実行装置。
（付記７）一連のプログラム群を含むＷｅｂアプリケーションがインストールされているＷｅｂサーバが、
前記Ｗｅｂアプリケーションのテストケースに含まれている一連の画面遷移仕様の中から選ばれた画面遷移仕様のＷｅｂ画面を要求するリクエストをクライアントから受信する受信工程と、
前記受信工程によって受信されたリクエストに基づいて、前記プログラム群のうち前記Ｗｅｂ画面を呼び出すプログラムを実行して、前記Ｗｅｂ画面に表示させる画面項目に関する出力値と前記プログラムに関する出力値およびその属性とを出力する実行工程と、
前記実行工程によって出力された前記プログラムに関する出力値およびその属性をセッション情報として記憶領域に保存する保存工程と、
前記実行工程によって出力された画面項目に関する出力値が埋め込まれた前記Ｗｅｂ画面に関するレスポンスを生成する生成工程と、
前記生成工程によって生成された前記Ｗｅｂ画面に関するレスポンスに、前記保存工程によって前記記憶領域に保存されたセッション情報を挿入する挿入工程と、
前記挿入工程によって前記セッション情報が挿入された前記Ｗｅｂ画面に関するレスポンスを前記クライアントに送信する送信工程と、
を実行することを特徴とするテスト実行方法。
【図面の簡単な説明】
【０２６３】
【図１】厄年表示プログラムの画面および処理の遷移を示す画面処理遷移図である。
【図２】厄年表示プログラムのソースコードを示す説明図である。
【図３】実施の形態１にかかるＷｅｂアプリケーション検査システムの概略構成を示す説明図である。
【図４】実施の形態１にかかるコンピュータ装置のハードウェア構成を示すブロック図である。
【図５】初回テスト用のテスト仕様書データのデータ構造を示す説明図である。
【図６】生年月日入力画面の画面例を示す説明図である。
【図７】性別入力画面の画面例を示す説明図である。
【図８】厄年表示画面の画面例を示す説明図である。
【図９】初回テスト済みのテスト仕様書データを示す説明図である。
【図１０】各コンピュータ装置の詳細な内部構成を示すブロック図である。
【図１１】セッションオブジェクトを示す説明図である。
【図１２】Ｗｅｂサーバのシーケンスを示すシーケンス図である。
【図１３】ＷｅｂサーバによるＷｅｂアプリケーション実行処理内容（その１）を示す説明図である。
【図１４】ＷｅｂサーバによるＷｅｂアプリケーション実行処理内容（その２）を示す説明図である。
【図１５】Ｗｅｂアプリケーションの実行結果を示す説明図である。
【図１６】セッション情報取得処理の詳細な処理手順を示すフローチャートである。
【図１７】セッション情報付きレスポンスＨＴＭＬの一例を示す説明図である。
【図１８】クライアントによる初回テスト時におけるテスト仕様書作成処理手順を示すフローチャートである。
【図１９】テストケースの期待値情報書き込み処理の具体的な処理手順を示すフローチャートである。
【図２０】期待値情報抽出処理の詳細な処理手順を示すフローチャートである。
【図２１】リグレッションテスト用のテスト仕様書データを示す説明図である。
【図２２】リグレッションテスト時における自動作成後のテスト仕様書データを示す説明図である。
【図２３】クライアントによるリグレッションテスト時におけるテスト仕様書作成処理手順を示すフローチャートである。
【図２４】テストケースの実績値情報書き込み処理の具体的な処理手順を示すフローチャートである。
【図２５】実績値情報抽出処理の詳細な処理手順を示すフローチャートである。
【図２６】初回テスト用のテスト仕様書データとの比較後のリグレッションテスト用のテスト仕様書データを示す説明図である。
【図２７】バグ位置特定処理手順（その１）を示すフローチャートである。
【図２８】バグ位置特定処理手順（その２）を示すフローチャート（前半）である。
【図２９】バグ位置特定処理手順（その２）を示すフローチャート（後半）である。
【図３０】セッションオブジェクトに情報を記録するためのプログラムを示す説明図である。
【図３１】ＪａｖａＢｅａｎのソースコード例（その１）を示す説明図である。
【図３２】ＪａｖａＢｅａｎのソースコード例（その２）を示す説明図である。
【図３３】実施の形態２にかかるセッション情報取得エンジンによるセッション情報取得処理手順（前半）を示すフローチャートである。
【図３４】実施の形態２にかかるセッション情報取得エンジンによるセッション情報取得処理手順（後半）を示すフローチャートである。
【図３５】Ｗｅｂアプリケーションを実行する際のシーケンス図である。
【図３６】Ｗｅｂアプリケーションを実行する際のシーケンス図である。
【図３７】アスペクトの動作処理手順を示すフローチャートである。
【図３８】実施の形態３にかかるセッション情報付きレスポンスＨＴＭＬの一例を示す説明図である。
【図３９】実施の形態３にかかるセッション情報取得エンジンによるセッション情報取得処理手順を示すフローチャートである。
【図４０】実施の形態３にかかるセッション情報取得エンジンによるセッション情報取得処理手順（前半）を示すフローチャートである。
【図４１】実施の形態３にかかるセッション情報取得エンジンによるセッション情報取得処理手順（後半）を示すフローチャートである。
【図４２】実施の形態３にかかる初回テスト用のテスト仕様書データのデータ構造を示す説明図である。
【図４３】実施の形態３にかかる初回テスト実行済みのテスト仕様書データのデータ構造を示す説明図である。
【図４４】実施の形態３にかかる期待値情報抽出処理の詳細な処理手順を示すフローチャートである。
【図４５】実施の形態３にかかるリグレッションテスト用のテスト仕様書データのデータ構造を示す説明図である。
【図４６】実施の形態３にかかるリグレッションテスト実行済みのテスト仕様書データＤ３２のデータ構造を示す説明図である。
【図４７】実施の形態３にかかる実績値情報抽出処理の詳細な処理手順を示すフローチャートである。
【図４８】実施の形態３にかかるバグ位置特定処理手順を示すフローチャートである。
【図４９】バグ位置特定処理後のテスト仕様書データのデータ構造を示す説明図である。
【図５０】静的解析との組み合わせを説明するためのプログラムのソースコードを示す説明図である。
【図５１】静的解析を適用した場合のバグ位置特定処理手順を示すフローチャートである。
【図５２】実施の形態１〜３にかかるＷｅｂアプリケーション検査システムの機能的構成を示すブロック図である。
【符号の説明】
【０２６４】
１００  厄年表示プログラム
１０１  生年月日入力画面
１０２  和暦→西暦変換プログラム
１０３  性別入力画面
１０４  厄年計算プログラム
１０５  厄年表示画面
３００  Ｗｅｂアプリケーション検査システム
３０１  Ｗｅｂサーバ
３０２  クライアント
１０１８  セッション情報取得エンジン
１１００  セッションオブジェクト
Ｄ１，Ｄ２，Ｄ３１，Ｄ３２  テスト仕様書データ
１７００，３８００  セッション情報付きレスポンスＨＴＭＬ
５２０１  通信部
５２０２  実行部
５２０３  保存部
５２０４  生成部
５２０５  挿入部
５２１１  受付部
５２１２  取得部
５２１３  抽出部
５２１４  書き込み部
５２１５  読み込み部
５２１６  特定部
５２１７  判断部
５２１８  設定部
５２１９  出力部
５２２０  決定部
【図１】
2010026600.tif 000003
【図２】
2010026600.tif 000004
【図３】
2010026600.tif 000005
【図４】
2010026600.tif 000006
【図５】
2010026600.tif 000007
【図６】
2010026600.tif 000008
【図７】
2010026600.tif 000009
【図８】
2010026600.tif 000010
【図９】
2010026600.tif 000011
【図１０】
2010026600.tif 000012
【図１１】
2010026600.tif 000013
【図１２】
2010026600.tif 000014
【図１３】
2010026600.tif 000015
【図１４】
2010026600.tif 000016
【図１５】
2010026600.tif 000017
【図１６】
2010026600.tif 000018
【図１７】
2010026600.tif 000019
【図１８】
2010026600.tif 000020
【図１９】
2010026600.tif 000021
【図２０】
2010026600.tif 000022
【図２１】
2010026600.tif 000023
【図２２】
2010026600.tif 000024
【図２３】
2010026600.tif 000025
【図２４】
2010026600.tif 000026
【図２５】
2010026600.tif 000027
【図２６】
2010026600.tif 000028
【図２７】
2010026600.tif 000029
【図２８】
2010026600.tif 000030
【図２９】
2010026600.tif 000031
【図３０】
2010026600.tif 000032
【図３１】
2010026600.tif 000033
【図３２】
2010026600.tif 000034
【図３３】
2010026600.tif 000035
【図３４】
2010026600.tif 000036
【図３５】
2010026600.tif 000037
【図３６】
2010026600.tif 000038
【図３７】
2010026600.tif 000039
【図３８】
2010026600.tif 000040
【図３９】
2010026600.tif 000041
【図４０】
2010026600.tif 000042
【図４１】
2010026600.tif 000043
【図４２】
2010026600.tif 000044
【図４３】
2010026600.tif 000045
【図４４】
2010026600.tif 000046
【図４５】
2010026600.tif 000047
【図４６】
2010026600.tif 000048
【図４７】
2010026600.tif 000049
【図４８】
2010026600.tif 000050
【図４９】
2010026600.tif 000051
【図５０】
2010026600.tif 000052
【図５１】
2010026600.tif 000053
【図５２】
2010026600.tif 000054