(57)【特許請求の範囲】
【請求項１】
マスター状態グラフを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含み、前記プロセッサは、
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を前記マスター状態グラフに統合する段階とを実行するよう構成されており、
前記プロセッサはさらに：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とを実行するよう構成されている、
電子装置。
【請求項２】
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、請求項１記載の電子装置。
【請求項３】
請求項１または２記載の電子装置であって、前記プロセッサは前記第一の作業者ノードを、前記マスター状態グラフの部分的トレースを含む初期化情報をもって初期化し、前記部分的トレースは一連のコマンドを含み、前記一連のコマンドの実行は、前記第一の作業者ノードがクロールを開始する出発点となる初期化状態を与える、電子装置。
【請求項４】
請求項１ないし３のうちいずれか一項記載の電子装置であって、前記プロセッサはさらに前記第一の作業者ノードを、境界条件を含む初期化情報をもって初期化するよう構成されており、前記境界条件は前記第一の作業者ノードが前記対話的クライアント‐サーバー・アプリケーションのクロールを停止する停止点を示す、電子装置。
【請求項５】
請求項１ないし４のうちいずれか一項記載の電子装置であって、前記プロセッサはさらに前記第一の作業者ノードから新たなジョブを受信するよう構成されており、前記新たなジョブは、前記対話的クライアント‐サーバー・アプリケーションのうち、前記第一の作業者ノードによってクロールされていない、クロールされるべき第四の部分を同定し、前記第一の作業者ノードは前記第四の部分を同定したのち前記対話的クライアント‐サーバー・アプリケーションのクロールを続ける、電子装置。
【請求項６】
請求項５記載の電子装置であって、
前記メモリが、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造を含み、
前記プロセッサはさらに、前記新たなジョブがジョブ・データ構造中に存在するかどうかを判定するよう構成されている、
電子装置。
【請求項７】
請求項６記載の電子装置であって、前記プロセッサはさらに、前記新たなジョブが前記ジョブ・データ構造中に存在する場合、前記新たなジョブを破棄するよう構成されている、電子装置。
【請求項８】
請求項６記載の電子装置であって、前記プロセッサはさらに、前記新たなジョブが前記ジョブ・データ構造中に存在しない場合、前記新たなジョブを前記ジョブ・データ構造に追加するよう構成されている、電子装置。
【請求項９】
請求項１記載の電子装置であって、前記プロセッサがさらに：
受信した結果が前記対話的クライアント‐サーバー・アプリケーションの少なくとも第四の部分全体の完了されたクロールを示すかどうかを判定する段階であって、前記第四の部分は、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造内のある第四のジョブに対応するものである、段階と；
受信した結果が、前記対話的クライアント‐サーバー・アプリケーションの少なくとも前記第四の部分全体のそのような完了されたクロールを示す場合、前記ジョブ・データ構造から前記第四のジョブを削除する段階とを実行するよう構成されている、
電子装置。
【請求項１０】
マスター状態グラフを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含み、前記メモリは、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造を含み、
前記プロセッサは、
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階であって、前記ジョブ・データ構造から優先度が最高のジョブを選択することによって前記第一のジョブを選択する、段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を前記マスター状態グラフに統合する段階とを実行するよう構成されている、
電子装置。
【請求項１１】
請求項１記載の電子装置であって、
前記メモリが、前記対話的クライアント‐サーバー・アプリケーションをクロールするために利用可能な複数のコンピューティング・ノードを同定する資源データ構造を含み、
前記プロセッサがさらに、前記資源データ構造中で最良一致であるものを選択することにより、前記資源データ構造から、選択されたジョブを実行する前記第一の作業者ノードを選択するよう構成されている、
電子装置。
【請求項１２】
請求項１記載の電子装置であって、前記プロセッサは前記結果を統合する段階を：
前記結果に含まれる返された状態を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することによって行う、
電子装置。
【請求項１３】
請求項１記載の電子装置であって、前記プロセッサは前記結果を統合する段階を；
前記結果に含まれる返された状態間遷移を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することによって行う、
電子装置。
【請求項１４】
請求項１記載の電子装置であって、前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階が、前記プロセッサが圧縮されたローカル状態グラフを圧縮解除することを含む、電子装置。
【請求項１５】
請求項１記載の電子装置であって、前記プロセッサがさらに：
前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造が空であるかどうかを判定する段階と；
諸作業者ノードに割り当てられたすべてのジョブが実行を完了しているかどうかを判定する段階と；
前記ジョブ・データ構造が空であり、かつ諸作業者ノードに割り当てられたすべてのジョブが実行を完了している場合、前記対話的クライアント‐サーバー・アプリケーションがクロールされ終わったと判定する段階とを実行するよう構成されている、
電子装置。
【請求項１６】
対話的クライアント‐サーバー・アプリケーションのクロールを協調させる方法であって：
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を、前記対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含むマスター状態グラフに統合する段階とを含み、
当該方法がさらに：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とを含む、
方法。
【請求項１７】
請求項１６記載の方法であって、前記第一の作業者ノードを、前記マスター状態グラフの部分的トレースを含む初期化情報をもって初期化する段階をさらに含み、前記部分的トレースは一連のコマンドを含み、前記一連のコマンドの実行は、前記第一の作業者ノードがクロールを開始する出発点となる初期化状態を与える、方法。
【請求項１８】
請求項１６または１７記載の方法であって、前記第一の作業者ノードから新たなジョブを受信する段階をさらに含み、前記新たなジョブは、前記対話的クライアント‐サーバー・アプリケーションのうち、前記第一の作業者ノードによってクロールされていない、クロールされるべき第四の部分を同定し、前記第一の作業者ノードは前記第四の部分を同定したのち前記対話的クライアント‐サーバー・アプリケーションのクロールを続ける、方法。
【請求項１９】
コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記コンピュータ実行可能命令はプロセッサに：
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を、前記対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含むマスター状態グラフに統合する段階とを実行させるものであり、
前記コンピュータ実行可能命令はプロセッサにさらに：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とを実行させるものである、
媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概括的には対話的クライアント‐サーバー・アプリケーションに関し、より詳細には、対話的クライアント‐サーバー・アプリケーションの分散式並列クロールを調整する技法に関する。
【背景技術】
【０００２】
現代のウェブ２．０アプリケーションは、ユーザーに対して豊かで、動的で、対話的なインターフェースを提示するために、AJAXおよびフラッシュのような技術を利用する。しかしながら、手動試験に基づく従来の有効確認技法は、そのようなウェブ・アプリケーションの豊かで、ステートフルな振る舞いを捕捉または探査するには全くもって不十分である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
一部の近年の研究は、動的ウェブ２．０アプリケーションの振る舞いを包括的に探査、捕捉および有効確認するためにカスタムAJAXウェブ・アプリケーション・クローラーを使うことを提案している。しかしながら、そのようなクロールは典型的には非常に計算集約的であり、よって実際上の配慮のため、現実のクロールは、ウェブ・アプリケーションの真の振る舞い空間のごく一部のみに限定されてしまう。
【課題を解決するための手段】
【０００４】
ある実施形態では、電子装置がメモリおよび該メモリに結合されたプロセッサを含む。メモリはマスター状態グラフを含む。マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含む。プロセッサは、第一のジョブを第一の作業者ノードに送り、第二のジョブを第二の作業者ノードに送り、対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信し、対話的クライアント‐サーバー・アプリケーションをクロールした結果をマスター状態グラフに統合するよう構成される。第一のジョブは、対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む。第二のジョブは、対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む。第一の作業者ノードおよび第二の作業者ノードは対話的クライアント‐サーバー・アプリケーションを並列にクロールする。
【０００５】
もう一つの実施形態では、対話的クライアント‐サーバー・アプリケーションのクロールを協調させる方法が、第一のジョブを第一の作業者ノードに送り、第二のジョブを第二の作業者ノードに送り、対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信し、対話的クライアント‐サーバー・アプリケーションをクロールした結果をマスター状態グラフに統合することを含む。第一のジョブは、対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む。第二のジョブは、対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む。第一の作業者ノードおよび第二の作業者ノードは対話的クライアント‐サーバー・アプリケーションを並列にクロールする。マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含む。
【０００６】
さらにもう一つの実施形態では、製造物がコンピュータ可読媒体および該コンピュータ可読媒体に担持されるコンピュータ実行可能命令を含む。命令はプロセッサによって読み取り可能である。命令は、読み出され、実行されたとき、プロセッサに、第一のジョブを第一の作業者ノードに送り、第二のジョブを第二の作業者ノードに送り、対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信し、対話的クライアント‐サーバー・アプリケーションをクロールした結果をマスター状態グラフに統合することをさせる。第一のジョブは、対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む。第二のジョブは、対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む。第一の作業者ノードおよび第二の作業者ノードは対話的クライアント‐サーバー・アプリケーションを並列にクロールする。マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含む。
【図面の簡単な説明】
【０００７】
本発明およびその特徴および利点のより完全な理解のために、ここで付属の図面と関連して以下の説明を参照する。
【図１】一つまたは複数の対話的クライアント‐サーバー・アプリケーションの並列クロールのためのサービスを提供するよう構成された分散コンピューティング・システムの例示的な実施形態を示す図である。
【図２】マスター・ノードおよび一つまたは複数の作業者ノードを含む、対話的クライアント‐サーバー・アプリケーションの分散式並列クロールのための構成の例示的な実施形態を示す図である。
【図３】動的なウェブ・アプリケーションの分散式並列クロールのための構成の動作の例示的な実施形態を示す図である。
【図４】遷移グラフ・モデルの図解を通じて例示的な作業者ノードの動作の結果を示す図である。
【図５】分散コンピューティング・システムによってクロールされうる例示的な動的ウェブ・アプリケーションの画面遷移グラフである。
【図６ａ】空の画面遷移グラフがどのようにして作業者ノードからの返されたトレースと組み合わされうるかを示す図である。
【図６ｂ】マスター・ノードがどのようにして、別の作業者ノードの結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示す図である。
【図６ｃ】マスター・ノードがどのようにして、もう一つの別の作業者ノードの結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示す図である。
【図７】少なくとも部分的にクロールされた動的ウェブ・アプリケーションの画面の文書オブジェクト・モデル・ツリーのマークされたバージョンの例である。
【図８ａ】動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの分散式並列クロールを調整するための方法の例示的な実施形態を示す図の一部である。
【図８ｂ】動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの分散式並列クロールを調整するための方法の例示的な実施形態を示す図の一部である。
【図９】並列の分散環境において動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールを行うための方法の例示的な実施形態を示す図である。
【図１０】対話的クライアント‐サーバー・アプリケーションの一部のクロールから生成された状態グラフを、該アプリケーションのマスター状態グラフと同期させるための方法の例示的な実施形態を示す図である。
【図１１】動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションのクロールにおける状態情報の圧縮のための方法の例示的な実施形態を示す図である。
【図１２】画面と参照画面の間の変化をマークするための方法の例示的な実施形態を示す図である。
【発明を実施するための形態】
【０００８】
図１は、分散式コンピューティング・システム１００の例示的な実施形態である。ある実施形態では、分散式コンピューティング・システム１００は、一つまたは複数の対話的クライアント‐サーバー・アプリケーションの並列クロールのためのサービスを提供する。ある実施形態では、そのような対話的クライアント‐サーバー・アプリケーションはウェブ・アプリケーション１０４を含んでいてもよい。そのようなウェブ・アプリケーション１０４は動的ウェブ・アプリケーションを含んでいてもよい。ひとたびその動作およびスコープを決定するようクロールされてから、ウェブ・アプリケーション１０４はその後試験されてもよい。
【０００９】
分散式コンピューティング・システム１００は、複数のネットワーク接続されたコンピューティング資源を含むいかなる分散式コンピューティング環境１０６を含んでいてもよい。そのようなコンピューティング資源は異なる種類のものを含んでいてもよい。さまざまな実施形態において、コンピューティング資源の接続トポロジーは未知または不規則であってもよく、分散式コンピューティング・システム１００において実装されるサービスが当座の計算タスクを実行するために特定のトポロジーを利用できなくてもよい。
【００１０】
ある実施形態では、分散式コンピューティング・システム１００はクラウド・コンピューティングのフレームワークまたは環境において実装されてもよい。分散式コンピューティング・システム１００は一つまたは複数のコンピューティング・ノードによって実装されてもよい。一つのそのようなコンピューティング・ノードは、マスター・ノード１１０として指定されてもよく、他のコンピューティング・ノードは作業者ノード１１２として指定されてもよい。作業者ノード１１２および／またはマスター・ノード１１０は、これに限られないが、サーバー、コンピュータまたはその任意の集合を含むいかなる好適な電子装置において実装されてもよい。作業者ノード１１２およびマスター・ノード１１０は、メモリに結合されたプロセッサおよび命令を含んでいてもよい。該命令は、前記プロセッサによる実行のために前記メモリにロードされるとき、本稿に記載される機能を実行しうる。作業者ノード１１２およびマスター・ノード１１０は、ネットワーク構成を通じるなどして、通信上互いに結合されていてもよい。ネットワーク構成は、異なる種類のものを含んでいても均質なものであってもよく、分散式コンピューティング環境１０６によって提供されてもよい。作業者ノード１１２とマスター・ノード１１０を通信上結合するためにいかなる好適なネットワーク構成が使用されてもよい。分散式コンピューティング・システム１００の作業者ノード１１２およびマスター・ノード１１０は、広域ネットワーク、ローカル・エリア・ネットワーク、イントラネット、インターネットまたはこれらの要素の任意の結合といった、いかなる好適なネットワークでネットワーク接続されてもよい。
【００１１】
作業者ノード１１２および／またはマスター・ノード１１０は、並列な仕方で達成されるべきタスクに関連付けられた計算負荷を共有するよう構成されていてもよい。たとえば、作業者ノード１１２は一つまたは複数のウェブ・アプリケーション１０４を試験するために並列に動作してもよい。そのようなウェブ・アプリケーションは一つまたは複数のウェブ・サイト上で動作したり、あるいは一つまたは複数のウェブ・サイトによってホストされたりしてもよい。そのような試験を達成するために、作業者ノード１１２および／またはマスター・ノード１１０は通信上ウェブ・アプリケーション１０４に結合されていてもよい。マスター・ノード１１０はウェブ・アプリケーション１０４に通信上結合され、ウェブ・アプリケーション１０４を試験するために他の作業者ノード１１２の動作を整理するよう構成されていてもよい。
【００１２】
一つまたは複数の動的ウェブ・アプリケーション１０４を試験する一環として、作業者ノード１１２およびマスター・ノード１１０はウェブ・アプリケーション・クロール・サービスを動作させてもよい。たとえば、ウェブ・アプリケーション１０４の開発者はそのようなウェブ・アプリケーション１０４を試験にかけてもよく、ここで、分散式コンピューティング・システム１００の作業者ノード１１２および／またはマスター・ノード１１０はそのような動的ウェブ・アプリケーション１０４をクロールしてそのスコープおよび動作を判別してもよく、判別されたスコープおよび動作がそのような試験で使われてもよい。そのようなウェブ・アプリケーションは、AJAX、フラッシュまたは豊かで動的で対話的なユーザー経験を提供するよう構成された他の技術といった技術を使うウェブ２．０アプリケーションを含んでいてもよい。そのような動的なウェブ・アプリケーションはステートフルな振る舞いおよび可能性としては無限個の動的に生成された画面を有していてもよい。そのような振る舞いは、所与の生成された画面またはウェブ・ページが、内容または動作において、その画面またはウェブ・ページのロード、動作または生成を引き起こした特定のアクションに依存しうるという意味でステートフルであってもよい。
【００１３】
分散式コンピューティング・システム１００は、作業者ノード１１２およびマスター・ノード１１０のそれぞれで走るミドルウェアを含んでいてもよい。そのようなミドルウェアは、マスター・ノード１１０を各作業者ノード１１２とインターフェースをもたせるソフトウェアとして実装されてもよい。ミドルウェアは、コンピューティング・タスクの並列化を可能にするよう構成されていてもよい。作業者ノード１１２とマスター・ノード１１０の間の通信は、時間またはネットワークまたは処理資源の面で非常に高価であることがある。よって、分散式コンピューティング・システム１００のミドルウェアは、作業者ノード１１２とマスター・ノード１１０の間の通信を最小限にしてもよい。
【００１４】
分散式コンピューティング・システム１００の計算資源は、動的ウェブ・アプリケーション１０４をクロールすることによっててこ入れされるよう構成されてもよい。分散式コンピューティング・システム１００は、クロールを並列化し、複数のコンピューティング・ノードに分散させるよう構成されていてもよい。その結果、クロールは並列化を助けるようにされるべきである。分散式コンピューティング・システム１００は、クロールの並列化を、トポロジーまたはアーキテクチャとは独立な仕方で実施するよう構成されていてもよい。いくつかの実施形態では、分散式コンピューティング・システム１００のノードは任意の接続トポロジーを有していてよく、その接続トポロジーは動的アプリケーション１０４の並列クロールのために作業者ノード１１２および／またはマスター・ノード１１０を組織化するアプリケーションから隠されていてもよい。分散式コンピューティング・システム１００は、コンピューティング・ノード１１０、１１２の間の通信を最小限にするよう構成されてもよい。そのようなノードは、互いに物理的に遠隔であることがあり、その結果、通信が高価となることがあるからである。作業者ノード１１２は、状態、遷移および新しいジョブを含むクロールの結果を返すよう構成されてもよい。分散式コンピューティング・システム１００は、メイン・コンピューティング・ノード１１０の動作を通じて、クラウドまたは分散式コンピューティング・システム１００におけるさまざまな作業者ノード１１２からのクロールの結果を再統合するよう構成されていてもよい。
【００１５】
図２は、マスター・ノード１１０および一つまたは複数の作業者ノード１１２を含む、対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールのためのアーキテクチャの例示的実施形態である。マスター・ノード１１０は通信上作業者ノード１１２に結合されていてもよく、それぞれ、ウェブ・アプリケーション１０４を動的にクロールするために一つまたは複数のウェブ・アプリケーション１０４に通信上結合されていてもよい。より多くの作業者ノードがマスター・ノード１１０およびウェブ・アプリケーション１０４に結合されていてもよいが、図示していない。作業者ノード１１２およびマスター・ノード１１０はネットワーク２３０を通じて通信上結合されていてもよい。ネットワーク２３０は、図１の分散式コンピューティング環境１０６のネットワークまたはクラウドにおいて具現されていてもよい。作業者ノード１１２は、マスター・ノード１１０の指揮のもと、他の作業者ノードと並列にウェブ・アプリケーション１０４をクロールするよう構成されていてもよい。
【００１６】
マスター・ノード１１０は、メモリ２０６に結合されたプロセッサ２０８を含んでいてもよい。マスター・ノード１１０は、マスター・クローラー・アプリケーション２２０を含んでいてもよい。マスター・クローラー・アプリケーション２２０は、プロセッサ２０８によって実行されるよう構成されていてもよく、メモリ２０６に存在してもよい。マスター・ノード１１０は、マスター・クローラー・アプリケーション２２０を通じてウェブ・アプリケーション１０４および作業者ノード１１２と通信上結合されていてもよい。
【００１７】
マスター・ノード１１０は、クロールされるべきペンディング・ジョブを表すジョブ待ち行列２３２を含んでいてもよい。ジョブはクロールされるべきウェブ・アプリケーション１０４の部分の記述を含んでいてもよい。マスター・ノード１１０は、割り当てられるクロール・ジョブ割り当てに利用可能な作業者ノード１１２を指示する資源待ち行列２３４を含んでいてもよい。資源待ち行列２３４およびジョブ待ち行列２３２の中身の入れ方（population）の例はのちに論ずる。クロール・ジョブは、作業者ノード１１２によって探査されるべきウェブ・アプリケーション１０４の部分の指示を含んでいてもよい。マスター・ノード１１０はマスター状態グラフ２３６のコピーを保持してもよい。マスター状態グラフ２３６はウェブ・アプリケーション１０４の画面遷移グラフ・モデルのマスター・コピーであってもよく、ウェブ・アプリケーション１０４をクロールした結果を含んでいてもよい。
【００１８】
作業者ノード１１２は、メモリ２１０に結合されたプロセッサ２１２を含んでいてもよい。作業者ノード１１２は作業者クローラー・アプリケーション２１８を含んでいてもよい。作業者クローラー・アプリケーション２１８は、プロセッサ２１２によって実行されるよう構成されていてもよく、メモリ２１０に存在してもよい。作業者ノード１１２は、作業者クローラー・アプリケーション２１８を通じてウェブ・アプリケーション１０４およびマスター・クローラー・アプリケーション２２０と通信上結合されていてもよい。
【００１９】
ノードのプロセッサ２０８、２１２はたとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（DSP:  digital  signal  processor）、特定用途向け集積回路（ASIC:  application  specific  integrated  circuit）またはプログラム命令を解釈および／または実行するおよび／またはデータを処理するよう構成された他の任意のデジタルまたはアナログ回路であってもよい。プロセッサ２０８、２１２はプログラム命令を解釈および／または実行してもよいし、作業者ノード１１２および／またはマスター・ノード１１０のそれぞれのメモリ２０６、２１０に記憶されたデータを処理してもよい。メモリ２０６、２１０は、プログラム命令および／またはデータをある期間にわたって保持するよう構成されたいかなるシステム、デバイスまたは装置（たとえばコンピュータ可読媒体）であってもよい。
【００２０】
マスター・ノード１１０および作業者ノード１１２は、ウェブ・アプリケーション１０４をクロールするよう構成されていてもよい。ウェブ・アプリケーション１０４の一部または全部の部分が、マスター・ノード１１０および作業者ノード１１２によって閲覧、実行または解析されてもよい。各ノード２１８、２２０は、ウェブ・アプリケーション１０４の一部分に関するデータ２２２、２２４を含んでいてもよい。そのようなデータ２２２、２２４は、ウェブ・アプリケーション１０４との通信またはウェブ・アプリケーション１０４の使用を可能にする情報を含んでいてもよい。たとえば、データ２２２、２２４は、文書オブジェクト・モデル、資源情報またはウェブ・アプリケーション・バージョンを含んでいてもよい。そのようなアプリケーションはブラウザー・アプリケーション２２６、２２８を含んでいてもよく、作業者クローラー・アプリケーション２１８またはマスター・クローラー・アプリケーション２２０の一部として実装されてもよい。ブラウザー・アプリケーション２２６、２２８は、ウェブ・アプリケーションからコンテンツをロードするためのいかなる好適なアプリケーションにおいて実装されてもよい。ブラウザー・アプリケーション２２６、２２８はウェブ・クライアントとして実装されてもよい。ブラウザー・アプリケーション２２６、２２８は代替的に、ブラウザー２２６、２２８がクローラー・アプリケーション内に実装されるのでない場合、クローラー・アプリケーション２１８、２２０と協調して機能するよう構成されてもよい。ある実施形態では、クローラー・アプリケーション２１８、２２０はジャバ言語で実装されてもよい。クローラー・アプリケーション２１８、２２０はブラウザー・アプリケーション２２６、２２８と協調して動作してもよい。クローラー・アプリケーション２１８、２２０はウェブ・アプリケーション１０４をナビゲートするよう構成されてもよく、クリック、マウスオーバー、データ入力またはウェブ・アプリケーション１０４のユーザーのアクションをシミュレートまたは再現しうる他の任意の操作といったさまざまな動作をプログラム的に実行してもよい。クローラー・アプリケーション２１８、２２０は、ウェブ・アプリケーション１０４に適用される種々のユーザー入力を与えられたときのウェブ・アプリケーション１０４の可能な動作を探査するよう構成されてもよい。
【００２１】
各ノード上で走るクローラー・アプリケーション２１８、２２０は、ウェブ・アプリケーション１０４がクロールされ、試験され、使用される際のウェブ・アプリケーション１０４の振る舞いをモデル化しうる画面遷移グラフを生成するよう構成されていてもよい。例示的な画面遷移モデルが図５に見出されうるが、これについては後述する。そのような画面遷移グラフにおいて、状態を表すためにドットまたはノードが使用されてもよい。ここで、状態とは、ブラウザー上で観察される画面を表す。このように、画面遷移グラフは、対話的クライアント‐サーバー・アプリケーションの状態グラフであってもよい。状態間の遷移はさまざまな可能なユーザー動作を表していてもよい。たとえば、ボタン・クリックは、ある状態にあるウェブ・アプリケーションを異なる状態にジャンプさせうる。該異なる状態では、ウェブ・アプリケーションについての利用可能な動作は変化している。そのような画面遷移モデルが与えられると、所望される動作または他の診断アクションを検証するために、その後そのモデル上で有効確認検査が実行されうる。
【００２２】
クローリング・アプリケーションによって使用されるクロール情報は、作業者クローラー・アプリケーション２１８のようなクロールするアプリケーションの各インスタンスに提供されてもよい。それにより、分散式コンピューティング・システム１００は、試験対象のウェブ・アプリケーション１０４の並列クロールを提供しうる。たとえば、クロール明細および／またはクロール・データがクロール・アプリケーション２１８に与えられてもよい。クロール明細はウェブ・アプリケーション１０４の形、ウェブ・アプリケーション１０４の期待される振る舞いまたはウェブ・アプリケーション１０４を使うことに関する他の任意の好適な情報を指示してもよい。クロール・データは、ブラウザー２２６によって取られるべき行動、入力されるべきデータ２２２または取るべき行動を指示する他の任意の情報を含んでいてもよい。たとえば、クロール明細によって定義される所与のページについて、クロール・データは、任意の数のマウスオーバーがウェブ・アプリケーション１０４のさまざまな個別要素に対して実施されるべきであることを指示してもよい。
【００２３】
マスター・クローラー・アプリケーション２２０は作業者ノード１１２および分散式コンピューティング・システムにおける他の作業者ノード１１２のクロールを調整するよう構成されてもよい。マスター・クローラー・アプリケーション２２０は、作業者クローラー・アプリケーション２１８のさまざまなインスタンスと組み合わさって、上述した分散式コンピューティング・システム１００のミドルウェアの役割を果たすよう構成されてもよい。マスター・クローラー・アプリケーション２２０は、ウェブ・アプリケーション１０４をクロールすることに関係する、マスター・ノード１１０の機能の一部または全部を実行するよう構成されていてもよい。作業者クローラー・アプリケーション２１８は、ウェブ・アプリケーション１０４をクロールすることに関係する、作業者ノード１１２の機能の一部または全部を実行するよう構成されていてもよい。さまざまな実施形態において、マスター・クローラー・アプリケーション２２０および作業者クローラー・アプリケーション２１８の機能は、ウェブ・アプリケーション１０４のクロールの要求に依存して、異なる仕方で分割されてもよい。
【００２４】
図３は、分散式コンピューティング・システム１００内のさまざまなノードの動作の例を示している。図３は、対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールのためのアーキテクチャの動作の例示的な実施形態を示しうる。分散式コンピューティング・システム１００は、本稿に記載されるタスクのために利用可能なだけの数の作業者ノード１１２を含んでいてもよい。マスター・ノード１１０は作業者ノード１１２にコマンドを発してもよく、作業者ノード１１２のほうは状態情報および結果をマスター・ノード１１０に提供してもよい。
【００２５】
マスター・ノード１１０は、クロール・ジョブ割り当てのようなコマンドを作業者ノード１１２に発してもよい。ここで、資源待ち行列２３４からの個々の作業者ノード１１２が、ジョブ待ち行列２３２に由来する個々のジョブを割り当てられる。作業者ノード１１２は、該作業者ノード１１２の状態およびクロール結果をマスター・ノード１１０に通信し返してもよい。そのような情報は、作業者ノード１１２に割り当てられたさまざまなクロール・ジョブの完了状態を含んでいてもよい。この情報は、そのようなクロール・ジョブからの部分的結果をも含んでいてもよい。そのような情報は、作業者ノード１１２によって発見された新しいクロール・ジョブをも含んでいてもよい。作業者ノード１１２は、ウェブ・アプリケーション１０４の状態において未使用のアクションを判別することによって、新たなクロール・ジョブを発見するよう構成されていてもよい。そのようなアクションが未使用であるというのは、代わりに代替的なアクションが選ばれたからでありうる。新たなクロール・ジョブは、ウェブ・アプリケーションをクロールするための開始位置を有していてもよい。ここで、クロールは以前に未使用だったアクションを利用してもよい。マスター・ノード１１０は、諸作業者ノード１１２から受信された結果を、マスター状態グラフ２３６にマージするよう構成されていてもよい。
【００２６】
上述したように、各作業者ノード１１２は、クローラー・アプリケーションの一部または全部のコピーおよびクロール構成設定情報を有していてもよい。作業者ノード１１２は割り当てられたクロール・タスクを実行し、クロール中に発見された新たなクロール・ジョブを生成し、クロール結果および生成されたジョブをマスター・ノード１１０を報告してもよい。新たなクロール・ジョブは、作業者ノード１１２がクロール活動を実施するにつれて発見される、探査されるべき動的ウェブ・アプリケーション１０４の追加的な部分またはオプションを含んでいてもよい。
【００２７】
分散式コンピューティング・システム１００は、動的ウェブ・アプリケーションの分散式の並列クロールのために同期方式を利用するよう構成されていてもよい。そのような方式は、マスター・ノード１１０と作業者ノード１１２の間の、マスター状態グラフ２３６のような、ウェブ・アプリケーション１０４のクロールの結果に関する情報の同期を可能にしてもよい。そのような方式の一環として、マスター・ノード１１０および作業者ノード１１２は、マスター状態グラフ２３６のような情報を同期させるためのそのようなエンティティ間の通信オーバーヘッドを減らすよう構成されていてもよい。諸作業者ノード１１２は、独立して、動的ウェブ・アプリケーションの自分の部分をクロールすることに続くよう構成されていてもよい。作業者ノード１１２は、定期的に、マスター・ノード１１０に、作業者ノード１１２の視点から見た状態グラフについての情報を提供してもよい。そのような情報は、部分的な状態グラフを含んでいてもよい。各作業者ノード１１２は、マスター・ノード１１０が見る完全なマスター状態グラフ１１０をもたなくてもよい。代わりに、各作業者ノード１１２は、その作業者ノードがウェブ・アプリケーション１０４をクロールする間に発見したウェブ・アプリケーション１０４の新たな部分に加えて、その作業者ノード１１２を初期化する際に使われたウェブ・アプリケーション１０４の部分を反映する部分的な状態グラフを有していてもよい。そのような部分的な状態グラフは、新たに発見された状態、遷移またはジョブのような情報を含んでいてもよい。部分的な状態グラフは、前の同期が実施されて以降に発見された情報を含んでいてもよい。作業者ノード１１２は部分的状態グラフおよび／または新たに発見されたジョブを定期的に送信する、部分的状態グラフおよび／または新たに発見されたジョブをクロール・ジョブの完了時に送信する、あるいは部分的状態グラフおよび／または新たに発見されたジョブを発見される都度送信する、の間で選択してもよい。そのような選択は、マスター・ノード１１０によって提供される動作パラメータに基づいてなされてもよい。さらに、作業者ノード１１２は、そのような状態の諸セットを、マスター・ノード１１０に送信する前に圧縮するよう構成されていてもよい。
【００２８】
マスター・ノード１１０は、種々の作業者ノード１１２の間で観察される作業の重複があればそれをなくすことを受け持っていてもよい。そのような重複は、マスター・ノード１１０が諸作業者ノード１１２から受領される結果を比較することによって観察されてもよい。ここで、そのような結果は、部分的状態グラフを含んでいてもよい。マスター・ノード１１０は、さまざまな作業者ノード１１２から受領されるデータをマージしつつ、ウェブ・アプリケーション１０４の動作を示す重複する状態およびトレースを除去するよう構成されてもよい。マスター・ノード１１０は、ジョブ待ち行列２３２内の重複するジョブをパージするよう構成されていてもよい。ここで、そのようなジョブは、動的ウェブ・アプリケーション１０４のすでにクロールされた部分を表す。マスター・ノード１１０はまた、作業者ノード１１２にパージ信号を送るよう構成されていてもよい。ここで、作業者ノード１１２は、マスター・ノード１１０によって重複と判定されたジョブに対して作業することをやめるよう指示される。そのような重複ジョブはすでに他の作業者ノード１１２に割り当てられていたものであって該他の作業者ノード１１２が現在そのようなジョブを実行中であってもよく、あるいはすでに完了したものであってもよい。そのようなパージ信号は、マスター・ノード１１０によって保持される、どのジョブがどの作業者ノード１１２に割り当てられたかおよびそのようなジョブのスコープの指標の記録に基づいていてもよい。
【００２９】
マスター・ノード１１０は、ジョブ待ち行列２３２からのジョブを、資源待ち行列２３４内の作業者ノード１１２にスケジューリングするよう構成されていてもよい。マスター・ノード１１０はいかなる好適な基準に基づいてそのようなスケジューリングを行うよう構成されていてもよい。ある実施形態では、マスター・ノード１１０は、ジョブ待ち行列２３２からのジョブを資源待ち行列２３４内の作業者ノード１１２に、先入れ先出しに基づいてスケジューリングするよう構成されていてもよい。別の実施形態では、マスター・ノード１００は、ジョブまたは資源の間の最良一致を判別することによって、ジョブ待ち行列２３２からのジョブおよび資源待ち行列２３４からの作業者ノード１１２を選択してもよい。そのような実施形態では、一致が判別されるのは、最良優先（best-first）ベースであってもよい。
【００３０】
最良優先基準を使って、マスター・ノード１１０は、スケジュールする最良候補ジョブをジョブ待ち行列２３２から選び、それをスケジュールする対象となる最良資源を資源待ち行列２３４内の利用可能な資源の間から選びうる。最良候補ジョブの選択はいかなる好適な因子に基づいていてもよい。ある実施形態では、ジョブのタイムスタンプが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早いジョブほど高い優先度を得てもよい。もう一つの実施形態では、ジョブについての初期化トレースの長さが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、初期化トレースが小さいジョブほど初期化コストが低いことがあり、よって、利用可能な資源に依存して、優先されうる。
【００３１】
資源待ち行列２３４からの最良候補資源の選択は、いかなる好適な因子に基づいていてもよい。ある実施形態では、資源の挿入タイムスタンプが、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早い資源ほど高い優先度を得てもよい。これは資源の利用度を最大にするためである。もう一つの実施形態では、資源についての計算強度が、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源の計算力が、それを適切な大きさのジョブとマッチさせるために使用されてもよい。さらにもう一つの実施形態では、資源の通信オーバーヘッドが最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源のマスター・ノード１１０への接続トポロジーについての情報が既知であれば、マスター・ノード１１０とのより効率的な、より短い、あるいはより高速な通信をもつ資源に優先度を与えるために該情報が使用できる。そのような情報は、作業者ノード１１２がタスクを完了する統計的な結果によって決定されてもよい。
【００３２】
最良候補資源または最良候補ジョブのいずれかを決定するには、たとえば上記の因子の関数、たとえば重み付け和が、最良候補を決定するために用いられてもよい。そのような重み付け和は、最良候補を選ぶためのコスト関数として使用されてもよい。そのような場合、ジョブおよび資源のタイムスタンプが、ジョブおよび資源を選ぶための唯一の基準として使用されるならば、その方式は、基本的な待ち行列データ構造に典型的な先入れ先出し機構になり始める。
【００３３】
マスター・ノード１１０は、作業者ノード１１２から受領されたトレースおよび状態をマスター状態グラフに統合するよう構成されていてもよい。作業者ノード１１２は、完了され、クロールされたウェブ・アプリケーションの振る舞いのサブツリー（sub-tree）またはトレース（trace）を表す完了された計算を提供してもよい。マスター・ノード１１０はまた、一つまたは複数の作業者ノード１１２によって決定される新たな計算の指標をも受領してもよい。作業者ノード１１２からのトレースおよび状態の受領に際して、マスター・ノード１１０は、マスター状態グラフにおいてすでに決定された情報に比較して、あるいは他の作業者ノード１１２に割り当てられたジョブにおける状態に比較して、受領された状態またはトレース中に重複が存在するかどうかを判定するよう検査するよう構成されていてもよい。そのような重複が検出された場合、マスター・ノード１１０は、ジョブ待ち行列２３２から重複ジョブをパージするよう構成されていてもよい。マスター・ノード１１０はまた、パージ・コマンドを発することによって、作業者ノード１１２上で現在実行されている重複クロールをパージするよう構成されていてもよい。マスター・ノード１１０はまた、重複を除去して、受領された情報を、マスター状態グラフ中の情報とマージするよう構成されていてもよい。
【００３４】
図４は、遷移グラフ・モデル４０２の図解を通じて例示的な作業者ノード１１２の動作の結果を示している。上述したように、作業者ノード１１２は、クロール・アプリケーションのコピーを実行するよう構成されていてもよい。作業者ノード１１２はまた、試験されるべきウェブ・アプリケーションのための適切なクロール設定を含んでいてもよい。作業者ノード１１２は、マスター・ノード１１０によって与えられる部分的トレース４０４を用いてその動作を初期化するよう構成されていてもよい。そのような部分的トレース４０４は、作業者ノード１１２がマスター状態グラフ２３６の完全なコピーを用いてその動作を初期化することに対する代替であってもよい。しかしながら、マスター状態グラフ２３６を用いたそのような初期化は、作業者ノード１１２とマスター・ノード１１０の間の通信の面でよりコスト高となることがある。そのような部分的トレース４０４は、マスター状態グラフ内のS0のような特定の状態に到達するために、index.jspのようなウェブ・アプリケーション・スタート・ページ４０６からの取る必要のあるアクションの記述を含んでいてもよい。ここで、前記特定の状態は、マスター・ノード１１０によって割り当てられたジョブの一部として作業者ノード１１２によってクロールされるべきものである。作業者ノード１１２は、種々の分枝およびアクションを調べ、新たなジョブのような他の情報を記憶することによって、S0およびS1のようなその子状態からクロールすることを続けるよう構成されていてもよい。作業者ノード１１２は、ジョブが完了していなくても、ジョブのクロールにおける、そのトレースのクロールが終了する点に到達しうる。そのようなケースはのちに論じる。
【００３５】
もう一つの例では、作業者ノード１１２がクロールすべき動的ウェブ・アプリケーション内部の特定のページを与えられ、そのようなページ上で選択されるべきメニュー項目の選択肢を提示された場合、作業者ノード１１２は、該メニューにおける最初の選択肢を選択し、動的ウェブ・アプリケーションのその後の動作を探査し、残りの選択されなかったメニュー選択肢を表す状態またはアクションを将来のジョブとして記憶するよう構成されていてもよい。作業者ノード１１２が動的ウェブ・アプリケーションの、自分が割り当てられた部分をクロールする際、作業者ノード１１２は、遭遇した状態およびそのような状態に到達するために取られるアクションを表すローカル状態グラフを生成してもよい。作業者ノード１１２は、以前に見た状態に到達する場合、クロールを打ち切るよう構成されていてもよい。そのような状態は、ローカル状態グラフ内に存在する状態を含んでいてもよい。作業者ノード１１２は、クロールが、クロール明細によって設定された深さ限界または時間限界に達する場合にクロールを打ち切るよう構成されていてもよい。たとえば、ある特定の経路に沿って作業者ノード１１２がその後の１０個のアクションの深さに達すると、作業者ノード１１２はそのクロールを終了してもよい。さらに、作業者ノード１１２は、マスター・ノード１１０からパージ・コマンドを受け取る場合にクロールを終了するよう構成されていてもよい。
【００３６】
作業者ノード１１２は、新しい状態、ウェブ・アプリケーションにおいて取られた決定経路を表す新しいトレースおよび新しいジョブについての情報を含む情報を、定期的にマスター・ノード１１０に送信するよう構成されていてもよい。そのような送信の定期的な性質は、分散式コンピューティング・システム１００によって決定されるところの、通信と計算のトレードオフに基づいて静的にまたは動的に設定されてもよい。所与の分散式コンピューティング・システムの特定の定期的な性質は、分散式コンピューティング・システムの資源、試験される動的ウェブ・アプリケーションの性質または他の予見されない因子に依存してもよい。周期的な性質の特定また最適な値は、経験的に決定されてもよい。終了すると、作業者ノード１１２は、マスター・ノード１１０における利用可能な資源待ち行列２３４に自らを登録するよう構成されていてもよい。
【００３７】
分散式コンピューティング・システム１００は、動的ウェブ・アプリケーションのステートレスな分散式の並列クロールのための技法を利用するよう構成されていてもよい。ある実施形態では、分散式コンピューティング・システム１００は、クロールのステートレスな並列化またはステートフルな並列化の実施の間で選択するよう構成されていてもよい。クロールのステートフルな並列化は、本稿に記載されるステップを含んでいてもよい。ここで、マスター状態グラフに比較されるとき、作業者ノード１１２から返された結果の間の重複を探すために諸状態がマスター・ノード１１０において比較される。クロールのステートレスな並列化はマスター・ノード１１０に、そのような重複を消去しようとしないようにさせてもよく、結果として得られるマスター状態グラフは、実行ツリーにおけるより低く現れる状態がより高く現れる状態の重複であることを示さなくてもよい。ステートフルな並列化方式は、根底にある状態グラフがかなりの状態共有、状態再収束（reconvergence）およびサイクルをもつときにより有用でありうる。分散式コンピューティング・システム１００は、所与の動的ウェブ・アプリケーションの状態グラフにほとんど再収束が存在しない場合に；たとえば状態グラフが主としてツリー様構造をもつ場合に、ステートレスな並列化を使うよう構成されていてもよい。ステートレスな並列化が分散式コンピューティング・システム１００によって用いられるとき、マスターおよび作業者ノード１１２は状態比較を省略してもよい。そのような状態比較の省略は、状態グラフ・マージがより少数の資源で達成されうるので、マスター・ノード１１０の動作を高速化しうる。マスター・ノード１１０の要求されるパージ動作は、ステートレスな並列化の状態に依存して、なくしてもよい。同様に、作業者ノード１１２におけるクロール動作を高速化してもよい。さらに、作業者ノード１１２は、ステートレスな並列化を使うとき、計算の終わりに一度だけ結果を送信するよう構成されていてもよい。ただし、結果として得られるマスター状態グラフは、複数の位置において現れる状態を含むことがある。
【００３８】
作業者ノード１１２は、その動作および新たに発見されたジョブの状態を、任意の好適な手段を通じて圧縮するよう構成されていてもよい。ある実施形態では、作業者ノード１１２は、ある動的ウェブ・アプリケーションの相続くページが、前の状態から少ししか違わない状態を表すとき、そのような状態圧縮を使うよう構成されていてもよい。たとえば、AJAXビルドされたウェブ・アプリケーションの所与の画面に対する所与のユーザー・アクションが、現在の画面の小さな部分のみを変更または更新する結果を生じることがある。このように、こうして得られた新たな画面はその内容において、前の画面からわずかしか違わない。このように、作業者ノード１１２は、動的ウェブ・アプリケーションの相続く状態の文書オブジェクト・モデル間の差分のみを記憶するよう構成されていてもよく、その差分がその後マスター・ノード１１０に送信されて、該マスターによって圧縮解除されてそれぞれの状態の完全な表現を得ることができる。状態圧縮は、相続く状態の間の差分が所与の閾値より小さいときに有効にされてもよい。そのような閾値は、動的ウェブ・アプリケーションの相続く状態間の相対的なまたは絶対的な差に関して設定されてもよい。作業者ノード１１２は、現在クロールされている具体的なウェブ・アプリケーション・ページに依存して、状態圧縮を有効化および無効化するよう構成されていてもよい。
【００３９】
分散式コンピューティング・システム１００は、いかなる好適な動的ウェブ・アプリケーションをクロールするよう構成されていてもよい。図５は、分散式コンピューティング・システム１００によってクロールされうる例示的な動的ウェブ・アプリケーション５００の画面遷移グラフである。この画面遷移グラフは状態グラフを含んでいてもよい。動的ウェブ・アプリケーション５００は、二つのボタン、「ボタン１」および「ボタン２」を表示するよう構成されていてもよい。「ボタン１」および「ボタン２」の外観および外観に関連する機能は、ユーザーからのさまざまな以前のアクションに依存してもよい。動的ウェブ・アプリケーション５００が存在しうる種々の状態がS1、S2、S3、S4によって表されている。図５の画面遷移グラフは、動的ウェブ・アプリケーション５００の可能な状態を完全に表現しうる。このように、図５の画面遷移グラフは、動的ウェブ・アプリケーション５００の動的にクロールの完了した結果であってもよい。
【００４０】
動的ウェブ・アプリケーション５００のコードは次によって具現されうる：
【００４１】
【表１】
0005751134.tif 000002
このように、動的ウェブ・アプリケーション５００は「ボタン１」の外観を変えるよう構成されていてもよい。ここで、「ボタン１」は最初「ここをクリック！」と表示し、クリックされると「クリック済み」と表示するよう設定されていてもよい。「ボタン１」は、その後のクリックに際してこれらの値の間で表示をトグルさせるよう構成されていてもよい。「ボタン２」は最初「ここもクリック！」と表示し、クリックされると無効となるよう構成されていてもよい。これは図５では、S1によって表される状態における開始動作として表されている。「ボタン１」がクリックされると、動的ウェブ・アプリケーション５００はS2によって表される状態に遷移する。いったんそこに至ると、「ボタン１」が再びクリックされると、動的ウェブ・アプリケーション５００はS1に戻る遷移をしてもよい。代わりに「ボタン２」がクリックされると、動的ウェブ・アプリケーション５００は代わりにS3によって表される状態に遷移してもよい。同様に、S1から「ボタン２」がクリックされると、動的ウェブ・アプリケーション５００はS4によって表される状態に遷移してもよい。動的ウェブ・アプリケーション５００は「ボタン１」がクリックされるとS3とS4の間で遷移しうる。
【００４２】
分散式コンピューティング・システム１００によってクロールされるべき対話的クライアント‐サーバー・アプリケーションは、異なる状態として表現されうる取られた以前のアクションに依存して異なる仕方で動作するよう構成されていてもよい。動的ウェブ・アプリケーション５００の例では、「ボタン２」をクリックできるかどうかは、「ボタン２」が前にクリックされたかどうかに依存しうる。そのようなアクションは反復可能でないかもしれない。もとの状態に戻る遷移をする手段が存在しないからである。いったん状態S3およびS4の状態にはいったら、動的ウェブ・アプリケーション５００は状態S1およびS2に戻ることはできない。他方、「ボタン１」の状態は、やはり現在の状態に依存するが、トグルされてもよい。そのようなサイクルは、S1とS2の間のアクションにおいて、あるいはS3とS4の間のアクションにおいて存在しうる。
【００４３】
動作では、図３に戻ると、分散式コンピューティング・システム１００は、動的ウェブ・アプリケーションを含む対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールを調整する技法を利用してもよい。
【００４４】
マスター・ノード１１０は、動的ウェブ・アプリケーションのクロールを調整するために必要ないかなる好適なアクションを取ってもよい。ある実施形態では、マスター・ノード１１０は、ペンディングのジョブを、そのようなジョブを実行するために待っている資源にスケジュールしてもよい。もう一つの実施形態では、マスター・ノード１１０は、作業者ノード１１２から受領された結果をマージしてもよい。そのような実施形態では、マスター・ノード１１０はそのような結果を、他の作業者ノード１１２から以前に受領された結果とマージしてもよい。
【００４５】
ある実施形態では、マスター・ノード１１０のタスクは、次の擬似コードの一部または全部を使って実装されてもよい：
【００４６】
【表２】
0005751134.tif 000003
上記の擬似コードにおいて、masterSTGはクロールされるアプリケーションのマスター画面遷移グラフ（screen  transition  graph）モデルを表しうる。図５はたとえば、動的ウェブ・アプリケーション５００の完了されたマスター画面遷移グラフを表しうる。そのようなマスター画面遷移グラフはマスター状態グラフ２３６内に記憶されてもよい。JobQは、試験対象のウェブ・アプリケーションのクロールの一環として処理されるべきジョブのペンディングの待ち行列を表していてもよい。ある実施形態では、jobQはFIFO待ち行列として実装されてもよい。ResourceQは、ジョブを割り当てられるべき作業者ノード１１２のような資源のペンディングの待ち行列を表していてもよい。ある実施形態では、resourceQは先入れ先出し待ち行列として動作してもよい。
【００４７】
マスター・ノード１１０は、動的ウェブ・アプリケーションのクロールされるべき諸部分のようなペンディングのジョブを、作業者ノード１１２のような待っている資源にスケジュールしてもよい。上に示したように、マスター・ノード１１０は、JobQおよびresourceQの両方にエントリーが存在する間、ジョブ待ち行列２３２のいちばん上から第一のジョブを取得し、resourceQから最初の資源を取得し、前記ジョブを前記資源によって実施されるべくスケジュールしてもよい。jobQからジョブを、resourceQから資源を取得するには、いかなる好適な方法が使用されてもよい。ある実施形態では、最も長い間ペンディングであるジョブおよび／または資源が取得されてもよい。
【００４８】
マスター・ノード１１０は、作業者ノード１１２から返された作業者結果を、すでに生成されたトレースとマージしてもよい。マスター・ノード１１０と同期する各作業者ノード１１２は、マスター・ノード１１０にいかなる好適な情報を送ってもよい。実施形態では、そのような作業者ノード１１２は少なくとも二つのデータ項目をマスター・ノード１１０に送ってもよい。圧縮されたトレース（compTraceのような）と、作業者ノード１１２が動的ウェブ・アプリケーションの一部をクロールしている間に遭遇した（newJobsのような）ジョブの新たなセットとである。マスター・ノード１１０はそのような情報を、jobQ、resourceQおよびmasterSTGのようなマスター・ノード１１０において保持されている情報にマージしてもよい。マスター・ノード１１０はそのようなタスクをいかなる好適な仕方で実行してもよい。
【００４９】
ペンディングのジョブをスケジュールするのと並行して、マスター・ノード１１０は、作業者ノード１１２が遭遇した新たなトレースに関して受領された情報を、マスター画面遷移図にマージしてもよい。ある実施形態では、マスター・ノード１１０は、作業者ノード１１２によって圧縮された返されたトレースを圧縮解除してもよい。トレースは、状態および該状態間の遷移を含んでいてもよい。マスター・ノード１１０は、返されたトレースに見出される各状態について、そのような状態がマスター状態図に存在するかどうかを判定してもよい。そのような状態が存在しない場合、それはマスター状態図に加えられる。返されたトレースにおける各遷移について、マスター・ノード１１０はそのような遷移がマスター状態図に存在するかどうかを判定してもよい。そのような遷移が存在しない場合、それはマスター状態図に加えられる。まず新たな状態を判定して、その後新たな遷移に続くことが有利でありうる。
【００５０】
マスター・ノード１１０は、作業者ノード１１２によって遭遇または生成された新たなジョブに関する情報を、ジョブ待ち行列２３２にマージしてもよい。マスター・ノード１１０は、そのような情報をいかなる好適な仕方でマージしてもよい。ある実施形態では、マスター・ノード１１０は、マスター・ノード１１０に返されたnewJobs内の各ジョブについて、そのジョブがjobQ内にすでに存在しているかどうかを判定してもよい。そのジョブがjobQ内に存在しなければ、jobQに加えられてもよい。
【００５１】
図６ａ〜図６ｃは、マスター・ノード１１０がどのようにして作業者ノード１１２からの情報を加えてマスター画面遷移グラフを生成するかの例を示している。図６ａは、空の画面遷移グラフが作業者ノード１１２からの返されたトレースと組み合わされうる場合を示している。返されたトレースにおいて、作業者ノード１１２は第一の状態S1から、「ボタン１」をクリックして第二の状態S2に進むことによってクロールし、再び「ボタン１」をクリックすることによって状態S1に戻るクロールをした。マスター画面遷移グラフには何の状態も遷移も既存ではないので、組み合わせの結果は、返されたトレースそのものとなる。状態S2における「ボタン２」のクリックのような選ばれなかったオプションは、完了されるべき将来のジョブを表しうる。これら将来のジョブは作業者ノード１１２によってマスター・ノード１１０に返され、ジョブ待ち行列２３２に加えられてもよい。
【００５２】
図６ｂは、マスター・ノード１１０がどのようにしてもう一つの作業者ノード１１２の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図６ｂにおける返されたトレースは、作業者ノード１１２が第一の状態S1から出発して、「ボタン２」をクリックすることによって状態S4にクロールした結果であってもよい。作業者ノード１１２は次いで、「ボタン１」をクリックすることによって状態S3にクロールし、もう一度「ボタン１」をクリックすることによって状態S4にクロールして戻っていてもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスター・ノード１１０は、返されたトレースのインスタンスを削ってもよいが、他の点では両方の状態および遷移についての二つのグラフの和集合を表しうる。作業者ノード１１２は、図６ａにおいてトレースを返したものと同じまたは異なる作業者ノード１１２であってよい。
【００５３】
図６ｃは、マスター・ノード１１０がどのようにしてさらにもう一つの作業者ノード１１２の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図６ｃにおける返されたトレースは、作業者ノード１１２が第一の状態S1から「ボタン１」をクリックして状態S2に遷移し、次いで「ボタン２」をクリックしてS3に遷移した結果であってもよい。ひとたびS3にはいると、作業者ノード１１２は「ボタン１」をクリックして状態S4にクロールし、再び「ボタン１」をクリックして状態S3に戻ってもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスター・ノード１１０は、S2からS3への遷移をマスター画面遷移グラフに加えてもよい。返されたトレースの残りの部分はマスター画面遷移グラフにすでに存在しているからである。作業者ノード１１２は、図６ａおよび図６ｂにおいてトレースを返したものと同じまたは異なる作業者ノード１１２であってよい。作業者ノード１１２は、マスター・ノード１１０から出発状態としてS2を受領していてもよい。そのような命令は、作業者ノード１１２がS2において利用可能だが「ボタン２」を選択しないいくつかの動作を前に探査するといった、ジョブ待ち行列２３２に加えられた前に同定されたジョブから生じたのであってもよい。
【００５４】
図３に戻ると、分散式コンピューティング・システム１００は、並列の分散環境において、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールのための技法のための技法を利用してもよい。分散式コンピューティング・システム１００における作業者ノード１１２は、動的ウェブ・アプリケーションの諸部分をクロールして、結果として発見されるトレースをマスター・ノード１１０に報告してもよい。作業者ノード１１２は動的ウェブ・アプリケーションをいかなる好適な仕方でクロールしてもよい。
【００５５】
一例では、作業者ノード１１２のタスクは、次の擬似コードの一部または全部を使って実装されてもよい。
【００５６】
【表３】
0005751134.tif 000004
マスター・ノード１１０は、LoadConfig(config)のような関数を使って、作業者ノード１１２を将来のクロール・タスクのために準備するために、構成設定configに従ってw1のような作業者ノード１１２上の作業者クローラー・アプリケーション２１８を初期化してもよい。ある実施形態では、作業者ノード１１２自身が作業者ノード１１２上の作業者クローラー・アプリケーション２１８を初期化してもよい。configは、作業者ノード１１２を初期化するためのいかなる好適な情報を含んでいてもよい。ある実施形態では、configは、クロールされるべき動的ウェブ・アプリケーションのurlのようなアドレスを含んでいてもよい。もう一つの実施形態では、configは、どのようにして動的ウェブ・アプリケーションをクロールするかについて作業者ノード１１２のための指令を含んでいてもよい。そのような指令は、標的〔ターゲット〕文書オブジェクト・モデル（DOM:  document  object  model）エレメントに対する指令を含んでいてもよい。たとえばhtmlの<a>タグである。そのような指令はまた、動的ウェブ・ページ上で実行されるユーザー・アクションをも含んでいてもよい。たとえば、特定の（specific）または範疇をまとめた（categorical）項目をクリックすること、および／またはログイン・ページ上での認証データのようなクロール中の適切な段階で入力すべき特定のユーザー・データである。
【００５７】
ある実施形態では、この初期化プロセスは、文字列のような一組のパラメータを、作業者ノード１１２上で前に利用可能であった事前ビルドされたクローラー・アプリケーションに渡すことを利用してもよい。そのような事前ビルドされたクローラー・アプリケーションは、作業者クローラー・アプリケーション２１８において実装されてもよい。もう一つの実施形態では、この初期化プロセスは、config内の指令に基づいて新たなソース・コードを生成してもよく、そのソース・コードがその後コンパイルされて、w1上のクローラー・アプリケーションをドライブするために使われてもよい。そのようなクローラー・アプリケーションは、作業者クローラー・アプリケーション２１８において動作してもよい。新たなソース・コードの生成またはコンパイルは、マスター・ノード１１０上で、マスター・クローラー・アプリケーション２２０のようなアプリケーションにおいて実行されてもよい。新たなソース・コードの生成またはコンパイルは作業者ノード１１２上で実行されてもよい。
【００５８】
作業者ノード１１２は、指定された開始位置から出発して動的ウェブ・アプリケーションをクロールしてもよい。指定された開始位置は、前に決定された状態および遷移を含む既存の既知のトレースにおいて実装されてもよい。ある実施形態では、作業者ノード１１２は、上に示したような関数手順WorkerCrawlTrace(seedTrace)を利用してもよい。seedTraceはマスター・ノード１１０から作業者ノード１１２に渡される開始トレースであってもよい。
【００５９】
動的ウェブ・アプリケーションをクロールする前に、作業者ノード１１２はlocalStateGraphのようなローカル状態グラフを生成し、それを空に設定してもよい。作業者ノード１１２はクロール中に発見される新たなジョブを含めるためのnewJobsのような構造を生成し、それを空に設定してもよい。作業者ノード１１２は初期画面をロードしてもよい。作業者ノードはそれを行うために、上に示したようなLoadPage(url)のような関数を使用してもよい。それはinitScreenのような開始アドレスをその作業者クローラー・アプリケーション２１８にロードすることにより、当該アドレスに対応するウェブ・アプリケーションをクロールするための準備をする。ある実施形態では、アドレスはクロールされるべきウェブ・アプリケーションの初期ページまたはホーム・ページである。開始アドレスをウェブ・クローラー・アプリケーションにロードした結果は、currentStateのような構造中に記憶されてもよい。
【００６０】
作業者ノード１１２は次いで、所望される状態に到達するためにトレースをプログラム的に実行してもよい。そのような実行は関数ExecuteTrace(SeedTrace)を使ってもよい。ExecuteTraceは、SeedTraceにおける一連のアクションを実行するためにExecuteAction(action)のような関数を呼び出してもよい。actionは、特定のページに対する作業者ノード１１２の直接の動作を指揮する一つまたは複数のパラメータを含んでいてもよい。ある実施形態では、actionは一対のパラメータ{t,u}を含んでいてもよい。tは、ブラウザーにおける現在のページ上のボタンまたはリンクのような標的DOMエレメントを含んでいてもよい。uは、ボタン・クリックまたはフォーム・データ入力のような、t上で実行されるべきユーザー・アクションを含んでいてもよい。ExecuteActionは、現在の画面または状態上で、{t,u}によって指定されるアクションをプログラム的に実行してもよい。ある実施形態では、ExecuteActionは、標的エレメントtが現在のブラウザー画面または状態で利用可能であると想定して動作されてもよい。
【００６１】
このように、作業者ノード１１２は、seedTraceまたはマスター・ノード１１０によってによって定義される他の任意の初期トレースによって定義される動的ウェブ・アプリケーションを通じて初期クロールを行ってもよい。そのような初期クロールは、他の作業者ノード１１２によってもともと取られたステップを繰り返すことを含んでいてもよい。作業者ノード１１２は結果を、currentStateのようなクロールの現在状態を記憶する構造に割り当ててもよい。
【００６２】
作業者ノード１１２は、状態グラフを実行することを続けるか否かを決定してもよい。続ける場合、作業者ノード１１２は動的ウェブ・アプリケーション内のアクションを実行し、関係した管理タスクを実行することに進んでもよい。そうでない場合は、作業者ノード１１２は動的ウェブ・アプリケーションの自分の部分のクロールを最終化〔ファイナライズ〕し、状態グラフおよび新たな生成ジョブがあればそれをマスター・ノード１１０と同期することになる。
【００６３】
作業者ノード１１２は現在の状態が訪問されたことがあるかどうかおよび現在のローカル状態グラフが定義された資源限界内で動作するかどうかを判定してもよい。そのような基準が真である間、作業者ノード１１２は動的ウェブ・アプリケーションの一部をクロールするためにイベントのシーケンスを実施してもよい。そのような基準が真であるかどうかを判定するには、NotVisited(state)関数を使うことによって状態が以前に訪問されたことがあるかどうかについての判定がなされてもよい。作業者ノード１１２は、localStateGraph内の状態を検索してその状態がその中に存在するかどうかを検査してもよい。その状態がすでにlocalStateGraph内に存在する場合、作業者ノード１１２はその状態が以前に訪問されたことがあると判定してもよい。NotVisited関数は、その状態が以前に訪問されたことがある場合には偽を返し、それ以外の場合には真を返してもよい。そのような判定、作業者ノードが割り当てられたアプリケーションの限界内で動作しているかどうかは、関数WithinResourceBound(localStateGraph)のような任意の好適な方法を通じてできる。そのような例では、作業者ノード１１２は、localStateGraphのトレースが、当該ノードが可能性としてはLoadConfigを使って初期化される際に用いられたconfigで指定されている資源限界内であるかどうかを判定してもよい。そのような限界は、いかなる好適なメトリックを通じて定義されてもよい。ある実施形態では、localStateGraphをなすトレース中の状態の数が、最大閾値と比較されてもよい。もう一つの実施形態では、localStateGraphをなすトレースにおいてクロールが実行された深さが閾値と比較されてもよい。さらにもう一つの実施形態では、現在のクロール・タスクの開始以来経過した時間が最大閾値と比較されてもよい。さまざまな実施形態において、configにおいて指定された資源限界において二つ以上のそのような基準が組み合わされていてもよい。
【００６４】
そのようなシーケンスは以下のステップの一つまたは複数を含んでいてもよい。作業者ノード１１２は、localStateGraphのようなローカル状態グラフがマスター・ノード１１０と同期される準備ができているかどうかを判定してもよく、もし準備ができていれば、localStateGraphを、newJobs構造内のもののような生成された新たなジョブがあればそれとともに、同期してもよい。作業者ノード１１２は、そのような判定を、関数IsReadyToSynchronize(localStateGraph)を使うなどいかなる好適な方法を通じて行ってもよい。そのような場合、作業者ノード１１２は、十分なクロールが実行されたかどうかを判定してもよい。そのような判定は、たとえば、クロールされた状態の数、クロールが実行された深さ、あるいは作業者ノード１１２によって引き起こされた最後の同期イベント以来の経過時間を測定することによってなされてもよい。関数IsReadyToSynchronizeの使用は、指定された基準に従ってlocalStateGraphが同期される準備ができている場合に真を返してもよい。
【００６５】
currentStateで表される動的ウェブ・アプリケーションの現在の状態から、作業者ノード１１２は、利用可能なアクションを抽出してactionListのような構造中に記憶してもよい。作業者ノード１１２は、動的ウェブ・アプリケーションの画面または状態を解析して、その画面または状態において取られる可能なアクションを判別してもよい。作業者ノード１１２は、そのような解析を、いかなる好適な方法を通じて実施してもよい。ある実施形態では、作業者ノード１１２は関数ExtractActions(screen)を使ってそのような解析を実施してもよい。典型的には、解析されるべき画面または状態はcurrentStateまたはブラウザーにおける現在画面である。作業者ノード１１２は解析を、クローラーを初期化するのに使われたconfigにおいて指定されている指令に基づいて実施して、候補アクション・エレメントのリストを抽出してもよい。作業者ノード１１２は取るべき可能なアクションを決定してそれらをリストのようなデータ構造内に入れてもよい。
【００６６】
当該画面において取られる可能なアクションを決定したのち、作業者ノード１１２は可能なアクションのリストからアクションを抽出してもよい。作業者ノード１１２はこのタスクを達成するために関数GetFirstAction(actionList)を使ってもよい。ここで、actionListは当該画面において取られうるアクションの順序付けられた集合である。作業者ノード１１２は、現在の状態または画面上で利用可能なアクションから、抽出されたアクションを除去してもよい。作業者ノード１１２は該アクションを、firstActionのような構造中に記憶してもよい。作業者ノード１１２は抽出されたアクションを実行し、該実行の結果を現在の状態または画面のための構造中に記憶する。作業者ノード１１２は、newJobsのような構造中の、クロール中に遭遇した新たなジョブのリストを、現在の状態または画面から決定されたアクションと組み合わせてもよい。ある実施形態では、作業者ノード１１２は、重複があればそれは削って、二組のジョブの和集合を決定してもよい。作業者ノード１１２は、新たなジョブのリストのための構造中に、結果を記憶してもよい。
【００６７】
クロールが続けられるのでない場合、作業者ノード１１２はマスター・ノード１１０と同期してもよい。作業者ノード１１２はそのような同期を、この時点または他の任意の好適な時点で実施してもよい。ある実施形態では、作業者ノード１１２は関数SyncWithMaster(localStateGraph,newJobs)を使ってそのような同期を実行してもよい。作業者ノード１１２はデータ変換、資源のアカウンティングを実行し、クロール結果をマスター・ノード１１０に送ってもよい。マスター・ノード１１０との同期はローカル状態グラフおよびクロール中に発見された新たなジョブのような情報を使用してもよい。
【００６８】
作業者ノード１１２はローカル状態グラフを圧縮してもよい。作業者ノード１１２はいかなる好適な方法を通じてローカル状態グラフを圧縮してもよい。ある実施形態では、作業者ノード１１２はCompressGraph(localStateGraph)関数を使ってもよい。作業者ノード１１２は、状態グラフ中の各状態を表現するために状態圧縮アルゴリズムを使ってもよい。そのような圧縮アルゴリズムは状態グラフを増分的に表現し、グラフのサイズを縮小しうる。作業者ノード１１２はそのような圧縮の結果として、圧縮された状態グラフを生成しうる。
【００６９】
作業者ノード１１２はマスター・ノード１１０に情報を送ってもよい。そのような情報は論理状態グラフ――あるいはその圧縮もしくは修正されたバージョン――および動的ウェブ・アプリケーションのクロール中に遭遇された新たなジョブのリストを含んでいてもよい。作業者ノード１１２はそのような情報を任意の好適な方法を通じて送る。ある実施形態では、作業者ノード１１２はそのようなタスクを達成するために関数SendToMaster(deltaTrace,newJobs)を使ってもよい。作業者ノード１１２は、最後の同期イベント以降に現在の作業者ノードで計算された結果をマスター・ノード１１０に通信してもよい。
【００７０】
作業者ノード１１２は次いで、ローカル状態グラフの諸部分を、マスター・ノード１１０と同期されたとしてマークしてもよい。作業者ノード１１２はそのようなタスクをいかなる好適な方法を通じて実行してもよい。ある実施形態では、作業者ノード１１２は関数MarkSentStates(localStateGraph)を使ってもよい。作業者ノード１１２はlocalStateGraphのようなグラフの一部に、該一部が将来の同期イベントにおいて再送信されないよう、注釈付けしてもよい。そのようなマークは、CompressGraphまたはSendToMasterのような関数によって、状態グラフの所定の部分がマスター・ノード１１０に再送信される必要がないことを判別するために使用されてもよい。
【００７１】
状態が以前に訪問されたことがあるとき、あるいはローカル状態グラフのクロールが定義された資源限界を超えたとき、作業者ノード１１２はマスター・ノード１１０と同期してもよい。ある実施形態では、作業者ノード１１２は、このノード上の最後の同期イベント以降に生成されたグラフの諸部分を表すlocalStateGraphおよびクロール中に生成され、マスター・ノード１１０によって割り当てられる作業者ノード１１２によって将来実行される可能性があるペンディング・クロール・ジョブのリストを含むnewJobsを使ってマスター・ノード１１０と同期してもよい。localStateGraphは圧縮され、deltaTraceのような構造中に記憶されてもよい。deltaTraceは、動的ウェブ・アプリケーションのトレースのうち、作業者ノードの観点から、マスター・ノード１１０に含まれていないかもしれない諸部分を含んでいてもよい。localStateGraphのような既存のローカル状態グラフは、マスター・ノード１１０と同期されたとしてマークされてもよい。作業者ノード１１２は、マスター・ノード１１０と同期されるべき新たなジョブを含む構造を、リセットするか空にするかしてもよい。
【００７２】
分散式コンピューティング・システム１００は、動的ウェブ・アプリケーションを含む対話的クライアント‐サーバー・アプリケーションのクロールにおいて、状態情報の圧縮技法を利用してもよい。上述したように、作業者ノード１１２は状態グラフを圧縮して同期の際にマスター・ノード１１０に送信される情報を減らしてもよく、マスター・ノード１１０は状態グラフを圧縮解除して新たに発見された状態を再構成してもよい。
【００７３】
ある実施形態では、作業者ノード１１２は、動的ウェブ・アプリケーションにおいて遭遇された、前の画面の軽微な修正しか含まない逐次の状態または画面を圧縮することによって、状態グラフを最適化してもよい。そのような実施形態では、二つの相続く画面は根底にあるDOMの多くを共有する。たとえば、図６の画面遷移グラフについて、上に説明した初期状態S1の根底にあるDOM表現は、「ボタン１」に割り当てられた値「ここをクリック！」および「ボタン２」に割り当てられた値「ここもクリック！」を示す。この画面で「ボタン１」がクリックされて状態S2への遷移が起こるとき、根底にあるDOMにおける唯一の変化は、エレメント/HTML[1]/BODY[1]/INPUT[1]の値属性が「ここをクリック！」から「クリック済み」に変わることである。このように、状態S2は完全な表現の代わりに、下記によって表現されうる。
【００７４】
【表４】
0005751134.tif 000005
このように、ある実施形態において、作業者ノード１１２は、動的ウェブ・アプリケーションの現在の画面（上の例ではS2）の、該現在の画面が直前のまたは基準画面（上の例ではS1）から異なっている部分のみをマークし、表現してもよい。作業者ノード１１２は、現在の画面の、前の画面から異なっている部分のみをマークし、表現することを、いかなる好適な仕方で行ってもよい。ある実施形態では、作業者ノード１１２はこれらのタスクを、次の擬似コードの全部または一部を通じて達成してもよい。
【００７５】
【表５】
0005751134.tif 000006
作業者ノード１１２は、refScrnのような基準画面とnewScrnのような標的画面との間で状態または画面を圧縮してもよい。標的画面は、その圧縮された表現が必要とされている画面であってもよい。基準画面はいかなる好適な画面であってもよい。基準画面は、標的画面との類似性に基づいて選択されてもよい。よって、標的画面を訪れる直前に訪れた画面または別の先行画面が選ばれる可能性が高い。基準画面は、圧縮が実行される基準を与えてもよい。作業者ノード１１２は状態グラフ内の所与の状態の圧縮を、主として二つのフェーズにおいて行ってもよい：後述するマーク付けフェーズと抽出フェーズである。
【００７６】
作業者ノード１１２は標的画面内の各ノードを初期化し、次いでマーク付けフェーズにはいり、次いで抽出フェーズにはいってもよい。この抽出フェーズで、マーク付けフェーズの結果が抽出され、圧縮されたフェーズとして返される。
【００７７】
初期化の間、作業者ノード１１２は、refScrnのような基準画面を基準としてnewScrnのような新たにクロールされた標的画面の状態を圧縮するために、まず標的画面内のすべてのノードを初期化してもよい。作業者ノード１１２は、当該ノード中の変化を表すおよび子ノード中の変化を表すマーカーを偽に設定してもよい。作業者ノード１１２は、所与の画面または問題の画面のDOMにおいて各ノードに取り付けられるべき二つのマーカーを設定してもよい。第一のマーカーは、基準画面と標的画面の間で現在のノードになされた変化を表してもよい。第一のマーカーはchangeと記されてもよい。さまざまな実施形態において、changeは三つの異なる値をもちうる：「false」〔偽〕、「attr」〔属性〕または「tag」〔タグ〕である。「false」値はノードが標的画面と基準画面で同じことを表しうる。そのような表示はタグ名、属性または他の任意の好適な特性を用いてできる。「attr」値はそのノードが、標的画面において、基準画面におけるのと同じタグ名をもつが、属性のうち一つまたは複数の属性の値が異なることを表しうる。「tag」値はこのノードは両画面において構造的に異なる表現をもつことを表しうる。たとえば、そのような構造的に異なる表現は、両画面でその位置において異なるタグをもつノードを含んでいてもよい。あるいは基準画面においてその位置にノードが存在しない場合、あるいは基準画面においてその位置により多数の子をもつノードが存在する場合がある。第二のマーカーは、そのノードの子孫のうちの一つまたは複数が、そのchangeマーカーを偽でない値にセットされており、よってそのノードは、変化を経験した子孫への経路を与えるために、圧縮された表現において存在する必要があるかもしれないことを表しうる。第二のマーカーはchildDiffと記されてもよい。childDiffは真または偽の値を受け容れうる。ここで、真の値は当該ノードの子孫に変化が起こっていることを示す。
【００７８】
次に、マーク付けフェーズにおいて、作業者ノード１１２は標的画面を基準画面と比較してもよい。標的画面のどの部分が基準画面と異なっているかを識別し、しかるべくマーク付けするためである。作業者ノード１１２はこのタスクをいかなる好適な方法を通じて達成してもよい。ある実施形態では、作業者ノード１１２は関数MarkChangeを使って基準画面と新画面を比較してもよい。作業者ノード１１２は、標的画面の、基準画面に対して変化した部分をマークしてもよい。作業者ノード１１２は、標的画面のルートからそのようなマーク付けを開始してもよい。
【００７９】
標的画面と基準画面の間の相違にマークする際、作業者ノード１１２はnodeのような開始ノードから開始してもよい。これは、標的画面のルートに対応してもよい。作業者ノード１１２はnodeが基準画面におけるその対応物と異なるかどうかを判定してもよい。もし異なれば、作業者ノード１１２は基準画面と標的画面の間に変化があったと判定してもよい。作業者ノード１１２はそのような判定を、基準画面にnodeが存在するかどうかを検査し、基準画面中のnodeの双子の相手を取得し、nodeの子の数と基準画面中のnodeの双子の相手の子の数とを比較することによって行ってもよい。
【００８０】
基準画面中にnodeが存在するかどうかを検査する際、作業者ノード１１２は、nodeのような特定のDOMエレメントと同じxpath〔x経路〕位置および同じタグ名をもつノードが標的画面に存在するかどうかを判定してもよい。作業者ノード１１２は、そのような判定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２は、上に示したExists(node,refScrn)関数を使うことによって判定を確かなものにしてもよい。この関数は、newScrn中のDOMエレメントnodeと同じxpath位置に同じタグ名でrefScrn中にノードがある場合にかつその場合にのみ真を返してもよい。
【００８１】
nodeの双子の相手を取得する際、作業者ノード１１２は基準画面中の特定の指定されたノードを見出し、返してもよい。作業者ノード１１２はそのような発見をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２はそのような判定を、上に示したGetTwin(node,refScrn)関数を使って行ってもよい。作業者ノード１１２は、上記のExists()によって使用されるxpath対応基準を使ってrefScrn中に存在するnodeに対応するノードを返してもよい。
【００８２】
nodeの子の数をnodeの双子の相手の子の数と比べる際、作業者ノード１１２は、ある画面または状態のDOMツリーにおける所与のノードの子ノードの数を決定しうる。作業者ノード１１２はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２は、上に示したようなNumChild(node)関数を使ってそのような決定を行ってもよい。
【００８３】
nodeの双子の対応物が基準画面中に存在し、それがnodeと同数以下の子を持つ場合、作業者ノード１１２はnodeの双子の相手がnodeと厳密に同じ属性をもつかどうかを判定し、もしそうでなければ、nodeおよびその親のマーカーを、nodeのchangedマーカーを「attrs」に割り当てることによってそのような条件を反映し、nodeの親を取得して該親のchildDiffマーカーを「true」に変更するよう変更してもよい。
【００８４】
nodeの親を取得する際、作業者ノード１１２はDOMツリー内の指定されたノードの親ノードを決定してもよい。作業者ノード１１２はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２はそのような決定を、上に示したようなGetParent(node)関数を使って行ってもよい。この関数は、DOMツリー内のnodeの親ノードを返しうる。
【００８５】
双子ノードの属性がnodeと同一であれば、作業者ノード１１２はnodeが不変であると記してもよい。さらに、Exists(node,refScrn)&NumChild(node)≧NumChild(GetTwin(node,refScrn))〔refScrnにnodeが存在し、かつnodeの子の数が双子の相手のnodeの子の数以上〕が真を返す場合、nodeの各子について、作業者ノード１１２は上述したマーキング方式を使ってその子を再帰的に処理してもよい。ある実施形態では、そのようなマーキングは、nodeについて見出された各子についてMarkChangeを呼び出すことによって達成されてもよい。
【００８６】
nodeの子を決定する際、作業者ノード１１２はDOMツリー内の指定されたノードの子ノードを決定してもよい。作業者ノード１１２はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２はそのような決定を、上に示したようなChildNodes(node)を使って行ってもよい。この関数は、DOMツリー内のnodeのような指定されたノードの子ノードの順序付けられたリストを返してもよい。
【００８７】
そうでなく、可能性としてはExists(node;refScrn)&NumChild(node)≧NumChild(GetTwin(node;refScrn))を呼び出し偽の戻り値を得ることによって、nodeに関して基準画面と標的画面の間に変化があった場合、作業者ノード１１２はnodeが変化したと記してもよい。ある実施形態では、作業者ノード１１２は、nodeのchangedタグを「tag」に設定することによってそのような指定を行ってもよい。さらに、作業者ノード１１２はnodeの親のタグを、該親が変化した子を持つことを示すよう設定してもよい。これは、GetParent(node)を呼び出し、その結果のchildDiffパラメータを「真」に設定することによって達成されてもよい。
【００８８】
最後に、作業者ノード１１２はnodeが変化した子をもつかどうかを判定し、もしそうであればnodeの親のタグを、nodeの親が変化した子をもつことを示すよう設定してもよい。これは、nodeのchildDiffパラメータを検査し、GetParent(node)を呼び出し、その結果のchildDiffパラメータを「真」に設定することによって達成されてもよい。
【００８９】
抽出フェーズでは、作業者ノード１１２は、標的画面と基準画面の間の差のマーキングを使って、基準画面を基準としての標的画面の圧縮された表現を抽出してもよい。作業者ノード１１２はこのタスクをいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード１１２は、標的画面の圧縮された表現を抽出するために関数ExtractDeltaを使ってもよい。作業者ノード１１２は標的画面と基準画面の間のマークされた差分を抽出し、その結果をdeltaScrnのような構造中に格納してもよい。そのような標的画面は、マスター・ノード１１０に返されるべき圧縮された状態として使われてもよい。
【００９０】
図７は、少なくとも部分的にクロールされた動的ウェブ・アプリケーションの画面のDOMツリーのマークされたバージョンの例である。図７は、refScrnのような基準画面を基準としてnewScrnのような標的画面をマーク付けする効果を表しうる。そのようなマーク付けは、関数ExtractDeltaによってdeltaScrnのような圧縮された表現を生成するために抽出フェーズにおいて作業者ノード１１２によって使用されてもよい。保持されるまたは破棄されるマーク付けされたDOMの部分は、生成される圧縮された表現の例を示している。たとえば、図７は、図５に示すような状態S1に関しての状態S2の圧縮を表していてもよい。そのような例では、DOMツリーのHTMLノード７０２、HTMLノード属性７０３、HEADノード７０４、HEADノード属性７０６、BODYノード７０８、BODYノード属性７１０、INPUTノード７１２、INPUTノード７１２に関連付けられたDOMサブツリー７１４およびさまざまな他のノードおよびサブツリー７１６に対応するDOMツリーの諸セクションがあってもよい。状態S1からS2に進む動作は、INPUTノード７１２、その属性および子孫ノードのサブツリー７１４のようなDOMノード内の変化として反映されてもよい。さらに、HEADノードの属性７０６のみに対する変化があったことがありうる。これは、「ここをクリック！」ボタンをクリックした結果であってもよい。それにより、スクリプトの諸部分がアクティブ化されてボタン値への変更がなされる。マーク付けされたDOMモデルのこれらの諸部分は変化したとマーク付けされてもよく、よって返されるべきDOMモデルの圧縮されたバージョンに含められてもよい。一方、DOMモデルの他の多くの部分７１６、７１８は二つの状態S1とS2の間で不変のままでありうる。よって、これらの部分は不変とマークされ、よって返されるべきDOMモデルの圧縮されたバージョンでは除去されてもよい。HTMLノード７０２、HEADノード７０４およびBODYノード７０８のようないくつかのセクションは二つの状態S1とS2の間で不変のままでありうるが、変化した子を有することがある。よって、これらのセクションは、変化した部分への経路〔パス〕を提供するよう、返されるべきDOMモデルの圧縮されたバージョン内に保持されてもよい。
【００９１】
このように、作業者ノード１１２は図７の保持されるとマークされた諸部分を、deltaScrnのような圧縮された表現として返してもよい。そのような圧縮された表現は、deltaScrnおよびrefScrnからもとの表現newScrnを一意的かつ完全に再構成するのに十分な情報を有していてもよい。
【００９２】
図８ａおよび図８ｂは、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールを調整するための方法８００の例示的な実施形態である。分散式コンピューティング・システム１００の動作において上記した擬似コードが方法８００の一部または全部を実装してもよい。
【００９３】
ステップ８０５では、ウェブ・アプリケーションがクロールのために初期化されてもよい。そのような初期化は、該ウェブ・アプリケーションをクロールするための開始位置または初期トレースを表現して、一つまたは複数の初期ジョブを決定することを含んでいてもよい。ある実施形態では、生成される初期ジョブの数は、並列にそのようなジョブを実行するのに利用可能な資源の数より多くてもよい。ステップ８１０では、任意のそのような決定されたジョブがジョブ待ち行列に加えられてもよい。
【００９４】
方法８００の二つ以上の分枝が並列して実行されてもよい。一つのそのような分枝はステップ８１５で始まってもよい。もう一つのそのような分枝はステップ８５０で始まってもよい。各分枝は、当該方法が終了されるまで実行されてもよい。当該方法が終了されるべきかどうかの判定は、いずれの分枝において行われても、あるいは方法８００の実行の他の分枝において行われてもよい。ある実施形態では、そのような判定は、ステップ８１５で始まる分枝においてなされてもよい。
【００９５】
ステップ８１５では、ジョブ待ち行列および資源待ち行列が項目〔エントリー〕を含むかどうかが判定されてもよい。ステップ８１５はポーリング方式、イベント・ハンドラまたは他の任意の好適な機構において実装されてもよい。ジョブ待ち行列および資源待ち行列が項目を含む場合、ステップ８２０において、ジョブ待ち行列からジョブが選択されてもよい。ジョブを選択するいかなる好適な方法が使用されてもよい。ある実施形態では、ジョブは先入れ先出し方式で選択されてもよい。ステップ８２５では、資源待ち行列から資源が選択されてもよい。資源を選択するいかなる好適な方法が使用されてもよい。ある実施形態では、資源は先入れ先出し方式で選択されてもよい。ステップ８３０では、前記ジョブは前記資源によって実行されるよう割り当てられてもよい。そのような割り当ては、前記資源が前記ジョブによって指定されるウェブ・アプリケーションの部分をクロールすることを含んでいてもよい。ステップ８３５では、前記資源は前記ジョブの実行のために初期化されてもよい。次に、方法８００はステップ８１５に戻ってもよい。
【００９６】
ジョブ待ち行列および資源待ち行列のいずれかが項目を含まない場合、当該方法が終了されるべきかどうかが判定されてもよい。ステップ８４０では、ジョブ待ち行列が空かどうか、およびすべてのジョブが実行されたかどうかが判定されてもよい。もしそうであれば、ステップ８４５において、そのようなケースは、ウェブ・アプリケーションが完全にクロールされ終わったことを反映してもよく、当該方法は終了してもよい。そうでなければ、当該方法はステップ８１５に戻ってもよい。
【００９７】
ステップ８５０では、以前に資源に割り当てられたいずれかのジョブから結果が受領されたかどうかが判定されてもよい。ステップ８５０は、ポーリング方式、イベント・ハンドラまたは他の任意の好適な機構において実装されうる。結果が受領されていなければ、方法８００はステップ８５０に戻ってもよい。結果が受領されていれば、ステップ８５５において、該結果の一部として受領された状態グラフがあればそれが圧縮解除されてもよい。受領された状態グラフにおける各状態について、ステップ８６０において、その状態がマスター状態グラフ中にあるかどうかが判定されてもよい。もしなければ、ステップ８６５において、その状態がマスター状態グラフ中に格納されてもよく、方法８００はステップ８７０に進んでもよい。もしあれば、方法８００はステップ８７０に進んでもよい。受領された状態グラフ中の各遷移について、ステップ８７０において、その遷移がマスター状態グラフ中にあるかどうかが判定されてもよい。もしなければ、ステップ８７５において、その遷移がマスター状態グラフに加えられてもよく、方法８００はステップ８８０に進んでもよい。もしあれば、方法８００はステップ８８０に進んでもよい。受領された結果中の各ジョブについて、そのジョブがジョブ待ち行列中にあるかある資源において現在実行中であるかどうかが判定されてもよい。もしそうでなければ、８８５において、そのジョブはジョブ待ち行列に加えられてもよく、方法８００はステップ８５０に戻ってもよい。もしそうであれば、方法８００はステップ８５０に戻ってもよい。
【００９８】
図９は、並列な分散環境における、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールのための方法９００の例示的な実施形態である。分散式コンピューティング・システム１００の動作において上記した擬似コードが方法９００の一部または全部を実装してもよい。
【００９９】
ステップ９０５では、ジョブの実行が初期化されてもよい。ジョブはクロールされるべきウェブ・アプリケーションの部分を表していてもよい。そのような初期化は空の状態グラフを生成することを含んでいてもよい。ここで、該状態グラフはウェブ・アプリケーションのクロールの結果を含んでもよい。ウェブ・アプリケーションのクロール中に発見された新たなジョブを含めるためのレコードが初期化されてもよい。ウェブ・アプリケーション中の指定された開始位置に到達するよう初期トレースが実行されてもよい。そのような指定された開始位置におけるウェブ・アプリケーションの画面がロードされてもよい。ステップ９１０では、そのような画面が現在状態として指定されてもよい。
【０１００】
ステップ９１５では、ローカル・グラフに従って、現在状態が以前に訪問されたことがあるかどうかが判定されてもよい。もしそうであれば、ジョブのクロールは終了されてもよく、方法８００はステップ９７５に進んでもよい。もしそうでなければ、ステップ９２０において、ジョブの実行が定義された限界内であるかどうかが判定されてもよい。ジョブの実行が定義された限界内であるかどうかを判定するいかなる好適な方法が使用されてもよい。もしそうでなければ、ジョブのクロールは終了されてもよく、方法８００はステップ９７５に進んでもよい。もしそうであれば、ステップ９３０において、状態グラフが同期されるべく準備ができているかどうかが判定されてもよい。そのような判定は、状態グラフを定期的に同期させてもよい。もしそうであれば、ステップ９３２において、状態グラフはマスター状態グラフと同期されてもよく、方法はステップ９３５に進んでもよい。もしそうでなければ、方法はステップ９３５に進んでもよい。
【０１０１】
ステップ９３５では、ウェブ・アプリケーションのクロールは、まず現在状態において利用できる可能なアクションを判別することによって行われてもよい。ある実施形態では、そのようなアクションは、状態のDOM内に含まれる情報に基づいていてもよい。ステップ９４０では、それらの可能なアクションは未実行のアクションのリストに加えられてもよい。ステップ９４５では、実行されるべきアクションが、未実行のアクションのリストから選択されてもよい。どのアクションが実行されるべきかを選択するには、いかなる好適な基準、クロール技術または検索ストラテジーが使用されてもよい。選択されたアクションはステップ９５０において未実行アクションリストから除去されてもよく、次いでステップ９５５において実行されてもよい。ステップ９６０では、ステップ９５５の実行の結果が、新たな現在状態として指定されてもよい。ステップ９６５では、一つまたは複数のジョブが、未実行アクションのリストから生成されてもよく、ステップ９７０では新たなジョブが新たなジョブのリストに加えられてもよい。そのような新たなジョブのリストは、資源による将来の実行のために、同期の際に、ジョブ待ち行列に送信されてもよい。方法８００は次いでステップ９１５に戻ってもよい。
【０１０２】
ステップ９７５では、状態グラフはマスター状態グラフと同期されてもよい。このステップは、ステップ９３２と同じ仕方で実装されてもよい。ジョブの実行に関する他の情報がマスター・ノードに送信されてもよい。ステップ９８０では、現在の作業者ノード１１２が利用可能であることの指示が資源待ち行列に登録されてもよい。
【０１０３】
図１０は、対話的クライアント‐サーバー・アプリケーションの一部をクロールすることから生成された状態グラフを、該アプリケーションのマスター状態グラフと同期させる方法１０００の例示的な実施形態である。いくつかの実施形態では、方法１０００は図９のステップ９３２および９７５の一部または全部を実装してもよい。分散式コンピューティング・システム１００の動作において上記した擬似コードが方法１０００の一部または全部を実装してもよい。
【０１０４】
ステップ１００５において、マスター状態グラフと同期されるべき状態グラフが圧縮されてもよい。グラフ内の各状態は、本稿で論じているものも含めいかなる好適な技法を使って圧縮されてもよい。状態グラフは、クロールされるべきウェブ・アプリケーションの一部を指示するジョブを実行することからの情報を含んでいてもよい。ステップ１０１０では、そのような圧縮の結果が記憶されてもよい。該結果は、当該状態グラフとすでに同期された前の状態グラフとの間の差を表現してもよい。ステップ１０１５では、圧縮された状態グラフおよび／または新たなジョブのリストがマスター・ノードに送られてもよい。該マスター・ノードはマスター状態グラフを制御／管理してもよく、その二つをマージするよう構成されていてもよい。ステップ１０２０では、状態グラフはマスター・ノードと同期されたとしてマークされてもよい。そのようなマーク付けは、方法１０００の将来のインスタンスによってステップ１０１０の間に使用されてもよい。ステップ１０２５では新たなジョブのリストがクリアされてもよい。
【０１０５】
図１１は、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションのクロールにおける状態情報の圧縮のための方法１１００の例示的な実施形態である。分散式コンピューティング・システム１００の動作において上記した擬似コードが方法１１００の一部または全部を実装してもよい。
【０１０６】
ステップ１１０５において、アプリケーションがクロールされて状態グラフを生成してもよい。状態グラフは該アプリケーションの動作を表していてもよい。あるいはまた、状態グラフは、受領され、あるいは他の仕方で決定されてもよい。状態グラフ中の各状態について、ステップ１１１５〜１１４５が実施されてもよい。
【０１０７】
ステップ１１１５では、所与の状態に関連付けられた画面が判別されてもよい。後続のステップは、そのような画面を圧縮することを試みてもよい。ステップ１１２０では、画面のモデルが判別されてもよい。ある実施形態では、そのようなモデルはDOMモデルを含んでいてもよい。ステップ１１２５では、その画面についての基準画面が決定されてもよい。そのような基準画面は前の画面を含んでいてもよい。該前の画面上である動作が行われた結果、前記の所与の画面になったものである。
【０１０８】
前記所与の画面は、そのモデルの一部として一つまたは複数のノードを含んでいてもよい。そのような各ノードについて、ステップ１１３０において、ノードが初期化されてもよい。そのような初期化は、ノードが不変であるとの指示を設定することを含んでいてもよい。基準画面との比較で当該ノードに変化を見出すと、そのような指示がその後変化させられてもよい。
【０１０９】
ステップ１１３５では、当該画面と基準画面との間の差がマーク付けされてもよい。そのような差は、当該画面のルート・ノードから始まってマークされてもよい。
【０１１０】
ステップ１１４０では、当該画面と基準画面との間のそのようなマーク付けされた変化が抽出されてもよい。そのような抽出された、マーク付けされた変化は、所与の状態の圧縮されたバージョンとして格納されてもよい。ステップ１１４５では、圧縮された状態が返されてもよい。
【０１１１】
図１２は、画面と基準画面との間の変化をマーク付けする方法１２００のある例示的な実施形態である。分散式コンピューティング・システム１００の動作において上記した擬似コードが方法１２００の一部または全部を実装してもよい。いくつかの実施形態では、図１１のステップ１１３５の一部または全部が方法１２００によって実装されてもよい。
【０１１２】
ステップ１２０５では、マークされるべき画面のモデル中の開始ノードが決定されてもよい。そのような開始ノードは、マーク付けされるべき画面のルート・ノード、あるいは方法１２００を呼び出すエンティティによって指定される別のノードであってもよい。同様に、ステップ１２１０において、基準画面が決定されてもよい。そのような基準画面は方法１２００を呼び出すエンティティによって指定されてもよい。
【０１１３】
ステップ１２１５では、当該ノードが基準画面中に存在するかどうかが判定されてもよい。もし存在すれば、当該ノードの子が探査されて、そのような子と基準画面との間の任意の変化が判別されてもよい。もし存在しなければ、そのような子と基準画面との間の任意の変化を判別するために当該ノードの子が探査されなくてもよい。
【０１１４】
当該ノードが基準画面中に存在する場合、ステップ１２２０において、基準画面中の当該ノードの双子の相手が取得されてもよい。ステップ１２２５では、双子ノードの子の数が判別されてもよく、同様にステップ１２３０において現在ノードの子の数が判別されてもよい。
【０１１５】
ステップ１２３５では、現在ノードが双子の相手と同数またはそれ以上の子をもつかどうかが判定されてもよい。もしそうであれば、ステップ１２４０において、当該ノードと双子ノードの属性が等しいかどうかが判定されてもよい。そのような属性はDOMモデルの一部であってもよい。属性が等しくない場合、ステップ１２４５において、当該ノードは変化したとマーク付けされてもよい。ある実施形態では、ノード属性に関するインジケーターが、変化したとマークされてもよい。ステップ１２４７では、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが、該親が変化した子ノードをもつことを示すようマーク付けされていてもよい。ステップ１２５０では、現在ノードの各子について、方法１２００が再帰的に呼び出されてもよい。当該ノードと双子ノードの属性が等しければ、方法１２００は同様にステップ１２５０に進んでもよい。子ノードへの再帰的な一連の呼び出しがなされたのち、方法１２００はステップ１２６５に進んでもよい。
【０１１６】
現在ノードが双子ノードと同数またはそれ以上の子をもたない場合、方法はステップ１２５５に進んでもよい。ここで、当該ノードは、変化したとマークされる。ステップ１２６０では、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが該親が変化した子ノードをもつことを示すようマーク付けされていてもよい。ステップ１２６０およびステップ１２４７は同じ仕方で実装されてもよい。方法１２００は次いでステップ１２６５に進んでもよい。
【０１１７】
ステップ１２６５では、当該ノードが変化した子ノードをもつかどうかが判定されてもよい。そのような判定は、そのような指定があるかどうか当該ノードの指示を調べることによってなされてもよい。当該ノードは、当該ノードの子について方法１２００の再帰的な呼び出しを通じてそのようにマーク付けされたことがありうる。方法１２００の動作中に、ノードが、変化した子をもつとしてマーク付けされたことがありうるのである。当該ノードが変化した子ノードをもつ場合、ステップ１２７０において、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが、該親が変化した子ノードをもつことを示すようマーク付けされてもよい。ステップ１２７０、１２６０および１２４７は同様にして実装されうる。方法１２００は次いでステップ１２７５に進んでもよく、ここで、方法１２００は終了してもよい。
【０１１８】
図８〜図１２は例示的な方法８００、９００、１０００、１１００および１２００に関して取られるべき特定の数のステップを開示しているが、方法８００、９００、１０００、１１００および１２００は図８〜図１２に描かれるより多数またはより少数のステップで実行されてもよい。さらに、図８〜図１２は方法８００、９００、１０００、１１００および１２００に関して取られるべきステップの所定の順序を開示しているが、方法８００、９００、１０００、１１００および１２００をなすステップはいかなる好適な順序で完了されてもよい。
【０１１９】
方法８００、９００、１０００、１１００および１２００は図１〜図７のシステム、あるいは方法８００、９００、１０００、１１００および１２００を実装するよう動作可能な他の任意のシステム、ネットワークまたは装置を使って実装されてもよい。ある種の実施形態では、方法８００、９００、１０００、１１００および１２００は、部分的にまたは完全にコンピュータ可読媒体に具現されたソフトウェアにおいて実装されてもよい。
【０１２０】
本開示の目的のためには、コンピュータ可読媒体はデータおよび／または命令を一定の期間にわたって保持しうるいかなる器具または器具の集まりを含んでいてもよい。コンピュータ可読媒体は、限定するものではないが、直接アクセス記憶デバイス（たとえばハードディスク・ドライブまたはフロッピー(登録商標)ディスク）、順次アクセス記憶媒体（たとえばテープ・ディスク・ドライブ）、コンパクト・ディスク、CD-ROM、DVD、ランダム・アクセス・メモリ（RAM）、読み出し専用メモリ（ROM）、電気的に消去可能なプログラム可能型読み出し専用メモリ（EEPROM）および／またはフラッシュ・メモリのような記憶媒体ならびにワイヤ、光ファイバおよび他の有形の非一時的媒体といった通信媒体ならびに／または上記の任意の組み合わせを含みうる。
【０１２１】
本開示は詳細に記載されてきたが、本開示の精神および範囲から外れることなくさまざまな変更、代替および修正ができることは理解しておくべきである。
【０１２２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
マスター状態グラフを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記マスター状態グラフは、対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含み、前記プロセッサは、
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を前記マスター状態グラフに統合する段階とを実行するよう構成されている、
電子装置。
（付記２）
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記１記載の電子装置。
（付記３）
付記１または２記載の電子装置であって、前記プロセッサは前記第一の作業者ノードを、前記マスター状態グラフの部分的トレースを含む初期化情報をもって初期化し、前記部分的トレースは一連のコマンドを含み、前記一連のコマンドの実行は、前記第一の作業者ノードがクロールを開始する出発点となる初期化状態を与える、電子装置。
（付記４）
付記１ないし３のうちいずれか一項記載の電子装置であって、前記プロセッサはさらに前記第一の作業者ノードを、境界条件を含む初期化情報をもって初期化するよう構成されており、前記境界条件は前記第一の作業者ノードが前記対話的クライアント‐サーバー・アプリケーションのクロールを停止する停止点を示す、電子装置。
（付記５）
付記１ないし４のうちいずれか一項記載の電子装置であって、前記プロセッサはさらに前記第一の作業者ノードから新たなジョブを受信するよう構成されており、前記新たなジョブは、前記対話的クライアント‐サーバー・アプリケーションのうち、前記第一の作業者ノードによってクロールされていない、クロールされるべき第三の部分を同定し、前記第一の作業者ノードは前記第三の部分を同定したのち前記対話的クライアント‐サーバー・アプリケーションのクロールを続ける、電子装置。
（付記６）
付記５記載の電子装置であって、
前記メモリが、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造を含み、
前記プロセッサはさらに、前記新たなジョブがジョブ・データ構造中に存在するかどうかを判定するよう構成されている、
電子装置。
（付記７）
付記６記載の電子装置であって、前記プロセッサはさらに、前記新たなジョブが前記ジョブ・データ構造中に存在する場合、前記新たなジョブを破棄するよう構成されている、電子装置。
（付記８）
付記６記載の電子装置であって、前記プロセッサはさらに、前記新たなジョブが前記ジョブ・データ構造中に存在しない場合、前記新たなジョブを前記ジョブ・データ構造に追加するよう構成されている、電子装置。
（付記９）
付記１ないし８のうちいずれか一項記載の電子装置であって、前記プロセッサはさらに：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とを実行するよう構成されている、
電子装置。
（付記１０）
付記１記載の電子装置であって、前記プロセッサがさらに：
受信した結果が前記対話的クライアント‐サーバー・アプリケーションの少なくとも第三の部分全体の完了されたクロールを示すかどうかを判定する段階であって、前記第三の部分は、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造内のある第三のジョブに対応するものである、段階と；
受信した結果が、前記対話的クライアント‐サーバー・アプリケーションの少なくとも前記第三の部分全体のそのような完了されたクロールを示す場合、前記ジョブ・データ構造から前記第三のジョブを削除する段階とを実行するよう構成されている、
電子装置。
（付記１１）
付記１記載の電子装置であって、
前記メモリが、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造を含み、
前記プロセッサがさらに、前記ジョブ・データ構造から優先度が最高のジョブを選択することによって前記第一のジョブを選択するよう構成されている、
電子装置。
（付記１２）
付記１記載の電子装置であって、
前記メモリが、前記対話的クライアント‐サーバー・アプリケーションをクロールするために利用可能な複数のコンピューティング・ノードを同定する資源データ構造を含み、
前記プロセッサがさらに、前記資源データ構造中で最良一致であるものを選択することにより、前記資源データ構造から、選択されたジョブを実行する前記第一の作業者ノードを選択するよう構成されている、
電子装置。
（付記１３）
付記１記載の電子装置であって、前記プロセッサは前記結果を統合する段階を：
前記結果に含まれる返された状態を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することによって行う、
電子装置。
（付記１４）
付記１記載の電子装置であって、前記プロセッサは前記結果を統合する段階を；
前記結果に含まれる返された状態間遷移を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することによって行う、
電子装置。
（付記１５）
付記１記載の電子装置であって、前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階が、前記プロセッサが圧縮されたローカル状態グラフを圧縮解除することを含む、電子装置。
（付記１６）
付記１記載の電子装置であって、前記プロセッサがさらに：
前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造が空であるかどうかを判定する段階と；
諸作業者ノードに割り当てられたすべてのジョブが実行を完了しているかどうかを判定する段階と；
前記ジョブ・データ構造が空であり、かつ諸作業者ノードに割り当てられたすべてのジョブが実行を完了している場合、前記対話的クライアント‐サーバー・アプリケーションがクロールされ終わったと判定する段階とを実行するよう構成されている、
電子装置。
（付記１７）
対話的クライアント‐サーバー・アプリケーションのクロールを協調させる方法であって：
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を、前記対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含むマスター状態グラフに統合する段階とを含む、
方法。
（付記１８）
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記１７記載の方法。
（付記１９）
付記１７または１８記載の方法であって、前記第一の作業者ノードを、前記マスター状態グラフの部分的トレースを含む初期化情報をもって初期化する段階をさらに含み、前記部分的トレースは一連のコマンドを含み、前記一連のコマンドの実行は、前記第一の作業者ノードがクロールを開始する出発点となる初期化状態を与える、方法。（１８）
（付記２０）
付記１７ないし１９のうちいずれか一項記載の方法であって、前記第一の作業者ノードを、境界条件を含む初期化情報をもって初期化する段階をさらに含み、前記境界条件は前記第一の作業者ノードが前記対話的クライアント‐サーバー・アプリケーションのクロールを停止する停止点を示す、方法。
（付記２１）
付記１７ないし２０のうちいずれか一項記載の方法であって、前記第一の作業者ノードから新たなジョブを受信する段階をさらに含み、前記新たなジョブは、前記対話的クライアント‐サーバー・アプリケーションのうち、前記第一の作業者ノードによってクロールされていない、クロールされるべき第三の部分を同定し、前記第一の作業者ノードは前記第三の部分を同定したのち前記対話的クライアント‐サーバー・アプリケーションのクロールを続ける、方法。
（付記２２）
付記２１記載の方法であって、前記新たなジョブが、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造中に存在するかどうかを判定する段階をさらに含む、方法。
（付記２３）
付記２２記載の方法であって、前記新たなジョブが前記ジョブ・データ構造中に存在する場合、前記新たなジョブを破棄する段階をさらに含む、方法。
（付記２４）
付記２２記載の方法であって、前記新たなジョブが前記ジョブ・データ構造中に存在しない場合、前記新たなジョブを前記ジョブ・データ構造に追加する段階をさらに含む、方法。
（付記２５）
付記１７ないし２４のうちいずれか一項記載の方法であって：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とをさらに含む、
方法。
（付記２６）
付記１７記載の方法であって：
受信した結果が前記対話的クライアント‐サーバー・アプリケーションの少なくとも第三の部分全体の完了されたクロールを示すかどうかを判定する段階であって、前記第三の部分は、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造内のある第三のジョブに対応するものである、段階と；
受信した結果が、前記対話的クライアント‐サーバー・アプリケーションの少なくとも前記第三の部分全体のそのような完了されたクロールを示す場合、前記ジョブ・データ構造から前記第三のジョブを削除する段階とをさらに含む、
方法。
（付記２７）
付記１７記載の方法であって、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造から、前記ジョブ・データ構造中の最良一致を選択することによって前記第一のジョブを選択する段階をさらに含む、方法。
（付記２８）
付記１７記載の方法であって、
前記対話的クライアント‐サーバー・アプリケーションをクロールするために利用可能な複数のコンピューティング・ノードを同定する資源データ構造から、前記資源データ構造中で最良一致であるものを選択することにより、前記第一のジョブを実行する前記第一の作業者ノードを選択する段階をさらに含む、
方法。
（付記２９）
付記１７記載の方法であって、前記結果を統合する段階が：
前記結果に含まれる返された状態を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することを含む、
方法。
（付記３０）
付記１７記載の方法であって、前記結果を統合する段階が；
前記結果に含まれる返された状態間遷移を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することを含む、
方法。
（付記３１）
付記１７記載の方法であって、前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階が、圧縮されたローカル状態グラフを圧縮解除することを含む、方法。
（付記３２）
付記１７記載の方法であって：
前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造が空であるかどうかを判定する段階と；
諸作業者ノードに割り当てられたすべてのジョブが実行を完了しているかどうかを判定する段階と；
前記ジョブ・データ構造が空であり、かつ諸作業者ノードに割り当てられたすべてのジョブが実行を完了している場合、前記対話的クライアント‐サーバー・アプリケーションがクロールされ終わったと判定する段階とをさらに含む、
方法。
（付記３３）
コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記コンピュータ実行可能命令はプロセッサに：
対話的クライアント‐サーバー・アプリケーションの第一の部分をクロールするクロール命令を含む第一のジョブを第一の作業者ノードに送る段階と；
前記対話的クライアント‐サーバー・アプリケーションの第二の部分をクロールするクロール命令を含む第二のジョブを第二の作業者ノードに送る段階であって、前記第一の作業者ノードおよび前記第二の作業者ノードは前記対話的クライアント‐サーバー・アプリケーションを並列にクロールする、段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階と；
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を、前記対話的クライアント‐サーバー・アプリケーションの動作に関する情報を含むマスター状態グラフに統合する段階とを実行させるものである、
媒体。
（付記３４）
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記３３記載の媒体。
（付記３５）
付記３３または３４記載の媒体であって、前記プロセッサに、前記第一の作業者ノードを、前記マスター状態グラフの部分的トレースを含む初期化情報をもって初期化する段階を実行させる命令をさらに含み、前記部分的トレースは一連のコマンドを含み、前記一連のコマンドの実行は、前記第一の作業者ノードがクロールを開始する出発点となる初期化状態を与える、媒体。
（付記３６）
付記３３ないし３５のうちいずれか一項記載の媒体であって、前記プロセッサに、前記第一の作業者ノードを、境界条件を含む初期化情報をもって初期化する段階を実行させる命令をさらに含み、前記境界条件は前記第一の作業者ノードが前記対話的クライアント‐サーバー・アプリケーションのクロールを停止する停止点を示す、媒体。
（付記３７）
付記３３ないし３６のうちいずれか一項記載の媒体であって、前記プロセッサに、前記第一の作業者ノードから新たなジョブを受信する段階を実行させる命令をさらに含み、前記新たなジョブは、前記対話的クライアント‐サーバー・アプリケーションのうち、前記第一の作業者ノードによってクロールされていない、クロールされるべき第三の部分を同定し、前記第一の作業者ノードは前記第三の部分を同定したのち前記対話的クライアント‐サーバー・アプリケーションのクロールを続ける、媒体。
（付記３８）
付記３７記載の媒体であって、前記プロセッサに、前記新たなジョブが、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造中に存在するかどうかを判定する段階を実行させる命令をさらに含む、媒体。
（付記３９）
付記３８記載の媒体であって、前記プロセッサに、前記新たなジョブが前記ジョブ・データ構造中に存在する場合、前記新たなジョブを破棄する段階を実行させる命令をさらに含む、媒体。
（付記４０）
付記３８記載の媒体であって、前記プロセッサに、前記新たなジョブが前記ジョブ・データ構造中に存在しない場合、前記新たなジョブを前記ジョブ・データ構造に追加する段階を実行させる命令をさらに含む、媒体。
（付記４１）
付記３３ないし４０のうちいずれか一項記載の媒体であって、前記プロセッサに：
前記対話的クライアント‐サーバー・アプリケーションの第三の部分をクロールするクロール命令を含む第三のジョブを第三の作業者ノードに割り当てる段階と；
前記第三のジョブからの結果を受信する段階と；
前記第三のジョブからの結果が前記第三の部分の完了を示し、前記結果が前記対話的クライアント‐サーバー・アプリケーションの前記第二の部分全体を含む場合、前記第二の作業者ノードに、前記第二の作業者ノードで現在実行中である前記第二のジョブの実行を停止するようパージ信号を送る段階とを実行させる命令をさらに含む、
媒体。
（付記４２）
付記３３記載の媒体であって、前記プロセッサに：
受信した結果が前記対話的クライアント‐サーバー・アプリケーションの少なくとも第三の部分全体の完了されたクロールを示すかどうかを判定する段階であって、前記第三の部分は、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造内のある第三のジョブに対応するものである、段階と；
受信した結果が、前記対話的クライアント‐サーバー・アプリケーションの少なくとも前記第三の部分全体のそのような完了されたクロールを示す場合、前記ジョブ・データ構造から前記第三のジョブを削除する段階とを実行させる命令をさらに含む、
媒体。
（付記４３）
付記３３記載の媒体であって、前記プロセッサに、前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造から、前記ジョブ・データ構造中の最良一致として前記第一のジョブを選択する段階を実行させる命令をさらに含む、媒体。
（付記４４）
付記３３記載の媒体であって、前記プロセッサに、前記対話的クライアント‐サーバー・アプリケーションをクロールするために利用可能な複数のコンピューティング・ノードを同定する資源データ構造から、前記資源データ構造中で最良一致であるものとして前記第一のジョブを実行する前記第一の作業者ノードを選択する段階を実行させる命令をさらに含む、媒体。
（付記４５）
付記３３記載の媒体であって、前記結果を統合する段階が：
前記結果に含まれる返された状態を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することを含む、
媒体。
（付記４６）
付記３３記載の媒体であって、前記結果を統合する段階が；
前記結果に含まれる返された状態間遷移を判別し；
前記返された状態が前記マスター状態グラフに存在しているかどうかを判定し、存在していなければ、前記返された状態を前記マスター状態グラフに追加することを含む、
媒体。
（付記４７）
付記３３記載の媒体であって、前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を受信する段階が、圧縮されたローカル状態グラフを圧縮解除することを含む、媒体。
（付記４８）
付記３３記載の媒体であって、前記プロセッサに：
前記対話的クライアント‐サーバー・アプリケーションのうちクロールされるべき複数の部分を同定するジョブ・データ構造が空であるかどうかを判定する段階と；
諸作業者ノードに割り当てられたすべてのジョブが実行を完了しているかどうかを判定する段階と；
前記ジョブ・データ構造が空であり、かつ諸作業者ノードに割り当てられたすべてのジョブが実行を完了している場合、前記対話的クライアント‐サーバー・アプリケーションがクロールされ終わったと判定する段階とを実行させる命令をさらに含む、
媒体。
【符号の説明】
【０１２３】
１００  ウェブ・アプリケーション・クロール・サービス
１０４  ウェブ・アプリケーション
１０６  分散コンピューティング環境
１１０  マスター・ノード
１１２  作業者ノード
２０６  メモリ
２０８  プロセッサ
２１０  メモリ
２１２  プロセッサ
２１８  作業者クローラー・アプリケーション
２２０  マスター・クローラー・アプリケーション
２２２  ウェブ・アプリケーション・データ
２２４  ウェブ・アプリケーション・データ
２２６  ブラウザー
２２８  ブラウザー
２３０  ネットワーク
２３２  ジョブ待ち行列
２３４  資源待ち行列
２３６  マスター状態グラフ
４０２  遷移グラフ・モデル
４０４  部分的トレース
４０６  ウェブ・アプリケーション・スタート・ページ
８００  動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールを調整するための方法
８０５  ウェブ・アプリケーションのクロールを初期化
８１０  ジョブ待ち行列にジョブを追加
８１５  ジョブ待ち行列および資源待ち行列が項目を含むか？
８２０  ジョブ待ち行列からジョブを選択
８２５  資源待ち行列から資源を選択
８３０  ジョブを資源に割り当て
８３５  資源を初期化
８４０  ジョブ待ち行列が空で、すべてのジョブが実行済みか？
８４５  ウェブ・サイトはクロール済み
８５０  前のジョブ結果が作業者ノードから受領されたか？
８５５  受領された状態グラフを圧縮解除
８６０  状態はマスター状態グラフにあるか？
８６５  状態をマスター状態グラフに追加
８７０  遷移はマスター状態グラフにあるか？
８７５  遷移をマスター状態グラフに追加
８８０  ジョブはジョブ待ち行列にあるか？
８８５  ジョブをジョブ待ち行列に追加
９００  動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールのための方法
９０５  ジョブの実行を初期化
９１０  現在状態を判別
９１５  現在状態を以前に訪問？
９２０  ジョブの実行は限界内か？
９３０  状態グラフは同期準備完了？
９３２  状態グラフをマスター状態グラフと同期
９３５  現在状態での可能なアクションを判別
９４０  未実行アクションのリストに可能なアクションを追加
９４５  未実行アクションのリストからアクションを選択
９５０  未実行アクションのリストから選択されたアクションを除去
９５５  選択されたアクションを実行
９６０  結果として得られる状態を現在状態として記憶
９６５  未実行アクションのリストから新たなジョブを決定
９７０  決定された新たなジョブを新たなジョブのリストに追加
９７５  状態グラフをマスター状態グラフと同期
９８０  資源待ち行列に登録
１０００  状態グラフをマスター状態グラフと同期させる方法
１００５  状態グラフを圧縮
１０１０  状態グラフと前の状態グラフの間の差として結果を記憶
１０１５  圧縮された状態グラフおよび新たなジョブのリストをマスター・ノードに送る
１０２０  状態グラフを同期されたと記録
１０２５  新たなジョブのリストをクリア
１１００  状態情報の圧縮のための方法
１１０５  状態グラフを生成するためにウェブ・サイトをクロール
１１１５  状態に関連する画面を判別
１１２０  画面のモデルを決定
１１２５  基準画面を決定
１１３０  ノードを不変として初期化
１１３５  画面と基準画面の間の変化をマーク
１１４０  画面と基準画面の間のマークされた変化を抽出
１１４５  圧縮された状態を返す
１２００  画面と基準画面との間の変化をマーク付けする方法
１２０５  画面のモデル中の開始ノードを決定
１２１０  基準画面を決定
１２１５  ノードが基準画面に存在？
１２２０  基準画面におけるノードの双子の相手を取得
１２２５  双子ノードの子の数を判別（CHILDRENTwin_Node）
１２３０  ノードの子の数を判別（CHILDRENNode）
１２３５  CHILDRENNode≧CHILDRENTwin_Node？
１２４０  ノードと双子ノードの属性が等しい？
１２４５  ノード属性を変化したとマーク
１２４７  ノードの親を変化した子ノードをもつとマーク
１２５０  子に対して方法を再帰的に実行
１２５５  ノードを変化したとマーク
１２６０  ノードの親を変化した子ノードをもつとマーク
１２６５  ノードが変化した子ノードをもつか？
１２７０  ノードの親を変化した子ノードをもつとマーク
１２７５  終了
【図１】
0005751134.tif 000007
【図２】
0005751134.tif 000008
【図３】
0005751134.tif 000009
【図４】
0005751134.tif 000010
【図５】
0005751134.tif 000011
【図６ａ】
0005751134.tif 000012
【図６ｂ】
0005751134.tif 000013
【図６ｃ】
0005751134.tif 000014
【図７】
0005751134.tif 000015
【図８ａ】
0005751134.tif 000016
【図８ｂ】
0005751134.tif 000017
【図９】
0005751134.tif 000018
【図１０】
0005751134.tif 000019
【図１１】
0005751134.tif 000020
【図１２】
0005751134.tif 000021