JP2023507301A - データフローグラフのコンポーネントのユニットテスト - Google Patents

データフローグラフのコンポーネントのユニットテスト Download PDF

Info

Publication number
JP2023507301A
JP2023507301A JP2022535176A JP2022535176A JP2023507301A JP 2023507301 A JP2023507301 A JP 2023507301A JP 2022535176 A JP2022535176 A JP 2022535176A JP 2022535176 A JP2022535176 A JP 2022535176A JP 2023507301 A JP2023507301 A JP 2023507301A
Authority
JP
Japan
Prior art keywords
data
test
executable component
dataflow graph
input
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.)
Pending
Application number
JP2022535176A
Other languages
English (en)
Other versions
JPWO2021133603A5 (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 JP2023507301A publication Critical patent/JP2023507301A/ja
Publication of JPWO2021133603A5 publication Critical patent/JPWO2021133603A5/ja
Pending legal-status Critical Current

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/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3093Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/323Visualisation of programs or trace data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/368Test management for test version control, e.g. updating test cases to a new software version
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Image Generation (AREA)

Abstract

データ処理システムは、複数の実行可能コンポーネントを含むデータフローグラフのためのユニットテストを定義する。システムは、テストのためのデータフローグラフの一部分のインジケーションを受信する。システムは、グラフのコンポーネントの実行によって生成される期待される出力データを示すパラメータセットを受信する。システムは、コンポーネントの入力データを受信する。入力データは、パラメータセットによって示され、コンポーネントの機能をテストするように構成される。システムは、パラメータセットに基づいてコンポーネントのユニットテストを定義する。ユニットテストは、データフローグラフの入力に入力データを提供し、データフローグラフのコンポーネントによる入力データの処理を引き起こして出力データを生成し、出力データと、パラメータによって示される期待される出力データとの間の対応を示す結果データを生成する。

Description

(優先権の主張)
本出願は、2019年12月23日に出願された米国仮特許出願第62/952,631号及び2020年5月27日に出願された米国特許出願第16/884,138号に対する優先権を主張し、それぞれの全内容が参照により本明細書に組み込まれる。
(発明の分野)
本文書は、実行可能コードのテストに関する。より具体的には、この文書は、実行可能コードを表すグラフベースのプログラムのコンポーネントのユニットテストに関する。
データ処理アプリケーションの開発中、開発者は生産環境外で作業することができ、生産データにアクセスできない場合がある。データ処理アプリケーションが実際のデータを用いて生産中に正しく動作することを保証するために、データ処理アプリケーションの開発及びテスト中に現実的なデータを使用することができる。
本明細書に記載のデータ処理システムは、データフローグラフなどのコンピュータプログラムの実行可能コードをテストするように構成されている。より具体的には、データ処理システムは、データフローグラフの少なくとも1つの実行可能コンポーネントのユニットテストを構成するように構成される。データフローグラフのコンポーネントは、少なくとも1つの動作を実行するための実行可能コードを含む。コンポーネントは、コンポーネントによって受信された入力データに対して動作して、少なくとも1つの動作を受信された入力データに適用することによって出力データを生成する。データ処理システムは、ユーザ(例えば、開発者)からの入力に基づいて、実行可能コンポーネント又は複数のコンポーネントなどのデータフローグラフの少なくとも一部を分離し、データフローグラフのちょうどその分離された部分(すなわち、のみ)のテストを可能にするために、実行可能コンポーネント又は複数のコンポーネントへの入力データとして、テスト入力データを提供する、ように構成される。テスト入力データは、コンポーネントの現実的な入力データを複製することができる。テスト入力データは、一般に、コンポーネントの呼び出された(テストされた)各動作がユーザによって意図されたように機能することを保証するために、実行可能コンポーネントによって実行され得る1つ以上の動作(例えば、各動作)を呼び出す(テストする)ように構成される。出力データは、テスト入力データに対して動作を実行することによって実行可能コンポーネントによって生成される。出力データは、コンポーネントが意図したように動作したかどうかを判定するためにデータ処理システムによって分析することができる。例えば、コンポーネントの出力データは、コンポーネントが意図したように機能している場合、テスト入力データの受信に応答してコンポーネントによって生成されるべき期待される出力データと比較することができる。データ処理システムによる出力データの分析の結果は、テストの結果データとして記憶することができる。データ処理システムは、結果データを、コンポーネントを含むデータフローグラフのバージョンと関連付けることができる。結果データは、テストに合格したか、不合格であったかなどを示すレポート、テスト結果などを含むことができる。結果データは、コンポーネントがどのように動作しているかを示すことができ、該当する場合、コンポーネントがどのように及び/又はなぜ不合格であったかを示す情報を提供することができる。結果データ及び/又は構造データはまた、コンポーネントの適切な将来の動作を保証するために、故障したコンポーネントに関連するエラーをどのように訂正するか、特にコンポーネントの故障を引き起こすエラーをどのように訂正するかについて、ユーザ又はデータ処理システムにガイダンスを提供するデータを含むことができる。修正された入力データ、期待される出力データ、及び/又は関連する実行可能コンポーネントの機能が受信されてもよく、関連する実行可能コンポーネントは、出力データを生成するためにこの修正に従って再実行されてもよく、この場合、このエラーは再実行中に発生しないことがある。これは、データ処理のテスト中に発生したエラーを解決する技術的タスクを実行する際にユーザを支援するガイド付き人間機械対話プロセスを提供する。これにより、(実際の生産環境外でテストを実行する場合であっても)ソフトウェアアプリケーションの適切な実行及び基礎となるデータ処理システムの適切な機能を保証することができる。
データ処理システムは、アプリケーションを形成するデータフローグラフの少なくとも一部の機能をユニットテストするように構成される。ユニットテストは、アプリケーションの同じ又は他のデータフローグラフの残りの部分の機能とは独立して、データフローグラフの少なくとも一部の機能をテストするように構成される。ユニットテストは、データフローグラフのテストされた部分の機能ロジックを分離するように構成される。データフローグラフのテストされた部分の機能ロジックを分離することにより、テストされたロジックによって導入されたすべてのエラーを識別及び訂正できることを保証することができる。これは、開発者が、それらのエラー又は望ましくない結果を引き起こす他の問題の修復のためのアプリケーションを形成するデータフローグラフにおいてエラーが発生している場所を判定するのに役立つ。
実行されているユニットテストのタイプは、データフローグラフの部分の機能がテストされているため、機能テストと呼ばれる。データフローグラフの部分は、データフローグラフの1つ以上の実行可能コンポーネントを含む。データ処理システムは、パラメータのセットに基づいてデータフローグラフのテストを構成する。パラメータは、テストがどのように構成されるかを指定する。パラメータは、入力データと、コンポーネントから出力されることが期待されるデータとを指定する。しかしながら、パラメータは、テストの構成の追加の態様を指定することもできる。例えば、パラメータは、データフローのどのコンポーネントをテストするか、コンポーネントへの入力のためのソースデータの位置などを指定することができる。テストは、1つ以上のパラメータの値を設定することによって正確に定義される。パラメータの値は、適切な入力がテストされたコンポーネントに提供され、コンポーネントの所望の機能がテストされることを保証し、コンポーネントの出力データが正しいことの検証を可能にする。
データ処理システムは、コンピュータプログラムの一部(実行可能コンポーネント又はデータフローグラフの複数のコンポーネントなど)のみのテストを容易にするように構成される。例えば、コンポーネントの入力データは、ユニットテストのために複製される。一般に、コンポーネントの入力データは、実行可能コンポーネントによって受信及び処理されて出力データを生成するときに、実行可能コンポーネントのすべて又は本質的にすべての動作を呼び出すように構成され得る。入力データは、外部データソースのソースデータ(通常は生産環境で使用される生産データ)のプロファイリングに基づいてこのように構成することができ、プロファイリングは、ソースデータを分析することと、ソースデータに生じる値の統計などのソースデータに関する統計データを取得することとを含む。例えば、コンポーネントの動作のサブセットをテストしたい場合があり、入力データは、コンポーネントの動作のサブセットの各動作を呼び出すように設計することができる。いくつかの実装形態では、データフローグラフのコンポーネントは、データフローグラフが例えば生産環境で実行されるときに、遠隔ソースからデータを受信するように構成される。遠隔ソースからのデータを使用するのではなく、上記の入力データをコンポーネントに提供してコンポーネントをテストする。開発環境でコンポーネントをテストするために、遠隔ソースからのデータがエミュレートされ(例えば、上記のように現実的な方法で複製される)、その結果、コンポーネントは現実的なデータを使用してテストされ、従って、コンポーネントからの出力データは現実的な出力データを表す。エミュレートされた入力データは、コンポーネントの各動作(例えば、各ロジック機能、ロジックケース、規則など)が呼び出されるか又はトリガされ、対応する出力が生成されることを保証するために、コンポーネントのすべての可能なテストケースの実行を引き起こすことができる。いくつかの実装形態では、エミュレートされたデータは、エラーを有する可能性があるコンポーネントのロジック機能の特定の部分をテストするなどのために、コンポーネントの可能なテストケースの一部をカバーする。
いくつかの例では、第1のコンポーネントの出力データは、データフローグラフ内のデータフローによって第1のコンポーネントに接続された第2のコンポーネントの入力データとして提供される。記載された本発明の実施形態によって、データ処理システムは、データフローグラフ全体又はアプリケーション全体を同時にテストすることによって導入される技術的な困難を克服するように構成され、その結果、非常に多数の可能なテストケースが潜在的にテスト全体を減速させ、特定のテストに実際には関連しない実行可能コードが出力データを実行及び生成するのを妨げる可能性がある。このような場合、データフローグラフの出力を解析する際に故障が検出されると、データフローグラフのどの部分が故障したのかを判定することが困難になる可能性がある。データ処理システムは、データフローグラフのエラーがより容易に識別及び訂正されるように、必要に応じてデータフローグラフの部分を正確にテストすることを可能にする。
更に、コンポーネントのテストを実行するとき、可能な各入力をテストする必要がないと判定することができる。例えば、所与のコンポーネントの入力データの特定のフィールドがコンポーネントの実行に使用されない可能性がある。テストは、重要な入力データ及びコンポーネントの動作に焦点を合わせるようにテストを訓練するために更新することができる。いくつかの実装形態では、ユーザ(例えば、開発者)は、コンポーネントの特定の部分を繰り返しテストすることを望む場合がある。開発者(又は他のユーザ)は、デバッグ動作中に、データフローグラフのその特定の部分に対する更新の間に、データフローグラフの小さな部分にテストを集中させたい場合がある。開発者がデータフローグラフの変更を繰り返しながらテストの形でフィードバックを受け取ることは有用である。
本明細書に記載の実施態様は、以下の技術的利点のうちの1つ以上を提供することができる。例えば、本明細書に記載の技術は、データフローグラフの他の部分又は他の接続されたデータフローグラフを構成する必要なく、データフローグラフの少なくとも一部のユニットテストを単独で迅速に構成することを可能にする。例えば、上流のコンポーネントが所望通りに動作していること、(データソースとして参照され得る)ネットワークリソースがオンラインであることなどが保証される必要はない。例えば、コンポーネントの入力データの位置は、データフローグラフ自体を変更することなく、テスト入力データを含むデータストアに設定することができる。パラメータセットは、データフローグラフのどの部分がテストされているか、どのデータが分析又は検証されるか、どのベースラインデータが比較に使用されるか、検証機能の値などを変更するために迅速に更新することができる。
データ処理システムによるデータフローグラフのユニットテストは、追加の利点を有する。ユニットテストは、より大きなシステムと統合される。例えば、データ処理システムは、複数のユニットテストを統合することができる。データフローグラフ又は複数のデータフローグラフの少なくとも一部に対して実行された各ユニットテストの結果は、包括的なレポートに組み合わせることができる。ユニットテストは、テストされたロジックの生産環境をエミュレートするために、生産中のシステムの他の部分と相互作用するように構成される。データ処理システムは、データフローグラフの異なる部分に対するユニットテストをスケジュールすることができる。各ユニットテストの結果は、テストされたデータフローグラフのバージョンと共にバージョン制御データベースに記憶される。エラーが発見された場合(例えば、生産中、更新後など)、データ処理システムは、展開されたロジックを最新の合格バージョンに自動的に戻し、障害が発生したことをシステム管理者に警告することができる。結果データ及び/又は構造化データは、エラーが発生したことを示すデータ(場合によっては、どの種類のエラーが発生したか)、エラーが発生したテストされたロジック内の位置(例えば、どの演算又はグラフコンポーネントでエラーが発生したか)、及びエラーを訂正する方法のガイダンスを含むことができる。
データフローグラフのユニットテストは、ほとんどの用途に使用することができる。例えば、データ処理システムを使用して、任意のアプリケーション用のグラフベースのソフトウェアを構築及び/又は監査することができる。例えば、テストされているデータフローグラフは、データウェアハウス又はデータレイクの管理、データ処理ロジスティクス、ウェブサービス実行などのために構成することができる。これらのアプリケーションの各々の機能は、テスト可能である。ここではいくつかのアプリケーションが列挙されているが、リストは網羅的ではない。従って、ユニットテストは、より大きなシステムと統合されたデータフローグラフの部分の機能テストを可能にし、ユニットテスト自体がテストされているロジックを分離することができる。データ処理システムは、不変であり、いつでも実行することができる反復可能なテストを可能にする。データ処理システムは、ユニットテストを任意のシステム(例えば、クライアント、サーバなど)用に構成し、いつでも他のシステムに再構成可能にするパラメータ化されたテストを可能にする。従って、ユニットテストは携帯可能であり、促進可能である。データ処理システムは、基礎となるシステムの適切な機能を確実にするためにガイドされる人間と機械との対話を実施するために、ユーザに(例えば、連続的に)報告される可視結果を有する自動化されたバージョン管理されたユニットテストを可能にする。
一態様では、データ処理システムによって実施されるプロセスは、複数の実行可能コンポーネントを含むデータフローグラフのためのユニットテストを定義する。プロセスは、テストのためのデータフローグラフの一部のインジケーションを受信することを含み、その部分は、データフローグラフの少なくとも1つの実行可能コンポーネントを含む。データ処理システムは、少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信する。データ処理システムは、少なくとも1つの実行可能コンポーネントの入力データを受信する。入力データは、一般に、パラメータセットによって示され、少なくとも1つの実行可能コンポーネントの機能をテストするように構成される。データ処理システムは、パラメータセットに基づいて少なくとも1つの実行可能コンポーネントのユニットテストを定義する。ユニットテストは、データフローグラフの1つ以上の入力に入力データを提供するように構成される。ユニットテストは、データフローグラフの少なくとも1つの実行可能コンポーネントによる入力データの処理を引き起こして出力データを生成するように構成される。ユニットテストは、出力データと、パラメータによって示される期待される出力データとの間の対応関係を示す結果データを生成するように構成される。ユニットテストは、結果データ、入力データ、及びデータフローグラフの間の関連付けを示す構造化データの生成を引き起こすように構成される。
実施形態は、以下の特徴のうちの任意の1つ以上を含むことができる。
いくつかの実装では、予想データは、ベースラインデータを含む。結果データを生成することは、出力データをベースラインデータと比較することを含む。いくつかの実装では、ベースラインデータは、異なるソースからの複数のデータセットを含む。いくつかの実施形態では、期待される出力データは、検証機能の予期される結果を含み、結果データを生成することは、結果を生成するために出力データの少なくとも一部に検証機能を適用することと、結果を予期される結果と比較することと、を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、パラメータセットは、出力データを抽出するためのデータフローグラフ内の少なくとも1つの位置、期待される出力データの位置、出力データと比較するためのベースラインデータの位置、出力データを検証するための検証機能の価値、のうちの1つを示す少なくとも1つの追加のパラメータを含む。
いくつかの実装形態では、プロセスは、ユニットテストの実行中に、無視する入力データの1つ以上の部分のインジケーションを受信することと、受信したインジケーションに基づいてパラメータセットを更新することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、少なくとも1つの実行可能コンポーネントは、実行中にデータフローグラフの外部のソースからソースデータを受信するように構成されており、入力データは、データフローグラフの外部のソースからのソースデータに対応する値を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能のために少なくとも1つの実行可能コンポーネントに入力値を提供するルックアップファイルの一部を検索することを含み、ルックアップファイルは遠隔ソースによって提供される。プロセスは、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置にルックアップファイルの一部分を記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、少なくとも1つの実行可能コンポーネントのためのデータソースが機能呼び出しを含むことを決定することを含む。機能呼び出しの機能入力のセットの各機能入力について、プロセスは、機能呼び出しを実行して、機能出力のセットを取得することであって、各機能出力は機能入力に対応する、ことを含む。プロセスは、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に機能呼び出しの機能出力のセットを記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、データフローグラフをトラバースしてデータフローグラフの少なくとも1つのデータフローを発見することを含む。プロセスは、少なくとも1つの実行可能コンポーネントの実行から追加の結果データを抽出するためのデータフローグラフ内の位置を示すために、少なくとも1つのデータフローにプローブを挿入することを含む。
いくつかの実装形態では、プロセスは、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントの実行によって生成された出力データを抽出する、データフローグラフ内の位置を発見することを含む。プロセスは、出力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントに入力データを抽出するデータフローグラフ内の位置を発見することと、入力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、構造化データのバージョンを表す構造化データのハッシュを生成することと、構造化データのバージョンのハッシュをデータフローグラフの対応するバージョンに関連付けて記憶することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、データフローグラフの表現を表示するユーザインタフェースを生成することを含む。ユーザインタフェースは、少なくとも1つの実行可能コンポーネントのために、少なくとも1つの実行可能コンポーネントの状態を示すアノテーションを表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、ユーザインタフェースは、データフローグラフに挿入される少なくとも1つのプローブの状態の表現を含む。ユーザインタフェースは、データフローグラフの少なくとも1つの実行可能コンポーネントの実行に応答して、データフローグラフに関連付けられた出力データ、入力データ、及び結果データのうちの1つ以上を示すオーバーレイ層を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、プロセスは、データフローグラフの表現を表示するユーザインタフェースを生成することを含み、ユーザインタフェースは、データフローグラフが入力データを受信するデータフローグラフの表現内の位置を表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの各機能が、ベースラインデータと一致する出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が期待される出力データと一致しない出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が出力データを生成しなかったというインジケーションを含む。
一態様では、データ処理システムは、複数の実行可能コンポーネントを含むデータフローグラフのためのユニットテストを定義する。データ処理システムは、命令を記憶するデータ記憶装置と、データ記憶装置によって記憶された命令を実行するように構成された少なくとも1つのプロセッサとを含む。動作は、テストのためのデータフローグラフの一部のインジケーションを受信することを含む。部分は、データフローグラフの少なくとも1つの実行可能コンポーネントを含む。動作は、少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信することと、少なくとも1つの実行可能コンポーネントの入力データを受信することと、を含む。入力データは、パラメータセットによって示され、少なくとも1つの実行可能コンポーネントの機能をテストするように構成される。動作は、パラメータセットに基づいて少なくとも1つの実行可能コンポーネントのユニットテストを定義することを含む。ユニットテストは、データフローグラフの1つ以上の入力に入力データを提供するように構成される。ユニットテストは、データフローグラフの少なくとも1つの実行可能コンポーネントによる入力データの処理を引き起こして出力データを生成するように構成される。ユニットテストは、出力データと、パラメータによって示される期待される出力データとの間の対応関係を示す結果データを生成するように構成される。ユニットテストは、結果データ、入力データ、及びデータフローグラフの間の関連付けを示す構造化データの生成を引き起こすように構成される。
実施形態は、以下の特徴のうちの任意の1つ以上を含むことができる。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、予想データはベースラインデータを含む。結果データを生成することは、出力データをベースラインデータと比較することを含む。いくつかの実装では、ベースラインデータは、異なるソースからの複数のデータセットを含む。いくつかの実施形態では、期待される出力データは、検証機能の予期される結果を含み、結果データを生成することは、結果を生成するために出力データの少なくとも一部に検証機能を適用することと、結果を予期される結果と比較することと、を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、パラメータセットは、出力データを抽出するためのデータフローグラフ内の少なくとも1つの位置、期待される出力データの位置、出力データと比較するためのベースラインデータの位置、出力データを検証するための検証機能の価値、のうちの1つを示す少なくとも1つの追加のパラメータを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、ユニットテストの実行中に、無視する入力データの1つ以上の部分のインジケーションを受信し、受信したインジケーションに基づいてパラメータセットを更新することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、少なくとも1つの実行可能コンポーネントは、実行中にデータフローグラフの外部のソースからソースデータを受信するように構成されており、入力データは、データフローグラフの外部のソースからのソースデータに対応する値を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能のために少なくとも1つの実行可能コンポーネントに入力値を提供するルックアップファイルの一部を検索することを含み、ルックアップファイルは遠隔ソースによって提供される。動作は、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置にルックアップファイルの一部分を記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、少なくとも1つの実行可能コンポーネントのデータソースが機能呼び出しを含むと判定することを含む。機能呼び出しの機能入力のセットの各機能入力について、動作は、機能呼び出しを実行して、機能出力のセットを取得することであって、各機能出力は機能入力に対応する、ことを含む。動作は、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に機能呼び出しの機能出力のセットを記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースしてデータフローグラフの少なくとも1つのデータフローを発見することを含む。動作は、少なくとも1つの実行可能コンポーネントの実行から追加の結果データを抽出するためのデータフローグラフ内の位置を示すために、少なくとも1つのデータフローにプローブを挿入することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントの実行によって生成された出力データを抽出するデータフローグラフ内の位置を発見することを含む。動作は、出力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントに入力データを抽出するデータフローグラフ内の位置を発見することと、入力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、構造化データのバージョンを表す構造化データのハッシュを生成することと、構造化データのバージョンのハッシュをデータフローグラフの対応するバージョンに関連付けて記憶することとを含む。
いくつかの実装形態では、動作は、データフローグラフの表現を表示するユーザインタフェースを生成することを含む。ユーザインタフェースは、少なくとも1つの実行可能コンポーネントのために、少なくとも1つの実行可能コンポーネントの状態を示すアノテーションを表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、ユーザインタフェースは、データフローグラフに挿入される少なくとも1つのプローブの状態の表現を含む。ユーザインタフェースは、データフローグラフの少なくとも1つの実行可能コンポーネントの実行に応答して、データフローグラフに関連付けられた出力データ、入力データ、及び結果データのうちの1つ以上を示すオーバーレイ層を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフの表現を表示するユーザインタフェースを生成することを含み、ユーザインタフェースは、データフローグラフが入力データを受信するデータフローグラフの表現内の位置を表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの各機能が、ベースラインデータと一致する出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が期待される出力データと一致しない出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が出力データを生成しなかったというインジケーションを含む。
一態様では、1つ以上の非一時的コンピュータ可読媒体は、複数の実行可能コンポーネントを含むデータフローグラフのユニットテストを定義するための命令を記憶する。一般に、命令は、少なくとも1つのプロセッサに動作を実行させるように構成される。動作は、テストのためのデータフローグラフの一部のインジケーションを受信することを含む。部分は、データフローグラフの少なくとも1つの実行可能コンポーネントを含む。動作は、少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信することと、少なくとも1つの実行可能コンポーネントの入力データを受信することと、を含む。入力データは、パラメータセットによって示され、少なくとも1つの実行可能コンポーネントの機能をテストするように構成される。動作は、パラメータセットに基づいて少なくとも1つの実行可能コンポーネントのユニットテストを定義することを含む。ユニットテストは、データフローグラフの1つ以上の入力に入力データを提供するように構成される。ユニットテストは、データフローグラフの少なくとも1つの実行可能コンポーネントによる入力データの処理を引き起こして出力データを生成するように構成される。ユニットテストは、出力データと、パラメータによって示される期待される出力データとの間の対応関係を示す結果データを生成するように構成される。ユニットテストは、結果データ、入力データ、及びデータフローグラフの間の関連付けを示す構造化データの生成を引き起こすように構成される。
実施形態は、以下の特徴のうちの任意の1つ以上を含むことができる。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、予想データはベースラインデータを含む。結果データを生成することは、出力データをベースラインデータと比較することを含む。いくつかの実装では、ベースラインデータは、異なるソースからの複数のデータセットを含む。いくつかの実施形態では、期待される出力データは、検証機能の予期される結果を含み、結果データを生成することは、結果を生成するために出力データの少なくとも一部に検証機能を適用することと、結果を予期される結果と比較することと、を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、パラメータセットは、出力データを抽出するためのデータフローグラフ内の少なくとも1つの位置、期待される出力データの位置、出力データと比較するためのベースラインデータの位置、出力データを検証するための検証機能の価値、のうちの1つを示す少なくとも1つの追加のパラメータを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、ユニットテストの実行中に、無視する入力データの1つ以上の部分のインジケーションを受信し、受信したインジケーションに基づいてパラメータセットを更新することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、少なくとも1つの実行可能コンポーネントは、実行中にデータフローグラフの外部のソースからソースデータを受信するように構成されており、入力データは、データフローグラフの外部のソースからのソースデータに対応する値を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能のために少なくとも1つの実行可能コンポーネントに入力値を提供するルックアップファイルの一部を検索することを含み、ルックアップファイルは遠隔ソースによって提供される。動作は、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置にルックアップファイルの一部分を記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、少なくとも1つの実行可能コンポーネントのデータソースが機能呼び出しを含むと判定することを含む。機能呼び出しの機能入力のセットの各機能入力について、動作は、機能呼び出しを実行して、機能出力のセットを取得することであって、各機能出力は機能入力に対応する、ことを含む。動作は、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に機能呼び出しの機能出力のセットを記憶することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースしてデータフローグラフの少なくとも1つのデータフローを発見することを含む。動作は、少なくとも1つの実行可能コンポーネントの実行から追加の結果データを抽出するためのデータフローグラフ内の位置を示すために、少なくとも1つのデータフローにプローブを挿入することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントの実行によって生成された出力データを抽出するデータフローグラフ内の位置を発見することを含む。動作は、出力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントに入力データを抽出するデータフローグラフ内の位置を発見することと、入力データを抽出するためにデータフローグラフ内の位置にプローブを挿入することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、構造化データのバージョンを表す構造化データのハッシュを生成することと、構造化データのバージョンのハッシュをデータフローグラフの対応するバージョンに関連付けて記憶することとを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフの表現を表示するユーザインタフェースを生成することを含む。ユーザインタフェースは、少なくとも1つの実行可能コンポーネントのために、少なくとも1つの実行可能コンポーネントの状態を示すアノテーションを表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、ユーザインタフェースは、データフローグラフに挿入される少なくとも1つのプローブの状態の表現を含む。ユーザインタフェースは、データフローグラフの少なくとも1つの実行可能コンポーネントの実行に応答して、データフローグラフに関連付けられた出力データ、入力データ、及び結果データのうちの1つ以上を示すオーバーレイ層を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、動作は、データフローグラフの表現を表示するユーザインタフェースを生成することを含み、ユーザインタフェースは、データフローグラフが入力データを受信するデータフローグラフの表現内の位置を表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの各機能が、ベースラインデータと一致する出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が期待される出力データと一致しない出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が出力データを生成しなかったというインジケーションを含む。
一態様では、コンピューティングシステムは、複数の実行可能コンポーネントを含むデータフローグラフのユニットテストを定義するための手段を含む。コンピューティングシステムは、テストのためのデータフローグラフの一部分のインジケーションを受信するための手段を含む。部分は、データフローグラフの少なくとも1つの実行可能コンポーネントを含む。コンピューティングシステムは、少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信する手段と、少なくとも1つの実行可能コンポーネントの入力データを受信する手段と、を含む。入力データは、パラメータセットによって示され、少なくとも1つの実行可能コンポーネントの機能をテストするように構成される。コンピューティングシステムは、パラメータセットに基づいて、少なくとも1つの実行可能コンポーネントのユニットテストを定義するための手段を含む。ユニットテストは、データフローグラフの1つ以上の入力に入力データを提供するように構成される。ユニットテストは、データフローグラフの少なくとも1つの実行可能コンポーネントによる入力データの処理を引き起こして出力データを生成する手段を含む。ユニットテストは、出力データと、パラメータによって示される期待される出力データとの間の対応関係を示す結果データを生成する手段を含む。ユニットテストは、結果データ、入力データ、及びデータフローグラフの間の関連付けを示す構造化データの生成を引き起こす手段を含む。
実施形態は、以下の特徴のうちの任意の1つ以上を含むことができる。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、予想データはベースラインデータを含む。結果データを生成することは、出力データをベースラインデータと比較することを含む。いくつかの実装では、ベースラインデータは、異なるソースからの複数のデータセットを含む。いくつかの実施形態では、期待される出力データは、検証機能の予期される結果を含み、結果データを生成することは、結果を生成するために出力データの少なくとも一部に検証機能を適用することと、結果を予期される結果と比較することと、を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、パラメータセットは、出力データを抽出するためのデータフローグラフ内の少なくとも1つの位置、期待される出力データの位置、出力データと比較するためのベースラインデータの位置、出力データを検証するための検証機能の価値、のうちの1つを示す少なくとも1つの追加のパラメータを含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、ユニットテストの実行中に、無視する入力データの1つ以上の部分のインジケーションを受信し、受信したインジケーションに基づいてパラメータセットを更新する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、少なくとも1つの実行可能コンポーネントは、実行中にデータフローグラフの外部のソースからソースデータを受信するように構成されており、入力データは、データフローグラフの外部のソースからのソースデータに対応する値を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能のために少なくとも1つの実行可能コンポーネントに入力値を提供するルックアップファイルの一部を検索する手段を含み、ルックアップファイルは遠隔ソースによって提供される。コンピューティングシステムは、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置にルックアップファイルの一部分を記憶する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、少なくとも1つの実行可能コンポーネントのためのデータソースが機能呼び出しを含むことを決定する手段を含む。機能呼び出しの機能入力のセットの各機能入力について、コンピューティングシステムは、機能呼び出しを実行して、機能出力のセットを取得することであって、各機能出力は機能入力に対応する手段を含む。コンピューティングシステムは、少なくとも1つの実行可能コンポーネントの実行中に、少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に機能呼び出しの機能出力のセットを記憶する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、データフローグラフをトラバースしてデータフローグラフの少なくとも1つのデータフローを発見する手段を含む。コンピューティングシステムは、少なくとも1つの実行可能コンポーネントの実行から追加の結果データを抽出するためのデータフローグラフ内の位置を示すために、少なくとも1つのデータフローにプローブを挿入する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントの実行によって生成された出力データを抽出するデータフローグラフ内の位置を発見する手段を含む。コンピューティングシステムは、出力データを抽出するためにデータフローグラフ内の位置にプローブを挿入する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、データフローグラフをトラバースして、少なくとも1つの実行可能コンポーネントに入力データを抽出するデータフローグラフ内の位置を発見する手段と、入力データを抽出するためにデータフローグラフ内の位置にプローブを挿入する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、構造化データのバージョンを表す構造化データのハッシュを生成し、データフローグラフの対応するバージョンに関連して構造化データのバージョンのハッシュを記憶する手段を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、データフローグラフの表現を表示するユーザインタフェースを生成する手段を含む。ユーザインタフェースは、少なくとも1つの実行可能コンポーネントについて、少なくとも1つの実行可能コンポーネントの状態を示すアノテーションを表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、ユーザインタフェースは、データフローグラフに挿入される少なくとも1つのプローブの状態の表現を含む。ユーザインタフェースは、データフローグラフの少なくとも1つの実行可能コンポーネントの実行に応答して、データフローグラフに関連付けられた出力データ、入力データ、及び結果データのうちの1つ以上を示すオーバーレイ層を含む。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、コンピューティングシステムは、データフローグラフの表現を表示するユーザインタフェースを生成する手段を含み、ユーザインタフェースは、データフローグラフが入力データを受信するデータフローグラフの表現内の位置を表示する。
前述又は後続の実装形態のいずれかの特徴を含むいくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの各機能が、ベースラインデータと一致する出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が期待される出力データと一致しない出力データを生成したというインジケーションを含む。いくつかの実装形態では、結果データは、少なくとも1つの実行可能コンポーネントの少なくとも1つの機能が出力データを生成しなかったというインジケーションを含む。
1つ以上の実施形態の詳細を、添付の図面及び以下の説明に記載する。その他の特徴及び利点は、明細書及び図面、並びに特許請求の範囲から明らかとなるであろう。
例示的なコンピューティング環境のブロック図である。
データフローグラフの一部をテストする例を示す。 データフローグラフの一部をテストする例を示す。 データフローグラフの一部をテストする例を示す。
ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。 ユニットテストの一例を示す。
ユーザインタフェースの一例を示す。
フロー図を示す。
例示的なコンピューティングシステムの図である。
図1は、実行可能データフローグラフなどのコンピュータプログラムの少なくとも一部の実行可能ロジックのユニットテストを構成及び実行するための例示的なコンピューティング環境100を示す。実行可能ロジックはアプリケーションを形成することができる。ユニットテストは、アプリケーションの実行可能ロジックの残りの部分の機能とは独立して実行可能ロジックの機能をテストするように構成される。ユニットテストは、データフローグラフのテストされた部分の機能ロジックを分離するように構成される。データフローグラフなどのアプリケーションのテストされた部分の機能ロジックを分離することは、アプリケーション全体のテストを必要とせずに、テストされたロジックによって導入されたエラーが識別され、訂正されることを保証することができる。ユニットテストは、ユーザがアプリケーションを形成するデータフローグラフのどこでエラーが発生しているかを判定するのを助けることができる。
環境100は、データ処理システム102を含む。データ処理システム102は、データフローグラフの少なくとも一部についてユニットテストを構成し、及び/又はユニットテストを実行することができる。いくつかの実装形態では、データ処理システム102は、生産環境の一部又は開発環境の一部である。ユーザ(例えば、開発者)は、生産環境での最終的な実行などのために、開発環境でデータフローグラフを構成することができる。データ処理システム102は、それらのデータフローグラフのためのテストを構成し実行するためにユーザによって使用される。
一般に、データ処理システム102は、実行可能データフローグラフに含まれる実行可能ロジック(テスト可能ロジック112としてラベル付けされている)をテストするように構成される。実行可能データフローグラフは、データフローグラフに含まれる実行可能コンポーネント(データ処理機能を実行する実行可能コードを含むか、又は表す)を使用してデータを処理するコンピュータプログラムの一種である。データ処理システム102は、データフローグラフの実行可能コンポーネントのセットをテストするように構成される。実行可能コンポーネントのセットは、単一のコンポーネント又は複数のコンポーネントを含むことができる。この説明では、データフローグラフのコンポーネントがアクションを実行するように構成されている場合、データフローグラフはそれらのアクションを実行するように構成されているものとして説明される。実行可能コンポーネント(コンポーネントとも呼ばれる)は、図2A~図2Bを参照して後述するように、入力データを読み取り又は提供するためのデータソースと、グラフによって処理されたデータを出力又は記憶するためのデータシンクと、入力データ又は別のコンポーネントによる処理によって生成されたデータなどのデータを処理するように構成されたデータ処理コンポーネントとを含むことができる。
実行される各ユニットテストは、スナップショットデータベース116内にテストスナップショット120として表される。テストスナップショット120は、ユニットテストに入力されるデータ、ユニットテストから出力されるデータ、及びユニットテストを定義するために使用されるデータを含むか又は表す。例えば、テストスナップショット120は、ユニットテストの結果を表すテスト結果データを含む。テストスナップショット120は、ユニットテスト中にテストされたロジック112(例えば、データフローグラフのテストされた部分)によって処理されるテスト入力データを含む。テストスナップショット120は、機能呼び出しからアクセスされたデータ又は遠隔ソースからの他のデータを含む。テストスナップショット120は、テストされたロジック112のデータフローグラフロジックを表すデータを含む。テストスナップショット120は、テストされたロジックから出力された処理済みデータを表す出力データを含む。テストスナップショット120は、期待される出力データ(例えば、ベースラインデータ又は検証結果データ)を含む。テストスナップショット120は、テストパラメータ、及びユニットテストのテストされたロジックを表すデータに加えて、テスト結果データのバージョンを、そのユニットテストに使用される入力データの対応するバージョンに関連付けるように、スナップショットデータベース116に記憶される。例えば、テストスナップショット120は、入力データ、プローブからのテスト結果データ、検証データ/ベースラインデータ、及びこれらの各データの記録フォーマットを含むことができる。これらのデータは、(単一のファイルを含むことができる)テストスナップショット120にパッケージ化され、バージョン制御データベース118のポインタによって参照される。データスナップショットは、実行されるべきユニットテストに必要なすべてのデータを含む。これにより、ユニットテストを任意のシステム上で自己完結型プログラムとして実行することができる。後述するように、データスナップショットは、ユニットテストに対する変更を以前のバージョンに戻すことができるようにバージョン制御することができる。例えば、ユニットテストに対する変更が記載されていない場合、ユニットテストの以前のバージョンを復元することができる。いくつかの実装形態では、テストスナップショット120は、ユニットテストのデータフィンガプリントと呼ばれる。テストスナップショット120のデータは、以下で更に詳細に説明される。
テストスナップショット120は、ユニットテストの以前のバージョン及び後続のバージョン(例えば、他のテストスナップショット)にリンクすることができる。このように、テストスナップショット120は、構造化データを表す。バージョン制御データベース118は、各テストスナップショット120a、12b、120cをリンクする。例えば、識別子126a、126b、及び126cは、互いにリンクされることができ、関連するスナップショット120a、120b、及び120cを各々参照することができる。テストスナップショットの構造は、以下で更に説明される。
図2A~図2Bを簡単に参照すると、一般に、1つ以上のデータソース(データソース202a~nなど)からのデータは、データフローグラフ200のコンポーネントによって操作及び処理され、1つ以上のデータシンク(データシンク212など)に送信される。データフローグラフ200などの実行可能なデータフローグラフは、コンポーネント204、206、208、210及び214などのコンポーネントを表すノードを含む有向グラフとして表される。コンポーネント204、206、208、210、及び214は、データ処理コンポーネントであり、各々が、少なくとも1つのデータ入力又はソースからデータを処理し、少なくとも1つのデータシンク又は出力にデータを提供するための実行可能コードを表す。コンポーネント204、206、208、210、及び214、データソース202a~n、及びデータシンク212は、データフローと呼ばれることもある有向リンク(リンク244など)によって接続され、コンポーネント204、206、208、210及び214の間のデータのフローを表し、データソース202a~nで発生し、データシンク212で終端し、各リンク244はデータのフローを表す。上流コンポーネントのデータ出力ポート218a~eは、データフローリンクを介してデータを通信するために下流コンポーネントのデータ入力ポート216a~gに接続される。選択されたテスト領域220などのデータフローグラフ200の部分は、例えば、異なるデータソース及び/又は異なるデータシンクに再利用される部分を表すことができる。データフローグラフを実装するために使用されるデータ構造及びプログラムコードは、例えば、データソース及び/又はデータシンクが容易に置換されることを可能にするために、パラメータ化されることによって複数の異なる構成をサポートすることができる。このようなデータフローグラフを実行するためのシステムは、その全体が参照により本明細書に組み込まれる、「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」と題する米国特許第5,966,072号に記載されている。
ここで、グラフを実行する例を説明する。初期グラフが生成された後、ドライバは、グラフの実行、従ってグラフによって示されるプロセスを制御する。ドライバがグラフを実行するとき、それは以下の一般的なフェーズA-Iを実行することによって実行される。フェーズAでは、プロセス頂点のいずれか1つがイネーブル状態にある限り、ドライバは以下のステップB-Iを繰り返す。ドライバは、フェーズC、D、及びIを省略する場合があり、ステップB、C、E、及びHで実行される動作を混在させる場合がある。フェーズBでは、ドライバは実行のためにグラフを準備する。このフェーズでは、ドライバは、実行可能なプロセス頂点を識別し、リンクのための通信方法を選択し、アダプタノードを生成することができる。フェーズC。ドライバはデータリンクを起動する。このフェーズでは、ドライバは、通信方法を実施するために必要な特定の計算構造を作成する。フェーズDにおいて、ドライバは、計算基板が必要とする任意の他のデータ構造又はファイルを作成する。上述した拡張基板に対して、ドライバは、後述するようにリンクファイルを作成する。これにより、プログラムは実行時にグラフ接続性情報にアクセスすることができる。フェーズEにおいて、ドライバはプロセスを開始する。フェーズFでは、ドライバはプロセスが終了するのを待つ。このフェーズは、すべてのプロセスが正常に終了したとき、又はいずれかのプロセスが異常終了したときに完了する。フェーズGでは、いずれかのプロセスが異常終了した場合、グラフの実行を中止する。フェーズHでは、そうでなければ、実行可能状態のすべてのプロセス頂点が完了状態に遷移する。プロセス頂点が実行可能状態になかった場合、クリーンアップフェーズIが実行され、制御が、実行が失速したことを示すインジケーションと共に、呼び出し側(例えば、ドライバのユーザ)へ戻される。フェーズIでは、ドライバはデータリンク及びリンクファイルをクリーンにする。これにより、フェーズC及びDで作成されたデータ構造の一部がクリーンアップされる。
データ処理システム102は、ユーザ(例えば、開発者)が、データフローグラフの1つ以上のコンポーネントのセット、例えば、選択されたテスト領域220内のコンポーネントのセットなどのデータフローグラフ200の少なくとも一部分を分離すること、及びコンポーネントのセットに入力データとしてテスト入力データを提供することを可能にするように構成されている。テスト入力データは、いくつかの実装形態では、現実的な入力データを複製する。テスト入力データは、一般に、セット内の1つ以上のコンポーネントの各々によって実行される1つ以上の動作(例えば、各動作)をテストして、各コンポーネントの各テスト動作がユーザの意図通りに機能することを保証するように構成される。出力データは、テスト入力データに対してコンポーネントが動作を実行することによって生成される。出力データは、コンポーネントが意図したように動作したかどうかを判定するためにデータ処理システム102によって分析される。例えば、コンポーネントの出力データは、コンポーネントが意図したように機能している場合、テスト入力データの受信に応答してコンポーネントによって生成されるべき期待される出力データと比較される。データ処理システムによる出力データの分析の結果は、テストの結果データとして記憶する。
いくつかの実装形態では、入力データは、テスト中にアプリケーションによって生成することができる。例えば、実行可能なアプリケーションをテスト定義に含めることができる。アプリケーションは、テスト中に実行し、テストされているコンポーネントへの入力であるデータフローに入力データを供給するように構成することができる。アプリケーションは、テストデータに含まれる。コンポーネントによる処理のためにアプリケーションによって生成される入力データは、経時的に生成することができる。
図1に戻ると、データ処理システム102は、テスト定義モジュール104と、データキャプチャモジュール106と、ユニットテスト訓練モジュール108と、データ検証モジュール110と、ロードデータモジュール112とを含む。データ処理システム102は、ユニットテストを構成するためのテストパラメータ124の値の指定(例えば、ユーザデバイス122によって)を可能にする。データ処理システム250は、ユニットテストの実行を可能にする。
一般に、データ処理システム102は、データフローグラフ200の少なくとも一部を単独で反復テストすることを可能にする。例えば、データ処理システム102は、ユニットテストの反復修正を可能にする。データ処理システム102は、ユニットテストのバージョンを、実行又は更新のために後で参照することができるテストスナップショット120として記憶することを可能にする。テストのバージョンは、すべてのパラメータ値、テストデータ、コンポーネントロジックなどと共に記憶される。テストスナップショット120は、自己完結型プログラム(例えば、システムコール及びデータ参照は、テストスナップショット120に含まれるデータを指す)として任意のシステム上で実行することができる。テストデータ又はパラメータ値を変更するなど、ユニットテストが変更された場合、更新はユニットテストの新しいバージョンに保存することができる。別の更新されたテストスナップショットが変更を伴って生成される。テストの各バージョンは、バージョン制御ストレージ内のリンクによって参照されるスナップショットとして記憶することができる。いくつかの実装形態では、ユニットテストの第1のバージョンとユニットテストの第2のバージョンとの間のテスト結果の差を明示的に示すことができる(例えば、ユニットテストの前のバージョンからのユニットテストへの変更がテスト結果にどのように影響したか)。
ユニットテストを構成及び/又は実行するためのプロセスの概要は以下の通りである。データ処理システム102は、テスト可能ロジック112のグラフ(例えば、図2Aのグラフ200)又はその少なくとも一部220などのコンピュータプログラムを受信する。テスト定義モジュール104は、ユニットテストの挙動を指定するテストパラメータ124(例えば、ユーザデバイス122を介して)の定義を可能にする。ユニットテストが実行されると、データ検証モジュール110は、テストが合格であったか、不合格であったか、又は部分的に合格であったかを判定する。
ユニットテスト訓練モジュール108は、検証に応答して、ユニットテストの反復更新を可能にする。例えば、ユニットテストに変更が加えられた場合、テスト結果の違いをユーザに強調表示することができる。それに応答して、ユーザは、変更を受け入れて新しいテストスナップショット120を作成するか、又は変更を拒否してユニットテストの以前のバージョンに戻ることができる。
ユニットテスト訓練モジュール108は、傾向分析を示し、ユニットテストの以前のバージョンとの比較を示し、ユーザが現在の結果を新しいベースラインとして設定することを可能にし、以下同様である。データキャプチャモジュール106は、ユニットテストを実行するために使用されるユニットテストに関連するデータをキャプチャする。データキャプチャモジュール108は、テスト結果データ、テスト入力データ、テストパラメータ124、グラフパラメータなどのこのデータを、スナップショットデータベース116に記憶するための構造化データ(テストスナップショット120)として記憶する。データキャプチャモジュール106は、テストスナップショット120を指し示すポインタを生成し、ポインタをバージョン制御データベース118に記憶する。データキャプチャモジュールは、データベース116、118からデータを記憶及び検索するためにロードデータモジュール114を使用する。
テスト可能ロジック112のユニットテストの構成又は実行のためのデータは、データ処理システム102によってアクセス可能なテストスナップショット120の一部としてスナップショットデータベース116に記憶される。ユニットテストの構成のためのこのデータは、ユニットテストを定義するテストパラメータ値を含む。後述するように、ユニットテストのためのユニットデータの異なるバージョンは、スナップショットデータベース116に記憶されることができ、ユニットテストの実行又は構成のために、必要に応じて検索のためのバージョン制御データベース118に記憶されたポインタによって参照されることができる。
テストスナップショット120は、ユニットテストを実行するためのテスト入力データを含む。ユニットテスト訓練モジュール108は、テスト入力データを使用して、テストされているコンポーネント204、206、208のソース202a~nからの入力データをエミュレートする。いくつかの実装形態では、スナップショットデータベース116は、ユニットテストの構成又は実行のための他のデータを含むことができる。例えば、コンポーネントがデータソース202a~nから受信した入力データの処理中にルックアップテーブルを参照する場合、ルックアップテーブルは、データがユニットテスト又はユニットテストの構成に利用可能であるように、参照データベース116に記憶される。いくつかの実装形態では、ユニットテスト中にルックアップテーブル内で実際に参照されるエントリのみが、テストスナップショット120の一部としてスナップショットデータベース116に記憶される。例えば、ユニットテストの実行中にルックアップテーブルに対して3つの参照が行われ、ルックアップテーブルの2つのデータエントリが実際にアクセスされる場合、データキャプチャモジュール106は、アクセスされた2つのエントリをキャプチャし、後続のユニットテスト中にアクセスするためにスナップショットデータベース116にデータを記憶する。ユニットテストが変更された場合、ルックアップテーブルからの他のデータをキャプチャしてスナップショットデータベース116に記憶することができる。これにより、ユニットテストのスナップショットは、テストされたロジックの動作の実行に必要なすべての入力データがテストに利用可能であるが、データソース202a~nからの未処理データが不必要に保存されないように、可能な限り小さいデータフットプリントを含むことが保証される。続いて、データ処理システム102がスナップショットデータベース116に記憶し、テスト可能ロジック112をテストするために使用するテスト入力データについて更に詳細に説明する。
テスト可能ロジック112は、データフローグラフ200のコンポーネント204、206及び208などの少なくとも1つのデータフローグラフ200の少なくとも一部を含む。テスト可能ロジック112は、単一のコンポーネント、複数のコンポーネント、データフローグラフ全体、又は複数のデータフローグラフを、その全体又は一部のいずれかに含むことができる。テスト可能ロジックのコンポーネントは、データフロー(リンク)と接続することができ、又は分離することができる。複数のデータフローグラフがテスト可能ロジックに含まれる場合、データフローグラフは互いに接続することができる(例えば、上流グラフ及び下流グラフであり、第1のグラフは第2のグラフのサブグラフであり、以下同様である)。いくつかの実装形態では、データフローグラフは互いに分離することができる(例えば、データフローによって接続されていない)が、より大きなアプリケーションの一部であってもよい。例えば、テスト可能ロジック112は、共有記録を更新する2つのデータフローグラフを含むことができる。いくつかの実装形態では、受信されたテスト可能ロジックの各部分(例えば、各コンポーネント、各データフローグラフなど)は、テスト可能ロジック112の他の部分から完全に分離することができる。例えば、テスト可能ロジック112は、テスト中に互いに相互作用しないデータフローグラフの異なるバージョンを含むことができる。
テスト可能ロジック112は、コンポーネントの実行可能ロジックと、コンポーネントが実行可能ロジックの実行のために使用する任意の関連データ(例えば、メタデータ)とを含む。例えば、テスト可能ロジック112は、テストされているコンポーネントに関連するグラフパラメータの値を含むことができる。グラフパラメータは、コンポーネントの挙動を指定することができる。グラフパラメータは、ユニットテストの挙動を指定するテストパラメータとは異なる。ユニットテストを構成するとき、データ処理システム102は、テストパラメータの更新に加えて、又はその代わりに、テスト可能ロジック112で受信されたグラフパラメータの値を更新することができる。いくつかの実装形態では、グラフパラメータ及びテストパラメータは、後述するように、ユーザインタフェースを介して更新することができる。
ユニットテストが実行されているとき、データ処理システム102は、テスト可能ロジック112のグラフ(グラフ200など)をテストのために選択する。いくつかの実装形態では、選択される特定のグラフは、テストパラメータとしてテスト構成において指定される。一般に、ユニットテストは、グラフ200又はグラフの一部に対して実行される。
データ処理システム102は、ユーザによって定義可能であり、ユニットテストの挙動を指定するテストパラメータの値に従ってユニットテストを構成する。テストパラメータは、ユニットテスト結果がどのように報告されるか、ユニットテストがどのようにスケジュールされ実行されるか、テストユニット結果がどのようにバージョン管理されるかなどについての値を指定する。
テストパラメータは、ユニットテストのための設定又は構成を含む。データ処理システム102のテスト定義モジュール104は、データ処理システム102によって受信されるグラフ200のユニットテストを構成する。テスト定義モジュール104は、ユーザがテストを構成するためのテストパラメータを更新し、グラフの挙動を定義するグラフ200のグラフパラメータを更新することを可能にするテスト定義エディタ(TDE)などのユーザインタフェースを含むことができる。続いて、ユーザインタフェースについて図4~図6に関連して説明する。
テスト定義モジュール104は、ユニットテストにおいてテスト可能ロジックのどのロジックがテストされるべきか、及びどのテスト結果が生成されるかの定義を可能にする。テスト定義モジュール104は、ユニットテストの入力ソースを選択し、コンポーネントからのどの出力データが報告されるかを示し、どの結果データが生成されるかを指定する。
入力ソースを設定するために、テスト定義モジュール104は、1つ以上の入力ソーステストパラメータを示す。入力ソースパラメータは、データフローグラフの選択されたテスト領域(例えば、図2Aの領域220)への入力の各々について、どのデータソースがテストされたコンポーネントによって参照されるかを指定する。データソース(例えば、ソース202a~n)は、別のデータフローグラフ、コンポーネント(例えば、コンポーネント214)、ルックアップテーブル、データセットなどの出力を含むことができる。入力ソースからの入力データは、テストされたグラフ200によって処理されているデータであり、テストスナップショット120の一部として含まれるテスト入力データを含む。入力ソースからの入力データは、テスト入力データの一部ではないが、テストされたグラフ200によるテスト中に使用される他のデータを含む。例えば、テスト入力データの一部ではない入力データは、以下で更に説明するように、サービスコールの結果、データ辞書などを含むことができる。
いくつかの実装形態では、テスト入力データは、入力ソースパラメータによって指定されたデータソースの1つ以上で生産データに置き換えられる。入力ソースパラメータは、データベース、ファイル、又はテストされたコンポーネントのデータのソースとしてテスト入力データを含む他のデータソースを指定することができる。いくつかの実装形態では、テスト入力データと生産データ(又は生産データのコピー)とを切り替えるための入力ソースパラメータに追加の値を関連付けることができる。
データソースの入力ソースパラメータは、データソースからテストされたコンポーネントにどのデータが提供されるべきかに関する更なる詳細を示すことができる。入力ソースパラメータは、ネットワークアドレス、データベースアドレス(例えば、特定のデータベース記録)、テーブル参照(例えば、フィールド、値、又はその両方)、データベースキー値などを指定することができる。
いくつかの実装形態では、入力ソースパラメータは、入力記録から無視するデータを指定する。例えば、記録が複数のフィールドを含むが、それらのフィールドのサブセットのみがテストされている場合、入力ソースパラメータは、テストされているフィールドのサブセットに含まれていないフィールドを無視できることを指定することができる。データ記録のフィールドを無視すると、データがネットワークを介してフェッチされなくなり、処理時間及び帯域幅コストが削減され得る。いくつかの実装形態では、フィールドを無視することは、無視されたフィールドに関連する出力がユーザに報告されないか、又はテスト結果データに含まれないことを指定することができる。いくつかの実装形態では、1つ以上のフィールドを無視することは、ユニットテストにおけるそれらのフィールドの処理を完全にスキップすることを含み、ユニットテストを完了する処理時間を短縮する。いくつかの実装形態では、入力値は、テスト入力データファイル又は他のデータソースを参照するのではなく、テスト定義モジュール104を使用して特定の値に設定することができる。いくつかの実装形態では、データソースから受信されるソースデータに加えて、追加の入力データをデータフローに挿入することができる。
いくつかの実装形態では、入力ソースパラメータは、ユニットテストによってテストされるコンポーネントの入力データとして使用されるテスト入力データを含むソース202a~n内の位置を参照することができる。テスト入力データは、テストされるコンポーネントの全機能をカバーするために、特定のフィールド、値などを含むことができる。例えば、コンポーネントが複数のケースを有するケース構造を実行するように構成されている場合、テスト入力データは、ケース構造の各ケースをトリガするための入力データを含むことができる。別の例では、テスト入力データは、機能のエッジケースをテストするために、値の所定の範囲を含むことができる。テスト入力データは、コンポーネントのロジックに表される決定木の各分岐をテストするように構成することができる。コンポーネントの機能性をテストするための当技術分野で知られている他の同様の例を使用することができる。いくつかの実装形態では、テスト入力データは、前のユニットテストのテスト結果からの出力データを含むことができる。これは、ユニットテストの反復間のデータフローグラフのテストされた部分の出力の変化を明示的に示すために行うことができる。
いくつかの実装形態では、入力ソースパラメータは、テスト可能ロジックで実行される機能呼び出しの記憶された結果の位置を含む。例えば、テストされたコンポーネントがルックアップテーブルを参照する機能を含む場合、テスト定義モジュール104は、ルックアップテーブル全体を取り出してテスト入力データとしてルックアップテーブルを記憶するのではなく、ルックアップ結果を取り出して新しいファイル(例えば、スナップショットデータベース116において)に記憶するように構成することができる。ルックアップテーブル又はファイル全体を含めると、テスト入力データファイルのサイズが大幅に増加し、テストのバージョン管理(後述)が非現実的になる可能性がある。従って、テスト定義モジュール104は、コンポーネントの少なくとも1つの機能についてテストされたコンポーネントに入力値を提供するルックアップファイルの一部を検索するように構成することができる。一般に、ルックアップファイルは遠隔ソースによって提供される。次に、テスト定義モジュール104は、ルックアップファイル又はその一部(例えば、データキャプチャモジュール106によって)をスナップショットデータベース116内のテストスナップショット120の一部として記憶させる。記憶されたデータは検索され、少なくとも1つの実行可能コンポーネントの実行中にコンポーネントによってアクセス可能である。これはまた、データが遠隔ソースから要求される必要がないため、ユニットテストの実行時間を短縮する。従って、ユニットテストは、オフラインで単独で実行することができる。
同様に、テストパラメータは、遠隔ソースの機能呼び出しの結果の位置を指定することができる。これは、ウェブサービス又は他の同様のソースを含む遠隔ソースに対して行うことができる。テスト定義モジュール104は、テストされたコンポーネントのデータソースが機能呼び出しを指定すると判定するように構成することができる。テスト定義モジュール104は、機能呼び出しの機能入力のセットの各機能入力について、機能呼び出しを実行して、機能出力のセットを取得し、各機能出力は機能入力に対応するサービスを引き起こすことができる。機能呼び出しの機能出力のセットは、データキャプチャモジュール106によってキャプチャされ、テストスナップショット120の一部としてスナップショットデータベース116に記憶される。機能出力は、被テストコンポーネントの実行中に被テストコンポーネントによってアクセス可能である。これにより、テスト中に機能呼び出しを実行し、遠隔ソースからの応答を待つのに必要な時間が短縮される。このプロセスはまた、オフラインでテストを実行するためのユニットテスト入力データと共にウェブサービスのコンテンツが記憶されることを必要とせずにテストの分離を可能にする。上述したように、テスト入力データのサイズを縮小することにより、テストのバージョン管理を実用的にすることができる。
テスト定義モジュール104は、選択されたテスト領域220のデータフロー上にプローブを設定するためのパラメータを示す。プローブは、データを抽出するためのデータフローグラフ内の位置を示すように構成されたデータオブジェクトを備える。例えば、プローブをデータフローに配置することができる。データがプローブと共にデータフローに沿って送信されると、データはプローブによって読み出される。データキャプチャモジュール106は、データフローからのデータをプローブで記録し、その後の使用のためにスナップショットデータベース116にデータを記憶する。データフローグラフのプローブは、米国特許第10,055,333号に更に詳細に記載されており、その内容は参照によりその全体が本明細書に組み込まれる。
プローブ(例えば、図2B~図2Cのプローブ222、224及び226)は、テストされているデータフローグラフ上に視覚的に示すことができる。プローブは、テスト結果においてどのデータが報告されるべきかを示す。プローブは、データソース202a~nから受信されている未処理データを示すために、テスト結果がテストされているコンポーネントへの入力データを含むように挿入することができる。プローブは、テスト結果にテストされたコンポーネントからの出力データを含ませることができる。出力データは、ユニットテスト中など、テストされたコンポーネントによって処理されたデータを含む。入力ソースパラメータと同様に、テストプローブは、プローブしているデータフローのフィールドを無視するように構成することができる。プローブのデータフローは、データフローグラフ内に、ネットワークアドレスとして、又はその両方としてグラフで示すことができる。プローブ構成は、プローブによって報告されているデータのキー値の設定を含むことができる。データキャプチャモジュール106は、ユニットテストの結果データを報告するために、プローブのデータと期待される出力データとの比較にキー値を使用する。
いくつかの実装形態では、プローブは、テスト定義モジュール104によってデータフローグラフに自動的に挿入され得る。例えば、テスト定義モジュール104は、データフローグラフをトラバースして、データフローグラフの少なくとも1つのデータフローを発見するように構成することができる。次いで、テスト定義モジュール104は、少なくとも1つのデータフロー上にプローブを挿入して、テストされたコンポーネントの実行から追加の結果データを抽出するためのデータフローグラフ内の位置を示すことができる。いくつかの例では、テスト定義モジュール104は、テストされたデータフローグラフをトラバースして、テストされたコンポーネントの実行によって生成された出力データを抽出するデータフローグラフ内の位置を発見するように構成することができる。テスト定義モジュール104は、出力データを抽出するために、データフローグラフ内の位置にプローブを挿入する。いくつかの実装形態では、テスト定義モジュール104は、データフローグラフをトラバースして、入力データをテストされたコンポーネントに抽出するデータフローグラフ内の位置を発見し、その位置にプローブを挿入して入力データを抽出するように構成される。
テストパラメータは、テストスケジューリングパラメータを含む。スケジューリングパラメータは、ユニットテストがいつ実行されるかを指定する。例えば、ユニットテストは、1日に1回、週に1回、更新が行われた後などに、生産ソフトウェアで実行することができる。スケジューリングパラメータは、不合格であったテストのインジケーション(ひいては予期しない出力データを示すことができる)を含むテスト結果の報告の自動テストを可能にする。
テストパラメータは、ユニットテストの対象が何であるかを指定する。言い換えれば、選択されたテスト領域220は、検査パラメータとして表すことができる。ターゲットパラメータは、テスト領域220に含まれる各コンポーネント及びそれらが互いにどのように接続されるかを指定する。これは、コンポーネントのロジックを含む実行可能ファイルを参照することによって暗黙的に行うことができ、ターゲットパラメータは、実行可能ロジックのどの部分を無視すべきかを示すことができる。このようにして、ユーザは、実行形式(例えば、どのコンポーネントが)のどの機能をユニットテストでテストすべきかを正確に指示することができる。
テストパラメータは、テスト結果データにどのデータが含まれるかを指定する。一般に、テスト結果データは、データフローグラフのテストされた部分によって処理されたデータを含む出力データを、ベースラインデータなどの期待される出力データに関連付ける構造化データを含む。テスト結果データは、ユニットテストが実行された後に生成されたデータを含むことができる。生成されたデータは、テストに合格したか不合格であったかを示す、及び/又はテストされたロジックのどの部分が予期しない出力を生成したかを示す報告データを含むことができる。テスト結果データは、ユニットテスト中に(もしあれば)テストされたロジックのどの表現又は演算が実行されなかったかを示すコードカバレッジデータを含むことができる。テスト結果データは、現在のユニットテスト(例えば、ユーザによって指定されるように)に関連する以前のユニットテストからの出力データの変化を強調表示することができる。例えば、同じロジックの反復ユニットテストの各テスト結果を比較して、出力が1つの反復から次の反復にどのように変化したかを示すことができる。いくつかの実装形態では、複数の反復にわたってどのように変化が生じたかを示すために傾向データを生成することができる。例えば、各テスト後に特定の出力の値が増加し、他の出力が減少する場合、出力が期待値に対応しているにもかかわらず、この傾向はテスト結果データで強調され得る。テスト結果データは、以下に記載されるユーザインタフェースに示され得る。テストパラメータは、テスト結果データがどのように提示されるか、どの出力が無視されるか(もしあれば)、どのコード比較が実行されるか、どの予測データが比較に使用されるか、及びどのメトリックが合格又は不合格のテストを構成するか(例えば、すべての値が期待される出力と完全に一致する必要があるかどうか、どのコードカバレッジが望まれるか、など)を指定することができる。
テストパラメータは、ユニットテスト中のテスト入力データに対するロジックの実行から、テストされたロジックの期待される出力が何であるべきかを指定することができる。予想される出力は、ベースラインデータを含み得る。ベースラインデータは、各テスト入力に対する対応する出力データを含むことができる。ユニットテストが実行されると、生成された出力データをベースラインデータと比較することができる。ユニットテスト中に生成された出力データがベースラインデータとどの程度一致するかは、ユニットテストが合格であったか不合格であったかのメトリックとしてデータ処理システム102によって使用することができる。予想される出力は、検証機能を含むことができる。検証機能は、ユニットテストから生成された1つ以上の出力をテストするためのロジックを含むことができる。検証機能は、各出力に含まれるべき正確な値を必ずしも指定することなく、出力データの1つ以上の規則に準拠している出力を検証することができる。例えば、規則は、出力が許容可能な範囲内の数値であること、許容可能なフォーマットであること、特定の値を含むこと、特定の値であること、有効なデータが含まれること(例えば、空又はヌル値ではない)などを指定することができる。例えば、出力が社会保障番号(SSN)であることが知られている場合、検証機能は、出力がユーザ識別子(又はテスト識別子)に関連付けられた有効な社会保障番号を含むことを確認することができる。他の多くの同様の検証機能が可能である。
データ検証モジュール110は、テスト結果データの検証を実行する。検証モジュール110は、ユニットテストのスナップショットと共にスナップショットデータベース116に含めるために、検証結果(テスト結果データに含まれる)をデータキャプチャモジュール106に送信する。
いくつかの実装形態では、テストパラメータは、テスト結果データの宛先を指定することができる。宛先は、テスト結果を保存するための位置を含み、これは、出力データと予想データとの比較を含むことができる。いくつかの実装形態では、予想データは、以下に説明するように、ベースラインデータを含むことができる。いくつかの実装形態では、テスト結果データの出力データは、後続のユニットテストのベースラインデータとして設定することができる。
いくつかの実装形態では、検証モジュール110は、データの検証のための1つ以上のコンポーネントの実行可能ロジックを含むことができる。例えば、検証ロジックはサブグラフとすることができる。サブグラフは、テストされているグラフの異なる部分からのデータを比較するか、又はテストのためのデータの任意の比較を実行するように構成することができる。例えば、検証モジュール110は、入力データを出力データと比較し、出力データが入力データの機能の結果と一致することを保証することができる。
前述したように、テスト定義モジュール104は、グラフパラメータの修正も可能にする。これは、ユーザがユニットテスト間でコンポーネントの挙動を変更したい場合に有用であり得る。データフローグラフのパラメータセットは、テスト可能ロジック112内のメタデータとして受信することができる。グラフパラメータセットは、パラメータセット228として図2Aに示されている。
テスト可能ロジック112のデータフローグラフ200について、テスト定義モジュール104は、データフローグラフに対して実行されるべきテストの数を設定する。通常、単一のテストが実行されるが、テスト定義モジュール104は、単一のデータフローグラフ又はデータフローグラフの一部で実行されるように複数のユニットテストを構成することができる。
テストパラメータは、データキャプチャモジュール106(後述)がテスト入力データ及びテスト結果データをどのようにキャプチャすべきか、並びにバージョン制御システムにおいてテストをバージョン制御すべきかどうかを示すパラメータを含むことができる。
データ処理システム102は、結果データを、コンポーネントを含むデータフローグラフのバージョンと関連付けることができる。テスト結果データは、テストに合格したか、不合格であったかなどを示すレポート、テスト結果などを含むことができる。結果データは、コンポーネントがどのように動作しているかを示すことができ、該当する場合、コンポーネントがどのように故障したかを示す情報を提供することができる。
データキャプチャモジュール106は、実行されているユニットテストに応答して、各ユニットテストについてテストスナップショット120をキャプチャするように構成される。例えば、データフローグラフの一部に対してユニットテストが実行され、ユニットテストが更新され、後続のユニットテストが実行される場合、ユニットテストの実行ごとのテストスナップショット120をスナップショットデータベース116に関連付けることができる。スナップショットデータベース116は、バージョン制御システムとすることができる。テストスナップショット120は、ユニットテスト用のテストスナップショット120の各バージョンが互いに関連付けられた構造化データとして記憶され得る。テストスナップショット120は、圧縮ファイル(例えば、.tarファイル)として記憶することができる。スナップショット120a、120b、及び120cは、例えば、各々が前のスナップショットファイルの後続のバージョンであるシーケンスで互いにリンクすることができる。構造化データのリンクは、バージョン制御データベース118で管理することができる。例えば、識別子126a、126b、及び126cは、互いにリンクされることができ、関連するスナップショット120a、120b、及び120cを各々参照することができる。これにより、ユーザは、ユニットテスト又はデータフローグラフへの更新がテスト結果をどのように変更したかを判定することができる。
ユニットテストが実行されると、データキャプチャモジュール106は、使用された入力データ、遠隔ソースから検索された任意のデータ(例えば、ウェブサービスへの機能呼び出しなどである)、テスト入力データ(適用可能な場合)、出力データ、テスト結果データ、及びテストスナップショット120でテストされたデータフローグラフのバージョンを保存する。テストスナップショット120は、ユニットテストを表す。前述のように、出力データ、入力データなどにどのようなデータが含まれるかは、プローブなどのパラメータの値に基づいて決定される。
データキャプチャモジュール106は、ユニットテストのバージョンを表すスナップショットデータを生成するように構成される。テストスナップショット120をバージョン制御データベース118に記憶された他のテストスナップショット120sに関連付けるユニットテスト及びバージョン制御情報。バージョン制御データベース118は、ユニットテスト用のテストスナップショットを参照するポインタを記憶する。ユニットテストの特定のバージョンが実行される場合、スナップショットデータベース116の対応するテストスナップショット120を指し示すポインタが参照される。データ処理システム102は、スナップショットデータベースから対応するテストスナップショット120を取得する。前述したように、ユニットテストは、そのユニットテストを表すテストスナップショット120のデータを使用して実行することができる。
いくつかの実装形態では、テストスナップショット120をバージョン制御されたオブジェクトとして記憶することは、サイズ制限のために困難であり得る。前述のように、機能呼び出し又はルックアップテーブルの一部を記憶することにより、この問題を軽減することができ、グラフ200による実行中に使用されるデータのみを入力データとして取り込むことができる。データキャプチャモジュール106は、各テストスナップショット120についてハッシュ(又は他のそのようなポインタ値)を生成する。ハッシュ値は、テストスナップショット120のバージョンを表すことができる。データキャプチャモジュール106は、テストスナップショット120のバージョンのハッシュをバージョン制御データベース118に記憶することができる。ハッシュ値が参照されると、対応するテストスナップショット120が検索され得る。
データキャプチャモジュール106は、ユニットテスト中にデータフローグラフの挙動を追跡し、データフローグラフのコンポーネントの実行に関するデータを保存するように構成される。例えば、機能呼び出しが実行された場合、又はルックアップテーブル内の値が参照された場合、データキャプチャモジュール106は、参照された値を記憶するように構成される。データキャプチャモジュール106によって記憶されたデータは、(例えば、前述のように「記憶」操作を実行する)ユニットテストの将来の反復を更新するために使用することができる。
データキャプチャモジュール106は、スナップショットデータベースのデータを管理するために使用することができる。例えば、データキャプチャモジュール106を使用して、スナップショットデータのバージョンをスナップショットデータベース116にチェックインすることができる。データキャプチャモジュール106は、データフローグラフのバージョンを生産に進めるために使用することができる。データキャプチャモジュール106によるデータの取り込みは、一般に自律的であり、テスト定義モジュール104のパラメータによって指定することができる。
ユニットテスト訓練モジュール108は、実行された前のユニットテストに関するデータをデータキャプチャモジュール106から受信したことに応答して、ユニットテストを更新するように構成される。ユニットテスト訓練モジュール108は、データキャプチャモジュール106からテストスナップショット120を受信し、パラメータを更新することによってユニットテストを更新するように構成される。このプロセスは、自律型、半自律型、又は手動であり得る。例えば、記憶サービスコールは、ユニットテスト訓練モジュール108によって自動的に実行することができる。更新されたパラメータ値は、ユニットテストの後続の実行のためにユニットテストの構成を更新するためにテスト定義モジュール104に送信することができる。
いくつかの実装形態では、ユニットテスト訓練モジュール108は、一連のユニットテスト(例えば、特定のデータフローグラフ又はデータフローグラフ)に関するデータを生成するように構成される。トレンド分析については、前述したように、ユニットテスト訓練モジュール108によって実行して、テストパラメータ値を更新することができる。例えば、ユニットテストの実行時に、データ検証モジュール110によって生成された結果データは、ユニットテストがテストされたコンポーネントによって不合格であったことを示すことができる。しかしながら、開発者は、結果データを見て、テストされたロジックの現在の機能が実際には望ましく、合格したユニットテストに対応するべきであると判断することができる。開発者は、ユニットテスト訓練モジュール108を介して、現在のユニットテスト構成がテストされているロジックで合格テストを表すように、ユニットテストベースラインを更新することができる。これはいくつかの理由によるものであり得るが、異なるベースラインデータ又は検証機能が使用されるため、ユニットテストにテスト入力データ内の追加のフィールドを無視させること、又は後述するように、ユニットテストに何らかの他の変更を行ってテストを合格させることを含むことができる。従って、ユニットテスト訓練モジュール108は、開発者が変更を比較し、ユニットテストを以前のバージョンに復元すべきかどうか、又は現在定義されているようなユニットテストが成功したテストを表すかどうかを判定できるように、ユニットテストの反復間のテスト結果の比較を可能にする。
テスト訓練モジュール108は、どのテスト結果がユニットテストの以前のバージョンから変更されたかを提案概要出力に示すことができる。要約出力は、ユニットテストに対する変更がテストの変更されたテスト結果をどのようにもたらしたかをユーザに示すように構成される。いくつかの実装形態では、テスト訓練モジュール108は、テストに対する変更を受け入れるか拒否するかを提案する。いくつかの実装形態では、テスト訓練モジュール108は、満足のいく結果(例えば、不合格ユニットテストを合格ユニットテストに変更する)をもたらすようにユニットテストをどのように修正できるかを提案する。要約出力は、データフローがデータを合格にしたか否かを示すデータ(例えば、コンポーネントが実行されたかどうか)を示すことができる。要約出力は、コンポーネントが記録を処理したかどうか、テストデータのいくつの記録が処理されたか、及びフローが期待通りに処理された記録を通過したかを確認するために、データフローカバレッジを示すデータを示すことができる。要約は、コンポーネントごとに、コンポーネントのどの命令文が実際に実行されたか(例えば、コードカバレッジ)を示すデータを示すことができる。要約は、各データフロー上の記録の数が予想される数であること、又はデータが一般に予想通りにデータフロー上に存在する(又は存在しない)ことをチェックすることができる。例えば、要約は、記録が期待通りにデータフローに渡されないことによって「静かに」拒否されているかどうかを示す。
いくつかの実装形態では、ユニットテスト訓練モジュール108は、テストに対してどのような変更を行うことができるかに関してユーザに提案を行うように構成される(例えば、不合格となったテストを合格とする)。提案は、現在のテスト結果データがデータ検証モジュール110による将来の検証のための新しいベースラインデータと見なされるべきかどうか、どのフィールドが無視されるべきかなどを含むことができる。例えば、特定のフィールドはテストにとって重要ではないが、特定のフィールドがテストを不合格であったと見なさせる可能性がある。テスト訓練モジュール108は、特定のフィールドがテストに合格しないデータを有する一方で、他のフィールドがテストに合格しているデータを有することを強調表示することができる。テスト訓練モジュール108は、特定のフィールドが無視されることを提案することができ、その結果、不合格であったテストは合格テストになる。この提案を提示されたユーザは、フィールドを検討し、フィールドが実際にこのテストに関連しないと判定し、フィールドが後続のテストで無視されることを確認することができる。例えば、ユーザは、フィールドを無視することを提案するプロンプトで制御を選択することができる。
要約出力は、テストデータのフィールドを一覧表示し、各フィールドがユニットテストにどのように合格又は不合格であったかを示すことができる。例えば、要約出力は、ユニットテストの以前のバージョンからのテスト結果の違いを示すことができる。要約出力は、どのプローブがユニットテストの失敗に関連したかを示すことができる。要約出力は、どのフィールドが以前のユニットテストから追加、変更、又は削除されたかを示すことができる。テスト訓練モジュール108は、以前のテスト結果との違いが意味することをユーザに示唆することができる。例えば、すべての記録が以前のテスト結果からのテスト結果の修正を示す場合、ユニットテストに根本的な変化があり、障害を引き起こしている可能性がある。ユーザは、ユニットテストに対して行われた変更を元に戻すように促されてもよい。別の例では、少数の記録のみが変更された場合、テスト訓練モジュール108は、どのテスト結果が変更されて以前のバージョンのユニットテストに合格していたユニットテストに不合格になったかを強調表示することができる。この場合、ユーザは、現在のテストを合格テストとして再定義したい場合がある。合格テストとして現在のテストを受け入れるように促すプロンプトをユーザに示すことができる(例えば、テストのベースラインを更新する)。
いくつかの実装形態では、テスト定義モジュール104は、ユニットテストを実行するためのガイダンスを提供する。例えば、ユーザがユニットテストを実行しようとしたが、データキャプチャモジュール106によってデータがまだ取り込まれていない場合、すべてのテストパラメータがまだ定義されていないことを示すエラーメッセージをユーザに提示することができる。
テスト訓練モジュール108の要約出力はまた、ユーザを案内するための検証及び検証プロンプトを提供することができる。例えば、テスト訓練モジュール108は、否定テストの結果を示すことができる。ここで、テスト訓練モジュール108は、コード内の予想されるアサート又はエラーポイントでテストが失敗したことを検証することができる。言い換えれば、テスト訓練モジュール108は、テストが「正しく不合格である」こと、又はテストが期待される方法で不合格であったことを確認している。実行可能な別の検証は、テストの不合格である。テスト訓練モジュール108は、拒否された記録の数がゼロであるか、そうでなければ予想される範囲内にあるかを検証するように構成することができる。テスト訓練モジュール108は、数が予想される範囲外である場合(例えば、非ゼロの結果が予期され、その結果が0である場合)にユーザにプロンプトを出すことができる。拒否された記録は、ユーザに示すことができる。テスト訓練モジュール108は、テストをフィルタリングするように構成することができる。例えば、テスト訓練モジュール108は、指定された表現と一致するフロー上の記録の数が0であることをチェックする。任意の値が指定された表現(例えば、範囲外である、ヌル値を有する、などである)と一致する場合、それらの記録をユーザに強調表示することができる。前述したように、テスト訓練モジュール108は、無視又は考慮すべき出力データのサブセットを提案するように構成することができる。例えば、予想されるデータのベースラインと比較するときに、記録を無視するように、ユーザにプロンプトを生成することができる。
ロードデータモジュール114は、データをスナップショットデータベース116にロードするように構成される。一般に、ロードデータモジュール114は、データキャプチャモジュール106からスナップショットデータを受け取り、スナップショットデータをスナップショットデータベース116にロードする。ロードデータモジュールはまた、スナップショットデータベース116にロードするためのデータをユニットテスト訓練モジュール108から受信することもできる。例えば、ロードデータモジュール114は、ユニットテスト訓練モジュール108から更新されたパラメータ値を受信することができる。いくつかの実装形態では、ロードデータモジュールは、ユニットテスト訓練モジュール108から傾向データを受信することができる。
図2Aに戻ると、一般に、データフローグラフのフローは、コンポーネント又は一連のコンポーネントがバイパスされるように、パラメータの使用によって変更することができる。一般に、パラメータは、データフローグラフの挙動を変更するように構成又は変更することができるデータフローグラフに関連する値を表す。例えば、データフローグラフの使用間で特性を変更することができ、データフローグラフは、その変更のために異なる動作を実行することができる。コンポーネント204、206、208、210、ソース202a~n、及びシンク212のうちの1つ以上は各々、パラメータセットと呼ぶことができる1つ以上のパラメータに関連付けることができる。例示的なパラメータセット228は、コンポーネント204に関連付けられ、パラメータP、P、P、P、及びPを含む。これらのパラメータを使用してデータフローグラフを構成し得る方法及び/又はデータフローグラフのテストの例を以下に説明する。パラメータ及びそれらの値は、データフローグラフの挙動を定義する。例えば、パラメータは、物理ディスク上のデータソース又はデータシンクの位置を定義することができる。パラメータはまた、ソートコンポーネントがコンポーネントに入力されたデータをどのようにソートするかなど、コンポーネントの挙動を定義することができる。いくつかの例では、パラメータセット内のパラメータの値は、データフローグラフの実行時に入力される。
いくつかの例では、1つのパラメータの値は別のパラメータの値に依存し得る。例えば、データソースは、特定のディレクトリ内のファイルに記憶されてもよい。データソースのパラメータセットは、「DIRECTORY」と呼ばれる第1のパラメータと、「FILENAME」と呼ばれる第2のパラメータとを含むことができる。この例では、FILENAMEパラメータは、DIRECTORYパラメータ(例えば、DIRECTORYは「/usr/local/」であってもよく、FILENAMEは「input.dat」であってもよい)に依存する。パラメータはまた、他のコンポーネントのパラメータに依存し得る。例えば、データフローグラフ用のデータシンクの物理的位置は、データフローグラフ用のデータソースの物理的位置に依存し得る。例えば、データシンクは、データソースのDIRECTORYパラメータに依存するFILENAMEパラメータを含むパラメータのセットを含むことができる(例えば、データシンクのFILENAMEパラメータは、「/usr/local/output.dat」であり得、値「/usr/local/」は、データソースのDIRECTORYパラメータから取得される)。
コンポーネント204は、サブグラフ(図示せず)と呼ばれることもある、1つ以上の他のデータフローグラフを参照するグラフインタフェースコンポーネントとすることができる。実行時に、データフローグラフ200は、コンポーネント204によって参照されるサブグラフを動的にロードして実行し、例えば、データフローグラフ204がサブグラフによって提供される様々な機能に柔軟にアクセスすることを可能にする。コンポーネント204の1つ以上のパラメータP、P、P、P、及びPは、コンポーネント204によって参照される特定のサブグラフを定義する。各サブグラフはまた、各々が対応するサブグラフの挙動を定義する1つ以上のパラメータを含むパラメータセットに関連付けられる。
特定のビジネス目的を達成するためにも書かれているが、グラフの基礎となる構造及び構築は、技術的考慮に基づいて決定される。例えば、データフローグラフコンポーネント204、206、208、及び210は、再利用性を最大化するように、又は並列処理をサポートするように選択されてもよい。一方、グラフが使用される場所は、主にビジネス上の決定であり得る。パラメータ化されたデータフローグラフに関連するパラメータのいくつかは、その実装の背後にある技術的な複雑さをユーザが理解する必要なく、ビジネスユーザがデータフローグラフをカスタマイズすることを可能にするために使用することができる。パラメータ化されたデータフローグラフは、カスタマイズを単純化し、再使用を容易にする。
データフローグラフを構築するためのパラメータ値を識別するためのインタフェースをクライアントマシン上に提示することができる。いくつかの実装形態では、クライアントは、パラメータインタフェースを提供するクライアント上のウェブブラウザを使用し、クライアント側の処理のための何らかの機能を提供するスクリプト言語を使用して、サーバ上で実行されている開発環境にアクセスすることができる。スクリプト言語は、サーバと通信してパラメータを更新し、他の必要な動作を実行することができる。この通信は、構築されているグラフのオブジェクト及び関連するパラメータ値を記憶する開発環境を実行しているクライアントとサーバとの間の通信を変換するブリッジマシンを介して行われ得る。インタフェースは、ユーザがデータフローグラフ及びデータフローグラフ構成に関する技術的知識を欠いている場合でも、ユーザがパラメータ化されたデータフローグラフのパラメータを構成することを可能にする。
クライアントデバイス(図示せず)上に提示される構成インタフェースは、ユーザがグラフ構成モジュールにアクセスすることを可能にする。構成インタフェースを介して、ユーザは、データフローグラフ構成に関する技術的知識を必要とせずに、データソース202a~n、データシンク212、及びデータフローグラフによって実行されるロジックの特性を指定することができる。ユーザによって指定された特性に基づいて、パラメータ値をパラメータセット228に割り当てることができ、従って、ユーザによって指定された特性に従ってデータフローグラフの挙動を定義することができる。
構成インタフェース内で、各コンポーネントのパラメータセット228のパラメータを組み合わせて、ユーザと対話するためのグループに再編成することができ、例えば、技術的考慮事項ではなくビジネス考慮事項を反映することができる。ユーザ入力に基づいてパラメータの値を受信するための構成インタフェースは、サーバ上の開発環境の態様によって必ずしも制限されない柔軟な方法でパラメータ間の関係に従って異なるパラメータを表示することができる。構成インタフェースの例は、米国特許出願公開第2011/0145748号に記載されており、その内容は参照によりその全体が本明細書に組み込まれる。
データフローグラフは、コンパイル時に、特定のアクションを実行するようにデータフローグラフのプリコンパイルを変更することによって、又は実行時に、データフローグラフによって使用されるパラメータを設定するか又は構成ファイルを変更することによって構成することができる。データフローグラフを開発及び構成するための環境は、参照によりその全体が本明細書に組み込まれる、「Managing Parameters for Graph-Based Applications」と題する米国特許第7,716,630号により詳細に記載されている。
前述のように、データフローグラフ200はテスト領域220を含む。テスト領域220は、データフローグラフ200のどのコンポーネントがユニットテストでテストされているかを指定する。テスト領域は、テストパラメータによって指定される。テスト領域220は、グラフィック破線として示されているが、コンポーネントのリストとして表すことができる。いくつかの実装形態では、テスト領域220は、複数の異なるグラフからのコンポーネントを含み、それらのコンポーネントは互いに独立して機能することができる。単一のテスト領域220が示されているが、グラフ200は、複数の分離されたテスト領域を含むことができる。
テスト領域220は、どの入力データがテストに必要であり、どの出力がテストによって生成されるかに関してユニットテストを定義する。例えば、図2Aの領域220において、入力216a及び216bは、これらの入力に接続されたデータフローがテスト領域220の外部のソースに接続されているため、ユニットテスト用の入力である。入力216a及び216bに対応するデータソース202a及び202bはデータベースとして示されているが、データソースはまた、テストされていない他のデータフローグラフ又はコンポーネントを含むことができる。
データフローグラフ200では、コンポーネント204、206及び208がテストされているが、コンポーネント210はテストされていない。コンポーネント204の出力218a及びコンポーネント206の出力218bは、コンポーネント208の入力216c及び216dのデータソースである。コンポーネント218の出力218cは、領域220によって定義されたユニットテストの最新の出力データを含む。コンポーネント210の入力216e及び216f、並びにコンポーネント210の出力218dは、本ユニットテストに重要ではない。
ユニットテストは、テストのためにコンポーネント204、206及び208を分離する。これらのコンポーネントを分離するために、ソース202a及び202bからの入力データは、テスト入力データを使用してシミュレートされ得るか、又はソース自体から提供され得る。データフォームデータソース202nは、領域220によって定義されたユニットテストに影響せず、ユニットテストを実行するためにシミュレート又は検索される必要はない。
前述したように、コンポーネント204は、パラメータセット228を含むメタデータに関連付けられる。コンポーネント204、206、208、210、データソース202a~n、及びデータシンク212の各々は、一般にパラメータセットにそれぞれ関連付けられているが、明確にするためにパラメータセット228のみが示されている。一般に、グラフの表現を見ると、パラメータ228は見えない(従って、点線で縁取られている)。
図2Bを参照すると、ユニットテストの領域220が定義されると、他のテストパラメータ値を前述のように設定することができる。例えば、プローブ222及び224は、テスト領域220への入力データフロー上に(手動又は自動で)配置することができる。同様に、プローブ226を出力データフロー上に配置することができる。プローブは、中間出力データがテスト結果データに含まれるように、中間データフロー230及び232に配置することができる。
一般に、各プローブ222、224及び226について、ユニットテストは、プローブにおけるデータと比較してユニットテストが合格であったか不合格であったかを判定することができる対応する予想データを生成する。一般に、テスト入力データ又は他の入力データを含むプローブ222及び224における入力データは、処理が行われていないため、予想データと同一である。しかしながら、テスト入力データについてデータの欠落又は破損がないことを保証するために比較を実行することができる。一般に、プローブ226などの出力データを含むデータフロー上の各プローブについて、予想されるデータは、前述のように、検証のためのユニットテストのために検索される。
ユニットテスト中にプローブの各々について記録されたデータをユーザインタフェースに示すことができる。いくつかの実装形態では、テーブル234は、各プローブの記憶されたデータの位置を示すことができる。ここで、テーブル234は、プローブを列挙するフィールド236と、データソースを列挙するフィールド238と、プローブ222、224、226で記録されたデータが記憶される各位置を列挙するフィールド240とを含む。各コンポーネント及びプローブは、グラフ又はグラフのグラフ表現に状態オーバーレイ242で示されている。状態オーバーレイ242は、コンポーネントがテストにおいて実行されたかどうかを示す。図2Cに示すように、対応するプローブがデータを受信したとき、又はコンポーネント204が実行されたとき、ステータスオーバーレイ244が更新されて実行が行われたことを示す。
プローブ222、224、及び226の各々は、プローブが配置されたデータフローの比較を示すためにユーザインタフェースで選択することができる。例えば、プローブの選択は、いくつの記録が異なるか、いくつの記録が追加されたか、及びいくつの記録が削除されたかを示すことができる。プローブ226の例示的なポップアップインタフェース246が示されている。プローブ226の選択はまた、図4に示すように、ユーザがテストを構成するためのテストパラメータを更新することを可能にすることができる。
図3A~図3Hを参照すると、データキャプチャモジュール106によるユニットテストの検証300の一例が示されている。図3Aにおいて、テスト定義モジュール104は、テスト可能ロジック112のソースからデータフローグラフ200を表すデータを受信する。テスト定義モジュール104は、ユーザデバイス122上のユーザ入力を介して、又はデータストアからなど、テストパラメータ124を受信する。前述したように、テスト定義モジュールは、テストパラメータ124から、ユニットテストの挙動を定義するテスト定義データ302を生成する。テスト定義データ302は、データ検証モジュール110及びデータキャプチャモジュール106に送信される。
図3Aに示すように、テストパラメータ124は、グラフパラメータ228、テストデータ350、出力データパラメータ331、データソース位置333、及びデータフローグラフ200の挿入位置を含むパラメータセット228を含む。これらのデータは、データフローグラフ200のどの部分229がテストされているか、どのテストデータがテストデータパラメータ335によって使用されているか、データフローグラフ200がどのように実行されるべきか、テスト中にデータフローグラフのテストされたコンポーネントがどのデータを利用できるか、及びどの出力データが記録されるかを定義する。これらのテストパラメータはまた、データ処理システム102がテストに成功するために期待する出力データ、テスト検証に使用されている検証パラメータ337(例えば、どのベースラインデータであるべきか、又はどの検証機能を使用すべきか、などである)を定義する。これらのデータは、図1に関して以前に詳細に説明されている。
図3Bを参照すると、データ検証モジュール110は、テストを成功、失敗、又は部分的に成功として検証するために、テスト定義モジュール104からテスト定義データ302を受信する。データ検証モジュール110はテスト実行ロジック308を動作させることができ、又はテスト実行ロジック308は別のシステムによって動作させることができ、生成された出力304はその他のシステムからデータ検証モジュールに送信することができる。
図3Dを参照すると、ユニットテストを検証するためのプロセス320が示されている。データ検証モジュール110は、期待される出力データ306を含むテスト定義データ302を受信する。期待される出力データ306は、前述したように、データフローグラフ200の実際の予想出力値、出力値が所与のメトリック(例えば、は、フォーマットが正しいか、値が期待される範囲内にあるか、互いに一致する複数の出力であるか、などである)を満たすかどうかをチェックする検証機能、又はその両方の組み合わせを含むことができる。データ検証モジュール110は、検証ロジック308を使用して、生成された出力データ304を期待される出力データ306と比較し、テスト結果データ310に報告されたように、テストが合格、不合格、又は部分的に合格したかどうかを判定する。テストに合格するには、生成された出力データ304が期待される出力データ306と一致する必要は必ずしもない。いくつかの実装形態では、生成された出力データ304の特定の部分が期待される出力データ306と一致するか、又は期待される出力データの検証機能を満たす(又はその両方)場合、テストは「合格」と定義することができる。
図3Eを参照すると、プロセス330は、生成された出力データ304、期待される出力データ306、及びテスト結果データ310の例示的な値を示す。生成された出力データ304は、顧客名、顧客のクレジット額、及び例示的な位置を含む。期待される出力データ306は、同じフィールドを含む。テスト結果データ310に示すように、4つの記録がテストされており、2つの記録が予想出力と生成された出力とを一致させている。生成された出力から記録が欠落している。これらの不一致の結果、テスト結果は不合格である。しかしながら、ユーザは、これが実際には合格を表すのに十分良好であることを示し、後述するように、現在の生成された出力を期待するようにテストを更新することができる。
図3Fは、ユニットテスト訓練モジュール108を使用してユニットテストを訓練するための例示的なプロセス340を示す。ユニットテスト訓練モジュール108は、データ検証モジュール110からテスト結果310を受信する。テスト結果データ310は訓練ロジック332モジュールに入力され、訓練ロジックモジュールはユーザ入力データ356も受け取ることができる。訓練ロジック332は、生成されたユニットテストのテスト出力に基づいて、どのテスト出力が合格テストと見なされるかを指定することができる。例えば、ユーザは、生成された出力304が実際に合格テストを表すべきであることを示すことができる。ユーザは、合格したテストを表すものとして現在の生成された出力304を再定義するオプションを単に選択することができ、それに応じてユニットテスト訓練モジュール108は期待される出力データ306を自動的に更新する。いくつかの実装形態では、ユーザは、テストで無視する特定のフィールドを選択し、許容可能な出力範囲を調整するなどしてユニットテストを更新することができる。テスト結果データ334は、現在の出力が合格テスト(適用可能な場合)を表すことを示すように更新される。ユニットテスト訓練モジュール108は、更新テスト定義データ336をデータキャプチャモジュール106に送信し、データキャプチャモジュールは、テスト中に他のモジュールによってアクセスされ得る。
図3Gは、データキャプチャモジュール106によるデータ取り込みのためのプロセス350を示す。データキャプチャモジュール106は、更新されたテスト結果データ334及び更新されたテスト定義データ336を受信する。これらは、生成された出力データ304、期待される出力データ306(ユニットテスト訓練モジュール108によって更新され得る)、更新されたテストパラメータ344、及びデータフローグラフ200を含む。データキャプチャモジュールは、ユニットテストのバージョンとしてリポジトリに記憶するためのスナップショットデータ120を生成するスナップショット生成ロジック342を含む。このプロセスは、ユニットテストの実行に必要なすべてのデータを圧縮ファイルに圧縮し、そのバージョンをリポジトリに送信することを含むことができる。スナップショット生成ロジック342はまた、スナップショットデータ識別子126を生成する。識別子126は、ファイルサイズに敏感であり得るバージョン制御リポジトリに記憶される。識別子126は、ユニットテストの現在のバージョンを表す関連するスナップショットデータ120を指す。識別子は、圧縮されたスナップショット120ファイルのハッシュ値を含むことができる。スナップショットデータ120及び識別子126は、ロードデータモジュール114を使用して関連するデータベースに送信される。
図3Hに示すように、スナップショットデータ120及び識別子126をロードするためのプロセス360が示されている。スナップショットデータ120及び識別子126は、ロードデータモジュール114によって受信される。ロードデータモジュール114は、スナップショットデータ120の各バージョンをその識別子126と関連付けるバージョン制御ロジック362を含む。スナップショットデータ及び対応する識別子126aのバージョン120aは、それぞれ、スナップショットデータベース116及びバージョン制御データベース118に送信される。スナップショットデータベース116は、スナップショットデータ120の複数のバージョン120a、120b、120cなどを含むことができ、各々がテストの異なるバージョンを表す。バージョン制御データベース118は、対応する識別子126a、126b、126cなどを含む。これらの識別子は、テストの所望のバージョンを検索するために使用することができる。バージョン制御データベース118は軽量データベースとすることができる一方で、スナップショットデータベース116はより大きなデータベース(例えば、クラウドベースのデータベース又はデータウェアハウス)とすることができる。
図4を参照すると、ユーザインタフェース400の一例が示されている。ユーザインタフェース400は、ユーザがテスト定義ウィンドウ402内のテストパラメータを編集することを可能にするように構成される。ユーザインタフェース400は、ユニットテストのテスト結果データを示すためのテスト結果ウィンドウ404を含む。テスト定義ウィンドウ402及びテスト結果ウィンドウ404は並べて示されているが、互いに別々に提示することもできる。
テスト定義ウィンドウ402は、グラフパラメータ、プローブ、データソースアドレス、無視するフィールド、テスト入力データ、及びユニットテストのターゲットなどのテストパラメータ124を編集するためのメニュー406を示す。一例では、プローブA、B、及びCを含むプローブのメニュー408が示されている。
テスト結果ウィンドウ404は、テスト結果データを示す。ウィンドウ404では、テスト結果データはコードカバレッジテーブル410を含む。コードカバレッジテーブル410は、領域220内で選択されたテスト可能ロジック112の各式がユニットテスト中に実行されたかどうかを示すデータを含む。識別子を使用して、式がすべての記録について実行されたか(FULL)、いくつかの記録について実行されたか(PARTIAL)、又は式が実行されなかったか(実行されなかった)を示すことができる。式が実行された記録の数を示すことができる。
テスト結果ウィンドウ404は、プローブテーブル412を示すことができる。プローブテーブル412は、データフローグラフ内のプローブの位置に記録された値を示すことができる。例えば、プローブA、B、及びCのデータフローの値が記録450に示されている。テーブル412は、前述のように、1つ以上の記録のデータフローグラフの入力データ及び出力データの分析を支援することができる。
検証結果テーブル414を結果データに含めることができる。図3A~図3Hに関連して前述したように、検証データは、ベースラインデータを照合することによって、又は検証機能を用いて検証されることによって、ユニットテストの出力データが期待される出力データと一致するかどうかを示す。
図5を参照すると、図1のシステム102などによって、データフローグラフの少なくとも一部のユニットテストを構成及び実行するための例示的なプロセス500を含むフロー図が示されている。プロセス500は、テストのためのデータフローグラフの一部のインジケーションを受信すること(502)を含み、その部分は、データフローグラフの少なくとも1つの実行可能コンポーネントを含む。データ処理システム102は、少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信する(504)。データ処理システム102は、少なくとも1つの実行可能コンポーネントの入力データを受信し(506)、入力データは、パラメータセットによって示され、少なくとも1つの実行可能コンポーネントの機能をテストするように構成される。データ処理システム102は、パラメータセットに基づいて少なくとも1つの実行可能コンポーネントのユニットテストを定義する(508)。一般に、ユニットテストは、データフローグラフの1つ以上の入力に入力データを提供し、データフローグラフの少なくとも1つの実行可能コンポーネントによって入力データを処理して出力データを生成し、出力データと、パラメータによって示される期待される出力データとの間の対応関係を示す結果データを生成し、結果データ、入力データ、及びデータフローグラフの間の関連付け(例えば、バージョン制御データベース118にリンクすることができる共通ファイル内のこれらのデータの関連付け)を示す構造化データを生成するように構成される。
本明細書に記載された主題及び動作のいくつかの実装は、本明細書に開示された構造及びそれらの構造的均等物を含むデジタル電子回路、又はコンピュータソフトウェア、ファームウェア、若しくはハードウェア、又はそれらの1つ以上の組み合わせで実装することができる。例えば、いくつかの実装形態では、監視システム102、クライアントデバイス112、及びコンピューティングシステム116は、デジタル電子回路を使用して、又はコンピュータソフトウェア、ファームウェア、若しくはハードウェアで、又はそれらのうちの1つ以上の組み合わせで実装することができる。別の例では、プロセス500及び600は、デジタル電子回路を使用して、又はコンピュータソフトウェア、ファームウェア、若しくはハードウェアで、又はそれらのうちの1つ以上の組み合わせで実施することができる。
本明細書に記載のいくつかの実装形態(例えば、テスト定義モジュール104、データキャプチャモジュール106、ユニットテスト訓練モジュール108、検証モジュール110、ロードデータモジュール114など)は、デジタル電子回路、コンピュータソフトウェア、ファームウェア、又はハードウェアの1つ以上のグループ又はモジュールとして、又はそれらの1つ以上の組み合わせで実装することができる。異なるモジュールを使用することができるが、各モジュールは別個である必要はなく、複数のモジュールを同じデジタル電子回路、コンピュータソフトウェア、ファームウェア、若しくはハードウェア、又はそれらの組み合わせに実装することができる。
本明細書に記載のいくつかの実装形態は、1つ以上のコンピュータプログラム、すなわち、データ処理装置によって実行するために、又はデータ処理装置の動作を制御するためにコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実装することができる。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムアクセス若しくはシリアルアクセスメモリアレイ若しくはデバイス、又はそれらの1つ以上の組み合わせであり得るか、又はそれらに含まれ得る。更に、コンピュータ記憶媒体は伝搬信号ではないが、コンピュータ記憶媒体は、人工的に生成された伝搬信号に符号化されたコンピュータプログラム命令のソース又は対象とすることができる。コンピュータ記憶媒体はまた、1つ以上の別個の物理的コンポーネント又は媒体(例えば、複数のCD、ディスク、又は他の記憶デバイス)であってもよく、又はそれらに含まれてもよい。
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又は上記の複数のもの、又は組み合わせを含む、データを処理するためのあらゆる種類のデバイス、デバイス、及び機械を包含する。いくつかの実装形態では、クエリ応答モジュール104及び/又はデータ構造モジュール106は、本明細書に記載のデータ処理装置を備える。装置は、例えばFPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)などの専用ロジック回路を含むことができる。装置はまた、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、又はそれらの1つ以上の組み合わせを構成するコードを含むことができる。装置及び実行環境は、ウェブサービス、分散コンピューティング、及びグリッドコンピューティングインフラストラクチャなどの様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとしても知られている)は、コンパイル型言語又はインタプリタ型言語、宣言型言語又は手続き型言語を含む、任意の形式のプログラミング言語で記述することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、対応しなくてもよい。プログラムは、他のプログラム又はデータ(例えば、マークアップ言語文書に記憶された1つ以上のスクリプト)を保持するファイルの一部、問題のプログラム専用の単一のファイル、又は複数の協調ファイル(例えば、1つ以上のモジュール、サブプログラム、又はコードの一部を記憶するファイル)に記憶することができる。コンピュータプログラムは、1つのコンピュータ上で、又は1つのサイトに配置された、又は複数のサイトに分散され、通信ネットワークによって相互接続された複数のコンピュータ上で実行するために展開することができる。
本明細書で説明されるプロセス及びロジックフローのいくつかは、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行され、入力データを操作して出力を生成することによって動作を実行することができる。プロセス及びロジックフローはまた、例えばFPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)などの専用ロジック回路によって実行することができ、装置は専用ロジック回路として実装することができる。
コンピュータプログラムの実行に適したプロセッサは、例として、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、並びに任意の種類のデジタルコンピュータのプロセッサを含む。概して、プロセッサは、リードオンリーメモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信するであろう。コンピュータは、命令に従って動作を実行するためのプロセッサと、命令及びデータを記憶するための1つ以上のメモリデバイスとを含む。コンピュータはまた、データを記憶するための1つ以上の大容量記憶デバイス、例えば、磁気、光磁気ディスク、又は光ディスクを含むか、それらからデータを受信するか、それらにデータを転送するか、それらの両方を行うように動作可能に結合することができる。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。コンピュータプログラム命令及びデータを記憶するのに適した装置は、例として、半導体メモリ装置(例えば、EPROM、EEPROM、フラッシュメモリデバイスなど)、磁気ディスク(例えば、内蔵ハードディスク、リムーバブルディスクなど)、光磁気ディスク、並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリ、媒体及びメモリ装置を含む。プロセッサ及びメモリは、専用ロジック回路によって補完され得るか、又は専用ロジック回路に組み込まれ得る。
ユーザとの対話を提供するために、ユーザに情報を表示するためのディスプレイデバイス(例えば、モニタ、又は別の種類のディスプレイデバイス)と、ユーザがコンピュータに入力を提供することができるキーボード及びポインティングデバイス(例えば、マウス、トラックボール、タブレット、タッチセンシティブスクリーン、又は別のタイプのポインティングデバイス)とを有するコンピュータ上で動作を実施することができる。他の種類のデバイスを使用して、ユーザとの対話を提供することもできる。例えば、ユーザに提供されるフィードバックは、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックなどの任意の形態の感覚フィードバックとすることができ、ユーザからの入力は、音響、音声、又は触覚入力を含む任意の形態で受け取ることができる。更に、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、デバイスから文書を受信することによって、例えば、ウェブブラウザから受信した要求に応答して、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
コンピュータシステムは、単一のコンピューティングデバイス、又は互いに近接して又は一般に遠隔で動作し、通常は通信ネットワークを介して対話する複数のコンピュータを含むことができる。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)及びワイドエリアネットワーク(「WAN」)、インターネットワーク(例えば、インターネット)、衛星リンクを含むネットワーク、及びピアツーピアネットワーク(例えば、アドホックピアツーピアネットワーク)が含まれる。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じ得る。
図6は、プロセッサ610と、メモリ620と、記憶デバイス630と、入出力デバイス640とを含む例示的なコンピュータシステム600を示す。コンポーネント610、620、630及び640の各々は、例えばシステムバス650によって相互接続することができる。プロセッサ610は、システム600内で実行するための命令を処理することができる。いくつかの実装形態では、プロセッサ610は、シングルスレッドプロセッサ、マルチスレッドプロセッサ、又は別のタイプのプロセッサである。プロセッサ610は、メモリ620又は記憶デバイス630に記憶された命令を処理することができる。メモリ620及び記憶デバイス630は、システム600内に情報を記憶することができる。
入出力デバイス640は、システム600に入出力動作を提供する。いくつかの実装形態では、入出力デバイス640は、ネットワークインタフェースデバイス、例えばイーサネットカード、シリアル通信デバイス、例えばRS-232ポート、及び/又は無線インタフェースデバイス、例えば802.11カード、3G無線モデム、4G無線モデム、5G無線モデムなどのうちの1つ以上を含むことができる。いくつかの実装形態では、入出力デバイスは、入力データを受信し、他の入出力デバイス、例えばキーボード、プリンタ及びディスプレイデバイス660に出力データを送信するように構成されたドライバデバイスを含むことができる。いくつかの実装形態では、モバイルコンピューティングデバイス、モバイル通信デバイス、及び他のデバイスを使用することができる。
本明細書は多くの詳細を含むが、これらは特許請求され得るものの範囲に対する限定として解釈されるべきではなく、特定の例に特有の特徴の説明として解釈されるべきである。別個の実施態様の文脈で本明細書に記載されている特定の特徴を組み合わせることもできる。逆に、単一の実施態様の文脈で説明されている様々な特徴は、複数の実施形態において別々に、又は任意の適切な副組み合わせで実施することもできる。
いくつかの実施形態が説明された。それにもかかわらず、本明細書に記載のデータ処理システムの趣旨及び範囲から逸脱することなく、様々な修正を行うことができることが理解されよう。従って、他の実施形態も、以下の特許請求の範囲の範囲内にある。

