(57)【要約】  異なるソース言語で記述された複数のプログラムのうちのいずれかに現われ得る、変数間の依存性情報を生成するように構成された少なくとも１つのコンピュータハードウェアプロセッサを備えるデータ処理システムのための依存性アナライザ。データ処理システムは、モジュールが記述された言語に関係なく、各プログラムを解析することができる。各プログラムに関する解析情報は、第１のタイプのデータ構造に記録することができ、次いで、変数間の依存性を表すフォーマットに変換され得る。複数のプログラムのそれぞれの依存性情報は、データ処理システムの依存性情報を生成するために一緒に処理され得る、言語に依存しない構成要素の組み合わせとして表現されてもよい。依存性情報は、依存性データ構造に記録されてもよく、データ処理プログラムのデータ品質チェック及び変更制御などの動作に更に使用することができる。
2020522790.tif 000002
【特許請求の範囲】
【請求項１】
フィールドを含む複数のレコードにアクセスする複数のコンピュータプログラミング言語のうちのいずれかでプログラムを実行するように構成されたデータ処理システムで使用するための依存性アナライザであって、前記複数のコンピュータプログラミング言語におけるプログラムの依存性分析のために構成されており、前記依存性分析が、前記複数のコンピュータプログラミング言語におけるプログラムにわたってフィールドレベルリネージに関連する依存性情報を計算することを含み、前記依存性アナライザが、
前記データ処理システムを制御する複数のプログラムを処理するように構成されたフロントエンドであって、前記複数のプログラムが、前記複数のプログラミング言語のうちの複数のプログラミング言語で記述されており、前記フロントエンドが、各フロントエンドモジュールが、前記複数のプログラミング言語のうちのプログラミング言語で記述された前記複数のプログラムのコンピュータプログラムを入力として受信し、且つ、前記プログラム内で作成された前記複数のレコードのフィールドへの依存性を表す、言語に依存しないデータ構造を出力するように構成されている、複数のフロントエンドモジュールを備え、前記言語に依存しないデータ構造が、１つ以上の依存性構成要素から構成され、各依存性構成要素が、少なくとも１つのフィールドの指示と、前記少なくとも１つのフィールドに関連する依存性とを含む、フロントエンドと、
前記複数のフロントエンドモジュールから言語に依存しないデータ構造を受信し、且つ、前記複数のプログラム内で作成された依存性を表す前記データ処理システムの依存性情報を出力するように構成されたバックエンドであって、前記依存性情報が前記複数のプログラムにわたるフィールドレベルリネージを含むように、前記依存性情報が、前記複数のプログラムのうちの複数のプログラムに導入されたフィールドレベル依存性を含む、バックエンドと、備える、依存性アナライザ。
【請求項２】
前記フロントエンドモジュールは、入力プログラムを解析することにより解析ツリーを生成し、且つ、依存性構成要素のセットからの構成要素を用いて依存性を作成する前記解析ツリー内の動作を表すことで前記解析ツリーを下位にすることによって、言語に依存しないデータ構造を生成するように構成された、請求項１に記載の依存性アナライザ。
【請求項３】
前記依存性情報は、データフロー依存性を表す、請求項２に記載の依存性アナライザ。
【請求項４】
前記依存性情報は、制御フロー依存性を表す、請求項２に記載の依存性アナライザ。
【請求項５】
前記依存性情報をメタデータリポジトリにロードするように構成された第１のツールと、
前記データ処理システムによって使用されるフィールドの指示を入力として受信し、前記メタデータリポジトリにアクセスし、前記指示されたフィールドに影響を与える依存性を導入する前記複数のプログラムのうちのプログラムの指示を出力する、ように構成された第２のツールと、を更に備える、請求項１に記載の依存性アナライザ。
【請求項６】
前記データ処理システムは、複数のデータソースを更に含み、
前記複数のプログラムは、前記複数のデータソース内のデータに変換を実行するように構成されており、
前記複数のデータソースは異種である、請求項１に記載の依存性アナライザ。
【請求項７】
前記複数のデータソースは、ＯＲＡＣＬＥデータベース若しくはＳＡＰデータベース、又はＨＡＤＯＯＰ分散ファイルシステムに保存されているデータセット、のうちの少なくとも１つであるデータソースを備える、請求項６に記載の依存性アナライザ。
【請求項８】
データ処理システムで使用するための依存性アナライザであって、
少なくとも１つのコンピュータハードウェアプロセッサと、
プロセッサ実行可能命令を保存する少なくとも１つの非一時的コンピュータ可読記憶媒体であって、前記少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、
前記データ処理システムが実行するように構成された複数のプログラムのそれぞれに対して、前記プログラムの解析に基づいて、前記プログラム内の動作を反映する第１のデータ構造を構築させ、
複数の前記第１のデータ構造のそれぞれに対して、
依存性に影響を与えない動作が選択されないように、１つ以上のデータ要素への依存性に影響を与える前記第１のデータ構造に反映される動作を選択させ、
選択された各動作に対して、依存性構成要素のセットからの依存性構成要素を記録することによって、前記選択された動作の指示を第２のデータ構造に記録させ、前記複数のプログラムのそれぞれに対する前記依存性構成要素のセットが、前記プログラムが記述されている言語に依存しておらず、
前記複数の第２のデータ構造を処理させ、前記処理が、データ要素に対する制御フロー又はデータフロー依存性を識別することを含み、前記依存性が、前記複数のプログラムのうちのいずれかの実行中に生じ得る依存性であり、
前記識別された依存性を依存性データ構造に記録させ、前記依存性データ構造が、前記データ要素間の依存性を示すように構成された前記複数のプログラム内のデータ要素を示すデータを含む、依存性アナライザ。
【請求項９】
前記依存性は、制御フロー依存性とデータフロー依存性とを含む、請求項８に記載の依存性アナライザ。
【請求項１０】
前記依存性は、データフロー依存性を含む、請求項８に記載の依存性アナライザ。
【請求項１１】
前記データ処理システムは、複数の、言語に依存するパーサを備え、
前記第１のデータ構造を構築することが、前記複数のプログラムのそれぞれに対して、前記プログラムが記述されている言語に基づいて言語に依存するパーサを選択することを含む、請求項８に記載の依存性アナライザ。
【請求項１２】
前記複数のプログラムは、複数のソース言語で記述されている、請求項１１に記載の依存性アナライザ。
【請求項１３】
前記ソース言語にはＳＱＬが含まれる、請求項１２に記載の依存性アナライザ。
【請求項１４】
前記ソース言語には、データフローグラフを表すグラフィカルプログラミング言語が含まれる、請求項１２に記載の依存性アナライザ。
【請求項１５】
前記ソース言語には、ＳＱＬ、及びデータフローグラフを表すグラフィカルプログラミング言語が含まれる、請求項１２に記載の依存性アナライザ。
【請求項１６】
前記データ処理システムは、制御フロー又はデータフロー依存性に影響を与える動作の指示を、前記第１のデータ構造から抽出するための複数の、言語に依存するツールを備え、
前記第１のデータ構造から抽出することが、前記複数の第１のデータ構造のそれぞれに対して、前記第１のデータ構造を構築するために解析されたプログラムが記述されている言語に基づいて、制御フロー又はデータフロー依存性に影響を与える動作の指示を抽出するために言語に依存するツールを選択することを含む、請求項１１に記載の依存性アナライザ。
【請求項１７】
前記複数の構築された第１のデータ構造のそれぞれに対して、選択された動作の指示を前記第２のデータ構造に記録することは、構成要素のセットからの構成要素を記録することを含む、請求項８に記載の依存性アナライザ。
【請求項１８】
前記構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フロー、及び「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローを表す構成要素のうちの２つ以上で構成される、請求項１７に記載の依存性アナライザ。
【請求項１９】
前記構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フロー、及び「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローを表す構成要素で本質的に構成される、請求項１７に記載の依存性アナライザ。
【請求項２０】
前記依存性データ構造にアクセスし、ユーザインタフェースを介して、データ要素に依存するデータエンティティ又はコードブロックに関する情報を提示する、少なくとも１つのツールを更に備える、請求項９に記載の依存性アナライザ。
【請求項２１】
前記データ処理システムは、複数のデータソースを更に含み、
前記複数のプログラムは、前記複数のデータソース内のデータに変換を実行するように構成されており、
前記複数のデータソースは異種である、請求項９に記載の依存性アナライザ。
【請求項２２】
前記複数のデータソースは、ＯＲＡＣＬＥデータベース若しくはＳＡＰデータベース、又はＨＡＤＯＯＰ分散ファイルシステムに保存されているデータセット、のうちの少なくとも１つであるデータソースを備える、請求項２１に記載の依存性アナライザ。
【請求項２３】
データ処理システムで使用するように構成された依存性アナライザの動作方法であって、
前記データ処理システム内で実行し、且つ、プログラミング言語でのデータ処理動作を指定するように構成された複数のプログラムを実行する少なくとも１つのコンピュータハードウェアプロセッサを使用することであって、前記複数のプログラムが複数のプログラミング言語を使用する、ことと、
前記プログラムを解析することによって、前記複数のプログラムのそれぞれの第１のデータ構造を構築することと、
複数の前記第１のデータ構造のそれぞれに対して、
１つ以上のデータ要素への依存性に影響を与える前記第１のデータ構造に反映される動作を選択することと、
選択された各動作に対して、前記選択された動作の指示を第２のデータ構造に記録することであって、前記指示が、全ての前記第２データ構造に共通する依存性構成要素のセットを使用して前記第２データ構造に記録される、ことと、
前記第２のデータ構造を処理することであって、前記処理が、前記複数のプログラムのうちのいずれかの実行中に生じ得るデータ要素に対する制御フロー又はデータフロー依存性を識別することを含む、ことと、
前記特定された依存性を依存性データ構造に記録することと、を含む、方法。
【請求項２４】
前記依存性は、データフローの依存性である、請求項２３に記載の方法。
【請求項２５】
前記依存性は、制御フロー依存性とデータフロー依存性とを含む、請求項２３に記載の方法。
【請求項２６】
前記複数のプログラムのそれぞれの第１のデータ構造を構築することは、前記複数のプログラムが記述されている言語に基づいて前記複数のプログラムのパーサを選択することを含む、請求項２３に記載の方法。
【請求項２７】
前記複数のプログラムは、ＳＱＬ、及びデータフローグラフを表すグラフィカルプログラミング言語を含む複数のソース言語で記述されており、
パーサを選択することは、前記複数のソース言語のそれぞれに対してパーサを選択することを含む、請求項２３に記載の方法。
【請求項２８】
前記第２のデータ構造に記録することは、前記複数のソース言語のうちのそれぞれで記述されたプログラムの前記依存性構成要素のセットから第２のデータ構成要素を構築することを含む、請求項２７に記載の方法。
【請求項２９】
前記第１のデータ構造は言語に依存し、
前記第２のデータ構造は言語に依存しない、請求項２３に記載の方法。
【請求項３０】
前記選択された動作の指示を前記第２のデータ構造に記録することは、制御フロー又はデータフロー依存性に影響を与えない、前記第１データ構造内の動作に関する情報が前記第２データ構造から省略されるように、制御フロー又はデータフロー依存性に影響を与える動作の指示を前記第１のデータ構造から抽出することを含む、請求項２３に記載の方法。
【請求項３１】
前記データ処理システムは、制御フロー又はデータフロー依存性に影響を与える動作の指示を前記第１のデータ構造から抽出するための複数の、言語に依存するツールを備え、
制御フロー又はデータフロー依存性に影響を与える動作の指示を前記第１のデータ構造から抽出することは、前記複数の第１のデータ構造のそれぞれに対して、前記第１のデータ構造を構築するために解析されたプログラムが記述されている言語に基づいて、制御フロー又はデータフロー依存性に影響を与える動作の指示を抽出するために言語に依存するツールを選択することを含む、請求項３０に記載の方法。
【請求項３２】
前記依存性構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フロー、及び「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローを表す構成要素のうちの２つ以上で構成される、請求項２３に記載の方法。
【請求項３３】
データ処理システムと共に使用するための依存性アナライザの動作方法であって、
前記データ処理システム内でプログラミング言語でのデータ処理動作を指定する複数のプログラムを実行する少なくとも１つのコンピュータハードウェアプロセッサを使用することであって、前記複数のプログラムが複数のプログラミング言語を使用する、ことと、
前記プログラムを解析することによって、前記複数のプログラムのそれぞれの第１のデータ構造を構築することと、
複数の前記第１のデータ構造のそれぞれに対して、１つ以上のデータ要素への制御フロー依存性に影響を与える前記第１のデータ構造に反映される動作を選択することと、
選択された各動作に対して、前記選択された動作の指示を第２のデータ構造に記録することであって、前記指示が、全ての前記第２データ構造に共通する依存性構成要素のセットを使用して前記第２データ構造に記録される、ことと、
前記第２のデータ構造を処理することであって、前記処理が、前記複数のプログラムのうちのいずれかにおける処理の結果としてデータ要素への依存性を識別することを含む、ことと、
前記特定された依存性を依存性データ構造に記録することと、を含む、方法。
【請求項３４】
前記依存性構成要素のセットは、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フローで構成される、請求項３３に記載の方法。
【請求項３５】
前記依存性構成要素のセットは、「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローで構成される、請求項３３に記載の方法。
【請求項３６】
前記複数の前記構築された第１のデータ構造のそれぞれに対して、データフロー依存性を生成する前記第１のデータ構造内の動作の指示を前記第２のデータ構造に選択的に記録することであって、前記指示が、全ての前記第２のデータ構造に共通する依存性構成要素のセットを使用して前記第２のデータ構造に記録される、ことを更に含む、請求項３３に記載の方法。
【請求項３７】
プロセッサ実行可能命令を保存する少なくとも１つの非一時的コンピュータ可読記憶媒体であって、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、それぞれのプログラミング言語でのデータ処理動作を指定する、複数のプログラミング言語を使用する複数のプログラムに対して、方法を実行させ、前記方法が、
前記プログラムを解析することによって、前記複数のプログラムのそれぞれの第１のデータ構造を構築することと、
前記構築された複数の第１のデータ構造のそれぞれに対して、
１つ以上のデータ要素に対する制御フロー又はデータフロー依存性に影響を与える、前記第１のデータ構造に反映される動作を前記第１のデータ構造から抽出することと、
前記抽出された動作の指示を第２のデータ構造に記録することであって、前記抽出された動作の前記指示が、全ての前記第２のデータ構造に共通する依存性構成要素のセットを使用して前記第２のデータ構造に記録される、ことと、
前記第２のデータ構造を処理することであって、前記処理が、前記複数のプログラムのうちのいずれかにおける処理の結果としてデータ要素への依存性を識別することを含む、ことと、
前記特定された依存性を依存性データ構造に記録することと、を含む、少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項３８】
前記複数のプログラムのそれぞれの第１のデータ構造を構築することは、前記複数のプログラムが記述されている言語に基づいて前記複数のプログラムのパーサを選択することを含む、請求項３７に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項３９】
前記複数のプログラムは、ＳＱＬ、及びデータフローグラフを表すグラフィカルプログラミング言語を含む複数のソース言語で記述されており、
パーサを選択することは、前記複数のソース言語のそれぞれに対してパーサを選択することを含む、請求項３８に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４０】
前記複数の前記構築された第１のデータ構造のそれぞれにおいて動作の指示を抽出することは、前記複数のソース言語のそれぞれで記述されたプログラムの前記依存性構成要素のセットから第２のデータ構造を構築することを含む、請求項３９に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４１】
前記第１のデータ構造は言語に依存し、
前記第２のデータ構造は言語に依存しない、請求項３７に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４２】
前記第１のデータ構造において動作の指示を抽出することは、依存性に影響を与えない前記第１のデータ構造内の動作に関する情報が前記第２のデータ構造から省略されるように、依存性に影響を与える前記第１のデータ構造内の動作の指示を前記第２のデータ構造に選択的に記録することを含む、請求項３７に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４３】
前記データ処理システムは、前記第１のデータ構造を下位にするための複数の、言語に依存するツールを備え、
前記第１のデータ構造において動作の指示を抽出することは、前記複数の第１のデータ構造のそれぞれに対して、前記第１のデータ構造を構築するために解析されたプログラムが記述されている言語に基づいて、前記第１のデータ構造における動作の指示を抽出するための言語に依存するツールを選択することを含む、請求項３７に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４４】
前記依存性構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フロー、及び「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローを表す構成要素のうちの２つ以上で構成される、請求項３７に記載の少なくとも１つの非一時的コンピュータ可読記憶媒体。
【請求項４５】
データ処理システムで使用するための依存性アナライザであって、
複数のプログラムのそれぞれを表す第１のデータ構造を構築するための手段であって、前記第１のデータ構造が前記複数のプログラムのそれぞれのプログラムにおける動作を反映する、手段と、
依存性に影響を及ぼさない前記複数の前記構築された第１のデータ構造のそれぞれにおける動作に関する情報が前記第２のデータ構造から省略されるように、制御フロー又はデータフロー依存性に影響を与える前記第１のデータ構造における動作の指示を第２のデータ構造に記録するための手段と、
前記第２のデータ構造を処理して、前記複数のプログラムのうちのいずれかにおける動作の実行の結果としてデータ要素に対する制御フロー又はデータフロー依存性を識別するための手段と、
前記識別された依存性を依存性データ構造に記録するための手段と、を備える、依存性アナライザ。
【発明の詳細な説明】
【背景技術】
【０００１】
多くの場合、大量のデータは、データ処理システムによって管理される。データ処理システムは、１つ以上のデータソースに結合された１つ以上のコンピュータ上に実装されてもよい。コンピュータは、ソフトウェアプログラムを使用することにより、特定のデータ処理動作を実行するように構成できる。それらのソフトウェアプログラムは、複数のプログラミング言語で記述された異種のものである場合がある。
【０００２】
一例として、大学では、クラスをリクエストする学生からの入力データとしてデータを受信するデータ処理システムで学生登録を処理する場合がある。そのデータには、学生の名前又は識別番号、コースのタイトル又は番号、教授、及び学生又はコースに関するその他の情報が含まれ得る。処理システムは、登録された各学生に関する情報を含むデータストアなどの様々なデータソースにアクセスすることにより、各リクエストを処理するようにプログラムできる。データ処理システムは、このデータストアにアクセスして、クラスへの登録リクエストが学費納入済みの学生によって行われたことを判定することができる。別のデータストアには、必修クラスを含む、クラスに関する情報が含まれていてもよい。データ処理システムは、クラスをリクエストしている学生がすでに完了したクラスを示す別のデータストアからのデータと組み合わせてこのデータにアクセスし、学生がリクエストされたクラスに登録する資格があるかどうかを判定することができる。
【０００３】
プログラムに従ってアクセスされたデータを処理することにより、データ処理システムは、学生がリクエストされたクラスに登録されていること、及びクラス名簿にその学生が含まれていることを示すデータを生成することができる。データ処理システムがクラス登録リクエストの処理を完了すると、データ処理システムは、多くのデータソースにアクセスでき、複数のデータストアのデータを入力又は変更することができる。
【０００４】
同様のパターンは他の多くの重要なアプリケーションにおいて発生し、データ処理システムが複数のデータソースにアクセスし、データソースからアクセスしたデータに基づいて、又は他の変数の値に基づいて、他のデータストアに保存された値を生成又は変更する。従って、変数の他の値がデータソースからアクセスされるか、又はデータ処理システム内に存在するかにかかわらず、変数の多くの値が、他の変数の値に依存し得る。
【０００５】
多くの場合、データ処理システムが生成又は変更したデータ要素に関する依存性情報を、データ処理システムが提供することが有益である。米国マサチューセッツ州レキシントンのＡｂ  Ｉｎｉｔｉｏは、協調システム上で実行するために作成されたプログラムに基づいて依存性情報を提供する「協調システム」を提供する。協調システムは、オペレータ、及びオペレータ間のデータフローとして表される、データフローグラフとして表現されるプログラムを実行する。ツールは、１つ以上の他の変数の値に基づいて変数の値が設定されている演算子を識別することにより、グラフを分析し、変数間の依存性を判定できる。オペレータにフローをトレースバックすることにより、ツールは、オペレータへの変数入力が次に依存する他の変数を識別できる。グラフによってトレースすることにより、ツールは、直接的又は間接を問わず、任意の変数に対する全ての依存性を識別できる。
【０００６】
この依存性情報はメタデータストアに入力でき、そこからグラフに関係する多くの機能に使用することができる。例えば、予期しない値のパターンを有する変数を識別するために、データ品質ルールを適用してもよい。これらの変数、及びそれらの変数に依存性を有するグラフ内の任意の変数は、疑わしいものとしてフラグ付けされてもよい。別の例として、グラフの一部を変更して、新しい機能を提供したり、エラーを修正したり、又はもはや所望しない機能を除外したりする必要がある場合、その処理で生成又は変更された変数によって、依存するグラフの他の部分を容易に識別することができる。変更に続いて、グラフ中の他の部分で行われた変更によって機能が損なわれないことを確実にするように、グラフのそれらの部分を精査することができる。
【０００７】
場合によっては、データ処理システムは、グラフの代わりに、又はグラフに加えて、他のプログラミング言語を使用することができる。例えば、データソースは、ＳＱＬ、又はデータベースのサプライヤによって定義されたプログラミング言語でプログラムされたデータベースであり得、ユーザはそのデータベースに対して実行されるクエリをプログラムすることが可能になる。大企業で実装され得るデータ処理システムでは、グラフィカルプログラミング言語の代わりに、又はそれに加えて、複数の言語で記述された複数のプログラムが存在する場合がある。グラフとして表現されたプログラム上で動作する依存性分析ツールは、他の言語で記述されたこれらのプログラムを処理しない。その結果、データ処理システム全体の依存性情報が不完全であり得るか、又は生成に多大な労力が必要になり得る。
【発明の概要】
【課題を解決するための手段】
【０００８】
幾つかの実施形態は、フィールドを含む複数のレコードにアクセスする複数のコンピュータプログラミング言語のうちのいずれかでプログラムを実行するように構成されたデータ処理システムで使用するための依存性アナライザを提供する。依存性アナライザは、複数のコンピュータプログラミング言語におけるプログラムの依存性分析のために構成されてもよく、依存性分析は、複数のコンピュータ言語におけるコンピュータプログラムにわたるフィールドレベルリネージに関する依存性情報の計算を含んでもよい。依存性アナライザは、データ処理システムを制御する複数のプログラムを処理するように構成されたフロントエンドを備えてもよい。複数のプログラムは、複数のプログラミング言語のうちの複数のプログラミング言語で記述されてもよい。フロントエンドは、複数のフロントエンドモジュールを備えてもよく、各フロントエンドモジュールは、複数のプログラミング言語のプログラミング言語で記述された複数のプログラムのコンピュータプログラムを入力として受信し、且つ、プログラム内で作成されたデータ処理システムのフィールドへの依存性を表す、言語に依存しないデータ構造を出力するように構成されており、当該言語に依存しないデータ構造は、１つ以上の依存性構成要素から構成され、各依存性構成要素は、少なくとも１つのフィールドの指示と、少なくとも１つのフィールドに関連する依存性と、を含む。データアナライザはまた、複数のフロントエンドモジュールから言語に依存しないデータ構造を受信し、且つ、複数のプログラム内で作成された依存性を表すデータ処理システムの依存性情報を出力するように構成されたバックエンドを備えてもよい。依存性情報が複数のプログラムにわたるフィールドレベルリネージを含むように、依存性情報は、複数のプログラムのうちの複数のプログラムに導入されたフィールドレベル依存性を含み得る。
【０００９】
幾つかの実施形態は、少なくとも１つのコンピュータハードウェアプロセッサと、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、データ処理システムが実行するように構成された複数のプログラムのそれぞれに対して、プログラムの解析に基づいて、プログラム内の動作を反映する第１のデータ構造を構築することを含むアクトを少なくとも１つのコンピュータハードウェアプロセッサに実行させる、プロセッサ実行可能命令を保存する少なくとも１つの非一時的コンピュータ可読記憶媒体と、を備えるデータ処理システムで使用する依存性アナライザを提供する。複数の第１のデータ構造のそれぞれに対して、依存性に影響を与えない動作が選択されないように、１つ以上のデータ要素への依存性に影響を与える第１のデータ構造に反映される動作が選択されてもよい。選択されたそれぞれの動作に対して、依存性構成要素のセットから依存性構成要素を記録することによって、選択された動作の指示を、第２のデータ構造に記録することができる。複数のプログラムのそれぞれに対する依存性構成要素のセットは、プログラムが記述されている言語に依存しなくてもよい。複数の第２のデータ構造が処理されてもよい。その処理は、データ要素に対する制御フロー又はデータフロー依存性を識別することを含むことができ、当該依存性は、複数のプログラムのうちのいずれかの実行中に生じ得るものである。依存性データ構造内の識別された依存性が処理されてもよく、依存性データ構造は、データ要素間の依存性を示すように構成された複数のプログラム内のデータ要素を示すデータを含んでもよい。
【００１０】
幾つかの実施形態は、データ処理システムで使用するように構成された依存性アナライザの動作方法を提供し、データ処理システム内で実行し、且つ、プログラミング言語でのデータ処理動作を指定するように構成された複数のプログラムを実行する少なくとも１つのコンピュータハードウェアプロセッサを使用することであって、複数のプログラムが複数のプログラミング言語を使用する、ことと、プログラムを解析することによって、複数のプログラムのそれぞれの第１のデータ構造を構築することと、を含む。複数の第１のデータ構造のそれぞれに対して、方法は、１つ以上のデータ要素への依存性に影響を与える第１のデータ構造に反映される動作を選択することと、選択された各動作に対して、選択された動作の指示を第２のデータ構造に記録することであって、指示が、全ての第２のデータ構造に共通する依存性構成要素のセットを使用して第２のデータ構造に記録される、ことと、を含むことができる。第２のデータ構造を処理することができ、処理は、複数のプログラムのうちのいずれかの実行中に生じ得る、データ要素に対する制御フロー又はデータフロー依存性を識別することを含む。識別された依存性は、依存性データ構造に記録することができる。
【００１１】
幾つかの実施形態は、データ処理システムと共に使用するための依存性アナライザの動作方法を提供することができ、方法は、データ処理システム内でプログラミング言語でのデータ処理動作を指定する複数のプログラムを実行する少なくとも１つのコンピュータハードウェアプロセッサを使用することであって、複数のプログラムが複数のプログラミング言語を使用する、ことと、プログラムを解析することによって、複数のプログラムのそれぞれの第１のデータ構造を構築することと、を含む。複数の第１のデータ構造のそれぞれに対して、方法は、１つ以上のデータ要素への制御フロー依存性に影響を与える第１のデータ構造に反映される動作を選択することを含んでもよい。選択された各動作に対して、選択された動作の指示は、第２のデータ構造に記録されてもよく、指示は、全ての第２のデータ構造に共通する依存性構成要素のセットを使用して第２のデータ構造に記録される。第２のデータ構造を処理することができ、処理は、複数のプログラムのいずれかにおける処理の結果として、データ要素への依存性を識別することを含む。依存性データ構造内の識別された依存性。
【００１２】
また更なる実施形態は、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、それぞれのプログラミング言語でのデータ処理動作を指定する複数のプログラムに対してアクトを実行させ、ここで複数のプログラムが複数のプログラミング言語を使用する、プロセッサ実行可能命令を保存する少なくとも１つの非一時的コンピュータ可読記憶媒体を提供することができる。アクトは、プログラムを解析することによって、複数のプログラムのそれぞれの第１のデータ構造を構築することを含む。複数の構築された第１のデータ構造のそれぞれに対して、１つ以上のデータ要素への制御フロー又はデータフロー依存性に影響を与える第１のデータ構造に反映される動作を第１のデータ構造から抽出でき、抽出した動作を第２のデータ構造に記録することができ、抽出された動作の指示が、全ての第２のデータ構造に共通する依存性構成要素のセットを使用して第２のデータ構造に記録される。第２のデータ構造を処理することができ、処理は、複数のプログラムのいずれかにおける処理の結果として、データ要素への依存性を識別することを含む。識別された依存性は、依存性データ構造に記録され得る。
【００１３】
更に他の実施形態は、データ処理システムで使用するための依存性アナライザを提供することができ、依存性アナライザは、複数のプログラムのそれぞれを表す第１のデータ構造を構築するための手段であって、第１のデータ構造が複数のプログラムのそれぞれのプログラムにおける動作を反映する、手段と、依存性に影響を与えない、複数の構築された第１のデータ構造のそれぞれにおける動作に関する情報が第２のデータ構造から省略されるように、制御フロー又はデータフロー依存性に影響を与える第１のデータ構造における動作の指示を第２のデータ構造に記録するための手段と、第２のデータ構造を処理して、複数のプログラムのいずれかにおける動作の実行の結果としてデータ要素に対する制御フロー又はデータフロー依存性を識別するための手段と、識別された依存性を依存性データ構造に記録するための手段と、を備える。
【００１４】
上記は、添付の特許請求の範囲によって定義される本発明の非限定的概要である。
【００１５】
以下の図面を参照して、様々な態様及び実施形態を説明する。これらの図面は、必ずしも一定の縮尺で描かれていないことが理解されるものとする。複数の図面に現れるアイテムは、それらが現れる全ての図面において、同じ又は類似の参照番号で示される。
【図面の簡単な説明】
【００１６】
【図１Ａ】図１Ａは、本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境のブロック図である。
【図１Ｂ】図１Ｂは、依存性情報を計算する処理の機能ブロック図である。
【図２】図２は、本明細書に記載の技術の幾つかの実施形態に係る、例示的な導出データリネージの例示的なグラフィカル表現である。
【図３Ａ】図３Ａは、依存性メタデータ構造を生成する、言語に依存するフロントエンド処理の機能ブロック図である。
【図３Ｂ】図３Ｂは、コンピューティングプログラムの一部の概念スケッチである。
【図３Ｃ】図３Ｃは、解析ツリーとしての、図３Ｂのプログラムの一部の表現の概念スケッチである。
【図３Ｄ】図３Ｄは、解析ツリーから抽出された依存性情報の概念スケッチである。
【図４】図４は、依存性メタデータ構造を生成する、言語に依存しないバックエンド処理の機能ブロック図である。
【図５】図５は、本明細書に記載の技術に係る、依存性メタデータ構造を生成する処理のフローチャートである。
【図６】図６は、本明細書に記載の処理が実行され得るコンピューティングシステムの機能ブロック図である。
【発明を実施するための形態】
【００１７】
本発明者らは、データ処理システムの精度、効率、及び信頼性が、データ処理システム用のプログラムを表すソースコードを、データ依存性を表す言語に依存しない構成要素の組み合わせに自動的に変換することによって改善できることを認識及び理解した。プログラム用に生成された構成要素は、グラフ又は他の形式で表現されるかどうかにかかわらず、異なる言語で準備されたプログラムを含むシステムの一部、及び潜在的にシステム全体の依存性をキャプチャするデータ構造に結合することができる。次いで、そのデータ構造を処理して、グラフ及び１つ以上の他の言語などの複数の言語でコーディングされたプログラムを含む、システムの依存性情報を生成することができる。そのようなアプローチは、データ処理システムによって管理されるデータのより完全な依存性情報を生成する、改善された依存性分析ツールにつながる。
【００１８】
幾つかの実施形態では、依存性を表すために構成要素のセットが使用されてもよい。本発明者らは、データ処理システム内のデータ要素への依存性に関する有用な情報が、依存性構成要素の有限なセットによって表され得ることを認識及び理解した。この構造要素のセットには、例えば、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「ｉｆ…ｅｌｓｅ」フォーマットの条件付き制御フロー、及び「ｗｈｉｌｅ…ｄｏ」フォーマットの条件付き制御フローを表す構成要素が含まれ得る。幾つかの実施形態では、依存性構成要素のセットは、このセットで構成されるか、本質的にこのセットで構成されるか、定数値の割り当てなど、これらの構成要素のバリエーションのみを含む。
【００１９】
本発明者らは、プログラムの一部を表すソースコードの自動処理が複数の段階で効率的に実行され得ることを更に認識及び理解した。第１段階の処理では、ソースコードを解析できる。解析したソースコードは、解析ツリーなど、コンピュータで操作できる第１のデータ構造で表すことができる。幾つかの実施形態では、第１段階の処理は、パーサジェネレータなどの市販ツールを使用して実行することができる。市販のパーサジェネレータの例は、Ｙａｃｃ及びＡＮＴＬＲである。これらはいずれも、プログラミング言語の文法を指定する文法ファイルからパーサを生成する。
【００２０】
パーサは言語に依存し、多くの場合、パーサジェネレータによって、言語の文法ルールから生成される。従って、複数の言語で記述されたプログラムの依存性を識別するように構成されたデータ処理システムは、複数のパーサ及び／又は複数のパーサを生成するパーサジェネレータを含むことができる。従って、データ処理システムは複数のパーサにアクセスでき、プログラムが記述されているプログラミング言語に基づいて各プログラム用のパーサを選択し、必要に応じて生成することができる。
【００２１】
第２段階の処理では、解析ツリー又は第１段階で生成された他のデータ構造から、依存性に関する情報を抽出することができる。その依存性情報は、構成要素の組み合わせとして表現できる。構成要素は、上述のセットから、又は構成要素の他の適切なセットから選択されてもよい。処理の結果は、第２のコンピュータデータ構造で表現することができ、これはツリーとしてフォーマットすることもできる。しかしながら、第２段階の処理の結果は、プログラム内のデータ要素又はプログラムによってアクセスされるデータ要素に基づいて、依存性に影響を与え得るプログラムによって実行される動作に関する情報を保持する任意のデータ構造に保存できることを理解されたい。
【００２２】
第２段階の処理もまた、言語に依存する。異なる言語は異なる動作をサポートすることができ、異なる方法で依存性に影響を与え得る。従って、第１のデータ構造のそれぞれに適用されるツールを、処理されているプログラムのプログラミング言語に対して選択することができる。例えば、データ処理システムには、第２段階の処理用の複数のツールがあり、各プログラム用に適切なツールを選択することができる。選択は、ツールを、処理中のプログラムが記述された言語に一致させるために、データ処理システムによって動的に行われ得る。
【００２３】
第２段階の処理用のツールのそれぞれは、任意の適切な方法で実装されてもよい。幾つかの実施形態では、各ツールは、第１のデータ構造において、データ要素に基づいて依存性に影響を与える動作を認識するようにプログラムされてもよい。これらの依存性はしばしば、ターゲット変数と呼ばれる場合もある１つのプログラム変数、ソース変数と呼ばれる場合もある１つ以上の他のプログラム変数となる。このタイプのデータフロー依存性は、ここでは例として使用されている。しかしながら、他のタイプの依存性が可能であり、それらが本明細書に記載される技術を使用して分析され得ることを理解されたい。例えば、制御フロー依存性もまた可能であり、コードブロックの実行が１つ以上のデータ要素の値に依存する。
【００２４】
第１のデータ構造が解析ツリーである例では、ツールは、解析ツリーを横断して、第２のデータ構造を生成することができる。依存性に影響を与える動作を検出すると、ツールは、構成要素のセットから１つ以上の構成要素を使用して、第２のデータ構造にエントリを作成することができる。この例では、動作の順序を反映した階層情報を、第２のデータ構造に引き継ぐことができる。ツールは、依存性に影響を与えない第１のデータ構造に反映される動作に対して、第２のデータ構造にエントリを作成しない場合がある。このように、第２のデータ構造は、第１のデータ構造よりもコンパクトである。
【００２５】
いったん第２のデータ構造が各プログラムに対して計算されると、データ処理システムで一緒に使用されるプログラム用の第２のデータ構造を、一緒に使用できる。第２のデータ構造は、どの変数が他の変数に依存しているかを識別することができる。この情報は、依存性を導入する各動作、動作によって影響を受けるターゲット変数、及びその変換で使用されるデータの取得元のソース変数を定義する変換として表すことができる。
【００２６】
システムの依存性を表す第２のデータ構造は、依存性分析ツールで処理できる。第２のデータ構造に記録された各ターゲットを識別し、そのターゲット対するソース変数をリストにすることができる。幾つかの実施形態によれば、プログラムは、関数、又はコードの内部ブロックを定義する他の構成要素が、プログラム内、又はコードの外部ブロックを定義する他の構成要素内で定義されるときに発生し得るような、ネストされた範囲を有し得る。幾つかの実施形態では、依存性がデータ処理システムによって出力又は変更される変数に影響を与えないように、依存性は内部範囲内にのみ存在してもよい。幾つかの実施形態では、そのような純粋にローカルな依存性を削除して、外部依存性情報のみを残すことができる。
【００２７】
幾つかの実施形態では、第１の外部変数はローカル変数に依存してもよく、ローカル変数は１つ以上の第２の外部変数に依存してもよい。このシナリオでは、１つ以上の第２の外部変数に対する第１の外部変数の間接的な依存性が、第２段階の処理で特定されてもよい。そのような識別は、依存性分析ツールにローカル依存性を伝播させ、内部変数に対する第１の外部変数の依存性を、ローカル変数が依存する１つ以上の第２の外部変数の依存性として再キャストすることによって、自動的に行うことができる。
【００２８】
特定のコンテンツに関係なく、データ依存性に関するこの情報は、データ処理システムで使用されるメタデータリポジトリなどのメタデータ構造内に書き込むことができる。情報は、他の適切な情報と組み合わせて書き込むことができる。幾つかの実施形態では、例えば、プログラムのソースコードに関する情報は、そのプログラムの依存性を特徴付ける情報と一緒にキャプチャされてもよい。特定の例として、依存性が作成されるステートメントを含むコードの一部を保存することができる。
【００２９】
幾つかの実施形態で任意選択的に保存され得る他のタイプの情報の例として、制御依存性に関する情報が保存され得る。制御依存性は、１つ以上の変数の値に応じて条件付きで実行されるプログラムのブロックを識別することによって識別できる。この情報は、データ依存性情報と類似的にキャプチャできるが、他のソース変数に直接依存するターゲットエンティティとして変数を記録するよりも、むしろ、コードブロックを１つ以上のフロー制御ソース変数に依存するものとして識別することができる。そのコードブロックが実行されるかどうかに依存し得る値を有する任意の変数は、ターゲット変数として識別され、それらのフロー制御ソース変数に関連付けられ得る。
【００３０】
依存性情報は、多くの方法のうちのいずれかで使用できる。例えば、データ処理システムの動作中に、特定のデータの処理動作を有効化又はブロックし得るルールを評価する際に、依存性情報を使用することができる。一例として、破損した、又は信頼できないと識別されている変数に依存するデータを入力として受信する動作は、抑制されてもよい。
【００３１】
本明細書に記載の実施形態は、多数のやり方のいずれで実施されてもよいことが理解されるものとする。単なる説明目的で、具体的な実施の例を以下に提供する。これらの実施形態及び提供される特徴／機能は、個々に、全て一緒に、又は２つ以上の任意の組み合わせで使用されてもよいことが理解されるものとする（本明細書に記載される技術の態様は、この点において限定されない）。
【００３２】
図１Ａは、本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境１００のブロック図である。コンピューティング環境１００は、データ記憶装置１０４に保存されたデータに対して動作するように構成されたデータ処理システム１０５を包含する。
【００３３】
幾つかの実施形態では、データ記憶装置１０４は、任意の適宜のタイプの１つ又は複数のフォーマットでデータを保存する１つ又は複数のストレージデバイスを包含してもよい。例えば、データ記憶装置１０４のストレージデバイス部分は、１つ又は複数のデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、及び／又は任意のその他の適宜のフォーマット（例えば、メインフレームのネイティブフォーマット）のファイルを使用して、データを保存してもよい。ストレージデバイスは、任意の適宜のタイプのものでよく、及び１つ又は複数のサーバ、１つ又は複数のデータベースシステム、１つ又は複数のポータブルストレージデバイス、１つ又は複数の不揮発性ストレージデバイス、１つ又は複数の揮発性ストレージデバイス、及び／又はデータを電子的に保存するように構成された、任意のその他のデバイスを包含してもよい。幾つかの実施形態では、データ記憶装置１０４は、ストレージデバイスに加えて、又はそれに代えて、１つ又は複数のオンラインデータストリームを包含してもよい。従って、幾つかの実施形態では、データ処理システム１０５は、任意の適宜のフォーマットで、１つ複数のデータストリーム上で提供されるデータへのアクセスを有していてもよい。
【００３４】
データ記憶装置１０４が複数のストレージデバイスを包含する実施形態では、ストレージデバイスは、１つの物理的場所で（例えば、ある建物内で）同一場所に配置されてもよく、又は複数の物理的場所にわたり（例えば、複数の建物内で、異なる市、州、又は国で）分散されてもよい。ストレージデバイスは、例えば、図１Ａに示されるネットワーク１０６などの１つ又は複数のネットワークを使用して、互いに通信するように構成されてもよい。
【００３５】
幾つかの実施形態では、ストレージデバイスによって保存されたデータは、１つ又は複数のファイル、テーブル、テーブルの行及び／又は列のデータ、スプレッドシート、データセット、データレコード（例えば、クレジットカード取引記録、通話記録、及び銀行取引記録）、フィールド、変数、メッセージ、及び／又はレポートなどの１つ又は複数のデータエンティティを包含してもよい。ストレージデバイスは、数千、数百万、数千万、又は数億のデータエンティティを保存してもよい。各データエンティティは、１つ又は複数のデータ要素を包含してもよい。
【００３６】
本明細書で説明するように、データ要素は、データ処理システムによって保存及び／又は処理される、どのようなデータ要素であってもよい。例えば、データ要素は、データレコードにおけるフィールドであってもよく、及びデータ要素の値は、データレコードのフィールドに保存された値であってもよい。具体的な非限定例として、データ要素は、通話に関する情報を保存するデータレコード（このデータレコードは、電気通信会社の顧客によって行われた通話に関する複数のデータレコードの一部であってもよい）における発信者の名前を保存するフィールドであってもよく、及びデータ要素の値は、フィールドに保存された値であってもよい。別の例として、データ要素は、テーブルにおけるセル（例えば、テーブルのある特定の行及び列に存在するセル）であってもよく、及びデータ要素の値は、テーブルのセルの値であってもよい。別の例として、データ要素は、変数（例えば、レポートにおける）であってもよく、及び物理的要素の値は、変数（例えば、レポートのある特定のインスタンスにおける）の値であってもよい。具体的な非限定例として、データ要素は、銀行ローンの申込者のクレジットスコアを表す申込者に関するレポートの変数であってもよく、及びデータ要素の値は、クレジットスコアの数値（例えば、３００〜８５０の数値）であってもよい。申込者のクレジットスコアを表すデータ要素の値は、銀行ローンの申込者に関するレポートを生成するために使用されたデータに応じて変化し得る。
【００３７】
幾つかの実施形態では、データ要素は、任意の適宜のタイプの値をとってもよい。例えば、データ要素は、数値、アルファベット値、選択肢の離散セット（例えば、カテゴリの有限セット）からの値、又は任意のその他の適宜のタイプの値をとってもよく、本明細書に記載の技術の態様は、この点において限定されない。これらの値は、データストア１０４にアクセスするコンピュータでの処理によって割り当てることができる。
【００３８】
データ処理システム１０５は、「協調システム」、又はデータ処理システムがプログラムを実行することを可能にする他の適切なプログラムでプログラムされてもよく、企業が必要とするデータ処理のタイプに基づいて、特定の企業用にデータ処理システム１０５を構成するように記述されてもよい。従って、データ処理システム１０５は、データ記憶装置１０４のデータに対して動作するように構成された１つ又は複数のコンピュータプログラム１０９を包含してもよい。コンピュータプログラム１０９は、任意の適宜のタイプのものでよく、及び任意の適宜のプログラミング言語で書かれていてもよい。例えば、幾つかの実施形態では、コンピュータプログラム１０９は、少なくとも部分的に構造化照会言語（ＳＱＬ）を用いて書かれ、及びデータ記憶装置１０４の１つ又は複数のデータベース部分のデータにアクセスするように構成された１つ又は複数のコンピュータプログラムを包含してもよい。別の例として、幾つかの実施形態では、データ処理システム１０５は、グラフの形式でプログラムを実行するように構成され、及びコンピュータプログラム１０９は、データフローグラフとして開発された１つ又は複数のコンピュータプログラムを含んでもよい。データフローグラフは、入力データに対して行われるデータ処理動作を表す、「ノード」又は「節点」と呼ばれるコンポーネント、及びデータのフローを表すコンポーネント間のリンクを包含してもよい。データフローグラフによってエンコードされる計算を実行する技術が、本明細書において、その全体が援用される、「グラフとして表現される計算の実行」というタイトルの米国特許第５，９６６，０７２号明細書に記載されている。
【００３９】
更に、データ処理システム１０５は、本明細書で説明される依存性分析機能を実行するツール及び／又はユーティリティを含んでもよい。図１Ａの図示された実施形態において、データ処理システム１０５は、データ記憶装置１０４のデータに対して動作するコンピュータプログラム１０９の１つ又は複数を開発するために、人（例えば、開発者）によって使用され得る開発環境１０８を更に包含する。例えば、幾つかの実施形態では、ユーザ１０２は、コンピューティングデバイス１０３を使用して、データフローグラフなどのコンピュータプログラムを指定し、及びそのコンピュータプログラムをコンピュータプログラム１０９の一部としてセーブするために開発環境とインタラクトすることができる。データフローグラフとしてコンピュータプログラムを開発するための環境が、本明細書において、その全体が援用される、「グラフベースのアプリケーションのパラメータ管理」というタイトルの米国特許出願公開第２００７／００１１６６８号明細書に記載されている。依存性分析ツールは、開発環境において、ユーザ１０２などの開発者がアクセスするか、又は任意の他の方法でアクセスできる。
【００４０】
幾つかの実施形態において、コンピュータプログラム１０９の１つ又は複数は、データ記憶装置１０４のデータに対する任意の適宜の動作を行うように構成されてもよい。例えば、コンピュータプログラム１０９の１つ又は複数は、１つ又は複数のソースからのデータにアクセスし、アクセスされたデータを変換し（例えば、データ値を変更すること、データレコードをフィルタリングすること、データフォーマットを変更すること、データを分類すること、複数のソースからのデータを組み合わせること、データを複数の部分に分割することによって、及び／又は任意のその他の適宜のやり方で）、アクセスされたデータから１つ又は複数の新しい値を計算し、及び／又はデータを１つ又は複数の宛先に書き込むように構成されてもよい。
【００４１】
幾つかの実施形態において、コンピュータプログラム１０９の１つ又は複数は、データ記憶装置１０９のデータに対して計算を行い、及び／又はデータ記憶装置１０９のデータからレポートを生成するように構成されてもよい。行われた計算及び／又は生成されたレポートは、ビジネスに関連した１つ又は複数の量と関係してもよい。例えば、コンピュータプログラムは、ある人に関するクレジット履歴データにアクセスし、及びクレジット履歴に基づいて、その人のクレジットスコアを決定するように構成されてもよい。別の例として、コンピュータプログラムは、電話会社の複数の顧客の通話ログにアクセスし、及びそれらの顧客の内の何人が、自身のデータプランに許容されるよりも多くのデータを使用するかを示すレポートを生成することができる。更に別の例として、コンピュータプログラムは、銀行によって行われたローンのタイプを示すデータにアクセスし、及び銀行によって行われたローンの総合的なリスクを示すレポートを生成することができる。コンピュータプログラムは、データ記憶装置１０４に保存されたデータから任意の適宜の情報（例えば、任意の適宜のビジネス目的のために）を生成するように構成することができるので、これらの例は、説明のためのもの、及び非限定的なものである。プログラム１０９は、例えば、データ処理動作からビジネス情報を得るために、ユーザ１３０によって呼び出されてもよい。
【００４２】
図示の実施形態では、データ処理システム１０５はまた、プログラム及びデータガバナンスの維持に関連するタスクを含む、システム１０５の動作中に発生し得る様々なタスクのパフォーマンスをサポートするメタデータリポジトリ１１０を含む。図示された実施形態では、メタデータリポジトリ１１０は、データ依存性モジュール１１８、制御依存性モジュール１２０、及びコードサマリ１２２を含む。データ依存性、制御依存性、及びコードサマリに関する情報は、それぞれ、本明細書で説明するように取得することができる。この情報は、任意の適切なフォーマットで保存できる。非限定的な例として、データ依存性モジュール１１８は、コンピュータプログラム１０９の複数の変数のそれぞれに対して、依存性が存在するコンピュータプログラムの他の変数を示す１つ以上のテーブルを備えてもよい。制御依存性モジュール１２０は、１つ以上の変数の値に応じて、条件付きで実行されるプログラム１０９のコードブロックの実行により潜在的に影響を受ける値を有する変数に関する情報を、類似的に保存することができる。
【００４３】
コードサマリモジュール１２２は、データ又は制御依存性のいずれかの依存性が導入されるプログラム１０９にコードの一部を保存することができる。コードサマリは、関連するソースコードのコピー、又は関連するコードを含むソースコードファイルの一部へのポインタを保存することにより、コードを識別することができる。コードは、ソースコードのコピーによって、又は関連コードを含むソースコードファイルの一部へのポインタによってなどの適切な方法で識別することができる。
【００４４】
図１Ｂは、依存性情報を生成するために実行され得る処理を示している。図１Ｂは、図１Ｂでプログラム１５０、１６０、１７０として示されている複数のプログラムを処理して、依存性情報を識別できることを示している。これらのプログラムは、データ処理システムをまとめて制御して、１つ以上のデータソースからのデータを処理することができる。プログラムは、異なるプログラミング言語で記述されていてもよい。図１Ｂの例では、プログラム１５０は言語１で記述されて示され、プログラム１６０は言語２で記述され、プログラム１７０は言語Ｎで記述されてもよい。しかしながら、全ての言語が異なる必要はなく、幾つかの実施形態では、複数のプログラムの一部又は全てが同じ言語で記述されてもよい。特定の例として、プログラムの一部は、データベース内のデータを処理するために実行され得るなどのストアドプロシージャコールとして記述されてもよい。他のものはグラフィカルプログラミング言語で記述されてもよく、他のものは更に他の言語で記述されてもよい。
【００４５】
プログラムが記述されている言語の組み合わせに関係なく、各プログラムは、言語に依存する処理を使用して処理することができる。図１Ｂでは、言語に依存する処理はフロントエンドモジュール１５２、１６２、及び１７２で実行され、その各モジュールは、それぞれの言語でプログラムを処理するように構成されている。
【００４６】
各フロントエンドモジュールの出力は、プログラムを用いた処理によって導入された依存性を反映した依存性データ構造であってもよい。図１Ｂに示されるように、各フロントエンドは、それ自体の依存性データ構造を出力することができ、これはより下位の解析ツリー１５４、１６４及び１７４であり得る。例えば、プログラムを解析して解析ツリーを生成し、次いで解析ツリーをより下位にして依存性に関連のない情報を除外することにより、下位の解析ツリーを作成することができる。幾つかの実施形態によれば、下位の解析ツリーは、依存性構成要素の有限セットを使用して表されてもよい。各解析ツリーは、言語に依存しない依存性構成要素により言語に依存しない解析ツリーにおける依存性情報を表すことによって、下位にすることができるため、下位の解析ツリー１５４、１６４、及び１７４は、言語に依存しない場合がある。
【００４７】
次いで、下位の解析ツリーは一緒に処理されて、データ処理システムによって実行され得るプログラム１５０、１６０、１７０の全てに対して依存性情報を生成することを可能にする。この処理は、バックエンド１８０で実行できる。バックエンド処理は言語に依存しなくてもよく、そのシステムのプログラムが記述されている言語に関係なく、任意のデータ処理システムにおいてバックエンド１８０を使用することができる。
【００４８】
バックエンド１８０で生成された依存性情報は、任意の望ましい方法で使用することができる。図１Ａの実施形態では、依存性情報は、メタデータリポジトリ１１０として機能するデータストアに保存される。メタデータリポジトリ１１０は、任意の適切な方法で実装され得る。そのようなリポジトリの例は、例えば、米国特許付与前公開第２０１０／０１３８４３１Ａ１号明細書に見出すことができ、その全体が本明細書に組み込まれる。そのようなメタデータリポジトリは、データ処理システムを集合的に実装するプログラムのいずれかに導入された依存性情報を保持することができる。その依存性情報は、複数のプログラム内のデータ要素を示すデータを含むことができ、データ要素間の依存性を示すように構成することができる。例えば、依存性情報は一連のリストとして構造化されてもよく、各リストはターゲットデータ要素に関連付けられ、ターゲットが依存し得るソースデータ要素であるエントリを含む。そのような情報は、代替的又は追加的に、各行及び列が変数に対応し、各行及び列の交点にあるセルが行変数と列変数との間に依存性があるかどうかを示すテーブルとして保存され得る。幾つかの実施形態では、各セルの情報は、それがデータフロー依存性か若しくは制御フロー依存性か、又は依存性に関する追加情報にアクセスできるかなどの、依存性に関する情報を更に示してもよい。
【００４９】
メタデータリポジトリ１１０内の情報は、任意の適切な方法で使用することができる。例えば、コンピュータプログラム１０９を動作又は維持する際に使用することができる。特定の例として、プログラマ１０２は、第１の変数の値に影響を与えるコンピュータプログラム１０９のうちの１つの一部を変更してもよい。プログラマ１０２は、メタデータリポジトリ１１０内の情報に基づいて、その第１の変数に依存する変数でコンピュータプログラム１０９の他の部分を特定することができる。プログラマ１０２は、これらの部分をテストして、変更によってそれらの動作が中断されなかったことを確実にすることができる。別の例として、コンピューティングデバイス１３４を介してシステムと対話するデータ処理システム１０５のユーザ１３０は、データ処理システム１０５によって生成されたレポート内のデータを分析することができる。例えば、ユーザ１３０は、レポートに提示された計算値の有効性に疑問を呈することができ、メタデータリポジトリ１１０内の情報にアクセスして、疑問のある値を計算するのに使用されるデータのソースを識別することができる。次いで、ユーザ１３０は、これらのデータソースの品質を調査し、それによってレポート内のデータの品質を検証することができる。メタデータリポジトリ内の情報は、例えばツールを呼び出すことにより、自動的にアクセス及び処理することができる。
【００５０】
リポジトリ１１０におけるメタデータの使用方法に関係なく、たとえ複数の異なるプログラミング言語で記述されたプログラムがある場合でも、データ処理システム１０５がそのメタデータを生成できるようにすることにより、データ処理システム１０５の信頼性を増大し、データ処理システム１０５が新しい機能を実行することを可能にし得る。
【００５１】
これらの機能は、データリネージにアクセスすることにより、全体的又は部分的に有効にすることができる。データリネージは、データ処理システム内で、特定の変数の値を生成するために使用されるデータが取得又は処理される場所を示す。図２は、例示的なプログラムされたデータ処理システムのデータリネージ図２００である。本明細書で説明するように、データリネージ及びその図は、依存性を識別することによって生成することができる。データリネージ図２００は、データエンティティを表すノード２０２、及びデータエンティティに適用された変換を表すノード２０４を包含する。
【００５２】
データエンティティは、例えば、ファイル、データベース、又は任意の適切な方法でフォーマットされたデータなどのデータセットであり得る。幾つかの実施形態では、データエンティティは「フィールド」であってもよく、これは特定のデータストアからアクセスされる要素であってもよい。例えば、セルが行と列に構成されたテーブルとしてフォーマットされたデータストアでは、フィールドがセルであってもよい。別の例として、複数のレコードとして構成されたデータベースでは、フィールドはレコード内のフィールドであってもよい。データ処理システムによってアクセスされるデータストアの特定の構成に関係なく、データ処理システムを実装するプログラムは、データ処理システムを実装するプログラムでそれらのフィールドが参照されるように、それらのフィールドから読み取り及び／又は書き込みを行うことができる。従って、それらのプログラムは、それらのフィールドに関連する依存性を作成し、一部のフィールドは、他のフィールドの値に依存する値を有する。幾つかの実施形態では、本明細書で説明する依存性アナライザは、フィールドに関連する依存性情報を計算及び保存し、その情報は、特定のフィールドの値によって影響を与える又は影響を与えられ得るプログラムのうちのいずれかで導入された依存性を反映することができる。このフィールドレベルの依存性情報により、データ処理システムをプログラムできる複数のコンピュータプログラミング言語のうちのいずれかで、依存性アナライザが、プログラム全体のフィールドレベルリネージに関する情報を提供することが可能になる。
【００５３】
図２は、同じシンボルを有する各ノード２０２を示しているが、ノードの全てが同じタイプである必要はない。反対に、現代の企業では、ノード２０２は、ＯＲＡＣＬＥ、ＳＡＰ、又はＨＡＤＯＯＰのコンポーネントを使用している企業から生じ得るなどの、異なるタイプのものであり得る。ＯＲＡＣＬＥ又はＳＡＰからのコンポーネントは、当該技術分野で既知のデータベースを実装してもよい。ＨＡＤＯＯＰのコンポーネントは、分散ファイルシステムを実装してもよい。ＨＡＤＯＯＰ分散ファイルシステム上にある一般的なデータベースは、ＨＩＶＥとして知られている。そのようなコンポーネントは、データベースの実装に使用し、又は分散ファイルシステムに保存されたデータセットの実装に使用できる。従って、本明細書で説明する技術は、多数のフォーマットのうちのいずれかでデータセットに対して動作を実行する多くの言語のプログラムで動作できることを理解されたい。
【００５４】
更に、各ノードは、単一のハードウェアコンポーネントに対応する必要はない。むしろ、図２において単一のノードとして表され得る幾つかのデータソースは、分散データベース技術で実装することができる。ＨＡＤＯＯＰは、１つのデータソースを複数のコンピュータハードウェアデバイスに実装できる分散データベーステクノロジーの一例である。
【００５５】
ノード２０４によって表される変換は、コンピュータプログラムによって実装されてもよい。図４ではノード２０４の全てが同じシンボルで示されているが、プログラムの全てが同じプログラミング言語で記述されている必要はない。反対に、使用される言語は、ノード２０４がデータを取得するノード２０２のタイプに依存してもよく、又は企業環境における幾つかの理由のうちのいずれかに対して、ノードごとに変化してもよい。本明細書で説明される技術は、そのような異種の環境に適用することができる。
【００５６】
データリネージ図２００は、データエンティティ２０６における１つ又は複数のデータ要素に関する上流リネージ情報を図示する。変換を表すノードに入る矢印は、どのデータエンティティが、変換に対する入力として提供されるかを示す。データの変換を表すノードから出る矢印は、変換の結果がどのデータエンティティに提供されるかを示す。変換の例には、任意の適宜のタイプの計算を行うこと、データを分類すること、任意の適宜の基準に基づいて、データの１つ又は複数の部分を削除するためにデータをフィルタリングすること（例えば、１つ又は複数のデータレコードを削除するためにデータレコードをフィルタリングする）、データをマージすること（例えば、結合演算を使用して、又は任意のその他の適宜のやり方で）、任意の適宜のデータベース演算又はコマンドを行うこと、及び／又は上記の変換の任意の適宜の組み合わせが包含されるが、これらに限定されない。変換は、例として、及び限定ではなく、データフローグラフとして実施される１つ又は複数のコンピュータプログラムを包含する、任意の適宜のタイプの１つ又は複数のコンピュータプログラムを使用して実施されてもよい。
【００５７】
図２に示す図２００などのデータリネージ図は、幾つかの理由により、有用となり得る。例えば、データエンティティと変換との間の関係を図示することは、ある特定のデータ要素がどのように取得されたか（例えば、レポート内のある特定の値がどのように計算されたか）をユーザが決定することを助けることができる。別の例として、データリネージ図を使用して、どの変換が、様々なデータ要素及び／又はデータエンティティに適用されたかを決定することができる。
【００５８】
幾つかの実施形態では、データリネージは、データ要素、これらのデータ要素を含有するデータエンティティ、及び／又はデータ要素に適用された変換の間の関係を表すことができる。データ要素、データエンティティ、及び変換の間の関係を使用して、例えば、システム（例えば、１つ又は複数のコンピューティングデバイス、データベース、データウェアハウスなど）、及び／又はアプリケーション（例えば、データ処理システムによって管理されるデータにアクセスする１つ又は複数のコンピュータプログラム）などの他のものの間の関係を決定することができる。例えば、ある物理的場所に位置するシステム「Ａ」に保存された、あるデータベースにおける、あるテーブルのあるデータ要素部分が、データリネージ内で、システム「Ｂ」に保存された別のデータベースにおける、別のテーブルの別のデータ要素部分から導出されると示される場合、システムＡとシステムＢとの間の関係を推論することができる。別の例として、アプリケーションプログラムが、あるシステムから１つ又は複数のデータ要素を読み取ると、このアプリケーションプログラムと、このシステムとの間の関係を推論することができる。更に別の例として、あるアプリケーションプログラムが、別のアプリケーションプログラムによって動作が行われたデータ要素にアクセスすると、これらのアプリケーションプログラム間の関係を推論することができる。これらの関係のいずれか１つ又は複数が、データリネージ図の一部として示されてもよい。
【００５９】
図２は、依存先にリンクされたソースデータ要素が直接関連する状態で各ターゲットデータ要素が示される方法で、データリネージを示していることを理解されたい。それらのソースデータ要素は、他のデータ要素に依存する場合がある。ターゲットデータ要素のソースである各データ要素のソースデータ要素が、図２に示すようにデータリネージを通じて依存性をトレースバックすることにより識別できるため、図２に示すデータリネージの表現により、これらの間接的な依存性を識別することが可能になる。本明細書で説明する実施形態では、データリネージは、このトレースバックが間接的な依存性を識別することを可能にするような方法で保存することができる。しかしながら、幾つかの実施形態では、依存性情報は、間接的な依存性を識別及び保存することを含み得る任意の適切な方法で保存できることを理解されたい。
【００６０】
データ処理システムが、多数のデータ要素（例えば、数百万、数十億、又は数兆のデータ要素）を管理できることも理解されたい。例えば、クレジットカードトランザクションに関連付けられたデータを管理するデータ処理システムは、年間数十億のクレジットカードトランザクションを処理でき、トランザクションのそれぞれには、例えば、クレジットカード番号、日付、販売者ＩＤ、購入量などの複数のデータ要素を含むことができる。従って、データリネージは、多数のデータ要素、それらのデータ要素を含むデータエンティティ、及び／又はデータ要素に適用される変換、の間の関係を表すことができる。データリネージには大量の情報が含まれる場合があるため、視聴者が消化できる方法でその情報を提示することが重要である。従って、幾つかの実施形態では、データリネージの情報は、粒度の異なるレベルで視覚化されてもよい。導出したリネージの情報を視覚化するための様々な技術と、データリネージを生成及び／又は視覚化するための技術の幾つかの側面が以下に説明されている。すなわち、（１）２００９年１２月２日に出願された「Ｖｉｓｕａｌｉｚｉｎｇ  Ｒｅｌａｔｉｏｎｓｈｉｐｓ  Ｂｅｔｗｅｅｎ  Ｄａｔａ  Ｅｌｅｍｅｎｔｓ  ａｎｄ  Ｇｒａｐｈｉｃａｌ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎｓ  ｏｆ  Ｄａｔａ  Ｅｌｅｍｅｎｔ  Ａｔｔｒｉｂｕｔｅｓ」と題する米国特許出願第１２／６２９，４６６号明細書、（２）２０１６年２月１０日に出願された「Ｆｉｌｔｅｒｉｎｇ  Ｄａｔａ  Ｌｉｎｅａｇｅ  Ｄｉａｇｒａｍｓ」と題する米国特許出願第１５／０４０，１６２号明細書、（３）２０１５年７月２２日に提出された「Ｄａｔａ  Ｌｉｎｅａｇｅ  Ｓｕｍｍａｒｉｚａｔｉｏｎ」と題する米国特許出願第１４／８０５，６１６号明細書、（４）２０１５年７月２０日に提出された「Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒ  Ｓｅｔｓ」と題する米国特許出願第１４／８０３，３７４号明細書、及び（５）２０１５年７月２０日に提出された「Ｍａｎａｇｉｎｇ  Ｌｉｎｅａｇｅ  Ｉｎｆｏｒｍａｔｉｏｎ」と題する米国特許出願第１４／８０３，３９６号明細書であり、それぞれの全体が参照により組み込まれている。
【００６１】
この情報がどのように使用されるかに関係なく、リネージ情報は、フロントエンドの、プログラミング言語に依存する処理、及びバックエンドの、プログラミング言語に依存しない処理を実装するツールによって、本明細書で説明されるプロセスに従って導出され得る。このアプローチにより、システムのプログラミングと処理の両方の要求が軽減される。例えば、多くの異なるプログラミング言語で実装されたプログラムにわたってバックエンド処理が共有され、システムの実装に必要なメモリ及び他のコンピューティングリソースの量を軽減することができる。フロントエンド処理は、言語固有であるが、コンパイラ、インタープリタ、又は他の既存ツール用に開発された既存のパーサ技術を活用することができる。
【００６２】
図３Ａは、フロントエンド処理の機能ブロック図である。図３Ａに示されるフロントエンド処理は、複数のプログラミング言語のいずれかにおけるソースコードを、依存性が言語に依存しない方法で表されるデータ構造に変換する。図３Ａは、プログラム３１０の処理を示す。プログラム３１０は、コンピュータプログラム１０９（図１Ａ）のうちの１つであってもよく、任意の適切なプログラミング言語で記述されていてもよい。
【００６３】
プログラム３１０は、パーサ３１２への入力として提供される。パーサ３１２は、プログラム３１０が記述されている言語のプログラムコードを処理するように構成された既知の構造のパーサであってもよい。解析器３１２の出力は、解析ツリー３１４であってもよい。解析ツリー３１４は、既知のフォーマットであってもよく、プログラム３１０内のプログラムコードによって指定された動作を表してもよい。解析ツリー３１４は、プログラム３１０を表す第１のデータ構造として、コンピュータメモリに保存され得る。しかしながら、プログラム３１０に従って実行される動作は、任意の適切な方法で表され得ることを理解されたい。
【００６４】
次いで、解析ツリー３１４は、抽出モジュール３１６によって処理され得る。抽出モジュール３１６は、パーサ３１２と同様に、プログラム３１０が記述されているプログラミング言語に特有のものであり得る。抽出モジュール３１６は、実行されると、解析ツリー３１４を表すデータ構造を横断して、データフロー又は制御フロー依存性のいずれかを作成できるプログラム３１０における動作を示す要素を識別することができる。そのような動作を検出すると、抽出モジュール３１６は、ここでは依存性データセット３１８として表される第２のデータ構造にエントリを作成することができる。
【００６５】
抽出モジュール３１６は、少数の構成によりデータ及び制御フロー依存性を特定する目的で、依存性を導入し得るプログラムの動作のコレクションを一般的に表すことができるという発明者の洞察を適用することによって実装することができる。更に、依存性を導入し得るプログラミング言語によりサポートされる動作の数もまた有限であり、比較的少数である。従って、抽出モジュール３１６は、既知の技術を使用して解析ツリー３１４を横断して、プログラム３１０における依存性に影響を与えるそれぞれの動作を識別し、第２のデータ構造に依存性を表す情報を入力するように構成されてもよい。
【００６６】
いったんそのような依存性に影響する動作が特定されると、抽出モジュール３１６は、特定された動作を表す１つ以上の依存性構成要素を選択することができる。そのような選択は、テーブルルックアップ、ヒューリスティック、又はその他の適切な技術を使用して行ってもよい。次いで、抽出モジュール３１６は、解析ツリー３１４で識別された動作のパラメータを使用して、依存性構成要素をパラメータ化することができる。
【００６７】
特定の例として、抽出モジュール３１６が解析ツリー３１４で「追加」動作を識別する場合、その動作は依存性構成要素にマッピングされてもよい。この例では、「追加」動作には３つの変数「ａ」、「ｂ」、及び「ｃ」が含まれ、そのうち「ａ」は動作の出力であり、「ｂ」及び「ｃ」の値に依存する値を有する。それらの３つの変数は、依存性構成要素をパラメータ化する際に、抽出モジュール３１６によって使用され得る。例示的な一実施形態によれば、その依存性構成要素は、「割り当て」と呼ばれる場合がある。この例では、依存性構成要素は、ソース変数「ａ」及び「ｂ」に依存する値がターゲット変数「ａ」に割り当てられていることを示し得る。
【００６８】
幾つかの実施形態では、プログラムを実行する結果として変数間の依存性が存在するかどうかは、実行中のプログラムの変数に割り当てられた値に依存し得ることを理解されたい。しかしながら、簡単にするために、抽出モジュール３１６は、結果が１つ以上の他の変数の値に依存し得る任意の動作を、依存性に影響を与える動作として分類するように構成されてもよい。同様に、場合によっては、１つ以上の変数の値に基づいて、一部のシナリオではプログラムの一部が実行されない場合がある。それにもかかわらず、抽出モジュール３１６は、あらゆる状況下で、変数の値を実行又は発効し、それらの動作を依存性データセット３１８に記録することができる解析ツリー３１４の全ての動作を処理するように構成されてもよい。
【００６９】
図３Ａは、依存性データセット３１８が、複数の依存性構成要素３２０Ａ、３２０Ｂ…３２０ＺＺを含むことを示している。各依存性構成要素は、プログラム３１０を特徴付ける有限数の依存性構成要素のうちの１つの形式であってもよい。
【００７０】
以下に、これらの構造の例を提供する。幾つかの実施形態では、抽出モジュールは、これらの構造のサブセットを認識するようにプログラムされてもよい。他の実施形態では、以下の例は、抽出モジュールが認識する構成の有限セットを表す。他の実施形態では、依存性は他の方法で表現されてもよい。
【実施例】
【００７１】
実施例１：「関数」
幾つかの実施形態によれば、関数を表すコードの一部は、以下のように現れてもよい。
【数１】
2020522790.tif 000003
【００７２】
このコードは、解析ツリーに変換されて処理された後、以下のように表現され得る。
【数２】
2020522790.tif 000004
【００７３】
実施例１は、プロシージャ定義として表現される単一の関数を示している。依存性の観点から、プロシージャは、範囲、入力、出力、又は双方向パラメータを有する。関数は、リターンパラメータを有するプロシージャである。
【００７４】
「３：１  ４：１」は、生成された構成要素のソースファイルにおける開始位置及び終了位置である。この情報は、依存性を生成したコードへのポインタとして機能でき、メタデータリポジトリ１１０に保存できるコードサマリを生成するために使用できる。代替的又は追加的に、抽出モジュールは、コード行をコピーすることによって、依存性を生じさせたソースコードに関する情報をキャプチャすることができる。幾つかの実施形態によれば、抽出モジュールは、ポインタ、ソースコードのコピー、又は何らかの他の方法で、依存性が作成されるコードサマリのみを示すようにプログラムされてもよい。割り当てが行われるコード行、それに加えて割り当てを含むその行の前及び／又は後の１行若しくは有限数の行を選択するによってなど、任意の適切な方法で、コードをサマライズすることができる。コードサマリに必要なストレージ容量を低減するために、他のルールを抽出モジュール内にコーディングすることができる。例えば、コード行の演算子のみをコピーしたり、又はコードブロック内のターゲット変数を明示的に参照する行のみをコピーしたりすることができる。
【００７５】
実施例２：割り当て
第２の実施例として、動作に影響する以下の依存性が、ソースコード内に現れてもよい。
【数３】
2020522790.tif 000005
【００７６】
フロントエンド処理を通じて、その動作が以下のような依存性構成要素として表現されてもよい。
【数４】
2020522790.tif 000006
【００７７】
この実施例及び他の実施例では、角括弧が依存性リストに使用され、括弧がパラメータ及び引数リストに使用されている。波括弧は、範囲に使用されている。例えば、「ｙ［ｘ］」は単一の依存性を示し、「ｙ」が「ｘ」に依存している。本明細書の例として提供される依存性構成要素のセットを構成する言語では、依存性は常に、単一のターゲット要素（この場合は「ｙ」）、及びソース要素リストを有する。この実施例では、ソース要素リストは「［ｘ］」であり、１つの要素「ｘ」で構成されている。この実施例では、後の処理段階でソースコードサマリを生成するためのソースコードへのポインタも示されている。ここでは、ソースコードの関連部分は「２１：１  ２３：１」及び「２２：５  ２２：１１」として示されており、これは、対応する依存性を作成するソースコードステートメントが見つけ出され得るソースコードファイル内の行へのポインタであり得る。
【００７８】
この実施例はまた、データ要素、すなわち「ｘ」及び「ｙ」も示している。これらの要素は、基本／最低レベル／原子フィールドを表す。この実施例では、要素のソースリストに「ｘ」が現れ、「ｙ」が（唯一の）ターゲット要素である。
【００７９】
パラメータ／引数の方向性の知識は、依存性分析で使用できる。従って、依存性構成要素はまた、方向性を表す場合がある。３つのタイプ、すなわちＩＮ、ＯＵＴ、ＩＮＯＵＴが存在する。この実施例の言語では、方向性が言及されていない場合、ＩＮが暗示される。
【００８０】
この構文により、依存性構成要素が人に読めるようになることを理解されたい。本明細書で説明される処理は自動化され得るため、依存性構成要素を人が読み取り可能であることは本発明の要件ではない。従って、依存性構成要素を表す任意の情報をコンピュータのメモリに保存し、依存性構成要素を識別するために使用することができる。
【００８１】
実施例３：リターン
リターンされる変数の値は、その関数の処理で使用される変数を含む、関数内の処理に依存し得るため、変数の値をリターンする関数はまた、依存性を作成する場合がある。
関数
【数５】
2020522790.tif 000007
は、以下の依存性構成要素によって表現され得る。
【数６】
2020522790.tif 000008
【００８２】
「＿ＲＥＴＵＲＮ」は、関数によってリターンされる名前のないエンティティを指定するために使用される特別なデータ要素名である。この実施例は、明示的に宣言された変数以外のデータ要素が、依存性を有するか又は作成する場合があることを示す。本明細書で説明する処理では、作成方法に関係なく、データ要素を処理することができる。「＿ＲＥＴＵＲＮ」はローカルデータ要素の例であり、プログラム内でのみ意味を有する。しかしながら、ローカルデータ要素でさえ、「グローバル変数」への割り当てに使用でき、プログラムの一部の実行を制御でき、又はデータフロー若しくは制御フロー依存性を作成する他の方法で使用することができる。「＿ＲＥＴＵＲＮ」の値が他のデータ要素に依存する場合、それらの依存性は、次いで「グローバル変数」に影響を与えるか、そうでなければ記録される依存性を作成し得る。従って、「＿ＲＥＴＵＲＮ」は、作成される最終的なメタデータストアに含まれる必要はないが、本明細書で説明される実施形態では、依存性を識別する際に考慮されてもよい。
【００８３】
この実施例では、関数は単一の値のみを返す。関数が複数の値を返す場合、「＿ＲＥＴＵＲＮ」構成要素は、２つ以上の値に対応するために変更されてもよい。更に、他の依存性構成要素を表すために使用される構文と同様に、「＿ＲＥＴＵＲＮ」はシンボルとして機能し、ここでは人が読みやすいようにフォーマットされていることを理解されたい。データ処理システムに実装される場合、任意の適切なシンボルを使用することができる。
【００８４】
実施例４：定数割り当て
定数割り当てを含むコード内の依存性は、以下などである。
【数７】
2020522790.tif 000009
は、以下のように表現し得る。
【数８】
2020522790.tif 000010
【００８５】
この実施例では、「＿ｄｅｃｌａｒｅ」及び「＿ＣＯＮＳＴ」は、「＿ＲＥＴＵＲＮ」シンボルのような他の特別な要素のシンボルである。依存性構成要素には、定数変数「ｕ」及び「ｖ」の値に関する情報は含まれていないことに留意されたい。依存性を分析するために、そのような情報は必要ではなく、省略することができる。
【００８６】
幾つかの実施形態では、構成要素「＿ＣＯＮＳＴ」は省略し得るが、幾つかの実施形態では、人が１つ以上のプログラムを表す依存性構成要素のコレクションを理解するのをより容易にし、それらの構成要素を含むデータ構造のコンピュータ処理を簡素化できるために含まれてもよい。
【００８７】
実施例５：コールサイト
関数へのコールを含むコード内の依存性は、以下のように定義される。
【数９】
2020522790.tif 000011
は、以下の依存性構成要素によって表わされ得る。
【数１０】
2020522790.tif 000012
【００８８】
この実施例には、プロシージャ又は関数コールサイトが含まれる。引数は、コールサイトにおいてプロシージャに提供される。引数として機能するデータエンティティは、呼び出されたプロシージャ内の処理がこれらの引数に依存し得るように、他のデータ要素の値に影響を与えてもよい。
【００８９】
この実施例では、データエンティティ「ｕ」及び「ｖ」には、定数値が割り当てられている。従って、それらの引数に基づくプロシージャ内の処理は、一定の結果を生み出し、「ｕ」及び「ｖ」への依存性を示すことなく、依存性構成要素にキャプチャされ得る。幾つかの実施形態では、依存性情報は２段階プロセスで生成され、第１段階は言語に依存する処理を含み、第２段階は言語に依存しない処理を含み得る。
【００９０】
本明細書で説明する幾つかの例示的な実施形態では、第２段階の処理においてローカル変数への依存性を識別及び除外することができ、その結果、関数内部のみの範囲、又はプログラム内部の他のコードブロックを有するローカル変数ではなく、外部変数の観点から最終的な依存性情報が表現される。従って、この実施例では、第１段階の処理において、変数「ｗ」の依存性、及びそれゆえに関数「ｆ５（）」によってリターンされる値は、「ｕ」及び「ｖ」に依存していると表現できる。第２段階の処理では、「ｕ」及び「ｖ」、並びに関数「ｆ５（）」によってリターンされる値は、定数値に依存するように示され得る。
【００９１】
ローカル依存性を伝播するこのプロセスは、処理中のプログラムにわたって継続することができる。プログラムで関数「ｆ５（）」が呼び出されると、そのリターン値は、別の変数に割り当てられ得る。第１段階の処理では、その変数は、関数「ｆ５（）」によってリターンされる値に依存するように示され得る。第２段階の処理では、関数「ｆ５（）」によってリターンされる値を表すローカル変数への依存性を、関数「ｆ５（）」によってリターンされる値が依存するグローバル変数の指示に置き換えることができる。この実施例では、関数「ｆ５（）」によってリターンされる値は、定数値に依存し得る。関数「ｆ５（）」によってリターンされる値が外部変数に依存する場合、依存性は、定数値に基づく代わりに、それらの外部変数に依存するものとして記録されてもよい。
【００９２】
実施例６：定数引数を有するコールサイト
関数へのコールを含むコード内の依存性は、以下のように定義される。
【数１１】
2020522790.tif 000013
は、以下の依存性構成要素によって表わされ得る。
【数１２】
2020522790.tif 000014
【００９３】
定数値が与えられた引数は、定数値が割り当てられたデータ要素のように扱われ得る。
【００９４】
実施例７：グローバルテーブルの読み出し又は書き込み
要素的なデータ要素以外のデータエンティティに対する動作もまた、本明細書で説明するシステムによって取り扱うことができる。幾つかの実施形態では、データエンティティは階層的であってもよい。動作は、階層の任意のレベルにおいてデータエンティティに対して実行できる。従って、依存性構成要素は、階層の任意の適用可能なレベルにおけるデータエンティティの識別に対応できる。そのようなデータエンティティの１つは、例えば、データセットの例であるグローバルテーブルである。データセットは、その中に他のデータエンティティを含んでもよい。例えば、テーブルには行と列が含まれ、これらがデータエンティティと見なされ得る。
【００９５】
テーブル自体に影響を与えるか又は依存する動作が実行され得、テーブル内のデータエンティティのいずれかに潜在的に影響を与える。テーブルはまた、行、列、又は他のサブディビジョンを有し、階層におけるより下位のレベルを作成する。動作は、行や列などのサブディビジョン内のデータ要素のみに影響を与えるか又は依存してもよい。但し、テーブルの行又は列における単一のデータ要素に対する動作など、データセットの任意のサブセットに依存する動作が可能である。
【００９６】
そのような階層においてデータエンティティを指定するには、タプル表記を使用できる。階層の最高レベルのエンティティを最初に指定し、続いて、階層の次に高いレベルにおけるエンティティを指定できる。特定の例として、タプルは「ドット」表記で指定でき、タプルを形成する各シンボルを「．」で区切ることができる。以下の例では、タプルの第１の値（ここでは「Ｔ１」）は、テーブルを識別する。タプルの第２の値（ここでは「Ｃ１」）は、そのテーブルの列を識別する。第２の値は、代わりに、行を識別してもよい。幾つかの実施形態では、タプルは、行と列の両方を識別する値を含むことができ、階層の更により低いレベルでデータ要素を指定する。
【００９７】
そのようなテーブルでの動作の依存性は、以下のとおりである。
【数１３】
2020522790.tif 000015
は、以下の依存性構成要素によって表現され得る。
【数１４】
2020522790.tif 000016
【００９８】
実施例８：コールサイトにおいて引数として使用される複数の要素を有する式
関数のコールによって作成される依存性は、以下のように定義される。
【数１５】
2020522790.tif 000017
は、以下の依存性構成要素によって表現され得る。
【数１６】
2020522790.tif 000018
【００９９】
この実施例では、角括弧「［］」で囲まれた依存性ソースリストと、括弧「（）」で囲まれた引数との間の違いを示す。
【０１００】
実施例９：制御フロー依存性を作成する条件付きステートメント
この実施例では、条件付き制御フローを作成するプログラミングステートメントが依存性分析のためにどのように表され得るかを示す。この実施例では、条件付きステートメントは、「ｉｆ  ｔｈｅｎ…ｅｌｓｅ」フォーマットである。この実施例は、以下のような条件付きステートメントを含む関数に関連する。
【数１７】
2020522790.tif 000019
【０１０１】
そのような「ｉｆ  ｔｈｅｎ…ｅｌｓｅ」ステートメントは、多くのプログラミング言語でサポートされている。このステートメント又は任意のステートメントをプログラム内でどのように表現するかについては、言語ごとに変化し得る。抽出モジュール３１６の処理は１つのプログラミング言語に固有であり得るため、「ｉｆ  ｔｈｅｎ…ｅｌｓｅ」ステートメントが言語ごとにどのように表現されるかについての任意のバリエーションは、そのモジュールが使用される特定の言語の構成要素を識別するように抽出モジュールを構成することによって説明することができる。そのようなステートメントは、以下の依存性構成要素によって表現され得る。
【数１８】
2020522790.tif 000020
【０１０２】
この実施例では、依存性構成要素を表現する目的で、「Ｉｆ」ステートメントからの「ｔｈｅｎ」及び「ｅｌｓｅ」分岐のコンテンツが、単一のブロックにマージされている。プログラムの実行において、分岐のどちらか一方を実行するが、どちらの分岐を実行するかについての判定は同じデータエンティティに依存するため、「ｔｈｅｎ」ブロック及び「ｅｌｓｅ」ブロックの両方の依存性が同じ方法で表現されることを可能にする。この実施例では、変数「ｘ」の値によってどちらの分岐が取られるかが決まるため、制御フローに対して、両方が変数「ｘ」に依存する。そのブロックの制御フロー依存性は、上記のように、「＿ｃｏｎｄｉｔｉｏｎ［ｘ］」として表され得る。
【０１０３】
同じ制御フロー依存性を共有するコードは、１つのブロックとして処理されてもよい。本明細書で説明する幾つかの実施形態に係る依存性分析は、静的コード分析に基づいており、コードの実行中に生じ得る依存性を識別するため、そのような処理は適切である。
【０１０４】
この実施例では、各分岐が実行されると、定数に基づいて変数「ｙ」に値が割り当てられる。このように両方の分岐を一緒に考慮すると、そのコードブロック内で、定数に依存する値がｙに割り当てられるという結論に更につながる。従って、関数によってリターンされる値は定数に依存するが、特定の定数はｘの値に依存することになる。そのような制御とデータフローとの依存性は、「＿ｃｏｎｄｉｔｉｏｎ［ｘ，＿ＣＯＮＳＴ］」として表現できる。
【０１０５】
当業者であれば、３つ以上の可能な制御フローを作成するプログラミング構成に対して、条件付きで実行される３つ以上のコードブロックがあることを認識するであろう。これらのコードブロックのそれぞれの実行は、異なる変数に依存し得る可能性がある。その場合、プログラミング構造は、ブロックのそれぞれ又はブロックのサブセットの異なる依存性構成要素によって表され得る。
【０１０６】
実施例１０：「Ｗｈｉｌｅ  Ｄｏ」ループによって作成される制御フロー依存性
制御フロー依存性はまた、「ｗｈｉｌｅ  ｄｏ」ループを実装するステートメントによって作成されてもよい。そのようなループでは、言及された式が真と評価されている間に、コードブロックが実行される。このシナリオでは、そのブロックと、その式の値に影響を与えるデータエンティティとの間に制御フロー依存性がある。そのようなステートメントを用いる関数の例は、以下のとおりである。
【数１９】
2020522790.tif 000021
【０１０７】
その関数の依存性は、以下のように表現できる。
【数２０】
2020522790.tif 000022
【０１０８】
この実施例では、「ｗｈｉｌｅ  ｄｏ」ループ内部のコードブロックが、少なくとも１回実行され得る。従って、そのブロック内部のステートメントによって作成された依存性は、抽出された依存性情報で表される。追加の依存性は、ループが実行される回数にそれらの値が依存するように、そのループ内部で変化し得る変数によって作成され得る。そのシナリオでは、任意のそのような変数は、ループが実行される回数にその値が影響を与え得るデータエンティティに依存する。
【０１０９】
この実施例では、ループは「ｉ」及び「ｘ」の値に応じて何度か実行される。このため、条件が言及され、すなわち、「＿ｃｏｎｄｉｔｉｏｎ［ｉ，ｘ］」は、「ｉ」及び「ｘ」の値が制御フローに影響を与え得ることを表す。条件下で括弧内の「ｙ［ｙ，ｉ］」及び「ｉ［ｉ，＿ＣＯＮＳＴ］」がそのループで変更され得る変数「ｙ」及び「ｉ」のそれぞれを反映するという指示は、ループが実行される回数に依存する値を有することになる。
【０１１０】
「ｆｏｒ」、「ｗｈｉｌｅ  ｄｏ」、「ｄｏ  ｕｎｔｉｌ」、「ｓｗｉｔｃｈ」、又は「ｃａｓｅ」など、他の条件付きステートメントによって作成された依存性は、この条件付きブロック構造によって同様に表すことができる。具体的な例として、「ｆｏｒ」及び「ｗｈｉｌｅ  ｄｏ」は条件及びブロックを入手し、ブロック内のコードが少なくとも１回実行されることが保証されているため、「ｄｏ  ｕｎｔｉｌ」はブロックの内容をコピーし、それを条件／ブロックの上に配置する。
【０１１１】
実施例１１：レベルコールツリー
この実施例は、たとえ関数が他の関数をコールする場合でも、限られた数の構成要素によって依存性を表わし得ることを示している。この実施例では、３つの関数が定義され、第２の関数「ｇ（）」が第１の関数「ｈ（）」をコールしている。第３の関数「ｆ（）」は、次いで、以下のように第２の関数をコールする。
【数２１】
2020522790.tif 000023
【０１１２】
このマルチレベルコールツリーは、別の関数をコールする各関数が、他の関数へのコールが後続の処理のためにキャプチャされるような方法で表されるように表現できる。
【数２２】
2020522790.tif 000024
【０１１３】
この実施例によってわかり得るように、抽出された依存性情報でプログラム内のマルチレベルコールツリーを表すために、追加の構成要素を導入する必要はない。むしろ、第１の関数の依存性は、上述した構成要素（ここでは「ｙ［ｘ］」）によってキャプチャされる。他の機能は、それらが他の機能に依存していることを示す方法で、抽出された依存性情報に記録される。１つの関数が別の関数をコールすることによって導入され得る任意の依存性は、ローカル依存性が伝播されるバックエンド（第２のフェーズ）処理で解決される場合がある。
【０１１４】
実施例１２：再帰
マルチレベルコールツリーと同様に、抽出された依存性情報でプログラムの再帰を表すために、追加の構成要素は必要ない。むしろ、再帰がより下位の解析ツリーの一部として保存され得ることを示す情報、及びバックエンド処理は、その再帰から生じ得る任意の追加の依存性を計算することができる。
【０１１５】
従って、以下のように、関数はそれ自体を再帰的にコールする。
【数２３】
2020522790.tif 000025
は、以下の依存性構成要素によって、抽出された依存性情報で表現できる。
【数２４】
2020522790.tif 000026
【０１１６】
ここで、この変数が最初は定数値「０」に設定され、その値はずっと変更され得ないため、変数「ａｃｃｕｍｕｌａｔｏｒ」が定数値への依存性を有することが示されている。更に、変数「ｘ」の値に応じて、条件付きフローが示されている。そのような条件は、ステートメント「ｉｆ（ｘ＝＝０）」内の「ｉｆ…ｅｌｓｅ」構成要素から生じる。その条件に関連付けられたブロック内で、変数「ｙ」には「ａｃｃｕｍｕｌａｔｏｒ」の値に基づく値が与えられ、「ａｃｃｕｍｕｌａｔｏｒ」の値は関数「Ｆ１１（）」に依存し得る。
【０１１７】
この情報は、たとえこれらの変数の値を指定するのに十分でなくても、バックエンド処理で依存性を識別するのを可能にするには十分である。
【０１１８】
図３Ａに戻ると、フロントエンド処理は各プログラムに対して実行され得る。この実施例では、プログラム３１０、３２０、及び３５０が示されているが、データ処理システムには任意の数のプログラムが存在し得る。そのような処理の結果は、それぞれ、各プログラムに対する依存性データセット３１８、３３８、又は３５８である。各依存性データセットは、依存性データセット３１８について上述した、依存性構成要素３２０Ａ、３２０Ｂ、及び３２０ＺＺなどの依存性構成要素を有する。その結果、依存性データセットには、解析ツリーに反映される選択された動作、特に依存性に影響を与える動作に関する情報が含まれる。それらの選択された動作は、依存性データセットを生成するために処理されたプログラムが記述されたソース言語に関係なく、同じかもしれない依存性構成要素のセットによって反映され得る。
【０１１９】
それらの依存性構成要素に到達する特定の処理は、プログラミング言語ごとに変わる場合がある。従って、パーサ３３２は、プログラム３３０が書かれている言語に適した解析ツリー３３４を生成するように、当該技術分野で既知の技術を使用して構成され得る。同様に、パーサ３５２は、プログラム３５０が書かれている言語に適した解析ツリー３５４を生成するように構成されてもよい。
【０１２０】
３３６及び３５６などの抽出モジュールのそれぞれはまた、特定のプログラミング言語に基づいて構成することもできる。上述のように、それぞれが、依存性データセットの依存性構成要素として出力される。しかしながら、依存性を生成し得る実行可能ステートメントが関連するプログラミング言語で表される方法に応じて、それぞれへの入力は異なるフォーマットになる場合がある。
【０１２１】
図３Ｂ、３Ｃ、及び３Ｄは、そのようなフロントエンド処理の図例を提供する。この例では、コードセグメント３６０（図３Ｂ）が処理中のプログラムに現れている。この例では、コードセグメント３６０には、「ａ＝ｂ＋ｃ」という割り当てステートメントが含まれる。そのステートメントは、条件付きステートメント「Ｉｆ（ｘ＝１）｛…｝」によって定義される条件付きブロック内にある。この条件付きステートメントは、「ｅｌｓｅ」ヌル付きの、「Ｉｆ  ｔｈｅｎ…ｅｌｓｅ」フォーマットである。そのステートメントは、プログラムの一部である関数内で定義される。その関数定義は、その関数内でのみ使用される変数の範囲を定義できる。
【０１２２】
コードセグメント３６０は、解析ツリー３６８（図３Ｃ）の一部で表すことができ、コードの他のセグメントが同様の方法で処理され、解析ツリーの他の部分（表示せず）にプログラムの残りの部分を表す。この例では、ノード３７０、及びノード３７０の下にあるノードは、ＰＲＯＧＲＡＭ１として示されるプログラムの範囲内にある。
【０１２３】
ノード３７２は、ＰＲＯＧＲＡＭ１内で、ＦＵＮＣＴＩＯＮ１が定義されることを示す。ノード３７２、及びノード３７２の下にあるノードは、ＦＵＮＣＴＩＯＮ１として示される機能の範囲内にある。この例では、ノード３７３及び３７４はノード３７２のすぐ下にあり、他のノードはそれらのノードの下にある。
【０１２４】
この例では、ノード３７４は、データフロー依存性を示している。ノード３７３は、制御フロー依存性を示している。ノード３７４は、割り当てを実施する解析中のプログラム内の１つ以上のステートメントを表している。この例では、ノード３７４に関連して、それらのステートメントのコードサマリ３７５を記録できる。上記の例で示したように、このコードサマリは、ソースコードファイル内の行への１つ以上のポインタであり得る。代替的又は追加的に、ソースコードサマリ３７５は、コードの行又は行の一部のコピーを含んでもよい。サマリに反映されるコード行は、依存性を作成するコードステートメントを識別するルール、ヒューリスティック、又は選択ロジックの実行可能表現、及び幾つかの実施形態では、そのステートメントのコンテキストを提供するプログラム内の追加のステートメントの実行により自動的に選択され得る。例えば、コンテキストを提供するステートメントは、依存性を作成するステートメントの前及び／又は後の一定数のステートメントであり得る。その依存性を作成するステートメントの性質に基づいて、追加又は異なるステートメントを選択することができる。例えば、ステートメントにソース変数が含まれる場合、たとえこれらのステートメントが、サマライズされる依存性を作成するステートメントの近くのプログラム内に現れない場合であっても、サマリには、その変数を定義するステートメント、又はその変数に値を割り当てる最新のステートメントが含まれ得る。
【０１２５】
ノード３７６は、ノード３７４で表される割り当ての左側を表している。この例は、値が割り当てられている変数であるターゲット変数が、１つの変数のみ、この例ではノード３７８で表される変数「ａ」を含むことを示している。
【０１２６】
ノード３８０は、変数「ａ」に割り当てられた値を生成するステートメントの右側を表す。右側には、ノード３８２で示されるように、動作（この場合は追加）が含まれる。加算動作には、ノード３９２及び３９４でそれぞれ示されるように、変数「ｂ」及び「ｃ」である２つの入力がある。
【０１２７】
ノード３７３は、ＦＵＮＣＴＩＯＮ１の制御フロー依存性を表す。ＦＵＮＣＴＩＯＮ１に関連付けられた制御依存性は、ＦＵＮＣＴＩＯＮ１の範囲内の動作に依存する任意の値もまた、制御フロー依存性を有することを示すが、これは、制御フローに応じて、依存性を作成するＦＵＮＣＴＩＯＮ１内のステートメントが、特定の場合に実行される場合（又は、されない場合）があるためである。ノード３７９で示されるように、その制御フロー依存性は、変数「Ｘ」の値に基づいている。この例では、Ｘの値に応じて、ノード３７４で表される変数「ａ」への割り当てが発生する場合（又は発生しない場合）がある。この制御フロー依存性は、図３Ｂの「Ｉｆ  ｔｈｅｎ…ｅｌｓｅ」ステートメントに関連付けられた条件付き実行をキャプチャする。
【０１２８】
次いで、図３Ｃに示された解析ツリーの一部は、依存性データセットに含まれ得る依存性構成要素３９６（図３Ｄ）に変換され得る。ここで、依存性構成要素は、変数「ａ」がターゲットであり、その値がソース変数「ｂ」及び「ｃ」に依存することを示す。この例の命名法は、上記の実施例１のものとは異なり、割り当ても表している。しかしながら、上記の例と図３Ｂはどちらも人が読める形式で依存性構成要素を示しており、他の形式を使用できることを理解されたい。どちらも同じ依存性構成要素を示し、コンピュータが認識及び処理するようにプログラムされた任意の方法でコンピュータにエンコードすることができる。特定の例として、依存性情報は各ターゲット変数のリストとして表されてもよい。各リストには、ターゲットが依存するソース変数の全てが含まれる場合がある。
【０１２９】
依存性構成要素３９６によって表される解析の一部は、ＦＵＮＣＴＩＯＮ１の範囲内に収まる。その範囲は、範囲識別子「ＦＵＮＣＴＩＯＮ１」によって図３Ｄに示されるように、依存性情報に関連付けられ得る。そのような範囲情報は、人が理解できるようにフォーマットされている。コンピュータによる処理のため、範囲情報は、ターゲットに対するソース変数の各リストを範囲に関連付けるなど、他の方法で表すことができることを理解されたい。
【０１３０】
図３Ｃに表される制御フロー依存性はまた、ターゲット変数「ａ」の依存性にも反映され得る。その制御フロー依存性は、図３Ｄでは、依存性が制御フロー依存性であることを示すために、シンボル（この例では「＊」）を有するソース変数「Ｘ」によって示される。他の例と同様に、その表記は人が読めるように意図されている。制御フロー依存性は、「＊」などのシンボルをリスト内のソース変数に関連付けることを含み得る、コンピュータ処理に適した方法で、キャプチャすることができる。代替的又は追加的に、制御フロー依存性は、制御フロー依存性を別々に生じさせるソース変数を保存するか、又はデータフロー依存性のソース変数から他の適切な方法でそれらを分離することによって、示すことができる。そのようなデータストレージ技術は、制御フロー対データフロー依存性に基づいて処理が区別される実施形態で使用され得る。依存性の性質に基づいて処理が区別されない実施形態では、制御フロー依存性のソース変数は、データフロー依存性と同じ方法で保存及び処理されてもよい。或いは、制御フロー依存性に基づいて処理が実行されない場合、制御フロー依存性は省略されてもよい。
【０１３１】
図３Ｃは、１つのプログラムの一部のみに対して第２のデータ構造内にエンコードされた依存性情報を示す。同様の処理を、プログラム全体で実行してもよい。図３Ａに示されるように、複数のプログラムがデータ処理システムで実行される場合、同様の処理が各プログラムに対して実行され得る。ここで提供される例では、プログラムは独立して処理されるものとして示されている。しかしながら、プログラムは他のプログラムで定義されている関数をコールすることができることを理解されたい。その場合、依存性情報は、変数に関連付けられた範囲を示すことによって、あるプログラムの変数が別のプログラムからの変数に依存することを表す場合がある。
【０１３２】
図３Ｄに示される依存性の表現をもたらす処理は、ローカル変数に対する依存性及びローカル変数上の依存性を示し得る。ローカル変数はプログラム内にのみ存在し、定義により、プログラムからの入出力ではないため、幾つかの実施形態では、それらのローカル変数に関する情報は、メタデータリポジトリ１１０（図１Ａ）などに保存されている依存性情報から省略されてもよい。それにもかかわらず、このローカル依存性情報は、最初にキャプチャでき、保存されている依存性情報を導出する処理で使用することができる。
【０１３３】
図４は、言語に依存する処理が完了した後にバックエンドで実行される、そのような処理の一例を提供する。言語に依存しない１つ以上のツールによって処理が実行されていることが示されている。３１６、３３６、又は３５６などの下位モジュールのそれぞれは、後続の処理が言語に依存し得ないように、依存性データセット３１８、３３８、３５８を共通のフォーマットで出力することができる。
【０１３４】
図４の例では、依存性データセット３１８、３３８、３５８での処理は、ローカル及びグローバル依存性の両方で動作し得る依存性処理モジュール４１０で開始することができる。処理では、図３Ｄに関連して上述した、全ての変数の依存性のリスト又は他の適切な表現を作成してもよい。幾つかの実施形態では、ローカル変数及び外部変数に対する、並びに／又はそれらへの依存性を保存することができる。しかしながら、幾つかの実施形態において、データ処理システムのより効率的な動作は、最終的に使用されないそのようなローカル依存性を除去することにより達成され得る。
【０１３５】
従って、ローカル依存性を伝播するモジュール４２０によって、更なる処理が実行され得る。モジュール４２０は、伝播し、次いでローカル依存性を除去する。ローカル依存性は、値がプログラムの内部範囲内の処理でのみ使用され、値が外部データソースからロード又はそれに保存されない変数として、識別され得る。具体例として、上記の実施例１１では、関数「ｇ（）」における「ｓ」及び「ｔ」の値は、外部データソースから保存又はアクセスされない。むしろ、ｓ及びｔの値は、「ｘ」のみから導出される。いったん上述ように処理が完了すると、「ｓ」又は「ｔ」に依存するターゲットデータ要素は、「ｘ」に依存することを示すだけでいい。従って、「ｓ」又は「ｔ」などのローカル変数への参照を、情報を失うことなく削除することができる。同様に、幾つかの実施形態では使用されないため、「ｓ」又は「ｔ」のデータ依存性を表すデータも削除されてもよい。この情報は、ローカル依存性にのみ紐づけされており、モジュール４２０によって削除できる。
【０１３６】
モジュール４２０は、その変数がプログラムの外部に存在するか、又は内部計算で使用されるだけであるかを判定するために、プログラム用に保存されたデータを横断することによって、ローカル変数を識別することができる。図３Ｃに関連して上述したように、プログラムに関する情報は、コードブロックについての範囲情報を記録する方法で保存され得る。その範囲情報は、外側範囲を有する他のコード内で定義されたものとして示されている、内側範囲を有するコードの結果として、ネスティングを明らかにし得る。
【０１３７】
従って、モジュール４２０は、最も内側の各範囲で処理を開始することができる。モジュール４２０は、その範囲内で定義及び／又は使用される各変数に対して、その範囲の外部からその変数にアクセスするかどうかを判定してもよい。そうでない場合、その変数は、ローカル変数としてフラグ付けされ得る。ローカル変数として識別された変数が１つ以上の変数に依存する場合、それらの変数の値は、依存性構成要素におけるソースとしてローカル変数に置き換えられ得る。
【０１３８】
場合によっては、そのような処理により、ローカル変数が、依存性のソースとしての外部変数に置き換えられる結果になる。しかしながら、場合によっては、ローカル変数は別のローカル変数に依存してもよい。そのような可能性を説明するために、モジュール４２０による処理は、ローカル変数が他のローカル変数に依存する場合に、その範囲内の全てのローカル変数が依存性の式において外部変数によって置き換えられるまで、それらの他のローカル変数が次いで処理されるように、再帰的に実行されてもよい。
【０１３９】
ローカル依存性を「伝播」するこのプロセスは、外側範囲ごとに繰り返されることができ、ネスティングされた範囲が最も内側から最も外側に順に処理される。複雑なプログラムは、依存しないネスティング範囲を作成する多くの部分を有し得ることを理解されたい。各ネスティングは、プログラム全体が処理されるまで順に処理することができ、ローカル変数への依存性が、それらのローカル変数が次いで依存する外部変数に置き換えられる。
【０１４０】
このローカル依存性の伝播処理が完了すると、ローカル変数の依存性が保持されない限り、ローカル変数の依存性に関する情報が、もはや必要ではない場合がある。従って、モジュール４２０は、ローカル変数に関する依存性情報を削除するか、そうでなければローカル依存性に関する情報がその後に処理されない方法で、保持された依存性情報を保存してもよい。
【０１４１】
ローダモジュール４３０は、保持された依存性情報を、メタデータリポジトリ４５０に保存することができる。図４に示す実施形態では、メタデータリポジトリは、データ依存性４５２及び制御依存性４５４を別々に保存するものとして示されている。しかしながら、上記のように、そのような情報は同じデータ構造に保存することができ、フロー制御依存性はデータフロー依存性とは別にマークされ得る。或いは、幾つかの実施形態では、データフロー依存性と制御フロー依存性と間で区別を行わない場合がある。
【０１４２】
ローダモジュール４３０は、図３Ｃに関連して上述したような依存性情報の表現を、メタデータリポジトリ４５０のフォーマットに変換することができる。具体的な例として、メタデータリポジトリ４５０は、各ターゲット変数に対して、それが依存するソース変数を示すテーブル又はリストのコレクションとして、依存性情報を保存してもよい。その情報は、データ処理システムがデータリネージ図２００（図２）を生成することができるように保存されてもよい。
【０１４３】
更に、幾つかの実施形態では、ローダモジュール４３０は、メタデータリポジトリにコードサマリ４５６を保存してもよい。上述のように、依存性を生成するソースコードステートメントが識別されると、それらは、単独、又はその依存性に関する情報を明らかにし得るステートメントとの組み合わせのいずれかで、依存性データセットにおける依存性構成要素に関連して保存することができる。このコード情報は、コードサマリ４５６として、全体的又は部分的に保存されてもよい。例えば、プログラムには、値が変数に割り当てられる複数のインスタンスが含まれてもよい。幾つかの実施形態では、ローダモジュール４３０は、これらのインスタンスのそれぞれに関連付けられたコードを保存してもよい。代替的又は追加的に、ローダモジュール４３０は、これらのインスタンスの一部のみに関連付けられたコードを選択的に保存してもよい。ローダモジュール４３０は、例えば、そのような割り当ての最初のインスタンス、又はコードサマリが所定のサイズに到達するまで最初のインスタンス、に関連付けられたコードを選択するようにプログラムされるか、又はルール若しくはコード化されたヒューリスティックを適用して、開発者がアクセスする可能性が最も高いインスタンスを選択することができる。しかしながら、そのような選択は、各コードサマリのサイズを制限するための任意の適切な方法で、ローダモジュール４３０によって行われてもよい。代替的又は追加的に、そのような選択は、図３Ａに関連して説明された下位モジュール、又は他の適切なコンポーネントによって行われてもよい。
【０１４４】
選択がどのように行われたかに関係なく、データ要素又は特定のコードブロックに対する依存性を生じさせた可能性のあるコードの識別情報を保存することにより、データ処理システムがユーザ１０２（図１Ａ）などの開発者に追加機能を提供することを可能にすることができる。例えば、コードサマリ４５６は、プログラムを修正又はデバッグするプログラマが使用することができ、予期しない値を有する変数にその値がどのように割り当てられたかを理解しようとする。
【０１４５】
図５は、本明細書で説明する技術の幾つかの実施形態に係る、依存性情報を生成するための例示的なプロセス５００のフローチャートである。プロセス５００は、任意の適切なシステム及び／又はコンピューティングデバイスによって実行することができ、例えば、図３Ａ及び図４に関して上述したモジュールでプログラムされた、図１Ａを参照して説明したデータ処理システム１０５によって実行することができる。
【０１４６】
プロセス５００は、フロントエンド処理５１０で開始する。フロントエンド処理５１０は、データ処理システムを構成するために使用される各プログラムに対して実行されてもよい。
【０１４７】
フロントエンド処理５１０内で、処理がアクト５０２において開始し、処理されているプログラム用のパーサが選択される。パーサは、処理中の特定のプログラムのプログラミング言語に基づいて選択できる。幾つかの実施形態によれば、データ処理システムは、データ処理システムがサポートする各プログラミング言語用のパーサを保存してもよい。他の実施形態では、データ処理システムは、任意のそのようなプログラミング言語用のパーサを生成することができるパーサジェネレータを含むことができ、データ処理システムは、パーサジェネレータが使用するそのプログラミング言語に関する文法ファイル又は他の情報を提供することにより、所望の言語で記述されたプログラムを処理するように構成することができる。
【０１４８】
アクト５０４において、選択されたパーサを使用してプログラムを解析することができる。アクト５０４の結果は、プログラムに対する解析ツリーであり得る。
【０１４９】
アクト５０６において、解析ツリーを下位にすることができる。上述のように、解析ツリーを下位にすることは、処理中のプログラムのプログラミング言語用に構成された下位モジュールによって実行され得る。下位にするアクトの結果は、プログラム内のデータ要素及びコードブロックに対する依存性構成要素を保存するデータ構造であってもよい。
【０１５０】
アクト５０８において、全てのプログラム（プログラム１０９、図１Ａなど）に対して生成された依存性データセットを、必要に応じて、任意選択的に結合することができる。幾つかの実施形態では、ある言語で記述されたプログラムは、関数をコールするか、そうでなければ別のプログラミング言語で記述されたコードを組み込んで、全体的なデータ処理機能を実装してもよい。従って、各プログラムを独立して処理することによって生成された解析ツリーを結合して、そのような動作を表すことができる。結合された依存性データセットは、バックエンド処理５２０に伝達されるフロントエンドの出力であり得る。代替的又は追加的に、異なるプログラム用に準備された解析ツリーは、どのプログラムがそれらの依存性を作成するステートメントを含んでいるかに関係なく、ターゲット変数ごとに、その変数が依存し得るソース変数を識別することにより、バックエンド処理中に結合され得る。
【０１５１】
バックエンド処理５２０内で、処理はアクト５２２において始まる。アクト５２２では、ローカル依存性が識別される。ネストされた範囲を有するプログラムの場合、この処理は、最も内側の範囲を表すプログラムの各部分に対して最初に実行され得る。ローカル変数の識別は、各変数に対して、解析動作中に構築され得るテーブルにアクセスするによってなど、適切な方法で実行され得る。そのテーブルは、処理中の範囲でのみアクセス又は変更される変数が、その範囲に対してローカルな変数として識別され得るように、変数がアクセス又は変更される場所を示すことができる。
【０１５２】
アクト５２４において、ローカル依存性が伝播され得る。ローカル依存性の伝播には、ローカル変数に基づく依存性の代わりに、ローカル変数が依存する外部変数への依存性を用いることが含まれ得る。
【０１５３】
プロセスは判断ブロック５３０に進み、処理されている範囲が外部範囲であるかどうかに応じてプロセスが分岐する。そうでない場合、プロセスは分岐してアクト５２２に戻り、そこでローカル変数を識別及び伝播するアクトが繰り返される。このようにして、最も内側の範囲で開始し、最も外側の範囲に進むプログラムの一部が処理される。
【０１５４】
いったん最も外側の範囲の全てに到達すると、処理はアクト５３２に分岐する。アクト５３２において、ローカル変数に関する依存性情報を削除することができる。
【０１５５】
アクト５３４において、残りの情報は、メタデータリポジトリに保存されてもよく、又は後で使用するために他の適切な場所に保存されてもよい。
【０１５６】
図５に示すプロセス５００は、任意の適切なコンピューティングシステム環境で実行することができる。図６は、本明細書に記載する技術を実施することができる適宜のコンピューティングシステム環境７００の一例を図示する。コンピューティングシステム環境７００は、適宜のコンピューティング環境の一例にすぎず、本明細書に記載する技術の使用又は機能性の範囲に関して何ら制限を示唆することを意図したものではない。コンピューティング環境７００は、例示的動作環境７００に図示されるコンポーネントのいずれか１つ又は組み合わせに関する依存性又は要件を有すると解釈されるべきものでもない。
【０１５７】
本明細書に記載する技術は、多数の他の汎用又は専用コンピューティングシステムの環境又は構成と共に使用可能である。本明細書に記載する技術と共に使用するのに適し得る周知のコンピューティングシステム、環境、及び／又は構成の例には、限定されることはないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又はデバイスのいずれかを包含する分散コンピューティング環境などが包含される。
【０１５８】
コンピューティング環境は、プログラムモジュールなどのコンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。本明細書に記載する技術は、通信ネットワークを通してリンクされるリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実行されてもよい。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを包含するローカル及びリモートコンピュータストレージ媒体の両方に位置していてもよい。
【０１５９】
図６を参照して、本明細書に記載する技術を実施する例示的システムは、コンピュータ７１０の形態の汎用コンピューティングデバイスを包含する。コンピュータ７１０のコンポーネントは、限定されないが、処理装置７２０、システムメモリ７３０、及びシステムメモリを包含する様々なシステムコンポーネントを処理装置７２０に結合するシステムバス７２１を包含してもよい。システムバス７２１は、様々なバスアーキテクチャのいずれかを使用した、メモリバス又はメモリコントローラ、周辺バス、及びローカルバスを包含する幾つかのタイプのバス構造のいずれかであってもよい。例として、及び限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）（ＶＥＳＡ）ローカルバス、及びメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスが包含される。
【０１６０】
コンピュータ７１０は、一般的に、様々なコンピュータ可読媒体を包含する。コンピュータ可読媒体は、コンピュータ７１０によってアクセスすることができる任意の入手可能な媒体でよく、及び揮発性及び不揮発性両方の媒体、リムーバブル及び非リムーバブル媒体を包含する。例として、及び限定ではなく、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報のストレージのための任意の方法又は技術で実施される、揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を包含する。コンピュータストレージ媒体には、限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）又は他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、又は所望の情報を保存するために使用することができ、且つコンピュータ７１０によってアクセスすることができるその他の媒体が包含される。通信媒体は、一般的に、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを搬送波又は他のトランスポート機構などの変調データ信号で具現化し、及びあらゆる情報配信媒体を包含する。「変調データ信号」という用語は、それの特性集合の１つ又は複数を有する、又は信号の情報をエンコードするように変更された信号を意味する。例として、及び限定ではなく、通信媒体には、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、ＲＦ、赤外線、及び他の無線媒体などの無線媒体が包含される。上記のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に包含されるものとする。
【０１６１】
システムメモリ７３０は、読み出し専用メモリ（ＲＯＭ）７３１及びランダムアクセスメモリ（ＲＡＭ）７３２などの揮発性及び／又は不揮発性メモリの形態のコンピュータストレージ媒体を包含する。起動時などに、コンピュータ７１０内の素子間で情報を転送することを助ける基本ルーチンを含有した、基本入出力システム７３３（ＢＩＯＳ）は、一般的に、ＲＯＭ７３１内に保存される。ＲＡＭ７３２は、一般的に、即座に利用できる、及び／又は処理装置７２０によって現在操作されているデータ及び／又はプログラムモジュールを含有する。例として、及び限定ではなく、図７は、オペレーティングシステム７３４、アプリケーションプログラム７３５、他のプログラムモジュール７３６、及びプログラムデータ７３７を図示する。
【０１６２】
コンピュータ７１０は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージ媒体も包含することができる。単なる例として、図７は、非リムーバブル、不揮発性磁気媒体に対する読み取り又は書き込みを行うハードディスクドライブ７４１、フラッシュメモリなどのリムーバブル、不揮発性メモリ７５２に対する読み取り又は書き込みを行うフラッシュドライブ７５１、及びＣＤ−ＲＯＭ又は他の光学媒体などのリムーバブル、不揮発性光ディスク７５６に対する読み取り又は書き込みを行う光ディスクドライブ７５５を図示する。例示的動作環境において使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージ媒体には、限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどが包含される。ハードディスクドライブ７４１は、一般的に、インタフェース７４０などの非リムーバブルメモリインタフェースを通してシステムバス７２１に接続され、及び磁気ディスクドライブ７５１及び光ディスクドライブ７５５は、一般的に、インタフェース７５０などのリムーバブルメモリインタフェースによってシステムバス７２１に接続される。
【０１６３】
上述した、及び図７に図示したドライブ及びそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ７１０の他のデータのストレージを提供する。図７においては、例えば、ハードディスクドライブ７４１は、オペレーティングシステム７４４、アプリケーションプログラム７４５、他のプログラムモジュール７４６、及びプログラムデータ７４７を保存するものとして図示される。これらのコンポーネントは、オペレーティングシステム７３４、アプリケーションプログラム７３５、他のプログラムモジュール７３６、及びプログラムデータ７３７と同じであってもよいし、或いは異なっていてもよいことに留意されたい。オペレーティングシステム７４４、アプリケーションプログラム７４５、他のプログラムモジュール７４６、及びプログラムデータ７４７は、少なくとも、それらが異なるコピーであることを図示するために、ここでは、異なる番号が付与されている。ユーザは、キーボード７６２及び一般にマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス７６１などの入力デバイスによって、コンピュータ７１０にコマンド及び情報を入力することができる。他の入力デバイス（不図示）には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが包含され得る。これら及び他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース７６０によって、処理装置７２０に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェース及びバス構造によって接続されてもよい。モニタ７９１又は他のタイプのディスプレイデバイスも、ビデオインタフェース７９０などのインタフェースを介して、システムバス７２１に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース７９５を通して接続することができる、スピーカ７９７及びプリンタ７９６などの他の周辺出力デバイスも包含することができる。
【０１６４】
コンピュータ７１０は、リモートコンピュータ７８０などの１つ又は複数のリモートコンピュータへの論理接続を用いたネットワーク化環境で動作することができる。リモートコンピュータ７８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、又は他の共通ネットワークノードでもよく、及び一般的に、図７ではメモリストレージデバイス７８１のみが図示されているが、コンピュータ７１０に関連して上記した素子の多く又は全てを包含する。図７に描かれる論理接続は、ローカルエリアネットワーク（ＬＡＮ）７７１及び広域ネットワーク（ＷＡＮ）７７３を包含するが、他のネットワークも包含してもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて、ありふれたものである。
【０１６５】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ７１０は、ネットワークインタフェース又はアダプタ７７０を通してＬＡＮ７７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ７１０は、一般的に、モデム７７２、又はインターネットなどのＷＡＮ７７３上で通信を確立するための他の手段を包含する。内部又は外部のものでもよいモデム７７２は、ユーザ入力インタフェース７６０又は他の適宜の機構を介して、システムバス７２１に接続されてもよい。ネットワーク化環境において、コンピュータ７１０に関連して描かれたプログラムモジュール、又はそれらの一部は、リモートメモリストレージデバイスに保存されてもよい。例として、及び限定ではなく、図７は、メモリデバイス７８１に常駐しているとして、リモートアプリケーションプログラム７８５を図示する。示されるネットワーク接続は、例示的なものであり、及びコンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されるだろう。
【０１６６】
本発明の少なくとも１つの実施形態の幾つかの態様を上記のように記載したが、様々な変更、修正、及び改良が、当業者には容易に思い付くことが理解されるものとする。
【０１６７】
このような変更、修正、及び改良は、本開示の一部であることが意図され、及び本発明の精神及び範囲内であることが意図される。更に、本発明の利点が示されるが、本明細書に記載の技術の全ての実施形態が、全ての記載した利点を包含するわけではないことが理解されるものとする。幾つかの実施形態は、本明細書において有利であると記載されたいずれの特徴も実施しない場合があり、場合によっては、記載された特徴の１つ又は複数が、更なる実施形態を得るために実施されてもよい。従って、上記の記載及び図面は、単なる例である。
【０１６８】
本明細書に記載の技術の上記実施形態は、多数のやり方のいずれで実施されてもよい。例えば、これらの実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを用いて実施されてもよい。ソフトウェアで実施される場合には、ソフトウェアコードは、単一のコンピュータにおいて提供されていようと、複数のコンピュータ間で分散されていようと、任意の適宜のプロセッサ又は一群のプロセッサ上で実行することができる。このようなプロセッサは、集積回路として実施されてもよく、業界において、ＣＰＵチップ、ＧＰＵチップ、マイクロプロセッサ、マイクロコントローラ、又はコプロセッサなどの名称で知られている市販の集積回路コンポーネントを包含する集積回路コンポーネントにおいて、１つ又は複数のプロセッサを有する。代替的に、プロセッサは、ＡＳＩＣなどのカスタム回路、又はプログラマブル論理デバイスの構成に起因するセミカスタム回路において実施されてもよい。また更なる代替手段として、プロセッサは、市販、セミカスタム、或いはカスタムであろうと、より大きな回路又は半導体デバイスの一部であってもよい。ある具体例として、幾つかの市販のマイクロプロセッサは、複数のコアの１つ又はサブセットがプロセッサを構成することができるように、複数のコアを有する。しかし、プロセッサは、任意の適宜のフォーマットの回路を使用して実施することができる。
【０１６９】
更に、コンピュータは、ラックマウント式コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの多数の形態のいずれかで具現化されてもよいことが理解されるものとする。追加的に、コンピュータは、携帯情報端末（ＰＤＡ）、スマートフォン、又は任意のその他の適宜のポータブル又は固定電子デバイスを包含する、一般にコンピュータとは見なされないが、適宜の処理能力を備えたデバイスに組み込まれてもよい。
【０１７０】
また、コンピュータは、１つ又は複数の入力デバイス及び出力デバイスを有していてもよい。これらのデバイスは、特に、ユーザインタフェースを提示するために使用することができる。ユーザインタフェースを提供するために使用することができる出力デバイスの例には、出力の視覚的表現のためのプリンタ又はディスプレイスクリーン、及び出力の可聴表現のためのスピーカ又は他の音生成デバイスが包含される。ユーザインタフェースに使用することができる入力デバイスの例には、キーボード、並びにマウス、タッチパッド、及びデジタイザタブレットなどのポインティングデバイスが包含される。別の例として、コンピュータは、音声認識により、又は他の可聴フォーマットで入力情報を受信してもよい。
【０１７１】
このようなコンピュータは、企業ネットワーク又はインターネットなどのローカルエリアネットワーク又は広域ネットワークとして包含する、任意の適宜の形態の１つ又は複数のネットワークによって相互接続することができる。このようなネットワークは、任意の適宜の技術に基づいてもよく、及び任意の適宜のプロトコルに従って動作してもよく、及び無線ネットワーク、有線ネットワーク、又は光ファイバネットワークを包含してもよい。
【０１７２】
また、本明細書に概要が述べられる様々な方法又はプロセスは、様々なオペレーティングシステム又はプラットフォームのいずれか１つを用いる１つ又は複数のプロセッサに対して実行可能なソフトウェアとして符号化されてもよい。追加的に、このようなソフトウェアは、多数の適宜のプログラミング言語及び／又はプログラミング又はスクリプト作成ツールのいずれかを使用して書かれてもよく、及びフレームワーク又は仮想マシンに対して実行される実行可能マシン語コード又は中間コードとしてコンパイルされてもよい。
【０１７３】
この点において、本発明は、１つ又は複数のコンピュータ又は他のプロセッサに対して実行されると、上述の本発明の様々な実施形態を実施する方法を行う１つ又は複数のプログラムでエンコードされたコンピュータ可読ストレージ媒体（又は複数のコンピュータ可読媒体）（例えば、コンピュータメモリ、１つ又は複数のフロッピーディスク、コンパクトディスク（ＣＤ）、光ディスク、デジタルビデオディスク（ＤＶＤ）、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ又は他の半導体デバイスにおける回路構成、又は他の有形コンピュータストレージ媒体）として具現化されてもよい。上記の例から明らかなように、コンピュータ可読ストレージ媒体は、非一時的な形態でコンピュータ実行可能命令を提供するのに十分な時間の間、情報を保持することができる。このような１つ又は複数のコンピュータ可読ストレージ媒体は、それ（ら）に保存された１つ又は複数のプログラムを、上述のような本発明の様々な態様を実施するために、１つ又は複数の異なるコンピュータ又は他のプロセッサにロードすることができるように、可搬であってもよい。本明細書においては、「コンピュータ可読ストレージ媒体」という用語は、製品（すなわち、製造物）又はマシンであると見なすことができる非一時的コンピュータ可読媒体のみを網羅する。代替的又は追加的に、本発明は、伝搬信号などの、コンピュータ可読ストレージ媒体以外のコンピュータ可読媒体として具現化されてもよい。
【０１７４】
「プログラム」又は「ソフトウェア」という用語は、本明細書では、上述のような本発明の様々な態様を実施するようにコンピュータ又は他のプロセッサをプログラムするために使用することができる、あらゆるタイプのコンピュータコード又はコンピュータ実行可能命令のセットを指すために総称的に使用される。追加的に、本実施形態のある態様によれば、実行されると、本発明の方法を行う１つ又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに常駐する必要はなく、本発明の様々な態様を実施するために、多数の異なるコンピュータ又はプロセッサ間で、モジュラー方式で分散されてもよいことが理解されるものとする。
【０１７５】
コンピュータ実行可能命令は、１つ又は複数のコンピュータ又は他のデバイスによって実行される、プログラムモジュールなどの多くの形態のものでもよい。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。一般的に、プログラムモジュールの機能性は、様々な実施形態において、要望通りに組み合わせられてもよいし、或いは分散されてもよい。
【０１７６】
また、データ構造は、任意の適宜の形態でコンピュータ可読媒体に保存されてもよい。図示を簡単にするために、データ構造は、データ構造内の場所によって関連したフィールドを有して示される場合がある。このような関係は、同様に、フィールドのストレージにフィールド間の関係を伝達するコンピュータ可読媒体内の場所を割り当てることによって、達成することができる。但し、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用によることを包含する、任意の適宜の機構を使用して、データ構造のフィールドにおける情報間の関係を確立してもよい。
【０１７７】
本発明の様々な態様は、単独で、組み合わせて、又は上記に記載した実施形態において具体的に述べられていない様々な配置で使用されてもよく、従って、その適用において、上記の説明に記載された、又は図面に図示されたコンポーネントの詳細及び配置に限定されない。例えば、ある実施形態に記載した態様は、任意の様式で、他の実施形態に記載した態様と組み合わせることができる。
【０１７８】
また、本発明は、一例を提供した方法として具現化されてもよい。この方法の一部として行われるアクトは、任意の適宜のやり方で、順序付けが行われてもよい。従って、アクトが、図示されたものとは異なる順序で（これは、説明のための実施形態では、逐次的なアクトとして示されたとしても、幾つかのアクトを同時に行うことを包含してもよい）行われる実施形態が構築されてもよい。
【０１７９】
更に、幾つかの行為は、「ユーザ」によって行われると記載される。「ユーザ」は、一人の個人である必要はなく、及び幾つかの実施形態では、「ユーザ」に帰する行為は、複数の個人から成るチーム及び／又はコンピュータ支援ツール又は他の機構と組み合わせた個人によって行われてもよいことが理解されるものとする。
【０１８０】
クレーム要素を修飾する、クレームにおける「第１の」、「第２の」、「第３の」などの序数用語の使用は、それ自体は、１つのクレーム要素の別のクレーム要素に対する優先、先行、又は順序、又は方法のアクトが行われる時間的順序を暗示せず、ある名称を有する１つのクレーム要素を、同じ名称（序数用語の使用を除き）を有する別の要素と区別するための単なるラベルとして使用することにより、これらのクレーム要素が区別される。
【０１８１】
また、本明細書において使用される表現及び用語は、説明目的のものであり、及び限定として見なされるものではない。本明細書における、「包含する（ｉｎｃｌｕｄｉｎｇ）」、「含む（ｃｏｍｐｒｉｓｉｎｇ）」、又は「有する（ｈａｖｉｎｇ）」、「含有する（ｃｏｎｔａｉｎｉｎｇ）」、「関与する（ｉｎｖｏｌｖｉｎｇ）」、及びそれらのバリエーションの使用は、その後にリストされるアイテム及びそれらの均等物、並びに追加のアイテムを網羅することを意味する。
【図１Ａ】
2020522790.tif 000027
【図１Ｂ】
2020522790.tif 000028
【図２】
2020522790.tif 000029
【図３Ａ】
2020522790.tif 000030
【図３Ｂ】
2020522790.tif 000031
【図３Ｃ】
2020522790.tif 000032
【図３Ｄ】
2020522790.tif 000033
【図４】
2020522790.tif 000034
【図５】
2020522790.tif 000035
【図６】
2020522790.tif 000036
【国際調査報告】
2020522790.tif 000037
2020522790.tif 000038