(57)【特許請求の範囲】
【請求項１】
一つまたは複数のコンピュータ・システムが：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ・システムに関連する一つまたは複数のプロセッサを使って、現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第一の集合を決定し；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第二の集合を決定し；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第一の集合と前記第二の集合との間で、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間の一つまたは複数の一致した部分の集合を決定し；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、
前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別し、
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
クライアント層環境における前記イベント駆動アプリケーションの状態のエンドユーザー経験とは、そのクライアント層環境において前記イベント駆動アプリケーションの状態がエンドユーザーに与える経験である、
方法。
【請求項２】
前記複数のクライアント層環境において前記イベント駆動アプリケーションを動的にクロールし；
複数のクライアント層環境のそれぞれについて、前記の動的なクロールに基づいてそのイベント駆動アプリケーションの挙動モデルを生成することをさらに含み、前記イベント駆動アプリケーションの状態の構造化された表現が前記挙動モデルに基づく、
請求項１記載の方法。
【請求項３】
前記イベント駆動アプリケーションがウェブ・アプリケーションである、請求項１記載の方法。
【請求項４】
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
請求項１記載の方法。
【請求項５】
前記クライアント層環境における前記イベント駆動アプリケーションの前記エンドユーザー経験の前記相違の一つまたは複数がトレース・レベルの相違または画面レベルの相違である、請求項１記載の方法。
【請求項６】
前記イベント駆動アプリケーションの前記挙動モデルが状態グラフを含む、請求項２記載の方法。
【請求項７】
前記状態グラフが根付きの有向グラフである、請求項６記載の方法。
【請求項８】
前記状態グラフ中の各ノードが前記イベント駆動アプリケーションの画面の状態を表し；
前記状態グラフ中の各エッジが、前記状態のうちの一つから別の状態への遷移を引き起こす、前記イベント駆動アプリケーションとのユーザー対話を表す、請求項７記載の方法。
【請求項９】
前記状態グラフが部分遷移機能をもつ有限状態機械（FSM）である、請求項６記載の方法。
【請求項１０】
ソフトウェアを具現する一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体であって、前記ソフトウェアは、実行されたときに：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第一の集合を決定し；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第二の集合を決定し；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第一の集合と前記第二の集合との間で前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間の一つまたは複数の一致した部分の集合を決定し；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別し、
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
クライアント層環境における前記イベント駆動アプリケーションの状態のエンドユーザー経験とは、そのクライアント層環境において前記イベント駆動アプリケーションの状態がエンドユーザーに与える経験である、
記憶媒体。
【請求項１１】
前記複数のクライアント層環境において前記イベント駆動アプリケーションを動的にクロールし；
複数のクライアント層環境のそれぞれについて、前記の動的なクロールに基づいてそのイベント駆動アプリケーションの挙動モデルを生成することをさらに含み、前記イベント駆動アプリケーションの状態の構造化された表現が前記挙動モデルに基づく、
請求項１０記載の記憶媒体。
【請求項１２】
前記イベント駆動アプリケーションがウェブ・アプリケーションである、請求項１０記載の記憶媒体。
【請求項１３】
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
請求項１０記載の記憶媒体。
【請求項１４】
前記クライアント層環境における前記イベント駆動アプリケーションの前記エンドユーザー経験の前記相違の一つまたは複数がトレース・レベルの相違または画面レベルの相違である、請求項１０記載の記憶媒体。
【請求項１５】
前記イベント駆動アプリケーションの前記挙動モデルが状態グラフを含む、請求項１１記載の記憶媒体。
【請求項１６】
一つまたは複数の命令を具現する一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体と；
前記媒体に結合された一つまたは複数のプロセッサとを有する装置であって、前記プロセッサは、前記命令を実行するときに：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第一の集合を決定し；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現と以前の状態の構造化された表現の対応する部分であって一致しているものの一つまたは複数のペアの第二の集合を決定し；
前記第一の集合と前記第二の集合との間で前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間の一つまたは複数の一致した部分の集合を決定し；
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別するよう動作可能であり、
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第一のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の前記第二のエンドユーザー経験から、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定されるものであり、
クライアント層環境における前記イベント駆動アプリケーションの状態のエンドユーザー経験とは、そのクライアント層環境において前記イベント駆動アプリケーションの状態がエンドユーザーに与える経験である、
装置。
【請求項１７】
前記イベント駆動アプリケーションがウェブ・アプリケーションである、請求項１６記載の装置。
【請求項１８】
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
請求項１６記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、「Using  Machine  Learning  to  Improve  Visual  Comparison」という名称の2011年9月に出願された米国特許出願（代理人整理番号073338.1040;FLA11-027）、「Determining  Differences  in  an  Event-Driven  Application  Accessed  in  Different  Client-Tier  Environments」という名称の2010年3月12日に出願された米国特許出願第12/723,568号および「Web  Service  for  Automated  Cross-Browser  Compatibility  Checking  of  Web  Applications」という名称の2011年2月14日に出願された米国特許出願第13/026,899号をその全体においてかつあらゆる目的のためにここに参照によって組み込む。
【０００２】
序
本開示は、概括的には、種々のクライアント層環境においてアクセスされるイベント駆動アプリケーションにおける差を決定することに関する。
【背景技術】
【０００３】
ウェブ・アプリケーションは典型的なクライアント・サーバー・コンピューティング・モデルに従い、通例、いくつかのサーバーおよびクライアント側のコンポーネントからなる。サーバー側のコンポーネントは、ウェブ・サーバーが要求を（典型的にはウェブ・ブラウザーを通じてリモート・ユーザーから）受信するときに呼び出される。サーバー側での実行の結果として、さまざまなクライアント側のコンポーネントが動的に生成され、HTML（HyperText  Markup  Language［ハイパーテキスト・マークアップ言語］）ページの形でウェブ・ブラウザーに送り返される。ブラウザーによってレンダリングされるこれらのページは、画像、アニメーション、スタイル情報（たとえばカスケード式スタイルシート（CCS:  Cascading  Style  Sheets））およびスクリプト（たとえばジャバスクリプトまたはVBスクリプト）といったリソースを参照したり、含んでいたりする。
【０００４】
ウェブ・ブラウザーは、クライアント側コンポーネントを処理し、これらのコンポーネントのシステム資源（たとえば、ネットワーク、ディスプレイ・ファイル・システム）との対話を管理するといったさまざまな機能を扱う種々のサブシステムからなる。ブラウザーのいくつかのサブシステムにおいて、主要なコンポーネントの一つは、レイアウト・エンジンである。これは、ページ中のHTMLタグを構文解析〔パース〕して、そのページについてのCSSスタイルシートに含まれるスタイル情報を関連するエレメントに適用することによって、ウェブ・ページをレンダリングすることを受け持つ。ブラウザーは、ウェブ・ページのDOM（Document  Object  Model［文書オブジェクト・モデル］）表現をそのメモリ内に維持もし、そのページに関連付けられたスクリプトがウェブ・ページ・エレメントに問い合わせしたりウェブ・ページ・エレメントを修正したりできるようにする。DOMフォーマットについては標準的な定義があるが（http://www.w3.org/DOM/参照）、ウェブ・ブラウザーはしばしばこの標準から逸脱する。さらに、たいていのウェブ・ページは種々のブラウザーおよびプラットフォーム上で機能できるようブラウザー固有コードをもつので、異なるブラウザーによって生成されたDOMは非常に異なることがある。この理由により、単に異なるウェブ・ブラウザーにおけるDOM情報を比較するのでは、そのようなブラウザーにおいてレンダリングされたウェブ・ページを比較するときに、理想的ではないことがある。
【０００５】
二つの画像を比較するための基本的な技法は、両者のヒストグラムを比較することである。ここで、画像ヒストグラムは、画像中の特定の特徴の値の分布を表す。特に、画像の色ヒストグラムは、その画像中の色の分布、すなわち固定したリストの各色範囲（ビン）に属する色をもつ画像中のピクセルの数を表す。明らかに、二つの画像が同じであれば、両者の色分布も一致する。逆は真ではなく、二つの異なる画像が同じヒストグラムをもつことはあるが、この問題は、我々の問題領域においては特に重要ではないともいえる。
【０００６】
基本的なヒストグラム・マッチング技法は、二つの画像の間で対応するビンの間の相違を見出す。これは、小さなシフトの場合には偽陽性につながることがありうる。土山移し距離（EMD:  Earth  Movers'  Distance）を使うことでこの問題を軽減できる。EMDは二つの分布の間の距離の尺度であり、直観的には、異なるビン中の量を移すことによって二つのヒストグラムを同一にするために必要とされる最小の「作業」量からなる。画像中の小さな変化は無視できるので、EMDはコンピュータ視覚において広く使われている。同じ理由により、EMDは、無視できるような変動に対処できつつより大きな変化を捕捉することが望まれる、ウェブ・ブラウザー間でグラフィック・レンダリングを比較する問題についても好適なアプローチである。
【０００７】
イベント駆動アプリケーションは典型的には、種々のクライアント層環境（client-tier  environment）においてアクセスされうる。しかしながら、多くの場合、第一のクライアント層環境は、第二のクライアント層環境とは異なる当該イベント駆動アプリケーションのエンドユーザー経験を提供しうる。開発者はたいてい開発中は一つのブラウザーを使い、それから他のブラウザーにコードを移植する傾向があるので、これらの型の問題は決してまれではない。当初から複数のブラウザーが考えられる場合であっても、あらゆる可能なブラウザーおよびバージョンについて試験するのは難しい。さらに、そのような試験はおおむね手動の仕方で実行され、よって非常に時間がかかる（そしてしばしば忘れられる）。実際、よく知られているように、異ブラウザーの問題は、たいていのウェブ・アプリケーション開発者によって主要な問題であると考えられている。
【０００８】
レイアウト問題は、ウェブ・アプリケーションにおいて非常に一般的であり、異なるブラウザー間でのウェブ・ページのレンダリングにおいて、ユーザーの目に見える相違につながる。これらの問題は、エレメントの位置、サイズ、可視性または外観における相違として分類できる。位置およびサイズの相違は自明である。可視性の相違は、エレメントが一つまたは複数のブラウザーにおいて見えないということである。最後に、外観の問題は、エレメントのスタイルまたは内容がブラウザー間で異なる場合であると定義する。
【０００９】
機能性問題は、ウェブ・アプリケーションの機能性に関わり、しばしば異なるブラウザーによってウェブ・ページ内のスクリプト要素が実行される仕方の相違に起因する。機能性問題は典型的には、ユーザーが、ウィジェットのような特定のウェブ・ページ・エレメントにアクセスする能力を制限する。ユーザーは、影響されるエレメントを行使しようとするときに問題を同定するだろうが、これらの問題は、いかなる目に見える効果ももたないことがある（たとえば、ボタンが機能しなくても正しく表示されることがある）ので、時に同定するのが難しくなる。
【００１０】
非準拠ブラウザー：クライアント側の諸技術には関連する標準があるが、技術は進化し続けている。よって、どんな時点においても、規格にはあるがいくつかのブラウザーでは実装されていなかったり正しく実装されていなかったりする機能がある。これらの問題になる機能はしばしば知られており、ウェブ開発者が気づいて好適な回避手段をコードに設ける助けとなるよう、そのような機能のリストを維持するウェブ・サイト（たとえば、http://quirksmode.org）がある。図２のscript.jsスクリプトによって第６行で実行される検査は、そのような回避策の典型例である。
【００１１】
ブラウザーにおける追加機能：多くのブラウザーは、開発者に対してより多くの柔軟性を提供するために、標準の一部ではない追加的な機能を実装する。ウェブ開発者はこうした機能を使うのをできるだけ避けようとするが、便利のために使っている。たとえば、インターネット・エクスプローラは条件付きコメント――コメントとして無視されるようにされたコードがインターネット・エクスプローラにおいて条件付きで実行されることを許容するコメント――をサポートする。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
高品質のユーザー経験を保証するためには、異ブラウザー試験および回帰試験が典型的には取り行われる。しかしながら、そのような試験を実行する従来の仕方は、多数の視覚的比較を含み、時間がかかるばかりでなく、誤りを生じやすいことがある。
【課題を解決するための手段】
【００１３】
本発明の課題は請求項記載の手段によって解決される。
【図面の簡単な説明】
【００１４】
【図１】一つまたは複数のイベント駆動アプリケーションにアクセスする例示的なシステムを示す図である。
【図２】ある例示的な実施形態の外観を示す図である。
【図３】イベント駆動アプリケーションの一つまたは複数の挙動モデルを生成する例示的なシステムを示す図である。
【図４】クライアント層環境においてイベント駆動アプリケーションを動的にクロールすることによって生成される例示的な挙動モデルを示す図である。
【図５】それぞれイベント駆動アプリケーションの二つの挙動モデルの一部である二つの画面の間の一つまたは複数の相違を判別するために必要とされる視覚的比較の数を減らす例示的な方法を示す図である。
【図６】二つの異なるクライアント層環境における例示的なイベント駆動アプリケーションの画面の例示的な構造化された表現を示す図である。
【図７】第一の構造化された表現におけるノードを第二の構造化された表現におけるノードと比較するための例示的なアルゴリズムを示す図である。
【図８】状態の構造化された表現に関し、二つの異なるクライアント層環境において見た、イベント駆動アプリケーションの例示的な状態の画面を示す図である。
【図９】二つのクライアント層環境の間の二つの異なる状態（S1とS2）の構造化された表現におけるノードの比較を示す図である。
【図１０】二つの異なるクライアント層環境の間の二つの異なる状態（S1とS2）の例示的な画面におけるノードの比較を示す図である。
【図１１】視覚的差分検出（differencing）を実行するための二つの異なるクライアント層環境におけるノードの同定を示す図である。
【図１２ａ】第一のクライアント層環境においてイベント駆動アプリケーションを動的にクロールすることによって生成される挙動モデルの例示的な状態グラフである。
【図１２ｂ】第二のクライアント層環境において同じイベント駆動アプリケーションを動的にクロールすることによって生成される挙動モデルの例示的な状態グラフである。
【図１３】例示的なコンピュータ・システムを示す図である。
【発明を実施するための形態】
【００１５】
本稿に開示される諸実施形態は、イベント駆動アプリケーションの異ブラウザー試験（cross-browser  testing）および回帰試験（regression  testing）を実行するときに必要とされる視覚的比較の数を減らす方法を提供する。いくつかの実施形態では、それぞれのクライアント層環境について、イベント駆動アプリケーションの挙動モデルが状態グラフとして抽出され；与えられたクライアント層環境についての各状態／ノードについての画面の構造化された表現（すなわちDOM木）が、どの部分が変化しどの部分が変化しなかったかを見きわめるために、前に比較された状態／ノードの構造化された表現に対して比較される。変化していない部分は、クライアント層環境間のその後の視覚的差分検出が実行されるべきノードの集合から除去され、それにより重複し、コスト高な視覚的比較の実行の回数が削減される。
【００１６】
〈システムの概観〉
図１は、一つまたは複数のイベント駆動アプリケーション３０にアクセスするための例示的なシステム１０を示している。システム１０は、ユーザー１４、一つまたは複数のクライアント２６、一つまたは複数のイベント駆動アプリケーション３０、ネットワーク３８および一つまたは複数のサーバー４６を含む。
【００１７】
ユーザー１４は、一つまたは複数のイベント駆動アプリケーション３０にアクセスするためにクライアント２６と対話してもよい。限定ではなく例として、ユーザー１４は、人、プログラム、装置、オートメーション、他の任意の好適なエンティティまたはこれらの二つ以上の組み合わせを含んでいてもよい。
【００１８】
クライアント２６は、ユーザー１４が一つまたは複数のイベント駆動アプリケーション３０にアクセスすることを許容するために、一つまたは複数のサーバー４６に信号を送り、一つまたは複数のサーバー４６から信号を受信してもよい。限定ではなく例として、クライアント２６は組み込みコンピュータ・システム、システムオンチップ（SOC:  system-on-chip）、単一基板コンピュータ・システム（SBC:  single-board  computer  system）（たとえばコンピュータオンモジュール（COM:  computer-on-module）またはシステムオンモジュール（SOM:  system-on-module））、デスクトップ・コンピュータ・システム、ラップトップまたはノートブック・コンピュータ・システム、対話式キオスク、メインフレーム、複数コンピュータ・システムのメッシュ、携帯電話、携帯情報端末（PDA:  personal  digital  assistant）、サーバーまたはこれらの二つ以上の組み合わせであってもよい。クライアント２６は、イベント駆動アプリケーション３０にアクセスするためのいかなる好適な型の信号を送受信してもよい。限定ではなく例として、クライアント２６は、ハイパーテキスト転送プロトコル（HTTP:  hypertext  transfer  protocol）信号、ファイル転送プロトコル（FTP:  file  transfer  protocol）信号または他の任意の好適な信号を送受信してもよい。
【００１９】
クライアント２６は、ユーザー１４がクライアント２６と対話できるようにするI/Oインターフェース（図示せず）をさらに含んでいてもよい。限定ではなく例として、I/O装置はキーボード、キーパッド、マイクロホン、モニタ、マウス、プリンタ、スキャナ、スピーカー、スチール・カメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオ・カメラ、別の好適なI/Oデバイスまたはこれらの二つ以上の組み合わせを含んでいてもよい。クライアント２６のI/Oインターフェースはユーザー１４に、イベント駆動アプリケーション３０の閲覧可能な表示２２を与えてもよい。限定ではなく例として、I/O装置は、イベント駆動アプリケーション３０をモニタ上に表示することによってユーザー１４に対して閲覧可能な表示２２を提供するモニタであってもよい。クライアント２６のI/Oインターフェースはさらに、ユーザー１４が一つまたは複数のイベント１８を実行することを許容することによって、ユーザー１４がイベント駆動アプリケーション３０と対話することを許容してもよい。イベント１８は任意の好適な型の、ユーザーが開始するイベントを含みうる。限定ではなく例として、イベント１８は、マウスをクリックすること、マウスを動かすこと、キーパッド上の一つまたは複数のキーを押すこと、タッチスクリーンに触れること、トラックボールを動かすこと、マイクロホンに向かって話すこと、ユーザー１４によって開始されうる他の任意のイベントまたはこれらの二つ以上の任意の組み合わせを含んでいてもよい。
【００２０】
クライアント２６はさらに、一つまたは複数のクライアント層環境（client-tier  environment）（図示せず）を含んでいてもよい。クライアント２６のクライアント層環境は、ユーザー１４が一つまたは複数のイベント駆動アプリケーション３０にアクセスすることを許容してもよい。限定ではなく例として、クライアント層環境は、クライアント２６上にインストールされたオペレーティング・システム（OS）、クライアント２６上にインストールされたウェブ・ブラウザー、クライアント２６の一つまたは複数の設定（たとえば、クライアント２６のモニタの画面解像度など）、クライアント２６上にインストールされたウェブ・ブラウザーにおける一つまたは複数の異形（たとえば、一つまたは複数のウェブ・ブラウザー・プラグインおよび一つまたは複数のウェブ・ブラウザー設定を含む、該ウェブ・ブラウザーのバージョンおよび構成）またはこれらの二つ以上の任意の組み合わせを含んでいてもよい。
【００２１】
クライアント２６上にインストールされたOSはクライアント２６上でインストールされた一つまたは複数のウェブ・ブラウザーを走らせてもよい。限定ではなく例として、OSはウィンドウズ（登録商標）95/98/NT/XP/ビスタ/モバイルOS、OS-X（登録商標）OS、UNIX（登録商標）OS、リナックス(登録商標)OSまたは他の任意の好適なOSを含んでいてもよい。クライアント２６上にインストールされたウェブ・ブラウザーはユーザー１４がイベント駆動アプリケーション３０にアクセスすることを許容してもよい。限定ではなく例として、ウェブ・ブラウザーは、マイクロソフト（登録商標）インターネット・エクスプローラ、モジラ（登録商標）ファイアフォックス、グーグル（登録商標）クローム、オペラ（登録商標）または他の任意の好適なウェブ・ブラウザーを含んでいてもよい。個別的な実施形態では、ウェブ・ブラウザーは、一つまたは複数のサーバー要求信号３４の、クライアント２６から一つまたは複数のサーバー４６へのネットワーク３８を通じた送信を開始してもよい。サーバー要求信号３４は、ユーザー１４からの一つまたは複数のイベント１８またはイベント駆動アプリケーション３０からのウェブ・フロー（web  flow）に基づいていてもよい。限定ではなく例として、ユーザー１４はイベント駆動アプリケーション３０のためのアドレス（たとえば、一様リソース位置指定子（URL:  uniform  resource  locator）または一様リソース指示子（URI:  uniform  resource  indicator）など）をウェブ・ブラウザーのアドレス・ボックスに入力してもよく、ウェブ・ブラウザーは、イベント駆動アプリケーション３０からの内容の要求をするためにサーバー４６にサーバー要求信号３４を送ってもよい。個別的な諸実施形態では、サーバー４６は、イベント駆動アプリケーション３０に対応するコンテンツを含むサーバー応答信号４２をクライアント２６中のウェブ・ブラウザーに送信することによって、サーバー要求信号３４に応答してもよい。該コンテンツを受信後、ウェブ・ブラウザーは該コンテンツを、クライアント２６のI/Oインターフェースを通じてユーザー１４に対して表示されうるよう、閲覧可能な形にレンダリングしてもよい。
【００２２】
イベント駆動アプリケーション３０は、ユーザー１４が対話する一つまたは複数のメディア・オブジェクトを提供してもよい。限定ではなく例として、イベント駆動アプリケーション３０はウェブ・アプリケーション、ウェブ2.0アプリケーション、AJAXベースのウェブ・アプリケーションまたはメディア・オブジェクトを提供する他の任意の好適なアプリケーションを含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０はサーバー４６上で実行されてもよく、クライアント２６上のブラウザーを通じてユーザー１４が対話してもよい。限定ではなく例として、イベント駆動アプリケーション３０のためのコンテンツはプログラミング言語においてウェブ・ブラウザーに送られてもよく、ウェブ・ブラウザーが該プログラミング言語をディスプレイ上で閲覧可能にレンダリングしてもよい。それによりユーザー１４はイベント駆動アプリケーション３０と対話しうる。個別的な諸実施形態では、イベント駆動アプリケーションは、ウェブ・ブラウザーによって実行されてもよい一つまたは複数のコンテンツを含んでいてもよい。
【００２３】
イベント駆動アプリケーション３０によって提供されるメディア・オブジェクトは一つまたは複数のイベント１８またはイベント駆動アプリケーション３０からのウェブ・フローによって変更されてもよい（たとえば、メディア・オブジェクトを追加、除去または修正するなどして）。限定ではなく例として、ユーザー１４はキーボードを使ってデータを入力して、それによりイベント駆動アプリケーション３０に、ユーザー１４に提供されるメディア・オブジェクトを変更させてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０がメディア・オブジェクトを変化させるとき、変更されたメディア・オブジェクトは新しい画面（または状態）としてユーザー１４に提供されてもよい。イベント駆動アプリケーション３０はいかなる好適なプログラミング言語またはプログラミング言語の組み合わせを含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０はソース・コードまたはオブジェクト・コードを含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０は、たとえばC、Perlまたはその好適な拡張といった高水準プログラミング言語を含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０は、アセンブリー言語（または機械語コード）といった低水準プログラミング言語を含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０はJAVA(登録商標)を含んでいてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０はハイパーテキスト・マークアップ言語（HTML:  Hyper  Text  Markup  Language）、拡張可能マークアップ言語（XML:  Extensible  Markup  Language）、ジャバスクリプト（JS:  Javascript）、ジャバ・サーバー・ページ（JSP:  Java  Server  Pages）、ハイパーテキスト・プリプロセッサ（PHP:  Hypertext  Preprocessor）または他の好適なマークアップ言語を含んでいてもよい。
【００２４】
ネットワーク３８は一つまたは複数のクライアント２６を一つまたは複数のサーバー４６に接続し、一つまたは複数の信号を一つまたは複数のクライアント２６および一つまたは複数のサーバー４６との間で転送する。ネットワーク３８は、オーディオ、ビデオ、信号、データ、メッセージまたは上記の任意の組み合わせを伝送できる任意の相互接続システムを指しうる。ネットワーク３８は、公衆電話交換網（PSTN:  public  switched  telephone  network）、公共または私的データ・ネットワーク、ローカル・エリア・ネットワーク（LAN:  local  area  network）、都市圏ネットワーク（MAN:  metropolitan  area  network）、広域ネットワーク（WAN:  wide  area  network）、インターネットのような局所的・地域的または世界的通信もしくはコンピュータ・ネットワーク、有線または無線ネットワーク、企業イントラネット、他の好適な通信リンクまたは上記の任意の組み合わせを含んでいてもよい。ネットワーク３８は、一つまたは複数のサーバー４６上のイベント駆動アプリケーション３０にアクセスするための任意の好適な信号を転送してもよい。限定ではなく例として、ネットワーク３８はHTTP信号、FTP信号または他の任意の好適な信号を転送してもよい。
【００２５】
サーバー４６は一つまたは複数のイベント駆動アプリケーション３０を記憶していてもよく、さらに、ユーザー１４がサーバー４６に記憶されている一つまたは複数のイベント駆動アプリケーション３０にアクセスすることを許容するために、一つまたは複数のクライアント２６との間で信号を送受信してもよい。限定ではなく例として、サーバー４６は、組み込みコンピュータ・システム、システムオンチップ（SOC:  system-on-chip）、単一基板コンピュータ・システム（SBC:  single-board  computer  system）（たとえばコンピュータオンモジュール（COM:  computer-on-module）またはシステムオンモジュール（SOM:  system-on-module））、デスクトップ・コンピュータ・システム、ラップトップまたはノートブック・コンピュータ・システム、対話式キオスク、メインフレーム、複数コンピュータ・システムのメッシュ、携帯電話、携帯情報端末（PDA:  personal  digital  assistant）、サーバーまたはこれらの二つ以上の組み合わせであってもよい。個別的な諸実施形態では、サーバー４６はクライアント２６上にインストールされたウェブ・ブラウザーから一つまたは複数のサーバー要求信号３４を受信してもよい。個別的な諸実施形態では、サーバー４６は、イベント駆動アプリケーション３０に対応するコンテンツを含むサーバー応答信号４２をクライアント２６中のウェブ・ブラウザーに送信することによって、サーバー要求信号３４に応答してもよい。サーバー４６は、クライアント２６がイベント駆動アプリケーション３０にアクセスすることを許容するために、いかなる好適な信号を送受信してもよい。限定ではなく例として、サーバー４６はHTTP信号、FTP信号または他の任意の好適な信号を送受信してもよい。
【００２６】
個別的な諸実施形態では、イベント駆動アプリケーション３０は種々のクライアント層環境においてアクセスされてもよい。限定ではなく例として、イベント駆動アプリケーション３０はマイクロソフト（登録商標）「インターネット・エクスプローラ」ウェブ・ブラウザーを含む第一のクライアント層環境においてアクセスされてもよく、同じイベント駆動アプリケーション３０がモジラ（登録商標）「ファイアフォックス」ウェブ・ブラウザーを含む第二のクライアント層環境においてもアクセスされてもよい。個別的な諸実施形態では、イベント駆動アプリケーション３０は両方のクライアント層環境においてアクセスされうるが、イベント駆動アプリケーション３０のエンドユーザー経験は、それぞれのクライアント層環境において異なることがありうる。個別的な諸実施形態では、そのような違いは、クライアント２６上にインストールされているOS、クライアント２６上にインストールされているブラウザー、クライアント層環境における他の任意の無数の相違またはこれらの二つ以上の組み合わせによって引き起こされてもよい。
【００２７】
残念ながら、これらの異なるエンドユーザー経験は問題を起こすことがある。イベント駆動アプリケーション３０が、生起する一つまたは複数のイベント１８に基づいて提供されるコンテンツを修正することがあるからである。限定ではなく例として、イベント駆動アプリケーション３０はそのコンテンツを、イベント駆動アプリケーション３０においてユーザーがあるコンテンツを上にスクロールすることに基づいて修正してもよい。しかしながら、そのコンテンツがある種のクライアント層環境において異なる仕方で表示される場合（あるいは全く表示されない場合）、イベント１８は決して起こらないことがあり、コンテンツは修正できないことがあり、エンドユーザー経験におけるさらなる違いを引き起こすことになる。よって、エンドユーザー経験におけるわずかな相違でさえも、ずっと大きな相違に転じることがありうる。
【００２８】
図２は、ある例示的な実施形態の概観を示している。イベント駆動アプリケーション２０４は複数のクライアント層環境２１２においてクロールされて、一つまたは複数の挙動モデル２１６を生成する。いくつかの実施形態では、挙動モデル２１６は状態グラフを表していてもよい。いくつかの実施形態では、対応する状態グラフは各挙動モデル２１６から抽出されてもよい。図１２ａおよび１２ｂは、二つのクライアント層環境において例示的なイベント駆動アプリケーションについて生成された挙動モデルの例示的な状態グラフを示している。それらの挙動モデル２１６の間で一致する状態（すなわちS2、S2'）が同定されている。これらのステップは図３においてさらに例解される。
【００２９】
いくつかの実施形態では、状態の各一致対について、対応するクライアント層環境についての当該イベント駆動アプリケーションの状態の構造化された表現（たとえばDOM木）２１８が生成される。同定された状態（S2、S2'）が初期状態でなければ、一致する各状態について、前に比較された以前の状態の一致対（S1、S1'）の構造化された表現が取り出される。S1、S1'以来変化していないS2、S2'における構造化された表現のノード２２０の集合が同定される――これらのノードは後続の視覚的差分検出ステップから枝刈りされ２２２、それにより効率を高め、必要とされるコスト高な視覚的比較の回数が削減される。
【００３０】
次いでS2およびS2'にある残っているノードに対して視覚的差分検出２２４が実行され、それぞれのクライアント層環境における当該イベント駆動アプリケーションの挙動の間に何らかの意味のある相違があればそれを同定する。そのような意味のある相違は次いで、クライアント層環境間の受け容れ可能な相違として、あるいはエラーとして同定されてもよい。
【００３１】
図３は、イベント駆動アプリケーション２０４の一つまたは複数の挙動モデル２１６を生成するための例示的な実施形態２００をさらに示している。個別的な諸実施形態では、一つまたは複数のクローラー２０８を使って、イベント駆動アプリケーション２０４について、複数のクライアント層環境２１２において挙動モデル２１６が生成されうる。よって、挙動モデル２１６は自動的かつ動的に生成されうる。
【００３２】
図３のイベント駆動アプリケーション２０４は図１のイベント駆動アプリケーション３０と同様であってもよい。よって、イベント駆動アプリケーション２０４はユーザーが対話する一つまたは複数のメディア・オブジェクトを提供してもよい。
【００３３】
クローラー２０８は、イベント駆動アプリケーション２０４を動的にクロールしてもよい。個別的な諸実施形態では、クローラーの動的なクロールは、クローラー２０８が、挙動モデル２１６を生成するために動的にイベント駆動アプリケーション２０４を解析することを許容しうる。限定ではなく例として、クローラー２０８は、クロールジャックス（Crawljax）または他の任意の好適なクローラーを含んでいてもよい。個別的な諸実施形態では、クローラー２０８は、イベント駆動アプリケーション２０４の一つまたは複数のドアウェイ（doorway）（たとえばクリック可能箇所）を検出し、実行するために、クライアント（たとえば図１のクライアント２６など）上でコードを実施してもよい。よって、個別的な諸実施形態では、クローラー２０８は、クライアント上でウェブ・ブラウザーによってレンダリングされているイベント駆動アプリケーション２０４の一つまたは複数の画面を動的に解析してもよい。さらに、クローラー２０８は、一つまたは複数の実行されたドアウェイがイベント駆動アプリケーション２０４の一つまたは複数のレンダリングされる画面にどのように影響するかを解析してもよい。個別的な諸実施形態では、これは図１のイベント１８のような一つまたは複数のイベントを開始する（または発射する）（たとえば、イベントが複製される前および後にそのようなイベントがブラウザーにおける動的なDOM木にどのように影響するかを解析するために、マウスをクリックする、キーボード上でタイプする）ことを含んでいてもよい。個別的な諸実施形態では、複製される各イベントの前および後に起こる効果を解析し、記憶することによって、クローラー２０８はイベント駆動アプリケーション２０４についての挙動モデル２１６を段階的に（incrementally）構築してもよい。
【００３４】
クライアント層環境２１２は、一つまたは複数のイベント駆動アプリケーション２０４がクライアントにおいてアクセスされることを許容しうる。個別的な諸実施形態では、クライアント層環境は図１のクライアント層環境と同様であってもよい。限定ではなく例として、クライアント層環境２１２は、クライアント上にインストールされたオペレーティング・システム（OS）、クライアント上にインストールされたウェブ・ブラウザー、クライアントの一つまたは複数の設定（たとえば、クライアントのモニタの画面解像度など）、クライアント上にインストールされたウェブ・ブラウザーにおける一つまたは複数の異形（たとえば、一つまたは複数のウェブ・ブラウザー・プラグインおよび一つまたは複数のウェブ・ブラウザー設定を含む、該ウェブ・ブラウザーのバージョンおよび構成）またはこれらの二つ以上の任意の組み合わせを含んでいてもよい。
【００３５】
図示した実施形態によれば、システム２００は三つのクライアント層環境２１２を含む。個別的な諸実施形態では、各クライアント層環境２１２は異なっていてもよい。限定ではなく例として、クライアント層環境２１２ａは、「ウィンドウズ（登録商標）ビスタ」OSおよび「グーグル（登録商標）クローム」ウェブ・ブラウザーを含んでいてもよい；クライアント層環境２１２ｂは「ウィンドウズ（登録商標）XP」OS、マイクロソフト（登録商標）「インターネット・エクスプローラ」ウェブ・ブラウザーおよび特定の画面解像度を含んでいてもよい；クライアント層環境２１２ｃはUNIX（登録商標）OS、モジラ（登録商標）「ファイアフォックス」ウェブ・ブラウザーおよび該ウェブ・ブラウザー用の一つまたは複数のプラグインを含んでいてもよい。システム２００は三つのクライアント層環境２１２を示しているが、システム２００は三つより多くのクライアント層環境２１２または三つより少ないクライアント層環境２１２を含んでいてもよい。限定ではなく例として、システム２００は二つ以上のクライアント層環境２１２を含んでいてもよい。
【００３６】
図示した実施形態によれば、クローラー２０８は、イベント駆動アプリケーション２０４を解析するために、各クライアント層環境２１２においてイベント駆動アプリケーション２０４を動的にクロールしてもよい。よって、クローラー２０８は、各クライアント層環境２１２について挙動モデル２１６を生成してもよい。個別的な諸実施形態では、クローラー２０８が実施するクロールは、各クライアント層環境２１２において同一の仕方で実行されてもよい。限定ではなく例として、クローラー２０８は、各クライアント層環境２１２でイベント駆動アプリケーション２０４をクロールする間、同じ諸イベントを（それも同じ順序で）開始してもよい。よって、それらの挙動モデル２１６における唯一の相違は（そもそも相違があるとすればだが）、異なるクライアント層環境２１２によって引き起こされうる。個別的な諸実施形態では、クローラー２０８によって実施されるクロールは自動的であってもよい。限定ではなく例として、クローラー２０８は特定のクライアント層環境２１２において特定のイベント駆動アプリケーション２０４について開始されてもよく、前記クローラー２０８は、いかなるさらなる促しもなしに、その特定のクライアント層環境２１２におけるその特定のイベント駆動アプリケーション２０４についてのクロール全体（解析および挙動モデル２１６生成を含む）を実行してもよい。
【００３７】
挙動モデル２１６は、イベント駆動アプリケーション２０４に対してクローラー２０８によって実施される解析に基づいて生成されてもよい。図示した実施形態によれば、システム２００は三つの挙動モデル２１６を含む――各クライアント層環境２１２ついて一つの挙動モデル２１６である。
【００３８】
図４は、あるクライアント層環境においてイベント駆動アプリケーションを動的にクロールすることによって生成される例示的な挙動モデル３００を示す。図４の挙動モデル３００は図３の挙動モデル２１６と同様であってもよい。
【００３９】
個別的な諸実施形態では、挙動モデル３００は、図３に関して論じたように、クライアント層環境においてイベント駆動アプリケーションを動的にクロールすることによって生成されてもよい。たとえば、挙動モデル３００は図３のクローラー２０８のようなクローラーによって生成されてもよい。
【００４０】
個別的な諸実施形態では、挙動モデル３００は、部分遷移機能（partial  transition  functions）をもつ有限状態機械（FSM:  finite  state  machine）であってもよい。限定ではなく例として、挙動モデル３００はイベント駆動アプリケーションの各状態および各状態を引き起こした遷移のそれぞれを含んでいてもよい。個別的な諸実施形態では、挙動モデル３００の状態は、イベント駆動アプリケーションが特定のクライアント層環境においてアクセスされるときにユーザーによって観察される画面のことであってもよい。個別的な諸実施形態では、遷移は、観察される画面（または状態）を変化させたイベント（たとえばマウスをクリックすること、マウスを動かすこと、キーパッド上で一つまたは複数
のキーを押すこと）のことであってもよい。挙動モデル３００は、状態グラフ３０４と、該状態グラフ３０４の一つまたは複数の状態についての一つまたは複数の状態／画面モデル３０８の集合とを含んでいてもよい。図４に示した例では、状態グラフ３０４は三つのノード３１２ａ、３１２ｂおよび３１２ｃ（S0、S1およびS2）を含む。そのそれぞれは、状態／画面モデル３０８に対応する。ノード３１２ａ、３１２ｂおよび３１２ｃは状態グラフ３０４内でエッジ３１６を介して接続される。
【００４１】
状態グラフ３０４は、状態が名前を付けられていない頂点として表されている有限状態機械のグラフ表現を含んでいてもよい。個別的な諸実施形態では、状態グラフ３０４は、各状態の詳細への参照（reference）なしに、トレース（たとえば、イベントおよび該イベントによって引き起こされる画面遷移の交互のシーケンス）の集合を捕捉する。個別的な諸実施形態では、状態グラフ３０４は、特別な指定された開始頂点をもつ、ラベル付けされた有向グラフであってもよい。状態グラフは、５項組G(V,E,o,Σ,L)によって表してもよい。ここで、Vは頂点（vertex）の集合、Eは（有向）エッジ（edge）の集合、oは特別な指定された開始頂点、Σはラベルのアルファベット、L:E→Σは各エッジにΣからのラベルを割り当てるラベル付け関数である。図示した実施形態によれば、挙動モデル３００の状態グラフ３０４内の各ノード３１２は、イベント駆動アプリケーションの画面の状態を表していてもよい。さらに、挙動モデル３００の状態グラフ３０４内の各エッジ３１６は、ある画面から別の画面への遷移を引き起こすイベント（たとえば、ユーザーが開始したイベント駆動アプリケーションとの対話など）を表していてもよい。個別的な諸実施形態では、挙動モデル３００の状態グラフ３０４の各エッジ３１６は、状態間の遷移を引き起こしたイベントをもってラベル付け（図示せず）されてもよい。図４に示した例では、状態グラフ３０４のノード３１２ａは状態／画面モデル３０８に対応する――いずれも状態S0の側面を表す。
【００４２】
状態／画面モデル３０８は各状態（画面）のプログラム的表現を含んでいてもよい。個別的な諸実施形態では、状態／画面モデル３０８は、各画面の詳細を、その画面に至るまたはその画面から出ていく遷移についていかなる知識もなしに、捕捉する。個別的な諸実施形態では、状態／画面モデル３０８は根付きの、有向の、ラベル付けされた木３２２を含んでいてもよい。この木３２２は５項組T(Q,D,r,Λ,δ)によって表されてもよい。ここで、Qは頂点の集合、Dは有向エッジの集合、r∈Qは根頂点、Λはラベルの有限集合、δ:Q→ΛはQ内の各頂点にΛからのラベルを割り当てるラベル付け関数である。個別的な諸実施形態では、木T  ３２２は、ウェブ・ブラウザー上に表示される所与の状態（画面）のDOM木の抽象化されたバージョンであってもよい。さらに、画面モデル３０８は、特定のウェブ・ブラウザーまたはクライアント層環境において閲覧される状態のスクリーンショット画像表現３１８を含んでいてもよい。さらに、画面モデル３０８は、木T  ３２２の各要素Eについて、画像３１８内の要素Eの表現に関する幾何学的およびレイアウト属性のリスト３２０を含んでいてもよい。これらの属性は、要素Eがその中に表現されているような３１８のセグメントのデカルト座標、要素Eが３１８において現在見えるかどうか（可視性属性）、要素Eが３０８によって表現される画面においてクリックできるかどうか（クリック可能性属性）および画像３１８のどのレイヤーに要素Eが表現されているか（zインデックス属性）を含んでいてもよい。挙動モデル３００は単一の状態／画面モデル３０８を示しているが、挙動モデル３００は好適ないかなる数の状態／画面モデル３０８を含んでいてもよい。限定ではなく例として、挙動モデル３００は、挙動モデル３００の状態グラフ３０４のすべての状態（画面）について状態／画面モデル３０８を含んでいてもよい。
【００４３】
図５は、イベント駆動アプリケーションの二つの挙動モデルの状態のDOM表現間の一つまたは複数の相違を判別するための効率的な技法のための例示的な方法４００を示している。個別的な諸実施形態では、二つの挙動モデルのある種の状態のDOM表現の、互いに異なっていない部分を判別することによって、行われる必要のある視覚的比較の数が削減され、クライアント層環境におけるイベント駆動アプリケーションのエンドユーザー経験の、一つまたは複数の他のクライアント層環境における該イベント駆動アプリケーションの一つまたは複数の他のエンドユーザー経験に対するいかなる相違も、より効率的に判別されうる。個別的な諸実施形態では、方法４００はさらに、各挙動モデルの、一つまたは複数の他の挙動モデルに対する、一つまたは複数のペアごとの等価性を判別することをさらに含んでいてもよい。
【００４４】
ステップ４０５において、挙動モデルMおよびM'がアクセスされる。挙動モデルMは第一のクライアント層環境におけるイベント駆動アプリケーションを表し、一方、挙動モデルM'は第二のクライアント層環境におけるイベント駆動アプリケーションを表す。ステップ４１０では、状態グラフGが挙動モデルMから抽出され、状態グラフG'が挙動モデルM'から抽出される。いくつかの実施形態では、挙動モデルMおよびM'および／または状態グラフGおよびG'は、イベント駆動アプリケーションによって提供される機能の一部分を表す。
【００４５】
ステップ４１５では、G内の頂点v2が同定される。v2はG'内にマッチする頂点v2'をもつ。頂点v2は第一のクライアント層環境におけるイベント駆動アプリケーションの状態S2を表す；頂点v2'は第二のクライアント層環境におけるイベント駆動アプリケーションの状態S2'を表す。個別的な諸実施形態では、頂点v2および頂点v2'は、挙動モデルMおよびM'に対して実行されるトレース・レベルの比較の際にマッチするノードとして同定されたものであってもよい。
【００４６】
ステップ４２０では、第一のクライアント層環境におけるイベント駆動アプリケーションの状態S2の構造化された表現（D2）が頂点v2によって表現される状態（たとえば画面）に対応する。第二のクライアント層環境におけるイベント駆動アプリケーションの状態S2'の構造化された表現D2'が頂点v2'によって表現される状態（たとえば画面）に対応する。いくつかの実施形態では、構造化された表現D2およびD2'はそれぞれDOM木を含む。いくつかの実施形態では、D2は挙動モデルMから取得されてもよく、D2'は挙動モデルM'から取得されてもよい。いくつかの実施形態では、イベント駆動アプリケーションの状態S2の構造化された表現D2は状態S2の部分的な表現（partial  representation）を含んでいてもよい。
【００４７】
ステップ４２５においてS2が状態グラフGの初期状態でなければ、ステップ４３５において、両方の状態グラフGおよびG'について前に比較された状態S1およびS1'が取得される。第一のクライアント層環境におけるイベント駆動アプリケーションの状態S1の構造化された表現D1が頂点v1によって表現される状態（たとえば画面）に対応する。第二のクライアント層環境におけるイベント駆動アプリケーションの状態S1'の構造化された表現D1'が頂点v1'によって表現される状態（たとえば画面）に対応する。いくつかの実施形態では、S1は以前にS1'と比較され、ペアごとに等価であると見出されている――前に比較された状態S1およびS1'にてこ入れする（leveraging）ことによって、それらのDOM  Dの不変の部分がその後の視覚的比較操作から消去されることができる。状態S1およびS2はそれらの内容のかなりの部分を共有するはずなので、この類似性がてこ入れされることができる。状態S1おびS1'を選ぶいくつかの方法がありえ、計算コストと選択の最適さの間にさまざまなトレードオフがある（最適な状態S1およびS1'は、それぞれS2およびS2'と内容の面で最大限の重なりをもつものであろう）。S1およびS1'を選ぶための単純で効率的な発見的方法は、クロール中にS2およびS2'が探査されるに至った前の状態を選ぶことである。必然的に、互いに対応物があり、S2およびS2'を比較するより前に比較されていたはずであり、典型的にはS2およびS2'の内容と（必ずしも最大ではなくても）かなりの重なりをもつであろう。
【００４８】
ステップ４４０では、第一のクライアント層環境に対して構造化された表現D2とD1の間の一つまたは複数のペアごとの等価性の集合が判別され、DOM  D2上に投影されて（projected）、集合Δ:Δ＝Proj(D2,D2〜D1)が計算される。Proj(Di,R)は、関係Rの何らかの対に現れる、DOM  DiのDOMノードの集合である。ここで、Rは二つのDOM、DjとDkまたはその一部の間の一対一の対称的な関係である。すなわち、R⊆Dj×Dkである。
【００４９】
いくつかの実施形態では、関係D2〜D1はD2とD1の間の一対一の対称的な関係を表す。ここで、一対のDOMノード(x,y)∈D2〜D1となるのは、x∈D2、y∈D1かつMatchIndex(x,y)＝1のときでありかつそのときに限る。
【００５０】
MatchIndex(x,y)の値は0から1までの間で変わりうる。MatchIndex〔一致指数〕は、二つのDOMノードの因子ベースの比較を表す。MatchIndex(x,y)は図７においてより詳細に記述する。
【００５１】
ステップ４４５において、第二のクライアント層環境に対して構造化された表現D2'とD1'の間の一つまたは複数のペアごとの等価性の集合が判別され、DOM  D2'上に投影されて（projected）、集合Δ':Δ'＝Proj(D2',D2'〜D1')が計算される。
【００５２】
ステップ４２５に関し、状態S2が状態グラフGの初期状態であれば、ステップ４３０において、DOMノードの両方の集合ΔおよびΔ'が空集合φであると判別される。S2より前に状態グラフG内に状態がないので、アクセスされることのできるペアごとの等価はない。
【００５３】
ステップ４５０では、一つまたは複数の一致したDOMノードの集合Mが判別される。ここで、M内の一致した各ノードは、集合Δ内のノードの一つまたは複数の部分と集合Δ'内のノードの一つまたは複数の対応する部分との間のペアごとの等価を表し、これらの等価は、DOM  D2上に投影されて（projected）、集合M:M＝Proj(D2,Δ〜Δ')が計算される。
【００５４】
ステップ４５５では、D2の根〔ルート〕から出発して、M内のノードの最大の連結したDOM部分木Cが決定される：C＝Cont(M)。ウェブ・ブラウザー画面に対応するDOM  DおよびDの部分集合M（つまり、DおよびMの集合解釈においてM⊆D）が与えられれば、Cont(M)は根ノードから出発してM内のノードによって形成されることのできる、（Dの構造的な解釈での）Dの最大の連結した部分木を計算する。Dの根ノードがMの一部でない場合にはCont(M)＝φ（空の木または空集合）となることを注意しておく。
【００５５】
ステップ４６０において、部分木Sが決定される。ここで、S＝C−(Cの葉ノード)である。このステップは、画面レベルの視覚的比較が必要と見なされないD2のノードを計算する。それにより、実行する必要のあるコスト高な視覚的比較の全体的な数を減らす。
【００５６】
ステップ４６５では、D2−S内のノードの集合が、D2'−S内の対応するノードとの視覚的な画面レベルの比較（すなわち、視覚的な差分検出）のために提出される。画面レベルの比較は、比較される画面モデルの間の一つまたは複数のペアごとの相違を判別しうる。個別的な諸実施形態では、挙動モデルM1とM2の間の一つまたは複数のペアごとの相違を判別することは、対応する画面M1からのT1およびM2からのT2の間の状態レベル（または画面レベル）の比較を実行することを含んでいてもよい。この対応は、M1とM2の状態グラフのグラフ同型比較を通じて以前に確立されたものであってもよい。個別的な諸実施形態では、画面レベルの比較は、DOM木と状態／画面モデルT1および状態／画面モデルT2の両方についてのジャバスクリプト（登録商標）状態変数を取得し、それらを比較しようと試みることを含んでいてもよい。個別的な諸実施形態では、この比較は、T1とT2のDOMの間のいくつかの相違およびT1とT2の他のDOMノードの間のペアごとの一致を与えることがある。そのような一致したDOMノードの対は次いで、視覚的解析を通じた比較のために提出される。
【００５７】
下記は、視覚的比較を実行するためのアルゴリズムの一例である。
【００５８】
【表１】
0006036100.tif 000002
【００５９】
【表２】
0006036100.tif 000003
【００６０】
【表３】
0006036100.tif 000004
CrossBrowserTest〔異ブラウザー試験〕は本アルゴリズムにおける主要な関数である。これは、入力として、各ブラウザーBriについて、その基準からのマッピング（Mapi）、その画面取り込み（screen  capture）情報（SCi）および基準ブラウザーにおける変数ノード（variable  node）の集合（VN0）を取る。予備的なステップとして、アルゴリズムは、基準ブラウザーについてのスクリーンショットにおける変数ノードに対応する領域を、それらの領域によって引き起こされる可能性のある偽陽性をなくすために「グレーにする（gray  out）」（第２行）。次いで、種々のブラウザーからのデータを処理する。各ブラウザーについて、本アルゴリズムはまず、それにおけるマッピングされた変数ノードを見出し、対応する領域をやはりグレーにする（第５〜６行）。次いで、葉から根に向かって（すなわち、ボトムアップ式に）DOM木ノードを訪れていく。各DOMノード（nodej）について、マッピングに従って、基準ブラウザーにおける対応するノードnodeを取得する（第８行）。本アルゴリズムは、nodeおよびnodej両方のそれらのDOMコンテナからの相対距離を比較することによって、DOMノードにおける位置シフトがあるかどうかを検査する（第９〜１０行）。そのようなシフトを見出したら、本技法は、後述する手順VChkを呼び出すことによって、DOMコンテナに対応するスクリーンショットの領域においてそれを検証する（第１１〜１６行）。相違がVChkによって確認されれば、関連するDOMノードがMismatchiに追加される（第１７行）。
【００６１】
次に、本アルゴリズムは実際のノードを、それらのコンテナを考えることなく、可視性、サイズおよび外観の差について比較する。可視性およびサイズの違いがまず検査され、それにより（より高価な）グラフィックな比較の数を限定する。まず、アルゴリズムは、手順visibilityDiffを呼び出し、nodeおよびnodejをパラメータとして渡すことによって、可視性の違いがあるかどうかを検査する（第２３行）。スペースの理由でここに示していない手順visibilityDiffは主としてnodeおよびnodejの可視性属性を比較し、それらが一致するかどうかを示す値を返す。それらが一致しなければ、本アルゴリズムはMismatchi集合にnodejを追加し、相違が可視性に関することを指定する。可視性の差がなければ、本アルゴリズムは、nodeおよびnodejに対して手順sizeDiffを呼び出すことによってサイズの違いがあるかどうかを検査する（第２６行）。visibilityDiffと同様、手順sizeDiffは両ノードの寸法属性を比較し、それらが一致するかどうかを示す値を返す。不一致の場合には、本アルゴリズムはその相違およびその理由を記録する（第２７行）。可視性および位置の両方が一致する場合、本アルゴリズムは、再びVChkを使ってnodeおよびnodejに対応するスクリーンショットのグラフィック領域を比較する（第２８〜３１行）。
【００６２】
この場合にも、不一致は、集合Mismatchiにnodejを追加し、相違が外観に関することを指定することによって記録される。最後に、本アルゴリズムは、画面上の近隣の領域に現れる相違をまとめることによって、Mismatchi集合内の情報をクラスター化し、これにより、それらの相違は開発者に一緒に報告されることができる（第３３行）。クラスター化は手順clusterNodesにおいて、Mismatchi集合中のノードの視覚的座標を使って実行される。clusterNodesについての他の詳細の重要性は限られており、スペースの都合上、報告されない。
【００６３】
手順VChkは我々の技法の画像比較部分を実行する。VChkは入力として二つの画面取り込みおよび二つのバウンディング・ボックス――比較する必要のあるグラフィック領域の座標の集合――を取る。まず、本アルゴリズムは画面取り込みから画像の関連する部分を抽出する（第２〜３行）。次いで、EMDメトリックを使って抽出された画像を比較するEMDについての閾値として、本アルゴリズムは、画像のサイズおよび色密度に基づく種々の値を使う。ここで、色密度（CD:  color  density）は100平方ピクセル当たりの平均色数として計算される。
【００６４】
個別的な諸実施形態では、方法４００は、挙動モデルの各対形成から、画面の各対形成について反復されうる。限定ではなく例として、あるイベント駆動アプリケーションについて、三つの異なるクライアント層環境において三つの挙動モデルがクローラーによって生成される場合、方法４００は、三つの挙動モデルの各対形成のコンテキストにおいて繰り返されてもよい。よって、挙動モデルのそれぞれの間の各トレース・レベルの差（または不適合性（incompatibility））および各画面レベルの差が決定され、出力されうる。さらに、挙動モデルのそれぞれについて、それらの挙動モデルの一つまたは複数の他のものに対する一つまたは複数のペアごとの等価性が決定されてもよい。個別的な諸実施形態では、トレース・レベルの差および画面レベルの差の出力は、差を出力する前に差をソート、分類および／またはフィルタリングすることを含んでいてもよい。
【００６５】
図６は、例示的なイベント駆動アプリケーションの二つの異なるクライアント層環境における例示的な構造化された表現を示している。ここで、各構造化された表現は、挙動モデルの一つのノード（すなわち、状態グラフにおける一つの状態）から生成されたものである。図６から見て取れるように、右側の構造化された表現は、左側の構造化された表現に含まれない一つの余剰なDIVノードの追加によりわずかに異なっている。
【００６６】
図７は、第一の構造化された表現におけるノードを第二の構造化された表現におけるノードと比較するための例示的なMatchIndex〔一致指数〕アルゴリズムを示している。図７に示されるように、この公式において、xpath1およびxpath2はそれぞれノードxおよびyのxpathに対応する。関数fは、DOMノードxおよびyのさまざまな属性の間の違いの度合いを評価する距離関数である。さまざまな属性とはつまり、xおよびyの左上の隅の画面座標およびクリック可能性および可視性属性などのいくつかの属性ならびにxおよびyの子孫であるテキスト・ノードに基づくハッシュ値である。関数fの値は値0から1までの範囲であってもよい。関数f()＝1となるのは、xとyがこれらすべての属性において同一である場合でありかつその場合に限る。DOM一致を計算するためのよりゆるい基準の集合を可能にするよう、これらの属性の一つまたは複数が、fの計算から除外されることができる。類似性指数xPathSimilarity〔xPath類似性〕＝1となるのは、ノードxとyが同一のxpathをもつ場合でありかつその場合に限る。
【００６７】
いくつかの実施形態では、あらゆるDOMノードについて、以下の属性が収集される（ここで、DOMノードに関連付けられたウェブ・ページ・エレメントをDOMエレメントと呼ぶ）：
・tagname〔タグ名〕：DOMエレメントに関連付けられたタグの名称。
・id：もし定義されていれば、DOMノードの一意的な識別子。
・xpath：DOM構造中のノードのX-Path。
・coord：DOMエレメントの絶対的な画面位置。
・clickable〔クリック可能〕：DOMエレメントがクリック・ハンドラをもつ場合に真となる。
・visible〔可視〕：DOMエレメントが見える場合に真となる。
・zindex〔z指数〕：もし定義されていれば、DOMエレメントの画面スタック順。
・hash〔ハッシュ〕：もしあれば、ノードのテキスト内容のチェックサム。
【００６８】
下記に示すのは、MatchIndex（別名ComputeMatchIndex）のためのアルゴリズムの一例である。
【００６９】
【表４】
0006036100.tif 000005
MatchIndexは、これらのノード属性を使って、パラメータとして渡された各ノード対について一致指数（match  index）を計算する。まず、本アルゴリズムは、（１）idが定義されており、（２）両ノードが同じidをもつかどうかを検査する。もしそうであれば、両ノードを完全一致として識別し、一致指数ρに1を割り当て（第５行）、その値を返す。（idは開発者によって手動で割り当てられ、一意的なので、同じidをもつ二つのノードは必然的に二つのDOM木における対応するノードである。）idが一致しないまたは定義されていない場合、本アルゴリズムは両ノードのタグ名を比較する（第７行）。異なるノードが同じタグ名をもつことができるが、対応するノードは異なるタグ名をもつことはできない。したがって、タグ名が等しくない場合には、ρのデフォルト値ゼロが返される。それ以外の場合には、本アルゴリズムは、両ノードの他の属性のいくつかを使って一致指数を計算する。まず、本アルゴリズムは、両ノードについてのxpathの間の規格化されたレーベンシュタイン距離（Levenshtein  distance）を計算し、その１の補数をρ1に割り当てる（第８行）。次いで、本アルゴリズムは、両ノードの間で一致する属性coord、clickable、visible、zindexおよびhashの割合を計算し、計算された値をρ2に割り当てる（第９〜１４行）。最後に、本アルゴリズムは、好適に重み付けされたρ1およびρ2を足し合わせることによって一致指数を計算する（第１５行）。ρ1およびρ2はいずれも0から1までの間の値なので、結果として得られる一致指数ρの値も0から1までの間である。ρの計算においてρ1がなぜρ2より著しく多くの重みを与えられるかというと、二つの対応するノードは同じ、または少なくとも非常に類似したxpathをもつはずだからである。直観的には、他の属性は二つの非常に似通った一致の間の「タイ〔同順〕」の場合の決着を付けるために使われるのみである。一致を決定する際にρ2が何らかの役割を演ずるケースは非常にまれであることがありうる。換言すれば、ノードについて開発者が定義したidがない場合には、ノードのxpathは二つのノードが一致するかどうかの信頼できる指標である。
【００７０】
図８は、イベント駆動アプリケーションの二つの異なるクライアント層環境（ファイアフォックス（登録商標）８０５およびインターネット・エクスプローラ（登録商標）８１０）における状態の二つの例示的な画面を、該状態の構造化された表現との関係で示している。図８に示されるように、イベント駆動アプリケーションの一つの状態の画面は、該状態の構造化された表現では十三個のノードに対応するセクションに分割されて示されている。
【００７１】
図９は、二つの異なるクライアント層環境の間での二つの異なる状態（S1およびS2）の構造化された表現のノードの比較を示している。図９において、現在の状態S2と前に比較された状態S1との間の比較が比較されて、S1からS2に更新された構造化された表現の諸部分を判別する（S2'とS1'に関する比較も同様）。S1とS1'は前に比較され、同一であると見出されたので、S1からS2に、またS1'からS2'にかけて更新された四つのノードだけが視覚的相違について比較される必要がある。図１０は、図９において記載された比較を、二つの異なるクライアント層環境における二つの異なる状態、つまりファイアフォックス（登録商標）環境１０１０における前に比較された状態S1、インターネット・エクスプローラ（登録商標）環境１０２０における前に比較された状態S1'、ファイアフォックス（登録商標）環境１０３０における現在の状態S2およびインターネット・エクスプローラ（登録商標）環境１０４０における現在の状態S2'の例示的な画面のコンテキストにおいて例解している。図９および図１０から見て取れるように、開示されるプロセスは、構造化された表現における十三個のノードのうち九個を枝刈りすることにつながる。それにより、必要とされる視覚的差分検出処理が１３のうち４ノードまで減らされる。図１１は、視覚的差分検出のための比較が実行されうる二つの異なるクライアント層環境（ファイアフォックス（登録商標）１１０５およびインターネット・エクスプローラ（登録商標）１１１０）における４つのノードの最終的な同定を示している。
【００７２】
図１２ａは、イベント駆動アプリケーションを「グーグル（登録商標）クローム」ウェブ・ブラウザーを含む第一のクライアント層環境において動的にクロールすることによって生成される例示的な挙動モデルの状態グラフを示している。図１２ｂは、同じイベント駆動アプリケーションを「モジラ（登録商標）ファイアフォックス」ウェブ・ブラウザーを含む第二のクライアント層環境において動的にクロールすることによって生成される例示的な挙動モデルの状態グラフを示している。
【００７３】
図１３は、例示的なコンピュータ・システム１２００を示している。個別的な諸実施形態では、一つまたは複数のコンピュータ・システム１２００は本稿に記載されるまたは図示される一つまたは複数の方法の一つまたは複数のステップを実行する。個別的な諸実施形態では、一つまたは複数のコンピュータ・システム１２００は本稿に記載されるまたは図示される機能を提供する。個別的な諸実施形態では、一つまたは複数のコンピュータ・システム１２００上で実行されるソフトウェアが、本稿に記載されるまたは図示される一つまたは複数の方法の一つまたは複数のステップを実行するか、本稿に記載されるまたは図示される機能を提供する。個別的な諸実施形態は、一つまたは複数のコンピュータ・システム１２００の一つまたは複数の部分を含む。
【００７４】
本開示は、いかなる好適な数のコンピュータ・システム１２００をも考えている。本開示は、いかなる好適な物理的な形を取るコンピュータ・システム１２００をも考えている。限定ではなく例として、コンピュータ・システム１２００は組み込みコンピュータ・システム、システムオンチップ（SOC:  system-on-chip）、単一基板コンピュータ・システム（SBC:  single-board  computer  system）（たとえばコンピュータオンモジュール（COM:  computer-on-module）またはシステムオンモジュール（SOM:  system-on-module）など）、デスクトップ・コンピュータ・システム、ラップトップまたはノートブック・コンピュータ・システム、対話式キオスク、メインフレーム、複数コンピュータ・システムのメッシュ、携帯電話、携帯情報端末（PDA:  personal  digital  assistant）、サーバーまたはこれらの二つ以上の組み合わせであってもよい。コンピュータ・システム１２００は適宜、一つまたは複数のコンピュータ・システム１２００を含んでいてもよいし、一体であっても分散式であってもよいし、複数位置にまたがっていてもよいし、複数の機械にまたがっていてもよいし、一つまたは複数のネットワーク中の一つまたは複数のクラウド・コンポーネントを含みうるクラウドに存在してもよい。適切な場合には、一つまたは複数のコンピュータ・システム１２００は、本稿に記載されたまたは図示された一つまたは複数の方法の一つまたは複数のステップを、実質的に空間的または時間的な制限なしに、実行してもよい。限定ではなく例として、一つまたは複数のコンピュータ・システム１２００は、本稿に記載されたまたは図示された一つまたは複数の方法の一つまたは複数のステップを、リアルタイムで、またはバッチ・モードで実行してもよい。一つまたは複数のコンピュータ・システム１２００は、適切な場合には、本稿に記載されたまたは図示された一つまたは複数の方法の一つまたは複数のステップを、異なる時点においてまたは異なる位置において実行してもよい。
【００７５】
個別的な諸実施形態では、コンピュータ・システム１２００はプロセッサ１２０２、メモリ１２０４、記憶装置１２０６、入出力（I/O）インターフェース１２０８、通信インターフェース７１０およびバス７１２を含む。本開示は、特定の構成における特定の数の特定のコンポーネントを有する特定のコンピュータ・システムを記述し、図示しているが、この開示は、任意の好適な構成における任意の好適な数の任意の好適なコンポーネントを有する任意の好適なコンピュータ・システムを考えている。
【００７６】
個別的な諸実施形態では、プロセッサ１２０２は、コンピュータ・プログラムをなす命令のような命令を実行するためのハードウェアを含む。限定ではなく例として、命令を実行するために、プロセッサ１２０２は該命令を内部レジスタ、内部キャッシュ、メモリ１２０４または記憶装置１２０６から取得（またはフェッチ）し；それらの命令をデコードして実行し、次いで一つまたは複数の結果を内部レジスタ、内部キャッシュ、メモリ１２０４または記憶装置１２０６に書き込んでもよい。個別的な諸実施形態では、プロセッサ１２０２は、データ、命令またはアドレスのための一つまたは複数の内部キャッシュを含んでいてもよい。本開示は適宜、任意の好適な内部キャッシュの任意の好適な数を含むプロセッサ１２０２を考えている。限定ではなく例として、プロセッサ１２０２は一つまたは複数の命令キャッシュ、一つまたは複数のデータ・キャッシュおよび一つまたは複数のトランスレーション・ルックアサイド・バッファ（TLB:  translation  lookaside  buffer）を含んでいてもよい。命令キャッシュ中の命令は、メモリ１２０４または記憶装置１２０６内の命令のコピーであってもよく、命令キャッシュはプロセッサ１２０２による命令の取得を高速化してもよい。データ・キャッシュ中のデータはプロセッサ１２０２で実行される命令が作用するためのメモリ１２０４または記憶装置１２０６内のデータ；プロセッサ１２０２において実行されるその後の命令によるアクセスのための、またはメモリ１２０４または記憶装置１２０６に書き込むための、プロセッサ１２０２において実行された前の命令の結果；または他の好適なデータのコピーであってもよい。データ・キャッシュはプロセッサ１２０２による読み出しまたは書き込み動作を高速化してもよい。TLBはプロセッサ１２０２のための仮想アドレス変換を高速化してもよい。個別的な諸実施形態では、プロセッサ１２０２はデータ、命令またはアドレスのための一つまたは複数の内部レジスタを含んでいてもよい。本開示は、適切な場合には、任意の好適な数の任意の好適な内部レジスタを含むプロセッサ１２０２を考えている。適切な場合には、プロセッサ１２０２は一つまたは複数の演算論理装置（ALU:  arithmetic  logic  unit）を含んでいてもよいし；複数コア・プロセッサであってもよいし；あるいは一つまたは複数のプロセッサ１２０２を含んでいてもよい。本開示は特定のプロセッサを記載し、図示しているが、本開示は任意の好適なプロセッサを考えている。
【００７７】
個別的な諸実施形態では、メモリ１２０４は、プロセッサ１２０２が実行する命令またはプロセッサ１２０２が操作対象とするデータを記憶するメイン・メモリを含む。限定ではなく例として、コンピュータ・システム１２００は記憶装置１２０６または他の源（たとえば別のコンピュータ・システム１２００など）から命令をメモリ１２０４にロードしてもよい。次いで、プロセッサ１２０２はメモリ１２０４から該命令を内部レジスタまたは内部キャッシュにロードしてもよい。該命令を実行するために、プロセッサ１２０２は該命令を内部レジスタまたは内部キャッシュから取り出してデコードしてもよい。該命令の実行中または実行後、プロセッサ１２０２は一つまたは複数の結果（これは中間結果であっても最終結果であってもよい）を内部レジスタまたは内部キャッシュに書き込んでもよい。次いでプロセッサ１２０２はそれらの結果の一つまたは複数をメモリ１２０４に書き込んでもよい。個別的な諸実施形態では、プロセッサ１２０２は、（記憶装置１２０６やその他の場所ではなく）一つまたは複数の内部レジスタまたは内部キャッシュ内またはメモリ１２０４内の命令のみを実行し、（記憶装置１２０６やその他の場所ではなく）一つまたは複数の内部レジスタまたは内部キャッシュ内またはメモリ１２０４内のデータのみを操作対象とする。一つまたは複数のメモリ・バス（そのそれぞれはアドレス・バスおよびデータ・バスを含んでいてもよい）はプロセッサ１２０２をメモリ１２０４に結合してもよい。バス７１２は、後述するように、一つまたは複数のメモリ・バスを含んでいてもよい。個別的な諸実施形態では、一つまたは複数のメモリ管理ユニット（MMU:  memory  management  unit）はプロセッサ１２０２とメモリ１２０４との間に存在し、プロセッサ１２０２によって要求されたメモリ１２０４へのアクセスを助ける。個別的な諸実施形態では、メモリ１２０４はランダム・アクセス・メモリ（RAM）を含む。このRAMは、適切な場合には揮発性メモリであってもよい。適切な場合には、このRAMは動的RAM（DRAM）または静的RAM（SRAM）であってもよい。さらに、適切な場合には、このRAMは単一ポートまたは複数ポートRAMであってもよい。本開示は任意の好適なRAMを考えている。メモリ１２０４は、適切な場合には、一つまたは複数のメモリ１２０４を含んでいてもよい。本開示は特定のメモリを記載し、図示しているが、本開示は任意の好適なメモリを考えている。
【００７８】
個別的な諸実施形態では、記憶装置１２０６はデータまたは命令のための大容量記憶装置を含む。限定ではなく例として、記憶装置１２０６はHDD、フロッピー(登録商標)ディスク・ドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープまたはユニバーサル・シリアル・バス（USB）ドライブまたはこれらの二つ以上の組み合わせを含んでいてもよい。記憶装置１２０６は、適切な場合には、取り外し可能または非取り外し可能のメディアを含んでいてもよい。記憶装置１２０６はコンピュータ・システム１２００の内部または外部であってもよい。個別的な諸実施形態では、記憶装置１２０６は不揮発性の半導体メモリである。個別的な諸実施形態では、記憶装置１２０６は読み出し専用メモリ（ROM）を含む。適切な場合には、このROMはマスク・プログラムされたROM、プログラム可能型ROM（PROM）、消去可能なPROM（EPROM）、電気的に消去可能なPROM（EEPROM）、電気的に変更可能なROM（EAROM）またはフラッシュメモリまたはこれらの二つ以上の組み合わせであってもよい。本開示は、任意の好適な物理的形態を取る大容量記憶装置１２０６を考えている。記憶装置１２０６は、適切な場合には、プロセッサ１２０２と記憶装置１２０６との間の通信を容易にする一つまたは複数の記憶装置制御ユニットを含んでいてもよい。適切な場合には、記憶装置１２０６は一つまたは複数の記憶装置１２０６を含んでいてもよい。本開示は特定の記憶装置を記載し、図示しているが、本開示は任意の好適な記憶装置を考えている。
【００７９】
個別的な諸実施形態では、I/Oインターフェース１２０８はコンピュータ・システム１２００と一つまたは複数のI/O装置との間の通信のための一つまたは複数のインターフェースを提供するハードウェア、ソフトウェアまたは両方を含む。コンピュータ・システム１２００は適宜、これらのI/O装置の一つまたは複数を含んでいてもよい。これらのI/O装置の一つまたは複数は、人とコンピュータ・システム１２００との間のやりとりを可能にしてもよい。限定ではなく例として、I/O装置はキーボード、キーパッド、マイクロホン、モニタ、マウス、プリンタ、スキャナ、スピーカー、スチール・カメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオ・カメラ、別の好適なI/O装置またはこれらの二つ以上の組み合わせを含んでいてもよい。I/O装置は一つまたは複数のセンサーを含んでいてもよい。本開示は任意の好適なI/O装置およびそのための任意の好適なI/Oインターフェース１２０８を考えている。適切な場合には、I/Oインターフェース１２０８は、プロセッサ１２０２がこれらのI/O装置の一つまたは複数を駆動できるようにする、一つまたは複数のデバイスまたはソフトウェア・ドライバを含んでいてもよい。I/Oインターフェース１２０８は、適宜一つまたは複数のI/Oインターフェース１２０８を含んでいてもよい。本開示は特定のI/Oインターフェースを記載し、図示しているが、本開示は任意の好適なI/Oインターフェースを考えている。
【００８０】
個別的な諸実施形態では、通信インターフェース７１０は、コンピュータ・システム１２００と一つまたは複数の他のコンピュータ・システム１２００または一つまたは複数のネットワークとの間の通信（たとえばパケット・ベースの通信など）のための一つまたは複数のインターフェースを提供するハードウェア、ソフトウェアまたは両方を含む。限定ではなく例として、通信インターフェース７１０は、イーサネット(登録商標)または他の有線ベースのネットワークと通信するためのネットワーク・インターフェース・コントローラ（NIC）またはネットワーク・アダプターまたはWI-FIネットワークのような無線ネットワークと通信するための無線NIC（WNIC）または無線アダプターを含んでいてもよい。本開示は任意の好適なネットワークおよびそのための任意の好適な通信インターフェース７１０を考えている。限定ではなく例として、コンピュータ・システム１２００はアドホック・ネットワーク、パーソナル・エリア・ネットワーク（PAN）、ローカル・エリア・ネットワーク（LAN）、広域ネットワーク（WAN）、都市圏ネットワーク（MAN）またはインターネットの一つまたは複数の部分またはこれらの二つ以上の組み合わせと通信してもよい。これらのネットワークのうち一つまたは複数のネットワークの一つまたは複数の部分は有線であっても無線であってもよい。例として、コンピュータ・システム１２００は無線PAN（WPAN）（たとえばブルートゥースWPANのような）、WI-FIネットワーク、WI-MAXネットワーク、携帯電話ネットワーク（たとえばグローバル移動通信システム（GSM(登録商標)）ネットワークなど）または他の好適な無線ネットワークまたはこれらの二つ以上の組み合わせと通信してもよい。コンピュータ・システム１２００はこれらのネットワークのうち任意のもののための任意の好適な通信インターフェース７１０を含んでいてもよい。通信インターフェース７１０は適宜、一つまたは複数の通信インターフェース７１０を含んでいてもよい。本開示は特定の通信インターフェースを記載し、図示しているが、本開示は任意の好適な通信インターフェースを考えている。
【００８１】
個別的な諸実施形態では、バス７１２はコンピュータ・システム１２００のコンポーネントを互いと結合するハードウェア、ソフトウェアまたは両方を含む。限定ではなく例として、バス７１２は加速グラフィクス・ポート（AGP）または他のグラフィクス・バス、向上業界標準アーキテクチャ（EISA）バス、フロントサイド・バス（FSB）バス、HYPERTRANSPORT（HT）相互接続、業界標準アーキテクチャ（ISA）バス、INFINIBAND相互接続、低ピンカウント（LPC）バス、メモリ・バス、マイクロチャネル・アーキテクチャ（MCA）バス、周辺コンポーネント相互接続（PCI）バス、PCIエクスプレス（PCI-X）バス、シリアル先進技術アタッチメント（SATA）バス、ビデオ・エレクトロニクス標準協会ローカル（VLB）バスまたは他の好適なバスまたはこれらの二つ以上の組み合わせを含んでいてもよい。バス７１２は適宜一つまたは複数のバス７１２を含んでいてもよい。本開示は特定のバスを記載し、図示しているが、本開示は任意の好適なバスまたは相互接続を考えている。
【００８２】
本稿において、コンピュータ可読記憶媒体への言及は、構造を有する一つまたは複数の有形のコンピュータ可読記憶媒体を包含する。限定ではなく例として、コンピュータ可読記憶媒体は半導体ベースのまたは他の集積回路（IC）（たとえば、フィールド・プログラム可能なゲート・アレイ（FPGA）または特定用途向けIC（ASIC）など）、ハードディスク、HDD、ハイブリッド・ハード・ドライブ（HHD）、光ディスク、光ディスク・ドライブ（ODD）、光磁気ディスク、光磁気ドライブ、フロッピーディスク、フロッピーディスク・ドライブ（FDD）、磁気テープ、ホログラフィー記憶媒体、半導体ドライブ（SSD）、RAMドライブ、セキュア・デジタル・カード、セキュア・デジタル・ドライブまたは他の好適なコンピュータ可読記憶媒体またはこれらの二つ以上の組み合わせを適宜含みうる。本稿において、コンピュータ可読記憶媒体への言及は米国特許法第１０１条のもとで特許保護の対象とならないいかなる媒体をも除外する。本稿において、コンピュータ可読記憶媒体への言及は、米国特許法第１０１条のもとで特許保護の対象とされない限りにおいて、信号伝達の一時的な形態（伝搬する電気的または電磁的信号それ自身など）は除外する。
【００８３】
本開示は、任意の好適な記憶を実装する一つまたは複数のコンピュータ可読記憶媒体を考えている。個別的な諸実施形態では、コンピュータ可読記憶媒体は適宜、プロセッサ１２０２の一つまたは複数の部分（たとえば一つまたは複数の内部レジスタまたはキャッシュなど）、メモリ１２０４の一つまたは複数の部分、記憶装置１２０６の一つまたは複数の部分またはこれらの組み合わせを実装する。個別的な諸実施形態では、コンピュータ可読記憶媒体はRAMまたはROMを実装する。個別的な諸実施形態では、コンピュータ可読記憶媒体は揮発性または持続性メモリを実装する。個別的な諸実施形態では、一つまたは複数のコンピュータ可読記憶媒体はソフトウェアを具現する。本稿において、ソフトウェアへの言及は一つまたは複数のアプリケーション、バイトコード、一つまたは複数のコンピュータ・プログラム、一つまたは複数の実行可能物、一つまたは複数の命令、論理、機械コード、一つまたは複数のスクリプトまたはソース・コードを包含してもよく、適切な場合には逆も成り立つ。個別的な諸実施形態では、ソフトウェアは一つまたは複数のアプリケーション・プログラミング・インターフェース（API）を含む。本開示は、任意の好適なプログラミング言語またはプログラミング言語の組み合わせで書かれたまたは他の仕方で表現された任意の好適なソフトウェアを考えている。個別的な諸実施形態では、ソフトウェアはソース・コードまたはオブジェクト・コードとして表現される。個別的な諸実施形態では、ソフトウェアはたとえばC、Perlまたはその好適な拡張といった高水準プログラミング言語で表現される。個別的な諸実施形態では、ソフトウェアは、アセンブリー言語（または機械語コード）といった低水準プログラミング言語で表現される。個別的な諸実施形態では、ソフトウェアはJAVAで表現される。個別的な諸実施形態では、ソフトウェアはハイパーテキスト・マークアップ言語（HTML:  Hyper  Text  Markup  Language）、拡張可能マークアップ言語（XML:  Extensible  Markup  Language）、ジャバスクリプト（JS:  Javascript）、ジャバ・サーバー・ページ（JSP:  Java  Server  Pages）、ハイパーテキスト・プリプロセッサ（PHP:  Hypertext  Preprocessor）または他の好適なマークアップ言語で表現される。
【００８４】
本開示は、当業者が把握するであろう本稿の例示的な実施形態に対するあらゆる変更、置換、変形、改変および修正を包含する。同様に、適切な場合には、付属の請求項は、当業者が把握するであろう本稿の例示的な実施形態に対するあらゆる変更、置換、変形、改変および修正を包含する。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
一つまたは複数のコンピュータ・システムによって：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ・システムに関連する一つまたは複数のプロセッサを使って、現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第一の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第二の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、一つまたは複数のペアごとの等価性の前記第一の集合と一つまたは複数のペアごとの等価性の前記第二の集合との間の一つまたは複数の一致した部分の集合を決定し、該集合における各一致は、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間のペアごとの等価性を表し；
前記一つまたは複数のコンピュータ・システムに関連する前記一つまたは複数のプロセッサを使って、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、
前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別し、前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定される、
方法。
（付記２）
前記複数のクライアント層環境において前記イベント駆動アプリケーションを動的にクロールし；
複数のクライアント層環境のそれぞれについて、前記の動的なクロールに基づいてそのイベント駆動アプリケーションの挙動モデルを生成することをさらに含み、前記イベント駆動アプリケーションの状態の構造化された表現が前記挙動モデルに基づく、
付記１記載の方法。
（付記３）
前記イベント駆動アプリケーションがウェブ・アプリケーションである、付記１記載の方法。
（付記４）
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
付記１記載の方法。
（付記５）
前記クライアント層環境における前記イベント駆動アプリケーションの前記エンドユーザー経験の前記相違の一つまたは複数がトレース・レベルの相違または画面レベルの相違である、付記１記載の方法。
（付記６）
前記イベント駆動アプリケーションの前記挙動モデルが状態グラフを含む、付記２記載の方法。
（付記７）
前記状態グラフが根付きの有向グラフである、付記６記載の方法。
（付記８）
前記状態グラフ中の各ノードが前記イベント駆動アプリケーションの画面の状態を表し；
前記状態グラフ中の各エッジが、前記状態のうちの一つから別の状態への遷移を引き起こす、前記イベント駆動アプリケーションとのユーザー対話を表す、付記７記載の方法。
（付記９）
前記状態グラフが部分遷移機能をもつ有限状態機械（FSM）である、付記６記載の方法。
（付記１０）
ペアごとの等価性の判別が状態グラフの間の同型（isomorphism）を判別することを含む、付記６記載の方法。
（付記１１）
ペアごとの等価性の判別が状態グラフ中の状態の間の同型（isomorphism）を判別することを含む、付記６記載の方法。
（付記１２）
ソフトウェアを具現する一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体であって、前記ソフトウェアは、実行されたときに：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第一の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第二の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、一つまたは複数のペアごとの等価性の前記第一の集合と一つまたは複数のペアごとの等価性の前記第二の集合との間の一つまたは複数の一致した部分の集合を決定し、該集合における各一致は、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間のペアごとの等価性を表し；
前記一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体に関連する一つまたは複数のプロセッサを使って、前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別し、前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定される、
記憶媒体。
（付記１３）
前記複数のクライアント層環境において前記イベント駆動アプリケーションを動的にクロールし；
複数のクライアント層環境のそれぞれについて、前記の動的なクロールに基づいてそのイベント駆動アプリケーションの挙動モデルを生成することをさらに含み、前記イベント駆動アプリケーションの状態の構造化された表現が前記挙動モデルに基づく、
付記１２記載の記憶媒体。
（付記１４）
前記イベント駆動アプリケーションがウェブ・アプリケーションである、付記１２記載の記憶媒体。
（付記１５）
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
付記１２記載の記憶媒体。
（付記１６）
前記クライアント層環境における前記イベント駆動アプリケーションの前記エンドユーザー経験の前記相違の一つまたは複数がトレース・レベルの相違または画面レベルの相違である、付記１２記載の記憶媒体。
（付記１７）
前記イベント駆動アプリケーションの前記挙動モデルが状態グラフを含む、付記１３記載の記憶媒体。
（付記１８）
一つまたは複数の命令を具現する一つまたは複数のコンピュータ読み取り可能な非一時的記憶媒体と；
前記媒体に結合された一つまたは複数のプロセッサとを有する装置であって、前記プロセッサは、前記命令を実行するときに：
第一のクライアント層環境に関するイベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現にアクセスし；
現在の状態が前記イベント駆動アプリケーションの初期状態ではないことを判別し；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの以前の状態の構造化された表現にアクセスし；
前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第一の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態と以前の状態の間の一つまたは複数のペアごとの等価性の第二の集合を決定し、該決定は前記現在の状態の構造化された表現と前記以前の状態の構造化された表現の対応する部分の間の一致を見出すことを含み；
一つまたは複数のペアごとの等価性の前記第一の集合と一つまたは複数のペアごとの等価性の前記第二の集合との間の一つまたは複数の一致した部分の集合を決定し、該集合における各一致は、前記第一のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の部分と、前記第二のクライアント層環境に関する前記イベント駆動アプリケーションの現在の状態の構造化された表現の一つまたは複数の対応する部分との間のペアごとの等価性を表し；
前記第一のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第一のエンドユーザー経験の一つまたは複数の部分の縮小された集合の、前記第二のクライアント層環境における前記イベント駆動アプリケーションの現在の状態の第二のエンドユーザー経験の一つまたは複数の部分の縮小された集合に対する一つまたは複数の相違を判別するよう動作可能であり、前記第一のエンドユーザー経験の一つまたは複数の部分の前記縮小された集合は、一つまたは複数の一致した部分の前記集合に含まれる部分を消去することによって決定される、
装置。
（付記１９）
前記イベント駆動アプリケーションがウェブ・アプリケーションである、付記１８記載の装置。
（付記２０）
各クライアント層環境が：
特定のウェブ・ブラウザー；
前記特定のウェブ・ブラウザーのあるバージョン；
前記特定のウェブ・ブラウザーのある構成設定；
前記特定のウェブ・ブラウザーを走らせるコンピュータ・システムの特定のオペレーティング・システム（OS）；および
前記コンピュータ・システムのディスプレイの画面解像度のうちの少なくとも一つを含む、
付記１８記載の装置。
【図１】
0006036100.tif 000006
【図２】
0006036100.tif 000007
【図３】
0006036100.tif 000008
【図４】
0006036100.tif 000009
【図５】
0006036100.tif 000010
【図６】
0006036100.tif 000011
【図７】
0006036100.tif 000012
【図８】
0006036100.tif 000013
【図９】
0006036100.tif 000014
【図１０】
0006036100.tif 000015
【図１１】
0006036100.tif 000016
【図１２ａ】
0006036100.tif 000017
【図１２ｂ】
0006036100.tif 000018
【図１３】
0006036100.tif 000019