Claims (24)

  1. データ処理システムによって実施され、複数の実行可能コンポーネントを含むデータフローグラフのためのユニットテストを定義する方法であって、前記方法は、
    テスト用のデータフローグラフの一部分のインジケーションを受信することであって、前記部分は、前記データフローグラフの少なくとも1つの実行可能コンポーネントを含み、前記少なくとも1つの実行可能コンポーネントは、前記少なくとも1つの実行可能コンポーネントに入力データを提供するための少なくとも1つのデータフローに接続される、ことと、
    前記少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信することと、
    前記少なくとも1つの実行可能コンポーネントの前記入力データを受信することであって、前記入力データは、前記パラメータセットによって示され、前記少なくとも1つのデータフローによって前記少なくとも1つの実行可能コンポーネントに提供された場合に、前記少なくとも1つの実行可能コンポーネントの機能を呼び出すように構成される、ことと、
    前記パラメータセットに基づいて前記少なくとも1つの実行可能コンポーネントのユニットテストを定義することであって、前記ユニットテストは、
    前記入力データを前記少なくとも1つのデータフローによって、前記少なくとも1つの実行可能コンポーネントに提供することと、
    出力データを生成するように、前記少なくとも1つの実行可能コンポーネントによる前記入力データの処理を引き起こさせることと、
    前記生成された出力データと、前記パラメータによって示される前記期待される出力データとの間の対応関係を示す結果データを生成することと、
    前記結果データと、前記入力データと、前記データフローグラフとの組み合わせに基づいて、構造化データを生成させることと、を含む、動作を引き起こすように構成されている、ことと、
    を含む、方法。
  2. 前記結果データ、前記構造化データ、又はその両方は、前記生成された出力データが前記期待される出力データに従っているか否かを示すデータを含む、請求項1に記載の方法。
  3. 前記結果データ、前記構造化データ、又はその両方は、前記生成された出力データが前記期待される出力データに従っていないことに基づいてエラーが発生したことを示すデータと、前記エラーが発生した前記少なくとも1つの実行可能コンポーネントの前記実行可能コンポーネントを示すデータと、前記エラーを訂正する方法のガイダンスを提供するデータとを含む、請求項1に記載の方法。
  4. 前記生成された出力データが前記期待される出力データに従っていないことに基づいてエラーが発生したことを示す前記データと、前記エラーが発生した前記少なくとも1つの実行可能コンポーネントの前記実行可能コンポーネントを示す前記データと、前記エラーを訂正する方法のガイダンスを提供する前記データと、を表示するか、又は表示するように構成されているグラフィカルユーザインタフェースを、生成すること、又は生成するためのデータを提供すること、
    を更に含む、請求項1に記載の方法。
  5. 前記グラフィカルユーザインタフェースによって、前記入力データ、前記期待される出力データ、又は前記エラーが発生した前記少なくとも1つの実行可能コンポーネントの前記実行可能コンポーネントの前記機能の修正を受信するための手段を提供することと、
    前記入力データを前記少なくとも1つのデータフローによって、前記少なくとも1つの実行可能コンポーネントに提供することと、
    前記修正に従って、出力データを生成するために、前記エラーが発生した前記少なくとも1つの実行可能コンポーネントの前記実行可能コンポーネントによる入力データの処理を引き起こすことと、
    を更に含む、請求項4に記載の方法。
  6. 前記期待される出力データはベースラインデータを含み、前記結果データを生成することは、前記生成された出力データを前記ベースラインデータと比較することを含む、請求項1に記載の方法。
  7. 入力データを提供することは、前記少なくとも1つのデータフローに供給するための前記入力データを生成するアプリケーションを実行することを含む、請求項1に記載の方法。
  8. 前記期待される出力データは、検証機能の予期される結果を含み、前記結果データを生成することは、結果を生成するために前記生成された出力データの少なくとも一部に前記検証機能を適用することと、前記検証機能を前記期待される出力データの少なくとも一部に適用することに従って、前記結果を前記予期される結果と比較することと、を含む、請求項1に記載の方法。
  9. 前記検証機能は、前記少なくとも1つの実行可能コンポーネントを含む1つ以上の実行可能コンポーネントに接続された2つの異なるデータフローからのデータを比較するように構成されている、請求項8に記載の方法。
  10. 前記パラメータセットは、前記生成された出力データを抽出するための前記データフローグラフ内の少なくとも1つの位置、前記生成された出力データと比較するためのベースラインデータの位置、前記生成された出力データを検証するための検証機能の定義、のうちの1つを示す少なくとも1つの追加のパラメータを含む、請求項1に記載の方法。
  11. 検証機能の実行中に無視する前記入力データの1つ以上の部分のインジケーションを受信することと、
    前記受信されたインジケーションに基づいて、前記パラメータセットを更新することと、
    を更に含む、請求項1に記載の方法。
  12. 前記少なくとも1つの実行可能コンポーネントは、実行中に前記データフローグラフの外部のソースからソースデータを受信するように構成されており、前記入力データは、前記データフローグラフの外部の前記ソースからの前記ソースデータに対応する値を含み、前記少なくとも1つの実行可能コンポーネントの前記動作のうちの少なくともいくつかのすべての動作が、前記値の受信時に呼び出されるように構成されている、請求項1に記載の方法。
  13. 前記少なくとも1つの実行可能コンポーネントの少なくとも1つの機能のために前記少なくとも1つの実行可能コンポーネントに入力値を提供するルックアップファイルの一部を検索することであって、前記ルックアップファイルは遠隔ソースによって提供される、ことと、
    前記少なくとも1つの実行可能コンポーネントの実行中に、前記少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に前記ルックアップファイルの前記一部分を記憶することと、
    を更に含む、請求項1に記載の方法。
  14. 前記少なくとも1つの実行可能コンポーネントのデータソースが機能呼び出しを含むと判定することと、
    前記機能呼び出しの機能入力のセットの各機能入力について、前記機能呼び出しを実行して、機能出力のセットを取得することであって、各機能出力は機能入力に対応する、ことと、
    前記少なくとも1つの実行可能コンポーネントの実行中に、前記少なくとも1つの実行可能コンポーネントによってアクセス可能なデータ記憶装置に前記機能呼び出しの前記機能出力のセットを記憶することと、
    を更に含む、請求項1に記載の方法。
  15. 前記データフローグラフをトラバースして、前記データフローグラフの少なくとも1つのデータフローを発見することと、
    前記少なくとも1つの実行可能コンポーネントのうちの少なくとも1つの実行可能コンポーネントの実行から、追加の結果データを抽出するための、前記データフローグラフ内の位置を示すために、プローブを前記少なくとも1つのデータフロー上に挿入することと、
    を更に含む、請求項1に記載の方法。
  16. 前記構造化データのバージョンを表す前記構造化データのハッシュを生成することと、
    前記構造化データの前記バージョンの前記ハッシュを、前記データフローグラフの対応するバージョンと関連付けて記憶することと、
    を更に含む、請求項1に記載の方法。
  17. 前記データフローグラフの表現を表示するか、又は表示するように構成されたユーザインタフェースを生成するか、又は生成するためのデータを提供することであって、前記ユーザインタフェースは、前記少なくとも1つの実行可能コンポーネントの前記少なくとも1つの実行可能コンポーネントに対して、前記ユニットテスト中に、前記少なくとも1つの実行可能コンポーネントがどのように実行されたかを表す前記少なくとも1つの実行可能コンポーネントの動作状態を示すアノテーションを表示するか、又は表示するためである、ことを更に含む、請求項1に記載の方法。
  18. 前記ユーザインタフェースは、前記データフローグラフの前記少なくとも1つの実行可能コンポーネントの実行に応答して、前記データフローグラフに関連付けられた前記出力データ、前記入力データ、及び前記結果データのうちの1つ以上を示すオーバーレイ層を含む、請求項17に記載の方法。
  19. 前記データフローグラフの表現を表示するか、又は表示するように構成されたユーザインタフェースを生成するか、又は生成するためのデータを提供することであって、前記ユーザインタフェースは、前記データフローグラフが前記入力データを受信する前記データフローグラフの前記表現内の位置を表示する、又は表示するためである、ことを更に含む、請求項1に記載の方法。
  20. 前記結果データは、前記少なくとも1つの実行可能コンポーネントの各機能が、
    ベースラインデータに一致する出力データを生成することと、
    前記期待される出力データと一致しなかった出力データを生成すること、又は
    出力データを生成しないこと、
    のインジケーションを含む、請求項1に記載の方法。
  21. 前記ユニットテストは、前記入力データを処理するために前記少なくとも1つの実行可能コンポーネントによって要求された要求されたデータを記憶することを含む動作を引き起こすように更に構成され、前記要求されたデータは、前記構造化データに含まれる、請求項1に記載の方法。
  22. 前記構造化データは、前記構造化データの前のバージョン、前記構造化データの後続のバージョン、又はその両方にリンク可能である、請求項1に記載の方法。
  23. 複数の実行可能コンポーネントを含むデータフローグラフのユニットテストを定義するためのデータ処理システムによって実施されるシステムであって、前記システムは、
    命令を記憶するデータ記憶装置と、
    少なくとも1つのプロセッサであって、前記データ記憶装置によって記憶された前記命令を実行して、
    テスト用のデータフローグラフの一部分のインジケーションを受信することであって、前記部分は、前記データフローグラフの少なくとも1つの実行可能コンポーネントを含み、前記少なくとも1つの実行可能コンポーネントは、前記少なくとも1つの実行可能コンポーネントに入力データを提供するための少なくとも1つのデータフローに接続される、ことと、
    前記少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信することと、
    前記少なくとも1つの実行可能コンポーネントの前記入力データを受信することであって、前記入力データは、前記パラメータセットによって示され、前記少なくとも1つのデータフローによって前記少なくとも1つの実行可能コンポーネントに提供された場合に、前記少なくとも1つの実行可能コンポーネントの機能を呼び出すように構成される、ことと、
    前記パラメータセットに基づいて前記少なくとも1つの実行可能コンポーネントのユニットテストを定義することであって、前記ユニットテストは、
    前記入力データを前記少なくとも1つのデータフローによって、前記少なくとも1つの実行可能コンポーネントに提供することと、
    出力データを生成するように、前記少なくとも1つの実行可能コンポーネントによる前記入力データの処理を引き起こさせることと、
    前記生成された出力データと、前記パラメータによって示される前記期待される出力データとの間の対応関係を示す結果データを生成することと、
    前記結果データと、前記入力データと、前記データフローグラフとの組み合わせに基づいて、構造化データを生成させることと、を含む、動作を引き起こすように構成されている、ことと、を含む動作を実行するように構成された、プロセッサと、
    を備える、システム。
  24. 複数の実行可能コンポーネントを含むデータフローグラフのユニットテストを定義するための命令を記憶する1つ以上の非一時的コンピュータ可読媒体であって、前記命令は、少なくとも1つのプロセッサに、
    テスト用のデータフローグラフの一部分のインジケーションを受信することであって、前記部分は、前記データフローグラフの少なくとも1つの実行可能コンポーネントを含み、前記少なくとも1つの実行可能コンポーネントは、前記少なくとも1つの実行可能コンポーネントに入力データを提供するための少なくとも1つのデータフローに接続される、ことと、
    前記少なくとも1つの実行可能コンポーネントの実行によって生成される期待される出力データを示すパラメータを含むパラメータセットを受信することと、
    前記少なくとも1つの実行可能コンポーネントの前記入力データを受信することであって、前記入力データは、前記パラメータセットによって示され、前記少なくとも1つのデータフローによって前記少なくとも1つの実行可能コンポーネントに提供された場合に、前記少なくとも1つの実行可能コンポーネントの機能を呼び出すように構成される、ことと、
    前記パラメータセットに基づいて前記少なくとも1つの実行可能コンポーネントのユニットテストを定義することであって、前記ユニットテストは、
    前記入力データを前記少なくとも1つのデータフローによって、前記少なくとも1つの実行可能コンポーネントに提供することと、
    出力データを生成するように、前記少なくとも1つの実行可能コンポーネントによる前記入力データの処理を引き起こさせることと、
    前記生成された出力データと、前記パラメータによって示される前記期待される出力データとの間の対応関係を示す結果データを生成することと、
    前記結果データと、前記入力データと、前記データフローグラフとの組み合わせに基づいて、構造化データを生成させることと、を含む、動作を引き起こすように構成されている、ことと、を含む動作を実行させるように構成された、1つ以上の非一時的コンピュータ可読媒体。
