(57)【特許請求の範囲】
【請求項１】
１又は２以上のデータソースからのデータにルールを適用するためのコンピューティングシステムであって、
第１のデータソースからデータを受信するように構成された入力デバイス又は入力ポートと、
前記ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、前記第１のデータソースから受信された前記データから少なくとも一部導出された複数のデータユニットを処理するように構成された少なくとも１つのプロセッサとを含み、前記モードが、
前記複数のデータユニットが特定の順序で受信され、前記複数のデータユニットを処理するステップが、前記複数のデータユニットのうちの少なくともいくつかのそれぞれに対して、前記データユニットに前記ルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むことを含む第１のモードと、
前記複数のデータユニットのうちの特定のデータユニットの選択が受信され、前記特定のデータユニットを処理するステップが、（１）前記複数のデータユニットからのデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、前記順序付けられたサブセットに含まれる各データユニットが、前記複数のデータユニット内の前記特定のデータユニットの前に出現する、決定するステップと、（２）前記特定のデータユニットに前記ルールを適用する前に、少なくとも１つの状態変数を、前記データユニットの第１のセットを前記第１のモードで処理することから生じるであろう状態に更新するステップと、（３）前記状態変数の前記更新された値を読むステップを含む、前記特定のデータユニットに前記ルールを適用するステップとを含む、第２のモードと
を含む、前記コンピューティングシステム。
【請求項２】
第２のモードが、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において１又は２以上のデータソースからのデータに前記ルールを適用するモードである、請求項１に記載のコンピューティングシステム。
【請求項３】
第１のモードが、実運用環境において１又は２以上のデータソースからのデータにルールを適用するモードである、請求項２に記載のコンピューティングシステム。
【請求項４】
第１のモードが、複数のデータユニットのすべてがバッチでテストされるテスト環境において１又は２以上のデータソースからのデータにルールを適用するモードである、請求項２に記載のコンピューティングシステム。
【請求項５】
データユニットの第１のセットがデータユニットの順序付けられたサブセットからなる、請求項１に記載のコンピューティングシステム。
【請求項６】
状態変数を更新するステップが、データユニットの第１のセットを通して順序正しく反復し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用し、前記データユニットに前記ルールを適用した結果に基づいて前記状態変数の更新された値を書き込むステップを含む、請求項１に記載のコンピューティングシステム。
【請求項７】
データユニットの第１のセットが、データユニットの順序付けられたサブセット内にないデータユニットを含み、前記データユニットの第１のセットを通して順序正しく反復するステップが、データユニットが前記データユニットの順序付けられたサブセットのメンバであるかどうかを決定するステップを含む、請求項６に記載のコンピューティングシステム。
【請求項８】
順序付けられたサブセットに含まれる各データユニットが特定のデータユニットに関連し、複数のデータユニットが、前記複数のデータユニット内の前記特定のデータユニットに関連するデータユニットの第１の出現である関連データユニットを含み、データユニットの前記順序付けられたサブセットの最初のデータユニットが、前記関連データユニット以外のデータユニットである、請求項１に記載のコンピューティングシステム。
【請求項９】
特定のデータユニットを第２のモードで処理するステップが、複数のデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶するステップをさらに含む、請求項８に記載のコンピューティングシステム。
【請求項１０】
データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップが、状態変数キャッシュからの複数のデータユニット内の最初のデータユニットの前に出現するデータユニットに対する前記ルールの適用に応答して記憶された状態変数の更新された値を読むステップを含む、請求項９に記載のコンピューティングシステム。
【請求項１１】
複数のデータユニット内の最初のデータユニットの前に出現するデータユニットが、前記最初のデータユニットに関連し、前記複数のデータユニット内の前記最初のデータユニットの前に出現する最も近いデータユニットである、請求項１０に記載のコンピューティングシステム。
【請求項１２】
ルールが複数のルールケースを含む、請求項１に記載のコンピューティングシステム。
【請求項１３】
複数のルールケースのうちの少なくとも１つのルールケースをテストする結果が状態変数の値に依存する、請求項１２に記載のコンピューティングシステム。
【請求項１４】
複数のデータユニットの特定のデータユニットにルールを適用するステップが、状態変数の更新された値に対して複数のルールケースのうちの少なくとも１つのルールケースをテストするステップを含む、請求項１３に記載のコンピューティングシステム。
【請求項１５】
順序付けられたサブセットに含まれる各データユニットが特定のデータユニットに関連し、データユニットの前記順序付けられたサブセットの最初のデータユニットが、複数のデータユニット内の前記特定のデータユニットに関連するデータユニットの第１の出現である、請求項１に記載のコンピューティングシステム。
【請求項１６】
複数のルールケースのうちの少なくとも１つのルールケースが、第１のデータソースと異なる第２のデータソースから導出された値に基づく、請求項１５に記載のコンピューティングシステム。
【請求項１７】
第２のデータソースが、処理の開始の後に動的にアクセスされる、請求項１６に記載のコンピューティングシステム。
【請求項１８】
複数のデータユニットの各データユニットが、第１のデータソースのレコードからの１又は２以上の値と、第２のデータソースからの少なくとも１つの値とを含む、請求項１６に記載のコンピューティングシステム。
【請求項１９】
複数のデータユニットが、第１のデータソースのレコードのセットの順序に従って順序付けられる、請求項１８に記載のコンピューティングシステム。
【請求項２０】
順序付けられたサブセットに含まれる各データユニットが、共有識別子によって、特定のデータユニット、およびデータユニットの前記順序付けられたサブセットの他のデータユニットに関連する、請求項１に記載のコンピューティングシステム。
【請求項２１】
共有識別子がキーフィールド値を含む、請求項２０に記載のコンピューティングシステム。
【請求項２２】
特定のデータユニットを処理するステップが、前記特定のデータユニットのための１又は２以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、前記以前に取得された値が存在し、有効であると決定された場合は、前記データユニットキャッシュからの前記特定のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの前記特定のデータユニットのための１又は２以上の値を取得するステップを含む、請求項１に記載のコンピューティングシステム。
【請求項２３】
特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップが、前記以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含む、請求項２２に記載のコンピューティングシステム。
【請求項２４】
１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップが、前記特定のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、複数のデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で前記接続を維持するステップとを含む、請求項２２に記載のコンピューティングシステム。
【請求項２５】
１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップが、以前に開かれた第１のデータソースに対する接続から前記特定のデータユニットのための１又は２以上の値を受信するステップを含む、請求項２２に記載のコンピューティングシステム。
【請求項２６】
第１のデータソースがデータベースである、請求項１に記載のコンピューティングシステム。
【請求項２７】
第１のデータソースがデータアーカイブファイルである、請求項１に記載のコンピューティングシステム。
【請求項２８】
特定のデータユニットを第２のモードで処理するステップが、少なくとも順序付けられたサブセットの第１のデータユニットに対して、前記第１のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、前記以前に取得された値が存在し、有効であると決定された場合は、前記データユニットキャッシュからの前記第１のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの前記第１のデータユニットのための１又は２以上の値を取得するステップをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項２９】
第１のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップが、前記以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含む、請求項２８に記載のコンピューティングシステム。
【請求項３０】
１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップが、前記第１のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、複数のデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で前記接続を維持するステップとを含む、請求項１に記載のコンピューティングシステム。
【請求項３１】
１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップが、以前に開かれた第１のデータソースに対する接続から前記第１のデータユニットのための１又は２以上の値を受信するステップを含む、請求項１に記載のコンピューティングシステム。
【請求項３２】
非一時的な形態でコンピュータ可読媒体上に記憶された、１又は２以上のデータソースからのデータにルールを適用するためのソフトウェアであって、コンピューティングシステムに、
第１のデータソースからデータを受信させ、
前記ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、前記第１のデータソースから受信された前記データから少なくとも一部導出された複数のデータユニットを処理させるための命令を含み、前記モードが、
前記複数のデータユニットが特定の順序で受信され、前記複数のデータユニットを処理するステップが、前記複数のデータユニットのうちの少なくともいくつかのそれぞれに対して、前記データユニットに前記ルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むことを含む第１のモードと、
前記複数のデータユニットのうちの特定のデータユニットの選択が受信され、前記特定のデータユニットを処理するステップが、（１）前記複数のデータユニットからのデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、前記順序付けられたサブセットに含まれる各データユニットが、前記複数のデータユニット内の前記特定のデータユニットの前に出現する、決定するステップと、（２）前記特定のデータユニットに前記ルールを適用する前に、少なくとも１つの状態変数を、前記データユニットの第１のセットを前記第１のモードで処理することから生じるであろう状態に更新するステップと、（３）前記状態変数の前記更新された値を読むステップを含む、前記特定のデータユニットに前記ルールを適用するステップとを含む、第２のモードと
を含む、前記ソフトウェア。
【請求項３３】
１又は２以上のデータソースからのデータにルールを適用するための方法であって、
第１のデータソースからデータを受信するステップと、
前記ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、前記第１のデータソースから受信された前記データから少なくとも一部導出された複数のデータユニットを処理するステップとを含み、前記モードが、
前記複数のデータユニットが特定の順序で受信され、前記複数のデータユニットを処理するステップが、前記複数のデータユニットのうちの少なくともいくつかのそれぞれに対して、前記データユニットに前記ルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むことを含む第１のモードと、
前記複数のデータユニットのうちの特定のデータユニットの選択が受信され、前記特定のデータユニットを処理するステップが、（１）前記複数のデータユニットからのデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、前記順序付けられたサブセットに含まれる各データユニットが、前記複数のデータユニット内の前記特定のデータユニットの前に出現する、決定するステップと、（２）前記特定のデータユニットに前記ルールを適用する前に、少なくとも１つの状態変数を、前記データユニットの第１のセットを前記第１のモードで処理することから生じるであろう状態に更新するステップと、（３）前記状態変数の前記更新された値を読むステップを含む、前記特定のデータユニットに前記ルールを適用するステップとを含む、第２のモードと
を含む、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１４年１０月２０日に出願された米国出願第６２／０６５，９０９号の優先権を主張するものである。
【０００２】
本明細書は、ルールの規定及びデータへの適用に関する。
【背景技術】
【０００３】
いくつかの例では、１又は２以上のルールが、データ処理システム内でレコードに適用され得る。例えば、ルールは、レコードの品質を確認するため、又はレコードに含まれる情報に基づいてイベントをトリガするために使用され得る。ルールは、ユーザインターフェースを使用して開発者によって規定され得る。いくつかの例では、ルールが開発段階中に適用されたか実運用段階中に適用されたかに応じて、ルールを適用した結果が異なることがある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様では、一般的に、１又は２以上のデータソースからのデータにルールを適用するための方法は、第１のデータソースからデータを受信するステップと、第１のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットのうちの特定のデータユニットを処理するステップとを含む。この処理するステップは、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられたいくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【０００５】
態様は、以下の特徴のうちの１又は２以上を含んでよい。
【０００６】
処理するステップが、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において１又は２以上のデータソースからのデータにルールを適用する第１のモードに関連付けられ得る。テスト環境内で１又は２以上のデータソースからのデータにルールを適用する第１のモードが、順序付けられた複数のデータユニットのデータユニットごとに、実運用環境において１又は２以上のデータソースからのデータにルールを適用する第２のモードからもたらされる結果と矛盾しない結果をもたらすように構成され得る。テスト環境内で１又は２以上のデータソースからのデータにルールを適用する第１のモードが、順序付けられたいくつかのデータユニットのデータユニットごとに、順序付けられたいくつかのデータユニットのすべてがバッチでテストされるテスト環境において１又は２以上のデータソースからのデータにルールを適用する第３のモードからもたらされる結果と矛盾しない結果をもたらすように構成され得る。
【０００７】
データユニットの第１のセットがデータユニットの順序付けられたサブセットからなり得る。状態変数を更新することが、データユニットの第１のセットを通して順序正しく反
復し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用し、データユニットにルールを適用した結果に基づいて状態変数の更新された値を書き込むことを含み得る。データユニットの第１のセットが、データユニットの順序付けられたサブセット内にないデータユニットを含んでよく、データユニットの第１のセットを通して順序正しく反復することは、データユニットがデータユニットの順序付けられたサブセットのメンバであるかどうかを決定することを含み得る。いくつかのデータユニットが、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第１の出現である関連データユニットを含んでよく、データユニットの順序付けられたサブセットの最初のデータユニットは関連データユニットとは異なるデータユニットである。
【０００８】
方法は、順序付けられたいくつかのデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶することを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップは、状態変数キャッシュからのいくつかのデータユニットのうちの最初のデータユニットの前に出現するデータユニットに対するルールの適用に応答して記憶された状態変数の更新された値を読むステップを含み得る。いくつかのデータユニット内の最初のデータユニットの前に出現するデータユニットは、最初のデータユニットに関連し、いくつかのデータユニット内の最初のデータユニットの前に出現する最も近いデータユニットであり得る。ルールは、いくつかのルールケースを含み得る。いくつかのルールケースのうちの少なくとも１つのルールケースをテストする結果は、状態変数の値に依存し得る。
【０００９】
いくつかのデータユニットのうちの特定のデータユニットにルールを適用するステップは、状態変数の更新された値に対していくつかのルールケースのうちの少なくとも１つのルールケースをテストするステップを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットは、順序付けられたいくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第１の出現であり得る。いくつかのルールケースのうちの少なくとも１つのルールケースは、第１のデータソースと異なる第２のデータソースから導出された値に基づき得る。第２のデータソースは、処理の開始の後に動的にアクセスされ得る。順序付けられたいくつかのデータユニットの各データユニットは、第１のデータソースのレコードからの１又は２以上の値と、第２のデータソースからの少なくとも１つの値とを含み得る。順序付けられたいくつかのデータユニットは、第１のデータソースのレコードのセットの順序に従って順序付けられ得る。データユニットの順序付けられたサブセットの各データユニットは、共有識別子によってデータユニットの順序付けられたサブセットの他のデータユニットに関連し得る。共有識別子はキーフィールド値を含み得る。
【００１０】
特定のデータユニットを処理するステップは、特定のデータユニットのための１又は２以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの特定のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップを含み得る。特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。
【００１１】
１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップは、特定のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、順序付けられたいくつかのデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。１又は２以上のデータソースからの特定のデータユ
ニットのための１又は２以上の値を取得するステップは、以前に開かれた第１のデータソースに対する接続から特定のデータユニットのための１又は２以上の値を受信するステップを含み得る。第１のデータソースはデータベースであってよい。第１のデータソースは、データアーカイブファイルであってよい。
【００１２】
方法は、少なくとも順序付けられたサブセットの第１のデータユニットに対して、第１のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの第１のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップを含み得る。第１のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップは、第１のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、順序付けられたいくつかのデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップは、以前に開かれた第１のデータソースに対する接続から第１のデータユニットのための１又は２以上の値を受信するステップを含み得る。
【００１３】
別の態様では、一般的に、非一時的な形態でコンピュータ可読媒体上に記憶された、１又は２以上のデータソースからのデータにルールを適用するためのソフトウェアは、コンピューティングシステムに、第１のデータソースからデータを受信させ、第１のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットの特定のデータユニットを処理させるための命令を含む。この処理するステップは、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられたいくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【００１４】
別の態様では、一般的に、１又は２以上のデータソースからのデータにルールを適用するためのコンピューティングシステムは、第１のデータソースからデータを受信するように構成された入力デバイス又は入力ポートと、第１のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットの特定のデータユニットを処理するように構成された少なくとも１つのプロセッサとを含む。処理は、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられた複数のデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットに
ルールを適用するステップとを含む。
【００１５】
別の態様では、一般的に、１又は２以上のデータソースからのデータにルールを適用するためのコンピューティングシステムは、第１のデータソースからデータを受信するように構成された入力デバイス又は入力ポートと、ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、第１のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理するように構成された少なくとも１つのプロセッサとを含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むステップを含む第１のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第２のモードがある。特定のデータユニットを処理するステップは、（１）いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、（２）特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを第１のモードで処理するステップから生じるであろう状態に更新するステップと、（３）状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【００１６】
態様は、以下の特徴のうちの１又は２以上を含んでよい。
【００１７】
第２のモードは、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において１又は２以上のデータソースからのデータにルールを適用するモードであってよい。第１のモードは、実運用環境において１又は２以上のデータソースからのデータにルールを適用するモードであってよい。第１のモードは、いくつかのデータユニットのすべてがバッチでテストされるテスト環境において１又は２以上のデータソースからのデータにルールを適用するモードであってよい。データユニットの第１のセットは、データユニットの順序付けられたサブセットからなってよい。
【００１８】
状態変数を更新するステップは、データユニットの第１のセットを通して順序正しく反復し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用し、データユニットにルールを適用した結果に基づいて状態変数の更新された値を書き込むステップを含み得る。データユニットの第１のセットは、データユニットの順序付けられたサブセット内にないデータユニットを含んでよく、データユニットの第１のセットを通して順序正しく反復するステップは、データユニットがデータユニットの順序付けられたサブセットのメンバであるかどうかを決定するステップを含み得る。順序付けられたサブセットに含まれる各データユニットは特定のデータユニットに関連してよく、いくつかのデータユニットは、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第１の出現である関連データユニットを含み得、データユニットの順序付けられたサブセットの最初のデータユニットは、関連データユニットとは異なるデータユニットである。
【００１９】
特定のデータユニットを第２のモードで処理するステップは、いくつかのデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶するステップを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップは、状態変数キャッシュからの複数のデータユニット内の最初のデータユニットの前に出現するデータユニットに対するルールの適用に応答して記憶された状態変数の更新された値を読むステップを含み得る。いくつか
のデータユニット内の最初のデータユニットの前に出現するデータユニットは、最初のデータユニットに関連し、いくつかのデータユニット内の最初のデータユニットの前に出現する最も近いデータユニットであってよい。ルールは、いくつかのルールケースを含み得る。
【００２０】
いくつかのルールケースのうちの少なくとも１つのルールケースをテストする結果は、状態変数の値に依存し得る。いくつかのデータユニットの特定のデータユニットにルールを適用するステップは、状態変数の更新された値に対していくつかのルールケースのうちの少なくとも１つのルールケースをテストするステップを含み得る。順序付けられたサブセットに含まれる各データユニットは特定のデータユニットに関連してよく、データユニットの順序付けられたサブセットの最初のデータユニットは、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの最初の出現であってよい。いくつかのルールケースのうちの少なくとも１つのルールケースは、第１のデータソースと異なる第２のデータソースから導出された値に基づいてよい。第２のデータソースは、処理の開始の後に動的にアクセスされてよい。
【００２１】
いくつかのデータユニットの各データユニットは、第１のデータソースのレコードからの１又は２以上の値と、第２のデータソースからの少なくとも１つの値とを含み得る。いくつかのデータユニットは、第１のデータソースのレコードのセットの順序に従って順序付けられ得る。順序付けられたサブセットに含まれる各データユニットは、共有識別子によって、特定のデータユニットに、及びデータユニットの順序付けられたサブセットの他のデータユニットに関連し得る。共有識別子はキーフィールド値を含み得る。
【００２２】
特定のデータユニットを処理するステップは、特定のデータユニットのための１又は２以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの特定のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップを含み得る。特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップは、特定のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、いくつかのデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。
【００２３】
１又は２以上のデータソースからの特定のデータユニットのための１又は２以上の値を取得するステップは、以前に開かれた第１のデータソースに対する接続から特定のデータユニットのための１又は２以上の値を受信するステップを含み得る。第１のデータソースは、データベースであってよい。第１のデータソースは、データアーカイブファイルであってもよい。
【００２４】
特定のデータユニットを第２のモードで処理するステップは、少なくとも順序付けられたサブセットの第１のデータユニットに対して、第１のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの第１のデータユニットのための１又は２以上の値を取得し、そうでない場合は、第１のデータソースを含む１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップを含み得る。
【００２５】
第１のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップは、第１のデータユニットのための１又は２以上の値を受信するために第１のデータソースに対する接続を開くステップと、いくつかのデータユニットの他のデータユニットのための１又は２以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。１又は２以上のデータソースからの第１のデータユニットのための１又は２以上の値を取得するステップは、以前に開かれた第１のデータソースに対する接続から第１のデータユニットのための１又は２以上の値を受信するステップを含み得る。
【００２６】
別の態様では、一般的に、非一時的な形態でコンピュータ可読媒体上に記憶された、１又は２以上のデータソースからのデータにルールを適用するためのソフトウェアは、コンピューティングシステムに、第１のデータソースからデータを受信させ、ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、第１のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理させるための命令を含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むステップを含む第１のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第２のモードがある。特定のデータユニットを処理するステップは、（１）いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、（２）特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを第１のモードで処理するステップから生じるであろう状態に更新するステップと、（３）状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【００２７】
別の態様では、一般的に、１又は２以上のデータソースからのデータにルールを適用するための方法は、第１のデータソースからデータを受信するステップと、ルールを適用する少なくとも２つの異なるモードのうちの選択されたモードで、第１のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理するステップとを含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも１つの状態変数に書き込むステップを含む第１のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第２のモードがある。特定のデータユニットを処理するステップは、（１）いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第１のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、（２）特定のデータユニットにルールを適用する前に、少なくとも１つの状態変数を、データユニットの第１のセットを第１のモードで処理するステップから生じるであろう状態に更新するステップと、（３）状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【発明の効果】
【００２８】
態様は、以下の利点のうちの１又は２以上を含むことができる。
【００２９】
本明細書で説明されるいくつかの態様は、以下でより詳細に説明されるように、システムが単一ユニットテストモード、バッチテストモード、及び実運用モードでルールを適用すると、一貫性のある結果がもたらされることを保証しながら、従来のシステムと比較すると、ルールを規定及び適用するシステムの性能及び機能を改善する。
【００３０】
いくつかの従来のシステムとは対照的に、本明細書で説明される態様は、静的テスト環境を必要としない。これは、態様が、複雑なイベント処理と効果的に連携することができ、静的テスト環境に適合するようにルールを書き込む手段を開発者に変更させる可能性が低いので、有利とすることができる。
【００３１】
本発明の他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００３２】
【図１】ルールを規定しデータに適用するためのシステムのブロック図である。
【図２】ルールを規定しデータに適用するためのユーザインターフェースである。
【図３】データソースに対するユーザインターフェースの要素の関連付けを示すブロック図である。
【図４】ルールのバッチ適用における第１のステップの図である。
【図５】ルールのバッチ適用における第２のステップの図である。
【図６】ルールのバッチ適用における第３のステップの図である。
【図７】ルールの単一ユニット適用における第３のステップの図である。
【図８】ルールの単一ユニット適用における第１のステップの図である。
【図９】ルールの単一ユニット適用における第２のステップの図である。
【図１０】例示的な複合イベント処理ルーチンの状態図である。
【図１１】複合イベント処理のためのシステムを構成するためのユーザインターフェースである。
【発明を実施するための形態】
【００３３】
１  概要
図１は、開発者１１０がデータの１又は２以上のソースからのデータ（例えば、データベースレコード）に対する適用のためのデータ処理ルールを規定することを可能にするデータ処理システム１００の一例を示す。開発者１１０によって規定されたデータ処理ルールが実運用環境へとリリースされる前に正しく機能することが重要であるので、システム１００は、開発者１１０がデータ処理ルールをリリースする前にテストデータに対してデータ処理ルールの機能をテストすることを可能にするように構成される。いくつかの例では、システム１００は、開発者１１０が単一ユニットテストモード又はバッチテストモードのどちらかでデータ処理ルールの機能をテストすることを可能にする。単一ユニットテストモードでは、開発者１１０によって規定されるデータ処理ルールは、一度に１つのテストデータユニットに適用される。バッチテストモードでは、開発者１１０によって規定されるデータ処理ルールは、一度に複数のテストデータユニットに適用される。
【００３４】
システム１００は、システム１００にデータを供給するためのデータソース１０２と、データ処理ルールを規定するためのユーザインターフェース１１２（例えば、ディスプレイスクリーン上のグラフィカルビュー）と、データソース１０２によって供給されたデータにデータ処理ルールを適用するための実行(execution)モジュール１０４とを含む。
【００３５】
１．１  データソース
一般的に、データソース１０２は、記憶デバイス又はオンラインデータストリームへの
接続などのデータの１又は２以上のソースを含み、その各々は、さまざまなフォーマット（例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット）のいずれかでデータを記憶又は提供し得る。図１の例示的なシステム１００では、データソース１０２は、テストデータセット１１４と、クレジットカード残高データセット１１６と、最近の購入数アーカイブ１１８とを含む。データソース１０２に含まれる上記で説明されたデータソースのセットは、データソース１０２に含まれ得るデータソースのセットの一例にすぎないことに留意されたい。実際、システム１００の特定の適用例に応じて、異なるタイプのデータコンテンツを有する多数の異なるタイプのデータソースは、データソース１０２に含まれ得る。
【００３６】
データソース１０２に含まれるデータセットのうちの少なくともいくつかは、いくつかのレコード（例えば、所定のレコード構造に従ってフォーマットされたレコード、又はデータベーステーブル内の行）を含む。いくつかのレコードの各要素は、場合によってはヌル値又はエンプティ値を含む、いくつかのフィールド（例えば、レコード構造内の定義された属性、又はデータベーステーブル内の列）（例えば、「名」、「姓」、「電子メールアドレス」など）のための値を含むことができる。
【００３７】
いくつかの例では、データソース１０２に含まれるデータのソースのうちの１つは、データの主要ソースとして指定され、データソース１０２に含まれるデータの他のソースは、データの主要ソースに関連する、データの補助データソースとして指定される。極めて一般的に、データ処理ルールは、主要データソース内のレコードの所定のセットの各レコードの少なくともいくつかのフィールドに適用される。主要データソースのレコードに対するデータ処理ルールの適用中に、補助データソースは、主要データソースからのレコードに関連する他の値又は他のレコードすら取得するためにアクセスされ、データ処理ルールによって必要とされる。例えば、主要データセットの各レコードは、補助データソースからの関連データにアクセスするために使用されるキー（例えば、アカウント番号）を含み得る。主要データソース及び補助データソースからのデータは、以下でより詳細に説明されるように、「テストデータユニット」と呼ばれるユニットとしてテストするために収集可能である。図１の例示的なシステムでは、主要データソースはテストデータセット１１４であり、データソース１０２に含まれる補助データソースは、クレジットカード残高データセット１１６、及びいくつかの最近の購入アーカイブファイル１１８である。
【００３８】
以下でより詳細に説明されるように、システム１００は、補助データソースの静的シミュレーションとして、開発及びテストが始まる前に固定テスト値を決定及び記憶することを要求する代わりに、データ処理ルールの開発及びテスト中に補助データソースに動的にアクセスすることを可能にするように構成される。
【００３９】
１．２  ユーザインターフェース
以下で図２に関してより詳細に説明されるユーザインターフェース１１２は、開発者１１０が、テストデータユニットを処理するために使用されるデータ処理ルールのセットを規定することを可能にする。ユーザインターフェース１１２の出力は、１又は２以上のデータ処理ルールの規定である。ユーザインターフェース１１２によって生じさせられる１又は２以上のデータ処理ルールの規定は、実行環境１０４に提供される。
【００４０】
１．３  実行環境
実行環境１０４は、ユーザインターフェース（ＵＩ，user interface）モジュール１０６と、処理モジュール１０８と、パラメータ１２０のセットとを含む。処理モジュール１０８は、状態メモリ１２２を含む。いくつかの例では、パラメータ１２０のセット及び状態メモリ１２２は、データ処理ルールの適用中に動的にアクセスできる追加の補助データ
ソースとして働く。
【００４１】
ユーザインターフェース１１２からの１又は２以上のデータ処理ルールの規定はＵＩモジュール１０６に提供され、ＵＩモジュール１０６は、指定されたデータ処理ルールを、処理モジュール１０８によって使用可能な形態へと変換する（例えば、コンパイル又は解釈実行する）。処理モジュール１０８は、使用可能な形態のデータ処理ルール、パラメータ１２０のセット、及びデータユニットをデータソース１０２から入力として受け取り、データ処理ルール及びパラメータ１２０のセットに従って、データソース１０２からのデータユニットを処理する。いくつかの例では、状態メモリ１２２は、以下でより詳細に説明されるように、データソース１０２からのデータを処理するとき、状態を１つのテストデータユニットから次のテストデータユニットまで保持する。データソース１０２からのデータを処理した結果は、ＵＩモジュール１０６に戻され、次いで、ユーザインターフェース１１２に戻され、そこで、開発者１１０に提示される。
【００４２】
実行環境１０４は、例えば、ＵＮＩＸオペレーティングシステムのあるバージョンなどの適切なオペレーティングシステムの制御下で、１又は２以上の汎用コンピュータ上でホスティングされ得る。例えば、実行環境１０４は、ローカル（例えば、対称型マルチプロセッシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）、又はローカルで分散される（例えば、クラスタ若しくは超並列処理（ＭＰＰ，massively parallel processing）システムとして結合された複数のプロセッサ）、
又はリモート、又はリモートで分散される（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／又はワイドエリアネットワーク（ＷＡＮ，wide-area network）を介して結合された複数のプロセッサ）、又はそれらの任意の組み合わせ、のい
ずれかで、複数の中央処理装置（ＣＰＵ，central processing unit）又はプロセッサコ
アを使用するコンピュータシステムの構成を含む複数ノード並列コンピューティング環境を含むことができる。
【００４３】
データソース１０２を提供する記憶デバイスは、実行環境１０４のローカルにあってよく、例えば、実行環境１０４をホスティングするコンピュータに接続された記憶媒体（例えば、ハードドライブ）上に記憶されてよく、又は実行環境１０４のリモートにあってよく、例えば、リモート接続（例えば、クラウドコンピューティングインフラストラクチャによって提供される）を介して、実行環境１０４をホスティングするコンピュータと通信するリモートシステム（例えば、メインフレーム）上でホスティングされてよい。
【００４４】
２  例示的なユーザインターフェース
図２を参照すると、ユーザインターフェース１１２の一例は、開発者１１０がデータ処理ルールを規定及びテストすることを可能にするように構成される。ユーザインターフェース１１２は、ＵＩモジュール１０６によって（例えば、コンピュータモニタ上に）レンダリングされ、２次元グリッド２２４と、データユニット番号制御部２２６と、単一ユニットテスト制御部２２８と、バッチテスト制御部２３０とを含む。非常に一般的に、開発者１１０は、２次元グリッド２２４を使用してデータ処理ルールを規定することができ、次いで、単一ユニットテスト制御部２２８を使用する単一テストデータユニット（データユニット番号制御部２２６によって規定される）又はバッチテスト制御部２３０を使用するテストデータユニットのセット全体のどちらかの上で、データ処理ルールをテストすることができる。あるいは、いくつかの実装形態では、開発者１１０が、データユニット番号制御部２２６によって規定されるデータユニットを変更した後、ＵＩモジュール１０６は、開発者１１０が明示的なコマンドを入力しなくても、その選択に応答して、選択されたテストデータユニット上でのデータ処理ルールのテストを自動的に開始する。
【００４５】
２次元グリッド２２４は、いくつかの列２３２と、いくつかの行２３４とを含む。列２
３２は、２つの列タイプ、すなわち、入力列及び出力列に分けられる。図２の例では、２次元グリッド２２４は、５つの入力列、すなわち、「トランザクション量」列と、「クレジットカード残高」列と、「最近の購入数」列と、「最近のアラート数」列と、「リスクレベル」列とを含む。非常に一般的に、各入力列は、主要入力データセット１１４からのフィールドと関連付けられてもよいし、補助データソース１０２からのフィールドと関連付けられてもよく、そのフィールドから、フィールド値が、（例えば、未加工の値として、又は式の一部として使用するために）取得され得る。いくつかの例では、入力列と関連付けられたフィールドのための値の各セットは、「テストデータユニット」と呼ばれる。いくつかの例では、入力列は、一時変数、定数、又は他の自由な形態の入力値などの、フィールドとは別のソースからの値と関連付け可能である。
【００４６】
図２の例では、２次元グリッド２２４は、単一の出力列、すなわち、アラートを含む。いくつかの例では、アラート出力列は、その出力の値に基づいて、イベント（例えば、テキストメッセージを送信する）をトリガする。
【００４７】
２次元グリッド２２４の行２３４と入力列の共通部分にあるセル２３６のうちの少なくともいくつかは、制約を含む。いくつかの例では、制約のうちの少なくともいくつかは、データソース１０２からの所与のデータユニットのためのフィールドの値と比較値（例えば、ドル量）との比較（例えば、よりも大きい、よりも小さい、又は等しい）を表す。一緒に、２次元グリッド２２４の所与の行のセル内の制約がルールケースを定義し、各出力値は、ルールケースが満たされた場合のルールの出力を定義する。一般的に、満たされるルールケースの場合、ルールケースのための制約のすべてが満たされなければならない。
【００４８】
図２の例では、第１の行は、以下のように、第１のルールケース及び第１の出力値を定義する。
「トランザクション量」入力データの値が＄１０，０００よりも大きく、かつ
「クレジットカード残高」入力データの値が＄５，０００よりも大きく、かつ
「最近の購入数」入力データの値が３よりも小さく、かつ
「最近のアラート数」入力データの値が１よりも小さく、かつ
「リスクレベル」が「通常」に等しい場合、
「アラート」ステータス出力は、「はい」という値に割り当てられる。
同様に、第２の行は、以下のように、第２のルールケース及び第２の出力値を定義する。
「トランザクション量」入力データの値が＄５，０００よりも大きく、かつ
「クレジットカード残高」入力データの値が＄５，０００よりも大きく、かつ
「最近の購入数」入力データの値が３よりも小さく、かつ
「最近のアラート数」入力データの値が１よりも小さく、かつ
「リスクレベル」が「高い」に等しい場合、
「アラート」ステータス出力は、「はい」という値に割り当てられる。
最後に、第３の行は、以下のように、第３のルールケース及び第３の出力値を定義する。
「トランザクション量」入力データの値が＄５，０００よりも小さい場合、
「アラート」ステータス出力は、「いいえ」という値に割り当てられる。
【００４９】
他の任意の行は、下向きの矢印によって示される「いいえ」というデフォルト出力値を有するデフォルトルールケースを表し、これは、矢印の上にあるセル値が、矢印を含むボックス内のすべてのセルに対して繰り返されることを（入力列と出力列の両方に関して）示す。
【００５０】
３  データ処理ルールの適用
上記で言及されたように、データソース１０２内のデータのソースからの１又は２以上のデータユニットにデータ処理ルールを適用するために、ユーザインターフェース１１２
は、データ処理ルールの規定をＵＩモジュール１０６に提供する。ＵＩモジュール１０６は、データ処理ルールの規定を、（例えば、コンパイル、解釈実行、又は何らかの他の変換を介して）処理モジュール１０８によって使用可能な形態へと処理する。次いで、データ処理ルールの使用可能な形態は、１又は２以上のデータユニットに入力を提供するために、１又は２以上のレコード又はデータソース１０２からの他の値と共に、処理モジュール１０８に提供される。処理モジュール１０８は、１又は２以上のデータユニットにデータ処理ルールを適用し、１又は２以上の出力値を返す。
【００５１】
一般的に、２次元グリッド２２４の行２３４において定義されたルールケースは、より小さい行番号（例えば、第１の行）を有するルールケースが、より大きい行番号（例えば、第２の行）を有するルールケースよりも高い優先順位を有するように、優先順位によって順序付けられる。２次元グリッド２２４の行２３４に関連付けられた優先順位は、処理モジュール１０８がルールを適用するとき、考慮される。したがって、第１の行において定義されたルールケースが最初にテストされる。第１の行において定義されたルールケースが満たされた（トリガされる、と呼ばれることもある）場合、第１の行において定義された出力値が返され、より低い優先順位を有する行において定義されたルールケースをテストすることなくルールの適用が終了する。第１の行において定義されたルールケースが満たされない場合、処理モジュール１０８は、第２の行において定義されたルールケースをテストする。第２の行において定義されたルールケースが満たされた場合、第２の行において定義された出力値が返され、より低い優先順位を有する行において定義されたルールケースをテストすることなくルールの適用が終了する。処理モジュール１０８は、２次元グリッド２２４の優先順位が最も低い行において定義されたルールケースがテストされ、２次元グリッド２２４の優先順位が最も低い行において定義されたデフォルト出力値が返されるまで、このプロセスを繰り返す。
【００５２】
４  テスト結果の提示
いくつかの例では、処理モジュール１０８によって返された１又は２以上の出力値がＵＩモジュール１０６に提供され、ＵＩモジュール１０６は、開発者１１０への提示のために、１又は２以上の出力値をユーザインターフェース１１２に提供する。次いで、開発者１１０は、データ処理ルールを適用した結果（例えば、１又は２以上の出力値）をユーザインターフェース１１２内で見て、データ処理ルールが所望の機能に合致するかどうかを決定できる。必要な場合、開発者１１０は、ユーザインターフェース１１２を介して使用して、データ処理ルールに変更を加えてよい。対話型フィードバックのためのこの機能は、本明細書で説明される、単一ユニットテストモード、バッチテストモード、及び実運用モードで一貫性のある結果を取得するための手法によって容易にされる。
【００５３】
５  テスト間データユニット依存性
上記で述べられたように、いくつかの例では、ユーザインターフェース１１２の２次元グリッド２２４の列に関連付けられたフィールドは、さまざまな補助データソースから得ることが可能であり、いくつかは、データソース１０２に含まれ、いくつかは、実行環境１０４に含まれる若しくは別の方法でその内部からアクセス可能である。図３を参照すると、図２の例示的なデータ処理ルールのための２次元グリッド２２４が、２次元グリッド２２４の列２３２に関連付けられたフィールドが導出されるさまざまな例示的なデータソースと共に示されている。図３に示されるデータソースは説明の目的で含まれているにすぎず、通常は、ユーザインターフェース１１２を介して開発者１１０に表示されないことに留意されたい。
【００５４】
図３では、２次元グリッド２２４の第１の列に関連付けられた「トランザクション量」フィールドは、テストデータセット１１４内に出現するレコード内の対応するフィールドから導出され、２次元グリッド２２４の第２の列に関連付けられた「クレジットカード残
高」フィールドは、クレジットカード残高データセット１１６内に出現するレコード内の対応するフィールドから導出され、２次元グリッド２２４の第３の列に関連付けられた「最近の購入数」フィールドは、最近の購入アーカイブ１１８（例えば、米国特許第８，２２９，９０２号明細書でより詳細に説明されるインデックス付き圧縮フラットファイル（ＩＣＦＦ，indexed compressed flat file）などのアーカイブ）から導出され、２次元グリッド２２４の第４の列に関連付けられた「最近のアラート数」フィールドは、状態メモリ１２２に記憶された値から導出され、２次元グリッド２２４の第５の列に関連付けられた「リスクレベル」フィールドは、パラメータ１２０のセットからのパラメータ値から導出される。図３の例では、テストデータセット１１４が主要データソースであり、クレジットカード残高データセット１１６、最近の購入アーカイブ１１８、状態メモリ、及び外部パラメータ１２０はすべて補助データソースであることに留意されたい。また、テストデータセット１１４のレコードに関連する補助データにアクセスすることができるように、テストデータセット１１４のレコードからの情報（例えば、キー）が、補助データソースに供給されることに留意されたい。
【００５５】
図３に示されるように、いくつかの例では、特定の出力列のための出力値が、特定の入力列に関連付けられたデータソースを更新するために使用され得る。例えば、図３のアラート出力列３４０の出力値は、「最近のアラート数」という題の第４の入力列がその入力データを導出する状態メモリ１２２を更新するために使用される。すなわち、図３の２次元グリッド２２４によって規定されるルールを適用した結果が、「はい」というアラート値になるとき、状態メモリ１２２内の「最近のアラート数」フィールドが増分され、アラートが最近発行されたことを示す。ルール適用の出力を、データ処理ルールへの入力として使用されるデータソースに書き込むことによって、データユニット間の依存性が、さまざまなテストデータユニット間に確立され得る。
【００５６】
データユニット間の依存性を有するテストデータユニットの場合、第１のテストデータユニット４５０に対するデータ処理ルールの適用の結果は、１又は２以上の他の異なるテストデータユニットにデータ処理ルールを適用した結果に依存する。
【００５７】
６  バッチテスト
バッチテストモードでテストデータユニットにデータ処理ルールを適用するとき、データ処理ルールは、実運用環境内で展開され実運用モードで施行(run)されるデータ処理シ
ステムにおいて行われるように、あらかじめ定義された（通常、主要データソースから導出されたテストデータユニット内の値に関連付けられた）順序でテストデータユニットに適用される。テストデータユニットに対する図２のデータ処理ルールの適用ごとに、アラート出力値が生じさせられ、状態メモリ１２２は、このアラート出力値に基づいて更新される。バッチテストは、（テストデータユニットのあらかじめ定義されたサブセットの）第１のテストデータユニットから始まるすべてのテストデータユニットを処理するので、所与のテストデータユニットに関して、以前のテストデータユニットのすべてが、適用されたデータ処理ルールを持っていた。したがって、状態メモリ１２２は、以前のテストデータユニットに対するデータ処理ルールの適用によって生じさせられるアラート出力値を反映する。
【００５８】
図４〜６は、顧客アカウントキー値によって識別される所与の顧客（この例では、「顧客Ａ」、「顧客Ｂ」などとラベルされる）に対するテストデータユニットのバッチに対するバッチテストモードにおける図２のデータ処理ルールの例示的な適用を示す。この例では、各テストデータユニットは、主要テストデータセット１１４から導出された所与の顧客に関するトランザクション量と、補助データソース１１６、１１８、１２０、１２２から導出された、顧客のクレジットカード残高、顧客に関する最近の購入数、顧客に対して発行された最近のアラート数、及び顧客に関するリスクレベルパラメータを含む、いくつ
かの補助値とを含む。最近のアラート数は、異なる顧客に関するメモリ１２２内の異なるそれぞれの状態変数に記憶される。異なる顧客に関するテストデータユニットは、テストされているテストデータユニットのバッチ内に入れられてよい。この例では、順序付けキー値１と２と１０とを有するテストデータユニットは顧客Ａに関するものであり、順序付けキー値３〜９を有するテストデータユニットは他の顧客に関するものであると仮定される。
【００５９】
図４を参照すると、顧客Ａに関する第１のテストデータユニット４５０（１という順序付けキー値を有する）は、＄１００という第１のトランザクション量４４１と、＄０というクレジットカード残高４４２と、０という最近の購入数の値４４４と、０という最近のアラート数の値４４６と、「高い」というリスクレベルパラメータ値４４８とを含む。図２で指定されたデータ処理ルールを適用するために、処理モジュール１０８は最初に、第１のテストデータユニット４５０にデータ処理ルールの第１のルールケースを適用する。第１のルールケースを満たすための１つの要件は、トランザクション量４４１が＄１０，０００よりも大きくなければならないということである。第１のテストデータユニット４５０に関するトランザクション量４４１が＄１００であるので、第１のルールケースは、第１のテストデータユニット４５０によって満たされない。次いで、処理モジュール１０８は、第１のテストデータユニット４５０にデータ処理ルールの第２のルールケースを適用する。第２のルールケースを満たすための１つの要件は、トランザクション量４４１が＄５，０００よりも大きくなければならないということである。第１のテストデータユニット４５０に関するトランザクション量４４１が＄１００であるので、第２のルールケースは、第１のテストデータユニット４５０によって満たされない。最後に、処理モジュール１０８は、第１のテストデータユニット４５０にデータ処理ルールの第３のルールケースを適用する。第３のルールケースを満たすための唯一の要件は、トランザクション量４４１が＄５，０００よりも小さくなければならないということである。第１のテストデータユニット４５０に関するトランザクション量４４１が＄１００であるので、第３のルールケースは満たされる。第３のルールケースは「いいえ」というアラート値に関連付けられているので、第１のテストデータユニット４５０へのデータ処理ルールの適用は、「いいえ」というアラート出力値という結果になる。「いいえ」というアラート出力値が出力されるので、最近のアラート数は状態メモリ１２２内で増分されず、０の状態を保つ。
【００６０】
一般的に、１又は２以上の他のプロセスは、テストデータセット１１４内の第１のトランザクションに基づいて、クレジットカード残高データセット１１６内の顧客Ａのクレジットカード残高の値４４２と、最近の購入数アーカイブ１１８内の顧客Ａの最近の購入数の値４４４を更新する。
【００６１】
図５を参照すると、顧客Ａに関する第２のテストデータユニット５５２（２という順序付けキー値を有する）は、＄５，１００という第２のトランザクション量５４１と、＄１００というクレジットカード残高５４２と、１という最近の購入数の値５４４と、０という最近のアラート数の値５４６と、「高い」というリスクレベルパラメータ値５４８とを含む。図２で指定されたデータ処理ルールを適用するために、処理モジュール１０８は最初に、第２のテストデータユニット５５２にデータ処理ルールの第１のルールケースを適用する。第１のルールケースを満たすための１つの要件は、トランザクション量５４１が＄１０，０００よりも大きくなければならないということである。第２のテストデータユニット５５２に関するトランザクション量５４１が＄５，１００であるので、第１のルールケースは、第２のテストデータユニット５５２によって満たされない。次いで、処理モジュール１０８は、第２のテストデータユニット５５２にデータ処理ルールの第２のルールケースを適用する。第２のテストデータユニット５５２において、トランザクション量５４１は＄５，０００よりも大きく、最近の購入数の値５４４は３よりも小さく、最近のアラート数の値５４６も１よりも小さく、リスクレベル値５４８が「高い」であるので、
第２のルールケースは満たされる。第２のルールケースは「はい」というアラート値に関連付けられているので、第２のテストデータユニット５５２へのデータ処理ルールの適用は、「はい」というアラート出力値が得られる結果になる。上記で説明されたように、データ処理ルールを適用すると、「はい」というアラート出力値が得られる結果になったので、「最近のアラート数」状態メモリ１２２は、アラートが最近発行されたことを示すために、１の値だけ増分される。
【００６２】
以前のデータユニットの処理が、合致する顧客アカウントキー値を有する、後のデータユニットに関する記憶された状態のみに影響を与えるので、順序付けキー値３〜９を有するテストデータユニットは、顧客Ａに関する最近のアラート数の値６４６を変更することなく、順序付けキー値２を有するテストデータユニットの後で順次処理されている。
【００６３】
図６を参照すると、顧客Ａに関する第３のテストデータユニット６５４（１０という順序付けキー値を有する）は、＄１１，０００という第３のトランザクション量６４１と、＄５，２００というクレジットカード残高６４２と、２という最近の購入数の値６４４と、１という最近のアラート数の値６４６と、「高い」というリスクレベルパラメータ値６４８とを含む。図２で指定されたデータ処理ルールを適用するために、処理モジュール１０８は最初に、第３のテストデータユニット６５４にデータ処理ルールの第１のルールケースを適用する。第１のルールケースを満たすための１つの要件は、最近のアラート数６４６が１よりも小さい数を持たなければならないということである。第３のテストデータユニット６５４に関する最近のアラート数の値６４６が１であるので、第１のルールケースは、第３のテストデータユニット６５４によって満たされない。次いで、処理モジュール１０８は、第３のテストデータユニット６５４にデータ処理ルールの第２のルールケースを適用する。第２のルールケースを満たすための１つの要件は、最近のアラート数６４６が１よりも小さい数を持たなければならないということである。第３のテストデータユニット６５４に関する最近のアラート数の値６４６が１であるので、第２のルールケースは、第３のテストデータユニット６５４によって満たされない。最後に、処理モジュール１０８は、第３のテストデータユニット６５４にデータ処理ルールの第３のルールケースを適用する。第３のルールケースを満たすための唯一の要件は、トランザクション量６４１が＄５，０００よりも小さくなければならないということである。第３のテストデータユニット６５４に関するトランザクション量６４１が＄１１，０００であるので、第３のルールケースは満たされない。ルールケースのいずれも満たされないとき、データ処理ルールは、「いいえ」というデフォルトアラート出力値を返す。
【００６４】
７  単一ユニットテスト
いくつかの例では、テストデータユニットにデータ処理ルールをバッチテストモードで適用するのではなく、開発者１１０は、テストデータセット１１４の中央からのレコードの選択されたキー値に対応する単一の選択されたテストデータユニットにデータ処理ルールを適用し得る。そのような場合、テストデータユニットの値が、所定の順序に従って選択されたデータユニットの前に出現する値又はデータユニットにデータ処理ルールを適用することから生じる状態を正確に反映しない場合、データ処理ルールの誤った出力が生じることがある。
【００６５】
そのような誤った出力を回避するために、処理モジュール１０８は、選択されたデータユニットの前に出現するテストデータユニットのサブセットを決定することによって、選択されたテストデータユニットを処理するように構成される。一般的に、テストデータユニットのサブセット内のテストデータユニットは、所定の順序（例えば、テストデータセット１１４内のレコードからの一意の主キーフィールドのソート順序、又はテストデータセット１１４内のレコードの記憶順序）に関連付けられる。いくつかの例では、テストデータユニットのサブセット内のテストデータユニットはすべて、共通識別子（例えば、顧
客アカウント番号フィールドなどの、テストデータセット１１４内のレコードからの非一意のキーフィールドの値）によって関係付けられる。選択されたテストデータユニットにデータ処理ルールを適用する前に、処理モジュールは、テストデータユニットのサブセットのうちのテストデータユニットを所定の順序で反復し、各テストデータユニットにデータ処理ルールを適用する。テストデータユニットに対するデータ処理ルールの少なくともいくつかの適用の場合、データ処理ルールの適用によって生じさせられる出力は、状態変数を更新するために使用される。
【００６６】
データ処理ルールが、テストデータユニットのサブセットのうちのテストデータユニットのすべてに適用された後、状態変数の更新された値が読み取られ、選択されたテストデータユニットに対するデータ処理ルールの適用において使用される。
【００６７】
データ処理ルールが、選択されたテストデータユニットの前に出現するすべてのテストデータユニットに適用されたことを保証することによって、バッチテストモード及び実運用モードで得られるであろう結果と矛盾しないことに関して、状態変数の値及びしたがってデータ処理ルールの出力が正確であることが保証される。
【００６８】
図２及び図７〜９を参照すると、単一ユニットテストモード処理の一例が示されている。図２では、開発者１１０が、データユニット番号制御部２２６を使用して１０の順序付けキー値を選択している。単一ユニットテスト制御部２２８を押すことによって、開発者１１０は、テストデータセット１１４の１０番目のレコードに関連付けられた選択されたテストデータユニットにデータ処理ルールを適用したいという要求を示す。図７を参照すると、テストデータユニットの「最近のアラート数」フィールド内の値が不正確であることにより、データ処理ルールの第２のルールケースが誤って満たされるので、それぞれのデータソースからの選択されたテストデータユニット７５４に対する２次元グリッド２２４の入力列２３２の各々に関するフィールドの値を読み取り、それらの値にデータ処理ルールを適用するだけでは、選択されたテストデータユニット７５４に関する「はい」という正しくないアラート出力値が得られるという結果になろう。
【００６９】
この例では、順序付けキー値１と２と１０とを有するテストデータユニットは顧客Ａに関するものであり、順序付けキー値３〜９を有するテストデータユニットは他の顧客に関するものであるとも仮定される。そのため、選択されたテストデータユニット７５４（順序付けキー値１０を有する）に関するアラート出力値は、第１のテストデータユニット（１という順序付けキー値を有する）及び第２のテストデータユニット（２という順序付けキー値を有する）にデータ処理ルールを適用した結果に依存し、第１のテストデータユニット及び第２のテストデータユニットはそれぞれ、テストデータセット１１４の第１のレコード及び第２のレコードに関連付けられる。第１のテストデータユニット及び第２のテストデータユニットはまだ、データ処理ルールが適用されていないことがある。この例では、第１のデータユニット及び第２のデータユニットにデータ処理ルールを適用しなければ、顧客Ａに関して状態メモリ１２２に記憶された「最近のアラート数」フィールドの値は（バッチテストモード及び実運用モードと矛盾しない意図された挙動に従って）不正確である。
【００７０】
図８及び図９を参照すると、選択されたテストデータユニット７５４に対するデータ処理ルールの適用の前に、状態メモリ１２２に記憶された「最近のアラート数」フィールドの値が正確であることを保証するために、システム１００は最初に、第１のテストデータユニット８５０（１という順序付けキー値を有する）及び第２のテストデータユニット９５２（２という順序付けキー値を有する）にデータ処理ルールを適用する。
【００７１】
図８を参照すると、第１のテストデータユニット８５０にデータ処理ルールを適用する
と、（図４の場合と同様に）「いいえ」というアラート出力値が得られる結果になる。「いいえ」というアラート出力値が出力されるので、最近のアラート数は状態メモリ１２２において増分されず、０のままである。図９を参照すると、第２のテストデータユニット９５２にデータ処理ルールを適用すると、（図５の場合と同様に）「はい」というアラート出力値が得られる結果になる。データ処理ルールを適用すると、「はい」というアラート出力値が得られる結果になったので、状態メモリ１２２内の「最近のアラート数」の値は、アラートが最近発行されたことを示すために、１の値だけ増分される。最後に、図７に戻ると、選択されたテストデータユニット７５４にデータ処理ルールを適用すると、状態メモリ１２２内の「最近のアラート数」の値が正確な値を含むので、（図６の場合と同様に）「いいえ」というデフォルトアラート出力値が返される結果になる。
【００７２】
８  複合イベント処理
いくつかのタイプのデータ処理システムは特に、本明細書で説明される、単一ユニットテストモード、バッチテストモード、及び実運用モードで一貫性のある結果を取得するための技法によって可能にされる動的テスト環境から利益を得ることがある。１つのそのようなタイプのデータ処理が、複合イベント処理である。例えば、図１の処理モジュール１０８は、複合イベント処理ルーチンを履行する(implement)ように構成可能である。非常
に一般的に、複合イベント処理システムは、複数のソースからのデータを結合して、イベント間の関係におけるパターンを識別することによって、イベントを処理する。いくつかの例では、複合イベント処理は、最近のイベント履歴を使用して、マーケティング機会又は脅威などの意味のあるイベントを識別し、識別された意味のあるイベントに可能な限り早く応答して、入力イベントを処理する。
【００７３】
図１０を参照すると、例示的な複合イベント処理ルーチンすなわちマーケティングキャンペーンのための状態図１０６０が示されている。このマーケティングキャンペーンは、キャッシュバックプログラムについて顧客に通知することによって、クレジットカードの使用を増加させることを意図したものである。例示的なマーケティングキャンペーンでは、現在の購入イベント並びに１又は２以上の過去の購入イベントの両方に基づいて、顧客にキャッシュバック奨励金が提供される。状態図１０６０は、状態遷移１０６４、１０６８、１０７２、１０７６、１０７８によって相互接続された、いくつかの状態１０６２、１０６６、１０７０、１０７４、１０８０を含む。代表的な顧客に関して購入イベントが受信されると、顧客の現在の状態及び受信された購入イベントの性質に基づいて、顧客の状態が更新される。
【００７４】
特に、例示的なマーケティングキャンペーンの開始時に、顧客がマーケティングキャンペーンに適格であると考えられる場合、顧客は、（例えば、「適格」状態１０６２の標識を図１の状態メモリ１２２内の状態変数に書き込むことによって）「適格」状態１０６２に置かれる。
【００７５】
第１の購入イベント１０６４が顧客に関して受信されると、顧客の現在の状態が（例えば、図１の状態メモリ１２２内の状態変数から）読み取られる。顧客は現在、「適格」状態１０６２にあり、第１の購入イベント１０６４を受信したので、顧客がマーケティングキャンペーンに適格であることを顧客に知らせるために、メッセージ（図示せず）が顧客に送信され、マーケティングキャンペーンは、旅行関連購入及び食品関連購入に関するキャッシュバック販売促進を含む。次いで、顧客の状態が「通知された」状態１０６６に遷移し、顧客がマーケティングキャンペーンについて通知されたことを示す。
【００７６】
「通知された」状態１０６６にある間、旅行関連購入イベント１０６８が受信された場合、顧客が旅行関連販売促進を受け、食品関連販売促進に適格であることを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「第１の旅行」状態１
０７０に遷移し、顧客が旅行関連販売促進を受けたことを示す。
【００７７】
あるいは、「通知された」状態１０６６にある間、食品関連購入イベント１０７２が受信された場合、顧客が食品関連販売促進を受け、旅行関連販売促進に適格であることを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「第１の食品」状態１０７４に遷移し、顧客が食品関連販売促進を受けたことを示す。
【００７８】
「第１の旅行」状態１０７０にある間、食品関連購入イベント１０７６が受信された場合、顧客が旅行関連販売促進と食品関連販売促進の両方を受けたことを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「完了」状態１０８０に遷移し、顧客が販売促進を完了したことを示す。
【００７９】
同様に、「第１の食品」状態１０７４にある間、旅行関連購入イベント１０７８が受信された場合、顧客が旅行関連販売促進と食品関連販売促進の両方を受けたことを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「完了」状態１０８０に遷移し、顧客が販売促進を完了したことを示す。
【００８０】
８．１  複合イベント処理構成ユーザインターフェース
図１１を参照すると、例示的なユーザインターフェース１１８２によって、ユーザが、図１０の状態図１０６０によって規定されるルーチンなどの複合イベント処理ルーチンを履行するようにシステム（例えば、図１の処理モジュール１０８）を構成することが可能になる。非常に一般的に、ユーザインターフェースは、ユーザが、複合イベント処理ルーチンのための状態図をテストの順序付けられたセットとして表現することを可能にし、各テストは、テストが満たされた場合に発生する対応する出力を有する。
【００８１】
いくつかの例では、ユーザインターフェース１１８２は、いくつかの列１１８６といくつかの行１１８４とを含むセルの２次元グリッド１１８３として履行される。セルは、各行１１８４と各列１１８５の共通部分に存在し、ユーザ入力（例えば、パラメータ値）を受け入れるように構成される。
【００８２】
列１１８６は、２つの列タイプ、すなわち、「トリガ」列１１８８及び「出力」列１１９０に分けられる。図１１のユーザインターフェース１１８２には、３つのトリガ列１１８８（すなわち、現在の状態、旅行関連、及び分類）及び２つの出力列１１９０（すなわち、新しい状態及びメッセージ）がある。
【００８３】
まとめると、トリガ列１１８８に関連付けられた、所与の行内のセルは、テスト（例えば、ブールテスト）を定義するために使用される。例えば、２次元グリッド１１８３の第１の行１１８５では、「現在の状態」トリガ列に関連付けられたセルは「適格」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第１の行１１８５におけるトリガ列１１８８の値を考えると、顧客の現在の状態（例えば、状態変数記憶から読み取られる）が「適格」である場合、新しい購入イベントが旅行関連購入イベント又は食品関連購入イベントであるか否かにかかわらず、システムによって受信された顧客に関する新しい購入イベントが、第１の行１１８５によって定義されたテストを満たす。
【００８４】
出力列１１８８に関連付けられた所与の行内の各セルは、所与の行に対するテストが満たされた場合に発生する出力アクションを定義する。例えば、２次元グリッド１１８３の第１の行１１８５では、「新しい状態」出力列に関連付けられたセルは「通知された」という値を含み、「メッセージ」出力列に関連付けられたセルは適格性通知メッセージ１１
９２を含む。第１の行１１８５における出力列１１９０の値を考えると、第１の行１１８５によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「通知された」に更新され（例えば、状態変数記憶に書き込まれる）、適格性通知メッセージ１１９２が顧客に送信される。
【００８５】
２次元グリッド１１８３の第２の行１１８７では、「現在の状態」トリガ列に関連付けられたセルは「通知された」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「旅行関連である」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第２の行１１８７におけるトリガ列１１８８の値を考えると、顧客の現在の状態が「通知された」であり、新しい購入イベントが旅行関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第２の行１１８７によって定義されるテストを満たす。
【００８６】
２次元グリッド１１８３の第２の行１１８７では、「新しい状態」出力列に関連付けられたセルは「第１の旅行」という値を含み、「メッセージ」出力列に関連付けられたセルは旅行購入通知メッセージ１１９４を含む。第２の行１１８７における出力列１１９０の値を考えると、第２の行１１８５によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「第１の旅行」に更新され、旅行購入通知メッセージ１１９４が顧客に送信される。
【００８７】
２次元グリッド１１８３の第３の行１１８９では、「現在の状態」トリガ列に関連付けられたセルは「通知された」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「食品及び医薬品」という入力値を含む。第３の行１１８９におけるトリガ列１１８８の値を考えると、顧客の現在の状態が「通知された」であり、新しい購入イベントが食品関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第３の行１１８９によって定義されるテストを満たす。
【００８８】
２次元グリッド１１８３の第３の行１１８９では、「新しい状態」出力列に関連付けられたセルは「第１の食品」という値を含み、「メッセージ」出力列に関連付けられたセルは食品購入通知メッセージ１１９６を含む。第３の行１１８９における出力列１１９０の値を考えると、第３の行１１８９によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「第１の食品」に更新され、食品購入通知メッセージ１１９６が顧客に送信される。
【００８９】
２次元グリッド１１８３の第４の行１１９１では、「現在の状態」トリガ列に関連付けられたセルは「第１の旅行」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「食品及び医薬品」という入力値を含む。第４の行１１９１におけるトリガ列１１８８の値を考えると、顧客の現在の状態が「第１の旅行」であり、新しい購入イベントが食品関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第４の行１１９１によって定義されるテストを満たす。
【００９０】
２次元グリッド１１８３の第４の行１１９１では、「新しい状態」出力列に関連付けられたセルは「完了」という値を含み、「メッセージ」出力列に関連付けられたセルはキャンペーン完了通知メッセージ１１９８を含む。第４の行１１９１における出力列１１９０の値を考えると、第４の行１１９１によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「完了」に更新され、キャンペーン完了通知メッセージ１１９８が顧客に送信される。
【００９１】
２次元グリッド１１８３の第５の行１１９３では、「現在の状態」トリガ列に関連付けられたセルは「第１の食品」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「旅行関連である」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第５の行１１９３におけるトリガ列１１８８の値を考えると、顧客の現在の状態が「第１の食品」であり、新しい購入イベントが旅行関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第５の行１１９３によって定義されるテストを満たす。
【００９２】
２次元グリッド１１８３の第５の行１１９３では、「新しい状態」出力列に関連付けられたセルは「完了」という値を含み、「メッセージ」出力列に関連付けられたセルはキャンペーン完了通知メッセージ１１９８を含む。第５の行１１９３における出力列１１９０の値を考えると、第５の行１１９３によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「完了」に更新され、キャンペーン完了通知メッセージ１１９８が顧客に送信される。
【００９３】
最後に、２次元グリッド１１８３の第６の行１１９５では、「現在の状態」トリガ列に関連付けられたセルは「任意」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルも「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルも「任意」という入力値を含む。第６の行１１９５におけるトリガ列１１８８の値を考えると、システムによって受信された顧客に関する任意の新しい購入イベントが、第６の行１１９５によって定義されるテストを満たす。
【００９４】
２次元グリッド１１８３の第６の行１１９５では、「新しい状態」出力列に関連付けられたセルは「現在の状態」という値を含み、「メッセージ」出力列に関連付けられたセルはヌルメッセージ１１９９を含む。第６の行１１９５における出力列１１９０の値を考えると、第６の行１１９５によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態はその「現在の状態」に維持され、通知メッセージは顧客に送信されない。
【００９５】
新しい購入イベントが受信されると、２次元グリッド１１８３の行１１８４によって定義されたテストが、テストが新しい購入イベントによって満たされるまで、新しい購入イベントに順序正しく適用される。すなわち、第１の行１１８５によって定義されるテストが、新しい購入イベントに最初に適用される。第１の行１１８５によって定義されるテストが新しい購入イベントによって満たされない場合、第２の行１１８７によって定義されるテストが新しい購入イベントに適用される。第２の行１１８７によって定義されるテストが新しい購入イベントによって満たされない場合、第３の行１１８９によって定義されるテストが新しい購入イベントに適用され、以下同様である。最終的に、他の行によって定義されたテストのいずれも新しい購入イベントによって満たされない場合、デフォルトの第６の（最終）行１１９５が新しい購入イベントに適用され、新しい購入イベントによって満たされる。２次元グリッド１１８３の行１１８４によって定義されたテストを順序正しく適用することによって、図１０の状態図１０６０の機能が達成される。
【００９６】
９  代替形態
いくつかの例では、ユーザインターフェースの性能が、所与の読み取り動作のためにデータソースに対する読み取り接続を開き、次いで、その後の読み取り動作のために接続をキャッシュする（例えば、データベースハンドルを保存して、接続を生かしておく）ことによって改善され得る。そうすることによって、接続セットアップ／停止時間が減少し、所与の時間期間内のデータソースに対する接続の数の制限の使い果たしが防止可能である。
【００９７】
いくつかの例では、データソース（又はテストデータユニット全体）から読み取られたレコードがキャッシュに記憶可能である。
【００９８】
いくつかの例では、レコード（又はテストデータユニット）の値が要求されると、キャッシュが最初に調べられる。レコード（又はテストデータユニット）がキャッシュ内に存在しない場合、キャッシュされた接続が、要求されたレコードを取り出すために調べられる。要求されたレコードを取り出すために接続がキャッシュされていない場合、要求されたレコードを取り出すために、新しい接続が開かれる。
【００９９】
いくつかの例では、どこでレコード又はテストデータユニットを取り出すべきかは、レコード又はテストデータユニットが前回取り出されてからの時間に基づく。レコード又はテストデータユニットが最近取り出された場合、キャッシュされた値は有効であると判断され、キャッシュが調べられる。レコード又はテストデータユニットが前回取り出されてから、より長い量の時間が経過した場合、キャッシュされた値は無効であると考えられ、キャッシュされた接続が使用される。レコード又はテストデータユニットが前回取り出されてから、はるかに長い量の時間が経過した場合、キャッシュされた値及びキャッシュされた接続は無効であると考えられ、レコード又はテストデータユニットを取り出すために、新しい接続が開かれる。
【０１００】
データベースが、上記で説明された手法から利益を得ることができる１つの一般的なタイプのデータソースであるが、多くの他のタイプのデータソース（例えば、アーカイブファイル、２次データセットなど）も、この手法から利益を得ることができることに留意されたい。
【０１０１】
いくつかの例では、正確な状態情報を含むテストデータユニットの値が、後で使用するためにキャッシュされる。そのような場合、選択されたテストデータユニットの前のすべてのテストデータユニットにデータ処理ルールを単一レコードテストモードで適用しなければならないというよりむしろ、選択されたテストデータユニットと最も近い以前のキャッシュされたテストデータユニットとの間のそれらのレコードのみにデータ処理ルールを適用させる必要がある。
【０１０２】
いくつかの例では、ユーザインターフェースによって、開発者は、データベース接続がいつキャッシュされるかを規定することが可能になる。
【０１０３】
いくつかの例では、状態変数値は、除去される前に、所定の量の時間にわたって状態変数メモリのみに記憶される。このようにして、状態変数は本質的に、スライディングウィンドウを状態変数に適用させ、ウィンドウ処理された集約（windowed aggregation）などの動作を可能にする。
【０１０４】
いくつかの例では、入力列がパラメータアクセスを要求するとき、パラメータの値がキャッシュ可能である。例えば、実運用環境では、パラメータは、コマンドライン入力又はパラメータセットファイルから読み取られ、必要であれば、ルールベースの適用が始められる環境（すなわち、実運用環境）の文脈で解決され得る。単一ユニットテストモード（又はバッチテストモード）の場合、値は、現在の環境を使用する評価されるパラメータ又は代わりに仮定されるテスト値のどちらかとして、実運用環境が提供するものに近いものとして、（例えば、ユーザ設定可能パラメータに基づいて）選択されていてもよい。
【０１０５】
１０  実装形態
上記で説明されるルール規定及び適用手法は、例えば、適切なソフトウェア命令を実行するプログラム可能なコンピューティングシステムを使用して履行可能であり、又は、フ
ィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）な
どの適切なハードウェア内で、若しくは何らかのハイブリッド形態で、履行可能である。例えば、プログラムされた手法では、ソフトウェアは、各々が少なくとも１つのプロセッサと、少なくとも１つのデータ記憶システム（揮発性及び／又は不揮発性のメモリ及び／又は記憶素子を含む）と、（少なくとも１つの入力デバイス又はポートを使用して入力を受信するための、及び少なくとも１つの出力デバイス又はポートを使用して出力を提供するための）少なくとも１つのユーザインターフェースとを含む１又は２以上のプログラムされた又はプログラム可能コンピューティングシステム（分散、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャであってよい）上で実行される１又は２以上のコンピュータプログラム内にプロシージャを含み得る。ソフトウェアは、例えばデータフローグラフの設計、構成、及び実行に関連するサービスを提供する大規模プログラムの１又は２以上のモジュールを含み得る。プログラムのモジュール（例えば、データフローグラフの要素）は、データ構造又はデータリポジトリ内に記憶されたデータモデルに適合する他の編成されたデータとして履行可能である。
【０１０６】
ソフトウェアは、揮発性記憶媒体若しくは不揮発性記憶媒体、又は他の任意の非一時的な媒体で具体化される、ある時間の期間（例えば、ダイナミックＲＡＭなどのダイナミックメモリデバイスのリフレッシュ期間の間の時間）にわたって媒体の物理的性質（例えば、表面のくぼみ及び平面部、磁区、又は電荷）を使用するなどの、非一時的な形態で記憶されてよい。命令をロードするための準備において、ソフトウェアは、ＣＤ−ＲＯＭ又は他のコンピュータ可読媒体（例えば、汎用コンピューティングシステム又は汎用デバイス又は特殊目的コンピューティングシステム又は特殊目的デバイスによって可読の）などの有形の非一時的な媒体上で提供されてもよいし、ネットワークの通信媒体を介して、ソフトウェアが実行されるコンピューティングシステムの有形の非一時的な媒体に配信されてもよい（例えば、伝播信号において符号化されてもよい）。処理のうちのいくつか又はすべては、特殊目的コンピュータ上で、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの特殊目的ハードウェア若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）を使用して、実施(perform)されてよい。処理は、ソフトウェアによって規定される計算の異なる部分が異なるコンピューティング要素によって実施される分散式で履行されてよい。そのような各コンピュータプログラムは、好ましくは、本明細書で説明される処理を実施するために記憶デバイス媒体がコンピュータによって読み取られるとコンピュータを構成及び動作させるために、汎用プログラム可能コンピュータ又は特殊目的プログラム可能コンピュータによってアクセス可能な記憶デバイスのコンピュータ可読記憶媒体（例えば、ソリッドステートメモリ若しくはソリッドステート媒体、又は磁気媒体若しくは光学式媒体）上に記憶される又はそれにダウンロードされる。本発明のシステムはまた、コンピュータプログラムと共に構成される有形の非一時的な媒体として履行されると考えられてよく、そのように構成された媒体は、コンピュータに、本明細書で説明される処理ステップのうちの１又は２以上を実施するために特定のあらかじめ定義されたように動作させる。
【０１０７】
本発明のいくつかの実施形態について説明してきた。とはいえ、前述の説明は、本発明の範囲を制限するのではなく、本発明の範囲を示すことを意図したものであり、本発明の範囲は以下の特許請求の範囲によって定義されることを理解されたい。したがって、他の実施形態も、以下の特許請求の範囲に含まれる。例えば、本発明の範囲から逸脱することなく、さまざまな修正が加えられてよい。さらに、上記で説明されたステップのうちのいくつかは、順序とは無関係であってよく、したがって、説明された順序とは異なる順序で実施可能である。
【図１】
0006379290.tif 000002
【図２】
0006379290.tif 000003
【図３】
0006379290.tif 000004
【図４】
0006379290.tif 000005
【図５】
0006379290.tif 000006
【図６】
0006379290.tif 000007
【図７】
0006379290.tif 000008
【図８】
0006379290.tif 000009
【図９】
0006379290.tif 000010
【図１０】
0006379290.tif 000011
【図１１】
0006379290.tif 000012