(57)【特許請求の範囲】
【請求項１】
コンポーネント及びフローを含む第１のグラフを受信することであって、前記コンポーネントは、データレコードに対して実行される動作を表し、前記フローは、コンポーネント間のデータレコードのフローを表す、受信することと、
前記第１のグラフとは別個の仕様を受信することであって、前記仕様は、１つ又は複数の挿入を定義し、前記挿入のそれぞれは、前記第１のグラフのフローに関連付けられる、受信することと、
前記挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成することと、
前記第１のグラフの前記コンポーネント及びフローの少なくとも幾つかと、前記１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成することと
を含む、方法。
【請求項２】
前記生成されたコンポーネントの１つは、データレコードが前記第２のグラフのコンポーネント間を渡る際、前記データレコードに関連するデータをモニタするように構成されるプローブである、請求項１に記載の方法。
【請求項３】
前記プローブは、前記１つ又は複数のデータレコードに関連する前記データを記憶するように構成される、請求項２に記載の方法。
【請求項４】
前記生成されたコンポーネントの１つは、前記第２のグラフの前記コンポーネントの１つにデータを提供するように構成されるテストソースである、請求項１に記載の方法。
【請求項５】
前記第２のグラフを実行することを更に含む、請求項１に記載の方法。
【請求項６】
前記第２のグラフの全てよりも少数の前記コンポーネントが実行される、請求項５に記載の方法。
【請求項７】
実行される前記第２のグラフの前記コンポーネントは、コンポーネントであって、その動作が前記生成されたオブジェクトの１つ又は複数に影響を及ぼす、コンポーネントを含む、請求項６に記載の方法。
【請求項８】
前記生成されたコンポーネントの１つはプローブであり、及び実行される前記第２のグラフの前記コンポーネントは、データを前記プローブに提供するコンポーネントを含む、請求項７に記載の方法。
【請求項９】
前記プローブの下流に存在する前記第２のグラフの１つ又は複数のコンポーネントは実行されない、請求項８に記載の方法。
【請求項１０】
前記生成されたコンポーネントの１つはテストソースであり、及び前記テストソースの上流に存在する前記第２のグラフの１つ又は複数のコンポーネントは実行されない、請求項７に記載の方法。
【請求項１１】
前記第２のグラフの前記コンポーネントの１つに関連付けられたパラメータを変更することと、
前記変更されたコンポーネントが、実行時、前記生成されたコンポーネントのいずれかに影響を及ぼすか否かを判断することと、
前記第２のグラフを再実行することと
を更に含む、請求項５に記載の方法。
【請求項１２】
前記変更されたコンポーネントが、実行時、前記生成されたコンポーネントのいずれにも影響を及ぼさない場合、前記変更されたコンポーネントは再実行されない、請求項１１に記載の方法。
【請求項１３】
前記生成されたコンポーネントの１つはプローブであり、及び前記変更されたコンポーネントは、前記プローブに関連付けられたフローの上流に存在する、請求項１２に記載の方法。
【請求項１４】
前記第１のグラフ及び前記仕様は、別個のファイルに記憶される、請求項１に記載の方法。
【請求項１５】
前記第１のグラフ及び前記第２のグラフは、別個のファイルに記憶される、請求項１に記載の方法。
【請求項１６】
前記第２のグラフは、ファイルに記憶されないシェルスクリプトである、請求項１に記載の方法。
【請求項１７】
前記第２のグラフにおいて、前記生成されたコンポーネントの１つは、前記生成されたコンポーネントに関連付けられる前記フローからデータを受信する前記第１のグラフ内のコンポーネントに対応するコンポーネントにデータを提供する、請求項１に記載の方法。
【請求項１８】
前記第２のグラフにおいて、前記生成されたコンポーネントの１つは、前記生成されたコンポーネントに関連付けられる前記フローにデータを提供する前記第１のグラフ内のコンポーネントに対応するコンポーネントからデータを受信する、請求項１に記載の方法。
【請求項１９】
前記第２のグラフは、前記第１のグラフが変更されずに生成される、請求項１に記載の方法。
【請求項２０】
前記第２のグラフを生成することは、
前記第１のグラフの少なくとも一部のコピーを生成することと、
前記１つ又は複数の生成されたコンポーネントを含むように、前記第１のグラフの前記コピーを変更することと
を含む、請求項１に記載の方法。
【請求項２１】
少なくとも１つのプロセッサと、
コンポーネント及びフローを含む第１のグラフを受信する手段であって、前記コンポーネントは、データレコードに対して実行される動作を表し、前記フローは、コンポーネント間のデータレコードのフローを表す、手段と、
前記第１のグラフとは別個の仕様を受信する手段であって、前記仕様は、１つ又は複数の挿入を定義し、前記挿入のそれぞれは、前記第１のグラフのフローに関連付けられる、手段と、
前記挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成する手段と、
前記第１のグラフの前記コンポーネント及びフローの少なくとも幾つかと、前記１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成する手段と
を含む、システム。
【請求項２２】
プロセッサを含み、前記プロセッサは、
コードリポジトリから、コンポーネント及びフローを含む第１のグラフを受信すること
であって、前記コンポーネントは、データレコードに対して実行される動作を表し、前記フローは、コンポーネント間のデータレコードのフローを表す、受信することと、
ユーザインタフェースを通して、前記第１のグラフとは別個の仕様を受信することであって、前記仕様は、１つ又は複数の挿入を定義し、前記挿入のそれぞれは、前記第１のグラフのフローに関連付けられる、受信することと、
前記挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成することと、
前記第１のグラフの前記コンポーネント及びフローの少なくとも幾つかと、前記１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成することと
を行うように構成される、コンピュータシステム。
【請求項２３】
コンピュータプログラムを記憶するコンピュータ可読デバイスであって、前記コンピュータプログラムは、実行可能命令を含み、前記実行可能命令は、コンピュータに、
コンポーネント及びフローを含む第１のグラフを受信することであって、前記コンポーネントは、データレコードに対して実行される動作を表し、前記フローは、コンポーネント間のデータレコードのフローを表す、受信することと、
前記第１のグラフとは別個の仕様を受信することであって、前記仕様は、１つ又は複数の挿入を定義し、前記挿入のそれぞれは、前記第１のグラフのフローに関連付けられる、受信することと、
前記挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成することと、
前記第１のグラフの前記コンポーネント及びフローの少なくとも幾つかと、前記１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成することと
を行わせる、コンピュータ可読デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本願は、２０１４年１１月５日に出願された米国仮特許出願第６２／０７５，４６６号の優先権を主張するものであり、この内容全体を参照により本明細書に援用する。
【０００２】
背景
本明細書は、グラフのデバッグに関する。
【背景技術】
【０００３】
コード開発者は、多くの場合、開発プロセス全体を通してソースコードをデバッグする。そうするときに、ソースコードの機能に影響を及ぼし得るデバッグコードでソースコードが変更され得る。多くの場合、ソースコードの元の機能を回復するために、デバッグ完了時、追加されたデバッグコードをソースコードから削除することが望ましい。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
一態様では、方法は、コンポーネント及びフローを含む第１のグラフを受信することを含む。コンポーネントは、データレコードに対して実行される動作を表す。フローは、コンポーネント間のデータレコードのフローを表す。本方法は、第１のグラフとは別個の仕様を受信することも含む。仕様は、１つ又は複数の挿入を定義する。挿入のそれぞれは、第１のグラフのフローに関連付けられる。本方法は、挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成することも含む。本方法は、第１のグラフのコンポーネント及びフローの少なくとも幾つかと、１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成することも含む。
【０００５】
実装形態は、以下の特徴のうちの１つ又は複数を含むことができる。
【０００６】
幾つかの実装形態では、生成されたコンポーネントの１つは、データレコードが第２のグラフのコンポーネント間を渡る際、データレコードに関連するデータをモニタするように構成されるプローブである。
【０００７】
幾つかの実装形態では、プローブは、１つ又は複数のデータレコードに関連するデータを記憶するように構成される。
【０００８】
幾つかの実装形態では、生成されたコンポーネントの１つは、第２のグラフのコンポーネントの１つにデータを提供するように構成されるテストソースである。
【０００９】
幾つかの実装形態では、本方法は、第２のグラフを実行することも含む。
【００１０】
幾つかの実装形態では、第２のグラフの全てよりも少数のコンポーネントが実行される。
【００１１】
幾つかの実装形態では、実行される第２のグラフのコンポーネントは、コンポーネントであって、その動作が生成されたオブジェクトの１つ又は複数に影響を及ぼす、コンポーネントを含む。
【００１２】
幾つかの実装形態では、生成されたコンポーネントの１つはプローブである。実行される第２のグラフのコンポーネントは、データをプローブに提供するコンポーネントを含む。
【００１３】
幾つかの実装形態では、プローブの下流に存在する第２のグラフの１つ又は複数のコンポーネントは実行されない。
【００１４】
幾つかの実装形態では、生成されたコンポーネントの１つはテストソースである。テストソースの上流に存在する第２のグラフの１つ又は複数のコンポーネントは実行されない。
【００１５】
幾つかの実装形態では、本方法は、第２のグラフのコンポーネントの１つに関連付けられたパラメータを変更することも含む。本方法は、変更されたコンポーネントが、実行時、生成されたコンポーネントのいずれかに影響を及ぼすか否かを判断することも含む。本方法は、第２のグラフを再実行することも含む。
【００１６】
幾つかの実装形態では、変更されたコンポーネントが、実行時、生成されたコンポーネントのいずれにも影響を及ぼさない場合、変更されたコンポーネントは再実行されない。
【００１７】
幾つかの実装形態では、生成されたコンポーネントの１つはプローブである。変更されたコンポーネントは、プローブに関連付けられたフローの上流に存在する。
【００１８】
幾つかの実装形態では、第１のグラフ及び仕様は、別個のファイルに記憶される。
【００１９】
幾つかの実装形態では、第１のグラフ及び第２のグラフは、別個のファイルに記憶される。
【００２０】
幾つかの実装形態では、第２のグラフは、ファイルに記憶されないシェルスクリプトである。
【００２１】
幾つかの実装形態では、第２のグラフにおいて、生成されたコンポーネントの１つは、生成されたコンポーネントに関連付けられるフローからデータを受信する第１のグラフ内のコンポーネントに対応するコンポーネントにデータを提供する。
【００２２】
幾つかの実装形態では、第２のグラフにおいて、生成されたコンポーネントの１つは、生成されたコンポーネントに関連付けられるフローにデータを提供する第１のグラフ内のコンポーネントに対応するコンポーネントからデータを受信する。
【００２３】
幾つかの実装形態では、第２のグラフは、第１のグラフが変更されずに生成される。
【００２４】
幾つかの実装形態では、第２のグラフを生成することは、第１のグラフの少なくとも一部のコピーを生成することを含む。第２のグラフを生成することは、１つ又は複数の生成されたコンポーネントを含むように、第１のグラフのコピーを変更することも含む。
【００２５】
別の態様では、システムは、少なくとも１つのプロセッサを含む。本システムは、コンポーネント及びフローを含む第１のグラフを受信する手段も含む。コンポーネントは、データレコードに対して実行される動作を表す。フローは、コンポーネント間のデータレコードのフローを表す。本システムは、第１のグラフとは別個の仕様を受信する手段も含む。仕様は、１つ又は複数の挿入を定義する。挿入のそれぞれは、第１のグラフのフローに関連付けられる。本システムは、挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成する手段も含む。本システムは、第１のグラフのコンポーネント及びフローの少なくとも幾つかと、１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成する手段も含む。
【００２６】
別の態様では、コンピュータシステムは、コードリポジトリから、コンポーネント及びフローを含む第１のグラフを受信するように構成されたプロセッサを含む。コンポーネントは、データレコードに対して実行される動作を表す。フローは、コンポーネント間のデータレコードのフローを表す。プロセッサは、ユーザインタフェースを通して、第１のグラフとは別個の仕様を受信するようにも構成される。仕様は、１つ又は複数の挿入を定義する。挿入のそれぞれは、第１のグラフのフローに関連付けられる。本コンピュータシステムは、定義された挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成するように構成されたコンパイラも含む。コンパイラは、第１のグラフのコンポーネント及びフローの少なくとも幾つかと、１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成するようにも構成される。
【００２７】
別の態様では、コンピュータ可読デバイスは、コンピュータプログラムを記憶する。コンピュータプログラムは、コンピュータに、コンポーネント及びフローを含む第１のグラフを受信させる実行可能命令を含む。コンポーネントは、データレコードに対して実行される動作を表す。フローは、コンポーネント間のデータレコードのフローを表す。コンピュータプログラムは、コンピュータに、第１のグラフとは別個の仕様を受信させる実行可能命令も含む。仕様は、１つ又は複数の挿入を定義する。挿入のそれぞれは、第１のグラフのフローに関連付けられる。コンピュータプログラムは、コンピュータに、挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントを生成させる実行可能命令も含む。コンピュータプログラムは、コンピュータに、第１のグラフのコンポーネント及びフローの少なくとも幾つかと、１つ又は複数の生成されたコンポーネントとに対応するコンポーネント及びフローを含む第２のグラフを生成させる実行可能命令も含む。
【００２８】
別の態様では、方法は、コンピュータプログラムの第１のバージョンのデータ処理要素を識別することを含む。データ処理要素は、ｉ）第１のデータ要素からデータを受信するか、又はｉｉ）第１のデータ要素にデータを提供するように構成される。本方法は、第２のデータ要素を表すコンポーネントを生成することも含む。本方法は、コンピュータプログラムの少なくとも一部の第２のバージョンを生成することも含む。コンピュータプログラムの第２のバージョンは、識別されたデータ処理要素を含む。コンピュータプログラムの第２のバージョンは、コンピュータプログラムの第２のバージョン内の識別されたデータ処理要素が、ｉ）生成されたコンポーネントからデータを受信するか、又はｉｉ）生成されたコンポーネントにデータを提供するように、生成されたコンポーネントを含む。
【００２９】
実装形態は、以下の特徴のうちの１つ又は複数を含むことができる。
【００３０】
幾つかの実装形態では、本方法は、コンピュータプログラムの第１のバージョンを受信することも含む。
【００３１】
幾つかの実装形態では、コンピュータプログラムの少なくとも一部の第２のバージョンを生成することは、コンピュータプログラムの一部のコピーを生成することを含む。
【００３２】
幾つかの実装形態では、本方法は、生成されたコンポーネントを含むように、コンピュータプログラムの一部のコピーを変更することも含む。
【００３３】
態様は、以下の利点のうちの１つ又は複数を含むことができる。
【００３４】
コード生成の開始時、定義された挿入に対応するオブジェクトが作成され得、且つ挿入を定義するオーバーレイ仕様とはグラフを別個に保ちながら、通常のコンポーネントとしてグラフに追加され得る。したがって、開発者は、元のグラフを不注意で破損するリスクを回避しながら、グラフを変更し、デバッグすることができる。
【００３５】
更に、グラフを編集する許可を有さない開発者は、挿入を使用してグラフを変更することができる。
【００３６】
本発明の他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになる。
【図面の簡単な説明】
【００３７】
【図１】グラフの例である。
【図２】オーバーレイ仕様の例である。
【図３】シングル実行モードで挿入定義を実行する例示的なシステムを示す。
【図４ａ】挿入コンポーネントを含むグラフの例である。
【図４ｂ】挿入コンポーネントを含むグラフの例である。
【図４ｃ】挿入コンポーネントを含むグラフの例である。
【図４ｄ】挿入コンポーネントを含むグラフの例である。
【図５】状態保存モードで挿入定義を実行する例示的なシステムを示す。
【図６】グラフをデバッグするシステムのブロック図である。
【図７】例示的なグラフデバッグ手順のフローチャートである。
【発明を実施するための形態】
【００３８】
説明
グラフは、ある人物により書かれ、別の人物によりテストされ得る。グラフを完全にテストするために、試験者は、データがグラフを通って流れる際、データにアクセスする必要があり得る。例えば、試験者は、グラフのあるコンポーネントから別のコンポーネントに流れる際、データを検証することを望み得る。幾つかの実装形態では、試験者は、上流プロセスが正確に機能することを検証したが、下流プロセスの機能を依然として検証していないことがある。幾つかの実装形態では、上流プロセスは、実行に比較的長い時間がかかり得、非効率的なテストに繋がり得る。テスト効率は、試験者が、事前に検証された上流動作の実行を事前に検証されたデータで置換することができる場合、改善することができる。
【００３９】
従来の開発環境では、試験者は、通常、ウォッチポイントを追加するために又は上流コンポーネントを予め検証されたデータで置換するために、グラフを変更する必要がある。しかし、グラフが編集されると、試験者は、元のグラフの機能を変更していないことを確信することができない。幾つかの環境では、試験者は、グラフを編集するのに必要な許可を有していないことがある。
【００４０】
グラフベースのプロセスは、グラフとは別個のオーバーレイファイル（例えば、オーバーレイ仕様）を使用してデバッグし、テストすることができる。オーバーレイ仕様は、１つ又は複数の挿入を定義する別個のファイルであることができる。挿入は、グラフのフローに関連付けられたコンポーネントにより提示することができる。挿入に対応するコンポーネントは、プローブ又はテストソースであることができる。プローブは、グラフが実行される際、コンポーネント間を渡るデータをモニタすることができ、後に検査又は再使用するためにデータを保存させることができる。テストソースは、データをグラフのコンポーネントに提供することができ、それにより、例えば、グラフの各実行で上流コンポーネントを返す必要がない。
【００４１】
オーバーレイ仕様において定義される挿入に対応するコンポーネントは、元のグラフの一部になることなく、グラフに含めることができる。元のグラフがコンパイルされる際、コンパイラは、オーバーレイファイルを考慮し、挿入（本明細書では、挿入コンポーネントと呼ばれることもある）に対応するコンポーネントを含む第２のグラフを生成する。第２のグラフ（例えば、図４ａ〜図４ｄに示されるグラフ４００ａ〜４００ｄ）は、元のグラフのコンポーネント又はフローの少なくとも幾つかに対応するコンポーネント及びフローを含む。第２のグラフは、オーバーレイ仕様において定義される挿入に対応するコンポーネントも含む。第２のグラフは、元のグラフ１００の第２のバージョン又は元のグラフ１００のコピーであり得る。幾つかの実装形態では、第２のグラフを生成することは、元のグラフ１００の少なくとも一部のコピーを生成し、挿入に対応する１つ又は複数のコンポーネントを含むようにコピーを変更することを含む。幾つかの実装形態では、第２のグラフはシェルスクリプトであり、ファイルに記憶されない。幾つかの実装形態では、第２のグラフ及び第１のグラフは、別個のファイルに記憶される。
【００４２】
挿入コンポーネントの第２のグラフへの組み込みがデバッグ中の元のグラフを変更しないことに留意することが重要である。代わりに、挿入定義は、別個のファイル（例えば、別個のオーバーレイ仕様）に留まり、コード生成開始時、第２のグラフに含めるために通常のグラフコンポーネントになることができる。したがって、デバッグ中、元のグラフを不注意で破損するリスクがない。
【００４３】
図１は、デバッグ又はテストされ得るグラフ１００の例を示す。グラフ１００は、フローで接続されたデータ処理コンポーネントを含む。１つ又は複数のデータレコードを含むデータセット１０２は、フィルタコンポーネント１０３に接続される。２つのコンポーネント間の接続は、第１のコンポーネント（この例では、データセット１０２）からの出力レコードが第２のコンポーネント（この例では、フィルタコンポーネント１０３）に渡されることを示す。一般に、フィルタコンポーネントは、所定の基準を満たさないレコードをフィルタリング又は除去する。例えば、フィルタコンポーネント１０３は、オハイオ州に在住の顧客のデータレコードを渡し、他のレコードデータを拒絶する。フィルタコンポーネント１０３は、フィルタリングされたデータレコードをソートする（例えば、顧客に関連付けられた郵便番号により）ソートコンポーネント１０４に接続される。ソートコンポーネント１０４は、データレコードのコピーを作成する複製コンポーネント１０６に接続され、それにより、データレコードのコピーを２つの異なる方法で処理することができる。複製コンポーネントは、リフォーマットコンポーネント１０８及び式によるフィルタコンポーネント１１０に接続される。例えば、郵便番号によりソートされた、オハイオ州に在住の顧客のデータレコードのあるインスタンスは、リフォーマットコンポーネント１０８に送られ、データレコードの別のインスタンスは、式によるフィルタコンポーネント１１０に送られる。リフォーマットコンポーネント１０８は、データレコードのフォーマットを異なるデータフォーマットに変更し、式によるフィルタコンポーネント１１０は、データレコードに関連付けられた式に基づいて、データレコードを削除する。リフォーマットコンポーネント１０８及び式によるフィルタコンポーネント１１０は、受け取ったデータレコードを結合する収集コンポーネント３１２に接続され、収集コンポーネントは、出力データシンクコンポーネント１１４（例えば、データベース）に接続される。グラフ１００は、コンポーネント間に複数のフローを含むが、複製−リフォーマットフロー１１６及び収集−出力データシンクフロー１１８が、この例では特に興味深いものである。
【００４４】
グラフ１００の試験者は、グラフ１００の機能を検証するために、グラフ１００をデバッグすることを望み得る。例えば、試験者は、データがあるコンポーネントから別のコンポーネントに流れる際、データをモニタし、検証することを望み得る。代替的に、試験者は、グラフ１００内の１つ又は複数の上流コンポーネントを実行せず、代わりに、上流コンポーネントを実行した場合に上流コンポーネントからデータを受け取るコンポーネント（例えば、下流コンポーネント）にデータを提供することを望み得る。そうするときに、様々な理由でグラフを変更しないことが望ましいことがある。例えば、試験者は、グラフの機能を破損するリスクをとりたくないことがある。幾つかの実装形態では、試験者は、グラフへのアクセスが制限されているか、又はアクセスできないことがある（例えば、試験者は、グラフの編集に必要な許可を有さないことがある）。
【００４５】
オーバーレイは、テスト目的で使用することができる第２のグラフに含められる挿入コンポーネントの生成に使用することができる。図２は、オーバーレイを定義するオーバーレイ仕様２００の例を示す。オーバーレイ仕様２００は、グラフを記憶するファイルとは別個であり得るファイルに記憶することができる。オーバーレイ仕様は、１つ又は複数の挿入を定義する。グラフがコンパイルされるとき、挿入に対応するコンポーネントを生成し、元のグラフの一部になることなく、第２のグラフに追加することができる。第２のグラフは、元のグラフのコンポーネント及びフローの少なくとも幾つかに対応するコンポーネント及びフローも含む。第２のグラフ内の各挿入コンポーネントは、元のグラフのフローに関連付けられる。挿入コンポーネントは、プローブ又はテストソースであることができる。
【００４６】
プローブ
幾つかの実装形態では、プローブは、データが第２のグラフのコンポーネント間を渡る際、データをモニタする。例えば、データをモニタし、後の検査のために保存し、又は第２のグラフの実行時に再使用するために保存することができる。オーバーレイ仕様２００は、元のグラフの特定のフローに関連付けられたプローブを定義することができる。第２のグラフは、元のグラフのこの特定のフローに対応するフローを含むことができる。第２のグラフは、特定のフローに関連付けられた元のグラフのコンポーネントに対応するコンポーネントを含むこともできる。第２のグラフ内のフローは、プローブによりモニタされ、ときには保存もされるコンポーネント間のデータの流れを表す。プローブは、特定の値を報告するか、又は特定の値が所定の範囲内若しくは範囲外であるとき、報告するように構成することができる。プローブによりモニタされるデータは、後の分析又は使用のために保存され得る。幾つかの実装形態では、データは、フラットファイル又は関係データベースに記憶することができる。
【００４７】
テストソース
幾つかの実装形態では、特定のポイント（例えば、特定のコンポーネントの位置）までの元のグラフの実行結果は、事前に検証されていることがある。そのような場合、元のグラフが実行されるたびに、上流コンポーネントが機能を再処理することは非効率的であり得る。オーバーレイ仕様２００は、元のグラフの特定のフローに関連付けられたテストソースを定義することができる。第２のグラフは、元のグラフのこの特定のフローに対応するフローを含むことができる。第２のグラフは、特定のフローに関連付けられた元のグラフのコンポーネントに対応するコンポーネントを含むこともできる。テストソースは、特定のフローに関連付けられた元のグラフのコンポーネントに対応する第２のグラフ内のコンポーネントにデータ（例えば、事前に検証されたデータ）を提供することができる。幾つかの実装形態では、テストソースは、事前に保存されたデータを下流コンポーネントに渡すように構成することができる。このようにして、事前に実行されたグラフのセクション全体が迂回され得る。
【００４８】
図２を参照すると、オーバーレイ仕様２００は、１つ又は複数の挿入定義を含むことができる。この例では、オーバーレイ仕様２００は、１つのテストソース定義２０１及び１つのプローブ定義２１３を含む。オーバーレイ仕様２００は、挿入定義が対応することができるグラフを指定する３ラインヘッダで開始される。ヘッダはテストソース定義２０１に続き、テストソース定義２０１は、名称２０２、上流ポート２０４、下流ポート２０６、挿入タイプ２０８、プロトタイプパス２１０、及びレイアウトパラメータ２１２を含む。
【００４９】
テストソース定義２０１の上流ポート２０４は、グラフ１００内のポート、特に、複製コンポーネント１０６の出力を参照する。下流ポート２０６は、リフォーマットコンポーネント１０８の入力をポイントする。したがって、第２のグラフが実行されるとき、テストソースは、グラフ１００のリフォーマットコンポーネント１０８に対応するコンポーネントにデータを提供する。
【００５０】
挿入タイプ２０８は、挿入がテストソースであるか、それともプローブであるかを定義する。値「０」はテストソースを定義し、値「１」はプローブを定義する。この挿入はテストソースであるため、挿入タイプ２０８の値は「０」である。
【００５１】
プロトタイプパス２１０は、挿入のタイプを示す。この例では、この挿入はテストソースであるため、プロトタイプパス２１０は入力ファイルコンポーネントを指定する。プロトタイプパス２１０は、特定のタイプの挿入を定義するコードを含むファイルをポイントする。レイアウトパラメータ２１２は、テストソースが提供するデータを含むソースファイルの場所を定義する。幾つかの実装形態では、場所はファイルパスである。テストソースが第２のグラフに含まれるとき、ソースファイル内のデータは、リフォーマットコンポーネント１０８の入力に提供される。
【００５２】
幾つかの実装形態では、ソースファイル内のデータは、グラフ１００の通常実行中、コンポーネント間を渡るデータと同じであり得る。しかし、第２のグラフにおいてテストソースを使用してデータを提供することにより、第２のグラフの上流コンポーネントを処理しなくてもよい。例えば、複製コンポーネント１０６等の上流コンポーネントは、データの処理に大量のシステムリソースを必要とし得るか、又はグラフ内の他のコンポーネントと比較してデータの処理に比較的長い時間がかかり得る。したがって、既知のデータ（例えば、グラフ１００の通常実行中、コンポーネント間を渡るデータと同じデータ）を第２のグラフのコンポーネントに提供して、時間を節減するか、又はシステムリソースを保存することができる。
【００５３】
テストソース定義２０１の後、プローブ定義２１３が続き、プローブ定義２１３は、名称２１４、上流ポート２１６、下流ポート２１８、挿入タイプ２２０、及びプロトタイプパス２２２を含む。
【００５４】
プローブ定義２１３の上流ポート２１６は、グラフ１００内のポート、特に、収集コンポーネント１１２の出力を参照する。プローブ定義２１３の下流ポート２１８は、出力データシンクコンポーネント１１４の入力を参照する。したがって、第２のグラフが実行されるとき、プローブは、収集コンポーネント１１２に対応する第２のグラフのコンポーネントの出力と、出力データシンクコンポーネント１１４に対応する第２のグラフのコンポーネントの入力との間を渡るデータをモニタする。
【００５５】
プローブ定義２１３の挿入タイプ２２０は、挿入がテストソースであるか、それともプローブであるかを定義する。値「１」はプローブを定義する。この挿入はプローブであるため、挿入タイプ２２０の値は「１」である。
【００５６】
プロトタイプパス２２２は、挿入のタイプを示す。この例では、この挿入はプローブであるため、プロトタイプパス２２２は出力ファイルコンポーネントを指定する。プロトタイプパス２２２は、特定のタイプの挿入を定義するコードを含むファイルをポイントする。
【００５７】
幾つかの実装形態では、プローブによりモニタされるデータは、システムにより自動的に作成されるファイルに記憶される。ファイルは、システムにより自動的に決定される場所に記憶することができる。幾つかの実装形態では、データは、記憶される前にモニタすることができる。
【００５８】
上述したように、コンパイラは、元のグラフをコンパイルして、第２のグラフを生成する間、オーバーレイ仕様２００を考慮する。コンパイラは、オーバーレイ仕様２００を入力として受け入れ得る。オーバーレイ仕様２００において定義される挿入に対応する１つ又は複数のコンポーネントが生成され、第２のグラフに含められる。生成された各挿入コンポーネントは、オーバーレイ仕様２００に含まれる挿入定義に対応する。挿入コンポーネントは、元のグラフ１００のコンポーネント及びフローの少なくとも幾つかに対応するコンポーネント及びフローと共に、第２のグラフ（例えば、図４ａ〜図４ｄのグラフ４００ａ〜４００ｄ）に含めることができる。挿入コンポーネントは、１つ又は複数の有向フローにより他のコンポーネント又は他の挿入コンポーネントに接続され得る。オーバーレイ仕様２００又はオーバーレイ仕様を記憶したファイルは、グラフ１００を含むファイルとは別個のままである。
【００５９】
オーバーレイ仕様において定義される挿入コンポーネントは、少なくとも２つのモード：シングル実行モード及び状態保存モードのうちの一方を使用して実行することができる。
【００６０】
シングル実行モード
図３は、シングル実行モードで挿入コンポーネントを実行する例示的なシステムを示す。この例では、クライアント３０２が、グラフ３０４と、挿入を定義するオーバーレイファイル３０６（例えば、オーバーレイ仕様）とを生成又は参照する。例えば、オーバーレイファイル３０６は、図２のオーバーレイ仕様２００であり得る。グラフ３０４は、コンパイラ３０８によりコンパイルされる。コンパイラ３０８は、オーバーレイファイル３０６を考慮し、オーバーレイファイル３０６により定義される挿入コンポーネントを含む第２のグラフを作成する。次に、第２のグラフを実行することができる。幾つかの実装形態では、コンパイル及び実行は同時に行われる。第２のグラフを再び実行すべき場合、このプロセスを繰り返さなければならない。すなわち、グラフ３０４を再指定し、再コンパイルする必要があり、第２のグラフを再実行する必要がある。
【００６１】
図４ａ〜図４ｄは、１つ又は複数の挿入コンポーネントを含むグラフ４００ａ〜４００ｄの例を示す。グラフ４００ａ〜４００ｄは、上述した第２のグラフの例であり得る。第２のグラフは、元のグラフ１００の第２のバージョンであることができる。これらの例では、図１のグラフ１００は、コンパイルされて、挿入を含むグラフ４００ａ〜４００ｄの１つを作成する。挿入は、図２のオーバーレイ仕様２００において定義される。図４ａでは、グラフ４００ａはテストソース挿入４２２を含む。図４ｂでは、グラフ４００ｂはプローブ挿入４２０を含む。図４ｃでは、グラフ４００ｃは、テストソース挿入４２２及びプローブ挿入４２０の両方を含む。テストソース挿入４２２は、テストソース定義２０１に対応することができ、プローブ挿入４２０は、プローブ定義２１３に対応することができる。
【００６２】
グラフ４００ａ〜４００ｄは、元のグラフ１００のコンポーネント及びフローの少なくとも幾つかに対応するコンポーネント及びフローも含む。幾つかの実装形態では、第２のグラフの対応するコンポーネント及びフローは、元のグラフ１００内のそれぞれの相手方と同じ又は同様の属性を有し得る。幾つかの実装形態では、対応するコンポーネント及びフローは、元のグラフ１００内のそれぞれの相手方と同一である。例えば、元のグラフ１００のソートコンポーネント１０４は、グラフ４００ａのソートコンポーネント４０４の第２のインスタンスであり得る。
【００６３】
これらの例では、挿入コンポーネントは、コンパイラがグラフ１００をコンパイルしたとき、生成された。図４ａ〜図４ｄは、挿入コンポーネントを含むグラフ４００ａ〜４００ｄを示すが、元のグラフ１００は変わらないままである。
【００６４】
図４ａ及び図４ｃを参照すると、プローブ挿入４２０が、収集コンポーネント４１２の出力から出力データシンクコンポーネント４１４の入力へのデータの流れを表すフロー４１８に位置する。フロー４１８、収集コンポーネント４１２、及び出力データシンクコンポーネント４１４は、図１の元のグラフ１００のフロー１１８、収集コンポーネント１１２、及び出力データシンクコンポーネント１１４にそれぞれ対応する。プローブ挿入４２０の場所は、プローブ定義２１３（図２に示される）において定義される上流ポート２１６及び下流ポート２１８に基づく。グラフ４００ａ、４００ｃが実行される場合、収集コンポーネント４１２から出力データシンクコンポーネント４１４に流れるデータは、プローブ挿入４２０によりモニタされる。幾つかの実装形態では、データはまた、プローブ挿入４２０により、システムにより自動的に作成されるファイルに記憶される。上述したように、第２のグラフを再び実行する場合、グラフを再指定し、再コンパイルする必要があり、第２のグラフを再実行する必要がある。第２のグラフを再び実行する場合、プローブ挿入４２０にデータが投入される。
【００６５】
図４ｂ及び図４ｃを参照すると、テストソース挿入４２２が、リフォーマットコンポーネント４０８の入力へのデータの流れを表すフロー４１６に位置する。フロー４１６及びリフォーマットコンポーネント４０８は、図１の元のグラフ１００のフロー１１６及びリフォーマットコンポーネント１０８にそれぞれ対応する。テストソース挿入４２２の場所は、テストソース定義において定義される上流ポート２０４及び下流ポート２０６に基づく。グラフ４００ｂ、４００ｃが実行される場合、テストソース定義２０１においてレイアウトパラメータ２１２により識別されるソースファイルからのデータは、リフォーマットコンポーネント４０８に流れる。このデータは、式によるフィルタコンポーネント４１０から流れるデータと共に、収集コンポーネント４１２に流れる。収集コンポーネント４１２から流れるデータは、最終的に出力データシンク４１４に記憶され、出力データシンク４１４はデータベースであり得る。
【００６６】
幾つかの実装形態では、試験者は、データを出力データシンク４１４等のデータベースに書き込まずに、プローブ挿入４２０を使用してデータをモニタすることを望み得る。例えば、試験者は、データベースを損なうリスクなしで、実験データを使用してグラフをテストすることを望み得る。図４ｄを参照すると、グラフ４００ｄは、テストソース挿入４２２及びプローブ挿入４２０の両方を含む。グラフ４００ｄが実行される場合、テストソース定義２０１内のレイアウトパラメータ２１２により識別されるソースファイルからの実験データは、リフォーマットコンポーネント４０８に流れる。このデータは、式によるフィルタコンポーネント４１０から流れるデータと共に、収集コンポーネント４１２に流れる。収集コンポーネント１１２から流れるデータは、プローブ挿入４２０によりモニタされる。幾つかの実装形態では、データはまた、プローブ挿入４２０により、システムにより自動的に作成されるファイルに記憶される。
【００６７】
状態保存モード
図５は、状態保存マネージャ５０８を用いて状態保存モードで挿入コンポーネントを実行する例示的なシステムを示す。この例では、クライアント５０２は、グラフ５０４と、挿入を定義するオーバーレイファイル５０６（例えば、オーバーレイ仕様）とを生成又は参照する。例えば、グラフ５０４は図１のグラフ１００であり得、オーバーレイファイル５０６は、図２のオーバーレイ仕様２００であり得る。状態保存リポジトリ５１０は、状態保存マネージャ５０８及びコンパイラ５１２により管理される。状態保存マネージャ５０８は、状態保存データが状態保存リポジトリ５１０内のいずれの場所に配置されているかを識別することもできる。グラフ５０４は、コンパイラ５１２によりコンパイルされる。コンパイラ５１２は、オーバーレイファイル５０６を考慮し、オーバーレイファイル５０６により定義される挿入コンポーネントを含む第２のグラフを作成する。次に、第２のグラフを実行することができる。幾つかの実装形態では、コンパイル及び実行は同時に行われる。
【００６８】
状態保存モードは、状態保存モードでは、実行間で情報を保存しながら、第２のグラフを複数回にわたって実行可能であるという点で、シングル実行モードと異なる。例えば、図４ａ〜４ｄを参照すると、挿入コンポーネントが状態保存モードを使用して実行された場合、第２のグラフの初回の実行でデータ投入されたプローブ挿入４２０に、２回目の実行中、再びデータ投入する必要がないことがある。幾つかの実装形態では、プローブ挿入４２０は、２回目の実行において、テストソースに内部変換することができる。換言すれば、プローブ挿入４２０が第２のグラフの初回の実行でデータ投入されるため、プローブ挿入４２０は、投入されたデータを第２のグラフのコンポーネント（例えば、図４ａ及び図４ｃの出力データシンクコンポーネント４１４）に提供することができる。
【００６９】
状態保存マネージャ５０８は、状態保存マネージャディレクトリに存在することができ、保存された状態を管理する。状態保存リポジトリ５１０に保存することができる情報の例としては、特に、プローブに関連する情報、テストソースに関連する情報、オーバーレイファイル５０６に関連する情報、及びグラフコンポーネントに関連付けられたパラメータ（例えば、属性）が挙げられる。
【００７０】
幾つかの実装形態では、グラフが実行される場合、グラフの特定の部分のみが実行される（例えば、グラフの特定のコンポーネントのみが実行される）。幾つかの実装形態では、グラフの全てよりも少数のコンポーネントが実行される。グラフが挿入コンポーネントを含む（例えば、図４ａ〜図４ｄのグラフ４００ａ〜４００ｄ内に）実装形態では、グラフは、動作が挿入コンポーネントに影響を及ぼすコンポーネントのみを実行し得る。例えば、グラフは、データをプローブに提供するコンポーネントを含むグラフの部分のみを実行し得る。幾つかの実装形態では、プローブから下流にあるコンポーネントは、実行する必要がなくてよい。
【００７１】
幾つかの実装形態では、プローブは、グラフの初回実行時にデータ投入される。実行の間、グラフコンポーネントのうちの１つ又は複数のパラメータが変更され得る。コンポーネントのパラメータは、コンポーネントがどのように動作するかを定義する。コンポーネントに関連付けられたパラメータを追跡することにより、コンパイラ５１２は、パラメータの変更がコンポーネント内でいつ発生したかを特定することができる。最後の値のテーブルが、グラフコンポーネントに関連付けられたパラメータを追跡する。グラフが実行される場合、最後の値のテーブルは、コンポーネントの現在パラメータと比較されて、実行間に任意のパラメータが変更されたか否かを判断する。パラメータ変更が生じた場合、その変更は、プローブにより記憶されているデータに影響を及ぼすこともあれば、又は及ぼさないこともある。コンパイラ５１２は、コンポーネントへの変更が、グラフの次の実行時、プローブにより記憶されることになるデータに影響を及ぼすか否かを判断する。プローブにより記憶されることになるデータが、変更により影響を受ける場合、変更されたコンポーネント及び変更されたコンポーネントからデータを受信するコンポーネントは、グラフの次の実行中に再実行され得る。換言すれば、変更されたコンポーネントからデータを受信し、データをプローブに提供する（直接又は間接的に）特定のコンポーネントは、変更されたコンポーネントがその特定のコンポーネントの実行に影響を及ぼし、その特定のコンポーネントがプローブにより記憶されるデータに影響を及ぼす場合、再実行され得る。幾つかの実装形態では、プローブにより記憶されることになるデータが変更により影響を受けない場合、いずれのコンポーネントも再実行の必要はなくてよい。
【００７２】
図６は、上述した技法を使用することができる例示的なデータ処理システム６００を示す。システム６００は、記憶デバイス又はオンラインデータストリームへの接続等のデータの１つ又は複数のソースを含み得るデータソース６０２を含み、各ソースは、様々なフォーマットのいずれか（例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームにより使用されるネイティブフォーマット）でデータを記憶又は提供し得る。実行環境６０４及び開発環境６１８は、例えば、あるバージョンのUNIXオペレーティングシステム等の適するオペレーティングシステムの制御下で、１つ又は複数の汎用コンピュータでホストされ得る。例えば、実行環境６０４は、ローカルで（例えば、対称マルチ処理（ＳＭＰ）コンピュータ等のマルチプロセッサシステム）、ローカルに分散して（例えば、クラスタとして結合された複数のプロセッサ若しくは超並列処理（ＭＰＰ）システム、リモートで、リモートに分散して（例えば、ローカルエリアネットワーク（ＬＡＮ）及び／又は広域ネットワーク（ＷＡＮ）を介して結合された複数のプロセッサ）、又はそれらの任意の組合せで、複数の中央演算処理装置（ＣＰＵ）又はプロセッサコアを使用するコンピュータシステムの構成を含むマルチノード並列計算環境を含むことができる。
【００７３】
実行環境６０４は、データをデータソース６０２から読み取り、出力データを生成する。データソース６０２を提供する記憶デバイスは、実行環境６０４にローカル、例えば、実行環境６０４をホストするコンピュータ（例えば、ハードドライブ６０８）に接続された記憶媒体に記憶されてもよく、又は実行環境６０４にリモート、例えば、リモート接続（例えば、クラウド計算基盤により提供される）を介して実行環境６０４をホストするコンピュータと通信するリモートシステム（例えば、メインフレーム６１０）でホストされてもよい。データソース６０２は、テストソース定義（例えば、図２のテストソース定義２０１）において定義されるデータを含み得る。すなわち、テストソース定義２０１のレイアウトパラメータ２１２は、データソース６０２内のソースファイルの場所をポイントし得る。
【００７４】
出力データは、データソース６０２に再び記憶してもよく、実行環境６０４にアクセス可能なデータ記憶システム６１６に記憶してもよく、又は他の方法で使用されてもよい。データ記憶システム６１６は、開発者６２０がグラフを開発し、デバッグし、テストすることが可能な開発環境６１８にもアクセス可能である。開発環境６１８は、幾つかの実装形態では、頂点間の有向フロー（作業要素、すなわちデータの流れを表す）により接続される頂点（データ処理コンポーネント又はデータセットを表す）を含むグラフとして、アプリケーションを開発するシステムである。例えば、そのような環境は、“Managing Parameters for Graph-Based Applications”という名称の米国特許出願公開第２００７／００１１６６８号により詳細に記載されており、これは参照により本明細書に援用される。そのようなグラフベースの計算を実行するシステムは、“EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS”という名称の米国特許第５，９６６，０７２号に記載されており、これは参照により本明細書に援用される。このシステムにより作られたグラフは、情報をプロセス間で移動させるため、及びプロセスの実行順序を定義するために、グラフコンポーネントにより表された個々のプロセス内に情報を入れると共に、個々のプロセスから情報を出す方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選択するアルゴリズムを含む（例えば、グラフのフローに従った通信パスは、ＴＣＰ／ＩＰ若しくはUNIXドメインを使用することができるか、又はプロセス間でデータを渡すために共有メモリを使用することができる）。
【００７５】
開発環境６１８は、ソースコードを記憶するコードリポジトリ６２２を含む。ソースコード及びオーバーレイ仕様（例えば、図２のオーバーレイ仕様２２０）は、例えば、ユーザインタフェースを通して開発環境にアクセスすることができる開発者６２０により開発され得る。幾つかの実装形態では、グラフ及びオーバーレイ仕様は、コードリポジトリ６２２に記憶することができる。幾つかの実装形態では、グラフはコードリポジトリ６２２に記憶され、オーバーレイ仕様は、別個のオーバーレイリポジトリ６２４に記憶される。
【００７６】
コードリポジトリ６２２及びオーバーレイリポジトリ６２４のうちの一方又は両方は、コンパイラ６２６と通信し得る。コンパイラ６２６は、グラフを検索し（例えば、コードリポジトリ６２２から）、グラフをコンパイルして、実行可能グラフ６２８にすることができる。実行可能グラフの例としては、図４ａ〜図４ｄに示されるグラフ４００ａ〜４００ｄが挙げられる。実行可能グラフ６２８は、コードリポジトリ６２２から検索された元のグラフと別個であることができる。コンパイルの一環として、コンパイラ６２６は、オーバーレイ仕様を考慮することができる。コンパイラは、オーバーレイ仕様を入力として受け入れ得る。コンパイラは、オーバーレイ仕様において定義される挿入にそれぞれ対応する１つ又は複数のコンポーネントを生成するように構成される。実行可能グラフは、元のグラフのコンポーネント及びフローの少なくとも幾つかに対応するコンポーネント及びフローを含む。実行可能グラフは、生成された挿入コンポーネントも含む。
【００７７】
開発環境６１８は、実行可能グラフ６２８を実行するテスト実行環境６３０を含むことができる。グラフがコンパイラ６２６によりコンパイルされると、実行可能グラフ６２８を実行することができる。実行可能グラフ６２８の実行は、データ（例えば、作業要素又はデータレコード）がコンポーネント間を流れる際、実行可能グラフ６２８のコンポーネント、挿入、及び有向フローに関連付けられた計算を実行することを含むことができる。幾つかの実装形態では、テスト実行環境６３０は、コードリポジトリ６２２に記憶された元のグラフのソースコード又はオーバーレイリポジトリ６２４に記憶されたソースコードを変更せずに、実行可能グラフ６２８を実行する。テスト実行環境６３０には、開発環境６１８のインタフェースを通してアクセス可能であってもよく、又はテスト実行環境６３０はそれ自体のインタフェースを有してもよい。インタフェースは、実行に関連する情報を表示するように構成することができる。インタフェースは、挿入に関連する情報（例えば、プローブによりモニタされ保存されているデータ又はテストソースにより挿入中のデータ）を表示するように構成することもできる。テスト実行環境６３０では、開発者６２０は、実行可能グラフ６２８を複数回、実行し、実行間で実行可能グラフ６２８の態様を変更することが可能であり得る。
【００７８】
幾つかの実装形態では、開発者６２０は、図１のグラフ１００をコードリポジトリ６２２から選択する。開発者６２０はまた、オーバーレイリポジトリ６２４から、図２のオーバーレイ仕様２００も選択する。幾つかの実装形態では、オーバーレイ仕様２００を選択する代わりに、開発者６２０は、オーバーレイリポジトリ６２４内の複数のオーバーレイ仕様から挿入定義を選択し得る。開発者６２０は、コンパイラ６２６にグラフをコンパイルするように命令する。コンパイルの一環として、コンパイラ６２６は、オーバーレイ仕様２００を考慮し、実行可能グラフ６２８を作成する。実行可能グラフ６２８の例は、図４ａ〜図４ｄのグラフ４００ａ〜４００ｄであり、これらのグラフは、オーバーレイ仕様２００において定義される挿入を含む。次に、実行可能グラフ６２８は、テスト実行可能環境６３０で実行される。
【００７９】
実行中又は実行後、開発者６２０は、実行可能グラフ６２８のコンポーネント、挿入、及びフローの実行に関連する情報を観測することができる。例えば、図４ａ〜図４ｄを手短に参照すると、開発者６２０は、プローブ挿入４２０によりモニタされ記憶されたデータが不正確又は予測外であることを観測し得る。開発者６２０は、オーバーレイリポジトリ６２４から、リフォーマットコンポーネント４０８から流れるデータをモニタするように構成されたプローブを定義するプローブ挿入定義と、式によるフィルタコンポーネント４１０から流れるデータをモニタするように構成されたプローブを定義するプローブ挿入定義とを選択し得る。開発者６２０は、これらの２つのプローブにより収集されたデータを分析して、リフォーマット４０８からのデータ出力又は式によりフィルタコンポーネント４１０からのデータ出力が、収集コンポーネント１１２から出力されるデータを不正確又は予測外にしているか否かを判断することができる。
【００８０】
この例を続けると、開発者６２０は、式によるフィルタコンポーネント４１０からのデータ出力が不正確又は予測外であると判断し得る。式によるフィルタコンポーネント４１０から上流に存在する全てのコンポーネント（例えば、フィルタコンポーネント４０３、ソートコンポーネント４０４、及び複製コンポーネント４０６）をデバッグして、不正確データの原因を特定するのではなく、開発者６２０は、代わりに、検証されたデータ（例えば、正確であると検証されたデータ）を収集コンポーネント４１２に提供することを選択し得る。開発者６２０は、オーバーレイリポジトリ６２４から、収集コンポーネント１１２にデータを提供するように構成されたテストソースを定義するテストソース挿入定義を選択することができる。この手法は、開発者６２０が式によるフィルタコンポーネント４１０から下流に位置するグラフ４００ａ〜４００ｄのコンポーネントのデバッグに関わる場合、適切であり得る。そのような手法は、グラフコンポーネントの反復実行を低減することにより、システムリソースを節減することができる。
【００８１】
幾つかの実装形態では、オーバーレイ仕様は、コードリポジトリ６２２又はオーバーレイリポジトリ６２４内にファイルとして永続的に記憶されない。むしろ、通常、オーバーレイファイルに含まれる情報（例えば、挿入定義）は、開発者６２０により開発され（例えば、ユーザインタフェースを通して）、メモリに一時的に記憶される。次に、オーバーレイ情報は、コンパイラ（例えば、図３の３０８）又は状態保存マネージャ（例えば、図５の５０８）に渡される。
【００８２】
図７は、デバッグ手順７００を示すフローチャートである。第１のグラフ（例えば、図１のグラフ１００）が受信される（７０２）。第１のグラフは、コンポーネント及びフローを含む。コンポーネントは、データレコードに対して実行される動作を表し、フローは、コンポーネント間のデータレコードの流れを表す。コンポーネントは、図１に示されるフィルタコンポーネント１０３、ソートコンポーネント１０４、複製コンポーネント１０６、リフォーマットコンポーネント１０８、式によるフィルタコンポーネント１１０、及び収集コンポーネント１１２を含み得る。フローは、複製−リフォーマットフロー１１６及び収集−出力データシンクフロー１１８を含むことができる。
【００８３】
１つ又は複数の挿入を定義する仕様（例えば、オーバーレイ仕様）が受信される（７０４）。仕様は、図２に示されるオーバーレイ仕様２００であり得る。仕様は、１つ又は複数の挿入定義（例えば、テストソース定義２０１及びプローブ定義２１３）を含むことができる。挿入定義は、名称、上流ポート、下流ポート、挿入タイプ、プロトタイプパス、及びレイアウトパラメータを含むことができる（テストソース定義の場合）。各挿入は、第１のグラフのフローに関連付けられる。挿入はプローブ又はテストソースであることができる。
【００８４】
定義された挿入の１つにそれぞれ対応する１つ又は複数のコンポーネントが生成される（７０６）。挿入コンポーネントの例としては、図４ａ〜図４ｄのテストソース挿入４２２及びプローブ挿入４２０が挙げられる。テストソース挿入４２２は、グラフ１００の複製−リフォーマットフロー１１６に関連付けられ、プローブ挿入４２０は、グラフ１００の収集−出力データシンクフロー１１８に関連付けられる。
【００８５】
第１のグラフのコンポーネント及びフローの少なくとも幾つかに対応するコンポーネント及びフローを含む第２のグラフが生成される。第２のグラフは、１つ又は複数の生成されたコンポーネントも含む。図４ａ〜図４ｄに示されるグラフ４００ａ〜４００ｄは、第２のグラフの例である。生成された各コンポーネントは、第１のグラフの特定のフローに関連付けられる。第２のグラフは、これらの特定のフローに対応するフローを含み、生成された各コンポーネントは、第２のグラフ内の対応する各フローに関連付けられる。例えば、グラフ４００ａ〜４００ｄを参照すると、テストソース挿入４２２は、図１の第１のグラフ１００のフロー１１６に対応するフロー４１６に関連付けられる。テストソース挿入４２２は、第１のグラフ１００のリフォーマットコンポーネント１０８に対応するリフォーマットコンポーネント４０８にデータを提供する。プローブ挿入４２０は、第１のグラフ１００のフロー１１８に対応するフロー４１８に関連付けられる。プローブ挿入４２０は、第１のグラフ１００の収集コンポーネント１１２に対応する収集コンポーネント４１２から渡されるデータをモニタする。第２のグラフは、第１のグラフ１００を変更せずに生成され、実行される。
【００８６】
グラフ及びオーバーレイ仕様をコンパイルして、オーバーレイファイルにより定義される挿入を含む第２のグラフを作成することができるコンパイラ（例えば、図３のコンパイラ３０８及び図５のコンパイラ５１２）を説明したが、幾つかの実装形態では、グラフ及びオーバーレイ仕様はコンパイルされない。例えば、グラフ及びオーバーレイ仕様は、コンパイルされずに直接実行することができる。インタプリタは、機械コードに既にコンパイルされた１つ又は複数のサブルーチンのシーケンスに各ステートメントを変換することにより直接、グラフ及びオーバーレイ仕様を実行することができる。
【００８７】
プローブ及びテストソースの形態の挿入を説明したが、幾つかの実装形態では、挿入は他の形態をとることができる。挿入は、グラフの所与のポイントにデータを注入し、グラフの所与のポイントからデータをプルするために広く使用することができる。例えば、挿入は、グラフのフローを通して渡るデータの品質をモニタするように設計することができる。データ品質が閾値を下回る場合、ユーザは自動アラートを受信することができる。挿入の更なる説明は、米国特許出願第ＸＹＺ（代理人整理番号０７４７０−０３２２００１）に見出すことができ、これは参照により本明細書に援用される。
【００８８】
上述したデバッグ手法は、適したソフトウェアを実行する計算システムを使用して実施することができる。例えば、ソフトウェアは、少なくとも１つのプロセッサ、少なくとも１つのデータ記憶システム（揮発性及び／又は不揮発性のメモリ及び／又は記憶要素を含む）、少なくとも１つのユーザインタフェース（少なくとも１つの入力デバイス又はポートを使用して入力を受信し、少なくとも１つの出力デバイス又はポートを使用して出力を提供する）をそれぞれ含む１つ又は複数のプログラムされた又はプログラム可能な計算システム（分散、クライアント／サーバ、又はグリッド等の様々なアーキテクチャのものであり得る）で実行される１つ又は複数のコンピュータプログラムでの手順を含み得る。ソフトウェアは、例えば、グラフの設計、構成、及び実行に関連するサービスを提供するより大きいプログラムの１つ又は複数のモジュールを含み得る。プログラム（例えば、グラフの要素）のモジュールは、データリポジトリに記憶されたデータモデルに準拠するデータ構造又は他の編成データとして実施することができる。
【００８９】
ソフトウェアは、ＣＤ−ＲＯＭ若しくは他のコンピュータ可読媒体（例えば、汎用若しくは専用計算システム若しくはデバイスにより可読）等の有形の非一時的媒体で提供してもよく、又は実行される計算システムの有形の非一時的媒体にネットワークの通信媒体を介して送出（例えば、伝搬信号で符号化される）してもよい。処理の幾つか又は全ては、専用コンピュータで実行されてもよく、又はコプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、若しくは専用の特定用途向け集積回路（ＡＳＩＣ）等の専用ハードウェアを使用して実行してもよい。処理は、ソフトウェアにより指定された計算の異なる部分が異なる計算要素により実行される分散方式で実施され得る。そのような各コンピュータプログラムは、好ましくは、記憶デバイス媒体がコンピュータに読み取られた場合、本明細書に記載の処理を実行するようにコンピュータを構成し動作させるために、汎用又は専用プログラマブルコンピュータがアクセス可能な記憶デバイスのコンピュータ可読記憶媒体（例えば、固体状態メモリ若しくは媒体、又は磁気若しくは光学媒体）に記憶されるか、又はダウンロードされる。本発明のシステムは、コンピュータプログラムが構成された有形の非一時的媒体として実施されることも考慮し得、ここで、媒体は、本明細書に記載される処理ステップの１つ又は複数を実行するように、特定の予め定義された方式でコンピュータを動作させるように構成される。
【００９０】
本発明の幾つかの実施形態について説明した。それにもかかわらず、上記説明が本発明の範囲の限定ではなく、例示が意図され、本発明の範囲が以下の特許請求の範囲により規定されることを理解されたい。したがって、他の実施形態も以下の特許請求の範囲内にある。例えば、本発明の範囲から逸脱せずに、様々な変更形態がなされ得る。更に、上述したステップの幾つかは順序に依存せず、したがって、記載される順序と異なる順序で実行することができる。
【図１】
0006674459.tif 000002
【図２】
0006674459.tif 000003
【図３】
0006674459.tif 000004
【図４ａ】
0006674459.tif 000005
【図４ｂ】
0006674459.tif 000006
【図４ｃ】
0006674459.tif 000007
【図４ｄ】
0006674459.tif 000008
【図５】
0006674459.tif 000009
【図６】
0006674459.tif 000010
【図７】
0006674459.tif 000011