JP2022535176A 2019-12-23 2020-12-16 データフローグラフのコンポーネントのユニットテスト Pending JP2023507301A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962952631P 2019-12-23 2019-12-23
US62/952,631 2019-12-23
US16/884,138 2020-05-27
US16/884,138 US20210191845A1 (en) 2019-12-23 2020-05-27 Unit testing of components of dataflow graphs
PCT/US2020/065281 WO2021133603A1 (en) 2019-12-23 2020-12-16 Unit testing of components of dataflow graphs

Publications (2)

Publication Number Publication Date
JP2023507301A true JP2023507301A (ja) 2023-02-22
JPWO2021133603A5 JPWO2021133603A5 (ja) 2023-12-26

Family

ID=76438415

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022535176A Pending JP2023507301A (ja) 2019-12-23 2020-12-16 データフローグラフのコンポーネントのユニットテスト

Country Status (10)

Country Link
US (1) US20210191845A1 (ja)
EP (1) EP4081903A1 (ja)
JP (1) JP2023507301A (ja)
CN (1) CN115039084A (ja)
AR (1) AR120909A1 (ja)
AU (1) AU2020412360A1 (ja)
BR (1) BR112022012487A2 (ja)
CA (1) CA3161519A1 (ja)
MX (1) MX2022007818A (ja)
WO (1) WO2021133603A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11138366B2 (en) * 2019-02-25 2021-10-05 Allstate Insurance Company Systems and methods for automated code validation
CN111640426A (zh) * 2020-06-10 2020-09-08 北京百度网讯科技有限公司 用于输出信息的方法和装置
US20220091966A1 (en) * 2020-09-22 2022-03-24 Mastercontrol, Inc. Systems and methods for facilitating software validation within a production environment
US11573887B2 (en) * 2020-11-20 2023-02-07 Vdoo Connected Trust Ltd. Extracting code patches from binary code for fuzz testing
US20230083221A1 (en) * 2021-09-13 2023-03-16 Oracle International Corporation Systems and methods for validating data
CN113778890B (zh) * 2021-09-16 2023-06-30 平安银行股份有限公司 代码测试方法、装置、电子设备及存储介质
US11921604B2 (en) * 2021-10-28 2024-03-05 Red Hat, Inc. Evaluating system recovery using emulated production systems
US20230176962A1 (en) * 2021-12-07 2023-06-08 Jpmorgan Chase Bank, N.A. System and method for automated testing of suite of applications

