クローリングアプリケーションを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記プロセッサは、前記クローリングアプリケーションを実行するよう構成されており、前記クローリングアプリケーションは、前記プロセッサに:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを実行させるよう構成され、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、電子装置。前記対話的クライアント‐サーバーアプリケーションが動的ウェブアプリケーションである、請求項1記載の装置。請求項1または2記載の装置であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、当該装置がクロールを開始する出発点となる初期化状態を与える、装置。請求項1ないし3のうちいずれか一項記載の装置であって、前記メモリに記憶されたローカル状態グラフをさらに有しており、前記ローカル状態グラフは:前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに前記対話的クライアント‐サーバーアプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移の記録を含み、前記ローカル状態グラフは当該装置がクロールを開始する出発点となる初期化状態を含む、装置。請求項1ないし4のうちいずれか一項記載の装置であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、装置。請求項1ないし5のうちいずれか一項記載の装置であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバーアプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、装置。請求項1ないし6のうちいずれか一項記載の装置であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバーアプリケーションをクロールするのに費やされる時間の長さに対する限界である、装置。請求項1ないし7のうちいずれか一項記載の装置であって、前記境界条件がパージコマンドを受信することを含む、装置。請求項1ないし8のうちいずれか一項記載の装置であって、前記プロセッサがさらに:新たなジョブを判別し;前記新たなジョブを報告するが、該ジョブを実行はしないよう構成されており、前記新たなジョブは、行われなかった前記動作の一つを含む、装置。請求項9記載の装置であって、前記プロセッサはさらに、前記境界条件に達する前、前記境界条件に達したとき、および/または所定の報告条件に達したときに、前記新たなジョブを報告するよう構成される、装置。請求項10記載の装置であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、装置。請求項11記載の装置であって、前記ジョブが前記定期的な遅延を含む、装置。請求項11記載の装置であって、前記プロセッサがさらに:実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;前記ジョブの実行の際の前記ジョブの前記定期的な遅延を変更するよう構成されている、装置。請求項1ないし13のうちいずれか一項記載の装置であって、前記プロセッサがさらに、当該電子装置を利用可能資源データ構造に登録するよう構成されており、前記利用可能資源データ構造は、前記対話的クライアント‐サーバーアプリケーションをクロールするクローリングジョブを受け容れるのに利用可能である資源の指標を含む、装置。対話的クライアント‐サーバーアプリケーションをクロールする方法であって:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを含み、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、方法。請求項15記載の方法であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、クロールが始まる出発点となる初期化状態を与える、方法。請求項15または16記載の方法であって、ローカル状態グラフを記憶することをさらに含み、前記ローカル状態グラフは:前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに前記対話的クライアント‐サーバーアプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移の記録を含み、前記ローカル状態グラフはクロールが始まる出発点となる初期化状態を含む、方法。請求項15ないし17のうちいずれか一項記載の方法であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、方法。請求項15ないし18のうちいずれか一項記載の方法であって、さらに:新たなジョブを判別し;前記新たなジョブを報告するが、該ジョブを実行はしないことを含み、前記新たなジョブは、行われなかった前記動作の一つを含む、方法。コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記コンピュータ実行可能命令はプロセッサに:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを実行させるものであり、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、媒体。一部の近年の研究は、動的ウェブ2.0アプリケーションの振る舞いを包括的に探査、捕捉および有効確認するためにカスタムAJAXウェブアプリケーションクローラーを使うことを提案している。しかしながら、そのようなクロールは典型的には非常に計算集約的であり、よって実際上の配慮のため、現実のクロールは、ウェブアプリケーションの真の振る舞い空間のごく一部のみに限定されてしまう。ある実施形態では、電子装置がクローリングアプリケーションを含むメモリおよび該メモリに結合されたプロセッサを含む。前記プロセッサは、クローリングアプリケーションを実行するよう構成される。クローリングアプリケーションは、前記プロセッサに、ジョブを受信し、境界条件に達するまで初期化情報に基づいて対話的クライアント‐サーバーアプリケーションをクロールし、対話的クライアント‐サーバーアプリケーションをクロールした結果を報告することをさせる。ジョブは初期化情報を含む。初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する。対話的クライアント‐サーバーアプリケーションのクロールは、前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別し、前記第一の状態を記録し、動作を選択し、行われない動作を記録し、前記動作を行い、前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達し、前記第二の状態を記録し、前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録することを含む。前記対話的クライアント‐サーバーアプリケーションの結果を報告することは、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む。もう一つの実施形態では、対話的クライアント‐サーバーアプリケーションのクロールを調整する方法が、ジョブを受信し、境界条件に達するまで初期化情報に基づいて対話的クライアント‐サーバーアプリケーションをクロールし、対話的クライアント‐サーバーアプリケーションをクロールした結果を報告することを含む。ジョブは初期化情報を含む。初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する。対話的クライアント‐サーバーアプリケーションのクロールは、前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別し、前記第一の状態を記録し、動作を選択し、行われない動作を記録し、前記動作を行い、前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達し、前記第二の状態を記録し、前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録することを含む。前記対話的クライアント‐サーバーアプリケーションの結果を報告することは、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む。さらにもう一つの実施形態では、製造物がコンピュータ可読媒体および該コンピュータ可読媒体に担持されるコンピュータ実行可能命令を含む。命令はプロセッサによって読み取り可能である。命令は、読み出され、実行されたとき、プロセッサに、ジョブを受信し、境界条件に達するまで初期化情報に基づいて対話的クライアント‐サーバーアプリケーションをクロールし、対話的クライアント‐サーバーアプリケーションをクロールした結果を報告することをさせる。ジョブは初期化情報を含む。初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する。対話的クライアント‐サーバーアプリケーションのクロールは、前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別し、前記第一の状態を記録し、動作を選択し、行われない動作を記録し、前記動作を行い、前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達し、前記第二の状態を記録し、前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録することを含む。前記対話的クライアント‐サーバーアプリケーションの結果を報告することは、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む。図1は、分散式コンピューティングシステム100の例示的な実施形態である。ある実施形態では、分散式コンピューティングシステム100は、一つまたは複数の対話的クライアント‐サーバーアプリケーションの並列クロールのためのサービスを提供する。ある実施形態では、そのような対話的クライアント‐サーバーアプリケーションはウェブアプリケーション104を含んでいてもよい。そのようなウェブアプリケーション104は動的ウェブアプリケーションを含んでいてもよい。ひとたびその動作およびスコープを決定するようクロールされてから、ウェブアプリケーション104はその後試験されてもよい。分散式コンピューティングシステム100は、複数のネットワーク接続されたコンピューティング資源を含むいかなる分散式コンピューティング環境106を含んでいてもよい。そのようなコンピューティング資源は異なる種類のものを含んでいてもよい。さまざまな実施形態において、コンピューティング資源の接続トポロジーは未知または不規則であってもよく、分散式コンピューティングシステム100において実装されるサービスが当座の計算タスクを実行するために特定のトポロジーを利用できなくてもよい。ある実施形態では、分散式コンピューティングシステム100はクラウドコンピューティングのフレームワークまたは環境において実装されてもよい。分散式コンピューティングシステム100は一つまたは複数のコンピューティングノードによって実装されてもよい。一つのそのようなコンピューティングノードは、マスターノード110として指定されてもよく、他のコンピューティングノードは作業者ノード112として指定されてもよい。作業者ノード112および/またはマスターノード110は、これに限られないが、サーバー、コンピュータまたはその任意の集合を含むいかなる好適な電子装置において実装されてもよい。作業者ノード112およびマスターノード110は、メモリに結合されたプロセッサおよび命令を含んでいてもよい。該命令は、前記プロセッサによる実行のために前記メモリにロードされるとき、本稿に記載される機能を実行しうる。作業者ノード112およびマスターノード110は、ネットワーク構成を通じるなどして、通信上互いに結合されていてもよい。ネットワーク構成は、異なる種類のものを含んでいても均質なものであってもよく、分散式コンピューティング環境106によって提供されてもよい。作業者ノード112とマスターノード110を通信上結合するためにいかなる好適なネットワーク構成が使用されてもよい。分散式コンピューティングシステム100の作業者ノード112およびマスターノード110は、広域ネットワーク、ローカルエリアネットワーク、イントラネット、インターネットまたはこれらの要素の任意の結合といった、いかなる好適なネットワークでネットワーク接続されてもよい。作業者ノード112および/またはマスターノード110は、並列な仕方で達成されるべきタスクに関連付けられた計算負荷を共有するよう構成されていてもよい。たとえば、作業者ノード112は一つまたは複数のウェブアプリケーション104を試験するために並列に動作してもよい。そのようなウェブアプリケーションは一つまたは複数のウェブサイト上で動作したり、あるいは一つまたは複数のウェブサイトによってホストされたりしてもよい。そのような試験を達成するために、作業者ノード112および/またはマスターノード110は通信上ウェブアプリケーション104に結合されていてもよい。マスターノード110はウェブアプリケーション104に通信上結合され、ウェブアプリケーション104を試験するために他の作業者ノード112の動作を整理するよう構成されていてもよい。一つまたは複数の動的ウェブアプリケーション104を試験する一環として、作業者ノード112およびマスターノード110はウェブアプリケーションクロールサービスを動作させてもよい。たとえば、ウェブアプリケーション104の開発者はそのようなウェブアプリケーション104を試験にかけてもよく、ここで、分散式コンピューティングシステム100の作業者ノード112および/またはマスターノード110はそのような動的ウェブアプリケーション104をクロールしてそのスコープおよび動作を判別してもよく、判別されたスコープおよび動作がそのような試験で使われてもよい。そのようなウェブアプリケーションは、AJAX、フラッシュまたは豊かで動的で対話的なユーザー経験を提供するよう構成された他の技術といった技術を使うウェブ2.0アプリケーションを含んでいてもよい。そのような動的なウェブアプリケーションはステートフルな振る舞いおよび可能性としては無限個の動的に生成された画面を有していてもよい。そのような振る舞いは、所与の生成された画面またはウェブページが、内容または動作において、その画面またはウェブページのロード、動作または生成を引き起こした特定のアクションに依存しうるという意味でステートフルであってもよい。分散式コンピューティングシステム100は、作業者ノード112およびマスターノード110のそれぞれで走るミドルウェアを含んでいてもよい。そのようなミドルウェアは、マスターノード110を各作業者ノード112とインターフェースをもたせるソフトウェアとして実装されてもよい。ミドルウェアは、コンピューティングタスクの並列化を可能にするよう構成されていてもよい。作業者ノード112とマスターノード110の間の通信は、時間またはネットワークまたは処理資源の面で非常に高価であることがある。よって、分散式コンピューティングシステム100のミドルウェアは、作業者ノード112とマスターノード110の間の通信を最小限にしてもよい。分散式コンピューティングシステム100の計算資源は、動的ウェブアプリケーション104をクロールすることによっててこ入れされるよう構成されてもよい。分散式コンピューティングシステム100は、クロールを並列化し、複数のコンピューティングノードに分散させるよう構成されていてもよい。その結果、クロールは並列化を助けるようにされるべきである。分散式コンピューティングシステム100は、クロールの並列化を、トポロジーまたはアーキテクチャとは独立な仕方で実施するよう構成されていてもよい。いくつかの実施形態では、分散式コンピューティングシステム100のノードは任意の接続トポロジーを有していてよく、その接続トポロジーは動的アプリケーション104の並列クロールのために作業者ノード112および/またはマスターノード110を組織化するアプリケーションから隠されていてもよい。分散式コンピューティングシステム100は、コンピューティングノード110、112の間の通信を最小限にするよう構成されてもよい。そのようなノードは、互いに物理的に遠隔であることがあり、その結果、通信が高価となることがあるからである。作業者ノード112は、状態、遷移および新しいジョブを含むクロールの結果を返すよう構成されてもよい。分散式コンピューティングシステム100は、メインコンピューティングノード110の動作を通じて、クラウドまたは分散式コンピューティングシステム100におけるさまざまな作業者ノード112からのクロールの結果を再統合するよう構成されていてもよい。図2は、マスターノード110および一つまたは複数の作業者ノード112を含む、対話的クライアント‐サーバーアプリケーションの分散式の並列クロールのためのアーキテクチャの例示的実施形態である。マスターノード110は通信上作業者ノード112に結合されていてもよく、それぞれ、ウェブアプリケーション104を動的にクロールするために一つまたは複数のウェブアプリケーション104に通信上結合されていてもよい。より多くの作業者ノードがマスターノード110およびウェブアプリケーション104に結合されていてもよいが、図示していない。作業者ノード112およびマスターノード110はネットワーク230を通じて通信上結合されていてもよい。ネットワーク230は、図1の分散式コンピューティング環境106のネットワークまたはクラウドにおいて具現されていてもよい。作業者ノード112は、マスターノード110の指揮のもと、他の作業者ノードと並列にウェブアプリケーション104をクロールするよう構成されていてもよい。マスターノード110は、メモリ206に結合されたプロセッサ208を含んでいてもよい。マスターノード110は、マスタークローラーアプリケーション220を含んでいてもよい。マスタークローラーアプリケーション220は、プロセッサ208によって実行されるよう構成されていてもよく、メモリ206に存在してもよい。マスターノード110は、マスタークローラーアプリケーション220を通じてウェブアプリケーション104および作業者ノード112と通信上結合されていてもよい。マスターノード110は、クロールされるべきペンディングジョブを表すジョブ待ち行列232を含んでいてもよい。ジョブはクロールされるべきウェブアプリケーション104の部分の記述を含んでいてもよい。マスターノード110は、割り当てられるクロールジョブ割り当てに利用可能な作業者ノード112を指示する資源待ち行列234を含んでいてもよい。資源待ち行列234およびジョブ待ち行列232の中身の入れ方populationの例はのちに論ずる。クロールジョブは、作業者ノード112によって探査されるべきウェブアプリケーション104の部分の指示を含んでいてもよい。マスターノード110はマスター状態グラフ236のコピーを保持してもよい。マスター状態グラフ236はウェブアプリケーション104の画面遷移グラフモデルのマスターコピーであってもよく、ウェブアプリケーション104をクロールした結果を含んでいてもよい。作業者ノード112は、メモリ210に結合されたプロセッサ212を含んでいてもよい。作業者ノード112は作業者クローラーアプリケーション218を含んでいてもよい。作業者クローラーアプリケーション218は、プロセッサ212によって実行されるよう構成されていてもよく、メモリ210に存在してもよい。作業者ノード112は、作業者クローラーアプリケーション218を通じてウェブアプリケーション104およびマスタークローラーアプリケーション220と通信上結合されていてもよい。ノードのプロセッサ208、212はたとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサDSPdigitalsignalprocessor、特定用途向け集積回路ASICapplicationspecificintegratedcircuitまたはプログラム命令を解釈および/または実行するおよび/またはデータを処理するよう構成された他の任意のデジタルまたはアナログ回路であってもよい。プロセッサ208、212はプログラム命令を解釈および/または実行してもよいし、作業者ノード112および/またはマスターノード110のそれぞれのメモリ206、210に記憶されたデータを処理してもよい。メモリ206、210は、プログラム命令および/またはデータをある期間にわたって保持するよう構成されたいかなるシステム、デバイスまたは装置たとえばコンピュータ可読媒体であってもよい。マスターノード110および作業者ノード112は、ウェブアプリケーション104をクロールするよう構成されていてもよい。ウェブアプリケーション104の一部または全部の部分が、マスターノード110および作業者ノード112によって閲覧、実行または解析されてもよい。各ノード218、220は、ウェブアプリケーション104の一部分に関するデータ222、224を含んでいてもよい。そのようなデータ222、224は、ウェブアプリケーション104との通信またはウェブアプリケーション104の使用を可能にする情報を含んでいてもよい。たとえば、データ222、224は、文書オブジェクトモデル、資源情報またはウェブアプリケーションバージョンを含んでいてもよい。そのようなアプリケーションはブラウザーアプリケーション226、228を含んでいてもよく、作業者クローラーアプリケーション218またはマスタークローラーアプリケーション220の一部として実装されてもよい。ブラウザーアプリケーション226、228は、ウェブアプリケーションからコンテンツをロードするためのいかなる好適なアプリケーションにおいて実装されてもよい。ブラウザーアプリケーション226、228はウェブクライアントとして実装されてもよい。ブラウザーアプリケーション226、228は代替的に、ブラウザー226、228がクローラーアプリケーション内に実装されるのでない場合、クローラーアプリケーション218、220と協調して機能するよう構成されてもよい。ある実施形態では、クローラーアプリケーション218、220はジャバ言語で実装されてもよい。クローラーアプリケーション218、220はブラウザーアプリケーション226、228と協調して動作してもよい。クローラーアプリケーション218、220はウェブアプリケーション104をナビゲートするよう構成されてもよく、クリック、マウスオーバー、データ入力またはウェブアプリケーション104のユーザーのアクションをシミュレートまたは再現しうる他の任意の操作といったさまざまな動作をプログラム的に実行してもよい。クローラーアプリケーション218、220は、ウェブアプリケーション104に適用される種々のユーザー入力を与えられたときのウェブアプリケーション104の可能な動作を探査するよう構成されてもよい。各ノード上で走るクローラーアプリケーション218、220は、ウェブアプリケーション104がクロールされ、試験され、使用される際のウェブアプリケーション104の振る舞いをモデル化しうる画面遷移グラフを生成するよう構成されていてもよい。例示的な画面遷移モデルが図5に見出されうるが、これについては後述する。そのような画面遷移グラフにおいて、状態を表すためにドットまたはノードが使用されてもよい。ここで、状態とは、ブラウザー上で観察される画面を表す。このように、画面遷移グラフは、対話的クライアント‐サーバーアプリケーションの状態グラフであってもよい。状態間の遷移はさまざまな可能なユーザー動作を表していてもよい。たとえば、ボタンクリックは、ある状態にあるウェブアプリケーションを異なる状態にジャンプさせうる。該異なる状態では、ウェブアプリケーションについての利用可能な動作は変化している。そのような画面遷移モデルが与えられると、所望される動作または他の診断アクションを検証するために、その後そのモデル上で有効確認検査が実行されうる。クローリングアプリケーションによって使用されるクロール情報は、作業者クローラーアプリケーション218のようなクロールするアプリケーションの各インスタンスに提供されてもよい。それにより、分散式コンピューティングシステム100は、試験対象のウェブアプリケーション104の並列クロールを提供しうる。たとえば、クロール明細および/またはクロールデータがクロールアプリケーション218に与えられてもよい。クロール明細はウェブアプリケーション104の形、ウェブアプリケーション104の期待される振る舞いまたはウェブアプリケーション104を使うことに関する他の任意の好適な情報を指示してもよい。クロールデータは、ブラウザー226によって取られるべき行動、入力されるべきデータ222または取るべき行動を指示する他の任意の情報を含んでいてもよい。たとえば、クロール明細によって定義される所与のページについて、クロールデータは、任意の数のマウスオーバーがウェブアプリケーション104のさまざまな個別要素に対して実施されるべきであることを指示してもよい。マスタークローラーアプリケーション220は作業者ノード112および分散式コンピューティングシステムにおける他の作業者ノード112のクロールを調整するよう構成されてもよい。マスタークローラーアプリケーション220は、作業者クローラーアプリケーション218のさまざまなインスタンスと組み合わさって、上述した分散式コンピューティングシステム100のミドルウェアの役割を果たすよう構成されてもよい。マスタークローラーアプリケーション220は、ウェブアプリケーション104をクロールすることに関係する、マスターノード110の機能の一部または全部を実行するよう構成されていてもよい。作業者クローラーアプリケーション218は、ウェブアプリケーション104をクロールすることに関係する、作業者ノード112の機能の一部または全部を実行するよう構成されていてもよい。さまざまな実施形態において、マスタークローラーアプリケーション220および作業者クローラーアプリケーション218の機能は、ウェブアプリケーション104のクロールの要求に依存して、異なる仕方で分割されてもよい。図3は、分散式コンピューティングシステム100内のさまざまなノードの動作の例を示している。図3は、対話的クライアント‐サーバーアプリケーションの分散式の並列クロールのためのアーキテクチャの動作の例示的な実施形態を示しうる。分散式コンピューティングシステム100は、本稿に記載されるタスクのために利用可能なだけの数の作業者ノード112を含んでいてもよい。マスターノード110は作業者ノード112にコマンドを発してもよく、作業者ノード112のほうは状態情報および結果をマスターノード110に提供してもよい。マスターノード110は、クロールジョブ割り当てのようなコマンドを作業者ノード112に発してもよい。ここで、資源待ち行列234からの個々の作業者ノード112が、ジョブ待ち行列232に由来する個々のジョブを割り当てられる。作業者ノード112は、該作業者ノード112の状態およびクロール結果をマスターノード110に通信し返してもよい。そのような情報は、作業者ノード112に割り当てられたさまざまなクロールジョブの完了状態を含んでいてもよい。この情報は、そのようなクロールジョブからの部分的結果をも含んでいてもよい。そのような情報は、作業者ノード112によって発見された新しいクロールジョブをも含んでいてもよい。作業者ノード112は、ウェブアプリケーション104の状態において未使用のアクションを判別することによって、新たなクロールジョブを発見するよう構成されていてもよい。そのようなアクションが未使用であるというのは、代わりに代替的なアクションが選ばれたからでありうる。新たなクロールジョブは、ウェブアプリケーションをクロールするための開始位置を有していてもよい。ここで、クロールは以前に未使用だったアクションを利用してもよい。マスターノード110は、諸作業者ノード112から受信された結果を、マスター状態グラフ236にマージするよう構成されていてもよい。上述したように、各作業者ノード112は、クローラーアプリケーションの一部または全部のコピーおよびクロール構成設定情報を有していてもよい。作業者ノード112は割り当てられたクロールタスクを実行し、クロール中に発見された新たなクロールジョブを生成し、クロール結果および生成されたジョブをマスターノード110を報告してもよい。新たなクロールジョブは、作業者ノード112がクロール活動を実施するにつれて発見される、探査されるべき動的ウェブアプリケーション104の追加的な部分またはオプションを含んでいてもよい。分散式コンピューティングシステム100は、動的ウェブアプリケーションの分散式の並列クロールのために同期方式を利用するよう構成されていてもよい。そのような方式は、マスターノード110と作業者ノード112の間の、マスター状態グラフ236のような、ウェブアプリケーション104のクロールの結果に関する情報の同期を可能にしてもよい。そのような方式の一環として、マスターノード110および作業者ノード112は、マスター状態グラフ236のような情報を同期させるためのそのようなエンティティ間の通信オーバーヘッドを減らすよう構成されていてもよい。諸作業者ノード112は、独立して、動的ウェブアプリケーションの自分の部分をクロールすることに続くよう構成されていてもよい。作業者ノード112は、定期的に、マスターノード110に、作業者ノード112の視点から見た状態グラフについての情報を提供してもよい。そのような情報は、部分的な状態グラフを含んでいてもよい。各作業者ノード112は、マスターノード110が見る完全なマスター状態グラフ110をもたなくてもよい。代わりに、各作業者ノード112は、その作業者ノードがウェブアプリケーション104をクロールする間に発見したウェブアプリケーション104の新たな部分に加えて、その作業者ノード112を初期化する際に使われたウェブアプリケーション104の部分を反映する部分的な状態グラフを有していてもよい。そのような部分的な状態グラフは、新たに発見された状態、遷移またはジョブのような情報を含んでいてもよい。部分的な状態グラフは、前の同期が実施されて以降に発見された情報を含んでいてもよい。作業者ノード112は部分的状態グラフおよび/または新たに発見されたジョブを定期的に送信する、部分的状態グラフおよび/または新たに発見されたジョブをクロールジョブの完了時に送信する、あるいは部分的状態グラフおよび/または新たに発見されたジョブを発見される都度送信する、の間で選択してもよい。そのような選択は、マスターノード110によって提供される動作パラメータに基づいてなされてもよい。さらに、作業者ノード112は、そのような状態の諸セットを、マスターノード110に送信する前に圧縮するよう構成されていてもよい。マスターノード110は、種々の作業者ノード112の間で観察される作業の重複があればそれをなくすことを受け持っていてもよい。そのような重複は、マスターノード110が諸作業者ノード112から受領される結果を比較することによって観察されてもよい。ここで、そのような結果は、部分的状態グラフを含んでいてもよい。マスターノード110は、さまざまな作業者ノード112から受領されるデータをマージしつつ、ウェブアプリケーション104の動作を示す重複する状態およびトレースを除去するよう構成されてもよい。マスターノード110は、ジョブ待ち行列232内の重複するジョブをパージするよう構成されていてもよい。ここで、そのようなジョブは、動的ウェブアプリケーション104のすでにクロールされた部分を表す。マスターノード110はまた、作業者ノード112にパージ信号を送るよう構成されていてもよい。ここで、作業者ノード112は、マスターノード110によって重複と判定されたジョブに対して作業することをやめるよう指示される。そのような重複ジョブはすでに他の作業者ノード112に割り当てられていたものであって該他の作業者ノード112が現在そのようなジョブを実行中であってもよく、あるいはすでに完了したものであってもよい。そのようなパージ信号は、マスターノード110によって保持される、どのジョブがどの作業者ノード112に割り当てられたかおよびそのようなジョブのスコープの指標の記録に基づいていてもよい。マスターノード110は、ジョブ待ち行列232からのジョブを、資源待ち行列234内の作業者ノード112にスケジューリングするよう構成されていてもよい。マスターノード110はいかなる好適な基準に基づいてそのようなスケジューリングを行うよう構成されていてもよい。ある実施形態では、マスターノード110は、ジョブ待ち行列232からのジョブを資源待ち行列234内の作業者ノード112に、先入れ先出しに基づいてスケジューリングするよう構成されていてもよい。別の実施形態では、マスターノード100は、ジョブまたは資源の間の最良一致を判別することによって、ジョブ待ち行列232からのジョブおよび資源待ち行列234からの作業者ノード112を選択してもよい。そのような実施形態では、一致が判別されるのは、最良優先bestfirstベースであってもよい。最良優先基準を使って、マスターノード110は、スケジュールする最良候補ジョブをジョブ待ち行列232から選び、それをスケジュールする対象となる最良資源を資源待ち行列234内の利用可能な資源の間から選びうる。最良候補ジョブの選択はいかなる好適な因子に基づいていてもよい。ある実施形態では、ジョブのタイムスタンプが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早いジョブほど高い優先度を得てもよい。もう一つの実施形態では、ジョブについての初期化トレースの長さが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、初期化トレースが小さいジョブほど初期化コストが低いことがあり、よって、利用可能な資源に依存して、優先されうる。資源待ち行列234からの最良候補資源の選択は、いかなる好適な因子に基づいていてもよい。ある実施形態では、資源の挿入タイムスタンプが、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早い資源ほど高い優先度を得てもよい。これは資源の利用度を最大にするためである。もう一つの実施形態では、資源についての計算強度が、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源の計算力が、それを適切な大きさのジョブとマッチさせるために使用されてもよい。さらにもう一つの実施形態では、資源の通信オーバーヘッドが最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源のマスターノード110への接続トポロジーについての情報が既知であれば、マスターノード110とのより効率的な、より短い、あるいはより高速な通信をもつ資源に優先度を与えるために該情報が使用できる。そのような情報は、作業者ノード112がタスクを完了する統計的な結果によって決定されてもよい。最良候補資源または最良候補ジョブのいずれかを決定するには、たとえば上記の因子の関数、たとえば重み付け和が、最良候補を決定するために用いられてもよい。そのような重み付け和は、最良候補を選ぶためのコスト関数として使用されてもよい。そのような場合、ジョブおよび資源のタイムスタンプが、ジョブおよび資源を選ぶための唯一の基準として使用されるならば、その方式は、基本的な待ち行列データ構造に典型的な先入れ先出し機構になり始める。マスターノード110は、作業者ノード112から受領されたトレースおよび状態をマスター状態グラフに統合するよう構成されていてもよい。作業者ノード112は、完了され、クロールされたウェブアプリケーションの振る舞いのサブツリーsubtreeまたはトレースtraceを表す完了された計算を提供してもよい。マスターノード110はまた、一つまたは複数の作業者ノード112によって決定される新たな計算の指標をも受領してもよい。作業者ノード112からのトレースおよび状態の受領に際して、マスターノード110は、マスター状態グラフにおいてすでに決定された情報に比較して、あるいは他の作業者ノード112に割り当てられたジョブにおける状態に比較して、受領された状態またはトレース中に重複が存在するかどうかを判定するよう検査するよう構成されていてもよい。そのような重複が検出された場合、マスターノード110は、ジョブ待ち行列232から重複ジョブをパージするよう構成されていてもよい。マスターノード110はまた、パージコマンドを発することによって、作業者ノード112上で現在実行されている重複クロールをパージするよう構成されていてもよい。マスターノード110はまた、重複を除去して、受領された情報を、マスター状態グラフ中の情報とマージするよう構成されていてもよい。図4は、遷移グラフモデル402の図解を通じて例示的な作業者ノード112の動作の結果を示している。上述したように、作業者ノード112は、クロールアプリケーションのコピーを実行するよう構成されていてもよい。作業者ノード112はまた、試験されるべきウェブアプリケーションのための適切なクロール設定を含んでいてもよい。作業者ノード112は、マスターノード110によって与えられる部分的トレース404を用いてその動作を初期化するよう構成されていてもよい。そのような部分的トレース404は、作業者ノード112がマスター状態グラフ236の完全なコピーを用いてその動作を初期化することに対する代替であってもよい。しかしながら、マスター状態グラフ236を用いたそのような初期化は、作業者ノード112とマスターノード110の間の通信の面でよりコスト高となることがある。そのような部分的トレース404は、マスター状態グラフ内のS0のような特定の状態に到達するために、indexjspのようなウェブアプリケーションスタートページ406からの取る必要のあるアクションの記述を含んでいてもよい。ここで、前記特定の状態は、マスターノード110によって割り当てられたジョブの一部として作業者ノード112によってクロールされるべきものである。作業者ノード112は、種々の分枝およびアクションを調べ、新たなジョブのような他の情報を記憶することによって、S0およびS1のようなその子状態からクロールすることを続けるよう構成されていてもよい。作業者ノード112は、ジョブが完了していなくても、ジョブのクロールにおける、そのトレースのクロールが終了する点に到達しうる。そのようなケースはのちに論じる。もう一つの例では、作業者ノード112がクロールすべき動的ウェブアプリケーション内部の特定のページを与えられ、そのようなページ上で選択されるべきメニュー項目の選択肢を提示された場合、作業者ノード112は、該メニューにおける最初の選択肢を選択し、動的ウェブアプリケーションのその後の動作を探査し、残りの選択されなかったメニュー選択肢を表す状態またはアクションを将来のジョブとして記憶するよう構成されていてもよい。作業者ノード112が動的ウェブアプリケーションの、自分が割り当てられた部分をクロールする際、作業者ノード112は、遭遇した状態およびそのような状態に到達するために取られるアクションを表すローカル状態グラフを生成してもよい。作業者ノード112は、以前に見た状態に到達する場合、クロールを打ち切るよう構成されていてもよい。そのような状態は、ローカル状態グラフ内に存在する状態を含んでいてもよい。作業者ノード112は、クロールが、クロール明細によって設定された深さ限界または時間限界に達する場合にクロールを打ち切るよう構成されていてもよい。たとえば、ある特定の経路に沿って作業者ノード112がその後の10個のアクションの深さに達すると、作業者ノード112はそのクロールを終了してもよい。さらに、作業者ノード112は、マスターノード110からパージコマンドを受け取る場合にクロールを終了するよう構成されていてもよい。作業者ノード112は、新しい状態、ウェブアプリケーションにおいて取られた決定経路を表す新しいトレースおよび新しいジョブについての情報を含む情報を、定期的にマスターノード110に送信するよう構成されていてもよい。そのような送信の定期的な性質は、分散式コンピューティングシステム100によって決定されるところの、通信と計算のトレードオフに基づいて静的にまたは動的に設定されてもよい。所与の分散式コンピューティングシステムの特定の定期的な性質は、分散式コンピューティングシステムの資源、試験される動的ウェブアプリケーションの性質または他の予見されない因子に依存してもよい。周期的な性質の特定また最適な値は、経験的に決定されてもよい。終了すると、作業者ノード112は、マスターノード110における利用可能な資源待ち行列234に自らを登録するよう構成されていてもよい。分散式コンピューティングシステム100は、動的ウェブアプリケーションのステートレスな分散式の並列クロールのための技法を利用するよう構成されていてもよい。ある実施形態では、分散式コンピューティングシステム100は、クロールのステートレスな並列化またはステートフルな並列化の実施の間で選択するよう構成されていてもよい。クロールのステートフルな並列化は、本稿に記載されるステップを含んでいてもよい。ここで、マスター状態グラフに比較されるとき、作業者ノード112から返された結果の間の重複を探すために諸状態がマスターノード110において比較される。クロールのステートレスな並列化はマスターノード110に、そのような重複を消去しようとしないようにさせてもよく、結果として得られるマスター状態グラフは、実行ツリーにおけるより低く現れる状態がより高く現れる状態の重複であることを示さなくてもよい。ステートフルな並列化方式は、根底にある状態グラフがかなりの状態共有、状態再収束reconvergenceおよびサイクルをもつときにより有用でありうる。分散式コンピューティングシステム100は、所与の動的ウェブアプリケーションの状態グラフにほとんど再収束が存在しない場合に;たとえば状態グラフが主としてツリー様構造をもつ場合に、ステートレスな並列化を使うよう構成されていてもよい。ステートレスな並列化が分散式コンピューティングシステム100によって用いられるとき、マスターおよび作業者ノード112は状態比較を省略してもよい。そのような状態比較の省略は、状態グラフマージがより少数の資源で達成されうるので、マスターノード110の動作を高速化しうる。マスターノード110の要求されるパージ動作は、ステートレスな並列化の状態に依存して、なくしてもよい。同様に、作業者ノード112におけるクロール動作を高速化してもよい。さらに、作業者ノード112は、ステートレスな並列化を使うとき、計算の終わりに一度だけ結果を送信するよう構成されていてもよい。ただし、結果として得られるマスター状態グラフは、複数の位置において現れる状態を含むことがある。作業者ノード112は、その動作および新たに発見されたジョブの状態を、任意の好適な手段を通じて圧縮するよう構成されていてもよい。ある実施形態では、作業者ノード112は、ある動的ウェブアプリケーションの相続くページが、前の状態から少ししか違わない状態を表すとき、そのような状態圧縮を使うよう構成されていてもよい。たとえば、AJAXビルドされたウェブアプリケーションの所与の画面に対する所与のユーザーアクションが、現在の画面の小さな部分のみを変更または更新する結果を生じることがある。このように、こうして得られた新たな画面はその内容において、前の画面からわずかしか違わない。このように、作業者ノード112は、動的ウェブアプリケーションの相続く状態の文書オブジェクトモデル間の差分のみを記憶するよう構成されていてもよく、その差分がその後マスターノード110に送信されて、該マスターによって圧縮解除されてそれぞれの状態の完全な表現を得ることができる。状態圧縮は、相続く状態の間の差分が所与の閾値より小さいときに有効にされてもよい。そのような閾値は、動的ウェブアプリケーションの相続く状態間の相対的なまたは絶対的な差に関して設定されてもよい。作業者ノード112は、現在クロールされている具体的なウェブアプリケーションページに依存して、状態圧縮を有効化および無効化するよう構成されていてもよい。分散式コンピューティングシステム100は、いかなる好適な動的ウェブアプリケーションをクロールするよう構成されていてもよい。図5は、分散式コンピューティングシステム100によってクロールされうる例示的な動的ウェブアプリケーション500の画面遷移グラフである。この画面遷移グラフは状態グラフを含んでいてもよい。動的ウェブアプリケーション500は、二つのボタン、ボタン1およびボタン2を表示するよう構成されていてもよい。ボタン1およびボタン2の外観および外観に関連する機能は、ユーザーからのさまざまな以前のアクションに依存してもよい。動的ウェブアプリケーション500が存在しうる種々の状態がS1、S2、S3、S4によって表されている。図5の画面遷移グラフは、動的ウェブアプリケーション500の可能な状態を完全に表現しうる。このように、図5の画面遷移グラフは、動的ウェブアプリケーション500の動的にクロールの完了した結果であってもよい。動的ウェブアプリケーション500のコードは次によって具現されうる:このように、動的ウェブアプリケーション500はボタン1の外観を変えるよう構成されていてもよい。ここで、ボタン1は最初ここをクリックと表示し、クリックされるとクリック済みと表示するよう設定されていてもよい。ボタン1は、その後のクリックに際してこれらの値の間で表示をトグルさせるよう構成されていてもよい。ボタン2は最初ここもクリックと表示し、クリックされると無効となるよう構成されていてもよい。これは図5では、S1によって表される状態における開始動作として表されている。ボタン1がクリックされると、動的ウェブアプリケーション500はS2によって表される状態に遷移する。いったんそこに至ると、ボタン1が再びクリックされると、動的ウェブアプリケーション500はS1に戻る遷移をしてもよい。代わりにボタン2がクリックされると、動的ウェブアプリケーション500は代わりにS3によって表される状態に遷移してもよい。同様に、S1からボタン2がクリックされると、動的ウェブアプリケーション500はS4によって表される状態に遷移してもよい。動的ウェブアプリケーション500はボタン1がクリックされるとS3とS4の間で遷移しうる。分散式コンピューティングシステム100によってクロールされるべき対話的クライアント‐サーバーアプリケーションは、異なる状態として表現されうる取られた以前のアクションに依存して異なる仕方で動作するよう構成されていてもよい。動的ウェブアプリケーション500の例では、ボタン2をクリックできるかどうかは、ボタン2が前にクリックされたかどうかに依存しうる。そのようなアクションは反復可能でないかもしれない。もとの状態に戻る遷移をする手段が存在しないからである。いったん状態S3およびS4の状態にはいったら、動的ウェブアプリケーション500は状態S1およびS2に戻ることはできない。他方、ボタン1の状態は、やはり現在の状態に依存するが、トグルされてもよい。そのようなサイクルは、S1とS2の間のアクションにおいて、あるいはS3とS4の間のアクションにおいて存在しうる。動作では、図3に戻ると、分散式コンピューティングシステム100は、動的ウェブアプリケーションを含む対話的クライアント‐サーバーアプリケーションの分散式の並列クロールを調整する技法を利用してもよい。マスターノード110は、動的ウェブアプリケーションのクロールを調整するために必要ないかなる好適なアクションを取ってもよい。ある実施形態では、マスターノード110は、ペンディングのジョブを、そのようなジョブを実行するために待っている資源にスケジュールしてもよい。もう一つの実施形態では、マスターノード110は、作業者ノード112から受領された結果をマージしてもよい。そのような実施形態では、マスターノード110はそのような結果を、他の作業者ノード112から以前に受領された結果とマージしてもよい。ある実施形態では、マスターノード110のタスクは、次の擬似コードの一部または全部を使って実装されてもよい:上記の擬似コードにおいて、masterSTGはクロールされるアプリケーションのマスター画面遷移グラフscreentransitiongraphモデルを表しうる。図5はたとえば、動的ウェブアプリケーション500の完了されたマスター画面遷移グラフを表しうる。そのようなマスター画面遷移グラフはマスター状態グラフ236内に記憶されてもよい。JobQは、試験対象のウェブアプリケーションのクロールの一環として処理されるべきジョブのペンディングの待ち行列を表していてもよい。ある実施形態では、jobQはFIFO待ち行列として実装されてもよい。ResourceQは、ジョブを割り当てられるべき作業者ノード112のような資源のペンディングの待ち行列を表していてもよい。ある実施形態では、resourceQは先入れ先出し待ち行列として動作してもよい。マスターノード110は、動的ウェブアプリケーションのクロールされるべき諸部分のようなペンディングのジョブを、作業者ノード112のような待っている資源にスケジュールしてもよい。上に示したように、マスターノード110は、JobQおよびresourceQの両方にエントリーが存在する間、ジョブ待ち行列232のいちばん上から第一のジョブを取得し、resourceQから最初の資源を取得し、前記ジョブを前記資源によって実施されるべくスケジュールしてもよい。jobQからジョブを、resourceQから資源を取得するには、いかなる好適な方法が使用されてもよい。ある実施形態では、最も長い間ペンディングであるジョブおよび/または資源が取得されてもよい。マスターノード110は、作業者ノード112から返された作業者結果を、すでに生成されたトレースとマージしてもよい。マスターノード110と同期する各作業者ノード112は、マスターノード110にいかなる好適な情報を送ってもよい。実施形態では、そのような作業者ノード112は少なくとも二つのデータ項目をマスターノード110に送ってもよい。圧縮されたトレースcompTraceのようなと、作業者ノード112が動的ウェブアプリケーションの一部をクロールしている間に遭遇したnewJobsのようなジョブの新たなセットとである。マスターノード110はそのような情報を、jobQ、resourceQおよびmasterSTGのようなマスターノード110において保持されている情報にマージしてもよい。マスターノード110はそのようなタスクをいかなる好適な仕方で実行してもよい。ペンディングのジョブをスケジュールするのと並行して、マスターノード110は、作業者ノード112が遭遇した新たなトレースに関して受領された情報を、マスター画面遷移図にマージしてもよい。ある実施形態では、マスターノード110は、作業者ノード112によって圧縮された返されたトレースを圧縮解除してもよい。トレースは、状態および該状態間の遷移を含んでいてもよい。マスターノード110は、返されたトレースに見出される各状態について、そのような状態がマスター状態図に存在するかどうかを判定してもよい。そのような状態が存在しない場合、それはマスター状態図に加えられる。返されたトレースにおける各遷移について、マスターノード110はそのような遷移がマスター状態図に存在するかどうかを判定してもよい。そのような遷移が存在しない場合、それはマスター状態図に加えられる。まず新たな状態を判定して、その後新たな遷移に続くことが有利でありうる。マスターノード110は、作業者ノード112によって遭遇または生成された新たなジョブに関する情報を、ジョブ待ち行列232にマージしてもよい。マスターノード110は、そのような情報をいかなる好適な仕方でマージしてもよい。ある実施形態では、マスターノード110は、マスターノード110に返されたnewJobs内の各ジョブについて、そのジョブがjobQ内にすでに存在しているかどうかを判定してもよい。そのジョブがjobQ内に存在しなければ、jobQに加えられてもよい。図6a~図6cは、マスターノード110がどのようにして作業者ノード112からの情報を加えてマスター画面遷移グラフを生成するかの例を示している。図6aは、空の画面遷移グラフが作業者ノード112からの返されたトレースと組み合わされうる場合を示している。返されたトレースにおいて、作業者ノード112は第一の状態S1から、ボタン1をクリックして第二の状態S2に進むことによってクロールし、再びボタン1をクリックすることによって状態S1に戻るクロールをした。マスター画面遷移グラフには何の状態も遷移も既存ではないので、組み合わせの結果は、返されたトレースそのものとなる。状態S2におけるボタン2のクリックのような選ばれなかったオプションは、完了されるべき将来のジョブを表しうる。これら将来のジョブは作業者ノード112によってマスターノード110に返され、ジョブ待ち行列232に加えられてもよい。図6bは、マスターノード110がどのようにしてもう一つの作業者ノード112の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図6bにおける返されたトレースは、作業者ノード112が第一の状態S1から出発して、ボタン2をクリックすることによって状態S4にクロールした結果であってもよい。作業者ノード112は次いで、ボタン1をクリックすることによって状態S3にクロールし、もう一度ボタン1をクリックすることによって状態S4にクロールして戻っていてもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスターノード110は、返されたトレースのインスタンスを削ってもよいが、他の点では両方の状態および遷移についての二つのグラフの和集合を表しうる。作業者ノード112は、図6aにおいてトレースを返したものと同じまたは異なる作業者ノード112であってよい。図6cは、マスターノード110がどのようにしてさらにもう一つの作業者ノード112の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図6cにおける返されたトレースは、作業者ノード112が第一の状態S1からボタン1をクリックして状態S2に遷移し、次いでボタン2をクリックしてS3に遷移した結果であってもよい。ひとたびS3にはいると、作業者ノード112はボタン1をクリックして状態S4にクロールし、再びボタン1をクリックして状態S3に戻ってもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスターノード110は、S2からS3への遷移をマスター画面遷移グラフに加えてもよい。返されたトレースの残りの部分はマスター画面遷移グラフにすでに存在しているからである。作業者ノード112は、図6aおよび図6bにおいてトレースを返したものと同じまたは異なる作業者ノード112であってよい。作業者ノード112は、マスターノード110から出発状態としてS2を受領していてもよい。そのような命令は、作業者ノード112がS2において利用可能だがボタン2を選択しないいくつかの動作を前に探査するといった、ジョブ待ち行列232に加えられた前に同定されたジョブから生じたのであってもよい。図3に戻ると、分散式コンピューティングシステム100は、並列の分散環境において、動的ウェブアプリケーションのような対話的クライアント‐サーバーアプリケーションの効率的な部分的クロールのための技法のための技法を利用してもよい。分散式コンピューティングシステム100における作業者ノード112は、動的ウェブアプリケーションの諸部分をクロールして、結果として発見されるトレースをマスターノード110に報告してもよい。作業者ノード112は動的ウェブアプリケーションをいかなる好適な仕方でクロールしてもよい。一例では、作業者ノード112のタスクは、次の擬似コードの一部または全部を使って実装されてもよい。マスターノード110は、LoadConfigのような関数を使って、作業者ノード112を将来のクロールタスクのために準備するために、構成設定configに従ってw1のような作業者ノード112上の作業者クローラーアプリケーション218を初期化してもよい。ある実施形態では、作業者ノード112自身が作業者ノード112上の作業者クローラーアプリケーション218を初期化してもよい。configは、作業者ノード112を初期化するためのいかなる好適な情報を含んでいてもよい。ある実施形態では、configは、クロールされるべき動的ウェブアプリケーションのurlのようなアドレスを含んでいてもよい。もう一つの実施形態では、configは、どのようにして動的ウェブアプリケーションをクロールするかについて作業者ノード112のための指令を含んでいてもよい。そのような指令は、標的ターゲット文書オブジェクトモデルDOMdocumentobjectmodelエレメントに対する指令を含んでいてもよい。たとえばhtmlのタグである。そのような指令はまた、動的ウェブページ上で実行されるユーザーアクションをも含んでいてもよい。たとえば、特定のspecificまたは範疇をまとめたcategorical項目をクリックすること、および/またはログインページ上での認証データのようなクロール中の適切な段階で入力すべき特定のユーザーデータである。ある実施形態では、この初期化プロセスは、文字列のような一組のパラメータを、作業者ノード112上で前に利用可能であった事前ビルドされたクローラーアプリケーションに渡すことを利用してもよい。そのような事前ビルドされたクローラーアプリケーションは、作業者クローラーアプリケーション218において実装されてもよい。もう一つの実施形態では、この初期化プロセスは、config内の指令に基づいて新たなソースコードを生成してもよく、そのソースコードがその後コンパイルされて、w1上のクローラーアプリケーションをドライブするために使われてもよい。そのようなクローラーアプリケーションは、作業者クローラーアプリケーション218において動作してもよい。新たなソースコードの生成またはコンパイルは、マスターノード110上で、マスタークローラーアプリケーション220のようなアプリケーションにおいて実行されてもよい。新たなソースコードの生成またはコンパイルは作業者ノード112上で実行されてもよい。作業者ノード112は、指定された開始位置から出発して動的ウェブアプリケーションをクロールしてもよい。指定された開始位置は、前に決定された状態および遷移を含む既存の既知のトレースにおいて実装されてもよい。ある実施形態では、作業者ノード112は、上に示したような関数手順WorkerCrawlTraceを利用してもよい。seedTraceはマスターノード110から作業者ノード112に渡される開始トレースであってもよい。動的ウェブアプリケーションをクロールする前に、作業者ノード112はlocalStateGraphのようなローカル状態グラフを生成し、それを空に設定してもよい。作業者ノード112はクロール中に発見される新たなジョブを含めるためのnewJobsのような構造を生成し、それを空に設定してもよい。作業者ノード112は初期画面をロードしてもよい。作業者ノードはそれを行うために、上に示したようなLoadPageのような関数を使用してもよい。それはinitScreenのような開始アドレスをその作業者クローラーアプリケーション218にロードすることにより、当該アドレスに対応するウェブアプリケーションをクロールするための準備をする。ある実施形態では、アドレスはクロールされるべきウェブアプリケーションの初期ページまたはホームページである。開始アドレスをウェブクローラーアプリケーションにロードした結果は、currentStateのような構造中に記憶されてもよい。作業者ノード112は次いで、所望される状態に到達するためにトレースをプログラム的に実行してもよい。そのような実行は関数ExecuteTraceを使ってもよい。ExecuteTraceは、SeedTraceにおける一連のアクションを実行するためにExecuteActionのような関数を呼び出してもよい。actionは、特定のページに対する作業者ノード112の直接の動作を指揮する一つまたは複数のパラメータを含んでいてもよい。ある実施形態では、actionは一対のパラメータtuを含んでいてもよい。tは、ブラウザーにおける現在のページ上のボタンまたはリンクのような標的DOMエレメントを含んでいてもよい。uは、ボタンクリックまたはフォームデータ入力のような、t上で実行されるべきユーザーアクションを含んでいてもよい。ExecuteActionは、現在の画面または状態上で、tuによって指定されるアクションをプログラム的に実行してもよい。ある実施形態では、ExecuteActionは、標的エレメントtが現在のブラウザー画面または状態で利用可能であると想定して動作されてもよい。このように、作業者ノード112は、seedTraceまたはマスターノード110によってによって定義される他の任意の初期トレースによって定義される動的ウェブアプリケーションを通じて初期クロールを行ってもよい。そのような初期クロールは、他の作業者ノード112によってもともと取られたステップを繰り返すことを含んでいてもよい。作業者ノード112は結果を、currentStateのようなクロールの現在状態を記憶する構造に割り当ててもよい。作業者ノード112は、状態グラフを実行することを続けるか否かを決定してもよい。続ける場合、作業者ノード112は動的ウェブアプリケーション内のアクションを実行し、関係した管理タスクを実行することに進んでもよい。そうでない場合は、作業者ノード112は動的ウェブアプリケーションの自分の部分のクロールを最終化ファイナライズし、状態グラフおよび新たな生成ジョブがあればそれをマスターノード110と同期することになる。作業者ノード112は現在の状態が訪問されたことがあるかどうかおよび現在のローカル状態グラフが定義された資源限界内で動作するかどうかを判定してもよい。そのような基準が真である間、作業者ノード112は動的ウェブアプリケーションの一部をクロールするためにイベントのシーケンスを実施してもよい。そのような基準が真であるかどうかを判定するには、NotVisited関数を使うことによって状態が以前に訪問されたことがあるかどうかについての判定がなされてもよい。作業者ノード112は、localStateGraph内の状態を検索してその状態がその中に存在するかどうかを検査してもよい。その状態がすでにlocalStateGraph内に存在する場合、作業者ノード112はその状態が以前に訪問されたことがあると判定してもよい。NotVisited関数は、その状態が以前に訪問されたことがある場合には偽を返し、それ以外の場合には真を返してもよい。そのような判定、作業者ノードが割り当てられたアプリケーションの限界内で動作しているかどうかは、関数WithinResourceBoundのような任意の好適な方法を通じてできる。そのような例では、作業者ノード112は、localStateGraphのトレースが、当該ノードが可能性としてはLoadConfigを使って初期化される際に用いられたconfigで指定されている資源限界内であるかどうかを判定してもよい。そのような限界は、いかなる好適なメトリックを通じて定義されてもよい。ある実施形態では、localStateGraphをなすトレース中の状態の数が、最大閾値と比較されてもよい。もう一つの実施形態では、localStateGraphをなすトレースにおいてクロールが実行された深さが閾値と比較されてもよい。さらにもう一つの実施形態では、現在のクロールタスクの開始以来経過した時間が最大閾値と比較されてもよい。さまざまな実施形態において、configにおいて指定された資源限界において二つ以上のそのような基準が組み合わされていてもよい。そのようなシーケンスは以下のステップの一つまたは複数を含んでいてもよい。作業者ノード112は、localStateGraphのようなローカル状態グラフがマスターノード110と同期される準備ができているかどうかを判定してもよく、もし準備ができていれば、localStateGraphを、newJobs構造内のもののような生成された新たなジョブがあればそれとともに、同期してもよい。作業者ノード112は、そのような判定を、関数IsReadyToSynchronizeを使うなどいかなる好適な方法を通じて行ってもよい。そのような場合、作業者ノード112は、十分なクロールが実行されたかどうかを判定してもよい。そのような判定は、たとえば、クロールされた状態の数、クロールが実行された深さ、あるいは作業者ノード112によって引き起こされた最後の同期イベント以来の経過時間を測定することによってなされてもよい。関数IsReadyToSynchronizeの使用は、指定された基準に従ってlocalStateGraphが同期される準備ができている場合に真を返してもよい。currentStateで表される動的ウェブアプリケーションの現在の状態から、作業者ノード112は、利用可能なアクションを抽出してactionListのような構造中に記憶してもよい。作業者ノード112は、動的ウェブアプリケーションの画面または状態を解析して、その画面または状態において取られる可能なアクションを判別してもよい。作業者ノード112は、そのような解析を、いかなる好適な方法を通じて実施してもよい。ある実施形態では、作業者ノード112は関数ExtractActionsを使ってそのような解析を実施してもよい。典型的には、解析されるべき画面または状態はcurrentStateまたはブラウザーにおける現在画面である。作業者ノード112は解析を、クローラーを初期化するのに使われたconfigにおいて指定されている指令に基づいて実施して、候補アクションエレメントのリストを抽出してもよい。作業者ノード112は取るべき可能なアクションを決定してそれらをリストのようなデータ構造内に入れてもよい。当該画面において取られる可能なアクションを決定したのち、作業者ノード112は可能なアクションのリストからアクションを抽出してもよい。作業者ノード112はこのタスクを達成するために関数GetFirstActionを使ってもよい。ここで、actionListは当該画面において取られうるアクションの順序付けられた集合である。作業者ノード112は、現在の状態または画面上で利用可能なアクションから、抽出されたアクションを除去してもよい。作業者ノード112は該アクションを、firstActionのような構造中に記憶してもよい。作業者ノード112は抽出されたアクションを実行し、該実行の結果を現在の状態または画面のための構造中に記憶する。作業者ノード112は、newJobsのような構造中の、クロール中に遭遇した新たなジョブのリストを、現在の状態または画面から決定されたアクションと組み合わせてもよい。ある実施形態では、作業者ノード112は、重複があればそれは削って、二組のジョブの和集合を決定してもよい。作業者ノード112は、新たなジョブのリストのための構造中に、結果を記憶してもよい。クロールが続けられるのでない場合、作業者ノード112はマスターノード110と同期してもよい。作業者ノード112はそのような同期を、この時点または他の任意の好適な時点で実施してもよい。ある実施形態では、作業者ノード112は関数SyncWithMasterを使ってそのような同期を実行してもよい。作業者ノード112はデータ変換、資源のアカウンティングを実行し、クロール結果をマスターノード110に送ってもよい。マスターノード110との同期はローカル状態グラフおよびクロール中に発見された新たなジョブのような情報を使用してもよい。作業者ノード112はローカル状態グラフを圧縮してもよい。作業者ノード112はいかなる好適な方法を通じてローカル状態グラフを圧縮してもよい。ある実施形態では、作業者ノード112はCompressGraph関数を使ってもよい。作業者ノード112は、状態グラフ中の各状態を表現するために状態圧縮アルゴリズムを使ってもよい。そのような圧縮アルゴリズムは状態グラフを増分的に表現し、グラフのサイズを縮小しうる。作業者ノード112はそのような圧縮の結果として、圧縮された状態グラフを生成しうる。作業者ノード112はマスターノード110に情報を送ってもよい。そのような情報は論理状態グラフ――あるいはその圧縮もしくは修正されたバージョン――および動的ウェブアプリケーションのクロール中に遭遇された新たなジョブのリストを含んでいてもよい。作業者ノード112はそのような情報を任意の好適な方法を通じて送る。ある実施形態では、作業者ノード112はそのようなタスクを達成するために関数SendToMasterを使ってもよい。作業者ノード112は、最後の同期イベント以降に現在の作業者ノードで計算された結果をマスターノード110に通信してもよい。作業者ノード112は次いで、ローカル状態グラフの諸部分を、マスターノード110と同期されたとしてマークしてもよい。作業者ノード112はそのようなタスクをいかなる好適な方法を通じて実行してもよい。ある実施形態では、作業者ノード112は関数MarkSentStatesを使ってもよい。作業者ノード112はlocalStateGraphのようなグラフの一部に、該一部が将来の同期イベントにおいて再送信されないよう、注釈付けしてもよい。そのようなマークは、CompressGraphまたはSendToMasterのような関数によって、状態グラフの所定の部分がマスターノード110に再送信される必要がないことを判別するために使用されてもよい。状態が以前に訪問されたことがあるとき、あるいはローカル状態グラフのクロールが定義された資源限界を超えたとき、作業者ノード112はマスターノード110と同期してもよい。ある実施形態では、作業者ノード112は、このノード上の最後の同期イベント以降に生成されたグラフの諸部分を表すlocalStateGraphおよびクロール中に生成され、マスターノード110によって割り当てられる作業者ノード112によって将来実行される可能性があるペンディングクロールジョブのリストを含むnewJobsを使ってマスターノード110と同期してもよい。localStateGraphは圧縮され、deltaTraceのような構造中に記憶されてもよい。deltaTraceは、動的ウェブアプリケーションのトレースのうち、作業者ノードの観点から、マスターノード110に含まれていないかもしれない諸部分を含んでいてもよい。localStateGraphのような既存のローカル状態グラフは、マスターノード110と同期されたとしてマークされてもよい。作業者ノード112は、マスターノード110と同期されるべき新たなジョブを含む構造を、リセットするか空にするかしてもよい。分散式コンピューティングシステム100は、動的ウェブアプリケーションを含む対話的クライアント‐サーバーアプリケーションのクロールにおいて、状態情報の圧縮技法を利用してもよい。上述したように、作業者ノード112は状態グラフを圧縮して同期の際にマスターノード110に送信される情報を減らしてもよく、マスターノード110は状態グラフを圧縮解除して新たに発見された状態を再構成してもよい。ある実施形態では、作業者ノード112は、動的ウェブアプリケーションにおいて遭遇された、前の画面の軽微な修正しか含まない逐次の状態または画面を圧縮することによって、状態グラフを最適化してもよい。そのような実施形態では、二つの相続く画面は根底にあるDOMの多くを共有する。たとえば、図6の画面遷移グラフについて、上に説明した初期状態S1の根底にあるDOM表現は、ボタン1に割り当てられた値ここをクリックおよびボタン2に割り当てられた値ここもクリックを示す。この画面でボタン1がクリックされて状態S2への遷移が起こるとき、根底にあるDOMにおける唯一の変化は、エレメントHTML1BODY1INPUT1の値属性がここをクリックからクリック済みに変わることである。このように、状態S2は完全な表現の代わりに、下記によって表現されうる。このように、ある実施形態において、作業者ノード112は、動的ウェブアプリケーションの現在の画面上の例ではS2の、該現在の画面が直前のまたは基準画面上の例ではS1から異なっている部分のみをマークし、表現してもよい。作業者ノード112は、現在の画面の、前の画面から異なっている部分のみをマークし、表現することを、いかなる好適な仕方で行ってもよい。ある実施形態では、作業者ノード112はこれらのタスクを、次の擬似コードの全部または一部を通じて達成してもよい。作業者ノード112は、refScrnのような基準画面とnewScrnのような標的画面との間で状態または画面を圧縮してもよい。標的画面は、その圧縮された表現が必要とされている画面であってもよい。基準画面はいかなる好適な画面であってもよい。基準画面は、標的画面との類似性に基づいて選択されてもよい。よって、標的画面を訪れる直前に訪れた画面または別の先行画面が選ばれる可能性が高い。基準画面は、圧縮が実行される基準を与えてもよい。作業者ノード112は状態グラフ内の所与の状態の圧縮を、主として二つのフェーズにおいて行ってもよい:後述するマーク付けフェーズと抽出フェーズである。作業者ノード112は標的画面内の各ノードを初期化し、次いでマーク付けフェーズにはいり、次いで抽出フェーズにはいってもよい。この抽出フェーズで、マーク付けフェーズの結果が抽出され、圧縮されたフェーズとして返される。初期化の間、作業者ノード112は、refScrnのような基準画面を基準としてnewScrnのような新たにクロールされた標的画面の状態を圧縮するために、まず標的画面内のすべてのノードを初期化してもよい。作業者ノード112は、当該ノード中の変化を表すおよび子ノード中の変化を表すマーカーを偽に設定してもよい。作業者ノード112は、所与の画面または問題の画面のDOMにおいて各ノードに取り付けられるべき二つのマーカーを設定してもよい。第一のマーカーは、基準画面と標的画面の間で現在のノードになされた変化を表してもよい。第一のマーカーはchangeと記されてもよい。さまざまな実施形態において、changeは三つの異なる値をもちうる:false偽、attr属性またはtagタグである。false値はノードが標的画面と基準画面で同じことを表しうる。そのような表示はタグ名、属性または他の任意の好適な特性を用いてできる。attr値はそのノードが、標的画面において、基準画面におけるのと同じタグ名をもつが、属性のうち一つまたは複数の属性の値が異なることを表しうる。tag値はこのノードは両画面において構造的に異なる表現をもつことを表しうる。たとえば、そのような構造的に異なる表現は、両画面でその位置において異なるタグをもつノードを含んでいてもよい。あるいは基準画面においてその位置にノードが存在しない場合、あるいは基準画面においてその位置により多数の子をもつノードが存在する場合がある。第二のマーカーは、そのノードの子孫のうちの一つまたは複数が、そのchangeマーカーを偽でない値にセットされており、よってそのノードは、変化を経験した子孫への経路を与えるために、圧縮された表現において存在する必要があるかもしれないことを表しうる。第二のマーカーはchildDiffと記されてもよい。childDiffは真または偽の値を受け容れうる。ここで、真の値は当該ノードの子孫に変化が起こっていることを示す。次に、マーク付けフェーズにおいて、作業者ノード112は標的画面を基準画面と比較してもよい。標的画面のどの部分が基準画面と異なっているかを識別し、しかるべくマーク付けするためである。作業者ノード112はこのタスクをいかなる好適な方法を通じて達成してもよい。ある実施形態では、作業者ノード112は関数MarkChangeを使って基準画面と新画面を比較してもよい。作業者ノード112は、標的画面の、基準画面に対して変化した部分をマークしてもよい。作業者ノード112は、標的画面のルートからそのようなマーク付けを開始してもよい。標的画面と基準画面の間の相違にマークする際、作業者ノード112はnodeのような開始ノードから開始してもよい。これは、標的画面のルートに対応してもよい。作業者ノード112はnodeが基準画面におけるその対応物と異なるかどうかを判定してもよい。もし異なれば、作業者ノード112は基準画面と標的画面の間に変化があったと判定してもよい。作業者ノード112はそのような判定を、基準画面にnodeが存在するかどうかを検査し、基準画面中のnodeの双子の相手を取得し、nodeの子の数と基準画面中のnodeの双子の相手の子の数とを比較することによって行ってもよい。基準画面中にnodeが存在するかどうかを検査する際、作業者ノード112は、nodeのような特定のDOMエレメントと同じxpathx経路位置および同じタグ名をもつノードが標的画面に存在するかどうかを判定してもよい。作業者ノード112は、そのような判定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、上に示したExists関数を使うことによって判定を確かなものにしてもよい。この関数は、newScrn中のDOMエレメントnodeと同じxpath位置に同じタグ名でrefScrn中にノードがある場合にかつその場合にのみ真を返してもよい。nodeの双子の相手を取得する際、作業者ノード112は基準画面中の特定の指定されたノードを見出し、返してもよい。作業者ノード112はそのような発見をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような判定を、上に示したGetTwin関数を使って行ってもよい。作業者ノード112は、上記のExistsによって使用されるxpath対応基準を使ってrefScrn中に存在するnodeに対応するノードを返してもよい。nodeの子の数をnodeの双子の相手の子の数と比べる際、作業者ノード112は、ある画面または状態のDOMツリーにおける所与のノードの子ノードの数を決定しうる。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、上に示したようなNumChild関数を使ってそのような決定を行ってもよい。nodeの双子の対応物が基準画面中に存在し、それがnodeと同数以下の子を持つ場合、作業者ノード112はnodeの双子の相手がnodeと厳密に同じ属性をもつかどうかを判定し、もしそうでなければ、nodeおよびその親のマーカーを、nodeのchangedマーカーをattrsに割り当てることによってそのような条件を反映し、nodeの親を取得して該親のchildDiffマーカーをtrueに変更するよう変更してもよい。nodeの親を取得する際、作業者ノード112はDOMツリー内の指定されたノードの親ノードを決定してもよい。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような決定を、上に示したようなGetParent関数を使って行ってもよい。この関数は、DOMツリー内のnodeの親ノードを返しうる。双子ノードの属性がnodeと同一であれば、作業者ノード112はnodeが不変であると記してもよい。さらに、ExistsNumChild≧NumChildrefScrnにnodeが存在し、かつnodeの子の数が双子の相手のnodeの子の数以上が真を返す場合、nodeの各子について、作業者ノード112は上述したマーキング方式を使ってその子を再帰的に処理してもよい。ある実施形態では、そのようなマーキングは、nodeについて見出された各子についてMarkChangeを呼び出すことによって達成されてもよい。nodeの子を決定する際、作業者ノード112はDOMツリー内の指定されたノードの子ノードを決定してもよい。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような決定を、上に示したようなChildNodesを使って行ってもよい。この関数は、DOMツリー内のnodeのような指定されたノードの子ノードの順序付けられたリストを返してもよい。そうでなく、可能性としてはExistsNumChild≧NumChildを呼び出し偽の戻り値を得ることによって、nodeに関して基準画面と標的画面の間に変化があった場合、作業者ノード112はnodeが変化したと記してもよい。ある実施形態では、作業者ノード112は、nodeのchangedタグをtagに設定することによってそのような指定を行ってもよい。さらに、作業者ノード112はnodeの親のタグを、該親が変化した子を持つことを示すよう設定してもよい。これは、GetParentを呼び出し、その結果のchildDiffパラメータを真に設定することによって達成されてもよい。最後に、作業者ノード112はnodeが変化した子をもつかどうかを判定し、もしそうであればnodeの親のタグを、nodeの親が変化した子をもつことを示すよう設定してもよい。これは、nodeのchildDiffパラメータを検査し、GetParentを呼び出し、その結果のchildDiffパラメータを真に設定することによって達成されてもよい。抽出フェーズでは、作業者ノード112は、標的画面と基準画面の間の差のマーキングを使って、基準画面を基準としての標的画面の圧縮された表現を抽出してもよい。作業者ノード112はこのタスクをいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、標的画面の圧縮された表現を抽出するために関数ExtractDeltaを使ってもよい。作業者ノード112は標的画面と基準画面の間のマークされた差分を抽出し、その結果をdeltaScrnのような構造中に格納してもよい。そのような標的画面は、マスターノード110に返されるべき圧縮された状態として使われてもよい。図7は、少なくとも部分的にクロールされた動的ウェブアプリケーションの画面のDOMツリーのマークされたバージョンの例である。図7は、refScrnのような基準画面を基準としてnewScrnのような標的画面をマーク付けする効果を表しうる。そのようなマーク付けは、関数ExtractDeltaによってdeltaScrnのような圧縮された表現を生成するために抽出フェーズにおいて作業者ノード112によって使用されてもよい。保持されるまたは破棄されるマーク付けされたDOMの部分は、生成される圧縮された表現の例を示している。たとえば、図7は、図5に示すような状態S1に関しての状態S2の圧縮を表していてもよい。そのような例では、DOMツリーのHTMLノード702、HTMLノード属性703、HEADノード704、HEADノード属性706、BODYノード708、BODYノード属性710、INPUTノード712、INPUTノード712に関連付けられたDOMサブツリー714およびさまざまな他のノードおよびサブツリー716に対応するDOMツリーの諸セクションがあってもよい。状態S1からS2に進む動作は、INPUTノード712、その属性および子孫ノードのサブツリー714のようなDOMノード内の変化として反映されてもよい。さらに、HEADノードの属性706のみに対する変化があったことがありうる。これは、ここをクリックボタンをクリックした結果であってもよい。それにより、スクリプトの諸部分がアクティブ化されてボタン値への変更がなされる。マーク付けされたDOMモデルのこれらの諸部分は変化したとマーク付けされてもよく、よって返されるべきDOMモデルの圧縮されたバージョンに含められてもよい。一方、DOMモデルの他の多くの部分716、718は二つの状態S1とS2の間で不変のままでありうる。よって、これらの部分は不変とマークされ、よって返されるべきDOMモデルの圧縮されたバージョンでは除去されてもよい。HTMLノード702、HEADノード704およびBODYノード708のようないくつかのセクションは二つの状態S1とS2の間で不変のままでありうるが、変化した子を有することがある。よって、これらのセクションは、変化した部分への経路パスを提供するよう、返されるべきDOMモデルの圧縮されたバージョン内に保持されてもよい。このように、作業者ノード112は図7の保持されるとマークされた諸部分を、deltaScrnのような圧縮された表現として返してもよい。そのような圧縮された表現は、deltaScrnおよびrefScrnからもとの表現newScrnを一意的かつ完全に再構成するのに十分な情報を有していてもよい。図8aおよび図8bは、動的ウェブアプリケーションのような対話的クライアント‐サーバーアプリケーションの分散式の並列クロールを調整するための方法800の例示的な実施形態である。分散式コンピューティングシステム100の動作において上記した擬似コードが方法800の一部または全部を実装してもよい。ステップ805では、ウェブアプリケーションがクロールのために初期化されてもよい。そのような初期化は、該ウェブアプリケーションをクロールするための開始位置または初期トレースを表現して、一つまたは複数の初期ジョブを決定することを含んでいてもよい。ある実施形態では、生成される初期ジョブの数は、並列にそのようなジョブを実行するのに利用可能な資源の数より多くてもよい。ステップ810では、任意のそのような決定されたジョブがジョブ待ち行列に加えられてもよい。方法800の二つ以上の分枝が並列して実行されてもよい。一つのそのような分枝はステップ815で始まってもよい。もう一つのそのような分枝はステップ850で始まってもよい。各分枝は、当該方法が終了されるまで実行されてもよい。当該方法が終了されるべきかどうかの判定は、いずれの分枝において行われても、あるいは方法800の実行の他の分枝において行われてもよい。ある実施形態では、そのような判定は、ステップ815で始まる分枝においてなされてもよい。ステップ815では、ジョブ待ち行列および資源待ち行列が項目エントリーを含むかどうかが判定されてもよい。ステップ815はポーリング方式、イベントハンドラまたは他の任意の好適な機構において実装されてもよい。ジョブ待ち行列および資源待ち行列が項目を含む場合、ステップ820において、ジョブ待ち行列からジョブが選択されてもよい。ジョブを選択するいかなる好適な方法が使用されてもよい。ある実施形態では、ジョブは先入れ先出し方式で選択されてもよい。ステップ825では、資源待ち行列から資源が選択されてもよい。資源を選択するいかなる好適な方法が使用されてもよい。ある実施形態では、資源は先入れ先出し方式で選択されてもよい。ステップ830では、前記ジョブは前記資源によって実行されるよう割り当てられてもよい。そのような割り当ては、前記資源が前記ジョブによって指定されるウェブアプリケーションの部分をクロールすることを含んでいてもよい。ステップ835では、前記資源は前記ジョブの実行のために初期化されてもよい。次に、方法800はステップ815に戻ってもよい。ジョブ待ち行列および資源待ち行列のいずれかが項目を含まない場合、当該方法が終了されるべきかどうかが判定されてもよい。ステップ840では、ジョブ待ち行列が空かどうか、およびすべてのジョブが実行されたかどうかが判定されてもよい。もしそうであれば、ステップ845において、そのようなケースは、ウェブアプリケーションが完全にクロールされ終わったことを反映してもよく、当該方法は終了してもよい。そうでなければ、当該方法はステップ815に戻ってもよい。ステップ850では、以前に資源に割り当てられたいずれかのジョブから結果が受領されたかどうかが判定されてもよい。ステップ850は、ポーリング方式、イベントハンドラまたは他の任意の好適な機構において実装されうる。結果が受領されていなければ、方法800はステップ850に戻ってもよい。結果が受領されていれば、ステップ855において、該結果の一部として受領された状態グラフがあればそれが圧縮解除されてもよい。受領された状態グラフにおける各状態について、ステップ860において、その状態がマスター状態グラフ中にあるかどうかが判定されてもよい。もしなければ、ステップ865において、その状態がマスター状態グラフ中に格納されてもよく、方法800はステップ870に進んでもよい。もしあれば、方法800はステップ870に進んでもよい。受領された状態グラフ中の各遷移について、ステップ870において、その遷移がマスター状態グラフ中にあるかどうかが判定されてもよい。もしなければ、ステップ875において、その遷移がマスター状態グラフに加えられてもよく、方法800はステップ880に進んでもよい。もしあれば、方法800はステップ880に進んでもよい。受領された結果中の各ジョブについて、そのジョブがジョブ待ち行列中にあるかある資源において現在実行中であるかどうかが判定されてもよい。もしそうでなければ、885において、そのジョブはジョブ待ち行列に加えられてもよく、方法800はステップ850に戻ってもよい。もしそうであれば、方法800はステップ850に戻ってもよい。図9は、並列な分散環境における、動的ウェブアプリケーションのような対話的クライアント‐サーバーアプリケーションの効率的な部分的クロールのための方法900の例示的な実施形態である。分散式コンピューティングシステム100の動作において上記した擬似コードが方法900の一部または全部を実装してもよい。ステップ905では、ジョブの実行が初期化されてもよい。ジョブはクロールされるべきウェブアプリケーションの部分を表していてもよい。そのような初期化は空の状態グラフを生成することを含んでいてもよい。ここで、該状態グラフはウェブアプリケーションのクロールの結果を含んでもよい。ウェブアプリケーションのクロール中に発見された新たなジョブを含めるためのレコードが初期化されてもよい。ウェブアプリケーション中の指定された開始位置に到達するよう初期トレースが実行されてもよい。そのような指定された開始位置におけるウェブアプリケーションの画面がロードされてもよい。ステップ910では、そのような画面が現在状態として指定されてもよい。ステップ915では、ローカルグラフに従って、現在状態が以前に訪問されたことがあるかどうかが判定されてもよい。もしそうであれば、ジョブのクロールは終了されてもよく、方法800はステップ975に進んでもよい。もしそうでなければ、ステップ920において、ジョブの実行が定義された限界内であるかどうかが判定されてもよい。ジョブの実行が定義された限界内であるかどうかを判定するいかなる好適な方法が使用されてもよい。もしそうでなければ、ジョブのクロールは終了されてもよく、方法800はステップ975に進んでもよい。もしそうであれば、ステップ930において、状態グラフが同期されるべく準備ができているかどうかが判定されてもよい。そのような判定は、状態グラフを定期的に同期させてもよい。もしそうであれば、ステップ932において、状態グラフはマスター状態グラフと同期されてもよく、方法はステップ935に進んでもよい。もしそうでなければ、方法はステップ935に進んでもよい。ステップ935では、ウェブアプリケーションのクロールは、まず現在状態において利用できる可能なアクションを判別することによって行われてもよい。ある実施形態では、そのようなアクションは、状態のDOM内に含まれる情報に基づいていてもよい。ステップ940では、それらの可能なアクションは未実行のアクションのリストに加えられてもよい。ステップ945では、実行されるべきアクションが、未実行のアクションのリストから選択されてもよい。どのアクションが実行されるべきかを選択するには、いかなる好適な基準、クロール技術または検索ストラテジーが使用されてもよい。選択されたアクションはステップ950において未実行アクションリストから除去されてもよく、次いでステップ955において実行されてもよい。ステップ960では、ステップ955の実行の結果が、新たな現在状態として指定されてもよい。ステップ965では、一つまたは複数のジョブが、未実行アクションのリストから生成されてもよく、ステップ970では新たなジョブが新たなジョブのリストに加えられてもよい。そのような新たなジョブのリストは、資源による将来の実行のために、同期の際に、ジョブ待ち行列に送信されてもよい。方法800は次いでステップ915に戻ってもよい。ステップ975では、状態グラフはマスター状態グラフと同期されてもよい。このステップは、ステップ932と同じ仕方で実装されてもよい。ジョブの実行に関する他の情報がマスターノードに送信されてもよい。ステップ980では、現在の作業者ノード112が利用可能であることの指示が資源待ち行列に登録されてもよい。図10は、対話的クライアント‐サーバーアプリケーションの一部をクロールすることから生成された状態グラフを、該アプリケーションのマスター状態グラフと同期させる方法1000の例示的な実施形態である。いくつかの実施形態では、方法1000は図9のステップ932および975の一部または全部を実装してもよい。分散式コンピューティングシステム100の動作において上記した擬似コードが方法1000の一部または全部を実装してもよい。ステップ1005において、マスター状態グラフと同期されるべき状態グラフが圧縮されてもよい。グラフ内の各状態は、本稿で論じているものも含めいかなる好適な技法を使って圧縮されてもよい。状態グラフは、クロールされるべきウェブアプリケーションの一部を指示するジョブを実行することからの情報を含んでいてもよい。ステップ1010では、そのような圧縮の結果が記憶されてもよい。該結果は、当該状態グラフとすでに同期された前の状態グラフとの間の差を表現してもよい。ステップ1015では、圧縮された状態グラフおよび/または新たなジョブのリストがマスターノードに送られてもよい。該マスターノードはマスター状態グラフを制御/管理してもよく、その二つをマージするよう構成されていてもよい。ステップ1020では、状態グラフはマスターノードと同期されたとしてマークされてもよい。そのようなマーク付けは、方法1000の将来のインスタンスによってステップ1010の間に使用されてもよい。ステップ1025では新たなジョブのリストがクリアされてもよい。図11は、動的ウェブアプリケーションのような対話的クライアント‐サーバーアプリケーションのクロールにおける状態情報の圧縮のための方法1100の例示的な実施形態である。分散式コンピューティングシステム100の動作において上記した擬似コードが方法1100の一部または全部を実装してもよい。ステップ1105において、アプリケーションがクロールされて状態グラフを生成してもよい。状態グラフは該アプリケーションの動作を表していてもよい。あるいはまた、状態グラフは、受領され、あるいは他の仕方で決定されてもよい。状態グラフ中の各状態について、ステップ1115~1145が実施されてもよい。ステップ1115では、所与の状態に関連付けられた画面が判別されてもよい。後続のステップは、そのような画面を圧縮することを試みてもよい。ステップ1120では、画面のモデルが判別されてもよい。ある実施形態では、そのようなモデルはDOMモデルを含んでいてもよい。ステップ1125では、その画面についての基準画面が決定されてもよい。そのような基準画面は前の画面を含んでいてもよい。該前の画面上である動作が行われた結果、前記の所与の画面になったものである。前記所与の画面は、そのモデルの一部として一つまたは複数のノードを含んでいてもよい。そのような各ノードについて、ステップ1130において、ノードが初期化されてもよい。そのような初期化は、ノードが不変であるとの指示を設定することを含んでいてもよい。基準画面との比較で当該ノードに変化を見出すと、そのような指示がその後変化させられてもよい。ステップ1135では、当該画面と基準画面との間の差がマーク付けされてもよい。そのような差は、当該画面のルートノードから始まってマークされてもよい。ステップ1140では、当該画面と基準画面との間のそのようなマーク付けされた変化が抽出されてもよい。そのような抽出された、マーク付けされた変化は、所与の状態の圧縮されたバージョンとして格納されてもよい。ステップ1145では、圧縮された状態が返されてもよい。図12は、画面と基準画面との間の変化をマーク付けする方法1200のある例示的な実施形態である。分散式コンピューティングシステム100の動作において上記した擬似コードが方法1200の一部または全部を実装してもよい。いくつかの実施形態では、図11のステップ1135の一部または全部が方法1200によって実装されてもよい。ステップ1205では、マークされるべき画面のモデル中の開始ノードが決定されてもよい。そのような開始ノードは、マーク付けされるべき画面のルートノード、あるいは方法1200を呼び出すエンティティによって指定される別のノードであってもよい。同様に、ステップ1210において、基準画面が決定されてもよい。そのような基準画面は方法1200を呼び出すエンティティによって指定されてもよい。ステップ1215では、当該ノードが基準画面中に存在するかどうかが判定されてもよい。もし存在すれば、当該ノードの子が探査されて、そのような子と基準画面との間の任意の変化が判別されてもよい。もし存在しなければ、そのような子と基準画面との間の任意の変化を判別するために当該ノードの子が探査されなくてもよい。当該ノードが基準画面中に存在する場合、ステップ1220において、基準画面中の当該ノードの双子の相手が取得されてもよい。ステップ1225では、双子ノードの子の数が判別されてもよく、同様にステップ1230において現在ノードの子の数が判別されてもよい。ステップ1235では、現在ノードが双子の相手と同数またはそれ以上の子をもつかどうかが判定されてもよい。もしそうであれば、ステップ1240において、当該ノードと双子ノードの属性が等しいかどうかが判定されてもよい。そのような属性はDOMモデルの一部であってもよい。属性が等しくない場合、ステップ1245において、当該ノードは変化したとマーク付けされてもよい。ある実施形態では、ノード属性に関するインジケーターが、変化したとマークされてもよい。ステップ1247では、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが、該親が変化した子ノードをもつことを示すようマーク付けされていてもよい。ステップ1250では、現在ノードの各子について、方法1200が再帰的に呼び出されてもよい。当該ノードと双子ノードの属性が等しければ、方法1200は同様にステップ1250に進んでもよい。子ノードへの再帰的な一連の呼び出しがなされたのち、方法1200はステップ1265に進んでもよい。現在ノードが双子ノードと同数またはそれ以上の子をもたない場合、方法はステップ1255に進んでもよい。ここで、当該ノードは、変化したとマークされる。ステップ1260では、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが該親が変化した子ノードをもつことを示すようマーク付けされていてもよい。ステップ1260およびステップ1247は同じ仕方で実装されてもよい。方法1200は次いでステップ1265に進んでもよい。ステップ1265では、当該ノードが変化した子ノードをもつかどうかが判定されてもよい。そのような判定は、そのような指定があるかどうか当該ノードの指示を調べることによってなされてもよい。当該ノードは、当該ノードの子について方法1200の再帰的な呼び出しを通じてそのようにマーク付けされたことがありうる。方法1200の動作中に、ノードが、変化した子をもつとしてマーク付けされたことがありうるのである。当該ノードが変化した子ノードをもつ場合、ステップ1270において、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが、該親が変化した子ノードをもつことを示すようマーク付けされてもよい。ステップ1270、1260および1247は同様にして実装されうる。方法1200は次いでステップ1275に進んでもよく、ここで、方法1200は終了してもよい。図8~図12は例示的な方法800、900、1000、1100および1200に関して取られるべき特定の数のステップを開示しているが、方法800、900、1000、1100および1200は図8~図12に描かれるより多数またはより少数のステップで実行されてもよい。さらに、図8~図12は方法800、900、1000、1100および1200に関して取られるべきステップの所定の順序を開示しているが、方法800、900、1000、1100および1200をなすステップはいかなる好適な順序で完了されてもよい。方法800、900、1000、1100および1200は図1~図7のシステム、あるいは方法800、900、1000、1100および1200を実装するよう動作可能な他の任意のシステム、ネットワークまたは装置を使って実装されてもよい。ある種の実施形態では、方法800、900、1000、1100および1200は、部分的にまたは完全にコンピュータ可読媒体に具現されたソフトウェアにおいて実装されてもよい。本開示の目的のためには、コンピュータ可読媒体はデータおよび/または命令を一定の期間にわたって保持しうるいかなる器具または器具の集まりを含んでいてもよい。コンピュータ可読媒体は、限定するものではないが、直接アクセス記憶デバイスたとえばハードディスクドライブまたはフロッピーディスク、順次アクセス記憶媒体たとえばテープディスクドライブ、コンパクトディスク、CDROM、DVD、ランダムアクセスメモリRAM、読み出し専用メモリROM、電気的に消去可能なプログラム可能型読み出し専用メモリEEPROMおよび/またはフラッシュメモリのような記憶媒体ならびにワイヤ、光ファイバおよび他の有形の非一時的媒体といった通信媒体ならびに/または上記の任意の組み合わせを含みうる。本開示は詳細に記載されてきたが、本開示の精神および範囲から外れることなくさまざまな変更、代替および修正ができることは理解しておくべきである。以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。付記1クローリングアプリケーションを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記プロセッサは、前記クローリングアプリケーションを実行するよう構成されており、前記クローリングアプリケーションは、前記プロセッサに:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを実行させるよう構成され、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、電子装置。付記2前記対話的クライアント‐サーバーアプリケーションが動的ウェブアプリケーションである、付記1記載の装置。付記3付記1または2記載の装置であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、当該装置がクロールを開始する出発点となる初期化状態を与える、装置。付記4付記1ないし3のうちいずれか一項記載の装置であって、前記メモリに記憶されたローカル状態グラフをさらに有しており、前記ローカル状態グラフは:前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに前記対話的クライアント‐サーバーアプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移の記録を含み、前記ローカル状態グラフは当該装置がクロールを開始する出発点となる初期化状態を含む、装置。付記5付記1ないし4のうちいずれか一項記載の装置であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、装置。付記6付記1ないし5のうちいずれか一項記載の装置であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバーアプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、装置。付記7付記1ないし6のうちいずれか一項記載の装置であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバーアプリケーションをクロールするのに費やされる時間の長さに対する限界である、装置。付記8付記1ないし7のうちいずれか一項記載の装置であって、前記境界条件がパージコマンドを受信することを含む、装置。付記9付記1ないし8のうちいずれか一項記載の装置であって、前記プロセッサがさらに:新たなジョブを判別し;前記新たなジョブを報告するが、該ジョブを実行はしないよう構成されており、前記新たなジョブは、行われなかった前記動作の一つを含む、装置。付記10付記9記載の装置であって、前記プロセッサはさらに、前記境界条件に達する前に前記新たなジョブを報告するよう構成される、装置。付記11付記9記載の装置であって、前記プロセッサはさらに、前記境界条件に達したときに前記新たなジョブを報告するよう構成される、装置。付記12付記9記載の装置であって、前記プロセッサはさらに、報告条件に達したときに前記新たなジョブを報告するよう構成される、装置。付記13付記12記載の装置であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、装置。付記14付記13記載の装置であって、前記ジョブが前記定期的な遅延を含む、装置。付記15付記13記載の装置であって、前記プロセッサがさらに:実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;前記ジョブの実行の際の前記ジョブの前記定期的な遅延を変更するよう構成されている、装置。付記16付記1ないし15のうちいずれか一項記載の装置であって、前記プロセッサがさらに、前記結果を、報告する前に圧縮するよう構成されている、装置。付記17付記1ないし16のうちいずれか一項記載の装置であって、前記プロセッサがさらに、当該電子装置を利用可能資源データ構造に登録するよう構成されており、前記利用可能資源データ構造は、前記対話的クライアント‐サーバーアプリケーションをクロールするクローリングジョブを受け容れるのに利用可能である資源の指標を含む、装置。付記18対話的クライアント‐サーバーアプリケーションをクロールする方法であって:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを含み、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、方法。付記19前記対話的クライアント‐サーバーアプリケーションが動的ウェブアプリケーションである、付記18記載の方法。付記20付記18または19記載の方法であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、クロールが始まる出発点となる初期化状態を与える、方法。付記21付記18ないし20のうちいずれか一項記載の方法であって、ローカル状態グラフを記憶することをさらに含み、前記ローカル状態グラフは:前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに前記対話的クライアント‐サーバーアプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移の記録を含み、前記ローカル状態グラフはクロールが始まる出発点となる初期化状態を含む、方法。付記22付記18ないし21のうちいずれか一項記載の方法であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、方法。付記23付記18ないし22のうちいずれか一項記載の方法であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバーアプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、方法。付記24付記18ないし23のうちいずれか一項記載の方法であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバーアプリケーションをクロールするのに費やされる時間の長さに対する限界である、方法。付記25付記18ないし24のうちいずれか一項記載の方法であって、前記境界条件がパージコマンドを受信することを含む、方法。付記26付記18ないし25のうちいずれか一項記載の方法であって、さらに:新たなジョブを判別し;前記新たなジョブを報告するが、該ジョブを実行はしないことを含み、前記新たなジョブは、行われなかった前記動作の一つを含む、方法。付記27付記26記載の方法であって、前記境界条件に達する前に前記新たなジョブを報告することを含む、方法。付記28付記26記載の方法であって、前記境界条件に達したときに前記新たなジョブを報告することを含む、方法。付記29付記26記載の方法であって、報告条件に達したときに前記新たなジョブを報告することを含む、方法。付記30付記29記載の方法であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、方法。付記31付記30記載の方法であって、前記ジョブが前記定期的な遅延を含む、方法。付記32付記30記載の方法であって、さらに:実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;前記ジョブの実行の際の前記ジョブの前記定期的な遅延を変更することを含む、方法。付記33付記18ないし32のうちいずれか一項記載の方法であって、さらに、前記結果を、報告する前に圧縮することを含む、方法。付記34付記18ないし33のうちいずれか一項記載の方法であって、さらに、当該方法を実行する電子装置を利用可能資源データ構造に登録するよう構成されており、前記利用可能資源データ構造は、前記対話的クライアント‐サーバーアプリケーションをクロールするクローリングジョブを受け容れるのに利用可能である資源の指標を含む、方法。付記35コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記コンピュータ実行可能命令はプロセッサに:初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバーアプリケーションの部分を指示する、段階と;境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバーアプリケーションをクロールする段階と;前記対話的クライアント‐サーバーアプリケーションをクロールした結果を報告する段階とを実行させるものであり、前記対話的クライアント‐サーバーアプリケーションをクロールする段階は:前記対話的クライアント‐サーバーアプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;前記第一の状態を記録する段階と;動作を選択する段階と;行われない動作を記録する段階と;前記動作を行う段階と;前記対話的クライアント‐サーバーアプリケーションの第二の状態に到達する段階と;前記第二の状態を記録する段階と;前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、前記対話的クライアント‐サーバーアプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、媒体。付記36前記対話的クライアント‐サーバーアプリケーションが動的ウェブアプリケーションである、付記35記載の媒体。付記37付記35または36記載の媒体であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、クロールが始まる出発点となる初期化状態を与える、媒体。付記38付記35ないし37のうちいずれか一項記載の媒体であって、メモリに記憶されたローカル状態グラフを前記プロセッサに管理させる命令をさらに含み、前記ローカル状態グラフは:前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに前記対話的クライアント‐サーバーアプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移の記録を含み、前記ローカル状態グラフはクロールが始まる出発点となる初期化状態を含む、媒体。付記39付記35ないし38のうちいずれか一項記載の媒体であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、媒体。付記40付記35ないし39のうちいずれか一項記載の媒体であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバーアプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、媒体。付記41付記35ないし40のうちいずれか一項記載の媒体であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバーアプリケーションをクロールするのに費やされる時間の長さに対する限界である、媒体。付記42付記35ないし41のうちいずれか一項記載の媒体であって、前記境界条件がパージコマンドを受信することを含む、媒体。付記43付記35ないし42のうちいずれか一項記載の媒体であって、前記プロセッサに:新たなジョブを判別し;前記新たなジョブを報告するが、該ジョブを実行はしないことを実行させる命令をさらに含み、前記新たなジョブは、行われなかった前記動作の一つを含む、媒体。付記44付記43記載の媒体であって、前記プロセッサに、前記境界条件に達する前に前記新たなジョブを報告させる命令をさらに含む、媒体。付記45付記43記載の媒体であって、前記プロセッサに、前記境界条件に達したときに前記新たなジョブを報告させる命令をさらに含む、媒体。付記46付記43記載の媒体であって、前記プロセッサに、報告条件に達したときに前記新たなジョブを報告させる命令をさらに含む、媒体。付記47付記46記載の媒体であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、媒体。付記48付記47記載の媒体であって、前記ジョブが前記定期的な遅延を含む、媒体。付記49付記47記載の媒体であって、前記プロセッサに:実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;前記ジョブの実行の際に前記ジョブの前記定期的な遅延を変更することをさせる命令をさらに含む、媒体。付記50付記35ないし49のうちいずれか一項記載の媒体であって、前記プロセッサに、前記結果を、報告する前に圧縮することをさせる命令をさらに含む、媒体。付記51付記35ないし50のうちいずれか一項記載の媒体であって、前記プロセッサに、電子装置を利用可能資源データ構造に登録させる命令をさらに含み、前記利用可能資源データ構造は、前記対話的クライアント‐サーバーアプリケーションをクロールするクローリングジョブを受け容れるのに利用可能である資源の指標を含む、媒体。