(57)【要約】  方法は、プロセッサによってコンピュータ・プログラムの第１のバージョンを解析するステップを含む。この解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。この方法は、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第２のバージョンを生成するステップを含む。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
2017538996.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによって、コンピュータ・プログラムの第１のバージョンを解析するステップであって、前記コンピュータ・プログラムの前記第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含み、前記第１のデータ処理要素が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ・ソースを参照するステップと、
前記第１のデータ・ソースと異なる第２のデータ・ソースを表すデータ・ソース要素を生成するステップと、
前記コンピュータ・プログラムの第２のバージョンを生成するステップであって、前記コンピュータ・プログラムの前記第２のバージョンが、前記生成されたデータ・ソース要素、および前記第１のデータ処理要素に基づく第２のデータ処理要素を含むステップと
を含み、
前記コンピュータ・プログラムの前記第２のバージョンにおいて、前記第２のデータ処理要素が前記生成されたデータ・ソース要素を参照する、方法。
【請求項２】
前記第２のデータ・ソースの位置を決定するステップを含む、請求項１に記載の方法。
【請求項３】
前記第２のデータ・ソースの前記位置を決定するステップが、前記位置を示す入力を受信するステップを含む、請求項２に記載の方法。
【請求項４】
ユーザ・インターフェースにおいて、前記識別された第１のデータ処理要素、前記第１のデータ・ソース、またはその両方の識別子を提示するステップを含む、請求項１に記載の方法。
【請求項５】
前記識別された第１のデータ処理要素、前記第１のデータ・ソース、またはその両方の選択結果を受信するステップを含む、請求項４に記載の方法。
【請求項６】
前記コンピュータ・プログラムの前記第１のバージョンを解析するステップが、前記コンピュータ・プログラムの前記第１のバージョンでの前記データ処理要素のうち少なくとも１つへの入力フローを解析するステップを含む、請求項１に記載の方法。
【請求項７】
前記コンピュータ・プログラムの実行時に、前記コンピュータ・プログラムの前記第１のバージョンを解析するステップを含む、請求項１に記載の方法。
【請求項８】
前記コンピュータ・プログラムがグラフを含む、請求項１に記載の方法。
【請求項９】
前記コンピュータ・プログラムの前記第２のバージョンを生成するステップが、前記生成されたデータ・ソース要素を前記第２のデータ処理要素への入力フローに配置するステップを含む、請求項８に記載の方法。
【請求項１０】
前記第２のデータ・ソースからのデータが、前記第１のデータ・ソースからのデータと同じフォーマットを有する、請求項１に記載の方法。
【請求項１１】
前記データ・ソース要素を生成するステップが、前記生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む、請求項１に記載の方法。
【請求項１２】
前記第１のデータ・ソースからのデータに基づいて、前記第２のデータ・ソースにデータを読み込むステップを含む、請求項１に記載の方法。
【請求項１３】
前記コンピュータ・プログラムの前記第１のバージョンでは、第３のデータ処理要素が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ宛先を参照し、前記コンピュータ・プログラムの前記第２のバージョンでは、前記第３のデータ処理要素に基づく第４のデータ処理要素が、前記第１のデータ宛先とは異なる第２のデータ宛先を参照する、請求項１に記載の方法。
【請求項１４】
前記コンピュータ・プログラムの前記第１のバージョンに含まれる第３のデータ処理要素を識別するステップであって、前記第３のデータ処理が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ宛先を参照するステップと、
前記第１のデータ宛先と異なる第２のデータ宛先を表す出力要素を生成するステップと
を含み、
前記コンピュータ・プログラムの前記第２のバージョンが、前記生成された出力要素、および前記第３のデータ処理要素に基づく第４のデータ処理要素を含み、
前記コンピュータ・プログラムの前記第２のバージョンでは、前記第４のデータ処理要素が、前記生成された出力要素を参照する、請求項１に記載の方法。
【請求項１５】
前記第２のデータ宛先の位置を決定するステップを含む、請求項１４に記載の方法。
【請求項１６】
前記第２のデータ宛先の前記位置を決定するステップが、前記位置を示す入力を受信するステップを含む、請求項１４に記載の方法。
【請求項１７】
前記コンピュータ・プログラムの前記第２のバージョンを実行するステップを含む、請求項１に記載の方法。
【請求項１８】
前記コンピュータ・プログラムの前記第２のバージョンを実行するステップによって、前記コンピュータ・プログラムのデバッギングが可能になる、請求項１に記載の方法。
【請求項１９】
前記コンピュータ・プログラムの少なくとも一部分の前記第２のバージョンを生成するステップが、前記コンピュータ・プログラムの前記一部分のコピーを生成するステップを含む、請求項１に記載の方法。
【請求項２０】
前記生成されたデータ・ソース要素を含むように、前記コンピュータ・プログラムの前記一部分の前記コピーを修正するステップを含む、請求項１９に記載の方法。
【請求項２１】
プロセッサによって、コンピュータ・プログラムの第１のバージョンを解析するための手段であって、前記解析するステップが、前記コンピュータ・プログラムの前記第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含み、前記第１のデータ処理要素が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ・ソースを参照する手段と、
前記第１のデータ・ソースと異なる第２のデータ・ソースを表すデータ・ソース要素を生成するための手段と、
前記コンピュータ・プログラムの第２のバージョンを生成するための手段であって、前記コンピュータ・プログラムの前記第２のバージョンが、前記生成されたデータ・ソース要素、および前記第１のデータ処理要素に基づく第２のデータ処理要素を含む手段と
を含み、
前記コンピュータ・プログラムの前記第２のバージョンにおいて、前記第２のデータ処理要素が前記生成されたデータ・ソース要素を参照する、システム。
【請求項２２】
メモリに結合されたプロセッサを含むシステムであって、
前記プロセッサによって、コンピュータ・プログラムの第１のバージョンを解析し、前記解析するステップが、コンピュータ・プログラムの前記第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含み、前記第１のデータ処理要素が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ・ソースを参照し、
前記第１のデータ・ソースと異なる第２のデータ・ソースを表すデータ・ソース要素を生成し、
前記コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成し、前記コンピュータ・プログラムの前記第２のバージョンが、前記生成されたデータ・ソース要素、および前記第１のデータ処理要素に基づく第２のデータ処理要素を含む
ように、前記プロセッサおよびメモリが構成され、
前記コンピュータ・プログラムの前記第２のバージョンにおいて、前記第２のデータ処理要素が前記生成されたデータ・ソース要素を参照する、システム。
【請求項２３】
コンピュータ・システムが、
プロセッサによって、コンピュータ・プログラムの第１のバージョンを解析し、前記解析するステップが、コンピュータ・プログラムの前記第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含み、前記第１のデータ処理要素が、前記コンピュータ・プログラムの前記第１のバージョンの外部の第１のデータ・ソースを参照し、
前記第１のデータ・ソースと異なる第２のデータ・ソースを表すデータ・ソース要素を生成し、
前記コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成し、前記コンピュータ・プログラムの前記第２のバージョンが、前記生成されたデータ・ソース要素、および前記第１のデータ処理要素に基づく第２のデータ処理要素を含む
ようにするための命令を記憶する、持続的でコンピュータ読取り可能な媒体であって、
前記コンピュータ・プログラムの前記第２のバージョンにおいて、前記第２のデータ処理要素が前記生成されたデータ・ソース要素を参照する、持続的でコンピュータ読取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本出願は、２０１５年５月１９日出願の米国特許出願第１４／７１５，８０７号の優先権を主張し、これが２０１４年１１月５日出願の米国仮特許出願第６２／０７５，４５１号の優先権を主張し、その内容全体を参考として本明細書に援用する。
【０００２】
背景
この説明は、グラフのデバッギングに関する。
【背景技術】
【０００３】
コード開発者は、開発プロセス全体を通して、ソース・コードをデバッグすることが多い。その際、ソース・コードの機能に影響を及ぼす可能性のあるデバッグ・コードで、このソース・コードを修正することができる。ソース・コードの元の機能を復元するためにデバッギングを終了するとき、追加されたデバッグ・コードをソース・コードから削除することがしばしば望ましい。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
一般的な態様では、ある方法では、プロセッサによってコンピュータ・プログラムの第１のバージョンを解析するステップを含む。この解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。この方法は、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第２のバージョンを生成するステップを含む。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
【０００５】
各実施形態には、以下の特徴のうちの１つまたは複数が含まれ得る。
【０００６】
この方法は、第２のデータ・ソースの位置を決定するステップを含む。第２のデータ・ソースの位置を決定するステップは、この位置を示す入力を受信するステップを含む。
【０００７】
この方法は、ユーザ・インターフェースにおいて、識別された第１のデータ処理要素、第１のデータ・ソース、またはその両方の識別子を提示するステップを含む。この方法は、識別された第１のデータ処理要素、第１のデータ・ソース、またはその両方の選択結果を受信するステップを含む。
【０００８】
コンピュータ・プログラムの第１のバージョンを解析するステップは、コンピュータ・プログラムの第１のバージョンでのデータ処理要素のうち少なくとも１つへの入力フローを解析するステップを含む。
【０００９】
この方法は、コンピュータ・プログラムの実行時に、このコンピュータ・プログラムの第１のバージョンを解析するステップを含む。
【００１０】
コンピュータ・プログラムはグラフを含む。コンピュータ・プログラムの第２のバージョンを生成するステップは、生成されたデータ・ソース要素を第２のデータ処理要素への入力フローに配置するステップを含む。
【００１１】
第２のデータ・ソースからのデータは、第１のデータ・ソースからのデータと同じフォーマットを有する。
【００１２】
データ・ソース要素を生成するステップは、この生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む。
【００１３】
この方法は、第１のデータ・ソースからのデータに基づいて、第２のデータ・ソースにデータを読み込むステップを含む。
【００１４】
コンピュータ・プログラムの第１のバージョンでは、第３のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ宛先を参照する。コンピュータ・プログラムの第２のバージョンでは、第３のデータ・ソース要素に基づく第４のデータ処理要素が、第１のデータ宛先とは異なる第２のデータ宛先を参照する。
【００１５】
この方法は、コンピュータ・プログラムの第１のバージョンに含まれる第３のデータ処理要素を識別するステップを含む。第３のデータ処理が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ宛先を参照する。この方法は、第１のデータ宛先とは異なる第２のデータ宛先を表す、出力要素を生成するステップを含む。コンピュータ・プログラムの第２のバージョンは、生成された出力要素、および第３のデータ処理要素に基づく第４のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第４のデータ処理要素が、生成された出力要素を参照する。この方法は、第２のデータ宛先の位置を決定するステップを含む。第２のデータ宛先の位置を決定するステップは、この位置を示す入力を受信するステップを含む。
【００１６】
この方法は、コンピュータ・プログラムの第２のバージョンを実行するステップを含む。
【００１７】
コンピュータ・プログラムの第２のバージョンを実行するステップによって、このコンピュータ・プログラムのデバッギングが可能になる。
【００１８】
コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成するステップは、このコンピュータ・プログラムの一部分のコピーを生成するステップを含む。この方法は、生成されたデータ・ソース要素を含むように、コンピュータ・プログラムの一部分のコピーを修正するステップを含む。
【００１９】
一般的な態様では、システムが、プロセッサによってコンピュータ・プログラムの第１のバージョンを解析する手段を含む。この解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。このシステムは、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成する手段を含む。このシステムは、コンピュータ・プログラムの第２のバージョンを生成する手段を含む。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
【００２０】
一般的な態様では、システムが、メモリに結合されたプロセッサを含み、このプロセッサおよびメモリは、プロセッサによってコンピュータ・プログラムの第１のバージョンを解析するように構成される。解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。このプロセッサおよびメモリは、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成するように構成される。このプロセッサおよびメモリは、コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成するように構成される。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
【００２１】
一般的な態様では、持続的なコンピュータ読取り可能な媒体は、コンピューティング・システムが、プロセッサによってコンピュータ・プログラムの第１のバージョンを解析できるようにするための命令を記憶する。解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。この命令によって、コンピューティング・システムが、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成するようになる。この命令によって、コンピューティング・システムが、コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成するようになる。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
【００２２】
他の特徴および利点は、以下の説明および特許請求の範囲から明白になろう。
【図面の簡単な説明】
【００２３】
【図１】グラフの一例である。
【図２】オーバレイ指定の一例である。
【図３】ブロック図である。
【図４】流れ図である。
【図５Ａ】修正されたグラフの例である。
【図５Ｂ】修正されたグラフの例である。
【図５Ｃ】修正されたグラフの例である。
【図５Ｄ】修正されたグラフの例である。
【図６】ブロック図である。
【図７】ブロック図である。
【図８】ブロック図である。
【図９】流れ図である。
【発明を実施するための形態】
【００２４】
説明
グラフなどの実行可能なアプリケーションをテストまたはデバッグするとき、試験者または開発者は、入力データの特定のセットを使用してテストを実行したいと考えることがある。例によっては、試験者は、アプリケーションに変更を加えたいと思うことがある。この変更の前後ともに、入力データの一貫したセットを使用してアプリケーションを実行することにより、アプリケーションが出力するデータへのこの変更の影響を監視することができる。例によっては、アプリケーションの機能の全てを少なくとも一度実行させるようにすることになる、テスト・データのセットなど、試験者は、アプリケーションをテストするときに使用されることになるテスト・データの特定のセットを有する場合がある。同様にして、試験者は、アプリケーションがその出力データを書き込む先の標準の宛先とは異なる特定の宛先に、アプリケーションが出力するデータを書き込みたいと思うことがある。
【００２５】
従来の開発環境では、テスト用の入力データの所望のセットを試験者が手動で提供し、出力データについて宛先を指定する。ここで、入力データをアプリケーションに提供するデータ・ソース、およびアプリケーションからの出力データを受信する出力データ受信側を自動的に識別することへの取組みを説明する。識別されたデータ・ソースは、テスト・ソースと呼ばれることもある置換データ・ソースで自動的に置換することができる。識別された出力データ受信側は、プローブと呼ばれることもある代替の宛先で自動的に置換することができる。テスト・ソースおよびプローブは挿入の例である。
【００２６】
例によっては、実行可能なアプリケーションはグラフベースのプロセスである。テスト・ソースおよびプローブなどの挿入は、グラフベースのプロセスでのフローに関連するオブジェクトである。テスト・ソースは、フローを通過するデータ（たとえばアップストリーム・データ）を新規データで置換することができ、その結果、グラフのそれぞれの実行について、上流側の計算を再実行する必要はない。たとえば、テスト・ソースは、データ・ソースからではなくテスト・ソースからグラフにテスト・データが提供されるよう、このデータ・ソースを置換することができる。プローブは、グラフが実行されるとき、フローを通過するデータを監視することができ、後に検査または再使用するため、データを保存できるようにする。たとえば、プローブは、データベースなどの出力データ受信側に他の方法で保存されていたはずのデータを受信することができる。
【００２７】
テスト・ソースやプローブなどの挿入は、オーバレイ指定によって定義することができ、この指定は、グラフまたは他の実行可能なアプリケーションから分離されたファイルである。例によっては、アプリケーションの自動解析に基づいて、たとえばアプリケーションのデータ・ソースおよび出力データ受信側の自動識別に基づいて、挿入を自動的に定義することができる。
【００２８】
オーバレイ指定で定義される挿入は、元のアプリケーションの一部分になることなく、実行中にアプリケーションに追加することができる。アプリケーションがコンパイルされると、コンパイラは、オーバレイ・ファイルを加味し、挿入を含む実行可能なアプリケーションを生成する。アプリケーションの第１のバージョンとしての元のアプリケーション、およびアプリケーションの第２のバージョンとしての、挿入を含むアプリケーションを参照することがある。たとえば、グラフベースのプロセスの例では、オーバレイ指定において定義された挿入オブジェクトと結合された、グラフの第１のバージョンの構成要素を含むグラフの第２のバージョンとして、実行可能なグラフを視覚的に表すことができる。例によっては、実行可能なグラフはシェル・スクリプトであり、ファイル内には記憶されない。例によっては、実行可能なグラフおよびこのグラフは、別々のファイルに記憶される。
【００２９】
グラフの第２のバージョンへの挿入の取込みは、デバッグされているグラフの第１のバージョンを修正しない。その代わりに、挿入定義は、別個のファイル（たとえば別個のオーバレイ指定）にとどまり、コード生成の開始時点において、修正済みグラフに含めるために通常のグラフ構成要素へと変換することができる。したがって、デバッギング中に元のグラフを意図せずに破壊するリスクがない。
【００３０】
挿入は、データ・ソースおよび出力データ受信側以外の、グラフ内の位置で行うこともできる。これらの挿入は、内部挿入と呼ばれることがあり、データがグラフを通って流れてくるときに、試験者がこのデータにアクセスできるようにすることができる。たとえば、試験者は、データがある構成要素から別の構成要素に流れるとき、このデータを検証したいと思うことがある。試験者は、上流プロセスが正しく機能することを検証した可能性もあるが、下流プロセスを検証しなかった可能性がある。場合によっては、上流プロセスは、実行するのに要する時間が長くなる場合があり、その結果、テストが非効率になる。試験者が、これまでに妥当性検査された上流動作を、これまでに妥当性検査されたデータで置き換えることができる場合、テスト効率を改善することができる。従来の開発環境では、試験者は、グラフを修正して、ウォッチ・ポイントを追加するか、または上流構成要素を、事前に妥当性検査されたデータで置換する必要がでてくるはずである。しかし、いったんグラフが編集されると、試験者は、元のグラフの機能を修正しなかったことに確信がもてなくなる。環境によっては、試験者は、グラフを編集するために必要な許可を欠いている場合がある。
【００３１】
図１は、グラフ１００の一例を示す。グラフ１００は、フローによって接続されたデータ処理構成要素を含む、コンピュータ・プログラムの視覚表現である。２つの構成要素を接続するフローは、第１の構成要素から出力されたレコードが、第２の構成要素に渡されることを示す。フローによって第１の構成要素が第２の構成要素に接続されているとき、第１の構成要素は第２の構成要素を参照する。
【００３２】
（図示したような）データベースなどのデータ・ソース１０２、ファイル、キュー、実行可能文（たとえばＳＱＬ文）、またはグラフ１００の外部にある別のタイプのデータ・ソースは、グラフ１００が処理することになる１つまたは複数のデータ・レコードを含む。外部という言葉によって、データ・ソース１０２のデータが、グラフ１００内に記憶されないことを意味する。データ・ソース１０２は、フローによってフィルタ構成要素１０３に接続されている。一般に、フィルタ構成要素は、所定の判定基準を満たさないレコードを選別または削除する。この例では、フィルタ構成要素１０３は、オハイオ州在住の顧客のデータ・レコードを通過させ、その他のレコードを拒否する。フィルタ構成要素１０３は、選別済みのデータ・レコードを郵便番号でソーティングする、ソート構成要素１０４に接続されている。ソート構成要素１０４は、２つの異なる方式でデータ・レコードを処理するためにこのデータ・レコードのコピーを作成する、複製構成要素１０６に接続されている。複製構成要素は、フォーマット変更構成要素１０８、および表現式による選別の構成要素１１０に接続されている。たとえば、オハイオ州在住の顧客のデータ・レコードの１つの実現値は、郵便番号でソーティングされ、フォーマット変更構成要素１０８に送られ、またデータ・レコードの別の実現値が表現式による選別の構成要素１１０に送られる。フォーマット変更構成要素１０８は、データ・レコードのフォーマットを別のデータ・フォーマットに変更し、表現式による選別の構成要素１１０は、データ・レコードに関連する表現式に基づいて、このデータ・レコードを削除する。フォーマット変更構成要素１０８、および表現式による選別の構成要素１１０は、受信済みのデータ・レコードを結合する集約構成要素１１２に接続されており、この集約構成要素は、データベース（図示せず）、ファイル、キュー、または下流処理構成要素など、グラフの外部に存在する出力データ受信側構成要素１１４に接続されている。外部という言葉によって、出力データ受信側１１４のデータが、グラフ１００内に記憶されないことを意味する。グラフ１００は、各構成要素間に多くのフローを含むが、データ・ソース１０２とフィルタ構成要素１０３の間のフロー１１６（ソース／フィルタ・フロー１１６と呼ぶことがある）、および集約構成要素１１２と出力データ受信側１１４の間のフロー１１８（集約／出力フロー１１８と呼ぶことがある）が、この例では特に対象となる。
【００３３】
グラフ１００の試験者は、グラフ１００をデバッグして、その機能を検証したいと思うことがある。場合によっては、試験者は、データがある構成要素から別の構成要素に流れるとき、このデータを検証したいと思うことがある。場合によっては、試験者は、グラフ１００での上流構成要素を迂回し、その代わりに、迂回された構成要素の位置にデータを挿入したいと思うことがある。場合によっては、試験者は、グラフによって出力されたデータへの、グラフの変更の影響を監視するために、入力データの一貫したセットを使用して、グラフ１００の動作をテストしたいと思うことがある。場合によっては、試験者は、グラフの機能の全てを少なくとも１回だけは実行できるようにすることを知っている入力データのセットを使用して、グラフ１００の動作をテストし、したがってグラフの完全なテストを可能にしたいと思うことがある。
【００３４】
グラフ１００をデバッグする際、グラフの修正を控えることが望ましい場合がある。たとえば、試験者は、グラフの機能を損なうリスクを負いたくないと思うことがある。例によっては、試験者は、グラフへのアクセスを制限されているか、またはアクセスできない場合がある（たとえば、試験者には、グラフを編集するのに必要な許可がない場合がある）。グラフ１００を修正することなく、このグラフをデバッグするために、オーバレイを使用してグラフをデバッグすることができる。例によっては、グラフの自動解析に基づいて、このオーバレイを自動的に指定することができる。元のグラフ１００（グラフの第１のバージョンと呼ばれることがある）、およびオーバレイ指定に基づいて、グラフ１００の少なくとも一部分の第２のバージョンを生成することができる。
【００３５】
図２には、オーバレイを定義するオーバレイ指定２００の一例が示してある。オーバレイ指定２００は、ファイルに記憶することができる。このファイルは、グラフを含むファイルと分けてもよい。オーバレイ指定は、１つまたは複数の挿入を定義する。挿入は、グラフ１００のフローに関連したオブジェクトとすることができ、プローブまたはテスト・ソースの形をとることができる。
【００３６】
グラフ１００の各構成要素間のフローをデータが通過するとき、たとえば、第１の構成要素から第２の構成要素までのフローに沿って、または出力データ受信側までのフローに沿って、プローブが、このデータを収集または監視する。たとえば、グラフ１００が実行される際にデータがフローを通過するとき、このデータを監視し、後で検査するために保存し、または再使用するために保存することができる。オーバレイ指定は、収集または監視されることになるデータを運ぶフローを参照する、プローブを定義することができる。プローブは、データが収集または監視されることになるフローを指定する。プローブは、特定の値を報告し、または特定の値が、所定範囲内または所定範囲外にあるときに、そのことを報告するように構成することができる。プローブを通過するデータは、後で解析または使用するために保存してもよく、たとえばこのデータは、単層ファイルまたはリレーショナル・データベースに記憶することができる。
【００３７】
例によっては、プローブは、グラフ１００のある構成要素から、ファイルまたはデータベースなど出力データ受信側までのフローを参照することができる。グラフ１００のデバッギング中に、データ受信側までのフローに沿ってプローブを配置することによって、このプローブは、グラフ１００から出力されるデータを受信する。たとえば、グラフ１００がデバッギング・モードで実行されるたびに、出力データをプローブによって受信し、ファイルに書き込むことができ、その結果、様々なグラフ実行からの出力データを比較することができ、または他の方法で評価することができる。例によっては、出力データ受信側が自動的に識別され、オーバレイが自動的に指定されて、識別された出力データ受信側の前に挿入するためのプローブを定義する。
【００３８】
例によっては、プローブは、グラフ１００の上流構成要素から下流構成要素までのフローを参照することができる。グラフ１００のデバッギング中に、下流構成要素までのフローに沿ってプローブを配置することによって、このプローブは、下流構成要素によって他の方法で受信されていたはずのデータを受信し、したがって下流構成要素が実行しないようにする。たとえば、試験者は、下流構成要素の前にグラフが処理する結果を監視したいと思うことがある。たとえば、下流構成要素は、グラフの外部に影響を及ぼす機能をもっていてもよく、たとえば下流構成要素は、この下流構成要素によって自身のクレジット・カードのレコードが処理されるそれぞれの人に向けて、テキスト・メッセージを送信してもよい。グラフのデバッギング中、試験者は、グラフの外部に影響を及ぼすような構成要素を使用不可にしたいと思うことがある。
【００３９】
グラフ１００の２つの構成要素間の特定のフローにおいて、テスト・ソースがグラフ１００にデータを挿入する。オーバレイ指定は、テスト・ソースからのデータで置換されることになるデータを運ぶフローを参照する、テスト・ソースを定義することができる。例によっては、テスト・ソースは、通常フローを通過するはずのデータを、新規のデータで置換する。状況によっては、テスト・ソースは、これまでに保存されたデータを読み取り、このデータを下流構成要素に渡すように構成することができる。例によっては、テスト・ソースは、データベースまたはファイルなど、データ・ソースからのフローにおいて、データをグラフ１００に挿入する。テスト・ソースは、データ・ソースによって他の方法で提供されたはずのデータと同じフォーマットを有するデータを挿入することができる。例によっては、データ・ソースが自動的に識別され、オーバレイが自動的に指定されて、識別されたデータ・ソースを置換するためのテスト・ソースを定義する。
【００４０】
例によっては、あるポイントまで（たとえば、ある構成要素まで）グラフ１００を実行した結果が、これまでに検証されていた場合がある。すなわち、上流プロセス機能が、あるポイントまで検証されていた場合がある。こうした場合、グラフ１００が実行されるたびに上流構成要素が各機能を再処理することは、非効率になる場合がある。テスト・ソースは、そのあるポイントにおいて、データ（たとえば、これまでに検証されたデータ）をグラフに挿入することができる。このようにして、これまでに実行されたグラフ１００のセクション全体を迂回してもよい。
【００４１】
図２には、オーバレイを定義するオーバレイ指定２００の一例が示してある。オーバレイ指定２００は、１つまたは複数の挿入定義を含むことができる。この例では、オーバレイ指定２００は、１つのテスト・ソース定義２０１、および１つのプローブ定義２１３を含む。オーバレイ指定２００は、挿入定義が対応できる先のグラフを指定する、３行のヘッダから開始する。このヘッダの後に、テスト・ソース定義２０１が続き、これが、名前２０２、上流ポート２０４、下流ポート２０６、挿入タイプ２０８、プロトタイプ・パス２１０、およびレイアウト・パラメータ２１２を含む。
【００４２】
テスト・ソース定義２０１の上流ポート２０４は、テスト・ソースがグラフ１００に挿入されることになるフローのすぐ上流にある構成要素の出力ポートを参照する。フローの上流にある構成要素は、データが、その出力ポートからフロー上に出力される構成要素である。図２の例では、テスト・ソース定義２０１の上流ポート２０４が、データベース１０２の出力を指す。テスト・ソース定義２０１の下流ポート２０６は、テスト・ソースがグラフ１００に挿入されることになるフローのすぐ下流にある構成要素の入力ポートを参照する。フローの下流にある構成要素は、データが、その入力ポートにおいてフローから受信される構成要素である。図２の例では、テスト・ソース定義の下流ポート２０６が、フィルタ構成要素１０３の入力を指す。したがって、この例でのテスト・ソース定義２０１は、データベース１０２の出力と、フィルタ構成要素１０３の入力との間のフローにテスト・ソースが配置されることになり、その結果、このテスト・ソースが提供するデータが、データベース１０２からの入力データを置換できることを示す。
【００４３】
挿入タイプ２０８は、挿入がテスト・ソースなのか、それともプローブなのか定義する。値「０」がテスト・ソースを定義し、値「１」がプローブを定義する。この挿入はテスト・ソースなので、挿入タイプ２０８の値は「０」である。
【００４４】
プロトタイプ・パス２１０は、挿入のタイプを示す。この例では、この挿入はテスト・ソースなので、プロトタイプ・パス２１０は入力ファイル構成要素を指定する。プロトタイプ・パス２１０は、特定のタイプの挿入を定義するコードを含むファイルを指す。レイアウト・パラメータ２１２は、テスト・ソースが含むことになるデータを含むソース・ファイルの位置を定義する。例によっては、この位置はファイル・パスである。ソース・ファイル内のデータは、通常、上流ポート２０４および下流ポート２０６によって定義されるフローを通過するはずのデータを置換することになる。すなわち、テスト・ソースがグラフ１００に適用されると、フィルタ構成要素１０３は、データベース１０２からのデータを受信するのではなく、ソース・ファイル内のデータを受信する。
【００４５】
このソース・ファイルは、テスト・ソースの下流の構成要素によって他の方法で受信されるはずのデータと同じフォーマットを有するデータを含む。例によっては、ソース・ファイル内のデータは、テスト・ソースの上流にあるデータ・ソース（たとえばデータベース）内のデータと同じでもよい。たとえば、データベース１０２からのデータ・レコードを、ソース・ファイルにコピーすることができる。例によっては、データ・ソースは、ＳＱＬクエリなどの実行可能文を示す。これらの例では、ＳＱＬクエリを実行することができ、このクエリ実行の結果をソース・ファイルに記憶することができる。例によっては、ソース・ファイル内のデータは、データ・ソース以外のどこかから取得することができる。たとえば、ソース・ファイル内のデータを生成して、グラフ１００を完全にデバッグするために、あるデータ（たとえば、ある範囲の値）を確実に処理することができる。例によっては、データ・ソース内のデータが変更されても、ソース・ファイル内のデータは同じままであり、したがって、入力データの一貫したセットでデバッギングを継続できるようになる。
【００４６】
例によっては、ソース・ファイル内のデータは、グラフ１００の通常の実行中にフローを通過するはずのデータと同じでもよいが、テスト・ソースを使用してこのデータを挿入する代わりに、上流構成要素が処理を控えることができる。たとえば、複製構成要素１０６などの上流構成要素は、データを処理するのに大量のシステム・リソースを必要とすることがあり、または、データ・フロー・グラフ１００内の他の構成要素と比較して、データを処理するのに要する時間が相対的に長くなることがある。したがって、既知のデータ（たとえば、通常の実行中にフローを通過するはずの同じデータ）をフローに挿入して、時間を節約し、またはシステム・リソースを節約することができる。
【００４７】
このテスト・ソース定義２０１の後に、プローブ定義２１３が続き、これが、名前２１４、上流ポート２１６、下流ポート２１８、挿入タイプ２２０、およびプロトタイプ・パス２２２を含む。
【００４８】
プローブ定義２１３の上流ポート２１６は、プローブがグラフ１００に挿入されることになるフローのすぐ上流にある構成要素の出力ポートを参照する。図２の例では、プローブ定義２１３の上流ポート２１６が、集約構成要素１１２の出力を指す。プローブ定義２１３の下流ポート２１８は、プローブがグラフ１００に挿入されることになるフローのすぐ下流にある構成要素の入力ポートを参照する。図２の例では、プローブ定義２１３の下流ポート２１８が、出力データ受信側構成要素１１４の出力を指す。したがって、この例でのプローブ定義２１３は、集約構成要素１１２の出力と、出力データ受信側構成要素１１４との間のフローにプローブが配置されることになり、その結果、出力データ受信側構成要素に他の方法で書き込まれたはずのデータをプローブが受信することを示す。
【００４９】
プローブ定義２１３の挿入タイプ２２０は、挿入がテスト・ソースなのか、それともプローブなのか定義する。値「１」がプローブを定義する。この挿入はプローブなので、挿入タイプ２２０の値は「１」である。
【００５０】
プロトタイプ・パス２２２は、挿入のタイプを示す。この例では、この挿入はプローブなので、プロトタイプ・パス２２２は出力ファイル構成要素を指定する。プロトタイプ・パス２２２は、特定のタイプの挿入を定義するコードを含むファイルを指す。
【００５１】
例によっては、プローブによって監視されることになるデータは、システムによって自動的に作成されるファイルに記憶される。このファイルは、システムによって決定される位置に記憶することができる。プローブは、上流ポート２１６および下流ポート２１８によって定義されたフローを通過するデータを監視する。すなわち、プローブがグラフ１００に適用されると、集約構成要素１１２の出力から、出力データ受信側構成要素１１４の入力まで通過するデータが監視され、システムによって自動的に作成されるファイルに記憶される。例によっては、このデータを、記憶する前に監視することができる。ファイルは、プローブ定義によって参照される構成要素（この例では、外部のデータ受信側構成要素１１４）によって受信されたはずの同じフォーマットのデータを受信することができる。
【００５２】
例によっては、グラフ１００の自動解析の結果として、オーバレイ指定によって、１つまたは複数の挿入を定義することができる。たとえば、グラフ１００の自動解析を実行して、データベース、ファイル、または他のタイプのデータ・ソースなど、任意のデータ・ソースを識別することができる。識別されたデータ・ソースのうち１つまたは複数を、テスト・ソースで自動的に置換することができる。置換されたデータ・ソースにより、データ・ソースのすぐ下流のフローにテスト・ソースが挿入され、その結果、データ・ソースからのデータではなく、このテスト・ソースからのデータが下流構成要素に提供されることを意味する。同様に、グラフ１００の自動解析は、データベース、ファイル、または他のタイプの出力データ受信側など、任意の出力データ受信側を識別することができる。識別された出力データ受信側のうち１つまたは複数を、プローブで自動的に置換することができる。置換された出力データ受信側により、出力データ受信側のすぐ上流のフローにプローブが挿入され、その結果、上流構成要素からのデータが、出力データ受信側ではなくプローブによって受信される。グラフ１００の自動解析を使用して、特定のタイプの構成要素（たとえば、実行するとグラフ１００の外部に影響を及ぼす特定のタイプの構成要素）など、他の構成要素を識別することもできる。
【００５３】
図３を参照すると、解析エンジン３００が、グラフ１００を自動的に解析して、データ・ソース３０２および出力データ受信側３０４を識別する。たとえば、解析エンジン３００は、グラフ１００のそれぞれのノードについて、パラメータおよび接続にアクセスすることができる。所与のノードが入力接続をもたない場合、解析エンジン３００は、このノードをデータ・ソースとして識別する。同様に、所与のノードが出力接続をもたない場合、解析エンジン３００は、このノードを出力データ受信側として識別する。グラフのそれぞれのノードにアクセスし、これを解析するために、解析エンジンは、グラフの接続の全てを「探索」して回る。例によっては、実行時（たとえば、デバッギング目的で処理が開始するとき）まで、グラフ１００はインスタンス化またはパラメータ化されない。解析エンジン３００は、実行時に自動解析を実行して、グラフ１００内のデータ・ソースおよび出力データ受信側を識別することができる。
【００５４】
解析エンジン３００は、データ・ソース３０２および出力データ受信側３０４の識別子を挿入エンジン３０６に送信し、この挿入エンジンは、データ・ソースと出力データ受信側のいずれが、それぞれテスト・ソースおよびプローブで置換されることになるのか決定する。例によっては、試験者３０８は、テスト・ソースおよびプローブで置換されることになる、データ・ソースおよび出力データ受信側のリスト３１０を提供する。このリスト３１０は、ファイル、データベースとして、または別のフォーマットで提供することができる。たとえば、試験者３０８は、頻繁に変更されると予想される任意のデータ・ソースを、リスト３１０上にもっていてもよい。このようなデータ・ソースをテスト・ソースで置換することにより、試験者３０８は、一貫した入力データを使用してグラフを確実にテストできるようにすることができる。
【００５５】
挿入エンジン３０６は、識別されたそれぞれのデータ・ソース３０２および出力データ受信側３０４と、リスト３１０上のデータ・ソースおよび出力データ受信側とを比較する。挿入エンジンは、リスト３１０上に表示される任意のデータ・ソース３０２または出力データ受信側３０４について、オーバレイ指定３１２を作成する。例によっては、上流ポートや下流ポートなど、オーバレイ指定３１２についてのパラメータが、解析エンジン３００によって挿入エンジン３０６に提供される。例によっては、挿入エンジン３０６は、グラフ１００にアクセスして、関連するパラメータを取得する。
【００５６】
テスト・ソースについてオーバレイ指定３１２を作成するために、挿入エンジン３０６は、ソース・ファイルにデータを読み込む。例によっては、挿入エンジン３０６は、特定のデータ・ソース３０２に取って代わることになるテスト・ソース用のソース・ファイルに、データ・ソース３０２からコピーされたデータを読み込む。例によっては、データ・ソース３０２は、ＳＱＬ文などの実行可能な表現式を含み、挿入エンジン３０６は、この実行可能な表現式を実行し、ソース・ファイルに実行した結果を読み込む。例によっては、挿入エンジン３０６は、ユーザ・インターフェース３１４を介して、ソース・ファイル用のデータを試験者３０８に要求することができる。たとえば、挿入エンジン３０６は、識別されたデータ・ソース３０２のリストを試験者３０８に提供することができ、その結果、試験者３０８は、識別されたデータ・ソース３０２のうち、いずれがテスト・ソースで置換されることになるのか選択することができる。試験者３０８は、テスト・ソース用のソース・ファイルに含まれることになるデータを指定することもできる。場合によっては、試験者３０８は、テスト・ソース用のデータを含むファイルの位置（たとえばパス）を識別することができる。場合によっては、試験者３０８は、元のデータ・ソース３０２内のデータのコピーであるソース・ファイルを生成するよう、挿入エンジン３０８に指示することができる。場合によっては、試験者３０８は、元のデータ・ソース３０２に含まれるか、またはそれに関連する、ＳＱＬ文などの実行可能な表現式を実行するよう、挿入エンジン３０８に指示することができる。場合によっては、試験者３０８は、テスト・ソースのソース・ファイル用に、データを生成できるようにすることができる。たとえば、試験者３０８は、グラフ内のあらゆる機能が少なくとも１回実行されるようにする、実データまたは生成されたデータなどの１組のデータを提供してもよい。
【００５７】
プローブ用のオーバレイ指定３１２を作成するため、挿入エンジン３０８は、出力データが記憶されることになるファイルの位置を決定する。例によっては、この位置は、たとえばシステム設計者によって、デフォルトに設定される。例によっては、挿入エンジン３０６は、ユーザ・インターフェース３１４を介して、出力データ・ファイルについての位置を指定するよう試験者３０８に要求することができる。
【００５８】
図４を参照すると、挿入を自動的に定義することへの全般的なアプローチにおいて、テスト・ソースおよびプローブでそれぞれ置換されることになる、データ・ソースおよび出力データ受信側のリストが受信される（４００）。たとえば、データ・ソースおよび出力データ受信側についての試験者の知識に基づいて、またはデバッギングの目標または目的に基づいて、試験者がリストを提供することができる。例によっては、このリストは、このリスト上に含まれるデータ・ソースおよび出力データ受信側に取って代わることになる、ファイルの位置やファイル名などの識別子を含むこともできる。
【００５９】
グラフは、たとえばプロセッサによって自動的に解析されて、グラフ内のデータ・ソース、出力データ受信側、またはその両方を識別する（４０２）。具体的には、入力接続をもたない構成要素は、データ・ソースとして識別され、出力接続をもたない構成要素は、出力データ受信側として識別される。たとえば、それぞれの構成要素が解析されて、その入力接続および出力接続を識別し、それぞれの構成要素からのそれぞれの接続が、隣接する構成要素へと続いていて、その構成要素の入力接続および出力接続を識別する。このようにして、グラフの構成要素の全てを解析することができる。例によっては、この解析は、実行時に、たとえばグラフがパラメータ化された後に、自動的に実行することができる。例によっては、この解析は、自動的かつ動的に、たとえばグラフが実行されている間に実行することができる。たとえば、グラフの実行中に、あるパラメータが解決されると、動的な解析を実行することができる。例によっては、グラフは短期記憶内に受信され、そこからプロセッサによってグラフが解析されて、データ・ソースまたは出力データ受信側を識別する。
【００６０】
識別されたデータ・ソースおよび出力データ受信側は、リスト上のデータ・ソースおよび出力データ受信側と自動的に比較される（４０４）。リスト上に含まれる、識別されたそれぞれのデータ・ソースまたは出力データ受信側について、オーバレイ指定が定義される（４０６）。グラフの実行に先立って、コンパイラが、グラフを実行可能なグラフにコンパイルしてもよい、コンパイルの一環として、コンパイラは、オーバレイ指定２００を考慮に入れる。たとえば、コンパイラは、入力としてオーバレイ指定２００を受け付けてもよい。１つまたは複数の挿入が処理され、オーバレイ指定２００に含まれる挿入定義にそれぞれが対応するオブジェクトの形で、グラフに挿入される。挿入オブジェクトは、グラフ１００の第１のバージョンに含まれるデータ処理構成要素とともに、グラフ５００の第２のバージョンで表してもよい（図５Ａに示す）。挿入オブジェクトは、有向フローによって、データ処理構成要素または他の挿入に接続してもよい。しかし、オーバレイ指定２００、またはこのオーバレイ指定を記憶するファイルは、グラフを含むファイルから分離されたままである。すなわち、挿入オブジェクトは、グラフ１００の第１のバージョンに含まれるデータ処理構成要素とともに、グラフ５００の第２のバージョンに表示してもよいが、グラフ１００の第１のバージョンを含むファイルは、挿入定義を含まない。挿入オブジェクトは、単に、挿入と呼ばれることがある。
【００６１】
例によっては、試験者は、置換されることになるデータ・ソースおよび出力データ受信側の初期リストを提供しない。むしろ、グラフは自動的に解析され、グラフに関連するデータ・ソースおよび出力データ受信側の全てのリストが、ユーザ・インターフェースを介して試験者に提示される。試験者は、データ・ソースおよび出力データ受信側のうちの１つまたは複数を、挿入で置換するよう選択することができる。試験者は、リスト上に含まれるデータ・ソースおよび出力データ受信側に取って代わることになる、ファイルの位置やファイル名などの識別子を提供することができ、または挿入するためにソース・ファイルを生成するための命令を提供することができる。
【００６２】
オーバレイ指定で定義される挿入は、少なくとも２つのモード、すなわち、単一実行モードおよび保存状態モードを使用して実行することができる。
【００６３】
図６には、単一実行モードで挿入定義を実行するための、例示的なシステムが示してある。この例では、クライアント６０２が、グラフ６０４の第１のバージョン、および挿入を定義するオーバレイ・ファイル６０６（たとえばオーバレイ指定）を生成または参照する。たとえば、オーバレイ・ファイル６０６は、図２のオーバレイ指定２００でもよい。次いで、グラフ６０４が、コンパイラ６０８によってコンパイルされる。コンパイラ６０８は、オーバレイ・ファイル６０６を考慮に入れ、グラフの第２のバージョンを作成する。グラフの第２のバージョンは実行可能であり、オーバレイ・ファイル６０６によって定義される挿入を含む。次いで、グラフの第２のバージョンは、実行することができる。例によっては、コンパイルと実行は同時に発生する。グラフの第２のバージョンが再び実行されることになる場合、グラフ６０４の再指定、再コンパイル、およびグラフの第２のバージョンの再実行を含む、このプロセスが繰り返される。実行可能なグラフの、ある実行から次の実行までの情報は保存されない。
【００６４】
図５Ａには、グラフ５００の第２のバージョンの一例が示してある。グラフ５００の第２のバージョンは、グラフの視覚表現である。この例では、グラフ５００の第２のバージョンは、図１のグラフ１００の第１のバージョンと類似しており、挿入を含むように修正されている。グラフ５００の第２のバージョンは、図２のオーバレイ指定２００で定義された挿入の表示を含む。テスト・ソース挿入５０２は、テスト・ソース定義２０１に対応し、プローブ挿入５０４は、プローブ定義２１３に対応する。この例では、各挿入は、コンパイラがグラフ１００をコンパイルしたときに生成された。図５Ａには、グラフ５００の第２のバージョンが示してあり、グラフ１００の元の第１のバージョンは、修正されないままである。
【００６５】
テスト・ソース挿入５０２は、データ・ソース１０２の出力と、フィルタ構成要素１０３の入力との間に配置され、ここでフロー１１６は、グラフ１００の第１のバージョンに配置されていた。挿入の位置は、テスト・ソース定義内の上流ポート２０４および下流ポート２０６に基づいている（図２）。グラフ５００の第２のバージョンが実行されると、データは、グラフ１００の第１のバージョンの場合と同様に、データ・ソース１０２からフィルタ構成要素１０３まで流れない。その代わりに、テスト・ソース５０２のテスト・ソース定義２０１内のレイアウト・パラメータ２１２によって識別されるソース・ファイルからのデータが、フィルタ構成要素１０３まで流れる。
【００６６】
プローブ挿入５０４は、フロー１１８内で、集約構成要素１１２の出力と、出力データ受信側構成要素１１４の入力との間に配置される。挿入の位置は、プローブ定義２１３内の上流ポート２１６および下流ポート２１８に基づいている（図２）。グラフ５００の第２のバージョンが実行されると、集約構成要素１１２から出力データ受信側構成要素１１４まで流れるデータが、プローブ挿入５０４によって監視および記憶される。前述の通り、実行可能なグラフを再び実行するため、このグラフが再指定され、再コンパイルされ、この実行可能なグラフが再実行されることになる。実行可能なグラフの、ある実行から次の実行までの情報は保存されない。たとえば、実行可能なグラフが再び実行されることになる場合、プローブ挿入５０４には、同じデータが再度読み込まれることになる。
【００６７】
図５Ａの例では、フロー１１８に沿って流れるデータが、プローブ挿入５０４と出力データ受信側構成要素１１４の両方によって受信される。図５Ｂを参照すると、例によっては、グラフ５００’の第２のバージョンは、データがプローブ挿入５０４’によって受信され、出力データ受信側構成要素１１４まで流れないよう、出力データ受信側構成要素１１４までのフローを遮るプローブ挿入５０４’を含むことができる。
【００６８】
図５Ａおよび図５Ｂの例では、グラフ５００、５００’の第２のバージョンは、テスト・ソース挿入５０２（または５０２’）とプローブ挿入５０４（または５０４’）の両方を含む。例によっては、グラフの第２のバージョンは、複数のテスト・ソース挿入および複数のプローブ挿入を含むことができる。図５Ｃを参照すると、例によっては、グラフ５００’’の第２のバージョンは、１つまたは複数のテスト・ソース挿入５０２’’を含むことができるが、プローブ挿入は含まない。図５Ｄを参照すると、例によっては、グラフ５００’’’の第２のバージョンは、１つまたは複数のプローブ挿入５０４’’’を含むことができるが、テスト・ソース挿入は含まない。
【００６９】
図７には、保存状態マネージャ７０８を用いて、保存状態モードで挿入定義を実行するための、例示的なシステムが示してある。この例では、クライアント７０２が、グラフ７０４、および挿入を定義するオーバレイ・ファイル７０６（たとえばオーバレイ指定）を生成または参照する。たとえば、オーバレイ・ファイル７０６は、図２のオーバレイ指定２００でもよい。保存状態リポジトリ７１０が、保存状態マネージャ７０８およびコンパイラ７１２によって管理される。保存状態マネージャ７０８は、この保存状態データが保存状態リポジトリ７１０内のどこに配置されているか識別することもできる。グラフ７０４が、コンパイラ７１２によってコンパイルされる。コンパイラ７１２は、オーバレイ・ファイル７０６を考慮に入れ、オーバレイ・ファイル７０６によって定義される挿入を含むグラフの第２のバージョンを作成する。次いで、グラフの第２のバージョンは、実行することができる。例によっては、コンパイルと実行は同時に発生する。保存状態モードによって、実行可能なグラフが、各実行間で情報を保存している間に何回も実行できるようになるという点で、保存状態モードは単一実行モードと異なる。たとえば、図５Ａを参照すると、図２のオーバレイ指定２００で定義される挿入が、保存状態モードを使用して実行される場合、グラフの第２のバージョンの第１の実行において読み込まれたプローブ挿入５０４は、第２の実行中に再度読み込む必要のないことがある。例によっては、プローブ挿入５０４は、第２の実行に際して内部的にテスト・ソースへ変換することもできるが、それというのも、プローブ挿入５０４は本質的に、集約構成要素１１２の出力と、出力データ受信側構成要素１１４の入力との間のフローにおいて、データをグラフに挿入することになるからである。
【００７０】
保存状態マネージャ７０８は、保存状態マネージャのディレクトリに存在することができ、保存状態を管理する。保存状態リポジトリ７１０に保存できる情報の例には、情報のうちでもとりわけ、プローブ挿入に関連する情報、テスト・ソース挿入に関連する情報、オーバレイ・ファイル７０６に関連する情報、およびグラフ構成要素に関連するパラメータ（たとえば属性）が含まれる。
【００７１】
例によっては、実行可能なグラフが実行されるとき、グラフの特定の部分のみが実行される。すなわち、グラフの特定の構成要素のみが実行される。例によっては、グラフの構成要素の全てよりも少ない構成要素が実行される。実行可能なグラフは、挿入に影響を及ぼすことになる構成要素を実行するだけでよい。たとえば、実行可能なグラフは、定義されたプローブ挿入がデータを監視および記憶するのに必要なグラフの各部分を実行するたけでよい。例によっては、最も下流のプローブの下流にある構成要素は、実行する必要がない。例によっては、グラフの第２のバージョンは、元のグラフ全体の第２のバージョンである。例によっては、グラフの第２のバージョンは、元のグラフ全体のほんの一部分の第２のバージョン、たとえば、定義された挿入に関連したグラフの部分のみの第２のバージョンである。
【００７２】
例によっては、プローブは、実行可能なグラフの第１の実行において読み込まれる。各実行間で、グラフ構成要素のうちの１つまたは複数のパラメータを変更してもよい。構成要素のパラメータは、その構成要素がどのように動作するのかを定義する。パラメータ変更が構成要素内でいつ発生したのかをコンパイラ７１２が決定できるよう、構成要素に関連するパラメータを追跡することができる。最終値の表が、グラフの構成要素に関連するパラメータの記録をとる。実行可能なグラフが実行されると、最終値の表が、各構成要素の現在のパラメータと比較されて、各実行間で何らかのパラメータが変更されたかどうか判定する。パラメータ変更が生じるとき、この変化は、プローブによって記憶されるデータに影響を及ぼしても及ぼさなくてもよい。コンパイラ７１２は、実行可能なグラフの次の実行時にプローブによって記憶されることになるデータに、この構成要素および変更が影響を及ぼすかどうか判定する。プローブによって記憶されることになるデータが、この変更によって影響を受ける場合、変更された構成要素、ならびに変更された構成要素とプローブの間のフローに存在する構成要素が、実行可能なグラフの次に実行中に再実行される。すなわち、変更された構成要素が、この変更された構成要素とプローブの間の構成要素の実行に影響を及ぼし、プローブによって記憶されるデータにこの構成要素が影響を及ぼす場合、この変更された構成要素とプローブの間の構成要素が再実行される。プローブによって記憶されることになるデータが、この変更に影響されない場合、構成要素のいずれも再実行する必要がなくてよい。
【００７３】
図８には、デバッギング技法を使用することのできる例示的なデータ処理システム８００が示してある。このシステム８００は、記憶装置またはオンライン・データ・ストリームへの接続など、１つまたは複数のデータのソースを含んでもよいデータ・ソース８０２を含み、そのそれぞれが、様々なフォーマット（たとえば、データベース・テーブル、スプレッドシート・ファイル、フラット・テキスト・ファイル、またはメインフレームが使用するネイティブ・フォーマット）のうち任意のフォーマットで、データを記憶または提供してもよい。実行環境８０４および開発環境８１８は、たとえば、ＵＮＩＸオペレーティング・システムのあるバージョンなど、適切なオペレーティング・システムの制御下で、１つまたは複数の汎用コンピュータ上にホスティングしてもよい。たとえば、実行環境８０４は、複数ノードの並列コンピューティング環境を含むことができ、これは、複数の中央処理装置（ＣＰＵ）もしくはプロセッサ・コア、ローカル・システム（たとえば、対称型マルチプロセッシング（ＳＭＰ）コンピュータなどのマルチプロセッサ・システム）もしくはローカル分散システム（たとえば、クラスタもしくは超並列処理（ＭＰＰ）として結合された複数のプロセッサ）、または、遠隔プロセッサもしくは遠隔分散プロセッサ（たとえば、ローカル・エリア・ネットワーク（ＬＡＮ）および／もしくは広域ネットワーク（ＷＡＮ）を介して結合されたマルチプロセッサ）、またはその任意の組合せを使用するコンピュータ・システムの構成を含む。
【００７４】
実行環境８０４は、データ・ソース８０２からデータを読み取り、出力データを生成する。データ・ソース８０２を設ける記憶装置は、実行環境８０４に対してローカルでもよく、たとえばこれは、実行環境８０４をホスティングするコンピュータに接続された記憶媒体（たとえばハード・ドライブ８０８）に記憶され、または実行環境８０４に対して遠隔でもよく、たとえばこれは、（たとえばクラウド・コンピューティング・インフラストラクチャによって提供される）遠隔接続を介して、実行環境８０４をホスティングするコンピュータと通信する遠隔システム（たとえばメインフレーム８１０）上にホスティングされる。データ・ソース８０２は、テスト・ソース定義（たとえば、図２のテスト・ソース定義２０１）で定義されるデータを含んでもよい。すなわち、テスト・ソース定義２０１のレイアウト・パラメータ２１２が、データ・ソース８０２内のソース・ファイルの位置を指してもよい。
【００７５】
出力データは、実行環境８０４からアクセス可能なデータ・ソース８０２またはデータ記憶システム８１６に記憶して戻してもよく、または他の方法で使用してもよい。データ記憶システム８１６は、開発者８２０がグラフを、開発、デバッグ、およびテストすることのできる開発環境８１８からもアクセス可能である。実装形態によっては、開発環境８１８は、各接点間の（作業要素すなわちデータのフローを表す）有向フローによって接続される（データ処理構成要素またはデータセットを表す）節点を含むグラフとして、アプリケーションを開発するためのシステムである。たとえば、「グラフベースのアプリケーション用のパラメータの管理」と題する、米国公報第２００７／００１１６６８号に、このような環境がより詳細に記載してある。
【００７６】
簡略なデータ・フロー・グラフは、フローによって、フィルタ構成要素などのデータ処理要素に接続された入力データセットを処理することができる。フィルタ構成要素は、フローによって、出力データセットに接続される。たとえば、データセットは、データ・フロー・グラフによって実行される計算のために、データ（たとえば入力データセット）を提供し、データ（たとえば出力データセット）を受信する、ファイルまたはデータベース・テーブルを含むことができる。データ・フロー・グラフにおいて「フロー」で表されるデータのフローは、離散的データ要素に編成することができる。たとえば、各要素は、レコード（すなわち行）およびフィールド（すなわち列）に編成されるデータセットからのレコードを含むことができる。レコード内の値に対応するフィールドおよびデータ・タイプのシーケンスを記述するメタデータは、「レコード・フォーマット」と呼ばれる。グラフ内の構成要素およびデータセットは、フローに接続するための入力ポートおよび／または出力ポートを有する。各フローの「ソース終端」は、入力データセットの出力ポート、およびフィルタ構成要素の出力ポートとそれぞれインターフェースする。各フローの「受信側終端」は、フィルタ構成要素の入力ポート、および出力データセットの入力ポートとそれぞれインターフェースする。データセットまたは構成要素の、入力または出力のポートは、このポートとの間を流れるデータ用のレコード・フォーマットなどのメタデータに関連する。グラフで使用される構成要素は、「サブグラフ」を形成するフローと相互接続された他の構成要素を使用して実装することができる。
【００７７】
「グラフとして表した計算の実行」と題する、米国特許第５，９６６，０７２号に、このようなグラフベースの計算を実行するためのシステムが記載されている。このシステムに従って作成されるグラフは、グラフ構成要素によって表される個々のプロセスとの間で情報を取得し、各プロセス間で情報を転送し、各プロセスについて実行順序を定義するための方法を提供する。このシステムは、利用可能な任意の方法からプロセス間通信の方法を選択するアルゴリズムを含む（たとえば、グラフのフローによる通信経路は、ＴＣＰ／ＩＰもしくはＵＮＩＸのドメイン・ソケットを使用することができ、または共有メモリを使用して、各プロセス間でデータを渡すことができる）。
【００７８】
開発環境８１８は、ソース・コードを記憶するためのコード・リポジトリ８２２を含む。例によっては、ソース・コードおよびオーバレイ指定（たとえば、図２のオーバレイ指定２２０）は、たとえばユーザ・インターフェースを介して開発環境にアクセスする開発者８２０によって開発してもよい。例によっては、ソース・コードおよびオーバレイ指定は、たとえば、前述の解析エンジン３００および挿入エンジン３０６によって自動的に決定される。例によっては、グラフおよびオーバレイ指定は、コード・リポジトリ８２２に記憶することができる。例によっては、コード・リポジトリ８２２にグラフが記憶され、別のオーバレイ・リポジトリ８２４にオーバレイ指定が記憶される。
【００７９】
コード・リポジトリ８２２およびオーバレイ・リポジトリ８２４のうちの１つまたは両方が、コンパイラ８２６と通信してもよい。コンパイラ８２６は、グラフの第１のバージョンおよびオーバレイ指定（たとえば、図２のオーバレイ指定２００）を、グラフの実行可能な第２のバージョン８２８にコンパイルすることができる。たとえば、コンパイラは、入力としてオーバレイ指定を受け付けてもよい。１つまたは複数の挿入が処理され、オーバレイ指定に含まれる挿入定義にそれぞれが対応するオブジェクトの形で、グラフに挿入される。グラフの第２のバージョン８２８は、修正されたグラフ（たとえば、図５Ａのグラフ５００の第２のバージョン）によって視覚的に表すことができる。挿入オブジェクトは、グラフ５００の第２のバージョンに示してもよい。
【００８０】
開発環境８１８は、グラフの第２のバージョン８２８を実行するためのテスト実行環境８３０を含むことができる。たとえば、グラフがコンパイラ８２６によってコンパイルされると、グラフの第２のバージョン８２８を実行することができる。グラフの第２のバージョン８２８を実行するステップは、データ（たとえば、作業要素またはデータ・レコード）が各構成要素間を流れるときに、各構成要素、挿入、およびグラフの第２のバージョン８２８の有向フローに関連する計算を実行するステップを含むことができる。例によっては、テスト実行環境８３０は、コード・リポジトリ８２２に記憶された第１のバージョンのグラフのソース・コード、またはオーバレイ・リポジトリ８２４に記憶されたソース・コードを修正することなく、グラフの第２のバージョン８２８を実行する。テスト実行環境８３０は、開発環境８１８のインターフェースを介してアクセス可能でもよく、またはそれ自体のインターフェースをもっていてもよい。このインターフェースは、実行に関連する情報を表示するように構成することができる。このインターフェースは、挿入に関連する情報を表示するように構成することもできる（たとえば、データがプローブによって監視または保存され、またはデータがテスト・ソースによって挿入される）。テスト実行環境８３０により、開発者８２０は、各実行間で、グラフの第２のバージョン８２８を実行できるようになり、グラフの第２のバージョン８２８の各態様を修正できるようになってもよい。
【００８１】
例によっては、開発者は、グラフの挿入およびコンパイルを管理する。たとえば、開発者８２０は、コード・リポジトリ８２２から、図１のグラフ１００の第１のバージョンを選択する。開発者８２０はまた、オーバレイ・リポジトリ８２４から、図２のオーバレイ指定２００を選択する。例によっては、オーバレイ指定２００を選択する代わりに、開発者８２０は、オーバレイ・リポジトリ８２４内の様々なオーバレイ指定から挿入定義を選択してもよい。開発者８２０は、グラフ１００の第１のバージョンおよびオーバレイ指定２００に基づいて、グラフの第２のバージョン８２８をコンパイルするようコンパイラ８２６に命令する。
【００８２】
例によっては、挿入は自動的に挿入される。たとえば、前述の通り、グラフ１００内のデータ・ソースおよびデータ受信側は、入力接続または出力接続のない構成要素を識別することによって自動的に識別される。識別されたデータ・ソースおよび出力データ受信側は、グラフ１００のデバッギング中に挿入によって置換されることになる、データ・ソースおよび出力データ受信側のリストと自動的に比較される。たとえば、このリストは、開発者８２０が提供することができる。グラフ１００のデータ・ソースおよび出力データ受信側用に、リストに従ってオーバレイ指定が自動的に作成される。次いで、グラフの第２のバージョンが自動的にコンパイルされる。
【００８３】
例によっては、実行後、開発者８２０は、プローブ挿入５０４に出力されるデータを評価することができる。必要ならば、開発者８２０は、やはりテスト・ソース５０２からの同じ入力データを使用して、グラフ１００の第１のバージョンに変更を加え、変更されたグラフ１００の第１のバージョンを再実行することができる。グラフの複数回の実行にわたって入力データを同じに保つことにより、開発者８２０は、変更されたグラフの第１のバージョンから出力されるデータと、これまでに出力されたデータとを比較して、グラフの第１のバージョンが要望通り実行されているかどうかを判定することができる。
【００８４】
例によっては、実行中または実行後に、開発者８２０は、グラフの第２のバージョン８２８の実行、ならびにその構成要素、挿入、およびフローに関連する情報を観察することができる。たとえば、図５Ａを参照すると、開発者８２０は、プローブ挿入５０４によって監視および記憶されるデータが、不正確または予期しないものであることを観察することができる。開発者８２０は、オーバレイ・リポジトリ８２４から、フォーマット変更構成要素１０８と集約構成要素１１２の間のフロー内に挿入されることになるプローブを定義するプローブ挿入定義、および、表現式による選別の構成要素と集約構成要素１１２の間のフロー中に挿入されることになるプローブを定義する挿入定義を選択してもよい。開発者８２０は、これら２つのプローブによって収集されたデータを解析して、フォーマット変更構成要素１０８からのデータ、または表現式による選別の構成要素１１０からのデータが、集約構成要素１１２から出力されるデータを不正確なものにしているかどうか判定することができる。
【００８５】
この例で説明を続けると、開発者８２０は、表現式による選別の構成要素１１０からのデータが不正確であると判定するものと仮定する。表現式による選別の構成要素１１０の上流の構成要素の全て（たとえば、フィルタ構成要素１０３、ソート構成要素１０４、および複製構成要素１０６）をデバッギングして、不正確なデータの原因を決定するのではなく、開発者８２０は、正確なデータ（たとえば、表現式による選別の構成要素１１０から出力されるものと予想されるデータ）を、表現式による選別の構成要素１１０と集約構成要素１１２の間のフローに挿入するよう選択してもよい。開発者８２０は、オーバレイ・リポジトリ８２４から、表現式による選別の構成要素１１０と集約構成要素１１２の間のフロー中に挿入されることになるテスト・ソースを定義するテスト・ソース挿入定義を選択することができる。開発者８２０が、表現式による選別の構成要素１１０の下流にあるグラフ５００の第２のバージョンのデバッギング構成要素に関係している場合、この手法は適切なものになることがある。
【００８６】
例によっては、オーバレイ指定は、コード・リポジトリ８２２またはオーバレイ・リポジトリ８２４内のファイルとして永続的に記憶されることはない。むしろ、通常オーバレイ・ファイルに含まれるはずの情報（たとえば挿入定義）は、（たとえばユーザ・インターフェースを介して）開発者８２０によって作成され、または解析エンジン３００および挿入エンジン３０６によって自動的に判定され、メモリに一時的に記憶される。次いで、オーバレイ情報は、コンパイラ（たとえば、図６の６０８）または保存状態マネージャ（たとえば、図７の７０８）に渡される。
【００８７】
図９は、デバッギング手順９００を示す流れ図である。グラフの第１のバージョン（たとえば、図１のグラフ１００）が受信される（９０２）。たとえば、グラフの第１のバージョンは、プロセッサがアクセス可能な短期記憶に受信することができる。グラフ１００の第１のバージョンは、構成要素およびフローを含む。この構成要素は、データ・レコードに実行される動作を表し、このフローは、各構成要素間のデータ・レコードのフローを表す。各構成要素には、図１に示す、フィルタ構成要素１０３、ソート構成要素１０４、複製構成要素１０６、フォーマット変更構成要素１０８、表現式による選別の構成要素１１０、および集約構成要素１１２が含まれ得る。各フローには、図１に示す、複製／フォーマット変更フロー１１６、および集約／出力データ受信側フロー１１８が含まれ得る。
【００８８】
１つまたは複数の挿入を定義するオーバレイ指定が受信される（９０４）。例によっては、オーバレイ指定は、開発者または試験者から受信される。例によっては、たとえば前述の通り、オーバレイ指定は自動的に定義される。オーバレイ指定は、図２に示すオーバレイ指定２００でもよい。オーバレイ指定は、１つまたは複数の挿入定義（たとえば、テスト・ソース定義２０１およびプローブ定義２１３）を含むことができる。挿入定義は、名前、上流ポート、下流ポート、挿入タイプ、プロトタイプ経路、および（テスト・ソース定義用の）レイアウト・パラメータを含むことができる。定義された挿入のそれぞれは、グラフ１００のフローに関連することができる。挿入は、プローブまたはテスト・ソースの形をとることができる。グラフの構成要素の形での挿入の例には、図５Ａのテスト・ソース挿入５０２およびプローブ挿入５０４が含まれる。たとえば、テスト・ソース挿入５０２は、グラフ１００のデータベース／フィルタ・フロー１１６に関連しており、プローブ挿入５０４は、グラフ１００の集約／出力データ受信側フロー１１８に関連している。
【００８９】
定義された挿入のうちの１つにそれぞれが対応する、１つまたは複数のオブジェクトが生成される（９０６）。このオブジェクトは、グラフの構成要素でもよい。オブジェクトの例には、図５Ａのテスト・ソース挿入５０２およびプローブ挿入５０４が含まれる。たとえば、テスト・ソース挿入５０２は、グラフ１００の複製／フォーマット変更フロー１１６に関連しており、プローブ挿入５０４は、グラフ１００の集約／出力データ受信側フロー１１８に関連している。
【００９０】
グラフ１００の一部分の構成要素およびフローの少なくともいくつか、ならびに生成された１つまたは複数のオブジェクトを含む、グラフの少なくとも一部分の第２のバージョンが生成される（９０８）。例によっては、グラフの第２のバージョンは、グラフ１００の一部分の構成要素およびフローの少なくともいくつか、ならびに生成された１つまたは複数のオブジェクトを含むように修正された、元のグラフ１００のコピーである。グラフの第２のバージョンは、修正されたグラフ（たとえば、図５Ａのグラフ５００の第２のバージョン）によって視覚的に表すことができる。オブジェクトに対応する定義された挿入に関連するフローにおいて、それぞれのオブジェクトが挿入される。たとえば、グラフ５００の第２のバージョンを参照すると、テスト・ソース挿入５０２は、複製／フォーマット変更フロー１１６に挿入され、プローブ挿入５０４は、集約／出力データ受信側フロー１１８に挿入される。生成された挿入オブジェクトは、グラフ１００のデータ処理構成要素とともに、グラフ５００の第２のバージョンに表示してもよいが、グラフ１００の第１のバージョン（または、グラフ１００の第１のバージョンを含むファイル）は修正されない。
【００９１】
グラフおよびオーバレイ指定をコンパイルして、オーバレイ・ファイルによって定義された挿入を含むグラフの第２のバージョンを作成できるコンパイラ（たとえば、図６のコンパイラ６０８、および図７のコンパイラ７１２）を説明したが、実施形態によっては、グラフおよびオーバレイ指定はコンパイルされない。たとえば、グラフおよびオーバレイ指定は、コンパイルされることなく直接実行することができる。インタープリタは、それぞれのステートメントを、既に機械コードにコンパイルされている一連の１つまたは複数のサブルーチンに変換することによって、グラフおよびオーバレイ指定を直接実行することができる。
【００９２】
プローブおよびテスト・ソースの形で挿入を説明してきたが、実施形態によっては、挿入は他の形をとることができる。挿入を広く使用して、グラフの所与のポイントでデータを入力し、グラフの所与のポイントからデータを取り出すことができる。たとえば、グラフのフローを通過するデータの品質を監視するように、挿入を設計することができる。データ品質が閾値を下回る場合、ユーザは、自動警告を受信することができる。挿入のさらなる説明は、米国特許出願第１４／７１５，９０４号（依頼人整理番号０７４７０−０３１３００１）に見つけることができる。
【００９３】
さらに、グラフとの関連で挿入を説明してきたが、実施形態によっては、挿入は他の実行可能なアプリケーションとともに使用することができる。たとえば、包括的で実行可能なアプリケーション用のデータ・ソースおよび出力データ受信側は、アプリケーションの自動解析を用いて識別することができる。識別されたデータ・ソースおよび出力データ受信側は、テスト・ソースおよびプローブで置換することができる。このようにして、実行可能なアプリケーションは、テスト・ソースからのデータを処理し、データをプローブに出力することができる。この構成は、実行可能なアプリケーションをテストまたはデバッグするのに役立つことがある。
【００９４】
前述のデバッギング手法は、適切なソフトウェアを実行するコンピューティング・システムを使用して実施することができる。たとえば、ソフトウェアは、（分散アーキテクチャ、クライアント／サーバ、またはグリッドなど様々なアーキテクチャでよい）１つまたは複数のプログラムされた、またはプログラム可能なコンピューティング・システム上で実行される、１つまたは複数のコンピュータ・プログラムでの手順を含んでもよく、このコンピューティング・システムのそれぞれが、少なくとも１つのプロセッサ、（揮発性メモリおよび／もしくは不揮発性メモリ、ならびに／または記憶素子を含む）少なくとも１つのデータ記憶装置システム、（少なくとも１つの入力装置もしくは入力ポートを使用して入力を受信し、少なくとも１つの出力装置もしくは出力ポートを使用して出力を供給するための）少なくとも１つのユーザ・インターフェースを含む。ソフトウェアは、たとえば、グラフの設計、構成、および実行に関連するサービスを提供する、比較的大きいプログラムの１つまたは複数のモジュールを含んでもよい。プログラムの各モジュール（たとえばグラフの要素）は、データ構造として、またはデータ・リポジトリに記憶されたデータ・モデルに合致する他の編成データとして実装することができる。
【００９５】
ソフトウェアは、（たとえば、汎用もしくは専用の、コンピューティング・システムもしくはコンピューティング装置によって読取り可能な）ＣＤ−ＲＯＭまたは他のコンピュータ読取り可能な媒体など、有形で持続的な媒体上に実装してもよく、またはネットワークの通信媒体を介して、ソフトウェアが実行されるコンピューティング・システムの有形で持続的な媒体に送達してもよい。処理の一部または全ては、専用コンピュータ上で実行してもよく、または、コプロセッサもしくはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、もしくは専用の特定用途向け集積回路（ＡＳＩＣ）などの専用ハードウェアを使用して実行してもよい。ソフトウェアによって指定された計算の様々な部分を様々なコンピューティング要素によって実行する分散方式で、処理を実施してもよい。本明細書に記載の処理を実行するよう、記憶装置媒体がコンピュータに読み取られるときにコンピュータを構成し動作させるために、このようなコンピュータ・プログラムはそれぞれ、汎用または専用のプログラム可能なコンピュータでアクセス可能な記憶装置のコンピュータ読取り可能な記憶媒体（たとえば、固体記憶装置もしくは固体記憶媒体、または磁気媒体もしくは光媒体）に、記憶またはダウンロードされることが好ましい。この発明性のあるシステムはまた、コンピュータ・プログラムで構成された有形の持続的な媒体として実施されるものとみなしてもよく、ここで、そのように構成された媒体により、コンピュータは、特定の事前定義された方式で動作して、本明細書に記載の処理ステップのうちの１つまたは複数を実行できるようになる。
【００９６】
本発明の実施形態をいくつか説明してきた。それにもかかわらず、前述の説明は、本発明の範囲を例示するものであり、それを限定するものではなく、本発明の範囲は、添付の特許請求の範囲に記載の範囲によって定義されることを理解されたい。したがって、他の実施形態も、添付の特許請求の範囲に記載の範囲内にある。たとえば、本発明の範囲から逸脱することなく、様々な修正を加えてもよい。さらに、前述のステップのいくつかは、順序に依存しなくてもよく、したがって、記載された順序とは異なる順序で実行することができる。
【００９７】
たとえば、前述の特徴に加えて、またはその代わりとして、以下の実施形態を説明する。
【００９８】
実施形態１は、プロセッサによって、コンピュータ・プログラムの第１のバージョンを解析するステップを含む方法を対象とする。この解析するステップは、コンピュータ・プログラムの第１のバージョンに含まれる第１のデータ処理要素を識別するステップを含む。第１のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ・ソースを参照する。この方法は、第１のデータ・ソースとは異なる第２のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第２のバージョンを生成するステップを含む。コンピュータ・プログラムの第２のバージョンは、生成されたデータ・ソース要素、および第１のデータ処理要素に基づく第２のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第２のデータ処理要素が、生成されたデータ・ソース要素を参照する。
【００９９】
実施形態２は実施形態１を対象とし、この方法は、第２のデータ・ソースの位置を決定するステップを含む。
【０１００】
実施形態３は先行実施形態のいずれかを対象とし、第２のデータ・ソースの位置を決定するステップが、この位置を示す入力を受信するステップを含む。
【０１０１】
実施形態４は先行実施形態のいずれかを対象とし、この方法は、ユーザ・インターフェースにおいて、識別された第１のデータ処理要素、第１のデータ・ソース、またはその両方の識別子を提示するステップを含む。
【０１０２】
実施形態５は実施形態４を対象とし、この方法は、識別された第１のデータ処理要素、第１のデータ・ソース、またはその両方の選択結果を受信するステップを含む。
【０１０３】
実施形態６は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第１のバージョンを解析するステップは、コンピュータ・プログラムの第１のバージョンでのデータ処理要素のうち少なくとも１つへの入力フローを解析するステップを含む。
【０１０４】
実施形態７は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの実行時に、このコンピュータ・プログラムの第１のバージョンを解析するステップを含む。
【０１０５】
実施形態８は先行実施形態のいずれかを対象とし、コンピュータ・プログラムはグラフを含む。
【０１０６】
実施形態９は実施形態８を対処とし、コンピュータ・プログラムの第２のバージョンを生成するステップは、生成されたデータ・ソース要素を第２のデータ処理要素への入力フローに配置するステップを含む。
【０１０７】
実施形態１０は先行実施形態のいずれかを対象とし、第２のデータ・ソースからのデータが、第１のデータ・ソースからのデータと同じフォーマットを有する。
【０１０８】
実施形態１１は先行実施形態のいずれかを対象とし、データ・ソース要素を生成するステップが、この生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む。
【０１０９】
実施形態１２は先行実施形態のいずれかを対象とし、この方法は、第１のデータ・ソースからのデータに基づいて、第２のデータ・ソースにデータを読み込むステップを含む。
【０１１０】
実施形態１３は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第１のバージョンでは、第３のデータ処理要素が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ宛先を参照する。コンピュータ・プログラムの第２のバージョンでは、第３のデータ処理要素に基づく第４のデータ処理要素が、第１のデータ宛先とは異なる第２のデータ宛先を参照する。
【０１１１】
実施形態１４は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの第１のバージョンに含まれる第３のデータ処理要素を識別するステップを含む。第３のデータ処理が、コンピュータ・プログラムの第１のバージョンの外部の、第１のデータ宛先を参照する。この方法は、第１のデータ宛先とは異なる第２のデータ宛先を表す、出力要素を生成するステップを含む。コンピュータ・プログラムの第２のバージョンは、生成された出力要素、および第３のデータ処理要素に基づく第４のデータ処理要素を含む。コンピュータ・プログラムの第２のバージョンでは、第４のデータ処理要素が、生成された出力要素を参照する。
【０１１２】
実施形態１５は実施形態１４を対象とし、この方法は、第２のデータ宛先の位置を決定するステップを含む。
【０１１３】
実施形態１６は実施形態１５を対象とし、第２のデータ宛先の位置を決定するステップが、この位置を示す入力を受信するステップを含む。
【０１１４】
実施形態１７は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの第２のバージョンを実行するステップを含む。
【０１１５】
実施形態１８は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第２のバージョンを実行するステップによって、コンピュータ・プログラムのデバッギングが可能になる。
【０１１６】
実施形態１９は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの少なくとも一部分の第２のバージョンを生成するステップが、このコンピュータ・プログラムの一部分のコピーを生成するステップを含む。
【０１１７】
実施形態２０は実施形態１９を対象とし、この方法は、生成されたデータ・ソース要素を含むように、コンピュータ・プログラムの一部分のコピーを修正するステップを含む。
【図１】
2017538996.tif 000003
【図２】
2017538996.tif 000004
【図３】
2017538996.tif 000005
【図４】
2017538996.tif 000006
【図５Ａ】
2017538996.tif 000007
【図５Ｂ】
2017538996.tif 000008
【図５Ｃ】
2017538996.tif 000009
【図５Ｄ】
2017538996.tif 000010
【図６】
2017538996.tif 000011
【図７】
2017538996.tif 000012
【図８】
2017538996.tif 000013
【図９】
2017538996.tif 000014
【国際調査報告】
2017538996.tif 000015
2017538996.tif 000016
2017538996.tif 000017