Family Cites Families (10)

* 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
US20080052687A1 (en) * 2003-11-03 2008-02-28 Agustin Gonzales-Tuchmann Development environment for data transformation applications
US7716630B2 (en) 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7644334B2 (en) * 2006-11-27 2010-01-05 Honeywell International, Inc. Requirements-based test generation
US7502972B1 (en) * 2008-03-16 2009-03-10 International Business Machines Corporation Reducing log entries using hash keys
CN102754072B (zh) 2009-12-14 2016-10-19 起元技术有限责任公司 规定用户界面元素
US9274926B2 (en) * 2013-01-03 2016-03-01 Ab Initio Technology Llc Configurable testing of computer programs
US9417994B2 (en) * 2014-04-08 2016-08-16 Turnkey Solutions, Corp. Software test automation system and method
US10055333B2 (en) * 2014-11-05 2018-08-21 Ab Initio Technology Llc Debugging a graph
US10642720B2 (en) * 2016-09-15 2020-05-05 Talend, Inc. Test case generator built into data-integration workflow editor

Also Published As

Publication number Publication date
WO2021133603A1 (en) 2021-07-01
AU2020412360A1 (en) 2022-06-09
CA3161519A1 (en) 2021-07-01
US20210191845A1 (en) 2021-06-24
AR120909A1 (es) 2022-03-30
CN115039084A (zh) 2022-09-09
MX2022007818A (es) 2022-09-23
EP4081903A1 (en) 2022-11-02
BR112022012487A2 (pt) 2022-09-06

