(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムが搭載されたコンピュータを、
前記アプリケーションプログラムに対してテストケースを実行したときに前記アプリケーションプログラムで発生したユーザイベント及び画面イベントを記録装置に累積記録する記録制御手段と、
前記記録装置に累積記録された前記ユーザイベント及び画面イベントを読み出し、テスト対象の前記アプリケーションプログラムで前記ユーザイベントを順次実行する実行手段と、
テスト対象の前記アプリケーションプログラムで一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントと、前記記録装置から読み出した前記一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントとを比較し、一致していない前記画面イベントをエラーとして出力するエラー出力制御手段と
して機能させるためのアプリケーションプログラムのテストプログラム。
【請求項２】
前記記録制御手段は、前記アプリケーションプログラムに対してテストケースを実行したときに前記アプリケーションプログラムで発生したユーザイベント及び画面イベントを検知する検知手段と、
前記イベント検知手段が検知した前記ユーザイベント及び画面イベントを抽象化して前記記録装置に累積記録する記録手段とを有し、
前記実行手段は、前記記録装置に累積記録された抽象化された前記ユーザイベント及び画面イベントを読み出す読み出し手段と、
テスト対象の前記アプリケーションプログラムを判定する判定手段と、
前記判定手段により判定した前記アプリケーションプログラムに応じて、抽象化された前記ユーザイベントを具体化し、そのユーザイベントをテスト対象の前記アプリケーションプログラムで実行するイベント実行手段とを有する
ことを特徴とする請求項１記載のアプリケーションプログラムのテストプログラム。
【請求項３】
前記エラー出力制御手段は、テスト対象の前記アプリケーションプログラムで一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントと、前記記録装置から読み出した前記一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントとを発生の順番を考慮せずに比較し、一致していない前記画面イベントをエラーとして出力することを特徴とする請求項１記載のアプリケーションプログラムのテストプログラム。
【請求項４】
前記記録制御手段により前記記録装置に累積記録される前記画面イベントは、画面変更の差分であり、ＤＯＭ（Document Object Model）で取得する情報であることを特徴とする請求項１記載のアプリケーションプログラムのテストプログラム。
【請求項５】
前記記録制御手段により前記記録装置に累積記録される前記画面イベントは、Ｘｐａｔｈで表現される変更された箇所と、ＤＯＭの部分木とで表された情報であることを特徴とする請求項４記載のアプリケーションプログラムのテストプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムのテストプログラムに係り、特にアプリケーションプログラムの画面をテストするアプリケーションプログラムのテストプログラムに関する。
【背景技術】
【０００２】
従来、例えば通信を行うアプリケーションプログラム（アプリケーション）の画面をテストする場合はテストツールが用いられていた。テストツールは、例えば最初にテストケースを実行してイベント（ユーザの入力操作、画面変更、データの送受信等）を記録しておき、その後のテストで発生（再生）したイベントと、記録しておいたイベントとが一致するか否かを判断する。
【０００３】
例えばテストツールは、クライアント・サーバ間の通信や画面の特定の値を記録、再生することにより画面のテストを行っていた。また、テストツールはＷｉｎｄｏｗｓ（登録商標）等のオペレーティングシステム（ＯＳ）やブラウザ等のイベントや画面を記録、再生することにより画面のテストを行っていた。
【０００４】
図１はアプリケーションの画面をテストする従来の手法を表した模式図である。図１の手法では、記録時、ユーザからのイベントによりブラウザがサーバから受信した通信電文または画面更新の内容のうち、検証対象を手動で指定しておく。そして、再生時はユーザからのイベントによりブラウザがサーバから受信した通信電文または画面更新の内容のうち、予め指定しておいた検証対象を比較することで、アプリケーションの画面をテストしていた。
【０００５】
通信電文または画面更新の内容（テキストフィールドの値など）を検証対象とする図１の手法では、細かいレイアウト等が変わっても問題がない。しかしながら、図１の手法ではユーザからのイベントによりブラウザがサーバから受信した通信電文または画面更新の内容のうち、検証対象を手動で指定しておかなければならなかった。また、図１の手法では色や文字装飾などのスタイルの変化を検証できない場合もあった。
【０００６】
特許文献１及び２には、テスト作業の自動化を目的として、ユーザが検証対象を手動により指定するのではなく、イベントの発生を検知して自動的に記録する技術が記載されている。特許文献１及び２の手法は、画面のビットマップ比較を行うものである。特許文献１及び２の手法は、Ｗｉｎｄｏｗｓ（登録商標）等のＯＳやブラウザ等のイベントや画面を記録、再生することにより画面のテストを行う例である。
【０００７】
図２はアプリケーションの画面をビットマップ比較によりテストする従来の手法を表した模式図である。図２の手法は、例えばＷｉｎｄｏｗｓ（登録商標）ネイティブのテストツールを使うことで実現できる。
【特許文献１】特開平５−８１０８２号公報
【特許文献２】特開２０００−２３５４５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、アプリケーションの画面をビットマップ比較によりテストする従来の手法は、画面（ウインドウ）の大きさ，画面の表示位置，ブラウザの種類や設定などが異なるだけで検証が失敗してしまうという問題があった。例えば図２では記録時と再生時とで画面の大きさ、ステータスバーやツールバーの表示内容が異なるため、検証が失敗してしまう。
【０００９】
本発明は、上記の点に鑑みなされたもので、検証対象を手動により指定することなくアプリケーションプログラムの画面を正確にテストできるアプリケーションプログラムのテストプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決する為、本発明は、アプリケーションプログラムが搭載されたコンピュータを、前記アプリケーションプログラムに対してテストケースを実行したときに前記アプリケーションプログラムで発生したユーザイベント及び画面イベントを記録装置に累積記録する記録制御手段と、前記記録装置に累積記録された前記ユーザイベント及び画面イベントを読み出し、テスト対象の前記アプリケーションプログラムで前記ユーザイベントを順次実行する実行手段と、テスト対象の前記アプリケーションプログラムで一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントと、前記記録装置から読み出した前記一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントとを比較し、一致していない前記画面イベントをエラーとして出力するエラー出力制御手段として機能させるためのアプリケーションプログラムのテストプログラムであることを特徴とする。
【００１１】
なお、本発明の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１２】
本発明によれば、検証対象を手動により指定することなくアプリケーションプログラムの画面を正確にテストできるアプリケーションプログラムのテストプログラムを提供可能である。
【発明を実施するための最良の形態】
【００１３】
次に、本発明を実施するための最良の形態を、以下の実施例に基づき図面を参照しつつ説明していく。まず、本発明の理解を容易とするため、アプリケーションプログラム（アプリケーション）の一例としてのブラウザの画面をテストする従来の手法について説明する。
【００１４】
図３はブラウザの画面をテストする従来の仕組み（記録時）を表した模式図である。図３では、ブラウザプラグイン２に含まれるイベント検知部３が、ブラウザ１で発生したイベント（キー入力，マウス動作など）を検知する。イベント検知部３は検知したイベントのうち画面イベント以外をイベントストア４に記録する。また、イベント検知部３は検知したイベントのうち画面イベントに基づく画面の表示内容を画面ストア５に記録する。例えば画面ストア５には画面の表示内容を表すＨＴＭＬファイルが記録される。
【００１５】
図４はブラウザの画面をテストする従来の仕組み（再生時）を表した模式図である。図４では、Ｊａｖａ（登録商標）Ｓｃｒｉｐｔライブラリ１０に、比較部１１，イベント実行部１２，イベント読取部１３が含まれている。イベント読取部１３は、イベントストア４からイベントを読み取り、イベント実行部１２に送る。イベント実行部１２は、ブラウザ１でイベント（キー入力、マウス動作など）を実行する。
【００１６】
画面イベントに基づく画面変更後、比較部１１は画面ストア５に記録されている画面の表示内容と、ブラウザ１による画面の表示内容とを比較し、画面ストア５に記録されている画面の表示内容と、ブラウザ１による画面の表示内容とに差異があれば、エラーがあると判定する。エラーがあれば、比較部１１はエラー出力部１４にエラーを出力させる。
【００１７】
図５はブラウザの画面をテストする本発明の手法を表した模式図である。図５の手法では、記録時、ステップＳ１〜Ｓ２において、ユーザ２１からのイベント（キー入力等）をテスト記録機構２２が検知し、記録する。ステップＳ３〜Ｓ５では、ユーザ２１からのイベントによりブラウザ１がサーバ２３から画面更新の内容を受信する。テスト記録機構２２はブラウザ１が受信した画面更新の内容を記録する。なお、ステップＳ１〜Ｓ５の処理はユーザ２１からのイベントがある度に繰り返し行われる。
【００１８】
そして、再生時は、ステップＳ１１〜Ｓ１４において、テスト記録機構２２からのイベントによりブラウザ１がサーバ２３から画面更新の内容を受信する。テスト記録機構２２はブラウザ１が受信した画面更新の内容を検知し、記録時に記録しておいた画面更新の内容と比較することで、ブラウザ１の画面をテストする。なお、ステップＳ１１〜Ｓ１４の処理はテスト記録機構２２からのイベントがある度に繰り返し行われる。
【００１９】
図５の手法では、ブラウザ１で発生したユーザの入力操作、画面変更、データの送受信等のイベントを契機として画面変化を検知し、テストの記録時の処理又は再生時の処理を行うことができる。
【００２０】
本発明によるテストの再生は、ユーザの入力操作、画面変更、データの送受信等のイベントを契機にするので、Ｗｉｎｄｏｗｓ（登録商標）ネイティブのテストツールのようにリアルタイムでタイミングを図る必要がない。そのため、本発明ではブラウザ１の画面の高速なテスト実行が可能である。
【００２１】
また、本発明では画面変更を履歴として累積記録するとき、画面変更の差分で記録するため、テストの記録時及び再生時の画面の違いを検出できる。したがって、本発明はＷｉｎｄｏｗｓ（登録商標）ネイティブのテストツールと異なり、画面の大きさ等が記録時と再生時とで変化しても正確にテストできる。
【００２２】
また、本発明では再生時と記録時とで画面変更が構造的に異なっていても、同じ画面変更が他に存在するかどうかを見つけることにより、正確にテストできる。さらに、本発明では、ブラウザ１で発生したユーザの入力操作、画面変更、データの送受信等のイベントを後述するコマンド単位で抽象化することにより、ブラウザ１の種類の違いを吸収できるため、記録時と再生時とでブラウザ１の種類が異なっても正確にテストできる。
【００２３】
図６はブラウザの画面をテストする本発明の仕組み（記録時）を表した一例の模式図である。図６では、ブラウザプラグイン２に、イベント検知部３，コマンド記録部３１が含まれている。
【００２４】
イベント検知部３は、ブラウザ１で発生したイベント（キー入力，マウス動作，通信受信，画面変更など）を検知する。イベント検知部３は検知したイベントをコマンド記録部３１に送る。コマンド記録部３１は、受け取ったイベントを後述のコマンドに変換することで抽象化する。なお、コマンド記録部３１は画面イベントに基づく画面の表示内容もコマンドに変換することで抽象化する。コマンド記録部３１は、変換したコマンドをコマンドストア３２に記録する。
【００２５】
図７はブラウザの画面をテストする本発明の仕組み（再生時）を表した一例の模式図である。図７では、Ｊａｖａ（登録商標）Ｓｃｒｉｐｔライブラリ１０に、イベント実行部１２，イベント解析、画面変更確認部４１，コマンド読取部４２が含まれている。
【００２６】
コマンド読取部４２はコマンドストア３２からコマンドを読み取り、イベント解析、画面変更確認部４１に送る。イベント解析、画面変更確認部４１は受け取ったコマンドをイベント実行部１２に送る。イベント実行部１２は、受け取ったコマンドを後述のようにイベントに変換する。イベント実行部１２は変換したイベントのうち、キー入力、マウス動作等のユーザイベントをブラウザ１で実行する。
【００２７】
イベント解析、画面変更確認部４１は、ブラウザ１で発生した画面変更の画面イベントをブラウザ１から受け取る。イベント解析、画面変更確認部４１は、ブラウザ１から受け取ったブラウザ１で発生した画面変更の画面イベントに基づき、一のユーザイベントを実行してから次のユーザイベントを実行するまでに必要な画面変更が行われたかを後述のように確認する。
【００２８】
また、イベント解析、画面変更確認部４１はブラウザ１で発生した画面更新の内容と記録時にコマンドストア３２へ記録した画面更新の内容とが同じかを、エラー一時保管ストア４３を利用して後述のように確認する。ブラウザ１で発生した画面更新の内容と記録時にコマンドストア３２へ記録した画面更新の内容とに差異がある場合、イベント解析、画面変更確認部４１は、その差異が問題であるかを後述のように確認する。
【００２９】
その差異が問題であれば、イベント解析、画面変更確認部４１は、エラー出力部１４にエラーを出力させる。その差異が問題でなければ、イベント解析、画面変更確認部４１はエラー出力部１４にエラーを出力させない。
【００３０】
図８は、ブラウザの画面をテストする本発明の他の仕組み（記録時、再生時）を表した一例の模式図である。図８の仕組みは、図３及び図４に表した仕組みと比較部１１の処理が異なっている。図８の仕組みは、図３に表した従来の仕組みと同様、記録時に画面全体の表示内容を画面ストア５に記録する。
【００３１】
そして、図８の仕組みは、図４に表した従来の仕組みと同様、再生時に、画面ストア５に記録されている画面全体の表示内容と、ブラウザ１による画面全体の表示内容とを比較することで、図６及び図７に表した本発明の仕組みと同じことが実現できる。図８の仕組みの場合は、比較部１１で「場所が異なっても同じ画面変更」がある場合、エラーではないと判定する。
【００３２】
図９はコマンドをイベントに変換可能なイベント実行部の一例の模式図である。コマンドをイベントに変換可能なイベント実行部１２は、図７に含まれるイベント実行部１２である。
【００３３】
図９のイベント実行部１２は、コマンド受取部５１，実行ブラウザ判定部５２，ブラウザＡ向けイベント実行部５３，ブラウザＢ向けイベント実行部５４が含まれている。図６に示したように、コマンド記録部３１は、イベント検知部３から受け取ったイベントを後述のコマンドに変換することで抽象化し、そのコマンドをコマンドストア３２に記録している。
【００３４】
イベント実行部１２のコマンド受取部５１はイベント解析、画面変更確認部４１から受け取ったコマンドを実行ブラウザ判定部５２に送る。ブラウザ１の種類によってイベントの詳細（プロパティ名など）が異なるため、実行ブラウザ判定部５２はイベントを実行するブラウザ１の種類を判定する。図９では実行ブラウザ判定部５２が、ブラウザ１の種類としてブラウザＡ又はブラウザＢを判定するものとする。
【００３５】
イベントを実行するブラウザ１の種類がブラウザＡだと判定すると、実行ブラウザ判定部５２はコマンド受取部５１から受け取ったコマンドをブラウザＡ向けイベント実行部５３に送る。ブラウザＡ向けイベント実行部５３は受け取ったコマンドを具体化する為、ブラウザＡのイベントに変換し、そのイベントをブラウザ１に送る。
【００３６】
イベントを実行するブラウザ１の種類がブラウザＢだと判定すると、実行ブラウザ判定部５２はコマンド受取部５１から受け取ったコマンドをブラウザＢ向けイベント実行部５４に送る。ブラウザＢ向けイベント実行部５４は受け取ったコマンドを具体化する為、ブラウザＢのイベントに変換し、そのイベントをブラウザ１に送る。
【００３７】
図１０はアプリケーションの画面をテストする従来の手法の問題点を表したイメージ図である。図１０のイメージ図は、ブラウザで発生した画面更新の内容と記録時にイベントストアへ記録した画面更新の内容とが異なる一例を表している。例えば、従来の手法であるＷｉｎｄｏｗｓ（登録商標）ネイティブのテストツールの場合は、位置，値ともに完全に同じでないとエラーになる。
【００３８】
図１１はアプリケーションの画面をテストする従来の手法の問題点を表したイメージ図である。図１１のイメージ図は、ブラウザで発生した画面更新の内容と記録時にイベントストアへ記録した画面更新の内容とが異なる例を表している。例えば、従来の手法である通信電文または画面更新の内容（テキストフィールドの値など）を検証（検査）対象とする場合は、通信電文または画面更新の内容のうち、検査対象を手動で指定しておかなければならなかった。
【００３９】
また、図１２はアプリケーションの画面をテストする本発明の手法を表したイメージ図である。図１２のイメージ図は、ブラウザで発生した画面更新の内容と記録時にコマンドストアへ記録した画面更新の内容とが異なる例を表している。本発明の手法は、異なる画面更新（変更）があるときに、同じ変更が画面内の別の部分にあるならば、自動的に問題ないと判定するものである。本発明の手法では、異なる変更があれば一時的にエラーが出るが、全体の整合性が取れた時点で問題ないと判定し、エラーを消す。無論、自動的に成された問題ないとの判定は、ユーザが無効にすることも可能である。
【００４０】
なお、異なる変更があるときに同じ変更が画面内の別の部分にあるか否かの判定は例えば以下のように行う。図１３は、異なる変更があるときに同じ変更が画面内の別の部分にあるか否かの判定の手法を表した一例の模式図である。プラットフォームがブラウザの場合は、「変更された箇所（Ｘｐａｔｈでの表現）」と、その「ＤＯＭの部分木」を蓄積することで最終的に同じ変化かどうかが分かる。その他のプラットフォーム（例えばＷｉｎｄｏｗｓ（登録商標）Ｆｏｒｍ）の場合は、例えば「変更された箇所（ｘ，ｙ座標）」と「変更された内容（プロパティの変更）」などを蓄積すれば同じ効果が得られる。
【００４１】
本発明の手法では、画面内にある異なる変更の検知（エラー検知）と、同じ変更が画面内の別の部分にあるかの比較（エラー比較）とを以下のように行う。図１４はエラー検知及びエラー比較の仕組みを表した模式図である。本発明の手法では、記録時、画面イベントである「ＤＯＭ変更１」及び「ＤＯＭ変更２」を累積記録しておく。再生時の画面イベントである「ＤＯＭ変更１」及び「ＤＯＭ変更２」は記録時の画面イベントである「ＤＯＭ変更１」及び「ＤＯＭ変更２」と順番及び位置が異なっている。
【００４２】
再生時のエラーは、画面変更が異なることで検知する。図１４の例では再生時の画面イベントである「ＤＯＭ変更２」及び「ＤＯＭ変更１」がエラーとして検知されるが、記録時に累積記録された画面イベントである「ＤＯＭ変更１」及び「ＤＯＭ変更２」と比較することにより、そのエラーが問題ないと判定される。テキストフィールドの値などの変更値が異なる場合は、そのままエラーを出す。なお、本発明の手法では累積記録されている画面変更の履歴（変更履歴）を合わせることより、記録時の画面を再現し、どの部分が異なるのかを示すことも可能である。
【００４３】
図１５は本発明のエラー検知とエラー比較とによるエラー判定を表した一例のイメージ図である。例１では記録時、画面イベントの「ＤＯＭ変更１」及び「ＤＯＭ変更２」が累積記録されている。再生時、エラー検知では画面イベントの「ＤＯＭ変更２」及び「ＤＯＭ変更１」の順番と位置とが記録時と異なっている為、エラーとして検知する。エラー比較では記録時に累積記録された画面イベントの「ＤＯＭ変更１」及び「ＤＯＭ変更２」と累積比較し、位置のみが異なっている為、そのエラーが問題ないと判定する。
【００４４】
また、例２では、記録時、画面イベントの「ＤＯＭ変更１」，「ＤＯＭ変更３」及び「ＤＯＭ変更２」が累積記録されている。再生時、エラー検知では画面イベントの「ＤＯＭ変更１」の位置，「ＤＯＭ変更３」の有無，及び「ＤＯＭ変更２」の順番と位置とが記録時と異なっているため、エラーとして検知する。エラー比較では記録時に累積記録された画面イベントの「ＤＯＭ変更１」，「ＤＯＭ変更３」及び「ＤＯＭ変更２」と累積比較し、位置のみが異なっている「ＤＯＭ変更１」及び「ＤＯＭ変更２」のエラーが問題ないと判定する一方、再生時に無い「ＤＯＭ変更３」をエラーと判定する。
【００４５】
本発明の手法は、図１６に示すようなハードウェア構成のコンピュータ装置で本発明による各種プログラムを実行することにより実現される。図１６はコンピュータ装置の一例の構成図である。コンピュータ装置は、それぞれバスＢで相互に接続されている入力装置６１，出力装置６２，ドライブ装置６３，補助記憶装置６４，主記憶装置６５，演算処理装置６６およびインターフェース装置６７で構成される。
【００４６】
入力装置６１はキーボードやマウスなどで構成され、各種信号を入力するために用いられる。出力装置６２はディスプレイ装置などで構成され、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置６７は、モデム，ＬＡＮカードなどで構成されており、ネットワークに接続する為に用いられる。
【００４７】
本発明によるアプリケーションプログラムのテストプログラムは、コンピュータ装置を制御する各種プログラムの少なくとも一部である。アプリケーションプログラムのテストは記録媒体６８の配布やネットワークからのダウンロードなどによって提供される。
【００４８】
記録媒体６８はＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的，電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【００４９】
また、アプリケーションプログラムのテストプログラムを記録した記録媒体６８がドライブ装置６３にセットされると、アプリケーションプログラムのテストプログラムは記録媒体６８からドライブ装置６３を介して補助記憶装置６４にインストールされる。ネットワークからダウンロードされたアプリケーションプログラムのテストプログラムは、インターフェース装置６７を介して補助記憶装置６４にインストールされる。
【００５０】
コンピュータ装置は、インストールされたアプリケーションプログラムのテストプログラムを格納すると共に、必要なファイル，データ等を格納する。主記憶装置６５は、起動時に補助記憶装置６４からアプリケーションプログラムのテストプログラムを読み出して格納する。そして、演算処理装置６６は主記憶装置６５に格納されたアプリケーションプログラムのテストプログラムに従って後述するような各種処理を実現している。なお、アプリケーションプログラムのテストプログラムはブラウザプラグイン２及びＪａｖａ（登録商標）Ｓｃｒｉｐｔライブラリ１０に相当する。
【００５１】
（記録時の処理を表したフローチャート）
図１７は記録時の処理を表した一例のフローチャートである。なお、図１７の左側のフローチャートはイベント検知部３の処理を表している。図１７の右側のフローチャートはコマンド記録部３１の処理を表している。
【００５２】
ステップＳ５１に進み、イベント検知部３はブラウザ１でイベントが発生したことを検知するまでステップＳ５１の処理を繰り返す。イベント検知部３はブラウザ１でイベントが発生したことを検知すると、ステップＳ５２に進み、検知したイベントをコマンド記録部３１に送ったあと、ステップＳ５１に戻る。
【００５３】
イベント検知部３からイベントを受け取ると、コマンド記録部３１はステップＳ５３に進み、受け取ったイベントの種類が「ユーザイベント」であるかを判定する。なお、イベントの種類は図１８に示すイベント種類対応表を利用して判定される。図１８はイベント種類対応表の一例の構成図である。
【００５４】
図１８のイベント種類対応表は、ブラウザ毎に、イベントと、イベントの種類とが対応付けられている。図１８のイベント種類対応表を利用することで、コマンド記録部３１はブラウザ及びイベントを特定すれば、イベントの種類を判定できる。受け取ったイベントの種類が「ユーザイベント」であれば、コマンド記録部３１はステップＳ５４に進み、受け取ったイベントをコマンドに変換する。
【００５５】
なお、イベントからコマンドへの変換は、図１９に示すコマンド変換対応表を利用して行われる。図１９はコマンド変換対応表の一例の構成図である。図１９のコマンド変換対応表は、ブラウザ毎に、イベントと、コマンド名と、イベント属性と、コマンド属性とが対応付けられている。
【００５６】
受け取ったイベントの種類が「ユーザイベント」でなければ、コマンド記録部３１はステップＳ５５に進み、受け取ったイベントの種類が「画面イベント」であるかをイベント種類対応表により判定する。受け取ったイベントの種類が「画面イベント」であれば、コマンド記録部３１はステップＳ５６に進み、受け取ったイベントをコマンド変換対応表によりコマンドに変換する。
【００５７】
受け取ったイベントの種類が「画面イベント」でなければ、コマンド記録部３１は、ステップＳ５７に進み、受け取ったイベントの種類が「通信イベント」であるかをイベント種類対応表により判定する。コマンド記録部３１は受け取ったイベントの種類が「通信イベント」であれば、ステップＳ５８に進み、受け取ったイベントをコマンド変換対応表によりコマンドに変換する。
【００５８】
なお、受け取ったイベントの種類が「画面イベント」でなければ、コマンド記録部３１はステップＳ５９に進み、ユーザイベントでも画面イベントでも通信イベントでもない独自イベントをコマンド変換対応表によりコマンドに変換する。そして、コマンド記録部３１はステップＳ５４，Ｓ５６，Ｓ５８及びＳ５９に続いてステップＳ６０に進み、変換したコマンドを図２０のようにコマンドストア３２に記録する。
【００５９】
図２０はコマンドストアの一例の構成図である。図２０のコマンドストア３２は、受け取ったイベントの種類と、変換したコマンドと、位置と、型と、属性と、属性値とが対応付けられて記録される。
【００６０】
（再生時の処理を表したフローチャート）
図２１は再生時のコマンド読取部の処理を表した一例のフローチャートである。図２１のフローチャートでは、ステップＳ７１に進み、コマンド読取部４２が、図７において図示を省略しているイベントストアが空か否かを判定する。コマンド読取部４２はイベントストアが空であれば、ステップＳ７２に進み、コマンドストア３２からコマンドを１つ読み取る。
【００６１】
ステップＳ７３に進み、コマンド読取部４２はコマンドストア３２にコマンドがないかを判定する。コマンドストア３２にコマンドがあれば、コマンド読取部４２はステップＳ７４に進み、ステップＳ７２で読み取ったコマンドをイベント解析、画面変更確認部４１に送る。なお、ステップＳ７１において、イベントストアが空でなければ、コマンド読取部４２はイベントストアが空になるまでステップＳ７１の処理を繰り返す。コマンドストア３２にコマンドがなければ、コマンド読取部４２はステップＳ７５に進み、エラー一時保管ストア４３に残っているエラーを出力した後、図２１に示すフローチャートの処理を終了する。
【００６２】
図２２は再生時のイベント解析、画面変更確認部及びイベント実行部の処理を表した一例のフローチャートである。コマンド読取部４２からコマンドを受け取ると、イベント解析、画面変更確認部４１はステップＳ８１に進み、受け取ったコマンドの種類が「画面イベント」であるかを判定する。
【００６３】
受け取ったコマンドの種類が「画面イベント」であれば、イベント解析、画面変更確認部４１はステップＳ８２に進み、後述する比較詳細処理を行う。受け取ったコマンドの種類が「画面イベント」でなければ、イベント解析、画面変更確認部４１はステップＳ８３に進み、受け取ったコマンドの種類が「ユーザイベント」であるかを判定する。
【００６４】
受け取ったコマンドの種類が「ユーザイベント」であれば、イベント解析、画面変更確認部４１はステップＳ８４に進み、イベントストアが空かを判定する。イベントストアが空でなければ、イベント解析、画面変更確認部４１はステップＳ８５に進み、イベントストアからイベントを読み取る。ステップＳ８６に進み、イベント解析、画面変更確認部４１はステップＳ８５で読み取ったイベントをエラー一時保管ストア４３に登録する。
【００６５】
イベントストアが空であれば、イベント解析、画面変更確認部４１はステップＳ７２で読み取ったコマンドをイベント実行部１２へ送る。イベント実行部１２はステップＳ８７へ進み、ステップＳ７２でコマンドストア３２から読み取ったコマンドを各ブラウザに固有のイベントへ変換する。コマンドからイベントへの変換は、例えば図１９に示したコマンド変換対応表が用いられる。
【００６６】
ステップＳ８６，Ｓ８７に続いて、又はステップＳ８３において受け取ったコマンドの種類が「ユーザイベント」でなければ、ステップＳ８８に進み、イベント実行部１２はイベントをブラウザ１に実行させる。イベント解析、画面変更確認部４１は、ステップＳ８２の処理の後、図２２に示したフローチャートの処理を終了する。イベント実行部１２はステップＳ８８の処理の後、図２２に示したフローチャートの処理を終了する。
【００６７】
図２３は再生時のイベント解析、画面変更確認部の処理を表した一例のフローチャートである。イベント解析、画面変更確認部４１は、ブラウザ１で発生した画面変更の画面イベントをブラウザ１から受け取るまで、ステップＳ９１の処理を繰り返す。
【００６８】
ブラウザ１で発生した画面変更の画面イベントをブラウザ１から受け取ると、イベント解析、画面変更確認部４１はステップＳ９２に進み、例えば図１９に示したコマンド変換対応表によりイベントをコマンドに変換する。ステップＳ９３に進み、イベント解析、画面変更確認部４１は後述する比較詳細処理を行ったあと、ステップＳ９１に戻る。
【００６９】
図２４は再生時に使用される各ストアと、その関係を示す模式図である。図２４はコマンドストア３２と、イベントストアと、エラー一時保管ストア４３と、その関係を示したものである。
【００７０】
まず、コマンドストア３２とイベントストアとにおける比較対象はイベントの発生順に選択される。図２４の例では、イベントストアに記録されている画面イベントがコマンドストア３２に記録されている画面イベントと発生順及び位置が異なるため、エラー一時保管ストア４３に記録される。
【００７１】
しかし、イベントストアに記録されている画面イベントがコマンドストア３２に記録されている画面イベントと発生順及び位置だけが異なっているので、イベント解析、画面変更確認部４１は、そのエラーが問題ないと判定し、エラー一時保管ストア４３に記録されている図２４の画面イベントを取り消す。
【００７２】
図２５はステップＳ８２の比較詳細処理を表した一例のフローチャートである。イベント解析、画面変更確認部４１はコマンド読取部４２から受け取ったコマンドの種類が「画面イベント」であるときに図２５に示すフローチャートの処理を開始する。
【００７３】
ステップＳ１０１に進み、イベント解析、画面変更確認部４１はイベントストアから１件目のイベントを読み取る。ステップＳ１０２に進み、イベント解析、画面変更確認部４１はコマンド読取部４２から受け取ったコマンドと、ステップＳ１０１で読み取ったイベントとを比較し、コマンド，型，属性及び属性値が同じであるか判定する。
【００７４】
コマンド読取部４２から受け取ったコマンドと、ステップＳ１０１で読み取ったイベントとで、コマンド，型，属性及び属性値が同じでなければ、イベント解析、画面変更確認部４１はステップＳ１０３に進み、エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在するかを判定する。エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在しなければ、イベント解析、画面変更確認部４１はステップＳ１０４に進み、エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントを保存する。エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在すれば、イベント解析、画面変更確認部４１はステップＳ１０４の処理を行わない。
【００７５】
ステップＳ１０１〜Ｓ１０４の処理は、次のイベントがイベントストアから無くなるまで繰り返される。次のイベントがイベントストアから無くなると、イベント解析、画面変更確認部４１はステップＳ１０５に進み、エラー一時保管ストア４３へコマンド読取部４２から受け取ったコマンドを保存したあと、図２５に示したフローチャートの処理を終了する。
【００７６】
コマンド読取部４２から受け取ったコマンドと、ステップＳ１０１で読み取ったイベントとで、コマンド，型，属性及び属性値が同じであれば、イベント解析、画面変更確認部４１は、ステップＳ１０６に進み、エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在するかを判定する。エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在しなければ、イベント解析、画面変更確認部４１は図２５に示したフローチャートの処理を終了する。
【００７７】
イベント解析、画面変更確認部４１は、エラー一時保管ストア４３にステップＳ１０１で読み取ったイベントが存在すれば、ステップＳ１０７に進み、ステップＳ１０１で読み取ったイベントをエラー一時保管ストア４３から削除する。また、イベント解析、画面変更確認部４１はステップＳ１０８に進み、ステップＳ１０１で読み取ったイベントをイベントストアから削除したあと、図２５に示したフローチャートの処理を終了する。
【００７８】
図２６はステップＳ９３の比較詳細処理を表した一例のフローチャートである。イベント解析、画面変更確認部４１はブラウザ１で発生した画面変更の画面イベントをブラウザ１から受け取ると、エラー一時保管ストア４３から１件目のイベントを読み取る。
【００７９】
ステップＳ１１２に進み、イベント解析、画面変更確認部４１はコマンド読取部４２から受け取ったコマンドと、ステップＳ１１１でエラー一時保管ストア４３から読み取ったイベントとを比較し、コマンド，型，属性及び属性値が同じであるか判定する。コマンド読取部４２から受け取ったコマンドと、ステップＳ１１１でエラー一時保管ストア４３から読み取ったイベントとで、コマンド，型，属性及び属性値が同じでなければ、イベント解析、画面変更確認部４１はステップＳ１１１に戻り、エラー一時保管ストア４３から次のイベントを読み取って処理を続ける。
【００８０】
なお、エラー一時保管ストア４３から次のイベントが無くなると、イベント解析、画面変更確認部４１はステップＳ１１３に進み、エラー一時保管ストア４３へコマンド読取部４２から受け取ったコマンドを保存する。ステップＳ１１４に進み、イベント解析、画面変更確認部４１はイベントストアへコマンド読取部４２から受け取ったコマンドを保存したあと、図２６に示したフローチャートの処理を終了する。
【００８１】
なお、コマンド読取部４２から受け取ったコマンドと、ステップＳ１１１でエラー一時保管ストア４３から読み取ったイベントとで、コマンド，型，属性及び属性値が同じであれば、イベント解析、画面変更確認部４１はステップＳ１１５に進み、ステップＳ１１１で読み取ったイベントをエラー一時保管ストア４３から削除したあと、図２６に示したフローチャートの処理を終了する。
【００８２】
なお、エラー出力部１４によるエラー一時保管ストア４３に残っているエラーの出力は例えば図２７に示すようなエラー画面により行われる。図２７は、エラー画面の一例のイメージ図である。
【００８３】
本発明は、以下に記載する付記のような構成が考えられる。
（付記１）
アプリケーションプログラムが搭載されたコンピュータを、
前記アプリケーションプログラムに対してテストケースを実行したときに前記アプリケーションプログラムで発生したユーザイベント及び画面イベントを記録装置に累積記録する記録制御手段と、
前記記録装置に累積記録された前記ユーザイベント及び画面イベントを読み出し、テスト対象の前記アプリケーションプログラムで前記ユーザイベントを順次実行する実行手段と、
テスト対象の前記アプリケーションプログラムで一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントと、前記記録装置から読み出した前記一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントとを比較し、一致していない前記画面イベントをエラーとして出力するエラー出力制御手段と
して機能させるためのアプリケーションプログラムのテストプログラム。
（付記２）
前記記録制御手段は、前記アプリケーションプログラムに対してテストケースを実行したときに前記アプリケーションプログラムで発生したユーザイベント及び画面イベントを検知する検知手段と、
前記イベント検知手段が検知した前記ユーザイベント及び画面イベントを抽象化して前記記録装置に累積記録する記録手段とを有し、
前記実行手段は、前記記録装置に累積記録された抽象化された前記ユーザイベント及び画面イベントを読み出す読み出し手段と、
テスト対象の前記アプリケーションプログラムを判定する判定手段と、
前記判定手段により判定した前記アプリケーションプログラムに応じて、抽象化された前記ユーザイベントを具体化し、そのユーザイベントをテスト対象の前記アプリケーションプログラムで実行するイベント実行手段とを有する
ことを特徴とする付記１記載のアプリケーションプログラムのテストプログラム。
（付記３）
前記エラー出力制御手段は、テスト対象の前記アプリケーションプログラムで一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントと、前記記録装置から読み出した前記一のユーザイベントを実行してから次のユーザイベントを実行するまでに発生した画面イベントとを発生の順番を考慮せずに比較し、一致していない前記画面イベントをエラーとして出力することを特徴とする付記１記載のアプリケーションプログラムのテストプログラム。
（付記４）
前記記録制御手段により前記記録装置に累積記録される前記画面イベントは、画面変更の差分であり、ＤＯＭ（Document Object Model）で取得する情報であることを特徴とする付記１記載のアプリケーションプログラムのテストプログラム。
（付記５）
前記記録制御手段により前記記録装置に累積記録される前記画面イベントは、Ｘｐａｔｈで表現される変更された箇所と、ＤＯＭの部分木とで表された情報であることを特徴とする付記４記載のアプリケーションプログラムのテストプログラム。
【００８４】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【図面の簡単な説明】
【００８５】
【図１】アプリケーションの画面をテストする従来の手法を表した模式図である。
【図２】アプリケーションの画面をビットマップ比較によりテストする従来の手法を表した模式図である。
【図３】ブラウザの画面をテストする従来の仕組み（記録時）を表した模式図である。
【図４】ブラウザの画面をテストする従来の仕組み（再生時）を表した模式図である。
【図５】ブラウザの画面をテストする本発明の手法を表した模式図である。
【図６】ブラウザの画面をテストする本発明の仕組み（記録時）を表した一例の模式図である。
【図７】ブラウザの画面をテストする本発明の仕組み（再生時）を表した一例の模式図である。
【図８】ブラウザの画面をテストする本発明の他の仕組み（記録時、再生時）を表した一例の模式図である。
【図９】コマンドをイベントに変換可能なイベント実行部の一例の模式図である。
【図１０】アプリケーションの画面をテストする従来の手法の問題点を表したイメージ図である。
【図１１】アプリケーションの画面をテストする従来の手法の問題点を表したイメージ図である。
【図１２】アプリケーションの画面をテストする本発明の手法を表したイメージ図である。
【図１３】異なる変更があるときに同じ変更が画面内の別の部分にあるか否かの判定の手法を表した一例の模式図である。
【図１４】エラー検知及びエラー比較の仕組みを表した模式図である。
【図１５】本発明のエラー検知とエラー比較とによるエラー判定を表した一例のイメージ図である。
【図１６】コンピュータ装置の一例の構成図である。
【図１７】記録時の処理を表した一例のフローチャートである。
【図１８】イベント種類対応表の一例の構成図である。
【図１９】コマンド変換対応表の一例の構成図である。
【図２０】コマンドストアの一例の構成図である。
【図２１】再生時のコマンド読取部の処理を表した一例のフローチャートである。
【図２２】再生時のイベント解析、画面変更確認部及びイベント実行部の処理を表した一例のフローチャートである。
【図２３】再生時のイベント解析、画面変更確認部の処理を表した一例のフローチャートである。
【図２４】再生時に使用される各ストアと、その関係を示す模式図である。
【図２５】ステップＳ８２の比較詳細処理を表した一例のフローチャートである。
【図２６】ステップＳ９３の比較詳細処理を表した一例のフローチャートである。
【図２７】エラー画面の一例のイメージ図である。
【符号の説明】
【００８６】
１    ブラウザ
２    ブラウザプラグイン
３    イベント検知部
４    イベントストア
５    画面ストア
１０    Ｊａｖａ（登録商標）Ｓｃｒｉｐｔライブラリ
１１    比較部
１２    イベント実行部
１３    イベント読取部
１４    エラー出力部
２１    ユーザ
２２    テスト記録機構
２３    サーバ
３１    コマンド記録部
３２    コマンドストア
４１    イベント解析、画面変更確認部
４２    コマンド読取部
４３    エラー一時保管ストア
５１    コマンド受取部
５２    実行ブラウザ判定部
５３    ブラウザＡ向けイベント実行部
５４    ブラウザＢ向けイベント実行部
６１    入力装置
６２    出力装置
６３    ドライブ装置
６４    補助記憶装置
６５    主記憶装置
６６    演算処理装置
６７    インターフェース装置
６８    記録媒体
Ｂ    バス
【図１】
0004859821.tif 000002
【図２】
0004859821.tif 000003
【図３】
0004859821.tif 000004
【図４】
0004859821.tif 000005
【図５】
0004859821.tif 000006
【図６】
0004859821.tif 000007
【図７】
0004859821.tif 000008
【図８】
0004859821.tif 000009
【図９】
0004859821.tif 000010
【図１０】
0004859821.tif 000011
【図１１】
0004859821.tif 000012
【図１２】
0004859821.tif 000013
【図１３】
0004859821.tif 000014
【図１４】
0004859821.tif 000015
【図１５】
0004859821.tif 000016
【図１６】
0004859821.tif 000017
【図１７】
0004859821.tif 000018
【図１８】
0004859821.tif 000019
【図１９】
0004859821.tif 000020
【図２０】
0004859821.tif 000021
【図２１】
0004859821.tif 000022
【図２２】
0004859821.tif 000023
【図２３】
0004859821.tif 000024
【図２４】
0004859821.tif 000025
【図２５】
0004859821.tif 000026
【図２６】
0004859821.tif 000027
【図２７】
0004859821.tif 000028