(57)【特許請求の範囲】
【請求項１】
状態グラフを同期させる方法であって、
前の送信のときからインタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって生成し、
前記部分状態グラフを第１の電子装置から第２の電子装置へ送信し、
前記部分状態グラフを周期的に送信し、
複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択し、
前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、方法。
【請求項２】
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、前記第１の電子装置の観点から未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有し、
当該方法は、更に、前記１又はそれ以上の新たなジョブの識別をジョブデータ構造に付加し、該ジョブデータ構造は、クロールされる前記インタラクティブ型クライアント−サーバ・アプリケーションの部分のインジケーションを含む、
請求項１に記載の方法。
【請求項３】
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
請求項１に記載の方法。
【請求項４】
更に、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を受け取り、
前記１又はそれ以上の新たな状態をマスタ状態グラフに加える、
請求項１に記載の方法。
【請求項５】
更に、１又はそれ以上の重複状態を削除し、該重複状態は、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの前記１又はそれ以上の新たな状態及びマスタ状態グラフの両方に存在する状態を有する、
請求項４に記載の方法。
【請求項６】
更に、前記ジョブデータ構造内の既存のジョブとは同値である前記新たなジョブの１つを削除する、
請求項２に記載の方法。
【請求項７】
前記部分状態グラフを前記第１の電子装置から受け取り、
第３の電子装置に割り当てられた前のジョブの結果を前記部分状態グラフが有すると決定し、
前記前のジョブの実行を終了するよう前記第３の電子装置に指示する終了信号を前記第３の電子装置へ送信する、
請求項１に記載の方法。
【請求項８】
プロセッサによって実行される場合に、前記プロセッサに、
前の送信のときからインタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって生成させ、
前記部分状態グラフを第１の電子装置から第２の電子装置へ送信させ、
前記部分状態グラフを周期的に送信させ、
複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択させ、
前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、プログラム。
【請求項９】
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、前記第１の電子装置の観点から未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有し、
前記プロセッサは、前記１又はそれ以上の新たなジョブの識別をジョブデータ構造に付加するよう構成され、該ジョブデータ構造は、クロールされる前記インタラクティブ型クライアント−サーバ・アプリケーションの部分のインジケーションを含む、
請求項８に記載のプログラム。
【請求項１０】
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
請求項８に記載のプログラム。
【請求項１１】
前記プロセッサは、更に、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を受け取り、
前記１又はそれ以上の新たな状態をマスタ状態グラフに加える、
請求項８に記載のプログラム。
【請求項１２】
前記プロセッサは、更に、１又はそれ以上の重複状態を削除し、該重複状態は、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの前記１又はそれ以上の新たな状態及びマスタ状態グラフの両方に存在する状態を有する、
請求項１１に記載のプログラム。
【請求項１３】
前記プロセッサは、更に、前記ジョブデータ構造内の既存のジョブとは同値である前記新たなジョブの１つを削除する、
請求項９に記載のプログラム。
【請求項１４】
前記プロセッサは、更に、
前記部分状態グラフを前記第１の電子装置から受け取り、
第３の電子装置に割り当てられた前のジョブの結果を前記部分状態グラフが有すると決定し、
前記前のジョブの実行を終了するよう前記第３の電子装置に指示する終了信号を前記第３の電子装置へ送信する、
請求項８に記載のプログラム。
【請求項１５】
インタラクティブ型クライアント−サーバ・アプリケーションの一部を示す部分状態グラフを有するメモリと、
前記メモリへ結合されるプロセッサと
を有し、
前記プロセッサは、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む前記部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによってポピュレートし、
前記部分状態グラフを他の電子装置へ送信し、
前記部分状態グラフを周期的に送信し、
複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択するよう構成され、
前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、電子装置。
【請求項１６】
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有する、
請求項１５に記載の電子装置。
【請求項１７】
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
請求項１５に記載の電子装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、インタラクティブ型クライアント−サーバ・アプリケーションに係り、より具体的には、インタラクティブ型クライアント−サーバ・アプリケーションの分散型の並列クローリングのための同期スキームに係る。
【背景技術】
【０００２】
最新のウェブ２．０アプリケーションは、ユーザに対して豊かで、動的で且つインタラクティブなインターフェースを提供するために、ＡＪＡＸやＦｌａｓｈ等の技術を用いている。しかし、手動試験に基づく従来のバリデーション技術は、そのようなウェブアプリケーションの豊かでステートフルな挙動を捕らえ又は調査する際に、全く不十分である。幾つかの最近の調査によれば、動的ウェブ２．０アプリケーションの挙動を包括的に調査し、捕捉し且つ妥当性確認を行うために、カスタムＡＪＡＸウェブアプリケーション・クローラの使用が提案されている。しかし、そのようなクローリングは、通常、極めてコンピュータ的に集約されており、従って、実施上の配慮点は、実際のクローリングを、ウェブアプリケーションの正確な挙動空間のほんの一部に制限する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、インタラクティブ型クライアント−サーバ・アプリケーションの分散型の並列クローリングのために状態グラフを同期させる方法、製品及び電子装置を提供することを目的とする。
【課題を解決するための手段】
【０００４】
一実施形態において、インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって部分状態グラフを生成し、部分状態グラフを第１の電子装置から第２の電子装置へ送信し、部分状態グラフを周期的に送信する。前記部分状態グラフは、前の送信のときからインタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された前記インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む。
【０００５】
他の実施形態において、電子装置は、メモリと、該メモリへ結合されるプロセッサとを有する。前記メモリは、部分状態グラフを有する。該部分状態グラフは、インタラクティブ型クライアント−サーバ・アプリケーションの一部を示す。前記プロセッサは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって前記部分状態グラフをポピュレートし、前記部分状態グラフを他の電子装置へ送信し、前記部分状態グラフを周期的に送信するよう構成される。前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションの前記部分状態グラフは、クローリングの間に識別された前記インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む。
【０００６】
更なる他の実施形態において、製品は、コンピュータ可読媒体と、該コンピュータ可読媒体に坦持されるコンピュータ実行可能な命令とを有する。前記命令は、プロセッサによって読出可能である。前記命令は、読み出されて実行される場合に、前記プロセッサに、インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって部分状態グラフを生成させ、前記部分状態グラフを第１の電子装置から第２の電子装置へ送信させ、前記部分状態グラフを周期的に送信させる。前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む。
【発明の効果】
【０００７】
本発明の実施形態によれば、インタラクティブ型クライアント−サーバ・アプリケーションの分散型の並列クローリングのために状態グラフを同期させることが可能となる。
【図面の簡単な説明】
【０００８】
【図１】１又はそれ以上のインタラクティブ型クライアント−サーバ・アプリケーションの並列クローリングのためのサービスを提供するよう構成される分散型コンピュータシステムの実施例である。
【図２】マスタノード及び１以上のワーカノードを有する、インタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングのためのアーキテクチャの実施例である。
【図３】動的ウェブアプリケーションの分散型並列クローリングのためのアーキテクチャの動作の実施例を表す。
【図４】遷移グラフモデルの図解により例となるワーカノードの動作の結果を表す。
【図５】分散型コンピュータシステムによってクロールされる例となる動的ウェブアプリケーションの画面遷移グラフである。
【図６ａ】中身のない画面遷移グラフがワーカノードから返されたトレースとどのように組み合わされるのかを表す。
【図６ｂ】マスタノードがワーカノードの結果を前の図から得られる既存のマスタ画面遷移グラフにどのように加えるのかを表す。
【図６ｃ】マスタノードが更なる他のワーカノードの結果を前の図から得られる既存のマスタ画面遷移グラフにどのように加えるのかを表す。
【図７】少なくとも部分的にクロールされた動的ウェブアプリケーションの画面の文書オブジェクトモデルツリーにマークを付したものの例である。
【図８ａ】動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させるためのモデルの実施例である。
【図８ｂ】動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させるためのモデルの実施例である。
【図９】並列分散環境における動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの有効な部分的クローリングのための方法の実施例である。
【図１０】インタラクティブ型クライアント−サーバ・アプリケーションの一部のクローリングにより生じる状態グラフをアプリケーションのマスタ状態グラフと同期させる方法の実施例である。
【図１１】動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションのクローリングにおける状態情報の圧縮のための方法の実施例である。
【図１２】画面と基準画面との間の変化にマークを付すための方法の実施例である。
【発明を実施するための形態】
【０００９】
本発明並びにその特徴及び利点のより完全な理解のために、添付の図面とともに、以下の記載を参照されたい。
【００１０】
図１は、分散型コンピュータシステム１００の実施例である。一実施形態において、分散型コンピュータシステム１００は、１以上のインタラクティブ型クライアント−サーバ・アプリケーションの並列クローリングのためのサービスを提供するよう構成されてよい。一実施形態において、そのようなインタラクティブ型クライアント−サーバ・アプリケーションは、ウェブアプリケーション１０４を有してよい。かかるウェブアプリケーション１０４は、動的ウェブアプリケーションを有してよい。ウェブアプリケーション１０４は、それらの動作及び範囲を決定するようクロールされると、その後に試験されてよい。
【００１１】
分散型コンピュータシステム１００は、複数のネットワーク・コンピュータリソースを含む何らかの分散コンピュータ環境１０６を有してよい。そのようなコンピュータリソースは異機種環境にあってよい。様々な実施形態において、コンピュータリソースの接続トポロジは未知であっても、又は変則的であってもよく、そのため、分散型コンピュータシステム１００で実施されるサービスは、間近で計算タスクを実行するために特定のトポロジを利用することができない。
【００１２】
一実施形態において、分散型コンピュータシステム１００は、クラウドコンピュータフレームワーク又は環境において実施されてよい。分散型コンピュータシステム１００は、１又はそれ以上のコンピュータノードによって実施されてよい。そのようなコンピュータノードの１つは、マスタノード１１０として指定されてよく、他のコンピュータノードは、ワーカノード１１２として指定されてよい。ワーカノード１１２及び／又はマスタノード１１０は、如何なる適切な電子装置（サーバ、コンピュータ、又は、それらのあらゆる集合体を含むがこれに限定されるものではない。）においても実施されてよい。ワーカノード１１２及びマスタノード１１０は、メモリに結合されているプロセッサと、命令とを含んでよい。命令は、プロセッサによる実行のためにメモリにおいて読み込まれる場合に、ここで記載される機能を実行してよい。ワーカノード１１２及びマスタノード１１０は、例えばネットワーク配置を通じて、互いに通信上結合されてよい。ネットワーク配置は、異機種又は同機種環境にあってよく、且つ、分散コンピュータ環境１０６によって提供されてよい。如何なる適切なネットワーク配置も、ワーカノード１１２及びマスタノード１１０を通信上結合するために使用されてよい。分散型コンピュータシステム１００のワーカノード１１２及びマスタノード１１０は、ワイドエリアネットワーク、ローカルエリアネットワーク、インターネット、イントラネット、又はそれらの何らかの組み合わせ等の如何なる適切なネットワークにおいてもネットワーク接続されてよい。
【００１３】
ワーカノード１１２及びマスタノード１１０は、並列に遂行されるべきタスクに付随する計算負荷を共有するよう構成されてよい。例えば、ワーカノード１１２は、１又はそれ以上のウェブアプリケーション１０４を試験するよう並列に動作してよい。そのようなウェブアプリケーションは、１又はそれ以上のウェブサイトにおいて動作しているか、あるいは、１又はそれ以上のウェブサイトによってホスティングされてよい。そのような試験を成し遂げるよう、ワーカノード１１２及び／又はマスタノード１１０は、ウェブアプリケーション１０４へ通信上結合されてよい。マスタノード１１０は、ウェブアプリケーション１０４へ通信上結合され、ウェブアプリケーション１０４を試験するように他のワーカノード１１２の動作を体系付けるよう構成されてよい。
【００１４】
１又はそれ以上の動的ウェブアプリケーション１０４を試験する部分として、ワーカノード１１２及びマスタノード１１０は、ウェブアプリケーションクローリングサービスを稼動してよい。例えば、ウェブアプリケーション１０４の開発者は、ウェブアプリケーション１０４を試験下に置くことがあり、分散型コンピュータシステム１００のワーカノード１１２及び／又はマスタノード１１０は、動的ウェブアプリケーション１０４を試験して、かかる試験において使用されうるそれらの有効範囲及び動作を決定してよい。そのようなウェブアプリケーションには、ＡＪＡＸ、Ｆｌａｓｈ、又は豊かで、動的で且つインタラクティブなユーザ経験を提供するよう構成される他の技術等の技術を用いるウェブ２．０アプリケーションがある。そのような動的ウェブアプリケーションは、無限数の動的に生成される画面のステートフルな挙動及び可能性を有しうる。かかる挙動は、所与の生成される画面又はウェブページが、コンテンツ又は動作において、画面又はウェブページの読込、操作、又は生成をもたらした特定の動作に依存しうる点で、ステートフルである。
【００１５】
分散型コンピュータシステム１００は、ワーカノード１１２及びマスタノード１１０の夫々で実行されるミドルウェアを有してよい。かかるミドルウェアは、マスタノード１１０をワーカノード１１２の夫々とインターフェース接続するソフトウェアとして実施されてよい。ミドルウェアは、計算タスクの並列化を可能にするよう構成されてよい。ワーカノード１１２とマスタノード１１０との間の通信は、時間又はネットワーク又は処理リソースに関して、非常に高価でありうる。従って、分散型コンピュータシステム１００のミドルウェアは、ワーカノード１１２とマスタノード１１０との間の通信を最小限に抑える可能性がある。
【００１６】
分散型コンピュータシステム１００の計算リソースは、動的ウェブアプリケーション１０４のクローリングによって活用されるよう構成されてよい。分散型コンピュータシステム１００は、複数の計算ノードに対するクローリングを並列化し且つ分配するよう構成されてよい。結果として、クローリングは並列化を引き起こすべきである。分散型コンピュータシステム１００は、技術又はアーキテクチャから独立した態様においてクローリングの並列化を行うよう構成されてよい。幾つかの実施形態では、分散型コンピュータシステム１００のノードは任意の接続技術を有してよく、この接続技術は、動的ウェブアプリケーション１０４の並列クローリングのためにワーカノード１１２及び／又はマスタノード１１０を体系付けるアプリケーションから隠されてよい。分散型コンピュータシステム１００は、計算ノードが物理的に互いから離れており、通信費用が高額となる場合に、計算ノード１１０、１１２の間の通信を最小限とするよう構成されてよい。ワーカノード１１２は、状態、遷移、及び新たなジョブを含むクローリングの結果を返すよう構成されてよい。分散型コンピュータシステム１００は、メインコンピュータノード１１０の動作を通じてクラウド又は分散型コンピュータシステム１００において様々なワーカノード１１２からのクローリングの結果を再統合するよう構成されてよい。
【００１７】
図２は、マスタノード１１０及び１以上のワーカノード１１２を有する、インタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングのためのアーキテクチャの実施例である。マスタノード１１０は、ワーカノード１１２へ通信上結合されてよく、且つ、夫々、１又はそれ以上のウェブアプリケーション１０４を動的にクロールするようウェブアプリケーション１０４へ通信上結合されてよい。更なるワーカノードがマスタノード１１０及びウェブアプリケーション１０４へ結合されてよいが、図示されない。ワーカノード１１２及びマスタノード１１０は、ネットワーク２３０を通じて通信上結合されてよい。ネットワーク２３０は、図１の分散コンピュータ環境１０６のネットワーク又はクラウドにおいて具現されてよい。ワーカノード１１２は、マスタノード１１０からの指示の下で他のワーカノードと並列にウェブアプリケーション１０４をクロールするよう構成されてよい。
【００１８】
マスタノード１１０は、メモリ２０６へ結合されているプロセッサ２０８を有してよい。マスタノード１１０は、マスタクローラアプリケーション２２０を有してよい。マスタクローラアプリケーション２２０は、プロセッサ２０８によって実行され、且つ、メモリ２０６内にあるよう構成されてよい。マスタノード１１０は、マスタクローラアプリケーション２２０を通じてウェブアプリケーション１０４及びワーカノード１１２へ通信上結合されてよい。
【００１９】
マスタノード１１０は、クロールされるべき係属中のジョブを表すジョブキュー２３２を有してよい。ジョブは、クロールされるべきウェブアプリケーション１０４の部分の記述を含んでよい。マスタノード１１０は、クロールジョブ割当を割り当てられるよう利用可能であるワーカノード１１２を示すリソースキュー２３４を有してよい。リソースキュー２３４及びジョブキュー２３２の各母集団については以下で論じる。クロールジョブは、ワーカノード１１２によって調査されるべきウェブアプリケーション１０４の部分のインジケーションを含んでよい。また、マスタノード１１０は、マスタ状態グラフ２３６のコピーを保持してよい。このコピーは、ウェブアプリケーション１０４の画面遷移グラフモデルのマスタコピーであってよく、且つ、ウェブアプリケーション１０４のクローリングの結果を含んでよい。
【００２０】
ワーカノード１１２は、メモリ２１０へ結合されているプロセッサ２１２を有してよい。ワーカノード１１２は、ワーカクローラアプリケーション２１８を有してよい。ワーカクローラアプリケーション２１８は、プロセッサ２１２によって実行され、且つ、メモリ２１０内にあるよう構成されてよい。ワーカノード１１２は、ワーカクローラアプリケーション２１８を通じてウェブアプリケーション１０４及びマスタクローラアプリケーション２２０へ通信上結合されてよい。
【００２１】
ノードのプロセッサ２０８、２１２は、例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、あるいは、プログラム命令及び／又は処理データを解釈及び／又は実行するよう構成されるその他のデジタル又はアナログ回路を有してよい。プロセッサ２０８、２１２は、ワーカノード１１２及び／又はマスタノード１１０の夫々のメモリ２０６、２１０に記憶されているプログラム命令及び／又は処理データを解釈及び／又は実行してよい。メモリ２０６、２１０は、一時期にプログラム命令及び／又はデータを保持するよう構成される如何なるシステム、デバイス、又は装置（例えば、コンピュータ可読媒体）を有してもよい。
【００２２】
マスタノード１１０及びワーカノード１１２は、ウェブアプリケーション１０４をクロールするよう構成されてよい。ウェブアプリケーション１０４の一部又は全部が、マスタノード１１０及びワーカノード１１２によって見られ、実行され又は解析されてよい。夫々のノード２１８、２２０は、ウェブアプリケーション１０４の一部に関連するデータ２２２、２２４を有してよい。そのようなデータ２２２、２２４は、ウェブアプリケーション１０４との通信又はウェブアプリケーション１０４の使用を可能にする情報を含んでよい。例えば、データ２２２、２２４は、文書オブジェクトモデル、リソース情報、又はウェブアプリケーションのバージョンを含んでよい。かかるアプリケーションは、ブラウザアプリケーション２２６、２２８を有してよく、且つ、ワーカクローラアプリケーション２１８又はマスタクローラアプリケーション２２０の一部として実施されてよい。ブラウザアプリケーション２２６、２２８は、ウェブアプリケーション１０４からコンテンツを読み込むための如何なる適切なアプリケーションおいても実施されてよい。ブラウザアプリケーション２２６、２２８は、ウェブクライアントとして実施されてよい。代替的に、ブラウザアプリケーション２２６、２２８は、ブラウザアプリケーション２２６がクローラアプリケーション２１８、２２０において実施されない場合に、それらと協働するよう構成されてよい。一実施形態において、クローラアプリケーション２１８、２２０は、ＦＬＡ−Ｓｐｉｄｅｒを有してよい。クローラアプリケーション２１８、２２０は、Ｊａｖａ（登録商標）言語において実施されてよい。クローラアプリケーション２１８、２２０は、ブラウザアプリケーション２２６、２２８と協働してよい。クローラアプリケーション２１８、２２０は、ウェブアプリケーション１０４をナビゲートし、且つ、クリック、マウスオーバー、データ入力、あるいは、ウェブアプリケーション１０４のユーザの動作をシミュレーション又は再現するその他の操作等の様々な操作をプログラムで実行するよう構成されてよい。クローラアプリケーション２１８、２２０は、異なるユーザ入力がウェブアプリケーション１０４に加えられる場合に、ウェブアプリケーション１０４の起こり得る動作を調査するよう構成されてよい。
【００２３】
各ノードで実行されるクローラアプリケーション２１８、２２０は、ウェブアプリケーション１０４がクロールされ、試験され且つ使用される場合に、ウェブアプリケーション１０４の挙動をモデル化する画面遷移グラフを生成するよう構成されてよい。画面遷移モデルの一例は図５に示されている。これについては、以下で更に詳細に論じられる。そのような画面遷移グラフにおいて、ドット又はノードが、ブラウザにおいて観測される画面を表す状態を表現するために使用されてよい。このように、画面遷移グラフは、インタラクティブ型クライアント−サーバ・アプリケーションの状態グラフであってよい。状態間の遷移は、様々な起こり得るユーザ動作を表してよい。例えば、ボタンのクリックは、１つの状態にあるウェブアプリケーションを異なった状態にジャンプさせることができ、このとき、ウェブアプリケーションのために利用可能な操作は変化している。かかる画面遷移モデルを仮定すると、バリデーション・チェックは、所望の動作又は他の診断動作を確認するために、その後に当該モデルに対して実行されてよい。
【００２４】
クローリングアプリケーションによって使用されるクローリング情報は、ワーカクローラアプリケーション２１８のようなクローリングアプリケーションの各インスタンスへ与えられてよく、それにより、分散型コンピュータシステム１００は、試験下のウェブアプリケーション１０４の並列クローリングを提供することができる。例えば、クロール仕様及び／又はクロールデータは、クローリングアプリケーション２１８へ与えられてよい。クロール仕様は、ウェブアプリケーション１０４の形式、ウェブアプリケーション１０４の期待される挙動、又はウェブアプリケーション１０４の使用に関するその他の適切な情報を示してよい。クロールデータは、ブラウザ２２６によって行われる動作、入力されるデータ２２２、又は行われる動作を示すその他の情報を含んでよい。例えば、クロール仕様によって定義される所与のページに関し、クロールデータは、任意数のマウスオーバーがウェブアプリケーション１０４の様々な特定の要素に対して行われるべきことを示してよい。
【００２５】
マスタクローラアプリケーション２２０は、分散型コンピュータシステム１００においてワーカノード１１２及び他のワーカノード１１２のクローリングを協調させるよう構成されてよい。マスタクローラアプリケーション２２０は、ワーカクローラアプリケーション２１８の様々なインスタンスとともに、分散型コンピュータシステム１００の上記ミドルウェアとして働くよう構成されてよい。マスタクローラアプリケーション２２０は、ウェブアプリケーション１０４のクローリングに関連するマスタノード１１０の機能の一部又は全てを実行するよう構成されてよい。ワーカクローラアプリケーション２１８は、ウェブアプリケーション１０４のクローリングに関連するワーカノード１１２の機能の一部又は全てを実行するよう構成されてよい。様々な実施形態において、マスタクローラアプリケーション２２０及びワーカクローラアプリケーション２１８の機能は、ウェブアプリケーション１０４のクローリングの要件に依存して様々に分けられてよい。
【００２６】
図３は、分散型コンピュータシステム１００内の様々なノードの動作の一例を示す。図３は、インタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングのためのアーキテクチャの動作の実施例を表す。分散型コンピュータシステム１００は、ここで記載されるタスクに利用可能であるだけの数のワーカノード１１２を有してよい。マスタノード１１０は、ワーカノード１１２へコマンドを発行してよく、次いで、ワーカノード１１２は、状態情報を結果とともにマスタノード１１０へ与えてよい。
【００２７】
マスタノード１１０は、クロールジョブ割当等のコマンドをワーカノード１１２へ発行してよく、このとき、リソースキュー２３４の中の特定のワーカノード１１２が、ジョブキュー２３２に由来する特定のジョブを割り当てられる。ワーカノード１１２は、自身の状態をクローリングの結果とともにマスタノード１１０へ返送してよい。かかる情報は、ワーカノード１１２へ割り当てられた様々なクロールジョブの完了状態を含んでよい。また、この情報は、そのようなクロールジョブからの部分的な結果を含んでよい。また、かかる情報は、ワーカノード１１２によって発見された新たなクロールジョブを含んでよい。ワーカノード１１２は、ウェブアプリケーション１０４の状態において未使用の動作を決定することによって、新たなジョブを発見するよう構成されてよい。そのような動作は、代替の動作が代わりに選択されたために、未使用である可能性がある。新たなクロールジョブは、ウェブアプリケーションのクローリングのための開始位置を含んでよく、このとき、クローリングは、以前に使用されていない動作を利用してよい。マスタノード１１０は、ワーカノード１１２から受け取った結果をマスタ状態グラフ２３６にマージするよう構成されてよい。
【００２８】
上述されたように、各ワーカノード１１２は、クローラアプリケーション及びクロール設定情報の一部又は全てのコピーを有してよい。ワーカノード１１２は、割り当てられているクローリングタスクを実行し、クローリングの間に発見される新たなクローリングジョブを生成し、クローリング結果及び生成されたジョブをマスタノード１１０へ返してよい。新たなクローリングジョブは、調査されるべき動的ウェブアプリケーション１０４の更なる部分又はオプションを含んでよく、ワーカノード１１２がクローリング活動を行っている最中に発見される。
【００２９】
分散型コンピュータシステム１００は、動的ウェブアプリケーションの分散型並列クローリングのための同期スキームを利用するよう構成されてよい。そのようなスキームは、マスタノード１１０とワーカノード１１２との間で、マスタ状態グラフ２３６のような、ウェブアプリケーション１０４のクローリングの結果に関する情報の同期を可能にする。そのようなスキームの一部として、マスタノード１１０及びワーカノード１１２は、マスタ状態グラフ２３６のような情報を同期させるために、それらのエンティティの間の通信オーバーヘッドを減らすよう構成されてよい。ワーカノード１１２は、動的ウェブアプリケーションのそれらの部分を独立してクロールし続けるよう構成されてよい。ワーカノード１１２は、ワーカノード１１２の観点から見た状態グラフに関する情報を周期的にマスタノード１１０へ与えるよう構成されてよい。かかる情報は、部分的な状態グラフを含んでよい。各ワーカノード１１２は、マスタノード１１０が見た完全なマスタ状態グラフ１１０を有さなくてもよい。代わりに、各ワーカノード１１２は、ワーカノード１１２がウェブアプリケーション１０４のクローリングの間に発見したウェブアプリケーション１０４の新たな部分に加えて、ワーカノード１１２が開始したウェブアプリケーション１０４の部分を反映する部分的な状態グラフを有してよい。そのような部分的な状態グラフは、新たに発見された状態、遷移、又はジョブ等の情報を含んでよい。部分的な状態グラフは、前の同期が行われて以来発見された情報を含んでよい。ワーカノード１１２は、周期的に部分的な状態グラフ及び／又は新たに発見されたジョブを送信すること、クローリングジョブの完了時に部分的な状態グラフ及び／又は新たに発見されたジョブを送信すること、あるいは、それらが発見されたときに部分的な状態グラフ及び／又は新たに発見されたジョブを送信することの中から選択してよい。そのような選択は、マスタノード１１０によって与えられる動作パラメータに基づき行われてよい。更に、ワーカノード１１２は、かかる状態の組をマスタノード１１０へ送信する前に、それらを圧縮するよう構成されてよい。
【００３０】
マスタノード１１０は、異なったワーカノード１１２の間で観測される作業のあらゆる重複をパージすることに関与してよい。そのような重複は、マスタノード１１０がワーカノード１１２から受け取った結果を比較することで、観測されてよく、このとき、その結果には、部分的な状態グラフが含まれてよい。マスタノード１１０は、様々なワーカノード１１２から受け取ったデータをマージしながら、ウェブアプリケーション１０４の動作を示す重複した状態又はトレースを除くよう構成されてよい。マスタノード１１０は、ジョブキュー２３２において重複ジョブをパージするよう構成されてよく、このとき、かかるジョブは、既にクロールされた動的ウェブアプリケーション１０４の部分を表す。また、マスタノード１１０は、パージ信号をワーカノード１１２へ送信するよう構成されてよく、このとき、ワーカノード１１２は、重複としてマスタノード１１０によって決定されたジョブに対する操作を停止するよう命じられる。かかる重複ジョブは、そのジョブを目下実行中であると思われる他のワーカノード１１２へ予め割りあてられていたり、あるいは、既に終了していたりすることがある。かかるパージ信号は、ジョブがどのワーカノード１１２へ割り当てられたかに関してマスタノード１１０によって保持される記録とともに、そのジョブの有効範囲のインジケーションに基づいてよい。
【００３１】
マスタノード１１０は、ジョブキュー２３２の中のジョブをリソースキュー２３４内のワーカノード１１２に対してスケジューリングするよう構成されてよい。マスタノード１１０は、何らかの適切な基準に基づきそのようなスケジューリングを行うよう構成されてよい。一実施形態において、マスタノード１１０は、先入れ先出しに基づきジョブキュー２３２の中のジョブをリソースキュー２３４内のワーカノード１１２に対してスケジューリングするよう構成されてよい。他の実施形態では、マスタノード１１０は、ジョブキュー２３２の中のジョブ及びリソースキュー２３４内のワーカノード１１２を、ジョブ又はリソースの間の最良の適合性を決定することによって、選択してよい。そのような実施形態では、適合性は、最良優先に基づき決定されてよい。
【００３２】
最良優先探索を用いると、マスタノード１１０は、スケジューリングする最良の候補ジョブをジョブキュー２３２から選択し、それをスケジューリングする最良のリソースをリソースキュー２３４内の利用可能なリソースの中から選択してよい。最良の候補ジョブの選択は、何らかの適切な要因にも基づいてよい。一実施形態において、ジョブのタイムスタンプは、最良の候補ジョブを選択する際における因子として使用されてよい。そのような実施形態では、先にタイムスタンプを付されたジョブは、より高い優先度を得てよい。他の実施形態では、ジョブの初期化トレースの長さは、最良の候補ジョブを選択する際における因子として使用されてよい。そのような実施形態では、より小さい初期化トレースを有するジョブは、利用可能なリソースに依存して、より低い初期化費用を有し、従って、優先される。
【００３３】
リソースキュー２３４からの最良の候補リソースの選択は、如何なる適切な要因に基づいてもよい。一実施形態において、リソースの挿入タイムスタンプは、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、先にタイムスタンプを付されたリソースは、リソースの利用を最小限とするように、より高い優先度を得てよい。他の実施形態では、リソースの計算力が、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、リソースの計算力は、それを適切な大きさのジョブに適合させるために使用されてよい。更なる他の実施形態では、リソースの通信オーバーヘッドは、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、情報は、マスタノード１１０に対するリソースの接続トポロジに関して知られている場合に、マスタノード１１０とのより効率的な、より短い、又はより速い通信を有するリソースを優先するために使用されてよい。かかる情報は、タスクを完了するワーカノード１１２の統計結果によって決定されてよい。
【００３４】
最良の候補リソース又は最良の候補ジョブを決定するよう、関数、例えば、上記因子の加重和が、最良の候補を決定するために用いられてよい。そのような加重和は、最良の候補を選択するための費用関数として使用されてよい。そのような場合において、ジョブ及びリソースのタイムスタンプが、ジョブ及びリソースを選択するための唯一の基準として使用される場合に、スキームは、基本キューデータ構造に特有の先入れ先出しメカニズムになり始める。
【００３５】
マスタノード１１０は、ワーカノード１１２から受け取ったトレース及び状態をマスタ状態グラフに組み込むよう構成されてよい。ワーカノード１１２は、完了又はクロールされたウェブアプリケーションの挙動のサブツリー又はトレースを表す完結した計算を提供してよい。また、マスタノード１１０は、１又はそれ以上のワーカノード１１２によって決定される新たな計算のインジケーションを受け取ってよい。ワーカノード１１２からトレース及び状態を受け取ると、マスタノード１１０は、マスタ状態グラフにおいて既に決定されている情報と比較して、又は他のワーカノード１１２へ割り当てられているジョブにおける状態と比較して、受け取った状態又はトレースの中に重複があるかどうかを決定するよう確認するよう構成されてよい。そのような重複が削除される場合に、マスタノード１１０は、ジョブキュー２３２から重複ジョブをパージするよう構成されてよい。また、マスタノード１１０は、パージコマンドを発行することによって、ワーカノード１１２において現在実行されている重複したクロールをパージするよう構成されてよい。また、マスタノード１１０は、受け取った情報をマスタ状態グラフ内の情報とマージして、重複を除くよう構成されてよい。
【００３６】
図４は、遷移グラフモデル４０２により、例となるワーカノード１１２の動作の結果を表す。上述されたように、ワーカノード１１２は、クローリングアプリケーションのコピーを実行するよう構成されてよい。また、ワーカノード１１２は、ウェブアプリケーション１０４が試験されるための適切なクローリング設定を含んでよい。ワーカノード１１２は、マスタノード１１０によって提供される部分トレース４０４によりその動作を初期化するよう構成されてよい。そのような部分トレース４０４は、ワーカノード１１２が、マスタ状態グラフ２３６の完全なコピーによりその動作を初期化することに代わるものであってよい。なお、マスタ状態グラフ２３６による初期化は、ワーカノード１１２とマスタノード１１０との間の通信に関して、より費用がかかる。かかる部分トレース４０４は、マスタ状態グラフ内の特定の状態（例えば、Ｓ０）に達するために、ウェブアプリケーション開始ページ４０６（例えば、index.jsp）から取られるべき動作の記述を含んでよい。このとき、特定の状態は、マスタノード１１０によってワーカノード１１２へ割り当てられたジョブの部分として、ワーカノード１１２によってクロールされるべきである。ワーカノード１１２は、異なるブランチ及び動作を試験して他の情報を新たなジョブとして記憶することによって、Ｓ０及びその子状態（例えば、Ｓ１）からのクローリングを続けるよう構成されてよい。ワーカノード１１２は、たとえジョブが完了していないとしても、トレースのクローリングが終了するジョブのクローリングにおける点に達してよい。そのような場合について以下に論じる。
【００３７】
他の例では、ワーカノード１１２がクロールすべき動的ウェブアプリケーション内の特定のページを与えられ、そのようなページで選択されるべきメニュー項目の選択肢を与えられた場合に、ワーカノード１１２は、メニューにおける最初の選択肢を選択して、動的ウェブアプリケーションのその後の動作を調査し、且つ、残りの選択されていないメニュー選択肢を表す状態又は動作を将来のジョブとして記憶するよう構成されてよい。ワーカノード１１２は、自身に割り当てられた動的ウェブアプリケーションの部分をクローリングする場合に、遭遇した状態と、そのような状態に達するために取られた動作とを表す局所状態グラフを生成してよい。ワーカノード１１２は、以前に遭った状態に達した場合にクローリングを終了するよう構成されてよい。そのような状態は、局所状態グラフに存在する状態を含みうる。ワーカノード１１２は、クローリングが、クローリング仕様によって設定される深さ制限又は時間制限に到った場合にクローリングを終了するよう構成されてよい。例えば、特定の深さに沿って、ワーカノード１１２が１０個の続いて起こる動作の深さに至る場合にワーカノード１１２はそのクローリングを終了してよい。更に、ワーカノード１１２は、マスタノード１１０からパージコマンドを受け取った場合にクローリングを終了するよう構成されてよい。
【００３８】
ワーカノード１１２は、新たな状態、ウェブアプリケーションにおいて取られる決定経路を表す新たなトレース、及び新たなジョブに関する情報を含む情報をマスタノード１１０へ周期的に送信するよう構成されてよい。このような送信の周期性は、分散型コンピュータシステム１００によって決定される通信及び計算のトレードオフに基づき静的に又は動的に設定されてよい。所与の分散型コンピュータシステムの特定の周期性は、分散型コンピュータシステムのリソース、試験される動的ウェブアプリケーションの性質、他の予期しない要因に依存しうる。特定の又は最適な値の周期性は経験上決定されてよい。終了時に、ワーカノード１１２は、マスタノード１１０において利用可能なリソースキュー２３４に自身を登録するよう構成されてよい。
【００３９】
分散型コンピュータシステム１００は、動的ウェブアプリケーションのステートレスな分散型並列クローリングのための技術を利用するよう構成されてよい。一実施形態において、分散型コンピュータシステム１００は、クローリングのステートレスな並列化又はステートフルな並列化のいずれかを選択するよう構成されてよい。クローリングのステートフルな並列化は、状態が、マスタ状態グラフと比較される場合に、ワーカノード１１２から返された結果の中から重複を探すようマスタノード１１０において比較されるところの、ここで記載されるステップを含んでよい。クローリングのステートレスな並列化は、マスタノード１１０に、そのような重複を削除させないようにしてよく、結果として得られるマスタ状態グラフは、実行ツリーの下の方で現れる状態が上位で現れる状態の複製でもあることを示さなくてよい。ステートフルな並列化スキームは、基礎を成す状態グラフが有意な状態共有、状態再転換及びサイクルを有する場合に、より有用でありうる。分散型コンピュータシステム１００は、所与の動的ウェブアプリケーションの状態グラフにおいてほとんど再転換が存在しない場合に、例えば、状態グラフが概してツリー構造を有する場合に、ステートレスな並列化を使用するよう構成されてよい。ステートレスな並列化が分散型コンピュータシステム１００によって用いられる場合に、マスタノード１１０及びワーカノード１１２は状態比較を省略してよい。状態比較のそのような省略は、状態グラフのマージを達するのに必要なリソースがより少なくて済むため、マスタノード１１０の動作を高速化することができる。マスタノード１１０の必要とされるパージ動作は、ステートレスな並列化の状態に依存して、削除されてよい。同様に、それは、ワーカノード１１２でのクローリング動作を高速化することができる。更に、ワーカノード１１２は、ステートレスな並列化を用いる場合に、計算の終わりに１度だけ結果を送信するよう構成されてよい。なお、結果として得られるマスタ状態グラフは、複数の立場で現れる状態を含んでよい。
【００４０】
ワーカノード１１２は、何らかの適切な手段により自身の動作の状態を新たに発見されたジョブの状態と比較するよう構成されてよい。一実施形態において、ワーカノード１１２は、動的ウェブアプリケーションの一連のページが前の状態から僅かだが異なる状態を表す場合に、そのような状態比較を用いるよう構成されてよい。例えば、ＡＪＡＸによるウェブアプリケーションの所与の画面での所与のユーザ動作は、現在の画面のごく一部のみに対する変更又は更新をもたらしうる。従って、このように得られた新たな画面は、前の画面からほんの僅かに、そのコンテンツにおいて異なっている。このように、ワーカノード１１２は、動的ウェブアプリケーションの一連の状態の文書オブジェクトモデル間の差違のみを記憶するよう構成されてよく、次いで、一連の状態は、マスタノード１１０へ送信され、夫々の状態の完全な表現を得るようマスタノードによって復元され得る。状態圧縮は、一連の状態間の差違が所与の閾値よりも低い場合に、有効にされてよい。そのような閾値は、動的ウェブアプリケーションの一連の状態の間の相対的又は絶対的な差に関して設定されてよい。ワーカノード１１２は、目下クロールされている特定の動的ウェブアプリケーションに依存して、状態圧縮を有効及び無効にするよう構成されてよい。
【００４１】
分散型コンピュータシステム１００は、如何なる適切な動的ウェブアプリケーションもクロールするよう構成されてよい。図５は、分散型コンピュータシステム１００によってクロールされる例となる動的ウェブアプリケーション５００の画面遷移グラフである。画面遷移グラフは状態グラフを含んでよい。動的ウェブアプリケーション５００は、２つのボタン、すなわち、ボタン１及びボタン２を表示するよう構成されてよい。ボタン１及びボタン２の出現及び該出現に関連する機能は、ユーザからの様々な事前の動作に依存してよい。動的ウェブアプリケーション５００が存在する異なった状態は、Ｓ１、Ｓ２、Ｓ３及びＳ４によって表される。図５の画面遷移グラフは、動的ウェブアプリケーション５００の起こり得る状態を完全に表しうる。このように、図５の状態遷移グラフは、動的ウェブアプリケーション５００の動的なクローリングの完全な結果であってよい。
【００４２】
動的ウェブアプリケーション５００のためのコードは、次のように具現されてよい：
【００４３】
【数１】
0005742666.tif 000002
このように、動的ウェブアプリケーション５００は、ボタン１の出現を変更するよう構成されてよく、このとき、ボタン１は、最初に“Ｃｌｉｃｋ  Ｍｅ！”を表示し、クリックされると“Ｉ’ｍ  Ｃｌｉｃｋｅｄ．”を表示するよう設定されてよい。ボタン１は、その後のクリックの際に、それらの値の間で表示を切り替えるよう構成されてよい。ボタン２は、最初に“Ｃｌｉｃｋ  Ｍｅ  Ｔｏｏ！”を表示し、クリックされると無効になるよう構成されてよい。これは、図５では、Ｓ１によって表されている状態において動作を開始するように表され得る。ボタン１がクリックされた場合には、動的ウェブアプリケーション５００は、Ｓ２によって表される状態へ遷移してよい。そこでもう一度ボタン１がクリックされた場合には、動的ウェブアプリケーション５００はＳ１へ戻ってよい。代わりにボタン２がクリックされた場合には、動的ウェブアプリケーション５００は、代わりに、Ｓ３によって表される状態へ遷移してよい。同様に、Ｓ１からボタン２をクリックすることは、動的ウェブアプリケーション５００を、Ｓ４によって表される状態へ遷移させてよい。動的ウェブアプリケーション５００は、ボタン１がクリックされた場合に、Ｓ３とＳ４との間で遷移してよい。
【００４４】
分散型コンピュータシステム１００によってクロールされるインタラクティブ型クライアント−サーバ・アプリケーションは、取られた事前の動作に依存して様々に動作するよう構成されてよく、これらは異なった状態として表されることがある。動的ウェブアプリケーション５００の例において、ボタン２をクリックする能力は、ボタン２が以前にクリックされたかどうかに依存する。そのような動作は、元の状態に戻る手段が存在しないために、繰り返し可能でない。状態Ｓ３及びＳ４は、１度入ると、動的ウェブアプリケーション５００を、状態Ｓ１及びＳ２に戻ることができないようにする。他方で、ボタン１の状態は、現在の状態にも依存する一方で、切り替えられてよい。そのようなサイクルは、Ｓ１とＳ２との間の動作において、又はＳ３とＳ４との間の動作において存在する。
【００４５】
動作において、図３に戻ると、分散型コンピュータシステム１００は、動的ウェブアプリケーションを含むインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させるための技術を利用してよい。
【００４６】
マスタノード１１０は、動的ウェブアプリケーションのクローリングを協調させるのに必要な如何なる適切な動作も取ってよい。一実施形態において、マスタノード１１０は、係属中のジョブを、そのようなジョブを実行するのを待っているリソースに対してスケジューリングしてよい。他の実施形態では、マスタノード１１０は、ワーカノード１１２から受け取った結果をマージしてよい。そのような実施形態では、マスタノード１１０は、かかる結果を、他のワーカノード１１２から以前に受け取った結果によりマージしてよい。
【００４７】
一実施形態において、マスタノード１１０のタスクは、次の擬似コードの一部又は全てを用いて実施されてよい：
【００４８】
【数２】
0005742666.tif 000003
上記の擬似コードにおいて、masterSTGは、クロールされるアプリケーションのマスタ画面遷移グラフモデルを表してよい。例えば、図５は、動的ウェブアプリケーション５００の完全なマスタ画面遷移グラフを表してよい。そのようなマスタ画面遷移グラフは、マスタ状態グラフ２３６に記憶されてよい。jobQは、試験下のウェブアプリケーションをクロールする部分として処理されるべき係属中のジョブのキューを表してよい。一実施形態において、jobQは、先入れ先出し（ＦＩＦＯ）キューとして実施されてよい。resourceQは、ジョブを割り当てられるべきワーカノード１１２のような係属中のリソースのキューを表してよい。一実施形態において、resourceQは、ＦＩＦＯキューとして動作してよい。
【００４９】
マスタノード１１０は、クロールされるべき動的ウェブアプリケーションの部分のような係属中のジョブを、ワーカノード１１２のような待機中のリソースへスケジューリングしてよい。上述されたように、マスタノード１１０は、エントリがjobQ及びresourceQの両方に存在する間、ジョブキュー２３２の一番上から第１のジョブを得、resourceQから第１のリソースを得、そして、そのリソースによって行われるようジョブをスケジューリングする。如何なる適切な方法も、jobQ中のジョブ又はresourceQの中のリソースを得るために使用されてよい。
【００５０】
マスタノード１１０は、ワーカノード１１２から返されたワーカ結果を、既に生成されたトレースとマージしてよい。マスタノード１１０と同期する各ワーカノード１１２は、如何なる適切な情報もマスタノード１１０へ送信してよい。実施形態において、そのようなワーカノード１１２は、少なくとも２つのデータ項目、すなわち、ワーカノード１１２が動的ウェブアプリケーションの一部をクロールしていた間に出くわした新たな組のジョブ（例えば、newJobs）及び圧縮されたトレース（例えば、compTrace）をマスタノード１１０へ送信してよい。マスタノード１１０は、それらの情報を、マスタノード１１０で保持されている情報（例えば、jobQ、resourceQ、及びmasterSTG）にマージしてよい。
【００５１】
係属中のジョブをスケジューリングするのと並行して、マスタノード１１０は、ワーカノード１１２が出くわした新たなトレースに関して受け取った情報を、マスタ画面遷移図にマージしてよい。一実施形態において、マスタノード１１０は、ワーカノード１１２が出くわした返されたトレースを復元してよい。トレースは、状態及び状態間の遷移を含んでよい。マスタノード１１０は、返されたトレースで見つけられる状態ごとに、そのような状態がマスタ状態図に存在するかどうかを判断してよい。そのような状態が存在しない場合には、その状態はマスタ状態図に加えられる。返されたトレースにおける遷移ごとに、マスタノード１１０は、そのような遷移がマスタ状態図に存在するかどうかを判断してよい。そのような遷移が存在しない場合には、その遷移はマスタ状態図に加えられる。新しい状態を最初に決定し、その後に新しい遷移を決定することが有利でありうる。
【００５２】
マスタノード１１０は、ワーカノード１１２が出くわした又は生成した新たなジョブに関する情報をジョブキュー２３２にマージしてよい。マスタノード１１０は、如何なる適切な方法においても、かかる情報をマージしてよい。一実施形態において、マスタノード１１０は、マスタノード１１０へ返されたnewJobsにおけるジョブごとに、そのジョブが既にjobQに存在するかどうかを判断してよい。ジョブがjobQに存在しない場合には、そのジョブはjobQに加えられてよい。
【００５３】
図６ａ〜６ｃは、どのようにマスタノード１１０がワーカノード１１２からの情報を加えてマスタ画面遷移グラフを生成するのかの例を表す。図６ａは、中身のない画面遷移グラフがワーカノード１１２から返されたトレースと結合される場合を表す。返されたトレースにおいて、ワーカノード１１２は、第２の状態Ｓ２へ進むようボタン１をクリックすることによって第１の状態Ｓ１からクロールし、そして、再びボタン１をクリックすることによって第１の状態Ｓ１に戻っている。マスタ画面遷移グラフには状態又は遷移が予め存在していないので、返されたトレースが結合により得られる。選択されなかった選択肢（例えば、状態Ｓ２においてボタン２をクリックすること）は、完了されるべき将来のジョブを表し、これは、ワーカノード１１２によって返されて、ジョブキュー２３２に加えられてよい。
【００５４】
図６ｂは、どのようにマスタノード１１０が他のワーカノード１１２の結果を、前の図から得られる既存のマスタ画面遷移グラフに加えるのかを表す。図６ｂにおける返されたトレースは、第１の状態Ｓ１から始まって、ボタン２をクリックすることによって状態Ｓ４へクロールするワーカノード１１２の結果であってよい。次いで、ワーカノード１１２は、ボタン１をクリックすることによって状態Ｓ３へクロールし、二度目にボタン１をクリックすることによって状態Ｓ４へ戻ってよい。この返されたトレースを既存のマスタ画面遷移グラフに加えることは、マスタノード１１０に、返されたトレースのインスタンスＳ１を削らせるが、さもなければ、両方の状態及び遷移のための２つのグラフの結合を意味する。ワーカノード１１２は、図６ａのトレースを返したものと同じ又は異なるワーカノード１１２であってよい。
【００５５】
図６ｃは、どのようにマスタノード１１０が更なる他のワーカノード１１２の結果を、前の図から得られる既存のマスタ画面遷移グラフに加えるのかを表す。図６ｃにおける返されたトレースは、Ｓ１からクロールし、Ｓ２へ遷移するようボタン１をクリックし、次いで、Ｓ３へ遷移するようボタン２をクリックするワーカノード１１２の結果であってよい。Ｓ３において１度、ワーカノード１１２はボタン１をクリックしてＳ４へクロールし、そして、それを再びクリックしてＳ３に戻ってよい。この返されたトレースを既存のマスタ画面遷移グラフに加えることは、返されたトレースの残りの部分は予めマスタ画面遷移グラフに存在するので、マスタノード１１０にＳ２からＳ３への遷移をマスタ画面遷移グラフに加えさせる。ワーカノード１１２は、図６ａ及び図６ｂのトレースを返したものと同じ又は異なるワーカノード１１２であってよい。ワーカノード１１２は、マスタノード１１０から開始状態としてＳ２を受け取っていてよい。そのような命令は、ジョブキュー２３２に加えられる以前に識別されたジョブ（例えば、ワーカノード１１２がＳ２において利用可能な幾つかの動作を事前に調査するが、ボタン２を選択しないこと）から発生してよい。
【００５６】
図３に戻ると、分散型コンピュータシステム１００は、並列な分散環境において動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの有効な並列クローリングのための技術を利用してよい。分散型コンピュータシステム１００におけるワーカノード１１２は、動的ウェブアプリケーションの部分をクロールし、結果として得られる発見されたトレースをマスタノード１１０へ報告してよい。ワーカノード１１２は、如何なる適切な方法においても動的ウェブアプリケーションをクロールしてよい。
【００５７】
一実施形態において、ワーカノード１１２のタスクは、次の擬似コードの一部又は全てを用いて実施されてよい：
【００５８】
【数３】
0005742666.tif 000004
マスタノード１１０は、将来のクローリングタスクのためにワーカノード１１２を準備するために、設定configに従ってワーカノード１１２（例えば、w1）におけるワーカクローラアプリケーション２１８を初期化するようLoadConfig(config)のような関数を使用してよい。一実施形態において、ワーカノード１１２自体が、ワーカノード１１２にあるワーカクローラアプリケーション２１８を初期化してよい。configは、ワーカノード１１２を初期化するよう如何なる適切な情報も含んでよい。一実施形態において、configは、クロールされる動的ウェブアプリケーションのurl等のアドレスを含んでよい。他の実施形態では、configは、どのように動的ウェブアプリケーションをクロールすべきかに関するワーカノード１１２のための指令を含んでよい。そのような指令は、目的の文書オブジェクトモデル（ＤＯＭ）要素、例えば、html”<a>”タグに関する指令を含んでよい。また、そのような指令は、動的ウェブアプリケーションで実行すべきユーザ動作、例えば、特定の又は断定的な項目のクリック、及び／又はクローリングの間の適切な段階で入力すべき特定のユーザデータ（例えば、ログインページにおける認証データ）を含んでよい。
【００５９】
一実施形態において、この初期化プロセスは、ワーカノード１１２で事前に利用可能な予め構成されたクローラアプリケーションへのパラメータの組（例えば、文字列）のパスを利用してよい。そのような予め構成されたクローラアプリケーションは、ワーカクローラアプリケーション２１８において実施されてよい。他の実施形態では、この初期化プロセスは、configに含まれる指令に基づき新たなソースコードを生成してよく、次いで、それはコンパイルされて、w1でクローラアプリケーションを駆動するために使用されてよい。そのようなクローラアプリケーションは、ワーカクローラアプリケーション２１８において動作してよい。新たなソースコードの生成又はコンパイルは、マスタクローラアプリケーション２２０のようなアプリケーションにおいて、マスタノード１１０で実行されてよい。新たなソースコードの生成又はコンパイルは、ワーカノード１１２で行われてよい。
【００６０】
ワーカノード１１２は、指定の開始位置から始まって動的ウェブアプリケーションをクロールしてよい。指定の開始位置は、事前に決定された状態及び遷移を含む既存の既知のトレースにおいて実施されてよい。一実施形態において、ワーカノード１１２は、上述された関数手続きWorkerCrawlTrace(seedTrace)を利用してよい。seedTraceは、マスタノード１１０からワーカノード１１２へ送られた開始トレースであってよい。
【００６１】
動的ウェブアプリケーションをクロールする前に、ワーカノード１１２は、localStateGraphのような局所状態グラフを生成して、それを空に設定してよい。ワーカノード１１２は、クローリングの間に発見される新たなジョブを含むためにnewJobsのような構造を生成して、それを空に設定してよい。ワーカノード１１２は、初期画面を読み込んでよい。ワーカノード１１２は、そのようにするために、アドレスに対応するウェブアプリケーションをクロールするのに備えて自身のワーカクローラアプリケーション２１８にinitScreenのような開始アドレスを読み込むことによって、上記のLoadPage(url)のような関数を使用してよい。一実施形態において、アドレスは、クロールされるウェブアプリケーションの初期ページ又はホームページである。開始アドレスをウェブクローラアプリケーションに読み込んだ結果は、currentStateのような構造に格納されてよい。
【００６２】
次いで、ワーカノード１１２は、所望の状態に達するようプログラムでトレースを実行してよい。かかる実行は、関数ExecuteTrace(SeedTrace)を使用してよいExecuteTraceは、seedTraceにおける一連の動作を実行するようExecuteAction(Action)のような関数を順に呼び出してよい。Actionは、特定のページでのワーカノード１１２の即時動作を指示するよう１又はそれ以上のパラメータを含んでよい。一実施形態において、actionは、一対のパラメータ{t,u}を含んでよい。tは、ブラウザにおける現在のページでボタン又はリンク等の目的のＤＯＭ要素を含んでよい。uは、tで実行されるボタンクロック又はフォームデータ入力等のユーザ動作を含んでよい。ExecuteActionは、現在の画面又は状態において{t,u}によって指定される動作をプログラムで実行してよい。一実施形態において、ExecuteActionは、目的の要素tが現在のブラウザ画面又は状態で利用可能であるとして、動作してよい。
【００６３】
このように、ワーカノード１１２は、seedTraceによって定義される動的ウェブアプリケーション、又はマスタノード１１０によって定義されるその他の初期トレースを通じて最初のクロールを行ってよい。かかる最初のクロールは、他のワーカノード１１２によってそもそも取られたステップを繰り返すことを含むことがある。ワーカノード１１２は、currentStateのようなクロールの現在の状態を格納する構造に対して結果を割り当ててよい。
【００６４】
ワーカノード１１２は、状態グラフを実行し続けるべきか否かを判断してよい。実行し続ける場合には、ワーカノード１１２は、動的ウェブアプリケーションにおける動作を実行し、関連するブックキーピングタスクを実行し続ける。そうでない場合には、ワーカノード１１２は、動的ウェブアプリケーションのその部分のクローリングを終了させ、状態グラフ及び何らかの新たに生成されたジョブをマスタノード１１０と同期させる。
【００６５】
ワーカノード１１２は、現在の状態が訪れたことがあるかどうかと、現在の局所状態グラフが定義されているソース境界内で動作しているかどうかとを判断してよい。そのような基準が真である間、ワーカノード１１２は、動的ウェブアプリケーションの一部をクロールするよう一連のイベントを行ってよい。そのような基準が真であるかどうかを判断するよう、状態が以前に訪れたことがあるかどうかに関する判断は、NotVisited(state)関数を使用することによって行われてよい。ワーカノード１１２は、状態がlocalStateGraph内に存在するかどうかを確認するよう、localStateGraphにおいてその状態を探してよい。状態が既にlocalStateGraph内に存在する場合には、ワーカノード１１２は、その状態が以前に訪れたことがあると決定してよい。状態が以前に訪れたことがある場合には、NotVisited関数は偽を返し、そうでない場合には真を返してよい。何らかの適切な方法により割り当てられたアプリケーションの境界内でワーカノード１１２が動作しているかどうかに関する決定は、関数WithinResourceBound(localStateGraph)を用いてよい。そのような例において、ワーカノード１１２は、場合により関数LoadConfigを用いて、localStateGraphのトレースが、ノードが初期化されたconfigにおいて指定されるリソース境界内にあるかどうかを判断してよい。かかる境界は、如何なる適切なメトリックによっても定義されてよい。一実施形態において、localStateGraphを構成するトレースにおける状態の数は、最大閾値と比較されてよい。他の実施形態では、localStateGraphを構成するトレースにおいてクローリングが行われた深さは、閾値と比較されてよい。更なる他の実施形態では、現在のクローリングタスクの開始から経過した時間は、最大閾値と比較されてよい。様々な実施形態において、１よりも多いそのような基準は、configで指定されるリソース境界に一体化されてよい。
【００６６】
そのようなシーケンスは、次のステップの１又はそれ以上を含んでよい。ワーカノード１１２は、localStateGraphのような局所状態グラフがマスタノード１１０と同期する準備ができているかどうかを判断し、準備ができている場合には、生成された何らかの新たなジョブ（例えば、構造newJobsに含まれるもの）とともにlocalStateGraphを同期させてよい。ワーカノード１１２は、如何なる適切な方法によっても、例えば、関数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は、マスタノード１１０と同期をとられたとマークされてよい。ワーカノード１１２は、マスタノード１１０と同期するよう、新たなジョブを含む構造をリセットするか、又は空にしてよい。
【００７４】
分散型コンピュータシステム１００は、動的ウェブアプリケーションを含むインタラクティブ型クライアント−サーバ・アプリケーションのクローリングにおいて状態情報の圧縮技術を利用してよい。上述されたように、ワーカノード１１２は、同期の間にマスタノード１１０へ送信される情報を低減するよう状態グラフを圧縮してよく、マスタノード１１０は、新たに発見された情報を再構成するよう状態グラフを復元してよい。
【００７５】
一実施形態において、ワーカノード１１２は、前の画面のほんの小さい変更を含む、動的ウェブアプリケーションにおいてあった一連の状態又は画面を圧縮することによって、状態グラフを最適化してよい。そのような実施形態では、２つの連続する画面は、それらの基礎を成すＤＯＭの大半を共有する。例えば、図６の画面遷移グラフに関し、上記の初期状態Ｓ１の基礎を成すＤＯＭ表現は、ボタン１に割り当てられる値を“Ｃｌｉｃｋ  Ｍｅ！”と示し、ボタン２に割り当てられる値を“Ｃｌｉｃｋ  Ｍｅ  Ｔｏｏ！”と示す。ボタン１がこの画面においてクリックされた場合に、状態Ｓ２へ遷移が起こり、基礎を成すＤＯＭにおける唯一の変化は、“Ｃｌｉｃｋ  Ｍｅ！”から“Ｉ’ｍ  ｃｌｉｋｅｄ．”への要素/HTML[1]/BODY[1]/INPUT[1]の値属性の変化である。このように、状態Ｓ２は、以下によって、完全な表現に代えて、表されてよい：
【００７６】
【数４】
0005742666.tif 000005
このように、一実施形態において、ワーカノード１１２は、現在の画面が前の画面又は基準画面（上記の例では、Ｓ１）と相違する動的ウェブアプリケーションの現在の画面（上記例では、Ｓ２）の部分のみをマークし表してよい。ワーカノード１１２は、如何なる適切な方法においても、前の画面と相違する現在の画面の部分のみをマークし表してよい。一実施形態において、ワーカノード１１２は、次の擬似コードの全て又は一部により、それらのタスクを達成してよい：
【００７７】
【数５】
0005742666.tif 000006
ワーカノード１１２は、refScrnのような基準画面と、newScrnのような目標画面との間の状態又は画面を圧縮してよい。目標画面は、圧縮された表現が必要とされる画面であってよい。基準画面は、如何なる適切な画面であってもよい。基準画面は、目標画面と同様に基づいて選択されてよい。このように、目標画面を訪れる直前に訪れた画面、又は他の先行画面は選択されてよい。基準画面は、圧縮が実行される基準を提供してよい。ワーカノード１１２は、主として、後述される２つの相、すなわち、マーキング相及び抽出相において、状態グラフに含まれる所与の状態を圧縮してよい。
【００７８】
ワーカノード１１２は、目標画面において各ノードを初期化し、次いでマーキング相に入り、次いで抽出相に入って、マーキング相の結果が取り出されて、圧縮相として返されるようにしてよい。
【００７９】
初期化の間、ワーカノード１１２は、最初に目標画面内の全てのノードを初期化することによって、refScrnのような基準画面を参照するnewScrnのような新たにクロールされる目標画面の状態を圧縮してよい。ワーカノード１１２は、ノードにおける変化を表し且つ子ノードにおける変化を表すマーカを偽と設定してよい。ワーカノード１１２は、所与の画面又は問題となっている画面のＤＯＭにおいて各ノードに付されるべき２つのマーカを設定してよい。第１のマーカは、基準画面と目標画面との間で現在のノードに対してなされた変更を表してよい。第１のマーカは、changeと示されてよい。様々な実施形態において、changeは、３つの異なる値、すなわち、“false”、“attrs”又は“tag”を有してよい。“false”値は、ノードが目標画面及び基準画面において同じであることを表してよい。そのような明示的意味は、タグ名、属性、又はその他の適切な特性に関してなされてよい。“attrs”値は、ノードが目標画面においても基準画面と同じタグ名を有するが、属性の１又はそれ以上は値が異なることを表してよい。“tag”値は、このノードが両方の画面において構造上異なった表現を有することを表してよい。例えば、そのような構造上異なった表現は、２つの画面のその位置で異なったタグを有するノード、あるいは、ノードが基準画面のその位置に存在しない場合、あるいは、より多くの子ノードを有するノードが基準画面のその位置に存在する場合を含んでよい。第２のマーカは、ノードの子孫の１又はそれ以上が非偽値に設定された変更マーカを有することを表してよく、従って、ノードは、変更があった子孫への経路を提供するよう、圧縮された表現で存在する必要がある。第２のマーカは、childDiffと表されてよい。childDiffは、真又は偽値に対応してよく、このとき、真値は、変更がノードの子孫に対して起こったことを示す。
【００８０】
次に、マーキング相において、ワーカノード１１２は、目標画面のどの部分が基準画面と異なっているのかを特定し、それらに然るべくマークを付すために、目標画面を基準画面と比較してよい。ワーカノード１１２は、如何なる適切な方法によっても、このタスクを達成してよい。一実施形態において、ワーカノード１１２は、基準画面及び新しい画面を比較するために関数MarkChangeを使用してよい。ワーカノード１１２は、基準画面に関して変化した目標画面の部分にマークを付してよい。ワーカノード１１２は、目標画面の根本においてそのようなマーキングを開始してよい。
【００８１】
目標画面と基準画面との間の差異にマークを付す際に、ワーカノード１１２は、目標画面の根本に対応する開始ノード（例えば、node）から開始してよい。ワーカノード１１２は、ノードが基準画面におけるその等価なものと異なっているかどうかを判断してよい。異なっている場合には、ワーカノード１１２は、基準画面と目標画面との間に変化があったと決定してよい。ワーカノード１１２は、nodeが基準画面に存在するかどうかを確認し、基準画面におけるnodeの対を得、nodeの子の数を基準画面におけるnodeの対の子の数と比較することによって、そのような決定を行ってよい。
【００８２】
nodeが基準画面に存在するかどうかを確認する際に、ワーカノード１１２は、ノードが特定のＤＯＭ要素（例えば、node）と同じx経路位置及び同じタグ名を有して目標画面において存在するかどうかを判断してよい。ワーカノード１１２は、如何なる適切な方法によっても、そのような判断を行ってよい。一実施形態において、ワーカノード１１２は、上記のExists(node,refScrn)を使用することによって、判断を確かめてよい。その関数は、newScrnにおいてＤＯＭ要素nodeと同じx経路位置及び同じタグ名でrefScrnにノードが存在するときかつそのときに限り、真を返してよい。
【００８３】
nodeの対を得る際に、ワーカノード１１２は、基準画面において特定の指定されたノードを見つけて返してよい。ワーカノード１１２は、如何なる適切な方法によっても、そのような発見を行ってよい。一実施形態において、ワーカノード１１２は、上記のGetTwin(node,refScrn)を使用することによって、そのような決定を行ってよい。ワーカノード１１２は、上記のExists()によって用いられるx経路一致基準を用いて、refScrnに存在するnodeに対応するノードを返してよい。
【００８４】
nodeの子の数をnodeの対の子の数と比較する際に、ワーカノード１１２は、画面又は状態のＤＯＭツリーにおいて所与のノードの子ノードの数を決定してよい。ワーカノード１１２は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード１１２は、上記のNumChild(node)関数を使用することによって、そのような決定を行ってよい。
【００８５】
nodeの対の一方が基準画面に存在する場合及びそれがnodeと同じかそれより少ない数の子を有する場合に、ワーカノード１１２は、nodeの対がnodeと同じ属性を厳密に有するかどうかを判断し、同じ属性を有さない場合には、“attrs”であるようnodeのchangedマーカを割り当てることによってそのような状況を反映するとともに、nodeの親を得て、その親のchildDiffを“true”であるよう変更するよう、node及びその親のマーカを変更してよい。
【００８６】
nodeの親を得る際に、ワーカノード１１２は、ＤＯＭツリーにおいて特定のノードの親ノードを決定してよい。ワーカノード１１２は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード１１２は、上記のGetParent(node)関数を使用することによって、そのような決定を行ってよい。その関数は、ＤＯＭツリーにおけるnodeの親ノードを返すことができる。
【００８７】
対の一方であるノードの属性がnodeと同じである場合に、ワーカノード１１２は、nodeが変更されていないことを示してよい。更に、Exists(node,refScrn)&NumChild(node)≧NumChild(GetTwin(node,refScrn))が真を返す場合には、nodeの子ごとに、ワーカノード１１２は、上記のマーキングスキームを用いて再帰的に子を処理してよい。一実施形態において、かかるマーキングは、nodeに関して見つけられた夫々の子についてMarkChangeを呼び出すことによって、達成されてよい。
【００８８】
nodeの子を決定する際に、ワーカノード１１２は、ＤＯＭツリーにおいて特定のノードの子ノードを決定してよい。ワーカノード１１２は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード１１２は、上記のChildNodes(node)関数を使用することによって、そのような決定を行ってよい。その関数は、ＤＯＭツリーにおける特定のノード（例えば、node）の子ノードの順序付けられたリストを返すことができる。
【００８９】
そうではなければ、基準画面と目標画面との間に変化があった場合、nodeに関して、場合により、Exists(node;refScrn)&NumChild(node)≧NumChild(GetTwin(node;refScrn))を呼び出し、偽（false）の戻り値を得ることによって、次いで、ワーカノード１１２は、nodeが変更されたことを示してよい。一実施形態において、ワーカノード１１２は、nodeのchangedタグを“tag”に設定することによって、そのような意味を表してよい。更に、ワーカノード１１２は、変化した子を親が有することを示すようnodeの親のタグを設定してよい。これは、GetParent(node)を呼び出して、結果のchildDiffパラメータを“true”に設定することによって、達成されてよい。
【００９０】
最後に、ワーカノード１１２は、nodeが変化した子ノードを有するかどうかを判断し、そのような子ノードを有する場合には、nodeの親が変化した子を有することを示すようnodeの親のタグを設定してよい。これは、nodeのchildDiffパラメータを確認して、GetParent(node)を呼び出し、結果のchildDiffパラメータを“true”に設定することによって、達成されてよい。
【００９１】
抽出相において、ワーカノード１１２は、基準画面に対して目標画面の圧縮表現を取り出すよう、目標画面と基準画面との間の差異のマーキングを使用してよい。ワーカノード１１２は、如何なる適切な方法によっても、このタスクを達成してよい。一実施形態において、ワーカノード１１２は、目標画面の圧縮表現を取り出すために関数ExtractDeltaを使用してよい。ワーカノード１１２は、目標画面と基準画面との間のマークされている差違を取り出し、結果をdeltaScrnのような構造に格納してよい。ワーカノード１１２は、圧縮された目標画面を含む、結果として得られるdeltaScrnを返してよい。かかる目標画面は、マスタノード１１０へ返されるべき圧縮された状態として使用されてよい。
【００９２】
図７は、少なくとも部分的にクロールされた動的ウェブアプリケーションの画面のＤＯＭツリーのマークを付されたものの一例である。図７は、refScrnのような基準画面を参照してnewScrnのような目標画面にマークを付す効果を表す。そのようなマーキングは、関数ExtractDeltaを手段として、deltaScrnのような圧縮表現を生成するために抽出相においてワーカノード１１２によって使用されてよい。保持又は廃棄されたマーク付きＤＯＭの部分は、生成された圧縮表現の一例を示す。例えば、図７は、図５に示されるように、状態Ｓ１に対する状態Ｓ２の圧縮を表す。そのような例において、ＤＯＭツリーのＨＴＭＬノード７０２、ＨＴＭＬノード属性７０３、ＨＥＡＤノード７０４、ＨＥＡＤノード属性７０６、ＢＯＤＹノード７０８、ＢＯＤＹノード属性７１０、ＩＮＰＵＴノード７１２、ＩＮＰＵＴノード７１２に関連するＤＯＭサブツリー７１４、並びに、様々な他のノード及びサブツリー７１６に対応するＤＯＭツリーのセクションが存在してよい。状態Ｓ１からＳ２へ進む動作は、ＩＮＰＵＴノード７１２、その属性等のＤＯＭノードにおける、及びその子孫ノード７１４のサブツリーにおける変化として反映してよい。更に、もっぱらＨＥＡＤノード７０４の属性７０６に対する変化が存在してよい。これは、“Ｃｌｉｃｋ  Ｍｅ！”ボタンをクリックした結果であってよく、このとき、スクリプトの部分がアクティブにされ、ボタン値に対する変更がなされる。マーク付きＤＯＭモデルのそれらの部分は、変化したとマークされて、返されるべきＤＯＭモデルの圧縮されたものに含まれてよい。その一方で、ＤＯＭモデルの多くの他の部分７１６、７１８は、２つの状態Ｓ１及びＳ２の間で変化しないままであってよい。このように、それらの部分は、変化なしとマークされて、返されるべきＤＯＭモデルの圧縮されたものから除かれてよい。ＨＴＭＬノード７０２、ＨＥＡＤノード７０４、及びＢＯＤＹノード７０８等の幾つかのセクションは、２つの状態Ｓ１及びＳ２の間で変化しないままであるが、変化した子を有することがある。このように、それらのセクションは、変化した部分への経路を提供するように、返されるべきＤＯＭモデルの圧縮されたものにおいて保持されてよい。
【００９３】
このように、ワーカノード１１２は、deltaScrnのような圧縮表現として保持されるとマークされた図７の部分を返してよい。そのような圧縮表現は、deltaScrn及びrefScrnから原の表現newScrnを一意的に且つ完全に再構成するのに十分な情報を有してよい。
【００９４】
図８ａ及び８ｂは、動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させる方法８００の実施例である。分散型コンピュータシステム１００の動作において上述された擬似コードは、方法８００の一部又は全てを実施してよい。
【００９５】
ステップ８０５において、ウェブアプリケーションは、クローリングのために初期化されてよい。そのような初期化は、ウェブアプリケーションのクローリングのための開始位置又は初期トレースを表す１又はそれ以上の初期ジョブを決定することを含んでよい。一実施形態において、生成される初期ジョブの数は、そのようなジョブを並列に実行するのに利用可能なリソースの数よりも多くてよい。ステップ８１０において、あらゆる、そのような決定されたジョブが、ジョブキューに加えられてよい。
【００９６】
方法８００の２又はそれ以上のブランチは、並列に実行してよい。１つのブランチはステップ８１５から始まってよい。他のブランチはステップ８５０から始まってよい。各ブランチは、当該方法が終了するまで実行してよい。方法が終了されるべきかどうかの判断は、いずれかのブランチにおいて、又は方法８００の実行の他のブランチにおいて、起こってよい。一実施形態において、そのような判断は、ステップ８１５から始まるブランチにおいて行われてよい。
【００９７】
ステップ８１５において、ジョブキュー及びリソースキューはエントリを含むかどうかが判断されてよい。ステップ８１５は、ポーリングスキーム、イベントハンドラ、又はその他の適切なメカニズムにおいて実施されてよい。ジョブキュー及びリソースキューがエントリを含む場合には、ステップ８２０において、ジョブがジョブキューから選択されてよい。ジョブを選択する如何なる適切な方法も使用されてよい。一実施形態において、ジョブは、先入れ先出しに基づいて選択されてよい。ステップ８２５において、リソースがリソースキューから選択されてよい。リソースを選択する如何なる適切な方法も使用されてよい。一実施形態において、リソースは、先入れ先出しに基づいて選択されてよい。ステップ８３０において、ジョブは、リソースによって実行されるよう割り当てられてよい。そのような割り当ては、ジョブによって指定されるウェブアプリケーションの一部をクロールするリソースを含んでよい。ステップ８３５において、リソースが、ジョブの実行のために初期化されてよい。次に、方法８００は、ステップ８１５へ戻ってよい。
【００９８】
ジョブキュー及びリソースキューの一方がエントリを含まない場合には、方法が終了されるべきかどうかが判断されてよい。ステップ８４０において、ジョブキューが空であるかどうか、及び全てのジョブが実行されたかどうかが判断されてよい。ジョブキューが空であって且つ全てのジョブが実行されていた場合には、ステップ８４５において、そのような場合は、ウェブアプリケーションが完全にクロールされたことを反映しており、方法は終了してよい。そうでない場合には、方法は、ステップ８１５へ戻ってよい。
【００９９】
ステップ８５０において、以前にリソースへ割り当てられたいずれかのジョブから結果が受け取られたかどうかが判断されてよい。ステップ８５０は、ポーリングスキーム、イベントハンドラ、又はその他の適切なメカニズムにおいて実施されてよい。結果が受け取られていない場合には、方法８００は、ステップ８５０へ戻ってよい。結果が受け取られている場合には、ステップ８５５において、結果の一部として受け取られた如何なる状態グラフも復元されてよい。受け取られた状態グラフにおける夫々の状態について、ステップ８６０において、その状態がマスタ状態グラフにあるかどうかが判断されてよい。状態がマスタ状態グラフにない場合には、ステップ８６５において、その状態はマスタ状態グラフに格納されてよく、方法８００はステップ８７０へ進んでよい。状態がマスタ状態グラフにある場合にも、方法８００はステップ８７０へ進んでよい。受け取られた状態グラフにおける夫々の遷移について、ステップ８７０において、その遷移がマスタ状態グラフにあるかどうかが判断されてよい。遷移がマスタ状態グラフにない場合には、ステップ８７５において、その遷移はマスタ状態グラフに加えられてよく、方法８００はステップ８８０へ進んでよい。遷移がマスタ状態グラフにある場合にも、方法８００はステップ８８０へ進んでよい。受け取られた結果における夫々のジョブについて、ジョブがジョブキューにあるかどうか、又は現在リソースにおいて実行中であるかどうかが判断されてよい。ジョブがジョブキューになく、且つ現在リソースにおいて実行中でもない場合には、ステップ８８５において、ジョブはジョブキューに加えられてよく、方法８００はステップ８５０へ戻ってよい。ジョブがジョブキューにあるか、又は現在リソースにおいて実行中である場合にも、方法８００はステップ８５０へ戻ってよい。
【０１００】
図９は、並列分散環境における動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの有効な並列クローリングのための方法９００の実施例である。分散型コンピュータシステム１００の動作において上述された擬似コードは、方法９００の一部又は全てを実施してよい。
【０１０１】
ステップ９０５において、ジョブの実行は初期化されてよい。ジョブは、クロールされるウェブアプリケーションの部分を表してよい。そのような初期化は、中身のない状態グラフを生成することを含んでよく、このとき、状態グラフは、ウェブアプリケーションのクローリングの結果を含んでよい。ウェブアプリケーションのクローリングの間に発見された新たなジョブを含むための記録は、初期化されてよい。初期トレースは、ウェブアプリケーションにおける指定された開始場所に到達するよう実行されてよい。そのような指定された場所でのウェブアプリケーションの画面は、読み込まれてよい。ステップ９１０において、そのような画面は、現在の状態として指定されてよい。
【０１０２】
ステップ９１５において、現在の状態が以前に訪れたかどうかが、局所グラフに従って判断されてよい。以前に訪れたことがある場合には、ジョブのクローリングは終了されてよく、方法９００はステップ９７５へ進んでよい。以前に訪れたことがない場合には、ステップ９２０において、ジョブの実行が定められた境界内にあるかどうかが判断されてよい。ジョブの実行が定められた境界内にあるかどうかを判断する如何なる適切な方法も使用されてよい。境界内にない場合には、ジョブのクローリングは終了されてよく、方法９００はステップ９７５へ進んでよい。境界内にある場合には、ステップ９３０において、状態グラフは同期する準備ができているかどうかが判断されてよい。そのような判断は、周期的に状態グラフを同期させることができる。準備ができている場合には、ステップ９３２において、状態グラフはマスタ状態グラフと同期してよく、方法はステップ９３５へ進んでよい。準備ができていない場合にも、方法はステップ９３５へ進んでよい。
【０１０３】
ステップ９３５において、ウェブアプリケーションのクローリングは、現在の状態において利用可能な起こり得る動作を最初に決定することによって、起こってよい。一実施形態において、そのような動作は、状態のＤＯＭ内に含まれる情報に基づいてよい。ステップ９４０において、起こり得る動作は、実行されていない動作のリストに加えられてよい。ステップ９４５において、実行されるべき動作が、実行されていない動作のリストから選択されてよい。如何なる適切な基本的なクローリング技術又は検索方法も、どの動作が実行されるべきかを選択するために使用されてよい。選択された動作は、ステップ９５０において、実行されていない動作のリストから削除され、ステップ９５５において、実行されてよい。ステップ９６０において、ステップ９５５を実行した結果が、新しい現在の状態として指定されてよい。ステップ９６５において、１又はそれ以上のジョブが、実行されていない動作のリストから生成されてよく、ステップ９７０において、新たなジョブが、新しいジョブのリストへ加えられてよい。そのような新しいジョブのリストは、リソースによる将来の実行のためにジョブキューへ同期中に送信されてよい。次いで、方法９００は、ステップ９１５へ戻ってよい。
【０１０４】
ステップ９７５において、状態グラフは、マスタ状態グラフと同期してよい。このステップは、ステップ９３２と同じようにして実施されてよい。ジョブの実行に関する他の情報が、マスタノード１１０へ送信されてよい。ステップ９８０において、現在のワーカノード１１２の利用可能性のインジケーションは、リソースキューにおいて登録されてよい。
【０１０５】
図１０は、インタラクティブ型クライアント−サーバ・アプリケーションの一部のクローリングにより生成される状態グラフをアプリケーションのマスタ状態グラフと同期させる方法１０００の実施例である。幾つかの実施形態では、方法１０００は、図９のステップ９３２及び９７５の一部又は全てを実施してよい。分散型コンピュータシステム１００の動作において上述された擬似コードは、方法１０００の一部又は全てを実施してよい。
【０１０６】
ステップ１００５において、マスタ状態グラフと同期すべき状態グラフは圧縮されてよい。グラフ内の夫々の状態は、ここで論じられるものを含む如何なる適切な方法によっても圧縮されてよい。状態グラフは、ジョブの実行による情報を含んでよく、ジョブは、クロールされるウェブアプリケーションの部分を示す。ステップ１０１０において、そのような圧縮の結果が記憶されてよい。結果は、状態グラフと、既に同期した前の状態グラフとの間の差を表してよい。ステップ１０１５において、圧縮された状態グラフ及び／又は新しいジョブのリストは、マスタノードへ送信されてよい。マスタノードは、マスタ状態グラフを制御してよく、且つ、それらの２つをマージするよう構成されてよい。ステップ１０２０において、状態グラフは、マスタノードと同期したとマークされてよい。そのようなマーキングは、ステップ１０１０の間の方法１０００の将来のインスタンスによって使用されてよい。ステップ１０２５において、新しいジョブのリストはクリアされてよい。
【０１０７】
図１１は、動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションのクローリングにおける状態情報の圧縮のための方法１１００の実施例である。分散型コンピュータシステム１００の動作において上述された擬似コードは、方法１１００の一部又は全てを実施してよい。
【０１０８】
ステップ１１０５において、アプリケーションは、状態グラフを生成するようクロールされてよい。状態グラフは、アプリケーションの動作を表してよい。代替的に、状態グラフは、受け取られ、あるいは、別なふうに決定されてよい。状態グラフにおける夫々の状態について、ステップ１１１５〜１１４５が行われてよい。
【０１０９】
ステップ１１１５において、所与の状態に関連する画面が決定されてよい。以降のステップは、そのような画面を圧縮しようと試みてよい。ステップ１１２０において、画面のモデルが決定されてよい。一実施形態において、そのようなモデルはＤＯＭモデルを含んでよい。ステップ１１２５において、その画面のための基準画面が決定されてよい。そのような基準画面は、所与の画面をもたらした動作が取られた前の画面を含んでよい。
【０１１０】
所与の画面は、そのモデルの一部として１又はそれ以上ノードを有してよい。そのようなノードの夫々について、ステップ１１３０において、ノードは初期化されてよい。そのような初期化は、ノードが変化しないとのインジケーションを設定することを含んでよい。基準画面と比較してノードの変化が見つかると、かかるインジケーションは、その後に変更されてよい。
【０１１１】
ステップ１１３５において、所与の画面と基準画面との間の差異がマークされてよい。かかる差違は、所与の画面の根本ノードから始まってマークされてよい。
【０１１２】
ステップ１１４０において、所与の画面と基準画面との間のそのようなマークされた変化は取り出されてよい。取り出されたマーク付きの変化は、所与の状態の圧縮されたものとして記憶されてよい。ステップ１１４５において、圧縮された状態が返されてよい。
【０１１３】
図１２は、画面と基準画面との間の変化にマークを付すための方法１２００の実施例である。分散型コンピュータシステム１００の動作において上述された擬似コードは、方法１２００の一部又は全てを実施してよい。幾つかの実施形態では、図１１のステップ１１３５の一部又は全てが、方法１２００によって実施されてよい。
【０１１４】
ステップ１２０５において、マークを付される画面のモデルにおける開始ノードが決定されてよい。そのような開始ノードは、マークを付される画面の根本ノード、又は方法１２００を呼び出すエンティティによって指定される他のノードであってよい。同様に、ステップ１２１０において、基準画面が決定されてよい。そのような基準画面は、方法１２００を呼び出すエンティティによって指定されてよい。
【０１１５】
ステップ１２１５において、ノードが基準画面に存在するかどうかが判断されてよい。存在する場合には、ノードの子が、子と基準画面との間の如何なる変化も決定するよう調査されてよい。存在しない場合には、ノードの子が、子と基準画面との間の如何なる変化も決定するよう調査されなくてよい。
【０１１６】
ノードが基準画面に存在する場合に、ステップ１２２０において、基準画面におけるノードの対が取得されてよい。ステップ１２２５において、対のノードの子の数が決定されてよく、同じように、ステップ１２３０において、現在のノードの子の数が決定されてよい。
【０１１７】
ステップ１２３５において、現在のノードが対のノードと同数以上の子を有するかどうかが判断されてよい。同数以上の子を有する場合には、ステップ１２４０において、ノード及び対のノードの属性が等しいか否かが判断されてよい。かかる属性は、ＤＯＭモデルの一部であってよい。属性が等しくない場合には、ステップ１２４５において、ノードは、変化したとマークされてよい。一実施形態において、ノード属性に関するインジケータは、変化したとマークされてよい。ステップ１２４７において、ノードの親が決定されてよく、その親ノードに関するインジケータは、親が変化した子ノードを有することを示すようマークされてよい。ステップ１２５０において、親ノードの子の夫々について、方法１２００は再帰的に呼び出されてよい。ノード及び対のノードの属性が等しい場合には、方法１２００は同様にステップ１２５０へ進んでよい。子ノードに対する再帰的な呼び出しが成された後、方法１２００はステップ１２６５へ進んでよい。
【０１１８】
現在のノードが対のノードと同数以上の子を有さない場合には、方法１２００はステップ１２５５へ進んでよい。ステップ１２５５において、ノードは変化したとマークされてよい。ステップ１２６０において、ノードの親が決定されてよく、その親ノードのインジケータは、親が変化した子ノードを有することを示すようマークされてよい。ステップ１２６０及び１２４７は、同じようにして実施されてよい。次いで、方法１２００はステップ１２６５へ進んでよい。
【０１１９】
ステップ１２６５において、ノードが何らかの変化した子ノードを有するかどうかが判断されてよい。そのような判断は、その旨の意味表示のためのノードのインジケーションを調べることによって、行われてよい。ノードは、そのようなものとして、ノードの子のための方法１２００の再帰的な呼び出しによりマークを付されており、ノードは、方法１２００の動作の間、変化した子を有するとしてマークを付されたノードを有してよい。ノードが何らかの変化した子ノードを有する場合には、ステップ１２７０において、ノードの親が決定されてよく、その親ノードに関するインジケータは、親が変化した子ノードを有することを示すようマークを付されてよい。ステップ１２７０、１２６０及び１２４７は、同じようにして実施されてよい。次いで、方法１２００はステップ１２７５へ進んでよく、ステップ１２７５において、方法１２００は終了してよい。
【０１２０】
図８〜１２は、例となる方法８００、９００、１０００、１１００及び１２００に対して取られるべき特定の数のステップを開示するが、方法８００、９００、１０００、１１００及び１２００は、図８〜１２で表されているよりも多い又は少ないステップを有して実行されてよい。更に、図８〜１２は、方法８００、９００、１０００、１１００及び１２００に対して取られるべき特定の順序のステップを開示するが、方法８００、９００、１０００、１１００及び１２００を有するステップは、如何なる適切な順序においても完了することができる。
【０１２１】
方法８００、９００、１０００、１１００及び１２００は、図１〜７のシステム、又は方法８００、９００、１０００、１１００及び１２００を実施するよう動作可能なその他のシステム、ネットワーク若しくは装置を用いて実施されてよい。ある実施形態では、方法８００、９００、１０００、１１００及び１２００は、コンピュータ可読媒体において具現されるソフトウェアにおいて部分的に又は完全に実施されてよい。
【０１２２】
本開示のために、コンピュータ可読媒体は、一時期にデータ及び／又は命令を保持する如何なる手段又は手段の集合も含んでよい。コンピュータ可読媒体は、制限なしに、直接アクセス記憶装置（例えば、ハードディスクドライブ又はフロッピーディスク（登録商標））、連続アクセス記憶装置（例えば、テープディスクドライブ）、コンパクトディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ランダムアクセスメモリ（ＲＡＭ）、読出専用メモリ（ＲＯＭ）、電気的消去可能プログラマブル読出専用メモリ（ＥＥＰＲＯＭ）、及び／又はフラッシュメモリ、並びに、配線、光ファイバ、及び他の有形な持続性媒体、更には、それらの組み合わせ等の記憶媒体を含んでよい。
【０１２３】
本開示は詳細に記載されてきたが、当然に、様々な変更、置換及び代替が、本開示の精神及び適用範囲から逸脱することなく、上記の実施形態に対して行われてよい。
【０１２４】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
状態グラフを同期させる方法であって、
前の送信のときからインタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって生成し、
前記部分状態グラフを第１の電子装置から第２の電子装置へ送信し、
前記部分状態グラフを周期的に送信する、
方法。
（付記２）
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、前記第１の電子装置の観点から未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有し、
当該方法は、更に、前記１又はそれ以上の新たなジョブの識別をジョブデータ構造に付加し、該ジョブデータ構造は、クロールされる前記インタラクティブ型クライアント−サーバ・アプリケーションの部分のインジケーションを含む、
付記１に記載の方法。
（付記３）
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
付記１に記載の方法。
（付記４）
更に、複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択し、前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、
付記１に記載の方法。
（付記５）
更に、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を受け取り、
前記１又はそれ以上の新たな状態をマスタ状態グラフに加える、
付記１に記載の方法。
（付記６）
更に、１又はそれ以上の重複状態を削除し、該重複状態は、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの前記１又はそれ以上の新たな状態及びマスタ状態グラフの両方に存在する状態を有する、
付記５に記載の方法。
（付記７）
更に、前記ジョブデータ構造内の既存のジョブとは同値である前記新たなジョブの１つを削除する、
付記２に記載の方法。
（付記８）
前記部分状態グラフを前記第１の電子装置から受け取り、
第３の電子装置に割り当てられた前のジョブの結果を前記部分状態グラフが有すると決定し、
前記前のジョブの実行を終了するよう前記第３の電子装置に指示する終了信号を前記第３の電子装置へ送信する、
付記１に記載の方法。
（付記９）
コンピュータ可読媒体と、
前記コンピュータ可読媒体に坦持されるコンピュータ実行可能な命令と
を有し、
前記命令は、プロセッサによって読出可能であり、読み出されて実行される場合に、前記プロセッサに、
前の送信のときからインタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによって生成させ、
前記部分状態グラフを第１の電子装置から第２の電子装置へ送信させ、
前記部分状態グラフを周期的に送信させる、製品。
（付記１０）
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、前記第１の電子装置の観点から未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有し、
前記プロセッサは、前記１又はそれ以上の新たなジョブの識別をジョブデータ構造に付加するよう構成され、該ジョブデータ構造は、クロールされる前記インタラクティブ型クライアント−サーバ・アプリケーションの部分のインジケーションを含む、
付記９に記載の製品。
（付記１１）
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
付記９に記載の製品。
（付記１２）
前記プロセッサは、更に、複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択し、前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、
付記９に記載の製品。
（付記１３）
前記プロセッサは、更に、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を受け取り、
前記１又はそれ以上の新たな状態をマスタ状態グラフに加える、
付記９に記載の製品。
（付記１４）
前記プロセッサは、更に、１又はそれ以上の重複状態を削除し、該重複状態は、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの前記１又はそれ以上の新たな状態及びマスタ状態グラフの両方に存在する状態を有する、
付記１３に記載の製品。
（付記１５）
前記プロセッサは、更に、前記ジョブデータ構造内の既存のジョブとは同値である前記新たなジョブの１つを削除する、
付記１４に記載の製品。
（付記１６）
前記プロセッサは、更に、
前記部分状態グラフを前記第１の電子装置から受け取り、
第３の電子装置に割り当てられた前のジョブの結果を前記部分状態グラフが有すると決定し、
前記前のジョブの実行を終了するよう前記第３の電子装置に指示する終了信号を前記第３の電子装置へ送信する、
付記９に記載の製品。
（付記１７）
インタラクティブ型クライアント−サーバ・アプリケーションの一部を示す部分状態グラフを有するメモリと、
前記メモリへ結合されるプロセッサと
を有し、
前記プロセッサは、
前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された該インタラクティブ型クライアント−サーバ・アプリケーションの１又はそれ以上の新たな状態を含む前記部分状態グラフを、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするようクローリングタスクを実行することによってポピュレートし、
前記部分状態グラフを他の電子装置へ送信し、
前記部分状態グラフを周期的に送信するよう構成される、
電子装置。
（付記１８）
前記部分状態グラフは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールのクローリングの間に識別された１又はそれ以上の新たなジョブを含み、該１又はそれ以上の新たなジョブは、未だクロールされていない前記インタラクティブ型クライアント−サーバ・アプリケーションの部分の識別を有する、
付記１７に記載の電子装置。
（付記１９）
前記部分状態グラフは、前の送信のときから前記インタラクティブ型クライアント−サーバ・アプリケーションのクローリングの間に識別された状態間の１又はそれ以上の遷移を含む、
付記１７に記載の電子装置。
（付記２０）
前記プロセッサは、更に、複数のタイミング選択肢から選択される前記部分状態グラフの送信タイミングを選択するよう構成され、前記タイミング選択肢は、
周期的に前記部分状態グラフを送信し続けることと、
周期的に前記部分状態グラフを送信するのを止めて、代わりに、クローリングジョブの完了時に前記部分状態グラフを送信することと
を有する、
付記１７に記載の電子装置。
【符号の説明】
【０１２５】
１００                  分散型コンピュータシステム
１０４                  ウェブアプリケーション
１０６                  分散コンピュータ環境
１１０                  マスタノード
１１２                  ワーカノード
２０６，２１０          メモリ
２０８，２１２          プロセッサ
２１８                  ワーカクローラアプリケーション
２２０                  マスタクローラアプリケーション
２２２，２２４          データ
２２６，２２８          ブラウザアプリケーション
２３２                  ジョブキュー
２３４                  リソースキュー
２３６                  マスタ状態グラフ
４０２                  遷移グラフモデル
５００                  動的ウェブアプリケーション
Ｓ１，Ｓ２，Ｓ３，Ｓ４  状態
【図１】
0005742666.tif 000007
【図２】
0005742666.tif 000008
【図３】
0005742666.tif 000009
【図４】
0005742666.tif 000010
【図５】
0005742666.tif 000011
【図６ａ】
0005742666.tif 000012
【図６ｂ】
0005742666.tif 000013
【図６ｃ】
0005742666.tif 000014
【図７】
0005742666.tif 000015
【図８ａ】
0005742666.tif 000016
【図８ｂ】
0005742666.tif 000017
【図９】
0005742666.tif 000018
【図１０】
0005742666.tif 000019
【図１１】
0005742666.tif 000020
【図１２】
0005742666.tif 000021