Similar Documents

Publication Publication Date Title
US20210191845A1 (en) Unit testing of components of dataflow graphs
US11263111B2 (en) Validating software functionality
EP3769223B1 (en) Unified test automation system
US8473902B2 (en) Identifying source code elements for refactoring
US8327351B2 (en) Application modification framework
US20050080811A1 (en) Configuration management architecture
Huang et al. Confvalley: A systematic configuration validation framework for cloud services
US8010578B2 (en) Method of refactoring a running database system
US20140006459A1 (en) Rule-based automated test data generation
US20090249284A1 (en) Automation for virtualized it environments
US10990515B2 (en) Automated unit testing in a mainframe environment
Maciel et al. MOAManager: a tool to support data stream experiments
US11238025B2 (en) Data repair within productive system
US20090158266A1 (en) Deployment tool for increasing efficiency in a production computer system
Braunisch et al. Maturity Evaluation of SDKs for I4. 0 Digital Twins
Fördős et al. CRDTs for the configuration of distributed Erlang systems
US20240160559A1 (en) Automated decoupling of unit tests
Lim et al. D-TAF: test automation framework compatible with various DBMS
US20040194091A1 (en) System and method for capturing and managing a process flow
Pedersen Development of configuration software for a test rig of electrical systems
Di Ruscio et al. EVOSS: A tool for managing the evolution of free and open source software systems
Jajal et al. Interoperability in Deep Learning: A User Survey and Failure Analysis of ONNX Model Converters
Bunyakiati et al. The certification of software tools with respect to software standards
US20090276444A1 (en) Adaptive Methodology for Updating Solution Building Block Architectures and Associated Tooling
Lyndsay The Importance of Data in Functional Testing

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231215

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231215