JP2017538996A - アプリケーション・テスト - Google Patents

アプリケーション・テスト Download PDF

Info

Publication number
JP2017538996A
JP2017538996A JP2017522000A JP2017522000A JP2017538996A JP 2017538996 A JP2017538996 A JP 2017538996A JP 2017522000 A JP2017522000 A JP 2017522000A JP 2017522000 A JP2017522000 A JP 2017522000A JP 2017538996 A JP2017538996 A JP 2017538996A
Authority
JP
Japan
Prior art keywords
data
version
computer program
graph
data source
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017522000A
Other languages
English (en)
Other versions
JP2017538996A5 (ja
JP7076208B2 (ja
Inventor
エー. イスマン,マーシャル
エー. イスマン,マーシャル
ジョイス,ジョン
Original Assignee
アビニシオ テクノロジー エルエルシー
アビニシオ テクノロジー エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アビニシオ テクノロジー エルエルシー, アビニシオ テクノロジー エルエルシー filed Critical アビニシオ テクノロジー エルエルシー
Publication of JP2017538996A publication Critical patent/JP2017538996A/ja
Publication of JP2017538996A5 publication Critical patent/JP2017538996A5/ja
Priority to JP2021198695A priority Critical patent/JP2022037061A/ja
Application granted granted Critical
Publication of JP7076208B2 publication Critical patent/JP7076208B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

方法は、プロセッサによってコンピュータ・プログラムの第1のバージョンを解析するステップを含む。この解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。この方法は、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第2のバージョンを生成するステップを含む。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。

Description

優先権の主張
本出願は、2015年5月19日出願の米国特許出願第14/715,807号の優先権を主張し、これが2014年11月5日出願の米国仮特許出願第62/075,451号の優先権を主張し、その内容全体を参考として本明細書に援用する。
背景
この説明は、グラフのデバッギングに関する。
コード開発者は、開発プロセス全体を通して、ソース・コードをデバッグすることが多い。その際、ソース・コードの機能に影響を及ぼす可能性のあるデバッグ・コードで、このソース・コードを修正することができる。ソース・コードの元の機能を復元するためにデバッギングを終了するとき、追加されたデバッグ・コードをソース・コードから削除することがしばしば望ましい。
概要
一般的な態様では、ある方法では、プロセッサによってコンピュータ・プログラムの第1のバージョンを解析するステップを含む。この解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。この方法は、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第2のバージョンを生成するステップを含む。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。
各実施形態には、以下の特徴のうちの1つまたは複数が含まれ得る。
この方法は、第2のデータ・ソースの位置を決定するステップを含む。第2のデータ・ソースの位置を決定するステップは、この位置を示す入力を受信するステップを含む。
この方法は、ユーザ・インターフェースにおいて、識別された第1のデータ処理要素、第1のデータ・ソース、またはその両方の識別子を提示するステップを含む。この方法は、識別された第1のデータ処理要素、第1のデータ・ソース、またはその両方の選択結果を受信するステップを含む。
コンピュータ・プログラムの第1のバージョンを解析するステップは、コンピュータ・プログラムの第1のバージョンでのデータ処理要素のうち少なくとも1つへの入力フローを解析するステップを含む。
この方法は、コンピュータ・プログラムの実行時に、このコンピュータ・プログラムの第1のバージョンを解析するステップを含む。
コンピュータ・プログラムはグラフを含む。コンピュータ・プログラムの第2のバージョンを生成するステップは、生成されたデータ・ソース要素を第2のデータ処理要素への入力フローに配置するステップを含む。
第2のデータ・ソースからのデータは、第1のデータ・ソースからのデータと同じフォーマットを有する。
データ・ソース要素を生成するステップは、この生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む。
この方法は、第1のデータ・ソースからのデータに基づいて、第2のデータ・ソースにデータを読み込むステップを含む。
コンピュータ・プログラムの第1のバージョンでは、第3のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ宛先を参照する。コンピュータ・プログラムの第2のバージョンでは、第3のデータ・ソース要素に基づく第4のデータ処理要素が、第1のデータ宛先とは異なる第2のデータ宛先を参照する。
この方法は、コンピュータ・プログラムの第1のバージョンに含まれる第3のデータ処理要素を識別するステップを含む。第3のデータ処理が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ宛先を参照する。この方法は、第1のデータ宛先とは異なる第2のデータ宛先を表す、出力要素を生成するステップを含む。コンピュータ・プログラムの第2のバージョンは、生成された出力要素、および第3のデータ処理要素に基づく第4のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第4のデータ処理要素が、生成された出力要素を参照する。この方法は、第2のデータ宛先の位置を決定するステップを含む。第2のデータ宛先の位置を決定するステップは、この位置を示す入力を受信するステップを含む。
この方法は、コンピュータ・プログラムの第2のバージョンを実行するステップを含む。
コンピュータ・プログラムの第2のバージョンを実行するステップによって、このコンピュータ・プログラムのデバッギングが可能になる。
コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成するステップは、このコンピュータ・プログラムの一部分のコピーを生成するステップを含む。この方法は、生成されたデータ・ソース要素を含むように、コンピュータ・プログラムの一部分のコピーを修正するステップを含む。
一般的な態様では、システムが、プロセッサによってコンピュータ・プログラムの第1のバージョンを解析する手段を含む。この解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。このシステムは、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成する手段を含む。このシステムは、コンピュータ・プログラムの第2のバージョンを生成する手段を含む。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。
一般的な態様では、システムが、メモリに結合されたプロセッサを含み、このプロセッサおよびメモリは、プロセッサによってコンピュータ・プログラムの第1のバージョンを解析するように構成される。解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。このプロセッサおよびメモリは、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成するように構成される。このプロセッサおよびメモリは、コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成するように構成される。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。
一般的な態様では、持続的なコンピュータ読取り可能な媒体は、コンピューティング・システムが、プロセッサによってコンピュータ・プログラムの第1のバージョンを解析できるようにするための命令を記憶する。解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。この命令によって、コンピューティング・システムが、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成するようになる。この命令によって、コンピューティング・システムが、コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成するようになる。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。
他の特徴および利点は、以下の説明および特許請求の範囲から明白になろう。
グラフの一例である。 オーバレイ指定の一例である。 ブロック図である。 流れ図である。 修正されたグラフの例である。 修正されたグラフの例である。 修正されたグラフの例である。 修正されたグラフの例である。 ブロック図である。 ブロック図である。 ブロック図である。 流れ図である。
説明
グラフなどの実行可能なアプリケーションをテストまたはデバッグするとき、試験者または開発者は、入力データの特定のセットを使用してテストを実行したいと考えることがある。例によっては、試験者は、アプリケーションに変更を加えたいと思うことがある。この変更の前後ともに、入力データの一貫したセットを使用してアプリケーションを実行することにより、アプリケーションが出力するデータへのこの変更の影響を監視することができる。例によっては、アプリケーションの機能の全てを少なくとも一度実行させるようにすることになる、テスト・データのセットなど、試験者は、アプリケーションをテストするときに使用されることになるテスト・データの特定のセットを有する場合がある。同様にして、試験者は、アプリケーションがその出力データを書き込む先の標準の宛先とは異なる特定の宛先に、アプリケーションが出力するデータを書き込みたいと思うことがある。
従来の開発環境では、テスト用の入力データの所望のセットを試験者が手動で提供し、出力データについて宛先を指定する。ここで、入力データをアプリケーションに提供するデータ・ソース、およびアプリケーションからの出力データを受信する出力データ受信側を自動的に識別することへの取組みを説明する。識別されたデータ・ソースは、テスト・ソースと呼ばれることもある置換データ・ソースで自動的に置換することができる。識別された出力データ受信側は、プローブと呼ばれることもある代替の宛先で自動的に置換することができる。テスト・ソースおよびプローブは挿入の例である。
例によっては、実行可能なアプリケーションはグラフベースのプロセスである。テスト・ソースおよびプローブなどの挿入は、グラフベースのプロセスでのフローに関連するオブジェクトである。テスト・ソースは、フローを通過するデータ(たとえばアップストリーム・データ)を新規データで置換することができ、その結果、グラフのそれぞれの実行について、上流側の計算を再実行する必要はない。たとえば、テスト・ソースは、データ・ソースからではなくテスト・ソースからグラフにテスト・データが提供されるよう、このデータ・ソースを置換することができる。プローブは、グラフが実行されるとき、フローを通過するデータを監視することができ、後に検査または再使用するため、データを保存できるようにする。たとえば、プローブは、データベースなどの出力データ受信側に他の方法で保存されていたはずのデータを受信することができる。
テスト・ソースやプローブなどの挿入は、オーバレイ指定によって定義することができ、この指定は、グラフまたは他の実行可能なアプリケーションから分離されたファイルである。例によっては、アプリケーションの自動解析に基づいて、たとえばアプリケーションのデータ・ソースおよび出力データ受信側の自動識別に基づいて、挿入を自動的に定義することができる。
オーバレイ指定で定義される挿入は、元のアプリケーションの一部分になることなく、実行中にアプリケーションに追加することができる。アプリケーションがコンパイルされると、コンパイラは、オーバレイ・ファイルを加味し、挿入を含む実行可能なアプリケーションを生成する。アプリケーションの第1のバージョンとしての元のアプリケーション、およびアプリケーションの第2のバージョンとしての、挿入を含むアプリケーションを参照することがある。たとえば、グラフベースのプロセスの例では、オーバレイ指定において定義された挿入オブジェクトと結合された、グラフの第1のバージョンの構成要素を含むグラフの第2のバージョンとして、実行可能なグラフを視覚的に表すことができる。例によっては、実行可能なグラフはシェル・スクリプトであり、ファイル内には記憶されない。例によっては、実行可能なグラフおよびこのグラフは、別々のファイルに記憶される。
グラフの第2のバージョンへの挿入の取込みは、デバッグされているグラフの第1のバージョンを修正しない。その代わりに、挿入定義は、別個のファイル(たとえば別個のオーバレイ指定)にとどまり、コード生成の開始時点において、修正済みグラフに含めるために通常のグラフ構成要素へと変換することができる。したがって、デバッギング中に元のグラフを意図せずに破壊するリスクがない。
挿入は、データ・ソースおよび出力データ受信側以外の、グラフ内の位置で行うこともできる。これらの挿入は、内部挿入と呼ばれることがあり、データがグラフを通って流れてくるときに、試験者がこのデータにアクセスできるようにすることができる。たとえば、試験者は、データがある構成要素から別の構成要素に流れるとき、このデータを検証したいと思うことがある。試験者は、上流プロセスが正しく機能することを検証した可能性もあるが、下流プロセスを検証しなかった可能性がある。場合によっては、上流プロセスは、実行するのに要する時間が長くなる場合があり、その結果、テストが非効率になる。試験者が、これまでに妥当性検査された上流動作を、これまでに妥当性検査されたデータで置き換えることができる場合、テスト効率を改善することができる。従来の開発環境では、試験者は、グラフを修正して、ウォッチ・ポイントを追加するか、または上流構成要素を、事前に妥当性検査されたデータで置換する必要がでてくるはずである。しかし、いったんグラフが編集されると、試験者は、元のグラフの機能を修正しなかったことに確信がもてなくなる。環境によっては、試験者は、グラフを編集するために必要な許可を欠いている場合がある。
図1は、グラフ100の一例を示す。グラフ100は、フローによって接続されたデータ処理構成要素を含む、コンピュータ・プログラムの視覚表現である。2つの構成要素を接続するフローは、第1の構成要素から出力されたレコードが、第2の構成要素に渡されることを示す。フローによって第1の構成要素が第2の構成要素に接続されているとき、第1の構成要素は第2の構成要素を参照する。
(図示したような)データベースなどのデータ・ソース102、ファイル、キュー、実行可能文(たとえばSQL文)、またはグラフ100の外部にある別のタイプのデータ・ソースは、グラフ100が処理することになる1つまたは複数のデータ・レコードを含む。外部という言葉によって、データ・ソース102のデータが、グラフ100内に記憶されないことを意味する。データ・ソース102は、フローによってフィルタ構成要素103に接続されている。一般に、フィルタ構成要素は、所定の判定基準を満たさないレコードを選別または削除する。この例では、フィルタ構成要素103は、オハイオ州在住の顧客のデータ・レコードを通過させ、その他のレコードを拒否する。フィルタ構成要素103は、選別済みのデータ・レコードを郵便番号でソーティングする、ソート構成要素104に接続されている。ソート構成要素104は、2つの異なる方式でデータ・レコードを処理するためにこのデータ・レコードのコピーを作成する、複製構成要素106に接続されている。複製構成要素は、フォーマット変更構成要素108、および表現式による選別の構成要素110に接続されている。たとえば、オハイオ州在住の顧客のデータ・レコードの1つの実現値は、郵便番号でソーティングされ、フォーマット変更構成要素108に送られ、またデータ・レコードの別の実現値が表現式による選別の構成要素110に送られる。フォーマット変更構成要素108は、データ・レコードのフォーマットを別のデータ・フォーマットに変更し、表現式による選別の構成要素110は、データ・レコードに関連する表現式に基づいて、このデータ・レコードを削除する。フォーマット変更構成要素108、および表現式による選別の構成要素110は、受信済みのデータ・レコードを結合する集約構成要素112に接続されており、この集約構成要素は、データベース(図示せず)、ファイル、キュー、または下流処理構成要素など、グラフの外部に存在する出力データ受信側構成要素114に接続されている。外部という言葉によって、出力データ受信側114のデータが、グラフ100内に記憶されないことを意味する。グラフ100は、各構成要素間に多くのフローを含むが、データ・ソース102とフィルタ構成要素103の間のフロー116(ソース/フィルタ・フロー116と呼ぶことがある)、および集約構成要素112と出力データ受信側114の間のフロー118(集約/出力フロー118と呼ぶことがある)が、この例では特に対象となる。
グラフ100の試験者は、グラフ100をデバッグして、その機能を検証したいと思うことがある。場合によっては、試験者は、データがある構成要素から別の構成要素に流れるとき、このデータを検証したいと思うことがある。場合によっては、試験者は、グラフ100での上流構成要素を迂回し、その代わりに、迂回された構成要素の位置にデータを挿入したいと思うことがある。場合によっては、試験者は、グラフによって出力されたデータへの、グラフの変更の影響を監視するために、入力データの一貫したセットを使用して、グラフ100の動作をテストしたいと思うことがある。場合によっては、試験者は、グラフの機能の全てを少なくとも1回だけは実行できるようにすることを知っている入力データのセットを使用して、グラフ100の動作をテストし、したがってグラフの完全なテストを可能にしたいと思うことがある。
グラフ100をデバッグする際、グラフの修正を控えることが望ましい場合がある。たとえば、試験者は、グラフの機能を損なうリスクを負いたくないと思うことがある。例によっては、試験者は、グラフへのアクセスを制限されているか、またはアクセスできない場合がある(たとえば、試験者には、グラフを編集するのに必要な許可がない場合がある)。グラフ100を修正することなく、このグラフをデバッグするために、オーバレイを使用してグラフをデバッグすることができる。例によっては、グラフの自動解析に基づいて、このオーバレイを自動的に指定することができる。元のグラフ100(グラフの第1のバージョンと呼ばれることがある)、およびオーバレイ指定に基づいて、グラフ100の少なくとも一部分の第2のバージョンを生成することができる。
図2には、オーバレイを定義するオーバレイ指定200の一例が示してある。オーバレイ指定200は、ファイルに記憶することができる。このファイルは、グラフを含むファイルと分けてもよい。オーバレイ指定は、1つまたは複数の挿入を定義する。挿入は、グラフ100のフローに関連したオブジェクトとすることができ、プローブまたはテスト・ソースの形をとることができる。
グラフ100の各構成要素間のフローをデータが通過するとき、たとえば、第1の構成要素から第2の構成要素までのフローに沿って、または出力データ受信側までのフローに沿って、プローブが、このデータを収集または監視する。たとえば、グラフ100が実行される際にデータがフローを通過するとき、このデータを監視し、後で検査するために保存し、または再使用するために保存することができる。オーバレイ指定は、収集または監視されることになるデータを運ぶフローを参照する、プローブを定義することができる。プローブは、データが収集または監視されることになるフローを指定する。プローブは、特定の値を報告し、または特定の値が、所定範囲内または所定範囲外にあるときに、そのことを報告するように構成することができる。プローブを通過するデータは、後で解析または使用するために保存してもよく、たとえばこのデータは、単層ファイルまたはリレーショナル・データベースに記憶することができる。
例によっては、プローブは、グラフ100のある構成要素から、ファイルまたはデータベースなど出力データ受信側までのフローを参照することができる。グラフ100のデバッギング中に、データ受信側までのフローに沿ってプローブを配置することによって、このプローブは、グラフ100から出力されるデータを受信する。たとえば、グラフ100がデバッギング・モードで実行されるたびに、出力データをプローブによって受信し、ファイルに書き込むことができ、その結果、様々なグラフ実行からの出力データを比較することができ、または他の方法で評価することができる。例によっては、出力データ受信側が自動的に識別され、オーバレイが自動的に指定されて、識別された出力データ受信側の前に挿入するためのプローブを定義する。
例によっては、プローブは、グラフ100の上流構成要素から下流構成要素までのフローを参照することができる。グラフ100のデバッギング中に、下流構成要素までのフローに沿ってプローブを配置することによって、このプローブは、下流構成要素によって他の方法で受信されていたはずのデータを受信し、したがって下流構成要素が実行しないようにする。たとえば、試験者は、下流構成要素の前にグラフが処理する結果を監視したいと思うことがある。たとえば、下流構成要素は、グラフの外部に影響を及ぼす機能をもっていてもよく、たとえば下流構成要素は、この下流構成要素によって自身のクレジット・カードのレコードが処理されるそれぞれの人に向けて、テキスト・メッセージを送信してもよい。グラフのデバッギング中、試験者は、グラフの外部に影響を及ぼすような構成要素を使用不可にしたいと思うことがある。
グラフ100の2つの構成要素間の特定のフローにおいて、テスト・ソースがグラフ100にデータを挿入する。オーバレイ指定は、テスト・ソースからのデータで置換されることになるデータを運ぶフローを参照する、テスト・ソースを定義することができる。例によっては、テスト・ソースは、通常フローを通過するはずのデータを、新規のデータで置換する。状況によっては、テスト・ソースは、これまでに保存されたデータを読み取り、このデータを下流構成要素に渡すように構成することができる。例によっては、テスト・ソースは、データベースまたはファイルなど、データ・ソースからのフローにおいて、データをグラフ100に挿入する。テスト・ソースは、データ・ソースによって他の方法で提供されたはずのデータと同じフォーマットを有するデータを挿入することができる。例によっては、データ・ソースが自動的に識別され、オーバレイが自動的に指定されて、識別されたデータ・ソースを置換するためのテスト・ソースを定義する。
例によっては、あるポイントまで(たとえば、ある構成要素まで)グラフ100を実行した結果が、これまでに検証されていた場合がある。すなわち、上流プロセス機能が、あるポイントまで検証されていた場合がある。こうした場合、グラフ100が実行されるたびに上流構成要素が各機能を再処理することは、非効率になる場合がある。テスト・ソースは、そのあるポイントにおいて、データ(たとえば、これまでに検証されたデータ)をグラフに挿入することができる。このようにして、これまでに実行されたグラフ100のセクション全体を迂回してもよい。
図2には、オーバレイを定義するオーバレイ指定200の一例が示してある。オーバレイ指定200は、1つまたは複数の挿入定義を含むことができる。この例では、オーバレイ指定200は、1つのテスト・ソース定義201、および1つのプローブ定義213を含む。オーバレイ指定200は、挿入定義が対応できる先のグラフを指定する、3行のヘッダから開始する。このヘッダの後に、テスト・ソース定義201が続き、これが、名前202、上流ポート204、下流ポート206、挿入タイプ208、プロトタイプ・パス210、およびレイアウト・パラメータ212を含む。
テスト・ソース定義201の上流ポート204は、テスト・ソースがグラフ100に挿入されることになるフローのすぐ上流にある構成要素の出力ポートを参照する。フローの上流にある構成要素は、データが、その出力ポートからフロー上に出力される構成要素である。図2の例では、テスト・ソース定義201の上流ポート204が、データベース102の出力を指す。テスト・ソース定義201の下流ポート206は、テスト・ソースがグラフ100に挿入されることになるフローのすぐ下流にある構成要素の入力ポートを参照する。フローの下流にある構成要素は、データが、その入力ポートにおいてフローから受信される構成要素である。図2の例では、テスト・ソース定義の下流ポート206が、フィルタ構成要素103の入力を指す。したがって、この例でのテスト・ソース定義201は、データベース102の出力と、フィルタ構成要素103の入力との間のフローにテスト・ソースが配置されることになり、その結果、このテスト・ソースが提供するデータが、データベース102からの入力データを置換できることを示す。
挿入タイプ208は、挿入がテスト・ソースなのか、それともプローブなのか定義する。値「0」がテスト・ソースを定義し、値「1」がプローブを定義する。この挿入はテスト・ソースなので、挿入タイプ208の値は「0」である。
プロトタイプ・パス210は、挿入のタイプを示す。この例では、この挿入はテスト・ソースなので、プロトタイプ・パス210は入力ファイル構成要素を指定する。プロトタイプ・パス210は、特定のタイプの挿入を定義するコードを含むファイルを指す。レイアウト・パラメータ212は、テスト・ソースが含むことになるデータを含むソース・ファイルの位置を定義する。例によっては、この位置はファイル・パスである。ソース・ファイル内のデータは、通常、上流ポート204および下流ポート206によって定義されるフローを通過するはずのデータを置換することになる。すなわち、テスト・ソースがグラフ100に適用されると、フィルタ構成要素103は、データベース102からのデータを受信するのではなく、ソース・ファイル内のデータを受信する。
このソース・ファイルは、テスト・ソースの下流の構成要素によって他の方法で受信されるはずのデータと同じフォーマットを有するデータを含む。例によっては、ソース・ファイル内のデータは、テスト・ソースの上流にあるデータ・ソース(たとえばデータベース)内のデータと同じでもよい。たとえば、データベース102からのデータ・レコードを、ソース・ファイルにコピーすることができる。例によっては、データ・ソースは、SQLクエリなどの実行可能文を示す。これらの例では、SQLクエリを実行することができ、このクエリ実行の結果をソース・ファイルに記憶することができる。例によっては、ソース・ファイル内のデータは、データ・ソース以外のどこかから取得することができる。たとえば、ソース・ファイル内のデータを生成して、グラフ100を完全にデバッグするために、あるデータ(たとえば、ある範囲の値)を確実に処理することができる。例によっては、データ・ソース内のデータが変更されても、ソース・ファイル内のデータは同じままであり、したがって、入力データの一貫したセットでデバッギングを継続できるようになる。
例によっては、ソース・ファイル内のデータは、グラフ100の通常の実行中にフローを通過するはずのデータと同じでもよいが、テスト・ソースを使用してこのデータを挿入する代わりに、上流構成要素が処理を控えることができる。たとえば、複製構成要素106などの上流構成要素は、データを処理するのに大量のシステム・リソースを必要とすることがあり、または、データ・フロー・グラフ100内の他の構成要素と比較して、データを処理するのに要する時間が相対的に長くなることがある。したがって、既知のデータ(たとえば、通常の実行中にフローを通過するはずの同じデータ)をフローに挿入して、時間を節約し、またはシステム・リソースを節約することができる。
このテスト・ソース定義201の後に、プローブ定義213が続き、これが、名前214、上流ポート216、下流ポート218、挿入タイプ220、およびプロトタイプ・パス222を含む。
プローブ定義213の上流ポート216は、プローブがグラフ100に挿入されることになるフローのすぐ上流にある構成要素の出力ポートを参照する。図2の例では、プローブ定義213の上流ポート216が、集約構成要素112の出力を指す。プローブ定義213の下流ポート218は、プローブがグラフ100に挿入されることになるフローのすぐ下流にある構成要素の入力ポートを参照する。図2の例では、プローブ定義213の下流ポート218が、出力データ受信側構成要素114の出力を指す。したがって、この例でのプローブ定義213は、集約構成要素112の出力と、出力データ受信側構成要素114との間のフローにプローブが配置されることになり、その結果、出力データ受信側構成要素に他の方法で書き込まれたはずのデータをプローブが受信することを示す。
プローブ定義213の挿入タイプ220は、挿入がテスト・ソースなのか、それともプローブなのか定義する。値「1」がプローブを定義する。この挿入はプローブなので、挿入タイプ220の値は「1」である。
プロトタイプ・パス222は、挿入のタイプを示す。この例では、この挿入はプローブなので、プロトタイプ・パス222は出力ファイル構成要素を指定する。プロトタイプ・パス222は、特定のタイプの挿入を定義するコードを含むファイルを指す。
例によっては、プローブによって監視されることになるデータは、システムによって自動的に作成されるファイルに記憶される。このファイルは、システムによって決定される位置に記憶することができる。プローブは、上流ポート216および下流ポート218によって定義されたフローを通過するデータを監視する。すなわち、プローブがグラフ100に適用されると、集約構成要素112の出力から、出力データ受信側構成要素114の入力まで通過するデータが監視され、システムによって自動的に作成されるファイルに記憶される。例によっては、このデータを、記憶する前に監視することができる。ファイルは、プローブ定義によって参照される構成要素(この例では、外部のデータ受信側構成要素114)によって受信されたはずの同じフォーマットのデータを受信することができる。
例によっては、グラフ100の自動解析の結果として、オーバレイ指定によって、1つまたは複数の挿入を定義することができる。たとえば、グラフ100の自動解析を実行して、データベース、ファイル、または他のタイプのデータ・ソースなど、任意のデータ・ソースを識別することができる。識別されたデータ・ソースのうち1つまたは複数を、テスト・ソースで自動的に置換することができる。置換されたデータ・ソースにより、データ・ソースのすぐ下流のフローにテスト・ソースが挿入され、その結果、データ・ソースからのデータではなく、このテスト・ソースからのデータが下流構成要素に提供されることを意味する。同様に、グラフ100の自動解析は、データベース、ファイル、または他のタイプの出力データ受信側など、任意の出力データ受信側を識別することができる。識別された出力データ受信側のうち1つまたは複数を、プローブで自動的に置換することができる。置換された出力データ受信側により、出力データ受信側のすぐ上流のフローにプローブが挿入され、その結果、上流構成要素からのデータが、出力データ受信側ではなくプローブによって受信される。グラフ100の自動解析を使用して、特定のタイプの構成要素(たとえば、実行するとグラフ100の外部に影響を及ぼす特定のタイプの構成要素)など、他の構成要素を識別することもできる。
図3を参照すると、解析エンジン300が、グラフ100を自動的に解析して、データ・ソース302および出力データ受信側304を識別する。たとえば、解析エンジン300は、グラフ100のそれぞれのノードについて、パラメータおよび接続にアクセスすることができる。所与のノードが入力接続をもたない場合、解析エンジン300は、このノードをデータ・ソースとして識別する。同様に、所与のノードが出力接続をもたない場合、解析エンジン300は、このノードを出力データ受信側として識別する。グラフのそれぞれのノードにアクセスし、これを解析するために、解析エンジンは、グラフの接続の全てを「探索」して回る。例によっては、実行時(たとえば、デバッギング目的で処理が開始するとき)まで、グラフ100はインスタンス化またはパラメータ化されない。解析エンジン300は、実行時に自動解析を実行して、グラフ100内のデータ・ソースおよび出力データ受信側を識別することができる。
解析エンジン300は、データ・ソース302および出力データ受信側304の識別子を挿入エンジン306に送信し、この挿入エンジンは、データ・ソースと出力データ受信側のいずれが、それぞれテスト・ソースおよびプローブで置換されることになるのか決定する。例によっては、試験者308は、テスト・ソースおよびプローブで置換されることになる、データ・ソースおよび出力データ受信側のリスト310を提供する。このリスト310は、ファイル、データベースとして、または別のフォーマットで提供することができる。たとえば、試験者308は、頻繁に変更されると予想される任意のデータ・ソースを、リスト310上にもっていてもよい。このようなデータ・ソースをテスト・ソースで置換することにより、試験者308は、一貫した入力データを使用してグラフを確実にテストできるようにすることができる。
挿入エンジン306は、識別されたそれぞれのデータ・ソース302および出力データ受信側304と、リスト310上のデータ・ソースおよび出力データ受信側とを比較する。挿入エンジンは、リスト310上に表示される任意のデータ・ソース302または出力データ受信側304について、オーバレイ指定312を作成する。例によっては、上流ポートや下流ポートなど、オーバレイ指定312についてのパラメータが、解析エンジン300によって挿入エンジン306に提供される。例によっては、挿入エンジン306は、グラフ100にアクセスして、関連するパラメータを取得する。
テスト・ソースについてオーバレイ指定312を作成するために、挿入エンジン306は、ソース・ファイルにデータを読み込む。例によっては、挿入エンジン306は、特定のデータ・ソース302に取って代わることになるテスト・ソース用のソース・ファイルに、データ・ソース302からコピーされたデータを読み込む。例によっては、データ・ソース302は、SQL文などの実行可能な表現式を含み、挿入エンジン306は、この実行可能な表現式を実行し、ソース・ファイルに実行した結果を読み込む。例によっては、挿入エンジン306は、ユーザ・インターフェース314を介して、ソース・ファイル用のデータを試験者308に要求することができる。たとえば、挿入エンジン306は、識別されたデータ・ソース302のリストを試験者308に提供することができ、その結果、試験者308は、識別されたデータ・ソース302のうち、いずれがテスト・ソースで置換されることになるのか選択することができる。試験者308は、テスト・ソース用のソース・ファイルに含まれることになるデータを指定することもできる。場合によっては、試験者308は、テスト・ソース用のデータを含むファイルの位置(たとえばパス)を識別することができる。場合によっては、試験者308は、元のデータ・ソース302内のデータのコピーであるソース・ファイルを生成するよう、挿入エンジン308に指示することができる。場合によっては、試験者308は、元のデータ・ソース302に含まれるか、またはそれに関連する、SQL文などの実行可能な表現式を実行するよう、挿入エンジン308に指示することができる。場合によっては、試験者308は、テスト・ソースのソース・ファイル用に、データを生成できるようにすることができる。たとえば、試験者308は、グラフ内のあらゆる機能が少なくとも1回実行されるようにする、実データまたは生成されたデータなどの1組のデータを提供してもよい。
プローブ用のオーバレイ指定312を作成するため、挿入エンジン308は、出力データが記憶されることになるファイルの位置を決定する。例によっては、この位置は、たとえばシステム設計者によって、デフォルトに設定される。例によっては、挿入エンジン306は、ユーザ・インターフェース314を介して、出力データ・ファイルについての位置を指定するよう試験者308に要求することができる。
図4を参照すると、挿入を自動的に定義することへの全般的なアプローチにおいて、テスト・ソースおよびプローブでそれぞれ置換されることになる、データ・ソースおよび出力データ受信側のリストが受信される(400)。たとえば、データ・ソースおよび出力データ受信側についての試験者の知識に基づいて、またはデバッギングの目標または目的に基づいて、試験者がリストを提供することができる。例によっては、このリストは、このリスト上に含まれるデータ・ソースおよび出力データ受信側に取って代わることになる、ファイルの位置やファイル名などの識別子を含むこともできる。
グラフは、たとえばプロセッサによって自動的に解析されて、グラフ内のデータ・ソース、出力データ受信側、またはその両方を識別する(402)。具体的には、入力接続をもたない構成要素は、データ・ソースとして識別され、出力接続をもたない構成要素は、出力データ受信側として識別される。たとえば、それぞれの構成要素が解析されて、その入力接続および出力接続を識別し、それぞれの構成要素からのそれぞれの接続が、隣接する構成要素へと続いていて、その構成要素の入力接続および出力接続を識別する。このようにして、グラフの構成要素の全てを解析することができる。例によっては、この解析は、実行時に、たとえばグラフがパラメータ化された後に、自動的に実行することができる。例によっては、この解析は、自動的かつ動的に、たとえばグラフが実行されている間に実行することができる。たとえば、グラフの実行中に、あるパラメータが解決されると、動的な解析を実行することができる。例によっては、グラフは短期記憶内に受信され、そこからプロセッサによってグラフが解析されて、データ・ソースまたは出力データ受信側を識別する。
識別されたデータ・ソースおよび出力データ受信側は、リスト上のデータ・ソースおよび出力データ受信側と自動的に比較される(404)。リスト上に含まれる、識別されたそれぞれのデータ・ソースまたは出力データ受信側について、オーバレイ指定が定義される(406)。グラフの実行に先立って、コンパイラが、グラフを実行可能なグラフにコンパイルしてもよい、コンパイルの一環として、コンパイラは、オーバレイ指定200を考慮に入れる。たとえば、コンパイラは、入力としてオーバレイ指定200を受け付けてもよい。1つまたは複数の挿入が処理され、オーバレイ指定200に含まれる挿入定義にそれぞれが対応するオブジェクトの形で、グラフに挿入される。挿入オブジェクトは、グラフ100の第1のバージョンに含まれるデータ処理構成要素とともに、グラフ500の第2のバージョンで表してもよい(図5Aに示す)。挿入オブジェクトは、有向フローによって、データ処理構成要素または他の挿入に接続してもよい。しかし、オーバレイ指定200、またはこのオーバレイ指定を記憶するファイルは、グラフを含むファイルから分離されたままである。すなわち、挿入オブジェクトは、グラフ100の第1のバージョンに含まれるデータ処理構成要素とともに、グラフ500の第2のバージョンに表示してもよいが、グラフ100の第1のバージョンを含むファイルは、挿入定義を含まない。挿入オブジェクトは、単に、挿入と呼ばれることがある。
例によっては、試験者は、置換されることになるデータ・ソースおよび出力データ受信側の初期リストを提供しない。むしろ、グラフは自動的に解析され、グラフに関連するデータ・ソースおよび出力データ受信側の全てのリストが、ユーザ・インターフェースを介して試験者に提示される。試験者は、データ・ソースおよび出力データ受信側のうちの1つまたは複数を、挿入で置換するよう選択することができる。試験者は、リスト上に含まれるデータ・ソースおよび出力データ受信側に取って代わることになる、ファイルの位置やファイル名などの識別子を提供することができ、または挿入するためにソース・ファイルを生成するための命令を提供することができる。
オーバレイ指定で定義される挿入は、少なくとも2つのモード、すなわち、単一実行モードおよび保存状態モードを使用して実行することができる。
図6には、単一実行モードで挿入定義を実行するための、例示的なシステムが示してある。この例では、クライアント602が、グラフ604の第1のバージョン、および挿入を定義するオーバレイ・ファイル606(たとえばオーバレイ指定)を生成または参照する。たとえば、オーバレイ・ファイル606は、図2のオーバレイ指定200でもよい。次いで、グラフ604が、コンパイラ608によってコンパイルされる。コンパイラ608は、オーバレイ・ファイル606を考慮に入れ、グラフの第2のバージョンを作成する。グラフの第2のバージョンは実行可能であり、オーバレイ・ファイル606によって定義される挿入を含む。次いで、グラフの第2のバージョンは、実行することができる。例によっては、コンパイルと実行は同時に発生する。グラフの第2のバージョンが再び実行されることになる場合、グラフ604の再指定、再コンパイル、およびグラフの第2のバージョンの再実行を含む、このプロセスが繰り返される。実行可能なグラフの、ある実行から次の実行までの情報は保存されない。
図5Aには、グラフ500の第2のバージョンの一例が示してある。グラフ500の第2のバージョンは、グラフの視覚表現である。この例では、グラフ500の第2のバージョンは、図1のグラフ100の第1のバージョンと類似しており、挿入を含むように修正されている。グラフ500の第2のバージョンは、図2のオーバレイ指定200で定義された挿入の表示を含む。テスト・ソース挿入502は、テスト・ソース定義201に対応し、プローブ挿入504は、プローブ定義213に対応する。この例では、各挿入は、コンパイラがグラフ100をコンパイルしたときに生成された。図5Aには、グラフ500の第2のバージョンが示してあり、グラフ100の元の第1のバージョンは、修正されないままである。
テスト・ソース挿入502は、データ・ソース102の出力と、フィルタ構成要素103の入力との間に配置され、ここでフロー116は、グラフ100の第1のバージョンに配置されていた。挿入の位置は、テスト・ソース定義内の上流ポート204および下流ポート206に基づいている(図2)。グラフ500の第2のバージョンが実行されると、データは、グラフ100の第1のバージョンの場合と同様に、データ・ソース102からフィルタ構成要素103まで流れない。その代わりに、テスト・ソース502のテスト・ソース定義201内のレイアウト・パラメータ212によって識別されるソース・ファイルからのデータが、フィルタ構成要素103まで流れる。
プローブ挿入504は、フロー118内で、集約構成要素112の出力と、出力データ受信側構成要素114の入力との間に配置される。挿入の位置は、プローブ定義213内の上流ポート216および下流ポート218に基づいている(図2)。グラフ500の第2のバージョンが実行されると、集約構成要素112から出力データ受信側構成要素114まで流れるデータが、プローブ挿入504によって監視および記憶される。前述の通り、実行可能なグラフを再び実行するため、このグラフが再指定され、再コンパイルされ、この実行可能なグラフが再実行されることになる。実行可能なグラフの、ある実行から次の実行までの情報は保存されない。たとえば、実行可能なグラフが再び実行されることになる場合、プローブ挿入504には、同じデータが再度読み込まれることになる。
図5Aの例では、フロー118に沿って流れるデータが、プローブ挿入504と出力データ受信側構成要素114の両方によって受信される。図5Bを参照すると、例によっては、グラフ500’の第2のバージョンは、データがプローブ挿入504’によって受信され、出力データ受信側構成要素114まで流れないよう、出力データ受信側構成要素114までのフローを遮るプローブ挿入504’を含むことができる。
図5Aおよび図5Bの例では、グラフ500、500’の第2のバージョンは、テスト・ソース挿入502(または502’)とプローブ挿入504(または504’)の両方を含む。例によっては、グラフの第2のバージョンは、複数のテスト・ソース挿入および複数のプローブ挿入を含むことができる。図5Cを参照すると、例によっては、グラフ500’’の第2のバージョンは、1つまたは複数のテスト・ソース挿入502’’を含むことができるが、プローブ挿入は含まない。図5Dを参照すると、例によっては、グラフ500’’’の第2のバージョンは、1つまたは複数のプローブ挿入504’’’を含むことができるが、テスト・ソース挿入は含まない。
図7には、保存状態マネージャ708を用いて、保存状態モードで挿入定義を実行するための、例示的なシステムが示してある。この例では、クライアント702が、グラフ704、および挿入を定義するオーバレイ・ファイル706(たとえばオーバレイ指定)を生成または参照する。たとえば、オーバレイ・ファイル706は、図2のオーバレイ指定200でもよい。保存状態リポジトリ710が、保存状態マネージャ708およびコンパイラ712によって管理される。保存状態マネージャ708は、この保存状態データが保存状態リポジトリ710内のどこに配置されているか識別することもできる。グラフ704が、コンパイラ712によってコンパイルされる。コンパイラ712は、オーバレイ・ファイル706を考慮に入れ、オーバレイ・ファイル706によって定義される挿入を含むグラフの第2のバージョンを作成する。次いで、グラフの第2のバージョンは、実行することができる。例によっては、コンパイルと実行は同時に発生する。保存状態モードによって、実行可能なグラフが、各実行間で情報を保存している間に何回も実行できるようになるという点で、保存状態モードは単一実行モードと異なる。たとえば、図5Aを参照すると、図2のオーバレイ指定200で定義される挿入が、保存状態モードを使用して実行される場合、グラフの第2のバージョンの第1の実行において読み込まれたプローブ挿入504は、第2の実行中に再度読み込む必要のないことがある。例によっては、プローブ挿入504は、第2の実行に際して内部的にテスト・ソースへ変換することもできるが、それというのも、プローブ挿入504は本質的に、集約構成要素112の出力と、出力データ受信側構成要素114の入力との間のフローにおいて、データをグラフに挿入することになるからである。
保存状態マネージャ708は、保存状態マネージャのディレクトリに存在することができ、保存状態を管理する。保存状態リポジトリ710に保存できる情報の例には、情報のうちでもとりわけ、プローブ挿入に関連する情報、テスト・ソース挿入に関連する情報、オーバレイ・ファイル706に関連する情報、およびグラフ構成要素に関連するパラメータ(たとえば属性)が含まれる。
例によっては、実行可能なグラフが実行されるとき、グラフの特定の部分のみが実行される。すなわち、グラフの特定の構成要素のみが実行される。例によっては、グラフの構成要素の全てよりも少ない構成要素が実行される。実行可能なグラフは、挿入に影響を及ぼすことになる構成要素を実行するだけでよい。たとえば、実行可能なグラフは、定義されたプローブ挿入がデータを監視および記憶するのに必要なグラフの各部分を実行するたけでよい。例によっては、最も下流のプローブの下流にある構成要素は、実行する必要がない。例によっては、グラフの第2のバージョンは、元のグラフ全体の第2のバージョンである。例によっては、グラフの第2のバージョンは、元のグラフ全体のほんの一部分の第2のバージョン、たとえば、定義された挿入に関連したグラフの部分のみの第2のバージョンである。
例によっては、プローブは、実行可能なグラフの第1の実行において読み込まれる。各実行間で、グラフ構成要素のうちの1つまたは複数のパラメータを変更してもよい。構成要素のパラメータは、その構成要素がどのように動作するのかを定義する。パラメータ変更が構成要素内でいつ発生したのかをコンパイラ712が決定できるよう、構成要素に関連するパラメータを追跡することができる。最終値の表が、グラフの構成要素に関連するパラメータの記録をとる。実行可能なグラフが実行されると、最終値の表が、各構成要素の現在のパラメータと比較されて、各実行間で何らかのパラメータが変更されたかどうか判定する。パラメータ変更が生じるとき、この変化は、プローブによって記憶されるデータに影響を及ぼしても及ぼさなくてもよい。コンパイラ712は、実行可能なグラフの次の実行時にプローブによって記憶されることになるデータに、この構成要素および変更が影響を及ぼすかどうか判定する。プローブによって記憶されることになるデータが、この変更によって影響を受ける場合、変更された構成要素、ならびに変更された構成要素とプローブの間のフローに存在する構成要素が、実行可能なグラフの次に実行中に再実行される。すなわち、変更された構成要素が、この変更された構成要素とプローブの間の構成要素の実行に影響を及ぼし、プローブによって記憶されるデータにこの構成要素が影響を及ぼす場合、この変更された構成要素とプローブの間の構成要素が再実行される。プローブによって記憶されることになるデータが、この変更に影響されない場合、構成要素のいずれも再実行する必要がなくてよい。
図8には、デバッギング技法を使用することのできる例示的なデータ処理システム800が示してある。このシステム800は、記憶装置またはオンライン・データ・ストリームへの接続など、1つまたは複数のデータのソースを含んでもよいデータ・ソース802を含み、そのそれぞれが、様々なフォーマット(たとえば、データベース・テーブル、スプレッドシート・ファイル、フラット・テキスト・ファイル、またはメインフレームが使用するネイティブ・フォーマット)のうち任意のフォーマットで、データを記憶または提供してもよい。実行環境804および開発環境818は、たとえば、UNIXオペレーティング・システムのあるバージョンなど、適切なオペレーティング・システムの制御下で、1つまたは複数の汎用コンピュータ上にホスティングしてもよい。たとえば、実行環境804は、複数ノードの並列コンピューティング環境を含むことができ、これは、複数の中央処理装置(CPU)もしくはプロセッサ・コア、ローカル・システム(たとえば、対称型マルチプロセッシング(SMP)コンピュータなどのマルチプロセッサ・システム)もしくはローカル分散システム(たとえば、クラスタもしくは超並列処理(MPP)として結合された複数のプロセッサ)、または、遠隔プロセッサもしくは遠隔分散プロセッサ(たとえば、ローカル・エリア・ネットワーク(LAN)および/もしくは広域ネットワーク(WAN)を介して結合されたマルチプロセッサ)、またはその任意の組合せを使用するコンピュータ・システムの構成を含む。
実行環境804は、データ・ソース802からデータを読み取り、出力データを生成する。データ・ソース802を設ける記憶装置は、実行環境804に対してローカルでもよく、たとえばこれは、実行環境804をホスティングするコンピュータに接続された記憶媒体(たとえばハード・ドライブ808)に記憶され、または実行環境804に対して遠隔でもよく、たとえばこれは、(たとえばクラウド・コンピューティング・インフラストラクチャによって提供される)遠隔接続を介して、実行環境804をホスティングするコンピュータと通信する遠隔システム(たとえばメインフレーム810)上にホスティングされる。データ・ソース802は、テスト・ソース定義(たとえば、図2のテスト・ソース定義201)で定義されるデータを含んでもよい。すなわち、テスト・ソース定義201のレイアウト・パラメータ212が、データ・ソース802内のソース・ファイルの位置を指してもよい。
出力データは、実行環境804からアクセス可能なデータ・ソース802またはデータ記憶システム816に記憶して戻してもよく、または他の方法で使用してもよい。データ記憶システム816は、開発者820がグラフを、開発、デバッグ、およびテストすることのできる開発環境818からもアクセス可能である。実装形態によっては、開発環境818は、各接点間の(作業要素すなわちデータのフローを表す)有向フローによって接続される(データ処理構成要素またはデータセットを表す)節点を含むグラフとして、アプリケーションを開発するためのシステムである。たとえば、「グラフベースのアプリケーション用のパラメータの管理」と題する、米国公報第2007/0011668号に、このような環境がより詳細に記載してある。
簡略なデータ・フロー・グラフは、フローによって、フィルタ構成要素などのデータ処理要素に接続された入力データセットを処理することができる。フィルタ構成要素は、フローによって、出力データセットに接続される。たとえば、データセットは、データ・フロー・グラフによって実行される計算のために、データ(たとえば入力データセット)を提供し、データ(たとえば出力データセット)を受信する、ファイルまたはデータベース・テーブルを含むことができる。データ・フロー・グラフにおいて「フロー」で表されるデータのフローは、離散的データ要素に編成することができる。たとえば、各要素は、レコード(すなわち行)およびフィールド(すなわち列)に編成されるデータセットからのレコードを含むことができる。レコード内の値に対応するフィールドおよびデータ・タイプのシーケンスを記述するメタデータは、「レコード・フォーマット」と呼ばれる。グラフ内の構成要素およびデータセットは、フローに接続するための入力ポートおよび/または出力ポートを有する。各フローの「ソース終端」は、入力データセットの出力ポート、およびフィルタ構成要素の出力ポートとそれぞれインターフェースする。各フローの「受信側終端」は、フィルタ構成要素の入力ポート、および出力データセットの入力ポートとそれぞれインターフェースする。データセットまたは構成要素の、入力または出力のポートは、このポートとの間を流れるデータ用のレコード・フォーマットなどのメタデータに関連する。グラフで使用される構成要素は、「サブグラフ」を形成するフローと相互接続された他の構成要素を使用して実装することができる。
「グラフとして表した計算の実行」と題する、米国特許第5,966,072号に、このようなグラフベースの計算を実行するためのシステムが記載されている。このシステムに従って作成されるグラフは、グラフ構成要素によって表される個々のプロセスとの間で情報を取得し、各プロセス間で情報を転送し、各プロセスについて実行順序を定義するための方法を提供する。このシステムは、利用可能な任意の方法からプロセス間通信の方法を選択するアルゴリズムを含む(たとえば、グラフのフローによる通信経路は、TCP/IPもしくはUNIXのドメイン・ソケットを使用することができ、または共有メモリを使用して、各プロセス間でデータを渡すことができる)。
開発環境818は、ソース・コードを記憶するためのコード・リポジトリ822を含む。例によっては、ソース・コードおよびオーバレイ指定(たとえば、図2のオーバレイ指定220)は、たとえばユーザ・インターフェースを介して開発環境にアクセスする開発者820によって開発してもよい。例によっては、ソース・コードおよびオーバレイ指定は、たとえば、前述の解析エンジン300および挿入エンジン306によって自動的に決定される。例によっては、グラフおよびオーバレイ指定は、コード・リポジトリ822に記憶することができる。例によっては、コード・リポジトリ822にグラフが記憶され、別のオーバレイ・リポジトリ824にオーバレイ指定が記憶される。
コード・リポジトリ822およびオーバレイ・リポジトリ824のうちの1つまたは両方が、コンパイラ826と通信してもよい。コンパイラ826は、グラフの第1のバージョンおよびオーバレイ指定(たとえば、図2のオーバレイ指定200)を、グラフの実行可能な第2のバージョン828にコンパイルすることができる。たとえば、コンパイラは、入力としてオーバレイ指定を受け付けてもよい。1つまたは複数の挿入が処理され、オーバレイ指定に含まれる挿入定義にそれぞれが対応するオブジェクトの形で、グラフに挿入される。グラフの第2のバージョン828は、修正されたグラフ(たとえば、図5Aのグラフ500の第2のバージョン)によって視覚的に表すことができる。挿入オブジェクトは、グラフ500の第2のバージョンに示してもよい。
開発環境818は、グラフの第2のバージョン828を実行するためのテスト実行環境830を含むことができる。たとえば、グラフがコンパイラ826によってコンパイルされると、グラフの第2のバージョン828を実行することができる。グラフの第2のバージョン828を実行するステップは、データ(たとえば、作業要素またはデータ・レコード)が各構成要素間を流れるときに、各構成要素、挿入、およびグラフの第2のバージョン828の有向フローに関連する計算を実行するステップを含むことができる。例によっては、テスト実行環境830は、コード・リポジトリ822に記憶された第1のバージョンのグラフのソース・コード、またはオーバレイ・リポジトリ824に記憶されたソース・コードを修正することなく、グラフの第2のバージョン828を実行する。テスト実行環境830は、開発環境818のインターフェースを介してアクセス可能でもよく、またはそれ自体のインターフェースをもっていてもよい。このインターフェースは、実行に関連する情報を表示するように構成することができる。このインターフェースは、挿入に関連する情報を表示するように構成することもできる(たとえば、データがプローブによって監視または保存され、またはデータがテスト・ソースによって挿入される)。テスト実行環境830により、開発者820は、各実行間で、グラフの第2のバージョン828を実行できるようになり、グラフの第2のバージョン828の各態様を修正できるようになってもよい。
例によっては、開発者は、グラフの挿入およびコンパイルを管理する。たとえば、開発者820は、コード・リポジトリ822から、図1のグラフ100の第1のバージョンを選択する。開発者820はまた、オーバレイ・リポジトリ824から、図2のオーバレイ指定200を選択する。例によっては、オーバレイ指定200を選択する代わりに、開発者820は、オーバレイ・リポジトリ824内の様々なオーバレイ指定から挿入定義を選択してもよい。開発者820は、グラフ100の第1のバージョンおよびオーバレイ指定200に基づいて、グラフの第2のバージョン828をコンパイルするようコンパイラ826に命令する。
例によっては、挿入は自動的に挿入される。たとえば、前述の通り、グラフ100内のデータ・ソースおよびデータ受信側は、入力接続または出力接続のない構成要素を識別することによって自動的に識別される。識別されたデータ・ソースおよび出力データ受信側は、グラフ100のデバッギング中に挿入によって置換されることになる、データ・ソースおよび出力データ受信側のリストと自動的に比較される。たとえば、このリストは、開発者820が提供することができる。グラフ100のデータ・ソースおよび出力データ受信側用に、リストに従ってオーバレイ指定が自動的に作成される。次いで、グラフの第2のバージョンが自動的にコンパイルされる。
例によっては、実行後、開発者820は、プローブ挿入504に出力されるデータを評価することができる。必要ならば、開発者820は、やはりテスト・ソース502からの同じ入力データを使用して、グラフ100の第1のバージョンに変更を加え、変更されたグラフ100の第1のバージョンを再実行することができる。グラフの複数回の実行にわたって入力データを同じに保つことにより、開発者820は、変更されたグラフの第1のバージョンから出力されるデータと、これまでに出力されたデータとを比較して、グラフの第1のバージョンが要望通り実行されているかどうかを判定することができる。
例によっては、実行中または実行後に、開発者820は、グラフの第2のバージョン828の実行、ならびにその構成要素、挿入、およびフローに関連する情報を観察することができる。たとえば、図5Aを参照すると、開発者820は、プローブ挿入504によって監視および記憶されるデータが、不正確または予期しないものであることを観察することができる。開発者820は、オーバレイ・リポジトリ824から、フォーマット変更構成要素108と集約構成要素112の間のフロー内に挿入されることになるプローブを定義するプローブ挿入定義、および、表現式による選別の構成要素と集約構成要素112の間のフロー中に挿入されることになるプローブを定義する挿入定義を選択してもよい。開発者820は、これら2つのプローブによって収集されたデータを解析して、フォーマット変更構成要素108からのデータ、または表現式による選別の構成要素110からのデータが、集約構成要素112から出力されるデータを不正確なものにしているかどうか判定することができる。
この例で説明を続けると、開発者820は、表現式による選別の構成要素110からのデータが不正確であると判定するものと仮定する。表現式による選別の構成要素110の上流の構成要素の全て(たとえば、フィルタ構成要素103、ソート構成要素104、および複製構成要素106)をデバッギングして、不正確なデータの原因を決定するのではなく、開発者820は、正確なデータ(たとえば、表現式による選別の構成要素110から出力されるものと予想されるデータ)を、表現式による選別の構成要素110と集約構成要素112の間のフローに挿入するよう選択してもよい。開発者820は、オーバレイ・リポジトリ824から、表現式による選別の構成要素110と集約構成要素112の間のフロー中に挿入されることになるテスト・ソースを定義するテスト・ソース挿入定義を選択することができる。開発者820が、表現式による選別の構成要素110の下流にあるグラフ500の第2のバージョンのデバッギング構成要素に関係している場合、この手法は適切なものになることがある。
例によっては、オーバレイ指定は、コード・リポジトリ822またはオーバレイ・リポジトリ824内のファイルとして永続的に記憶されることはない。むしろ、通常オーバレイ・ファイルに含まれるはずの情報(たとえば挿入定義)は、(たとえばユーザ・インターフェースを介して)開発者820によって作成され、または解析エンジン300および挿入エンジン306によって自動的に判定され、メモリに一時的に記憶される。次いで、オーバレイ情報は、コンパイラ(たとえば、図6の608)または保存状態マネージャ(たとえば、図7の708)に渡される。
図9は、デバッギング手順900を示す流れ図である。グラフの第1のバージョン(たとえば、図1のグラフ100)が受信される(902)。たとえば、グラフの第1のバージョンは、プロセッサがアクセス可能な短期記憶に受信することができる。グラフ100の第1のバージョンは、構成要素およびフローを含む。この構成要素は、データ・レコードに実行される動作を表し、このフローは、各構成要素間のデータ・レコードのフローを表す。各構成要素には、図1に示す、フィルタ構成要素103、ソート構成要素104、複製構成要素106、フォーマット変更構成要素108、表現式による選別の構成要素110、および集約構成要素112が含まれ得る。各フローには、図1に示す、複製/フォーマット変更フロー116、および集約/出力データ受信側フロー118が含まれ得る。
1つまたは複数の挿入を定義するオーバレイ指定が受信される(904)。例によっては、オーバレイ指定は、開発者または試験者から受信される。例によっては、たとえば前述の通り、オーバレイ指定は自動的に定義される。オーバレイ指定は、図2に示すオーバレイ指定200でもよい。オーバレイ指定は、1つまたは複数の挿入定義(たとえば、テスト・ソース定義201およびプローブ定義213)を含むことができる。挿入定義は、名前、上流ポート、下流ポート、挿入タイプ、プロトタイプ経路、および(テスト・ソース定義用の)レイアウト・パラメータを含むことができる。定義された挿入のそれぞれは、グラフ100のフローに関連することができる。挿入は、プローブまたはテスト・ソースの形をとることができる。グラフの構成要素の形での挿入の例には、図5Aのテスト・ソース挿入502およびプローブ挿入504が含まれる。たとえば、テスト・ソース挿入502は、グラフ100のデータベース/フィルタ・フロー116に関連しており、プローブ挿入504は、グラフ100の集約/出力データ受信側フロー118に関連している。
定義された挿入のうちの1つにそれぞれが対応する、1つまたは複数のオブジェクトが生成される(906)。このオブジェクトは、グラフの構成要素でもよい。オブジェクトの例には、図5Aのテスト・ソース挿入502およびプローブ挿入504が含まれる。たとえば、テスト・ソース挿入502は、グラフ100の複製/フォーマット変更フロー116に関連しており、プローブ挿入504は、グラフ100の集約/出力データ受信側フロー118に関連している。
グラフ100の一部分の構成要素およびフローの少なくともいくつか、ならびに生成された1つまたは複数のオブジェクトを含む、グラフの少なくとも一部分の第2のバージョンが生成される(908)。例によっては、グラフの第2のバージョンは、グラフ100の一部分の構成要素およびフローの少なくともいくつか、ならびに生成された1つまたは複数のオブジェクトを含むように修正された、元のグラフ100のコピーである。グラフの第2のバージョンは、修正されたグラフ(たとえば、図5Aのグラフ500の第2のバージョン)によって視覚的に表すことができる。オブジェクトに対応する定義された挿入に関連するフローにおいて、それぞれのオブジェクトが挿入される。たとえば、グラフ500の第2のバージョンを参照すると、テスト・ソース挿入502は、複製/フォーマット変更フロー116に挿入され、プローブ挿入504は、集約/出力データ受信側フロー118に挿入される。生成された挿入オブジェクトは、グラフ100のデータ処理構成要素とともに、グラフ500の第2のバージョンに表示してもよいが、グラフ100の第1のバージョン(または、グラフ100の第1のバージョンを含むファイル)は修正されない。
グラフおよびオーバレイ指定をコンパイルして、オーバレイ・ファイルによって定義された挿入を含むグラフの第2のバージョンを作成できるコンパイラ(たとえば、図6のコンパイラ608、および図7のコンパイラ712)を説明したが、実施形態によっては、グラフおよびオーバレイ指定はコンパイルされない。たとえば、グラフおよびオーバレイ指定は、コンパイルされることなく直接実行することができる。インタープリタは、それぞれのステートメントを、既に機械コードにコンパイルされている一連の1つまたは複数のサブルーチンに変換することによって、グラフおよびオーバレイ指定を直接実行することができる。
プローブおよびテスト・ソースの形で挿入を説明してきたが、実施形態によっては、挿入は他の形をとることができる。挿入を広く使用して、グラフの所与のポイントでデータを入力し、グラフの所与のポイントからデータを取り出すことができる。たとえば、グラフのフローを通過するデータの品質を監視するように、挿入を設計することができる。データ品質が閾値を下回る場合、ユーザは、自動警告を受信することができる。挿入のさらなる説明は、米国特許出願第14/715,904号(依頼人整理番号07470−0313001)に見つけることができる。
さらに、グラフとの関連で挿入を説明してきたが、実施形態によっては、挿入は他の実行可能なアプリケーションとともに使用することができる。たとえば、包括的で実行可能なアプリケーション用のデータ・ソースおよび出力データ受信側は、アプリケーションの自動解析を用いて識別することができる。識別されたデータ・ソースおよび出力データ受信側は、テスト・ソースおよびプローブで置換することができる。このようにして、実行可能なアプリケーションは、テスト・ソースからのデータを処理し、データをプローブに出力することができる。この構成は、実行可能なアプリケーションをテストまたはデバッグするのに役立つことがある。
前述のデバッギング手法は、適切なソフトウェアを実行するコンピューティング・システムを使用して実施することができる。たとえば、ソフトウェアは、(分散アーキテクチャ、クライアント/サーバ、またはグリッドなど様々なアーキテクチャでよい)1つまたは複数のプログラムされた、またはプログラム可能なコンピューティング・システム上で実行される、1つまたは複数のコンピュータ・プログラムでの手順を含んでもよく、このコンピューティング・システムのそれぞれが、少なくとも1つのプロセッサ、(揮発性メモリおよび/もしくは不揮発性メモリ、ならびに/または記憶素子を含む)少なくとも1つのデータ記憶装置システム、(少なくとも1つの入力装置もしくは入力ポートを使用して入力を受信し、少なくとも1つの出力装置もしくは出力ポートを使用して出力を供給するための)少なくとも1つのユーザ・インターフェースを含む。ソフトウェアは、たとえば、グラフの設計、構成、および実行に関連するサービスを提供する、比較的大きいプログラムの1つまたは複数のモジュールを含んでもよい。プログラムの各モジュール(たとえばグラフの要素)は、データ構造として、またはデータ・リポジトリに記憶されたデータ・モデルに合致する他の編成データとして実装することができる。
ソフトウェアは、(たとえば、汎用もしくは専用の、コンピューティング・システムもしくはコンピューティング装置によって読取り可能な)CD−ROMまたは他のコンピュータ読取り可能な媒体など、有形で持続的な媒体上に実装してもよく、またはネットワークの通信媒体を介して、ソフトウェアが実行されるコンピューティング・システムの有形で持続的な媒体に送達してもよい。処理の一部または全ては、専用コンピュータ上で実行してもよく、または、コプロセッサもしくはフィールド・プログラマブル・ゲート・アレイ(FPGA)、もしくは専用の特定用途向け集積回路(ASIC)などの専用ハードウェアを使用して実行してもよい。ソフトウェアによって指定された計算の様々な部分を様々なコンピューティング要素によって実行する分散方式で、処理を実施してもよい。本明細書に記載の処理を実行するよう、記憶装置媒体がコンピュータに読み取られるときにコンピュータを構成し動作させるために、このようなコンピュータ・プログラムはそれぞれ、汎用または専用のプログラム可能なコンピュータでアクセス可能な記憶装置のコンピュータ読取り可能な記憶媒体(たとえば、固体記憶装置もしくは固体記憶媒体、または磁気媒体もしくは光媒体)に、記憶またはダウンロードされることが好ましい。この発明性のあるシステムはまた、コンピュータ・プログラムで構成された有形の持続的な媒体として実施されるものとみなしてもよく、ここで、そのように構成された媒体により、コンピュータは、特定の事前定義された方式で動作して、本明細書に記載の処理ステップのうちの1つまたは複数を実行できるようになる。
本発明の実施形態をいくつか説明してきた。それにもかかわらず、前述の説明は、本発明の範囲を例示するものであり、それを限定するものではなく、本発明の範囲は、添付の特許請求の範囲に記載の範囲によって定義されることを理解されたい。したがって、他の実施形態も、添付の特許請求の範囲に記載の範囲内にある。たとえば、本発明の範囲から逸脱することなく、様々な修正を加えてもよい。さらに、前述のステップのいくつかは、順序に依存しなくてもよく、したがって、記載された順序とは異なる順序で実行することができる。
たとえば、前述の特徴に加えて、またはその代わりとして、以下の実施形態を説明する。
実施形態1は、プロセッサによって、コンピュータ・プログラムの第1のバージョンを解析するステップを含む方法を対象とする。この解析するステップは、コンピュータ・プログラムの第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含む。第1のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ・ソースを参照する。この方法は、第1のデータ・ソースとは異なる第2のデータ・ソースを表す、データ・ソース要素を生成するステップを含む。この方法は、コンピュータ・プログラムの第2のバージョンを生成するステップを含む。コンピュータ・プログラムの第2のバージョンは、生成されたデータ・ソース要素、および第1のデータ処理要素に基づく第2のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第2のデータ処理要素が、生成されたデータ・ソース要素を参照する。
実施形態2は実施形態1を対象とし、この方法は、第2のデータ・ソースの位置を決定するステップを含む。
実施形態3は先行実施形態のいずれかを対象とし、第2のデータ・ソースの位置を決定するステップが、この位置を示す入力を受信するステップを含む。
実施形態4は先行実施形態のいずれかを対象とし、この方法は、ユーザ・インターフェースにおいて、識別された第1のデータ処理要素、第1のデータ・ソース、またはその両方の識別子を提示するステップを含む。
実施形態5は実施形態4を対象とし、この方法は、識別された第1のデータ処理要素、第1のデータ・ソース、またはその両方の選択結果を受信するステップを含む。
実施形態6は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第1のバージョンを解析するステップは、コンピュータ・プログラムの第1のバージョンでのデータ処理要素のうち少なくとも1つへの入力フローを解析するステップを含む。
実施形態7は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの実行時に、このコンピュータ・プログラムの第1のバージョンを解析するステップを含む。
実施形態8は先行実施形態のいずれかを対象とし、コンピュータ・プログラムはグラフを含む。
実施形態9は実施形態8を対処とし、コンピュータ・プログラムの第2のバージョンを生成するステップは、生成されたデータ・ソース要素を第2のデータ処理要素への入力フローに配置するステップを含む。
実施形態10は先行実施形態のいずれかを対象とし、第2のデータ・ソースからのデータが、第1のデータ・ソースからのデータと同じフォーマットを有する。
実施形態11は先行実施形態のいずれかを対象とし、データ・ソース要素を生成するステップが、この生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む。
実施形態12は先行実施形態のいずれかを対象とし、この方法は、第1のデータ・ソースからのデータに基づいて、第2のデータ・ソースにデータを読み込むステップを含む。
実施形態13は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第1のバージョンでは、第3のデータ処理要素が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ宛先を参照する。コンピュータ・プログラムの第2のバージョンでは、第3のデータ処理要素に基づく第4のデータ処理要素が、第1のデータ宛先とは異なる第2のデータ宛先を参照する。
実施形態14は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの第1のバージョンに含まれる第3のデータ処理要素を識別するステップを含む。第3のデータ処理が、コンピュータ・プログラムの第1のバージョンの外部の、第1のデータ宛先を参照する。この方法は、第1のデータ宛先とは異なる第2のデータ宛先を表す、出力要素を生成するステップを含む。コンピュータ・プログラムの第2のバージョンは、生成された出力要素、および第3のデータ処理要素に基づく第4のデータ処理要素を含む。コンピュータ・プログラムの第2のバージョンでは、第4のデータ処理要素が、生成された出力要素を参照する。
実施形態15は実施形態14を対象とし、この方法は、第2のデータ宛先の位置を決定するステップを含む。
実施形態16は実施形態15を対象とし、第2のデータ宛先の位置を決定するステップが、この位置を示す入力を受信するステップを含む。
実施形態17は先行実施形態のいずれかを対象とし、この方法は、コンピュータ・プログラムの第2のバージョンを実行するステップを含む。
実施形態18は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの第2のバージョンを実行するステップによって、コンピュータ・プログラムのデバッギングが可能になる。
実施形態19は先行実施形態のいずれかを対象とし、コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成するステップが、このコンピュータ・プログラムの一部分のコピーを生成するステップを含む。
実施形態20は実施形態19を対象とし、この方法は、生成されたデータ・ソース要素を含むように、コンピュータ・プログラムの一部分のコピーを修正するステップを含む。

Claims (23)

  1. プロセッサによって、コンピュータ・プログラムの第1のバージョンを解析するステップであって、前記コンピュータ・プログラムの前記第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含み、前記第1のデータ処理要素が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ・ソースを参照するステップと、
    前記第1のデータ・ソースと異なる第2のデータ・ソースを表すデータ・ソース要素を生成するステップと、
    前記コンピュータ・プログラムの第2のバージョンを生成するステップであって、前記コンピュータ・プログラムの前記第2のバージョンが、前記生成されたデータ・ソース要素、および前記第1のデータ処理要素に基づく第2のデータ処理要素を含むステップと
    を含み、
    前記コンピュータ・プログラムの前記第2のバージョンにおいて、前記第2のデータ処理要素が前記生成されたデータ・ソース要素を参照する、方法。
  2. 前記第2のデータ・ソースの位置を決定するステップを含む、請求項1に記載の方法。
  3. 前記第2のデータ・ソースの前記位置を決定するステップが、前記位置を示す入力を受信するステップを含む、請求項2に記載の方法。
  4. ユーザ・インターフェースにおいて、前記識別された第1のデータ処理要素、前記第1のデータ・ソース、またはその両方の識別子を提示するステップを含む、請求項1に記載の方法。
  5. 前記識別された第1のデータ処理要素、前記第1のデータ・ソース、またはその両方の選択結果を受信するステップを含む、請求項4に記載の方法。
  6. 前記コンピュータ・プログラムの前記第1のバージョンを解析するステップが、前記コンピュータ・プログラムの前記第1のバージョンでの前記データ処理要素のうち少なくとも1つへの入力フローを解析するステップを含む、請求項1に記載の方法。
  7. 前記コンピュータ・プログラムの実行時に、前記コンピュータ・プログラムの前記第1のバージョンを解析するステップを含む、請求項1に記載の方法。
  8. 前記コンピュータ・プログラムがグラフを含む、請求項1に記載の方法。
  9. 前記コンピュータ・プログラムの前記第2のバージョンを生成するステップが、前記生成されたデータ・ソース要素を前記第2のデータ処理要素への入力フローに配置するステップを含む、請求項8に記載の方法。
  10. 前記第2のデータ・ソースからのデータが、前記第1のデータ・ソースからのデータと同じフォーマットを有する、請求項1に記載の方法。
  11. 前記データ・ソース要素を生成するステップが、前記生成されたデータ・ソース要素についてオーバレイ指定を定義するステップを含む、請求項1に記載の方法。
  12. 前記第1のデータ・ソースからのデータに基づいて、前記第2のデータ・ソースにデータを読み込むステップを含む、請求項1に記載の方法。
  13. 前記コンピュータ・プログラムの前記第1のバージョンでは、第3のデータ処理要素が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ宛先を参照し、前記コンピュータ・プログラムの前記第2のバージョンでは、前記第3のデータ処理要素に基づく第4のデータ処理要素が、前記第1のデータ宛先とは異なる第2のデータ宛先を参照する、請求項1に記載の方法。
  14. 前記コンピュータ・プログラムの前記第1のバージョンに含まれる第3のデータ処理要素を識別するステップであって、前記第3のデータ処理が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ宛先を参照するステップと、
    前記第1のデータ宛先と異なる第2のデータ宛先を表す出力要素を生成するステップと
    を含み、
    前記コンピュータ・プログラムの前記第2のバージョンが、前記生成された出力要素、および前記第3のデータ処理要素に基づく第4のデータ処理要素を含み、
    前記コンピュータ・プログラムの前記第2のバージョンでは、前記第4のデータ処理要素が、前記生成された出力要素を参照する、請求項1に記載の方法。
  15. 前記第2のデータ宛先の位置を決定するステップを含む、請求項14に記載の方法。
  16. 前記第2のデータ宛先の前記位置を決定するステップが、前記位置を示す入力を受信するステップを含む、請求項14に記載の方法。
  17. 前記コンピュータ・プログラムの前記第2のバージョンを実行するステップを含む、請求項1に記載の方法。
  18. 前記コンピュータ・プログラムの前記第2のバージョンを実行するステップによって、前記コンピュータ・プログラムのデバッギングが可能になる、請求項1に記載の方法。
  19. 前記コンピュータ・プログラムの少なくとも一部分の前記第2のバージョンを生成するステップが、前記コンピュータ・プログラムの前記一部分のコピーを生成するステップを含む、請求項1に記載の方法。
  20. 前記生成されたデータ・ソース要素を含むように、前記コンピュータ・プログラムの前記一部分の前記コピーを修正するステップを含む、請求項19に記載の方法。
  21. プロセッサによって、コンピュータ・プログラムの第1のバージョンを解析するための手段であって、前記解析するステップが、前記コンピュータ・プログラムの前記第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含み、前記第1のデータ処理要素が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ・ソースを参照する手段と、
    前記第1のデータ・ソースと異なる第2のデータ・ソースを表すデータ・ソース要素を生成するための手段と、
    前記コンピュータ・プログラムの第2のバージョンを生成するための手段であって、前記コンピュータ・プログラムの前記第2のバージョンが、前記生成されたデータ・ソース要素、および前記第1のデータ処理要素に基づく第2のデータ処理要素を含む手段と
    を含み、
    前記コンピュータ・プログラムの前記第2のバージョンにおいて、前記第2のデータ処理要素が前記生成されたデータ・ソース要素を参照する、システム。
  22. メモリに結合されたプロセッサを含むシステムであって、
    前記プロセッサによって、コンピュータ・プログラムの第1のバージョンを解析し、前記解析するステップが、コンピュータ・プログラムの前記第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含み、前記第1のデータ処理要素が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ・ソースを参照し、
    前記第1のデータ・ソースと異なる第2のデータ・ソースを表すデータ・ソース要素を生成し、
    前記コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成し、前記コンピュータ・プログラムの前記第2のバージョンが、前記生成されたデータ・ソース要素、および前記第1のデータ処理要素に基づく第2のデータ処理要素を含む
    ように、前記プロセッサおよびメモリが構成され、
    前記コンピュータ・プログラムの前記第2のバージョンにおいて、前記第2のデータ処理要素が前記生成されたデータ・ソース要素を参照する、システム。
  23. コンピュータ・システムが、
    プロセッサによって、コンピュータ・プログラムの第1のバージョンを解析し、前記解析するステップが、コンピュータ・プログラムの前記第1のバージョンに含まれる第1のデータ処理要素を識別するステップを含み、前記第1のデータ処理要素が、前記コンピュータ・プログラムの前記第1のバージョンの外部の第1のデータ・ソースを参照し、
    前記第1のデータ・ソースと異なる第2のデータ・ソースを表すデータ・ソース要素を生成し、
    前記コンピュータ・プログラムの少なくとも一部分の第2のバージョンを生成し、前記コンピュータ・プログラムの前記第2のバージョンが、前記生成されたデータ・ソース要素、および前記第1のデータ処理要素に基づく第2のデータ処理要素を含む
    ようにするための命令を記憶する、持続的でコンピュータ読取り可能な媒体であって、
    前記コンピュータ・プログラムの前記第2のバージョンにおいて、前記第2のデータ処理要素が前記生成されたデータ・ソース要素を参照する、持続的でコンピュータ読取り可能な媒体。
JP2017522000A 2014-11-05 2015-11-05 アプリケーション・テスト Active JP7076208B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021198695A JP2022037061A (ja) 2014-11-05 2021-12-07 アプリケーション・テスト

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462075451P 2014-11-05 2014-11-05
US62/075,451 2014-11-05
US14/715,807 2015-05-19
US14/715,807 US9880818B2 (en) 2014-11-05 2015-05-19 Application testing
PCT/US2015/059136 WO2016073665A1 (en) 2014-11-05 2015-11-05 Application testing

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2021198695A Division JP2022037061A (ja) 2014-11-05 2021-12-07 アプリケーション・テスト

Publications (3)

Publication Number Publication Date
JP2017538996A true JP2017538996A (ja) 2017-12-28
JP2017538996A5 JP2017538996A5 (ja) 2018-12-13
JP7076208B2 JP7076208B2 (ja) 2022-05-27

Family

ID=55852789

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017522000A Active JP7076208B2 (ja) 2014-11-05 2015-11-05 アプリケーション・テスト
JP2021198695A Pending JP2022037061A (ja) 2014-11-05 2021-12-07 アプリケーション・テスト

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2021198695A Pending JP2022037061A (ja) 2014-11-05 2021-12-07 アプリケーション・テスト

Country Status (9)

Country Link
US (2) US9880818B2 (ja)
EP (2) EP3215947B1 (ja)
JP (2) JP7076208B2 (ja)
KR (1) KR20170078770A (ja)
CN (2) CN115292160A (ja)
AU (1) AU2015343095B2 (ja)
CA (1) CA2966533C (ja)
SG (2) SG10201901587VA (ja)
WO (1) WO2016073665A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9880818B2 (en) 2014-11-05 2018-01-30 Ab Initio Technology Llc Application testing
US10282277B2 (en) * 2015-12-01 2019-05-07 International Business Machines Corporation Streams: intelligent operator subset for debug
US10936289B2 (en) * 2016-06-03 2021-03-02 Ab Initio Technology Llc Format-specific data processing operations
US10282175B2 (en) * 2017-01-24 2019-05-07 Salesforce.Com, Inc. Methods and systems for performing a partial build
US10223242B1 (en) * 2018-08-27 2019-03-05 Capital One Services, Llc Testing an application in a production infrastructure temporarily provided by a cloud computing environment
US11567998B2 (en) * 2021-03-25 2023-01-31 Databricks, Inc. Dataflow graph processing
AU2022360364A1 (en) 2021-10-08 2024-04-04 Ab Initio Technology Llc Automated modification of computer programs

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS626344A (ja) * 1985-07-02 1987-01-13 Nec Corp プログラムデバツグ方式
JPH1083328A (ja) * 1996-09-05 1998-03-31 Nec Corp 単体テスト用疑似入出力実現方式
US20110271256A1 (en) * 2002-09-23 2011-11-03 Per-Ola Robertsson Bi-directional probing of software
US20120131559A1 (en) * 2010-11-22 2012-05-24 Microsoft Corporation Automatic Program Partition For Targeted Replay
JP2013171345A (ja) * 2012-02-17 2013-09-02 Fujitsu Semiconductor Ltd メッセージ出力制御装置及びメッセージ出力制御方法

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US6102968A (en) 1998-05-21 2000-08-15 Lucent Technologies Inc. Method for automatically closing open reactive systems
US6389429B1 (en) * 1999-07-30 2002-05-14 Aprimo, Inc. System and method for generating a target database from one or more source databases
US6983317B1 (en) * 2000-02-28 2006-01-03 Microsoft Corporation Enterprise management system
US6957769B2 (en) * 2001-04-13 2005-10-25 The Code Corporation System and method for encoding and decoding data and references to data in machine-readable graphical codes
US7529822B2 (en) * 2002-05-31 2009-05-05 Symantec Operating Corporation Business continuation policy for server consolidation environment
US7039645B1 (en) * 2002-09-26 2006-05-02 Requisite Technology, Inc. Managing content of an electronic catalog by collaboration with another electronic catalog
US8676720B1 (en) * 2002-09-26 2014-03-18 Requisite Software, Inc. Collaborative method for managing electronic catalogs
US7849075B2 (en) * 2003-09-15 2010-12-07 Ab Initio Technology Llc Joint field profiling
CN101238456A (zh) * 2005-04-18 2008-08-06 捷讯研究有限公司 用于实现应用任务工作流辅助视觉开发的系统和方法
US7716630B2 (en) 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
CN100405323C (zh) * 2005-09-20 2008-07-23 中国科学院计算技术研究所 一种在指令级随机测试中支持ejtag测试的实现方法
US20070074175A1 (en) 2005-09-23 2007-03-29 Telefonaktiebolaget L M Ericsson (Publ) Method and system for dynamic probes for injection and extraction of data for test and monitoring of software
US7660666B2 (en) * 2005-11-18 2010-02-09 Navteq North America, Llc Geographic database with detailed local data
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
US8079019B2 (en) 2007-11-21 2011-12-13 Replay Solutions, Inc. Advancing and rewinding a replayed program execution
US7849446B2 (en) * 2006-06-09 2010-12-07 Oracle America, Inc. Replay debugging
RU2417391C2 (ru) * 2006-08-24 2011-04-27 Сименс Энерджи Энд Отомейшн, Инк. Устройства, системы и способы конфигурирования программируемого логического контроллера
GB2446175B (en) * 2007-01-31 2011-06-29 Hewlett Packard Development Co Method of updating data
US7860905B2 (en) 2007-04-24 2010-12-28 Microsoft Corporation Systems and methods for modularizing data flows
JP4887431B2 (ja) 2007-12-28 2012-02-29 パナソニック株式会社 通信装置
US8949140B2 (en) 2008-04-21 2015-02-03 International Business Machines Corporation Method and system for dynamic software reconfiguration triggered by component- or system- initiated events
US8132184B2 (en) * 2009-10-21 2012-03-06 Microsoft Corporation Complex event processing (CEP) adapters for CEP systems for receiving objects from a source and outputing objects to a sink
US10845962B2 (en) * 2009-12-14 2020-11-24 Ab Initio Technology Llc Specifying user interface elements
WO2011159759A1 (en) 2010-06-15 2011-12-22 Ab Initio Technology Llc Dynamically loading graph-based computations
US8627296B1 (en) 2010-09-15 2014-01-07 Google Inc. Unified unit and integration test with automatic mock creation
WO2012094496A1 (en) * 2011-01-07 2012-07-12 Ab Initio Technology Llc Flow analysis instrumentation
US8874622B2 (en) 2011-03-28 2014-10-28 Microsoft Corporation Flexible order of authoring for data integration solutions
US8863082B2 (en) * 2011-09-07 2014-10-14 Microsoft Corporation Transformational context-aware data source management
US9002348B2 (en) * 2012-11-20 2015-04-07 Aeris Communications, Inc. Utilizing devices nearby
US10055333B2 (en) 2014-11-05 2018-08-21 Ab Initio Technology Llc Debugging a graph
US9880818B2 (en) 2014-11-05 2018-01-30 Ab Initio Technology Llc Application testing
US10671669B2 (en) 2015-12-21 2020-06-02 Ab Initio Technology Llc Sub-graph interface generation
JP6433614B1 (ja) * 2018-04-16 2018-12-05 Jeインターナショナル株式会社 チャットボット検索システムおよびプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS626344A (ja) * 1985-07-02 1987-01-13 Nec Corp プログラムデバツグ方式
JPH1083328A (ja) * 1996-09-05 1998-03-31 Nec Corp 単体テスト用疑似入出力実現方式
US20110271256A1 (en) * 2002-09-23 2011-11-03 Per-Ola Robertsson Bi-directional probing of software
US20120131559A1 (en) * 2010-11-22 2012-05-24 Microsoft Corporation Automatic Program Partition For Targeted Replay
JP2013171345A (ja) * 2012-02-17 2013-09-02 Fujitsu Semiconductor Ltd メッセージ出力制御装置及びメッセージ出力制御方法

Also Published As

Publication number Publication date
US10705807B2 (en) 2020-07-07
SG11201703191TA (en) 2017-05-30
SG10201901587VA (en) 2019-03-28
AU2015343095B2 (en) 2020-12-03
CN107250988B (zh) 2022-06-14
US20160124836A1 (en) 2016-05-05
CN115292160A (zh) 2022-11-04
JP7076208B2 (ja) 2022-05-27
EP3215947B1 (en) 2020-07-22
CA2966533C (en) 2022-09-13
WO2016073665A1 (en) 2016-05-12
KR20170078770A (ko) 2017-07-07
EP3783494A1 (en) 2021-02-24
CA2966533A1 (en) 2016-05-12
EP3215947A1 (en) 2017-09-13
JP2022037061A (ja) 2022-03-08
US9880818B2 (en) 2018-01-30
US20180232214A1 (en) 2018-08-16
AU2015343095A1 (en) 2017-05-11
CN107250988A (zh) 2017-10-13

Similar Documents

Publication Publication Date Title
US10705807B2 (en) Application testing
JP6674459B2 (ja) グラフのデバッグ
US20190095390A1 (en) Impact analysis
KR20170031749A (ko) 파라미터 세트의 관리
US11347484B2 (en) Format-specific data processing operations
US9098624B1 (en) Deep type parsing

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181105

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181105

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190910

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191029

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20200110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200428

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20200601

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201001

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20201001

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20201013

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20201014

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20201204

C211 Notice of termination of reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C211

Effective date: 20201208

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20210201

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20210405

C13 Notice of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: C13

Effective date: 20210608

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210903

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20211104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211207

C23 Notice of termination of proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C23

Effective date: 20220324

C03 Trial/appeal decision taken

Free format text: JAPANESE INTERMEDIATE CODE: C03

Effective date: 20220420

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20220420

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220517

R150 Certificate of patent or registration of utility model

Ref document number: 7076208

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150