(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-03
(45)【発行日】2023-10-12
(54)【発明の名称】異種にプログラムされたデータ処理システムの自動依存性アナライザ
(51)【国際特許分類】
G06F 8/75 20180101AFI20231004BHJP
G06F 11/36 20060101ALI20231004BHJP
G06F 8/41 20180101ALI20231004BHJP
【FI】
G06F8/75
G06F11/36 104
G06F8/41 100
(21)【出願番号】P 2019564843
(86)(22)【出願日】2018-05-22
(86)【国際出願番号】 US2018033882
(87)【国際公開番号】W WO2018217745
(87)【国際公開日】2018-11-29
【審査請求日】2021-05-13
(32)【優先日】2017-05-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ベルク,クリストフ
(72)【発明者】
【氏名】クレメンス,デイビッド
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特開平07-239787(JP,A)
【文献】米国特許出願公開第2011/0302563(US,A1)
【文献】特開2005-018114(JP,A)
【文献】特開2013-156786(JP,A)
【文献】特表2017-502385(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
データ処理システムで使用するための依存性アナライザであって、
少なくとも1つのコンピュータハードウェアプロセッサと、
プロセッサ実行可能命令を保存する少なくとも1つの非一時的コンピュータ可読記憶媒体であって、前記少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、
前記データ処理システムが実行するように構成された複数のプログラムのそれぞれに対して、前記プログラムの少なくとも部分の解析に基づいて、前記プログラム内の動作を反映する第1のデータ構造を構築させ、ここで、複数のプログラムは、複数の言語で記述されており、
複数の前記第1のデータ構造のそれぞれに対して、
依存性に影響を与えない動作が選択されないように、1つ以上のデータ要素への依存性に影響を与える前記第1のデータ構造に反映される動作を選択させ、ここで、前記動作を選択することは、プログラムが記述されているプログラミング言語に基づいて選択されたツールを用いて、制御フロー又はデータフロー依存性に影響を与える動作の指示をプログラムから識別することを含み、前記プログラムの少なくとも部分は、前記第1のデータ構造を構築するために解析されており、
選択された各動作に対して、依存性構成要素のセットから選択された依存性構成要素を記録することによって、前記選択された動作の指示を第2のデータ構造に記録させ、前記複数のプログラムのそれぞれに対する前記依存性構成要素のセットが、前記プログラムが記述されている言語に依存しておらず、
前記選択された動作の指示が記録されている複数の第2のデータ構造を処理させ、前記処理が、データ要素に対する制御フロー又はデータフロー依存性を識別することを含み、前記依存性が、前記複数のプログラムのうちのいずれかの実行中に生じ得る依存性であり、
前記識別された制御フロー又はデータフロー依存性を依存性データ構造に記録させ、前記依存性データ構造が、データ要素間の制御フロー又はデータフロー依存性を示すように構成された前記複数のプログラム内のデータ要素を示すデータを含む、依存性アナライザ。
【請求項2】
前記依存性は、制御フロー依存性とデータフロー依存性とを含む、請求項1に記載の依存性アナライザ。
【請求項3】
前記依存性は、データフロー依存性を含む、請求項1に記載の依存性アナライザ。
【請求項4】
前記データ処理システムは、複数の、言語に依存するパーサを備え、
前記第1のデータ構造を構築することが、前記複数のプログラムのそれぞれに対して、前記プログラムが記述されている言語に基づいて言語に依存するパーサを選択することを含む、請求項1に記載の依存性アナライザ。
【請求項5】
前記複数のプログラムは、複数のソース言語で記述されている、請求項4に記載の依存性アナライザ。
【請求項6】
前記ソース言語にはSQLが含まれる、請求項5に記載の依存性アナライザ。
【請求項7】
前記ソース言語には、データフローグラフを表すグラフィカルプログラミング言語が含まれる、請求項5に記載の依存性アナライザ。
【請求項8】
前記ソース言語には、SQL、及びデータフローグラフを表すグラフィカルプログラミング言語が含まれる、請求項5に記載の依存性アナライザ。
【請求項9】
前記データ処理システムは、制御フロー又はデータフロー依存性に影響を与える動作の指示を、前記第1のデータ構造から抽出するための複数の、言語に依存するツールを備える、請求項4に記載の依存性アナライザ。
【請求項10】
前記複数の構築された第1のデータ構造のそれぞれに対して、選択された動作の指示を前記第2のデータ構造に記録することは、構成要素のセットからの構成要素を記録することを含む、請求項1に記載の依存性アナライザ。
【請求項11】
前記構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「if…else」フォーマットの条件付き制御フロー、及び「while…do」フォーマットの条件付き制御フローを表す構成要素のうちの2つ以上で構成される、請求項10に記載の依存性アナライザ。
【請求項12】
前記構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「if…else」フォーマットの条件付き制御フロー、及び「while…do」フォーマットの条件付き制御フローを表す構成要素で本質的に構成される、請求項10に記載の依存性アナライザ。
【請求項13】
前記依存性データ構造にアクセスし、ユーザインタフェースを介して、データ要素に依存するデータエンティティ又はコードブロックに関する情報を提示する、少なくとも1つのツールを更に備える、請求項2に記載の依存性アナライザ。
【請求項14】
前記データ処理システムは、複数のデータソースを更に含み、
前記複数のプログラムは、前記複数のデータソース内のデータに変換を実行するように構成されており、
前記複数のデータソースは異種である、請求項2に記載の依存性アナライザ。
【請求項15】
前記複数のデータソースは、ORACLEデータベース若しくはSAPデータベース、又はHADOOP分散ファイルシステムに保存されているデータセット、のうちの少なくとも1つであるデータソースを備える、請求項14に記載の依存性アナライザ。
【請求項16】
データ処理システムで使用するように構成された依存性アナライザの動作方法であって、
前記データ処理システム内で実行し、且つ、プログラミング言語でのデータ処理動作を指定するように構成された複数のプログラムを実行する少なくとも1つのコンピュータハードウェアプロセッサを使用することであって、前記複数のプログラムが複数のプログラミング言語で記述されている、ことと、
各プログラムの少なくとも部分を解析することによって、前記複数のプログラムのそれぞれの第1のデータ構造を構築することと、
複数の前記第1のデータ構造のそれぞれに対して、
1つ以上のデータ要素への依存性に影響を与える前記第1のデータ構造に反映される動作を選択することであって、前記動作を選択することは、プログラムが記述されているプログラミング言語に基づいて選択されたツールを用いて、制御フロー又はデータフロー依存性に影響を与える動作の指示をプログラムから識別することを含み、前記プログラムの少なくとも部分は、前記第1のデータ構造を構築するために解析されている、ことと、
選択された各動作に対して、前記選択された動作の指示を第2のデータ構造に記録することであって、前記指示が、全ての前記第2データ構造に共通する依存性構成要素のセットを使用して前記第2データ構造に記録される、ことと、
前記選択された動作の指示が記録されている前記第2のデータ構造を処理することであって、前記処理が、前記複数のプログラムのうちのいずれかの実行中に生じ得るデータ要素に対する制御フロー又はデータフロー依存性を識別することを含む、ことと、
前記識別された制御フロー又はデータフロー依存性を依存性データ構造に記録することであって、前記依存性データ構造が、データ要素間の制御フロー又はデータフロー依存性を示すように構成された前記複数のプログラム内のデータ要素を示すデータを含む、ことと、
を含む、方法。
【請求項17】
前記依存性は、データフローの依存性である、請求項16に記載の方法。
【請求項18】
前記依存性は、制御フロー依存性とデータフロー依存性とを含む、請求項16に記載の方法。
【請求項19】
前記複数のプログラムのそれぞれの第1のデータ構造を構築することは、前記複数のプログラムが記述されている言語に基づいて前記複数のプログラムのパーサを選択することを含む、請求項16に記載の方法。
【請求項20】
前記複数のプログラムは、SQL、及びデータフローグラフを表すグラフィカルプログラミング言語を含む複数のソース言語で記述されており、
パーサを選択することは、前記複数のソース言語のそれぞれに対してパーサを選択することを含む、請求項16に記載の方法。
【請求項21】
前記第2のデータ構造に記録することは、複数のソース言語のそれぞれにおいて記述されたプログラミングについての前記依存性構成要素のセットから第2のデータ構造を構築することを含む、請求項20に記載の方法。
【請求項22】
前記第1のデータ構造は言語に依存し、
前記第2のデータ構造は言語に依存しない、請求項16に記載の方法。
【請求項23】
前記選択された動作の指示を前記第2のデータ構造に記録することは、制御フロー又はデータフロー依存性に影響を与えない、前記第1データ構造内の動作に関する情報が前記第2データ構造から省略されるように、制御フロー又はデータフロー依存性に影響を与える動作の指示を前記第1のデータ構造から抽出することを含む、請求項16に記載の方法。
【請求項24】
前記データ処理システムは、制御フロー又はデータフロー依存性に影響を与える動作の指示を前記第1のデータ構造から抽出するための複数の、言語に依存するツールを備える、請求項22に記載の方法。
【請求項25】
前記依存性構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「if…else」フォーマットの条件付き制御フロー、及び「while…do」フォーマットの条件付き制御フローを表す構成要素のうちの2つ以上で構成される、請求項16に記載の方法。
【請求項26】
データ処理システムとともに使用される依存性アナライザの動作方法であって、
前記データ処理システム内で実行し、且つ、プログラミング言語でのデータ処理動作を指定するように構成された複数のプログラムを実行する少なくとも1つのコンピュータハードウェアプロセッサを使用することであって、前記複数のプログラムが複数のプログラミング言語で記述されている、ことと、
各プログラムの少なくとも部分を解析することによって、前記複数のプログラムのそれぞれの第1のデータ構造を構築することと、
複数の前記第1のデータ構造のそれぞれに対して、
1つ以上のデータ要素への依存性に影響を与える前記第1のデータ構造に反映される動作を選択することであって、前記動作を選択することは、プログラムが記述されているプログラミング言語に基づいて選択されたツールを用いて、制御フロー又はデータフロー依存性に影響を与える動作の指示をプログラムから識別することを含み、前記プログラムの少なくとも部分は、前記第1のデータ構造を構築するために解析されている、ことと、
選択された各動作に対して、前記選択された動作の指示を第2のデータ構造に記録することであって、前記指示が、全ての前記第2データ構造に共通する依存性構成要素のセットを使用して前記第2データ構造に記録される、ことと、
前記第2のデータ構造を処理することであって、前記処理が、前記複数のプログラムの何れかの処理の結果として一つ以上のデータ要素についての制御フロー依存性を識別することを含む、ことと、
前記一つ以上のデータ要素についての識別された制御フロー依存性を依存性データ構造に記録することと、
を含む、方法。
【請求項27】
前記依存性構成要素のセットは、「if…else」フォーマットの条件付き制御フローを含む、請求項25に記載の方法。
【請求項28】
前記依存性構成要素のセットは、「while…do」フォーマットの条件付き制御フローを含む、請求項25に記載の方法。
【請求項29】
複数の前記第1のデータ構造のそれぞれに対して、データフロー依存性を生成する、前記第1のデータ構造における、動作の指示を前記第2のデータ構造に選択的に記録することであって、前記指示は、全ての前記第2データ構造に共通する依存性構成要素のセットを使用して前記第2のデータ構造に記録される、請求項25に記載の方法。
【請求項30】
プロセッサ実行可能命令を保存する少なくとも1つの非一時的コンピュータ可読記憶媒体であって、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、それぞれのプログラミング言語においてデータ処理動作を規定する複数のプログラムについて、方法を実行させ、前記複数のプログラムは、複数のプログラミング言語を用い、
前記方法は、
各プログラムの少なくとも部分を解析することによって、前記複数のプログラムのそれぞれの第1のデータ構造を構築することと、
複数の前記第1のデータ構造のそれぞれに対して、
1つ以上のデータ要素への制御フロー又はデータフロー依存性に影響を与える前記第1のデータ構造に反映されている動作を、プログラムが記述されているプログラミング言語に基づいて選択されたツールを用いて、前記第1のデータ構造から抽出することであって、前記プログラムの少なくも部分は、前記第1のデータ構造を構築するために解析されている、ことと、
前記抽出された動作の指示を第2のデータ構造に記録することであって、前記抽出された動作の指示は、全ての前記第2データ構造に共通する依存性構成要素のセットを使用して、前記第2のデータ構造に記録に記録される、ことと、
前記第2のデータ構造を処理することであって、前記処理が、前記複数のプログラムの何れかの処理の結果としてデータ要素についての依存性を識別することを含む、ことと、
前記識別された依存性を依存性データ構造に記録することと、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項31】
前記複数のプログラムのそれぞれの第1のデータ構造を構築することは、前記複数のプログラムが記述されている言語に基づいて前記複数のプログラムのパーサを選択することを含む、請求項30に記載の非一時的コンピュータ可読記憶媒体。
【請求項32】
前記複数のプログラムは、SQL、及びデータフローグラフを表すグラフィカルプログラミング言語を含む複数のソース言語で記述されており、
パーサを選択することは、前記複数のソース言語のそれぞれに対してパーサを選択することを含む、請求項31に記載の非一時的コンピュータ可読記憶媒体。
【請求項33】
前記複数の前記構築された第1のデータ構造のそれぞれにおいて動作の指示を抽出することは、前記複数のソース言語のそれぞれで記述されたプログラムの前記依存性構成要素のセットから第2のデータ構造を構築することを含む、請求項32に記載の非一時的コンピュータ可読記憶媒体。
【請求項34】
前記第1のデータ構造は言語に依存し、
前記第2のデータ構造は言語に依存しない、請求項30に記載の非一時的コンピュータ可読記憶媒体。
【請求項35】
前記第1のデータ構造における前記動作の指示を抽出することは、依存性に影響を与えない前記第1データ構造内の動作に関する情報が前記第2データ構造から省略されるように、依存性に影響を与える前記第1のデータ構造における前記動作の指示を前記第2のデータ構造に選択的に記録することを含む、請求項30に記載の非一時的コンピュータ可読記憶媒体。
【請求項36】
データ処理システムは、前記第1のデータ構造を下位にするための複数の、言語に依存するツールを備え、
前記第1のデータ構造において動作の指示を抽出することは、前記複数の第1のデータ構造のそれぞれに対して、前記第1のデータ構造を構築するために解析されたプログラムが記述されている言語に基づいて、前記第1のデータ構造における動作の指示を抽出するための言語に依存するツールを選択することを含む、請求項30に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
【請求項37】
前記依存性構成要素のセットは、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「if…else」フォーマットの条件付き制御フロー、及び「while…do」フォーマットの条件付き制御フローを表す構成要素のうちの2つ以上で構成される、請求項30に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
【請求項38】
データ処理システムで使用するための依存性アナライザであって、
コンピュータの少なくとも一つのハードウェアコンポーネントを、
複数のプログラムのそれぞれを表す第1のデータ構造を構築するための手段であって、前記第1のデータ構造が前記複数のプログラムのそれぞれのプログラムにおける動作を反映し、前記複数のプログラムは、複数のプログラミング言語で記述されている、手段と、
それぞれの第1のデータ構造から、制御フロー又はデータフロー依存性に影響を与える動作の指示を、第1のデータ構造を構築するために解析されたプログラムが記述されているプログラミング言語に基づいて選択されたツールを用いて、識別する手段と、
依存性に影響を及ぼさない前記複数の前記構築された第1のデータ構造のそれぞれにおける動作に関する情報が前記第2のデータ構造から省略されるように、一つ以上のデータ要素についての制御フロー又はデータフロー依存性に影響を与える前記第1のデータ構造における動作の指示を第2のデータ構造に記録するための手段と、
前記第2のデータ構造を処理して、前記複数のプログラムのうちのいずれかにおける動作の実行の結果として一つ以上のデータ要素に対する制御フロー又はデータフロー依存性を識別するための手段と、
前記識別された一つ以上のデータ要素に対する制御フロー又はデータフロー依存性を依存性データ構造に記録するための手段と、
として機能させる、依存性アナライザ。
【発明の詳細な説明】
【背景技術】
【0001】
多くの場合、大量のデータは、データ処理システムによって管理される。データ処理システムは、1つ以上のデータソースに結合された1つ以上のコンピュータ上に実装されてもよい。コンピュータは、ソフトウェアプログラムを使用することにより、特定のデータ処理動作を実行するように構成できる。それらのソフトウェアプログラムは、複数のプログラミング言語で記述された異種のものである場合がある。
【0002】
一例として、大学では、クラスをリクエストする学生からの入力データとしてデータを受信するデータ処理システムで学生登録を処理する場合がある。そのデータには、学生の名前又は識別番号、コースのタイトル又は番号、教授、及び学生又はコースに関するその他の情報が含まれ得る。処理システムは、登録された各学生に関する情報を含むデータストアなどの様々なデータソースにアクセスすることにより、各リクエストを処理するようにプログラムできる。データ処理システムは、このデータストアにアクセスして、クラスへの登録リクエストが学費納入済みの学生によって行われたことを判定することができる。別のデータストアには、必修クラスを含む、クラスに関する情報が含まれていてもよい。データ処理システムは、クラスをリクエストしている学生がすでに完了したクラスを示す別のデータストアからのデータと組み合わせてこのデータにアクセスし、学生がリクエストされたクラスに登録する資格があるかどうかを判定することができる。
【0003】
プログラムに従ってアクセスされたデータを処理することにより、データ処理システムは、学生がリクエストされたクラスに登録されていること、及びクラス名簿にその学生が含まれていることを示すデータを生成することができる。データ処理システムがクラス登録リクエストの処理を完了すると、データ処理システムは、多くのデータソースにアクセスでき、複数のデータストアのデータを入力又は変更することができる。
【0004】
同様のパターンは他の多くの重要なアプリケーションにおいて発生し、データ処理システムが複数のデータソースにアクセスし、データソースからアクセスしたデータに基づいて、又は他の変数の値に基づいて、他のデータストアに保存された値を生成又は変更する。従って、変数の他の値がデータソースからアクセスされるか、又はデータ処理システム内に存在するかにかかわらず、変数の多くの値が、他の変数の値に依存し得る。
【0005】
多くの場合、データ処理システムが生成又は変更したデータ要素に関する依存性情報を、データ処理システムが提供することが有益である。米国マサチューセッツ州レキシントンのAb Initioは、協調システム上で実行するために作成されたプログラムに基づいて依存性情報を提供する「協調システム」を提供する。協調システムは、オペレータ、及びオペレータ間のデータフローとして表される、データフローグラフとして表現されるプログラムを実行する。ツールは、1つ以上の他の変数の値に基づいて変数の値が設定されている演算子を識別することにより、グラフを分析し、変数間の依存性を判定できる。オペレータにフローをトレースバックすることにより、ツールは、オペレータへの変数入力が次に依存する他の変数を識別できる。グラフによってトレースすることにより、ツールは、直接的又は間接を問わず、任意の変数に対する全ての依存性を識別できる。
【0006】
この依存性情報はメタデータストアに入力でき、そこからグラフに関係する多くの機能に使用することができる。例えば、予期しない値のパターンを有する変数を識別するために、データ品質ルールを適用してもよい。これらの変数、及びそれらの変数に依存性を有するグラフ内の任意の変数は、疑わしいものとしてフラグ付けされてもよい。別の例として、グラフの一部を変更して、新しい機能を提供したり、エラーを修正したり、又はもはや所望しない機能を除外したりする必要がある場合、その処理で生成又は変更された変数によって、依存するグラフの他の部分を容易に識別することができる。変更に続いて、グラフ中の他の部分で行われた変更によって機能が損なわれないことを確実にするように、グラフのそれらの部分を精査することができる。
【0007】
場合によっては、データ処理システムは、グラフの代わりに、又はグラフに加えて、他のプログラミング言語を使用することができる。例えば、データソースは、SQL、又はデータベースのサプライヤによって定義されたプログラミング言語でプログラムされたデータベースであり得、ユーザはそのデータベースに対して実行されるクエリをプログラムすることが可能になる。大企業で実装され得るデータ処理システムでは、グラフィカルプログラミング言語の代わりに、又はそれに加えて、複数の言語で記述された複数のプログラムが存在する場合がある。グラフとして表現されたプログラム上で動作する依存性分析ツールは、他の言語で記述されたこれらのプログラムを処理しない。その結果、データ処理システム全体の依存性情報が不完全であり得るか、又は生成に多大な労力が必要になり得る。
【発明の概要】
【課題を解決するための手段】
【0008】
幾つかの実施形態は、フィールドを含む複数のレコードにアクセスする複数のコンピュータプログラミング言語のうちのいずれかでプログラムを実行するように構成されたデータ処理システムで使用するための依存性アナライザを提供する。依存性アナライザは、複数のコンピュータプログラミング言語におけるプログラムの依存性分析のために構成されてもよく、依存性分析は、複数のコンピュータ言語におけるコンピュータプログラムにわたるフィールドレベルリネージに関する依存性情報の計算を含んでもよい。依存性アナライザは、データ処理システムを制御する複数のプログラムを処理するように構成されたフロントエンドを備えてもよい。複数のプログラムは、複数のプログラミング言語のうちの複数のプログラミング言語で記述されてもよい。フロントエンドは、複数のフロントエンドモジュールを備えてもよく、各フロントエンドモジュールは、複数のプログラミング言語のプログラミング言語で記述された複数のプログラムのコンピュータプログラムを入力として受信し、且つ、プログラム内で作成されたデータ処理システムのフィールドへの依存性を表す、言語に依存しないデータ構造を出力するように構成されており、当該言語に依存しないデータ構造は、1つ以上の依存性構成要素から構成され、各依存性構成要素は、少なくとも1つのフィールドの指示と、少なくとも1つのフィールドに関連する依存性と、を含む。データアナライザはまた、複数のフロントエンドモジュールから言語に依存しないデータ構造を受信し、且つ、複数のプログラム内で作成された依存性を表すデータ処理システムの依存性情報を出力するように構成されたバックエンドを備えてもよい。依存性情報が複数のプログラムにわたるフィールドレベルリネージを含むように、依存性情報は、複数のプログラムのうちの複数のプログラムに導入されたフィールドレベル依存性を含み得る。
【0009】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、データ処理システムが実行するように構成された複数のプログラムのそれぞれに対して、プログラムの解析に基づいて、プログラム内の動作を反映する第1のデータ構造を構築することを含むアクトを少なくとも1つのコンピュータハードウェアプロセッサに実行させる、プロセッサ実行可能命令を保存する少なくとも1つの非一時的コンピュータ可読記憶媒体と、を備えるデータ処理システムで使用する依存性アナライザを提供する。複数の第1のデータ構造のそれぞれに対して、依存性に影響を与えない動作が選択されないように、1つ以上のデータ要素への依存性に影響を与える第1のデータ構造に反映される動作が選択されてもよい。選択されたそれぞれの動作に対して、依存性構成要素のセットから依存性構成要素を記録することによって、選択された動作の指示を、第2のデータ構造に記録することができる。複数のプログラムのそれぞれに対する依存性構成要素のセットは、プログラムが記述されている言語に依存しなくてもよい。複数の第2のデータ構造が処理されてもよい。その処理は、データ要素に対する制御フロー又はデータフロー依存性を識別することを含むことができ、当該依存性は、複数のプログラムのうちのいずれかの実行中に生じ得るものである。依存性データ構造内の識別された依存性が処理されてもよく、依存性データ構造は、データ要素間の依存性を示すように構成された複数のプログラム内のデータ要素を示すデータを含んでもよい。
【0010】
幾つかの実施形態は、データ処理システムで使用するように構成された依存性アナライザの動作方法を提供し、データ処理システム内で実行し、且つ、プログラミング言語でのデータ処理動作を指定するように構成された複数のプログラムを実行する少なくとも1つのコンピュータハードウェアプロセッサを使用することであって、複数のプログラムが複数のプログラミング言語を使用する、ことと、プログラムを解析することによって、複数のプログラムのそれぞれの第1のデータ構造を構築することと、を含む。複数の第1のデータ構造のそれぞれに対して、方法は、1つ以上のデータ要素への依存性に影響を与える第1のデータ構造に反映される動作を選択することと、選択された各動作に対して、選択された動作の指示を第2のデータ構造に記録することであって、指示が、全ての第2のデータ構造に共通する依存性構成要素のセットを使用して第2のデータ構造に記録される、ことと、を含むことができる。第2のデータ構造を処理することができ、処理は、複数のプログラムのうちのいずれかの実行中に生じ得る、データ要素に対する制御フロー又はデータフロー依存性を識別することを含む。識別された依存性は、依存性データ構造に記録することができる。
【0011】
幾つかの実施形態は、データ処理システムと共に使用するための依存性アナライザの動作方法を提供することができ、方法は、データ処理システム内でプログラミング言語でのデータ処理動作を指定する複数のプログラムを実行する少なくとも1つのコンピュータハードウェアプロセッサを使用することであって、複数のプログラムが複数のプログラミング言語を使用する、ことと、プログラムを解析することによって、複数のプログラムのそれぞれの第1のデータ構造を構築することと、を含む。複数の第1のデータ構造のそれぞれに対して、方法は、1つ以上のデータ要素への制御フロー依存性に影響を与える第1のデータ構造に反映される動作を選択することを含んでもよい。選択された各動作に対して、選択された動作の指示は、第2のデータ構造に記録されてもよく、指示は、全ての第2のデータ構造に共通する依存性構成要素のセットを使用して第2のデータ構造に記録される。第2のデータ構造を処理することができ、処理は、複数のプログラムのいずれかにおける処理の結果として、データ要素への依存性を識別することを含む。依存性データ構造内の識別された依存性。
【0012】
また更なる実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに、それぞれのプログラミング言語でのデータ処理動作を指定する複数のプログラムに対してアクトを実行させ、ここで複数のプログラムが複数のプログラミング言語を使用する、プロセッサ実行可能命令を保存する少なくとも1つの非一時的コンピュータ可読記憶媒体を提供することができる。アクトは、プログラムを解析することによって、複数のプログラムのそれぞれの第1のデータ構造を構築することを含む。複数の構築された第1のデータ構造のそれぞれに対して、1つ以上のデータ要素への制御フロー又はデータフロー依存性に影響を与える第1のデータ構造に反映される動作を第1のデータ構造から抽出でき、抽出した動作を第2のデータ構造に記録することができ、抽出された動作の指示が、全ての第2のデータ構造に共通する依存性構成要素のセットを使用して第2のデータ構造に記録される。第2のデータ構造を処理することができ、処理は、複数のプログラムのいずれかにおける処理の結果として、データ要素への依存性を識別することを含む。識別された依存性は、依存性データ構造に記録され得る。
【0013】
更に他の実施形態は、データ処理システムで使用するための依存性アナライザを提供することができ、依存性アナライザは、複数のプログラムのそれぞれを表す第1のデータ構造を構築するための手段であって、第1のデータ構造が複数のプログラムのそれぞれのプログラムにおける動作を反映する、手段と、依存性に影響を与えない、複数の構築された第1のデータ構造のそれぞれにおける動作に関する情報が第2のデータ構造から省略されるように、制御フロー又はデータフロー依存性に影響を与える第1のデータ構造における動作の指示を第2のデータ構造に記録するための手段と、第2のデータ構造を処理して、複数のプログラムのいずれかにおける動作の実行の結果としてデータ要素に対する制御フロー又はデータフロー依存性を識別するための手段と、識別された依存性を依存性データ構造に記録するための手段と、を備える。
【0014】
上記は、添付の特許請求の範囲によって定義される本発明の非限定的概要である。
【0015】
以下の図面を参照して、様々な態様及び実施形態を説明する。これらの図面は、必ずしも一定の縮尺で描かれていないことが理解されるものとする。複数の図面に現れるアイテムは、それらが現れる全ての図面において、同じ又は類似の参照番号で示される。
【図面の簡単な説明】
【0016】
【
図1A】
図1Aは、本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境のブロック図である。
【
図1B】
図1Bは、依存性情報を計算する処理の機能ブロック図である。
【
図2】
図2は、本明細書に記載の技術の幾つかの実施形態に係る、例示的な導出データリネージの例示的なグラフィカル表現である。
【
図3A】
図3Aは、依存性メタデータ構造を生成する、言語に依存するフロントエンド処理の機能ブロック図である。
【
図3B】
図3Bは、コンピューティングプログラムの一部の概念スケッチである。
【
図3C】
図3Cは、解析ツリーとしての、
図3Bのプログラムの一部の表現の概念スケッチである。
【
図3D】
図3Dは、解析ツリーから抽出された依存性情報の概念スケッチである。
【
図4】
図4は、依存性メタデータ構造を生成する、言語に依存しないバックエンド処理の機能ブロック図である。
【
図5】
図5は、本明細書に記載の技術に係る、依存性メタデータ構造を生成する処理のフローチャートである。
【
図6】
図6は、本明細書に記載の処理が実行され得るコンピューティングシステムの機能ブロック図である。
【発明を実施するための形態】
【0017】
本発明者らは、データ処理システムの精度、効率、及び信頼性が、データ処理システム用のプログラムを表すソースコードを、データ依存性を表す言語に依存しない構成要素の組み合わせに自動的に変換することによって改善できることを認識及び理解した。プログラム用に生成された構成要素は、グラフ又は他の形式で表現されるかどうかにかかわらず、異なる言語で準備されたプログラムを含むシステムの一部、及び潜在的にシステム全体の依存性をキャプチャするデータ構造に結合することができる。次いで、そのデータ構造を処理して、グラフ及び1つ以上の他の言語などの複数の言語でコーディングされたプログラムを含む、システムの依存性情報を生成することができる。そのようなアプローチは、データ処理システムによって管理されるデータのより完全な依存性情報を生成する、改善された依存性分析ツールにつながる。
【0018】
幾つかの実施形態では、依存性を表すために構成要素のセットが使用されてもよい。本発明者らは、データ処理システム内のデータ要素への依存性に関する有用な情報が、依存性構成要素の有限なセットによって表され得ることを認識及び理解した。この構造要素のセットには、例えば、割り当て、プロシージャ定義、プロシージャリターン、プロシージャコールサイト、「if…else」フォーマットの条件付き制御フロー、及び「while…do」フォーマットの条件付き制御フローを表す構成要素が含まれ得る。幾つかの実施形態では、依存性構成要素のセットは、このセットで構成されるか、本質的にこのセットで構成されるか、定数値の割り当てなど、これらの構成要素のバリエーションのみを含む。
【0019】
本発明者らは、プログラムの一部を表すソースコードの自動処理が複数の段階で効率的に実行され得ることを更に認識及び理解した。第1段階の処理では、ソースコードを解析できる。解析したソースコードは、解析ツリーなど、コンピュータで操作できる第1のデータ構造で表すことができる。幾つかの実施形態では、第1段階の処理は、パーサジェネレータなどの市販ツールを使用して実行することができる。市販のパーサジェネレータの例は、Yacc及びANTLRである。これらはいずれも、プログラミング言語の文法を指定する文法ファイルからパーサを生成する。
【0020】
パーサは言語に依存し、多くの場合、パーサジェネレータによって、言語の文法ルールから生成される。従って、複数の言語で記述されたプログラムの依存性を識別するように構成されたデータ処理システムは、複数のパーサ及び/又は複数のパーサを生成するパーサジェネレータを含むことができる。従って、データ処理システムは複数のパーサにアクセスでき、プログラムが記述されているプログラミング言語に基づいて各プログラム用のパーサを選択し、必要に応じて生成することができる。
【0021】
第2段階の処理では、解析ツリー又は第1段階で生成された他のデータ構造から、依存性に関する情報を抽出することができる。その依存性情報は、構成要素の組み合わせとして表現できる。構成要素は、上述のセットから、又は構成要素の他の適切なセットから選択されてもよい。処理の結果は、第2のコンピュータデータ構造で表現することができ、これはツリーとしてフォーマットすることもできる。しかしながら、第2段階の処理の結果は、プログラム内のデータ要素又はプログラムによってアクセスされるデータ要素に基づいて、依存性に影響を与え得るプログラムによって実行される動作に関する情報を保持する任意のデータ構造に保存できることを理解されたい。
【0022】
第2段階の処理もまた、言語に依存する。異なる言語は異なる動作をサポートすることができ、異なる方法で依存性に影響を与え得る。従って、第1のデータ構造のそれぞれに適用されるツールを、処理されているプログラムのプログラミング言語に対して選択することができる。例えば、データ処理システムには、第2段階の処理用の複数のツールがあり、各プログラム用に適切なツールを選択することができる。選択は、ツールを、処理中のプログラムが記述された言語に一致させるために、データ処理システムによって動的に行われ得る。
【0023】
第2段階の処理用のツールのそれぞれは、任意の適切な方法で実装されてもよい。幾つかの実施形態では、各ツールは、第1のデータ構造において、データ要素に基づいて依存性に影響を与える動作を認識するようにプログラムされてもよい。これらの依存性はしばしば、ターゲット変数と呼ばれる場合もある1つのプログラム変数、ソース変数と呼ばれる場合もある1つ以上の他のプログラム変数となる。このタイプのデータフロー依存性は、ここでは例として使用されている。しかしながら、他のタイプの依存性が可能であり、それらが本明細書に記載される技術を使用して分析され得ることを理解されたい。例えば、制御フロー依存性もまた可能であり、コードブロックの実行が1つ以上のデータ要素の値に依存する。
【0024】
第1のデータ構造が解析ツリーである例では、ツールは、解析ツリーを横断して、第2のデータ構造を生成することができる。依存性に影響を与える動作を検出すると、ツールは、構成要素のセットから1つ以上の構成要素を使用して、第2のデータ構造にエントリを作成することができる。この例では、動作の順序を反映した階層情報を、第2のデータ構造に引き継ぐことができる。ツールは、依存性に影響を与えない第1のデータ構造に反映される動作に対して、第2のデータ構造にエントリを作成しない場合がある。このように、第2のデータ構造は、第1のデータ構造よりもコンパクトである。
【0025】
いったん第2のデータ構造が各プログラムに対して計算されると、データ処理システムで一緒に使用されるプログラム用の第2のデータ構造を、一緒に使用できる。第2のデータ構造は、どの変数が他の変数に依存しているかを識別することができる。この情報は、依存性を導入する各動作、動作によって影響を受けるターゲット変数、及びその変換で使用されるデータの取得元のソース変数を定義する変換として表すことができる。
【0026】
システムの依存性を表す第2のデータ構造は、依存性分析ツールで処理できる。第2のデータ構造に記録された各ターゲットを識別し、そのターゲット対するソース変数をリストにすることができる。幾つかの実施形態によれば、プログラムは、関数、又はコードの内部ブロックを定義する他の構成要素が、プログラム内、又はコードの外部ブロックを定義する他の構成要素内で定義されるときに発生し得るような、ネストされた範囲を有し得る。幾つかの実施形態では、依存性がデータ処理システムによって出力又は変更される変数に影響を与えないように、依存性は内部範囲内にのみ存在してもよい。幾つかの実施形態では、そのような純粋にローカルな依存性を削除して、外部依存性情報のみを残すことができる。
【0027】
幾つかの実施形態では、第1の外部変数はローカル変数に依存してもよく、ローカル変数は1つ以上の第2の外部変数に依存してもよい。このシナリオでは、1つ以上の第2の外部変数に対する第1の外部変数の間接的な依存性が、第2段階の処理で特定されてもよい。そのような識別は、依存性分析ツールにローカル依存性を伝播させ、内部変数に対する第1の外部変数の依存性を、ローカル変数が依存する1つ以上の第2の外部変数の依存性として再キャストすることによって、自動的に行うことができる。
【0028】
特定のコンテンツに関係なく、データ依存性に関するこの情報は、データ処理システムで使用されるメタデータリポジトリなどのメタデータ構造内に書き込むことができる。情報は、他の適切な情報と組み合わせて書き込むことができる。幾つかの実施形態では、例えば、プログラムのソースコードに関する情報は、そのプログラムの依存性を特徴付ける情報と一緒にキャプチャされてもよい。特定の例として、依存性が作成されるステートメントを含むコードの一部を保存することができる。
【0029】
幾つかの実施形態で任意選択的に保存され得る他のタイプの情報の例として、制御依存性に関する情報が保存され得る。制御依存性は、1つ以上の変数の値に応じて条件付きで実行されるプログラムのブロックを識別することによって識別できる。この情報は、データ依存性情報と類似的にキャプチャできるが、他のソース変数に直接依存するターゲットエンティティとして変数を記録するよりも、むしろ、コードブロックを1つ以上のフロー制御ソース変数に依存するものとして識別することができる。そのコードブロックが実行されるかどうかに依存し得る値を有する任意の変数は、ターゲット変数として識別され、それらのフロー制御ソース変数に関連付けられ得る。
【0030】
依存性情報は、多くの方法のうちのいずれかで使用できる。例えば、データ処理システムの動作中に、特定のデータの処理動作を有効化又はブロックし得るルールを評価する際に、依存性情報を使用することができる。一例として、破損した、又は信頼できないと識別されている変数に依存するデータを入力として受信する動作は、抑制されてもよい。
【0031】
本明細書に記載の実施形態は、多数のやり方のいずれで実施されてもよいことが理解されるものとする。単なる説明目的で、具体的な実施の例を以下に提供する。これらの実施形態及び提供される特徴/機能は、個々に、全て一緒に、又は2つ以上の任意の組み合わせで使用されてもよいことが理解されるものとする(本明細書に記載される技術の態様は、この点において限定されない)。
【0032】
図1Aは、本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境100のブロック図である。コンピューティング環境100は、データ記憶装置104に保存されたデータに対して動作するように構成されたデータ処理システム105を包含する。
【0033】
幾つかの実施形態では、データ記憶装置104は、任意の適宜のタイプの1つ又は複数のフォーマットでデータを保存する1つ又は複数のストレージデバイスを包含してもよい。例えば、データ記憶装置104のストレージデバイス部分は、1つ又は複数のデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、及び/又は任意のその他の適宜のフォーマット(例えば、メインフレームのネイティブフォーマット)のファイルを使用して、データを保存してもよい。ストレージデバイスは、任意の適宜のタイプのものでよく、及び1つ又は複数のサーバ、1つ又は複数のデータベースシステム、1つ又は複数のポータブルストレージデバイス、1つ又は複数の不揮発性ストレージデバイス、1つ又は複数の揮発性ストレージデバイス、及び/又はデータを電子的に保存するように構成された、任意のその他のデバイスを包含してもよい。幾つかの実施形態では、データ記憶装置104は、ストレージデバイスに加えて、又はそれに代えて、1つ又は複数のオンラインデータストリームを包含してもよい。従って、幾つかの実施形態では、データ処理システム105は、任意の適宜のフォーマットで、1つ複数のデータストリーム上で提供されるデータへのアクセスを有していてもよい。
【0034】
データ記憶装置104が複数のストレージデバイスを包含する実施形態では、ストレージデバイスは、1つの物理的場所で(例えば、ある建物内で)同一場所に配置されてもよく、又は複数の物理的場所にわたり(例えば、複数の建物内で、異なる市、州、又は国で)分散されてもよい。ストレージデバイスは、例えば、
図1Aに示されるネットワーク106などの1つ又は複数のネットワークを使用して、互いに通信するように構成されてもよい。
【0035】
幾つかの実施形態では、ストレージデバイスによって保存されたデータは、1つ又は複数のファイル、テーブル、テーブルの行及び/又は列のデータ、スプレッドシート、データセット、データレコード(例えば、クレジットカード取引記録、通話記録、及び銀行取引記録)、フィールド、変数、メッセージ、及び/又はレポートなどの1つ又は複数のデータエンティティを包含してもよい。ストレージデバイスは、数千、数百万、数千万、又は数億のデータエンティティを保存してもよい。各データエンティティは、1つ又は複数のデータ要素を包含してもよい。
【0036】
本明細書で説明するように、データ要素は、データ処理システムによって保存及び/又は処理される、どのようなデータ要素であってもよい。例えば、データ要素は、データレコードにおけるフィールドであってもよく、及びデータ要素の値は、データレコードのフィールドに保存された値であってもよい。具体的な非限定例として、データ要素は、通話に関する情報を保存するデータレコード(このデータレコードは、電気通信会社の顧客によって行われた通話に関する複数のデータレコードの一部であってもよい)における発信者の名前を保存するフィールドであってもよく、及びデータ要素の値は、フィールドに保存された値であってもよい。別の例として、データ要素は、テーブルにおけるセル(例えば、テーブルのある特定の行及び列に存在するセル)であってもよく、及びデータ要素の値は、テーブルのセルの値であってもよい。別の例として、データ要素は、変数(例えば、レポートにおける)であってもよく、及び物理的要素の値は、変数(例えば、レポートのある特定のインスタンスにおける)の値であってもよい。具体的な非限定例として、データ要素は、銀行ローンの申込者のクレジットスコアを表す申込者に関するレポートの変数であってもよく、及びデータ要素の値は、クレジットスコアの数値(例えば、300~850の数値)であってもよい。申込者のクレジットスコアを表すデータ要素の値は、銀行ローンの申込者に関するレポートを生成するために使用されたデータに応じて変化し得る。
【0037】
幾つかの実施形態では、データ要素は、任意の適宜のタイプの値をとってもよい。例えば、データ要素は、数値、アルファベット値、選択肢の離散セット(例えば、カテゴリの有限セット)からの値、又は任意のその他の適宜のタイプの値をとってもよく、本明細書に記載の技術の態様は、この点において限定されない。これらの値は、データストア104にアクセスするコンピュータでの処理によって割り当てることができる。
【0038】
データ処理システム105は、「協調システム」、又はデータ処理システムがプログラムを実行することを可能にする他の適切なプログラムでプログラムされてもよく、企業が必要とするデータ処理のタイプに基づいて、特定の企業用にデータ処理システム105を構成するように記述されてもよい。従って、データ処理システム105は、データ記憶装置104のデータに対して動作するように構成された1つ又は複数のコンピュータプログラム109を包含してもよい。コンピュータプログラム109は、任意の適宜のタイプのものでよく、及び任意の適宜のプログラミング言語で書かれていてもよい。例えば、幾つかの実施形態では、コンピュータプログラム109は、少なくとも部分的に構造化照会言語(SQL)を用いて書かれ、及びデータ記憶装置104の1つ又は複数のデータベース部分のデータにアクセスするように構成された1つ又は複数のコンピュータプログラムを包含してもよい。別の例として、幾つかの実施形態では、データ処理システム105は、グラフの形式でプログラムを実行するように構成され、及びコンピュータプログラム109は、データフローグラフとして開発された1つ又は複数のコンピュータプログラムを含んでもよい。データフローグラフは、入力データに対して行われるデータ処理動作を表す、「ノード」又は「節点」と呼ばれるコンポーネント、及びデータのフローを表すコンポーネント間のリンクを包含してもよい。データフローグラフによってエンコードされる計算を実行する技術が、本明細書において、その全体が援用される、「グラフとして表現される計算の実行」というタイトルの米国特許第5,966,072号明細書に記載されている。
【0039】
更に、データ処理システム105は、本明細書で説明される依存性分析機能を実行するツール及び/又はユーティリティを含んでもよい。
図1Aの図示された実施形態において、データ処理システム105は、データ記憶装置104のデータに対して動作するコンピュータプログラム109の1つ又は複数を開発するために、人(例えば、開発者)によって使用され得る開発環境108を更に包含する。例えば、幾つかの実施形態では、ユーザ102は、コンピューティングデバイス103を使用して、データフローグラフなどのコンピュータプログラムを指定し、及びそのコンピュータプログラムをコンピュータプログラム109の一部としてセーブするために開発環境とインタラクトすることができる。データフローグラフとしてコンピュータプログラムを開発するための環境が、本明細書において、その全体が援用される、「グラフベースのアプリケーションのパラメータ管理」というタイトルの米国特許出願公開第2007/0011668号明細書に記載されている。依存性分析ツールは、開発環境において、ユーザ102などの開発者がアクセスするか、又は任意の他の方法でアクセスできる。
【0040】
幾つかの実施形態において、コンピュータプログラム109の1つ又は複数は、データ記憶装置104のデータに対する任意の適宜の動作を行うように構成されてもよい。例えば、コンピュータプログラム109の1つ又は複数は、1つ又は複数のソースからのデータにアクセスし、アクセスされたデータを変換し(例えば、データ値を変更すること、データレコードをフィルタリングすること、データフォーマットを変更すること、データを分類すること、複数のソースからのデータを組み合わせること、データを複数の部分に分割することによって、及び/又は任意のその他の適宜のやり方で)、アクセスされたデータから1つ又は複数の新しい値を計算し、及び/又はデータを1つ又は複数の宛先に書き込むように構成されてもよい。
【0041】
幾つかの実施形態において、コンピュータプログラム109の1つ又は複数は、データ記憶装置109のデータに対して計算を行い、及び/又はデータ記憶装置109のデータからレポートを生成するように構成されてもよい。行われた計算及び/又は生成されたレポートは、ビジネスに関連した1つ又は複数の量と関係してもよい。例えば、コンピュータプログラムは、ある人に関するクレジット履歴データにアクセスし、及びクレジット履歴に基づいて、その人のクレジットスコアを決定するように構成されてもよい。別の例として、コンピュータプログラムは、電話会社の複数の顧客の通話ログにアクセスし、及びそれらの顧客の内の何人が、自身のデータプランに許容されるよりも多くのデータを使用するかを示すレポートを生成することができる。更に別の例として、コンピュータプログラムは、銀行によって行われたローンのタイプを示すデータにアクセスし、及び銀行によって行われたローンの総合的なリスクを示すレポートを生成することができる。コンピュータプログラムは、データ記憶装置104に保存されたデータから任意の適宜の情報(例えば、任意の適宜のビジネス目的のために)を生成するように構成することができるので、これらの例は、説明のためのもの、及び非限定的なものである。プログラム109は、例えば、データ処理動作からビジネス情報を得るために、ユーザ130によって呼び出されてもよい。
【0042】
図示の実施形態では、データ処理システム105はまた、プログラム及びデータガバナンスの維持に関連するタスクを含む、システム105の動作中に発生し得る様々なタスクのパフォーマンスをサポートするメタデータリポジトリ110を含む。図示された実施形態では、メタデータリポジトリ110は、データ依存性モジュール118、制御依存性モジュール120、及びコードサマリ122を含む。データ依存性、制御依存性、及びコードサマリに関する情報は、それぞれ、本明細書で説明するように取得することができる。この情報は、任意の適切なフォーマットで保存できる。非限定的な例として、データ依存性モジュール118は、コンピュータプログラム109の複数の変数のそれぞれに対して、依存性が存在するコンピュータプログラムの他の変数を示す1つ以上のテーブルを備えてもよい。制御依存性モジュール120は、1つ以上の変数の値に応じて、条件付きで実行されるプログラム109のコードブロックの実行により潜在的に影響を受ける値を有する変数に関する情報を、類似的に保存することができる。
【0043】
コードサマリモジュール122は、データ又は制御依存性のいずれかの依存性が導入されるプログラム109にコードの一部を保存することができる。コードサマリは、関連するソースコードのコピー、又は関連するコードを含むソースコードファイルの一部へのポインタを保存することにより、コードを識別することができる。コードは、ソースコードのコピーによって、又は関連コードを含むソースコードファイルの一部へのポインタによってなどの適切な方法で識別することができる。
【0044】
図1Bは、依存性情報を生成するために実行され得る処理を示している。
図1Bは、
図1Bでプログラム150、160、170として示されている複数のプログラムを処理して、依存性情報を識別できることを示している。これらのプログラムは、データ処理システムをまとめて制御して、1つ以上のデータソースからのデータを処理することができる。プログラムは、異なるプログラミング言語で記述されていてもよい。
図1Bの例では、プログラム150は言語1で記述されて示され、プログラム160は言語2で記述され、プログラム170は言語Nで記述されてもよい。しかしながら、全ての言語が異なる必要はなく、幾つかの実施形態では、複数のプログラムの一部又は全てが同じ言語で記述されてもよい。特定の例として、プログラムの一部は、データベース内のデータを処理するために実行され得るなどのストアドプロシージャコールとして記述されてもよい。他のものはグラフィカルプログラミング言語で記述されてもよく、他のものは更に他の言語で記述されてもよい。
【0045】
プログラムが記述されている言語の組み合わせに関係なく、各プログラムは、言語に依存する処理を使用して処理することができる。
図1Bでは、言語に依存する処理はフロントエンドモジュール152、162、及び172で実行され、その各モジュールは、それぞれの言語でプログラムを処理するように構成されている。
【0046】
各フロントエンドモジュールの出力は、プログラムを用いた処理によって導入された依存性を反映した依存性データ構造であってもよい。
図1Bに示されるように、各フロントエンドは、それ自体の依存性データ構造を出力することができ、これはより下位の解析ツリー154、164及び174であり得る。例えば、プログラムを解析して解析ツリーを生成し、次いで解析ツリーをより下位にして依存性に関連のない情報を除外することにより、下位の解析ツリーを作成することができる。幾つかの実施形態によれば、下位の解析ツリーは、依存性構成要素の有限セットを使用して表されてもよい。各解析ツリーは、言語に依存しない依存性構成要素により言語に依存しない解析ツリーにおける依存性情報を表すことによって、下位にすることができるため、下位の解析ツリー154、164、及び174は、言語に依存しない場合がある。
【0047】
次いで、下位の解析ツリーは一緒に処理されて、データ処理システムによって実行され得るプログラム150、160、170の全てに対して依存性情報を生成することを可能にする。この処理は、バックエンド180で実行できる。バックエンド処理は言語に依存しなくてもよく、そのシステムのプログラムが記述されている言語に関係なく、任意のデータ処理システムにおいてバックエンド180を使用することができる。
【0048】
バックエンド180で生成された依存性情報は、任意の望ましい方法で使用することができる。
図1Aの実施形態では、依存性情報は、メタデータリポジトリ110として機能するデータストアに保存される。メタデータリポジトリ110は、任意の適切な方法で実装され得る。そのようなリポジトリの例は、例えば、米国特許付与前公開第2010/0138431A1号明細書に見出すことができ、その全体が本明細書に組み込まれる。そのようなメタデータリポジトリは、データ処理システムを集合的に実装するプログラムのいずれかに導入された依存性情報を保持することができる。その依存性情報は、複数のプログラム内のデータ要素を示すデータを含むことができ、データ要素間の依存性を示すように構成することができる。例えば、依存性情報は一連のリストとして構造化されてもよく、各リストはターゲットデータ要素に関連付けられ、ターゲットが依存し得るソースデータ要素であるエントリを含む。そのような情報は、代替的又は追加的に、各行及び列が変数に対応し、各行及び列の交点にあるセルが行変数と列変数との間に依存性があるかどうかを示すテーブルとして保存され得る。幾つかの実施形態では、各セルの情報は、それがデータフロー依存性か若しくは制御フロー依存性か、又は依存性に関する追加情報にアクセスできるかなどの、依存性に関する情報を更に示してもよい。
【0049】
メタデータリポジトリ110内の情報は、任意の適切な方法で使用することができる。例えば、コンピュータプログラム109を動作又は維持する際に使用することができる。特定の例として、プログラマ102は、第1の変数の値に影響を与えるコンピュータプログラム109のうちの1つの一部を変更してもよい。プログラマ102は、メタデータリポジトリ110内の情報に基づいて、その第1の変数に依存する変数でコンピュータプログラム109の他の部分を特定することができる。プログラマ102は、これらの部分をテストして、変更によってそれらの動作が中断されなかったことを確実にすることができる。別の例として、コンピューティングデバイス134を介してシステムと対話するデータ処理システム105のユーザ130は、データ処理システム105によって生成されたレポート内のデータを分析することができる。例えば、ユーザ130は、レポートに提示された計算値の有効性に疑問を呈することができ、メタデータリポジトリ110内の情報にアクセスして、疑問のある値を計算するのに使用されるデータのソースを識別することができる。次いで、ユーザ130は、これらのデータソースの品質を調査し、それによってレポート内のデータの品質を検証することができる。メタデータリポジトリ内の情報は、例えばツールを呼び出すことにより、自動的にアクセス及び処理することができる。
【0050】
リポジトリ110におけるメタデータの使用方法に関係なく、たとえ複数の異なるプログラミング言語で記述されたプログラムがある場合でも、データ処理システム105がそのメタデータを生成できるようにすることにより、データ処理システム105の信頼性を増大し、データ処理システム105が新しい機能を実行することを可能にし得る。
【0051】
これらの機能は、データリネージにアクセスすることにより、全体的又は部分的に有効にすることができる。データリネージは、データ処理システム内で、特定の変数の値を生成するために使用されるデータが取得又は処理される場所を示す。
図2は、例示的なプログラムされたデータ処理システムのデータリネージ
図200である。本明細書で説明するように、データリネージ及びその図は、依存性を識別することによって生成することができる。データリネージ
図200は、データエンティティを表すノード202、及びデータエンティティに適用された変換を表すノード204を包含する。
【0052】
データエンティティは、例えば、ファイル、データベース、又は任意の適切な方法でフォーマットされたデータなどのデータセットであり得る。幾つかの実施形態では、データエンティティは「フィールド」であってもよく、これは特定のデータストアからアクセスされる要素であってもよい。例えば、セルが行と列に構成されたテーブルとしてフォーマットされたデータストアでは、フィールドがセルであってもよい。別の例として、複数のレコードとして構成されたデータベースでは、フィールドはレコード内のフィールドであってもよい。データ処理システムによってアクセスされるデータストアの特定の構成に関係なく、データ処理システムを実装するプログラムは、データ処理システムを実装するプログラムでそれらのフィールドが参照されるように、それらのフィールドから読み取り及び/又は書き込みを行うことができる。従って、それらのプログラムは、それらのフィールドに関連する依存性を作成し、一部のフィールドは、他のフィールドの値に依存する値を有する。幾つかの実施形態では、本明細書で説明する依存性アナライザは、フィールドに関連する依存性情報を計算及び保存し、その情報は、特定のフィールドの値によって影響を与える又は影響を与えられ得るプログラムのうちのいずれかで導入された依存性を反映することができる。このフィールドレベルの依存性情報により、データ処理システムをプログラムできる複数のコンピュータプログラミング言語のうちのいずれかで、依存性アナライザが、プログラム全体のフィールドレベルリネージに関する情報を提供することが可能になる。
【0053】
図2は、同じシンボルを有する各ノード202を示しているが、ノードの全てが同じタイプである必要はない。反対に、現代の企業では、ノード202は、ORACLE、SAP、又はHADOOPのコンポーネントを使用している企業から生じ得るなどの、異なるタイプのものであり得る。ORACLE又はSAPからのコンポーネントは、当該技術分野で既知のデータベースを実装してもよい。HADOOPのコンポーネントは、分散ファイルシステムを実装してもよい。HADOOP分散ファイルシステム上にある一般的なデータベースは、HIVEとして知られている。そのようなコンポーネントは、データベースの実装に使用し、又は分散ファイルシステムに保存されたデータセットの実装に使用できる。従って、本明細書で説明する技術は、多数のフォーマットのうちのいずれかでデータセットに対して動作を実行する多くの言語のプログラムで動作できることを理解されたい。
【0054】
更に、各ノードは、単一のハードウェアコンポーネントに対応する必要はない。むしろ、
図2において単一のノードとして表され得る幾つかのデータソースは、分散データベース技術で実装することができる。HADOOPは、1つのデータソースを複数のコンピュータハードウェアデバイスに実装できる分散データベーステクノロジーの一例である。
【0055】
ノード204によって表される変換は、コンピュータプログラムによって実装されてもよい。
図4ではノード204の全てが同じシンボルで示されているが、プログラムの全てが同じプログラミング言語で記述されている必要はない。反対に、使用される言語は、ノード204がデータを取得するノード202のタイプに依存してもよく、又は企業環境における幾つかの理由のうちのいずれかに対して、ノードごとに変化してもよい。本明細書で説明される技術は、そのような異種の環境に適用することができる。
【0056】
データリネージ
図200は、データエンティティ206における1つ又は複数のデータ要素に関する上流リネージ情報を図示する。変換を表すノードに入る矢印は、どのデータエンティティが、変換に対する入力として提供されるかを示す。データの変換を表すノードから出る矢印は、変換の結果がどのデータエンティティに提供されるかを示す。変換の例には、任意の適宜のタイプの計算を行うこと、データを分類すること、任意の適宜の基準に基づいて、データの1つ又は複数の部分を削除するためにデータをフィルタリングすること(例えば、1つ又は複数のデータレコードを削除するためにデータレコードをフィルタリングする)、データをマージすること(例えば、結合演算を使用して、又は任意のその他の適宜のやり方で)、任意の適宜のデータベース演算又はコマンドを行うこと、及び/又は上記の変換の任意の適宜の組み合わせが包含されるが、これらに限定されない。変換は、例として、及び限定ではなく、データフローグラフとして実施される1つ又は複数のコンピュータプログラムを包含する、任意の適宜のタイプの1つ又は複数のコンピュータプログラムを使用して実施されてもよい。
【0057】
図2に示す
図200などのデータリネージ図は、幾つかの理由により、有用となり得る。例えば、データエンティティと変換との間の関係を図示することは、ある特定のデータ要素がどのように取得されたか(例えば、レポート内のある特定の値がどのように計算されたか)をユーザが決定することを助けることができる。別の例として、データリネージ図を使用して、どの変換が、様々なデータ要素及び/又はデータエンティティに適用されたかを決定することができる。
【0058】
幾つかの実施形態では、データリネージは、データ要素、これらのデータ要素を含有するデータエンティティ、及び/又はデータ要素に適用された変換の間の関係を表すことができる。データ要素、データエンティティ、及び変換の間の関係を使用して、例えば、システム(例えば、1つ又は複数のコンピューティングデバイス、データベース、データウェアハウスなど)、及び/又はアプリケーション(例えば、データ処理システムによって管理されるデータにアクセスする1つ又は複数のコンピュータプログラム)などの他のものの間の関係を決定することができる。例えば、ある物理的場所に位置するシステム「A」に保存された、あるデータベースにおける、あるテーブルのあるデータ要素部分が、データリネージ内で、システム「B」に保存された別のデータベースにおける、別のテーブルの別のデータ要素部分から導出されると示される場合、システムAとシステムBとの間の関係を推論することができる。別の例として、アプリケーションプログラムが、あるシステムから1つ又は複数のデータ要素を読み取ると、このアプリケーションプログラムと、このシステムとの間の関係を推論することができる。更に別の例として、あるアプリケーションプログラムが、別のアプリケーションプログラムによって動作が行われたデータ要素にアクセスすると、これらのアプリケーションプログラム間の関係を推論することができる。これらの関係のいずれか1つ又は複数が、データリネージ図の一部として示されてもよい。
【0059】
図2は、依存先にリンクされたソースデータ要素が直接関連する状態で各ターゲットデータ要素が示される方法で、データリネージを示していることを理解されたい。それらのソースデータ要素は、他のデータ要素に依存する場合がある。ターゲットデータ要素のソースである各データ要素のソースデータ要素が、
図2に示すようにデータリネージを通じて依存性をトレースバックすることにより識別できるため、
図2に示すデータリネージの表現により、これらの間接的な依存性を識別することが可能になる。本明細書で説明する実施形態では、データリネージは、このトレースバックが間接的な依存性を識別することを可能にするような方法で保存することができる。しかしながら、幾つかの実施形態では、依存性情報は、間接的な依存性を識別及び保存することを含み得る任意の適切な方法で保存できることを理解されたい。
【0060】
データ処理システムが、多数のデータ要素(例えば、数百万、数十億、又は数兆のデータ要素)を管理できることも理解されたい。例えば、クレジットカードトランザクションに関連付けられたデータを管理するデータ処理システムは、年間数十億のクレジットカードトランザクションを処理でき、トランザクションのそれぞれには、例えば、クレジットカード番号、日付、販売者ID、購入量などの複数のデータ要素を含むことができる。従って、データリネージは、多数のデータ要素、それらのデータ要素を含むデータエンティティ、及び/又はデータ要素に適用される変換、の間の関係を表すことができる。データリネージには大量の情報が含まれる場合があるため、視聴者が消化できる方法でその情報を提示することが重要である。従って、幾つかの実施形態では、データリネージの情報は、粒度の異なるレベルで視覚化されてもよい。導出したリネージの情報を視覚化するための様々な技術と、データリネージを生成及び/又は視覚化するための技術の幾つかの側面が以下に説明されている。すなわち、(1)2009年12月2日に出願された「Visualizing Relationships Between Data Elements and Graphical Representations of Data Element Attributes」と題する米国特許出願第12/629,466号明細書、(2)2016年2月10日に出願された「Filtering Data Lineage Diagrams」と題する米国特許出願第15/040,162号明細書、(3)2015年7月22日に提出された「Data Lineage Summarization」と題する米国特許出願第14/805,616号明細書、(4)2015年7月20日に提出された「Managing Parameter Sets」と題する米国特許出願第14/803,374号明細書、及び(5)2015年7月20日に提出された「Managing Lineage Information」と題する米国特許出願第14/803,396号明細書であり、それぞれの全体が参照により組み込まれている。
【0061】
この情報がどのように使用されるかに関係なく、リネージ情報は、フロントエンドの、プログラミング言語に依存する処理、及びバックエンドの、プログラミング言語に依存しない処理を実装するツールによって、本明細書で説明されるプロセスに従って導出され得る。このアプローチにより、システムのプログラミングと処理の両方の要求が軽減される。例えば、多くの異なるプログラミング言語で実装されたプログラムにわたってバックエンド処理が共有され、システムの実装に必要なメモリ及び他のコンピューティングリソースの量を軽減することができる。フロントエンド処理は、言語固有であるが、コンパイラ、インタープリタ、又は他の既存ツール用に開発された既存のパーサ技術を活用することができる。
【0062】
図3Aは、フロントエンド処理の機能ブロック図である。
図3Aに示されるフロントエンド処理は、複数のプログラミング言語のいずれかにおけるソースコードを、依存性が言語に依存しない方法で表されるデータ構造に変換する。
図3Aは、プログラム310の処理を示す。プログラム310は、コンピュータプログラム109(
図1A)のうちの1つであってもよく、任意の適切なプログラミング言語で記述されていてもよい。
【0063】
プログラム310は、パーサ312への入力として提供される。パーサ312は、プログラム310が記述されている言語のプログラムコードを処理するように構成された既知の構造のパーサであってもよい。解析器312の出力は、解析ツリー314であってもよい。解析ツリー314は、既知のフォーマットであってもよく、プログラム310内のプログラムコードによって指定された動作を表してもよい。解析ツリー314は、プログラム310を表す第1のデータ構造として、コンピュータメモリに保存され得る。しかしながら、プログラム310に従って実行される動作は、任意の適切な方法で表され得ることを理解されたい。
【0064】
次いで、解析ツリー314は、抽出モジュール316によって処理され得る。抽出モジュール316は、パーサ312と同様に、プログラム310が記述されているプログラミング言語に特有のものであり得る。抽出モジュール316は、実行されると、解析ツリー314を表すデータ構造を横断して、データフロー又は制御フロー依存性のいずれかを作成できるプログラム310における動作を示す要素を識別することができる。そのような動作を検出すると、抽出モジュール316は、ここでは依存性データセット318として表される第2のデータ構造にエントリを作成することができる。
【0065】
抽出モジュール316は、少数の構成によりデータ及び制御フロー依存性を特定する目的で、依存性を導入し得るプログラムの動作のコレクションを一般的に表すことができるという発明者の洞察を適用することによって実装することができる。更に、依存性を導入し得るプログラミング言語によりサポートされる動作の数もまた有限であり、比較的少数である。従って、抽出モジュール316は、既知の技術を使用して解析ツリー314を横断して、プログラム310における依存性に影響を与えるそれぞれの動作を識別し、第2のデータ構造に依存性を表す情報を入力するように構成されてもよい。
【0066】
いったんそのような依存性に影響する動作が特定されると、抽出モジュール316は、特定された動作を表す1つ以上の依存性構成要素を選択することができる。そのような選択は、テーブルルックアップ、ヒューリスティック、又はその他の適切な技術を使用して行ってもよい。次いで、抽出モジュール316は、解析ツリー314で識別された動作のパラメータを使用して、依存性構成要素をパラメータ化することができる。
【0067】
特定の例として、抽出モジュール316が解析ツリー314で「追加」動作を識別する場合、その動作は依存性構成要素にマッピングされてもよい。この例では、「追加」動作には3つの変数「a」、「b」、及び「c」が含まれ、そのうち「a」は動作の出力であり、「b」及び「c」の値に依存する値を有する。それらの3つの変数は、依存性構成要素をパラメータ化する際に、抽出モジュール316によって使用され得る。例示的な一実施形態によれば、その依存性構成要素は、「割り当て」と呼ばれる場合がある。この例では、依存性構成要素は、ソース変数「a」及び「b」に依存する値がターゲット変数「a」に割り当てられていることを示し得る。
【0068】
幾つかの実施形態では、プログラムを実行する結果として変数間の依存性が存在するかどうかは、実行中のプログラムの変数に割り当てられた値に依存し得ることを理解されたい。しかしながら、簡単にするために、抽出モジュール316は、結果が1つ以上の他の変数の値に依存し得る任意の動作を、依存性に影響を与える動作として分類するように構成されてもよい。同様に、場合によっては、1つ以上の変数の値に基づいて、一部のシナリオではプログラムの一部が実行されない場合がある。それにもかかわらず、抽出モジュール316は、あらゆる状況下で、変数の値を実行又は発効し、それらの動作を依存性データセット318に記録することができる解析ツリー314の全ての動作を処理するように構成されてもよい。
【0069】
図3Aは、依存性データセット318が、複数の依存性構成要素320A、320B…320ZZを含むことを示している。各依存性構成要素は、プログラム310を特徴付ける有限数の依存性構成要素のうちの1つの形式であってもよい。
【0070】
以下に、これらの構造の例を提供する。幾つかの実施形態では、抽出モジュールは、これらの構造のサブセットを認識するようにプログラムされてもよい。他の実施形態では、以下の例は、抽出モジュールが認識する構成の有限セットを表す。他の実施形態では、依存性は他の方法で表現されてもよい。
【実施例】
【0071】
実施例1:「関数」
幾つかの実施形態によれば、関数を表すコードの一部は、以下のように現れてもよい。
【数1】
【0072】
このコードは、解析ツリーに変換されて処理された後、以下のように表現され得る。
【数2】
【0073】
実施例1は、プロシージャ定義として表現される単一の関数を示している。依存性の観点から、プロシージャは、範囲、入力、出力、又は双方向パラメータを有する。関数は、リターンパラメータを有するプロシージャである。
【0074】
「3:1 4:1」は、生成された構成要素のソースファイルにおける開始位置及び終了位置である。この情報は、依存性を生成したコードへのポインタとして機能でき、メタデータリポジトリ110に保存できるコードサマリを生成するために使用できる。代替的又は追加的に、抽出モジュールは、コード行をコピーすることによって、依存性を生じさせたソースコードに関する情報をキャプチャすることができる。幾つかの実施形態によれば、抽出モジュールは、ポインタ、ソースコードのコピー、又は何らかの他の方法で、依存性が作成されるコードサマリのみを示すようにプログラムされてもよい。割り当てが行われるコード行、それに加えて割り当てを含むその行の前及び/又は後の1行若しくは有限数の行を選択するによってなど、任意の適切な方法で、コードをサマライズすることができる。コードサマリに必要なストレージ容量を低減するために、他のルールを抽出モジュール内にコーディングすることができる。例えば、コード行の演算子のみをコピーしたり、又はコードブロック内のターゲット変数を明示的に参照する行のみをコピーしたりすることができる。
【0075】
実施例2:割り当て
第2の実施例として、動作に影響する以下の依存性が、ソースコード内に現れてもよい。
【数3】
【0076】
フロントエンド処理を通じて、その動作が以下のような依存性構成要素として表現されてもよい。
【数4】
【0077】
この実施例及び他の実施例では、角括弧が依存性リストに使用され、括弧がパラメータ及び引数リストに使用されている。波括弧は、範囲に使用されている。例えば、「y[x]」は単一の依存性を示し、「y」が「x」に依存している。本明細書の例として提供される依存性構成要素のセットを構成する言語では、依存性は常に、単一のターゲット要素(この場合は「y」)、及びソース要素リストを有する。この実施例では、ソース要素リストは「[x]」であり、1つの要素「x」で構成されている。この実施例では、後の処理段階でソースコードサマリを生成するためのソースコードへのポインタも示されている。ここでは、ソースコードの関連部分は「21:1 23:1」及び「22:5 22:11」として示されており、これは、対応する依存性を作成するソースコードステートメントが見つけ出され得るソースコードファイル内の行へのポインタであり得る。
【0078】
この実施例はまた、データ要素、すなわち「x」及び「y」も示している。これらの要素は、基本/最低レベル/原子フィールドを表す。この実施例では、要素のソースリストに「x」が現れ、「y」が(唯一の)ターゲット要素である。
【0079】
パラメータ/引数の方向性の知識は、依存性分析で使用できる。従って、依存性構成要素はまた、方向性を表す場合がある。3つのタイプ、すなわちIN、OUT、INOUTが存在する。この実施例の言語では、方向性が言及されていない場合、INが暗示される。
【0080】
この構文により、依存性構成要素が人に読めるようになることを理解されたい。本明細書で説明される処理は自動化され得るため、依存性構成要素を人が読み取り可能であることは本発明の要件ではない。従って、依存性構成要素を表す任意の情報をコンピュータのメモリに保存し、依存性構成要素を識別するために使用することができる。
【0081】
実施例3:リターン
リターンされる変数の値は、その関数の処理で使用される変数を含む、関数内の処理に依存し得るため、変数の値をリターンする関数はまた、依存性を作成する場合がある。
関数
【数5】
は、以下の依存性構成要素によって表現され得る。
【数6】
【0082】
「_RETURN」は、関数によってリターンされる名前のないエンティティを指定するために使用される特別なデータ要素名である。この実施例は、明示的に宣言された変数以外のデータ要素が、依存性を有するか又は作成する場合があることを示す。本明細書で説明する処理では、作成方法に関係なく、データ要素を処理することができる。「_RETURN」はローカルデータ要素の例であり、プログラム内でのみ意味を有する。しかしながら、ローカルデータ要素でさえ、「グローバル変数」への割り当てに使用でき、プログラムの一部の実行を制御でき、又はデータフロー若しくは制御フロー依存性を作成する他の方法で使用することができる。「_RETURN」の値が他のデータ要素に依存する場合、それらの依存性は、次いで「グローバル変数」に影響を与えるか、そうでなければ記録される依存性を作成し得る。従って、「_RETURN」は、作成される最終的なメタデータストアに含まれる必要はないが、本明細書で説明される実施形態では、依存性を識別する際に考慮されてもよい。
【0083】
この実施例では、関数は単一の値のみを返す。関数が複数の値を返す場合、「_RETURN」構成要素は、2つ以上の値に対応するために変更されてもよい。更に、他の依存性構成要素を表すために使用される構文と同様に、「_RETURN」はシンボルとして機能し、ここでは人が読みやすいようにフォーマットされていることを理解されたい。データ処理システムに実装される場合、任意の適切なシンボルを使用することができる。
【0084】
実施例4:定数割り当て
定数割り当てを含むコード内の依存性は、以下などである。
【数7】
は、以下のように表現し得る。
【数8】
【0085】
この実施例では、「_declare」及び「_CONST」は、「_RETURN」シンボルのような他の特別な要素のシンボルである。依存性構成要素には、定数変数「u」及び「v」の値に関する情報は含まれていないことに留意されたい。依存性を分析するために、そのような情報は必要ではなく、省略することができる。
【0086】
幾つかの実施形態では、構成要素「_CONST」は省略し得るが、幾つかの実施形態では、人が1つ以上のプログラムを表す依存性構成要素のコレクションを理解するのをより容易にし、それらの構成要素を含むデータ構造のコンピュータ処理を簡素化できるために含まれてもよい。
【0087】
実施例5:コールサイト
関数へのコールを含むコード内の依存性は、以下のように定義される。
【数9】
は、以下の依存性構成要素によって表わされ得る。
【数10】
【0088】
この実施例には、プロシージャ又は関数コールサイトが含まれる。引数は、コールサイトにおいてプロシージャに提供される。引数として機能するデータエンティティは、呼び出されたプロシージャ内の処理がこれらの引数に依存し得るように、他のデータ要素の値に影響を与えてもよい。
【0089】
この実施例では、データエンティティ「u」及び「v」には、定数値が割り当てられている。従って、それらの引数に基づくプロシージャ内の処理は、一定の結果を生み出し、「u」及び「v」への依存性を示すことなく、依存性構成要素にキャプチャされ得る。幾つかの実施形態では、依存性情報は2段階プロセスで生成され、第1段階は言語に依存する処理を含み、第2段階は言語に依存しない処理を含み得る。
【0090】
本明細書で説明する幾つかの例示的な実施形態では、第2段階の処理においてローカル変数への依存性を識別及び除外することができ、その結果、関数内部のみの範囲、又はプログラム内部の他のコードブロックを有するローカル変数ではなく、外部変数の観点から最終的な依存性情報が表現される。従って、この実施例では、第1段階の処理において、変数「w」の依存性、及びそれゆえに関数「f5()」によってリターンされる値は、「u」及び「v」に依存していると表現できる。第2段階の処理では、「u」及び「v」、並びに関数「f5()」によってリターンされる値は、定数値に依存するように示され得る。
【0091】
ローカル依存性を伝播するこのプロセスは、処理中のプログラムにわたって継続することができる。プログラムで関数「f5()」が呼び出されると、そのリターン値は、別の変数に割り当てられ得る。第1段階の処理では、その変数は、関数「f5()」によってリターンされる値に依存するように示され得る。第2段階の処理では、関数「f5()」によってリターンされる値を表すローカル変数への依存性を、関数「f5()」によってリターンされる値が依存するグローバル変数の指示に置き換えることができる。この実施例では、関数「f5()」によってリターンされる値は、定数値に依存し得る。関数「f5()」によってリターンされる値が外部変数に依存する場合、依存性は、定数値に基づく代わりに、それらの外部変数に依存するものとして記録されてもよい。
【0092】
実施例6:定数引数を有するコールサイト
関数へのコールを含むコード内の依存性は、以下のように定義される。
【数11】
は、以下の依存性構成要素によって表わされ得る。
【数12】
【0093】
定数値が与えられた引数は、定数値が割り当てられたデータ要素のように扱われ得る。
【0094】
実施例7:グローバルテーブルの読み出し又は書き込み
要素的なデータ要素以外のデータエンティティに対する動作もまた、本明細書で説明するシステムによって取り扱うことができる。幾つかの実施形態では、データエンティティは階層的であってもよい。動作は、階層の任意のレベルにおいてデータエンティティに対して実行できる。従って、依存性構成要素は、階層の任意の適用可能なレベルにおけるデータエンティティの識別に対応できる。そのようなデータエンティティの1つは、例えば、データセットの例であるグローバルテーブルである。データセットは、その中に他のデータエンティティを含んでもよい。例えば、テーブルには行と列が含まれ、これらがデータエンティティと見なされ得る。
【0095】
テーブル自体に影響を与えるか又は依存する動作が実行され得、テーブル内のデータエンティティのいずれかに潜在的に影響を与える。テーブルはまた、行、列、又は他のサブディビジョンを有し、階層におけるより下位のレベルを作成する。動作は、行や列などのサブディビジョン内のデータ要素のみに影響を与えるか又は依存してもよい。但し、テーブルの行又は列における単一のデータ要素に対する動作など、データセットの任意のサブセットに依存する動作が可能である。
【0096】
そのような階層においてデータエンティティを指定するには、タプル表記を使用できる。階層の最高レベルのエンティティを最初に指定し、続いて、階層の次に高いレベルにおけるエンティティを指定できる。特定の例として、タプルは「ドット」表記で指定でき、タプルを形成する各シンボルを「.」で区切ることができる。以下の例では、タプルの第1の値(ここでは「T1」)は、テーブルを識別する。タプルの第2の値(ここでは「C1」)は、そのテーブルの列を識別する。第2の値は、代わりに、行を識別してもよい。幾つかの実施形態では、タプルは、行と列の両方を識別する値を含むことができ、階層の更により低いレベルでデータ要素を指定する。
【0097】
そのようなテーブルでの動作の依存性は、以下のとおりである。
【数13】
は、以下の依存性構成要素によって表現され得る。
【数14】
【0098】
実施例8:コールサイトにおいて引数として使用される複数の要素を有する式
関数のコールによって作成される依存性は、以下のように定義される。
【数15】
は、以下の依存性構成要素によって表現され得る。
【数16】
【0099】
この実施例では、角括弧「[]」で囲まれた依存性ソースリストと、括弧「()」で囲まれた引数との間の違いを示す。
【0100】
実施例9:制御フロー依存性を作成する条件付きステートメント
この実施例では、条件付き制御フローを作成するプログラミングステートメントが依存性分析のためにどのように表され得るかを示す。この実施例では、条件付きステートメントは、「if then…else」フォーマットである。この実施例は、以下のような条件付きステートメントを含む関数に関連する。
【数17】
【0101】
そのような「if then…else」ステートメントは、多くのプログラミング言語でサポートされている。このステートメント又は任意のステートメントをプログラム内でどのように表現するかについては、言語ごとに変化し得る。抽出モジュール316の処理は1つのプログラミング言語に固有であり得るため、「if then…else」ステートメントが言語ごとにどのように表現されるかについての任意のバリエーションは、そのモジュールが使用される特定の言語の構成要素を識別するように抽出モジュールを構成することによって説明することができる。そのようなステートメントは、以下の依存性構成要素によって表現され得る。
【数18】
【0102】
この実施例では、依存性構成要素を表現する目的で、「If」ステートメントからの「then」及び「else」分岐のコンテンツが、単一のブロックにマージされている。プログラムの実行において、分岐のどちらか一方を実行するが、どちらの分岐を実行するかについての判定は同じデータエンティティに依存するため、「then」ブロック及び「else」ブロックの両方の依存性が同じ方法で表現されることを可能にする。この実施例では、変数「x」の値によってどちらの分岐が取られるかが決まるため、制御フローに対して、両方が変数「x」に依存する。そのブロックの制御フロー依存性は、上記のように、「_condition[x]」として表され得る。
【0103】
同じ制御フロー依存性を共有するコードは、1つのブロックとして処理されてもよい。本明細書で説明する幾つかの実施形態に係る依存性分析は、静的コード分析に基づいており、コードの実行中に生じ得る依存性を識別するため、そのような処理は適切である。
【0104】
この実施例では、各分岐が実行されると、定数に基づいて変数「y」に値が割り当てられる。このように両方の分岐を一緒に考慮すると、そのコードブロック内で、定数に依存する値がyに割り当てられるという結論に更につながる。従って、関数によってリターンされる値は定数に依存するが、特定の定数はxの値に依存することになる。そのような制御とデータフローとの依存性は、「_condition[x,_CONST]」として表現できる。
【0105】
当業者であれば、3つ以上の可能な制御フローを作成するプログラミング構成に対して、条件付きで実行される3つ以上のコードブロックがあることを認識するであろう。これらのコードブロックのそれぞれの実行は、異なる変数に依存し得る可能性がある。その場合、プログラミング構造は、ブロックのそれぞれ又はブロックのサブセットの異なる依存性構成要素によって表され得る。
【0106】
実施例10:「While Do」ループによって作成される制御フロー依存性
制御フロー依存性はまた、「while do」ループを実装するステートメントによって作成されてもよい。そのようなループでは、言及された式が真と評価されている間に、コードブロックが実行される。このシナリオでは、そのブロックと、その式の値に影響を与えるデータエンティティとの間に制御フロー依存性がある。そのようなステートメントを用いる関数の例は、以下のとおりである。
【数19】
【0107】
その関数の依存性は、以下のように表現できる。
【数20】
【0108】
この実施例では、「while do」ループ内部のコードブロックが、少なくとも1回実行され得る。従って、そのブロック内部のステートメントによって作成された依存性は、抽出された依存性情報で表される。追加の依存性は、ループが実行される回数にそれらの値が依存するように、そのループ内部で変化し得る変数によって作成され得る。そのシナリオでは、任意のそのような変数は、ループが実行される回数にその値が影響を与え得るデータエンティティに依存する。
【0109】
この実施例では、ループは「i」及び「x」の値に応じて何度か実行される。このため、条件が言及され、すなわち、「_condition[i,x]」は、「i」及び「x」の値が制御フローに影響を与え得ることを表す。条件下で括弧内の「y[y,i]」及び「i[i,_CONST]」がそのループで変更され得る変数「y」及び「i」のそれぞれを反映するという指示は、ループが実行される回数に依存する値を有することになる。
【0110】
「for」、「while do」、「do until」、「switch」、又は「case」など、他の条件付きステートメントによって作成された依存性は、この条件付きブロック構造によって同様に表すことができる。具体的な例として、「for」及び「while do」は条件及びブロックを入手し、ブロック内のコードが少なくとも1回実行されることが保証されているため、「do until」はブロックの内容をコピーし、それを条件/ブロックの上に配置する。
【0111】
実施例11:レベルコールツリー
この実施例は、たとえ関数が他の関数をコールする場合でも、限られた数の構成要素によって依存性を表わし得ることを示している。この実施例では、3つの関数が定義され、第2の関数「g()」が第1の関数「h()」をコールしている。第3の関数「f()」は、次いで、以下のように第2の関数をコールする。
【数21】
【0112】
このマルチレベルコールツリーは、別の関数をコールする各関数が、他の関数へのコールが後続の処理のためにキャプチャされるような方法で表されるように表現できる。
【数22】
【0113】
この実施例によってわかり得るように、抽出された依存性情報でプログラム内のマルチレベルコールツリーを表すために、追加の構成要素を導入する必要はない。むしろ、第1の関数の依存性は、上述した構成要素(ここでは「y[x]」)によってキャプチャされる。他の機能は、それらが他の機能に依存していることを示す方法で、抽出された依存性情報に記録される。1つの関数が別の関数をコールすることによって導入され得る任意の依存性は、ローカル依存性が伝播されるバックエンド(第2のフェーズ)処理で解決される場合がある。
【0114】
実施例12:再帰
マルチレベルコールツリーと同様に、抽出された依存性情報でプログラムの再帰を表すために、追加の構成要素は必要ない。むしろ、再帰がより下位の解析ツリーの一部として保存され得ることを示す情報、及びバックエンド処理は、その再帰から生じ得る任意の追加の依存性を計算することができる。
【0115】
従って、以下のように、関数はそれ自体を再帰的にコールする。
【数23】
は、以下の依存性構成要素によって、抽出された依存性情報で表現できる。
【数24】
【0116】
ここで、この変数が最初は定数値「0」に設定され、その値はずっと変更され得ないため、変数「accumulator」が定数値への依存性を有することが示されている。更に、変数「x」の値に応じて、条件付きフローが示されている。そのような条件は、ステートメント「if(x==0)」内の「if…else」構成要素から生じる。その条件に関連付けられたブロック内で、変数「y」には「accumulator」の値に基づく値が与えられ、「accumulator」の値は関数「F11()」に依存し得る。
【0117】
この情報は、たとえこれらの変数の値を指定するのに十分でなくても、バックエンド処理で依存性を識別するのを可能にするには十分である。
【0118】
図3Aに戻ると、フロントエンド処理は各プログラムに対して実行され得る。この実施例では、プログラム310、320、及び350が示されているが、データ処理システムには任意の数のプログラムが存在し得る。そのような処理の結果は、それぞれ、各プログラムに対する依存性データセット318、338、又は358である。各依存性データセットは、依存性データセット318について上述した、依存性構成要素320A、320B、及び320ZZなどの依存性構成要素を有する。その結果、依存性データセットには、解析ツリーに反映される選択された動作、特に依存性に影響を与える動作に関する情報が含まれる。それらの選択された動作は、依存性データセットを生成するために処理されたプログラムが記述されたソース言語に関係なく、同じかもしれない依存性構成要素のセットによって反映され得る。
【0119】
それらの依存性構成要素に到達する特定の処理は、プログラミング言語ごとに変わる場合がある。従って、パーサ332は、プログラム330が書かれている言語に適した解析ツリー334を生成するように、当該技術分野で既知の技術を使用して構成され得る。同様に、パーサ352は、プログラム350が書かれている言語に適した解析ツリー354を生成するように構成されてもよい。
【0120】
336及び356などの抽出モジュールのそれぞれはまた、特定のプログラミング言語に基づいて構成することもできる。上述のように、それぞれが、依存性データセットの依存性構成要素として出力される。しかしながら、依存性を生成し得る実行可能ステートメントが関連するプログラミング言語で表される方法に応じて、それぞれへの入力は異なるフォーマットになる場合がある。
【0121】
図3B、3C、及び3Dは、そのようなフロントエンド処理の図例を提供する。この例では、コードセグメント360(
図3B)が処理中のプログラムに現れている。この例では、コードセグメント360には、「a=b+c」という割り当てステートメントが含まれる。そのステートメントは、条件付きステートメント「If(x=1){…}」によって定義される条件付きブロック内にある。この条件付きステートメントは、「else」ヌル付きの、「If then…else」フォーマットである。そのステートメントは、プログラムの一部である関数内で定義される。その関数定義は、その関数内でのみ使用される変数の範囲を定義できる。
【0122】
コードセグメント360は、解析ツリー368(
図3C)の一部で表すことができ、コードの他のセグメントが同様の方法で処理され、解析ツリーの他の部分(表示せず)にプログラムの残りの部分を表す。この例では、ノード370、及びノード370の下にあるノードは、PROGRAM1として示されるプログラムの範囲内にある。
【0123】
ノード372は、PROGRAM1内で、FUNCTION1が定義されることを示す。ノード372、及びノード372の下にあるノードは、FUNCTION1として示される機能の範囲内にある。この例では、ノード373及び374はノード372のすぐ下にあり、他のノードはそれらのノードの下にある。
【0124】
この例では、ノード374は、データフロー依存性を示している。ノード373は、制御フロー依存性を示している。ノード374は、割り当てを実施する解析中のプログラム内の1つ以上のステートメントを表している。この例では、ノード374に関連して、それらのステートメントのコードサマリ375を記録できる。上記の例で示したように、このコードサマリは、ソースコードファイル内の行への1つ以上のポインタであり得る。代替的又は追加的に、ソースコードサマリ375は、コードの行又は行の一部のコピーを含んでもよい。サマリに反映されるコード行は、依存性を作成するコードステートメントを識別するルール、ヒューリスティック、又は選択ロジックの実行可能表現、及び幾つかの実施形態では、そのステートメントのコンテキストを提供するプログラム内の追加のステートメントの実行により自動的に選択され得る。例えば、コンテキストを提供するステートメントは、依存性を作成するステートメントの前及び/又は後の一定数のステートメントであり得る。その依存性を作成するステートメントの性質に基づいて、追加又は異なるステートメントを選択することができる。例えば、ステートメントにソース変数が含まれる場合、たとえこれらのステートメントが、サマライズされる依存性を作成するステートメントの近くのプログラム内に現れない場合であっても、サマリには、その変数を定義するステートメント、又はその変数に値を割り当てる最新のステートメントが含まれ得る。
【0125】
ノード376は、ノード374で表される割り当ての左側を表している。この例は、値が割り当てられている変数であるターゲット変数が、1つの変数のみ、この例ではノード378で表される変数「a」を含むことを示している。
【0126】
ノード380は、変数「a」に割り当てられた値を生成するステートメントの右側を表す。右側には、ノード382で示されるように、動作(この場合は追加)が含まれる。加算動作には、ノード392及び394でそれぞれ示されるように、変数「b」及び「c」である2つの入力がある。
【0127】
ノード373は、FUNCTION1の制御フロー依存性を表す。FUNCTION1に関連付けられた制御依存性は、FUNCTION1の範囲内の動作に依存する任意の値もまた、制御フロー依存性を有することを示すが、これは、制御フローに応じて、依存性を作成するFUNCTION1内のステートメントが、特定の場合に実行される場合(又は、されない場合)があるためである。ノード379で示されるように、その制御フロー依存性は、変数「X」の値に基づいている。この例では、Xの値に応じて、ノード374で表される変数「a」への割り当てが発生する場合(又は発生しない場合)がある。この制御フロー依存性は、
図3Bの「If then…else」ステートメントに関連付けられた条件付き実行をキャプチャする。
【0128】
次いで、
図3Cに示された解析ツリーの一部は、依存性データセットに含まれ得る依存性構成要素396(
図3D)に変換され得る。ここで、依存性構成要素は、変数「a」がターゲットであり、その値がソース変数「b」及び「c」に依存することを示す。この例の命名法は、上記の実施例1のものとは異なり、割り当ても表している。しかしながら、上記の例と
図3Bはどちらも人が読める形式で依存性構成要素を示しており、他の形式を使用できることを理解されたい。どちらも同じ依存性構成要素を示し、コンピュータが認識及び処理するようにプログラムされた任意の方法でコンピュータにエンコードすることができる。特定の例として、依存性情報は各ターゲット変数のリストとして表されてもよい。各リストには、ターゲットが依存するソース変数の全てが含まれる場合がある。
【0129】
依存性構成要素396によって表される解析の一部は、FUNCTION1の範囲内に収まる。その範囲は、範囲識別子「FUNCTION1」によって
図3Dに示されるように、依存性情報に関連付けられ得る。そのような範囲情報は、人が理解できるようにフォーマットされている。コンピュータによる処理のため、範囲情報は、ターゲットに対するソース変数の各リストを範囲に関連付けるなど、他の方法で表すことができることを理解されたい。
【0130】
図3Cに表される制御フロー依存性はまた、ターゲット変数「a」の依存性にも反映され得る。その制御フロー依存性は、
図3Dでは、依存性が制御フロー依存性であることを示すために、シンボル(この例では「*」)を有するソース変数「X」によって示される。他の例と同様に、その表記は人が読めるように意図されている。制御フロー依存性は、「*」などのシンボルをリスト内のソース変数に関連付けることを含み得る、コンピュータ処理に適した方法で、キャプチャすることができる。代替的又は追加的に、制御フロー依存性は、制御フロー依存性を別々に生じさせるソース変数を保存するか、又はデータフロー依存性のソース変数から他の適切な方法でそれらを分離することによって、示すことができる。そのようなデータストレージ技術は、制御フロー対データフロー依存性に基づいて処理が区別される実施形態で使用され得る。依存性の性質に基づいて処理が区別されない実施形態では、制御フロー依存性のソース変数は、データフロー依存性と同じ方法で保存及び処理されてもよい。或いは、制御フロー依存性に基づいて処理が実行されない場合、制御フロー依存性は省略されてもよい。
【0131】
図3Cは、1つのプログラムの一部のみに対して第2のデータ構造内にエンコードされた依存性情報を示す。同様の処理を、プログラム全体で実行してもよい。
図3Aに示されるように、複数のプログラムがデータ処理システムで実行される場合、同様の処理が各プログラムに対して実行され得る。ここで提供される例では、プログラムは独立して処理されるものとして示されている。しかしながら、プログラムは他のプログラムで定義されている関数をコールすることができることを理解されたい。その場合、依存性情報は、変数に関連付けられた範囲を示すことによって、あるプログラムの変数が別のプログラムからの変数に依存することを表す場合がある。
【0132】
図3Dに示される依存性の表現をもたらす処理は、ローカル変数に対する依存性及びローカル変数上の依存性を示し得る。ローカル変数はプログラム内にのみ存在し、定義により、プログラムからの入出力ではないため、幾つかの実施形態では、それらのローカル変数に関する情報は、メタデータリポジトリ110(
図1A)などに保存されている依存性情報から省略されてもよい。それにもかかわらず、このローカル依存性情報は、最初にキャプチャでき、保存されている依存性情報を導出する処理で使用することができる。
【0133】
図4は、言語に依存する処理が完了した後にバックエンドで実行される、そのような処理の一例を提供する。言語に依存しない1つ以上のツールによって処理が実行されていることが示されている。316、336、又は356などの下位モジュールのそれぞれは、後続の処理が言語に依存し得ないように、依存性データセット318、338、358を共通のフォーマットで出力することができる。
【0134】
図4の例では、依存性データセット318、338、358での処理は、ローカル及びグローバル依存性の両方で動作し得る依存性処理モジュール410で開始することができる。処理では、
図3Dに関連して上述した、全ての変数の依存性のリスト又は他の適切な表現を作成してもよい。幾つかの実施形態では、ローカル変数及び外部変数に対する、並びに/又はそれらへの依存性を保存することができる。しかしながら、幾つかの実施形態において、データ処理システムのより効率的な動作は、最終的に使用されないそのようなローカル依存性を除去することにより達成され得る。
【0135】
従って、ローカル依存性を伝播するモジュール420によって、更なる処理が実行され得る。モジュール420は、伝播し、次いでローカル依存性を除去する。ローカル依存性は、値がプログラムの内部範囲内の処理でのみ使用され、値が外部データソースからロード又はそれに保存されない変数として、識別され得る。具体例として、上記の実施例11では、関数「g()」における「s」及び「t」の値は、外部データソースから保存又はアクセスされない。むしろ、s及びtの値は、「x」のみから導出される。いったん上述ように処理が完了すると、「s」又は「t」に依存するターゲットデータ要素は、「x」に依存することを示すだけでいい。従って、「s」又は「t」などのローカル変数への参照を、情報を失うことなく削除することができる。同様に、幾つかの実施形態では使用されないため、「s」又は「t」のデータ依存性を表すデータも削除されてもよい。この情報は、ローカル依存性にのみ紐づけされており、モジュール420によって削除できる。
【0136】
モジュール420は、その変数がプログラムの外部に存在するか、又は内部計算で使用されるだけであるかを判定するために、プログラム用に保存されたデータを横断することによって、ローカル変数を識別することができる。
図3Cに関連して上述したように、プログラムに関する情報は、コードブロックについての範囲情報を記録する方法で保存され得る。その範囲情報は、外側範囲を有する他のコード内で定義されたものとして示されている、内側範囲を有するコードの結果として、ネスティングを明らかにし得る。
【0137】
従って、モジュール420は、最も内側の各範囲で処理を開始することができる。モジュール420は、その範囲内で定義及び/又は使用される各変数に対して、その範囲の外部からその変数にアクセスするかどうかを判定してもよい。そうでない場合、その変数は、ローカル変数としてフラグ付けされ得る。ローカル変数として識別された変数が1つ以上の変数に依存する場合、それらの変数の値は、依存性構成要素におけるソースとしてローカル変数に置き換えられ得る。
【0138】
場合によっては、そのような処理により、ローカル変数が、依存性のソースとしての外部変数に置き換えられる結果になる。しかしながら、場合によっては、ローカル変数は別のローカル変数に依存してもよい。そのような可能性を説明するために、モジュール420による処理は、ローカル変数が他のローカル変数に依存する場合に、その範囲内の全てのローカル変数が依存性の式において外部変数によって置き換えられるまで、それらの他のローカル変数が次いで処理されるように、再帰的に実行されてもよい。
【0139】
ローカル依存性を「伝播」するこのプロセスは、外側範囲ごとに繰り返されることができ、ネスティングされた範囲が最も内側から最も外側に順に処理される。複雑なプログラムは、依存しないネスティング範囲を作成する多くの部分を有し得ることを理解されたい。各ネスティングは、プログラム全体が処理されるまで順に処理することができ、ローカル変数への依存性が、それらのローカル変数が次いで依存する外部変数に置き換えられる。
【0140】
このローカル依存性の伝播処理が完了すると、ローカル変数の依存性が保持されない限り、ローカル変数の依存性に関する情報が、もはや必要ではない場合がある。従って、モジュール420は、ローカル変数に関する依存性情報を削除するか、そうでなければローカル依存性に関する情報がその後に処理されない方法で、保持された依存性情報を保存してもよい。
【0141】
ローダモジュール430は、保持された依存性情報を、メタデータリポジトリ450に保存することができる。
図4に示す実施形態では、メタデータリポジトリは、データ依存性452及び制御依存性454を別々に保存するものとして示されている。しかしながら、上記のように、そのような情報は同じデータ構造に保存することができ、フロー制御依存性はデータフロー依存性とは別にマークされ得る。或いは、幾つかの実施形態では、データフロー依存性と制御フロー依存性と間で区別を行わない場合がある。
【0142】
ローダモジュール430は、
図3Cに関連して上述したような依存性情報の表現を、メタデータリポジトリ450のフォーマットに変換することができる。具体的な例として、メタデータリポジトリ450は、各ターゲット変数に対して、それが依存するソース変数を示すテーブル又はリストのコレクションとして、依存性情報を保存してもよい。その情報は、データ処理システムがデータリネージ
図200(
図2)を生成することができるように保存されてもよい。
【0143】
更に、幾つかの実施形態では、ローダモジュール430は、メタデータリポジトリにコードサマリ456を保存してもよい。上述のように、依存性を生成するソースコードステートメントが識別されると、それらは、単独、又はその依存性に関する情報を明らかにし得るステートメントとの組み合わせのいずれかで、依存性データセットにおける依存性構成要素に関連して保存することができる。このコード情報は、コードサマリ456として、全体的又は部分的に保存されてもよい。例えば、プログラムには、値が変数に割り当てられる複数のインスタンスが含まれてもよい。幾つかの実施形態では、ローダモジュール430は、これらのインスタンスのそれぞれに関連付けられたコードを保存してもよい。代替的又は追加的に、ローダモジュール430は、これらのインスタンスの一部のみに関連付けられたコードを選択的に保存してもよい。ローダモジュール430は、例えば、そのような割り当ての最初のインスタンス、又はコードサマリが所定のサイズに到達するまで最初のインスタンス、に関連付けられたコードを選択するようにプログラムされるか、又はルール若しくはコード化されたヒューリスティックを適用して、開発者がアクセスする可能性が最も高いインスタンスを選択することができる。しかしながら、そのような選択は、各コードサマリのサイズを制限するための任意の適切な方法で、ローダモジュール430によって行われてもよい。代替的又は追加的に、そのような選択は、
図3Aに関連して説明された下位モジュール、又は他の適切なコンポーネントによって行われてもよい。
【0144】
選択がどのように行われたかに関係なく、データ要素又は特定のコードブロックに対する依存性を生じさせた可能性のあるコードの識別情報を保存することにより、データ処理システムがユーザ102(
図1A)などの開発者に追加機能を提供することを可能にすることができる。例えば、コードサマリ456は、プログラムを修正又はデバッグするプログラマが使用することができ、予期しない値を有する変数にその値がどのように割り当てられたかを理解しようとする。
【0145】
図5は、本明細書で説明する技術の幾つかの実施形態に係る、依存性情報を生成するための例示的なプロセス500のフローチャートである。プロセス500は、任意の適切なシステム及び/又はコンピューティングデバイスによって実行することができ、例えば、
図3A及び
図4に関して上述したモジュールでプログラムされた、
図1Aを参照して説明したデータ処理システム105によって実行することができる。
【0146】
プロセス500は、フロントエンド処理510で開始する。フロントエンド処理510は、データ処理システムを構成するために使用される各プログラムに対して実行されてもよい。
【0147】
フロントエンド処理510内で、処理がアクト502において開始し、処理されているプログラム用のパーサが選択される。パーサは、処理中の特定のプログラムのプログラミング言語に基づいて選択できる。幾つかの実施形態によれば、データ処理システムは、データ処理システムがサポートする各プログラミング言語用のパーサを保存してもよい。他の実施形態では、データ処理システムは、任意のそのようなプログラミング言語用のパーサを生成することができるパーサジェネレータを含むことができ、データ処理システムは、パーサジェネレータが使用するそのプログラミング言語に関する文法ファイル又は他の情報を提供することにより、所望の言語で記述されたプログラムを処理するように構成することができる。
【0148】
アクト504において、選択されたパーサを使用してプログラムを解析することができる。アクト504の結果は、プログラムに対する解析ツリーであり得る。
【0149】
アクト506において、解析ツリーを下位にすることができる。上述のように、解析ツリーを下位にすることは、処理中のプログラムのプログラミング言語用に構成された下位モジュールによって実行され得る。下位にするアクトの結果は、プログラム内のデータ要素及びコードブロックに対する依存性構成要素を保存するデータ構造であってもよい。
【0150】
アクト508において、全てのプログラム(プログラム109、
図1Aなど)に対して生成された依存性データセットを、必要に応じて、任意選択的に結合することができる。幾つかの実施形態では、ある言語で記述されたプログラムは、関数をコールするか、そうでなければ別のプログラミング言語で記述されたコードを組み込んで、全体的なデータ処理機能を実装してもよい。従って、各プログラムを独立して処理することによって生成された解析ツリーを結合して、そのような動作を表すことができる。結合された依存性データセットは、バックエンド処理520に伝達されるフロントエンドの出力であり得る。代替的又は追加的に、異なるプログラム用に準備された解析ツリーは、どのプログラムがそれらの依存性を作成するステートメントを含んでいるかに関係なく、ターゲット変数ごとに、その変数が依存し得るソース変数を識別することにより、バックエンド処理中に結合され得る。
【0151】
バックエンド処理520内で、処理はアクト522において始まる。アクト522では、ローカル依存性が識別される。ネストされた範囲を有するプログラムの場合、この処理は、最も内側の範囲を表すプログラムの各部分に対して最初に実行され得る。ローカル変数の識別は、各変数に対して、解析動作中に構築され得るテーブルにアクセスするによってなど、適切な方法で実行され得る。そのテーブルは、処理中の範囲でのみアクセス又は変更される変数が、その範囲に対してローカルな変数として識別され得るように、変数がアクセス又は変更される場所を示すことができる。
【0152】
アクト524において、ローカル依存性が伝播され得る。ローカル依存性の伝播には、ローカル変数に基づく依存性の代わりに、ローカル変数が依存する外部変数への依存性を用いることが含まれ得る。
【0153】
プロセスは判断ブロック530に進み、処理されている範囲が外部範囲であるかどうかに応じてプロセスが分岐する。そうでない場合、プロセスは分岐してアクト522に戻り、そこでローカル変数を識別及び伝播するアクトが繰り返される。このようにして、最も内側の範囲で開始し、最も外側の範囲に進むプログラムの一部が処理される。
【0154】
いったん最も外側の範囲の全てに到達すると、処理はアクト532に分岐する。アクト532において、ローカル変数に関する依存性情報を削除することができる。
【0155】
アクト534において、残りの情報は、メタデータリポジトリに保存されてもよく、又は後で使用するために他の適切な場所に保存されてもよい。
【0156】
図5に示すプロセス500は、任意の適切なコンピューティングシステム環境で実行することができる。
図6は、本明細書に記載する技術を実施することができる適宜のコンピューティングシステム環境700の一例を図示する。コンピューティングシステム環境700は、適宜のコンピューティング環境の一例にすぎず、本明細書に記載する技術の使用又は機能性の範囲に関して何ら制限を示唆することを意図したものではない。コンピューティング環境700は、例示的動作環境700に図示されるコンポーネントのいずれか1つ又は組み合わせに関する依存性又は要件を有すると解釈されるべきものでもない。
【0157】
本明細書に記載する技術は、多数の他の汎用又は専用コンピューティングシステムの環境又は構成と共に使用可能である。本明細書に記載する技術と共に使用するのに適し得る周知のコンピューティングシステム、環境、及び/又は構成の例には、限定されることはないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル大衆消費電子製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又はデバイスのいずれかを包含する分散コンピューティング環境などが包含される。
【0158】
コンピューティング環境は、プログラムモジュールなどのコンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。本明細書に記載する技術は、通信ネットワークを通してリンクされるリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実行されてもよい。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを包含するローカル及びリモートコンピュータストレージ媒体の両方に位置していてもよい。
【0159】
図6を参照して、本明細書に記載する技術を実施する例示的システムは、コンピュータ710の形態の汎用コンピューティングデバイスを包含する。コンピュータ710のコンポーネントは、限定されないが、処理装置720、システムメモリ730、及びシステムメモリを包含する様々なシステムコンポーネントを処理装置720に結合するシステムバス721を包含してもよい。システムバス721は、様々なバスアーキテクチャのいずれかを使用した、メモリバス又はメモリコントローラ、周辺バス、及びローカルバスを包含する幾つかのタイプのバス構造のいずれかであってもよい。例として、及び限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ電子装置規格化協会(Video Electronics Standards Association)(VESA)ローカルバス、及びメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト(PCI)バスが包含される。
【0160】
コンピュータ710は、一般的に、様々なコンピュータ可読媒体を包含する。コンピュータ可読媒体は、コンピュータ710によってアクセスすることができる任意の入手可能な媒体でよく、及び揮発性及び不揮発性両方の媒体、リムーバブル及び非リムーバブル媒体を包含する。例として、及び限定ではなく、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報のストレージのための任意の方法又は技術で実施される、揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を包含する。コンピュータストレージ媒体には、限定されないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)又は他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、又は所望の情報を保存するために使用することができ、且つコンピュータ710によってアクセスすることができるその他の媒体が包含される。通信媒体は、一般的に、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを搬送波又は他のトランスポート機構などの変調データ信号で具現化し、及びあらゆる情報配信媒体を包含する。「変調データ信号」という用語は、それの特性集合の1つ又は複数を有する、又は信号の情報をエンコードするように変更された信号を意味する。例として、及び限定ではなく、通信媒体には、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、RF、赤外線、及び他の無線媒体などの無線媒体が包含される。上記のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に包含されるものとする。
【0161】
システムメモリ730は、読み出し専用メモリ(ROM)731及びランダムアクセスメモリ(RAM)732などの揮発性及び/又は不揮発性メモリの形態のコンピュータストレージ媒体を包含する。起動時などに、コンピュータ710内の素子間で情報を転送することを助ける基本ルーチンを含有した、基本入出力システム733(BIOS)は、一般的に、ROM731内に保存される。RAM732は、一般的に、即座に利用できる、及び/又は処理装置720によって現在操作されているデータ及び/又はプログラムモジュールを含有する。例として、及び限定ではなく、
図7は、オペレーティングシステム734、アプリケーションプログラム735、他のプログラムモジュール736、及びプログラムデータ737を図示する。
【0162】
コンピュータ710は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体も包含することができる。単なる例として、
図7は、非リムーバブル、不揮発性磁気媒体に対する読み取り又は書き込みを行うハードディスクドライブ741、フラッシュメモリなどのリムーバブル、不揮発性メモリ752に対する読み取り又は書き込みを行うフラッシュドライブ751、及びCD-ROM又は他の光学媒体などのリムーバブル、不揮発性光ディスク756に対する読み取り又は書き込みを行う光ディスクドライブ755を図示する。例示的動作環境において使用することができる他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体には、限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体RAM、固体ROMなどが包含される。ハードディスクドライブ741は、一般的に、インタフェース740などの非リムーバブルメモリインタフェースを通してシステムバス721に接続され、及び磁気ディスクドライブ751及び光ディスクドライブ755は、一般的に、インタフェース750などのリムーバブルメモリインタフェースによってシステムバス721に接続される。
【0163】
上述した、及び
図7に図示したドライブ及びそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ710の他のデータのストレージを提供する。
図7においては、例えば、ハードディスクドライブ741は、オペレーティングシステム744、アプリケーションプログラム745、他のプログラムモジュール746、及びプログラムデータ747を保存するものとして図示される。これらのコンポーネントは、オペレーティングシステム734、アプリケーションプログラム735、他のプログラムモジュール736、及びプログラムデータ737と同じであってもよいし、或いは異なっていてもよいことに留意されたい。オペレーティングシステム744、アプリケーションプログラム745、他のプログラムモジュール746、及びプログラムデータ747は、少なくとも、それらが異なるコピーであることを図示するために、ここでは、異なる番号が付与されている。ユーザは、キーボード762及び一般にマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス761などの入力デバイスによって、コンピュータ710にコマンド及び情報を入力することができる。他の入力デバイス(不図示)には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが包含され得る。これら及び他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース760によって、処理装置720に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB)などの他のインタフェース及びバス構造によって接続されてもよい。モニタ791又は他のタイプのディスプレイデバイスも、ビデオインタフェース790などのインタフェースを介して、システムバス721に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース795を通して接続することができる、スピーカ797及びプリンタ796などの他の周辺出力デバイスも包含することができる。
【0164】
コンピュータ710は、リモートコンピュータ780などの1つ又は複数のリモートコンピュータへの論理接続を用いたネットワーク化環境で動作することができる。リモートコンピュータ780は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、又は他の共通ネットワークノードでもよく、及び一般的に、
図7ではメモリストレージデバイス781のみが図示されているが、コンピュータ710に関連して上記した素子の多く又は全てを包含する。
図7に描かれる論理接続は、ローカルエリアネットワーク(LAN)771及び広域ネットワーク(WAN)773を包含するが、他のネットワークも包含してもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて、ありふれたものである。
【0165】
LANネットワーキング環境で使用される場合、コンピュータ710は、ネットワークインタフェース又はアダプタ770を通してLAN771に接続される。WANネットワーキング環境で使用される場合、コンピュータ710は、一般的に、モデム772、又はインターネットなどのWAN773上で通信を確立するための他の手段を包含する。内部又は外部のものでもよいモデム772は、ユーザ入力インタフェース760又は他の適宜の機構を介して、システムバス721に接続されてもよい。ネットワーク化環境において、コンピュータ710に関連して描かれたプログラムモジュール、又はそれらの一部は、リモートメモリストレージデバイスに保存されてもよい。例として、及び限定ではなく、
図7は、メモリデバイス781に常駐しているとして、リモートアプリケーションプログラム785を図示する。示されるネットワーク接続は、例示的なものであり、及びコンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されるだろう。
【0166】
本発明の少なくとも1つの実施形態の幾つかの態様を上記のように記載したが、様々な変更、修正、及び改良が、当業者には容易に思い付くことが理解されるものとする。
【0167】
このような変更、修正、及び改良は、本開示の一部であることが意図され、及び本発明の精神及び範囲内であることが意図される。更に、本発明の利点が示されるが、本明細書に記載の技術の全ての実施形態が、全ての記載した利点を包含するわけではないことが理解されるものとする。幾つかの実施形態は、本明細書において有利であると記載されたいずれの特徴も実施しない場合があり、場合によっては、記載された特徴の1つ又は複数が、更なる実施形態を得るために実施されてもよい。従って、上記の記載及び図面は、単なる例である。
【0168】
本明細書に記載の技術の上記実施形態は、多数のやり方のいずれで実施されてもよい。例えば、これらの実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを用いて実施されてもよい。ソフトウェアで実施される場合には、ソフトウェアコードは、単一のコンピュータにおいて提供されていようと、複数のコンピュータ間で分散されていようと、任意の適宜のプロセッサ又は一群のプロセッサ上で実行することができる。このようなプロセッサは、集積回路として実施されてもよく、業界において、CPUチップ、GPUチップ、マイクロプロセッサ、マイクロコントローラ、又はコプロセッサなどの名称で知られている市販の集積回路コンポーネントを包含する集積回路コンポーネントにおいて、1つ又は複数のプロセッサを有する。代替的に、プロセッサは、ASICなどのカスタム回路、又はプログラマブル論理デバイスの構成に起因するセミカスタム回路において実施されてもよい。また更なる代替手段として、プロセッサは、市販、セミカスタム、或いはカスタムであろうと、より大きな回路又は半導体デバイスの一部であってもよい。ある具体例として、幾つかの市販のマイクロプロセッサは、複数のコアの1つ又はサブセットがプロセッサを構成することができるように、複数のコアを有する。しかし、プロセッサは、任意の適宜のフォーマットの回路を使用して実施することができる。
【0169】
更に、コンピュータは、ラックマウント式コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの多数の形態のいずれかで具現化されてもよいことが理解されるものとする。追加的に、コンピュータは、携帯情報端末(PDA)、スマートフォン、又は任意のその他の適宜のポータブル又は固定電子デバイスを包含する、一般にコンピュータとは見なされないが、適宜の処理能力を備えたデバイスに組み込まれてもよい。
【0170】
また、コンピュータは、1つ又は複数の入力デバイス及び出力デバイスを有していてもよい。これらのデバイスは、特に、ユーザインタフェースを提示するために使用することができる。ユーザインタフェースを提供するために使用することができる出力デバイスの例には、出力の視覚的表現のためのプリンタ又はディスプレイスクリーン、及び出力の可聴表現のためのスピーカ又は他の音生成デバイスが包含される。ユーザインタフェースに使用することができる入力デバイスの例には、キーボード、並びにマウス、タッチパッド、及びデジタイザタブレットなどのポインティングデバイスが包含される。別の例として、コンピュータは、音声認識により、又は他の可聴フォーマットで入力情報を受信してもよい。
【0171】
このようなコンピュータは、企業ネットワーク又はインターネットなどのローカルエリアネットワーク又は広域ネットワークとして包含する、任意の適宜の形態の1つ又は複数のネットワークによって相互接続することができる。このようなネットワークは、任意の適宜の技術に基づいてもよく、及び任意の適宜のプロトコルに従って動作してもよく、及び無線ネットワーク、有線ネットワーク、又は光ファイバネットワークを包含してもよい。
【0172】
また、本明細書に概要が述べられる様々な方法又はプロセスは、様々なオペレーティングシステム又はプラットフォームのいずれか1つを用いる1つ又は複数のプロセッサに対して実行可能なソフトウェアとして符号化されてもよい。追加的に、このようなソフトウェアは、多数の適宜のプログラミング言語及び/又はプログラミング又はスクリプト作成ツールのいずれかを使用して書かれてもよく、及びフレームワーク又は仮想マシンに対して実行される実行可能マシン語コード又は中間コードとしてコンパイルされてもよい。
【0173】
この点において、本発明は、1つ又は複数のコンピュータ又は他のプロセッサに対して実行されると、上述の本発明の様々な実施形態を実施する方法を行う1つ又は複数のプログラムでエンコードされたコンピュータ可読ストレージ媒体(又は複数のコンピュータ可読媒体)(例えば、コンピュータメモリ、1つ又は複数のフロッピーディスク、コンパクトディスク(CD)、光ディスク、デジタルビデオディスク(DVD)、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ又は他の半導体デバイスにおける回路構成、又は他の有形コンピュータストレージ媒体)として具現化されてもよい。上記の例から明らかなように、コンピュータ可読ストレージ媒体は、非一時的な形態でコンピュータ実行可能命令を提供するのに十分な時間の間、情報を保持することができる。このような1つ又は複数のコンピュータ可読ストレージ媒体は、それ(ら)に保存された1つ又は複数のプログラムを、上述のような本発明の様々な態様を実施するために、1つ又は複数の異なるコンピュータ又は他のプロセッサにロードすることができるように、可搬であってもよい。本明細書においては、「コンピュータ可読ストレージ媒体」という用語は、製品(すなわち、製造物)又はマシンであると見なすことができる非一時的コンピュータ可読媒体のみを網羅する。代替的又は追加的に、本発明は、伝搬信号などの、コンピュータ可読ストレージ媒体以外のコンピュータ可読媒体として具現化されてもよい。
【0174】
「プログラム」又は「ソフトウェア」という用語は、本明細書では、上述のような本発明の様々な態様を実施するようにコンピュータ又は他のプロセッサをプログラムするために使用することができる、あらゆるタイプのコンピュータコード又はコンピュータ実行可能命令のセットを指すために総称的に使用される。追加的に、本実施形態のある態様によれば、実行されると、本発明の方法を行う1つ又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに常駐する必要はなく、本発明の様々な態様を実施するために、多数の異なるコンピュータ又はプロセッサ間で、モジュラー方式で分散されてもよいことが理解されるものとする。
【0175】
コンピュータ実行可能命令は、1つ又は複数のコンピュータ又は他のデバイスによって実行される、プログラムモジュールなどの多くの形態のものでもよい。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。一般的に、プログラムモジュールの機能性は、様々な実施形態において、要望通りに組み合わせられてもよいし、或いは分散されてもよい。
【0176】
また、データ構造は、任意の適宜の形態でコンピュータ可読媒体に保存されてもよい。図示を簡単にするために、データ構造は、データ構造内の場所によって関連したフィールドを有して示される場合がある。このような関係は、同様に、フィールドのストレージにフィールド間の関係を伝達するコンピュータ可読媒体内の場所を割り当てることによって、達成することができる。但し、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用によることを包含する、任意の適宜の機構を使用して、データ構造のフィールドにおける情報間の関係を確立してもよい。
【0177】
本発明の様々な態様は、単独で、組み合わせて、又は上記に記載した実施形態において具体的に述べられていない様々な配置で使用されてもよく、従って、その適用において、上記の説明に記載された、又は図面に図示されたコンポーネントの詳細及び配置に限定されない。例えば、ある実施形態に記載した態様は、任意の様式で、他の実施形態に記載した態様と組み合わせることができる。
【0178】
また、本発明は、一例を提供した方法として具現化されてもよい。この方法の一部として行われるアクトは、任意の適宜のやり方で、順序付けが行われてもよい。従って、アクトが、図示されたものとは異なる順序で(これは、説明のための実施形態では、逐次的なアクトとして示されたとしても、幾つかのアクトを同時に行うことを包含してもよい)行われる実施形態が構築されてもよい。
【0179】
更に、幾つかの行為は、「ユーザ」によって行われると記載される。「ユーザ」は、一人の個人である必要はなく、及び幾つかの実施形態では、「ユーザ」に帰する行為は、複数の個人から成るチーム及び/又はコンピュータ支援ツール又は他の機構と組み合わせた個人によって行われてもよいことが理解されるものとする。
【0180】
クレーム要素を修飾する、クレームにおける「第1の」、「第2の」、「第3の」などの序数用語の使用は、それ自体は、1つのクレーム要素の別のクレーム要素に対する優先、先行、又は順序、又は方法のアクトが行われる時間的順序を暗示せず、ある名称を有する1つのクレーム要素を、同じ名称(序数用語の使用を除き)を有する別の要素と区別するための単なるラベルとして使用することにより、これらのクレーム要素が区別される。
【0181】
また、本明細書において使用される表現及び用語は、説明目的のものであり、及び限定として見なされるものではない。本明細書における、「包含する(including)」、「含む(comprising)」、又は「有する(having)」、「含有する(containing)」、「関与する(involving)」、及びそれらのバリエーションの使用は、その後にリストされるアイテム及びそれらの均等物、並びに追加のアイテムを網羅することを意味する。