(58)【調査した分野】(Int.Cl.,DB名)
処理するステップが、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において1又は2以上のデータソースからのデータに前記ルールを適用する第1のモードに関連付けられる、請求項1に記載の方法。
テスト環境内で1又は2以上のデータソースからのデータにルールを適用する第1のモードが、順序付けられた複数のデータユニットのデータユニットごとに、実運用環境において1又は2以上のデータソースからのデータに前記ルールを適用する第2のモードからもたらされる結果と矛盾しない結果をもたらすように構成される、請求項2に記載の方法。
テスト環境内で1又は2以上のデータソースからのデータにルールを適用する第1のモードが、順序付けられた複数のデータユニットのデータユニットごとに、前記順序付けられた複数のデータユニットのすべてがバッチでテストされる前記テスト環境において1又は2以上のデータソースからのデータに前記ルールを適用する第3のモードからもたらされる結果と矛盾しない結果をもたらすように構成される、請求項3に記載の方法。
複数のデータユニットが、前記複数のデータユニット内の特定のデータユニットに関連するデータユニットの第1の出現である関連データユニットを含み、データユニットの順序付けられたサブセットの最初のデータユニットが前記関連データユニット以外のデータユニットである、請求項1に記載の方法。
順序付けられた複数のデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶するステップをさらに含む、請求項6に記載の方法。
データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップが、状態変数キャッシュからの複数のデータユニット内の最初のデータユニットの前に出現するデータユニットに対する前記ルールの適用に応答して記憶された状態変数の更新された値を読むステップを含む、請求項7に記載の方法。
複数のデータユニット内の最初のデータユニットの前に出現するデータユニットが、前記最初のデータユニットに関連し、前記複数のデータユニット内の前記最初のデータユニットの前に出現する最も近いデータユニットである、請求項8に記載の方法。
複数のデータユニットの特定のデータユニットにルールを適用するステップが、状態変数の更新された値に対して複数のルールケースのうちの少なくとも1つのルールケースをテストするステップを含む、請求項11に記載の方法。
データユニットの順序付けられたサブセットの最初のデータユニットが、順序付けられた複数のデータユニット内の特定のデータユニットに関連するデータユニットの第1の出現である、請求項1に記載の方法。
順序付けられた複数のデータユニットの各データユニットが、第1のデータソースのレコードからの1又は2以上の値と、第2のデータソースからの少なくとも1つの値とを含む、請求項14に記載の方法。
特定のデータユニットを処理するステップが、前記特定のデータユニットのための1又は2以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、前記以前に取得された値が存在し、有効であると決定された場合は、前記データユニットキャッシュからの前記特定のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの前記特定のデータユニットのための1又は2以上の値を取得するステップを含む、請求項1に記載の方法。
特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップが、前記以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含む、請求項19に記載の方法。
1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップが、前記特定のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、順序付けられた複数のデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で前記接続を維持するステップとを含む、請求項19に記載の方法。
1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップが、以前に開かれた第1のデータソースに対する接続から前記特定のデータユニットのための1又は2以上の値を受信するステップを含む、請求項19に記載の方法。
少なくとも順序付けられたサブセットの第1のデータユニットに対して、前記第1のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、前記以前に取得された値が存在し、有効であると決定された場合は、前記データユニットキャッシュからの前記第1のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの前記第1のデータユニットのための1又は2以上の値を取得するステップをさらに含む、請求項1に記載の方法。
第1のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップが、前記以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含む、請求項25に記載の方法。
1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップが、前記第1のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、順序付けられた複数のデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で前記接続を維持するステップとを含む、請求項1に記載の方法。
1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップが、以前に開かれた第1のデータソースに対する接続から前記第1のデータユニットのための1又は2以上の値を受信するステップを含む、請求項1に記載の方法。
非一時的な形態でコンピュータ可読媒体上に記憶された、1又は2以上のデータソースからのデータにルールを適用するためのソフトウェアであって、コンピューティングシステムに、請求項1〜28のいずれかの方法を実行させる命令を含む、前記ソフトウェア。
【発明の概要】
【課題を解決するための手段】
【0004】
一態様では、一般的に、1又は2以上のデータソースからのデータにルールを適用するための方法は、第1のデータソースからデータを受信するステップと、第1のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットのうちの特定のデータユニットを処理するステップとを含む。この処理するステップは、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられたいくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【0005】
態様は、以下の特徴のうちの1又は2以上を含んでよい。
【0006】
処理するステップが、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において1又は2以上のデータソースからのデータにルールを適用する第1のモードに関連付けられ得る。テスト環境内で1又は2以上のデータソースからのデータにルールを適用する第1のモードが、順序付けられた複数のデータユニットのデータユニットごとに、実運用環境において1又は2以上のデータソースからのデータにルールを適用する第2のモードからもたらされる結果と矛盾しない結果をもたらすように構成され得る。テスト環境内で1又は2以上のデータソースからのデータにルールを適用する第1のモードが、順序付けられたいくつかのデータユニットのデータユニットごとに、順序付けられたいくつかのデータユニットのすべてがバッチでテストされるテスト環境において1又は2以上のデータソースからのデータにルールを適用する第3のモードからもたらされる結果と矛盾しない結果をもたらすように構成され得る。
【0007】
データユニットの第1のセットがデータユニットの順序付けられたサブセットからなり得る。状態変数を更新することが、データユニットの第1のセットを通して順序正しく反復し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用し、データユニットにルールを適用した結果に基づいて状態変数の更新された値を書き込むことを含み得る。データユニットの第1のセットが、データユニットの順序付けられたサブセット内にないデータユニットを含んでよく、データユニットの第1のセットを通して順序正しく反復することは、データユニットがデータユニットの順序付けられたサブセットのメンバであるかどうかを決定することを含み得る。いくつかのデータユニットが、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第1の出現である関連データユニットを含んでよく、データユニットの順序付けられたサブセットの最初のデータユニットは関連データユニットとは異なるデータユニットである。
【0008】
方法は、順序付けられたいくつかのデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶することを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップは、状態変数キャッシュからのいくつかのデータユニットのうちの最初のデータユニットの前に出現するデータユニットに対するルールの適用に応答して記憶された状態変数の更新された値を読むステップを含み得る。いくつかのデータユニット内の最初のデータユニットの前に出現するデータユニットは、最初のデータユニットに関連し、いくつかのデータユニット内の最初のデータユニットの前に出現する最も近いデータユニットであり得る。ルールは、いくつかのルールケースを含み得る。いくつかのルールケースのうちの少なくとも1つのルールケースをテストする結果は、状態変数の値に依存し得る。
【0009】
いくつかのデータユニットのうちの特定のデータユニットにルールを適用するステップは、状態変数の更新された値に対していくつかのルールケースのうちの少なくとも1つのルールケースをテストするステップを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットは、順序付けられたいくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第1の出現であり得る。いくつかのルールケースのうちの少なくとも1つのルールケースは、第1のデータソースと異なる第2のデータソースから導出された値に基づき得る。第2のデータソースは、処理の開始の後に動的にアクセスされ得る。順序付けられたいくつかのデータユニットの各データユニットは、第1のデータソースのレコードからの1又は2以上の値と、第2のデータソースからの少なくとも1つの値とを含み得る。順序付けられたいくつかのデータユニットは、第1のデータソースのレコードのセットの順序に従って順序付けられ得る。データユニットの順序付けられたサブセットの各データユニットは、共有識別子によってデータユニットの順序付けられたサブセットの他のデータユニットに関連し得る。共有識別子はキーフィールド値を含み得る。
【0010】
特定のデータユニットを処理するステップは、特定のデータユニットのための1又は2以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの特定のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップを含み得る。特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。
【0011】
1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップは、特定のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、順序付けられたいくつかのデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップは、以前に開かれた第1のデータソースに対する接続から特定のデータユニットのための1又は2以上の値を受信するステップを含み得る。第1のデータソースはデータベースであってよい。第1のデータソースは、データアーカイブファイルであってよい。
【0012】
方法は、少なくとも順序付けられたサブセットの第1のデータユニットに対して、第1のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの第1のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップを含み得る。第1のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップは、第1のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、順序付けられたいくつかのデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップは、以前に開かれた第1のデータソースに対する接続から第1のデータユニットのための1又は2以上の値を受信するステップを含み得る。
【0013】
別の態様では、一般的に、非一時的な形態でコンピュータ可読媒体上に記憶された、1又は2以上のデータソースからのデータにルールを適用するためのソフトウェアは、コンピューティングシステムに、第1のデータソースからデータを受信させ、第1のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットの特定のデータユニットを処理させるための命令を含む。この処理するステップは、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられたいくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【0014】
別の態様では、一般的に、1又は2以上のデータソースからのデータにルールを適用するためのコンピューティングシステムは、第1のデータソースからデータを受信するように構成された入力デバイス又は入力ポートと、第1のデータソースから受信されたデータから少なくとも一部導出された順序付けられたいくつかのデータユニットの特定のデータユニットを処理するように構成された少なくとも1つのプロセッサとを含む。処理は、順序付けられたいくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、順序付けられたサブセットに含まれる各データユニットが、特定のデータユニットに関連し、順序付けられた複数のデータユニット内の特定のデータユニットの前に出現する、決定するステップと、特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを通して順序正しく反復することから生じるであろう状態に更新し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用するステップと、状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【0015】
別の態様では、一般的に、1又は2以上のデータソースからのデータにルールを適用するためのコンピューティングシステムは、第1のデータソースからデータを受信するように構成された入力デバイス又は入力ポートと、ルールを適用する少なくとも2つの異なるモードのうちの選択されたモードで、第1のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理するように構成された少なくとも1つのプロセッサとを含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも1つの状態変数に書き込むステップを含む第1のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第2のモードがある。特定のデータユニットを処理するステップは、(1)いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、(2)特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを第1のモードで処理するステップから生じるであろう状態に更新するステップと、(3)状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【0016】
態様は、以下の特徴のうちの1又は2以上を含んでよい。
【0017】
第2のモードは、ルールをテストするためのユーザインターフェース内で特定のデータユニットが選択されるテスト環境において1又は2以上のデータソースからのデータにルールを適用するモードであってよい。第1のモードは、実運用環境において1又は2以上のデータソースからのデータにルールを適用するモードであってよい。第1のモードは、いくつかのデータユニットのすべてがバッチでテストされるテスト環境において1又は2以上のデータソースからのデータにルールを適用するモードであってよい。データユニットの第1のセットは、データユニットの順序付けられたサブセットからなってよい。
【0018】
状態変数を更新するステップは、データユニットの第1のセットを通して順序正しく反復し、順序付けられたサブセットのデータユニットごとに、データユニットにルールを適用し、データユニットにルールを適用した結果に基づいて状態変数の更新された値を書き込むステップを含み得る。データユニットの第1のセットは、データユニットの順序付けられたサブセット内にないデータユニットを含んでよく、データユニットの第1のセットを通して順序正しく反復するステップは、データユニットがデータユニットの順序付けられたサブセットのメンバであるかどうかを決定するステップを含み得る。順序付けられたサブセットに含まれる各データユニットは特定のデータユニットに関連してよく、いくつかのデータユニットは、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの第1の出現である関連データユニットを含み得、データユニットの順序付けられたサブセットの最初のデータユニットは、関連データユニットとは異なるデータユニットである。
【0019】
特定のデータユニットを第2のモードで処理するステップは、いくつかのデータユニットのデータユニットに対するルールの適用ごとに状態変数の更新された値を状態変数キャッシュに記憶するステップを含み得る。データユニットの順序付けられたサブセットの最初のデータユニットにルールを適用するステップは、状態変数キャッシュからの複数のデータユニット内の最初のデータユニットの前に出現するデータユニットに対するルールの適用に応答して記憶された状態変数の更新された値を読むステップを含み得る。いくつかのデータユニット内の最初のデータユニットの前に出現するデータユニットは、最初のデータユニットに関連し、いくつかのデータユニット内の最初のデータユニットの前に出現する最も近いデータユニットであってよい。ルールは、いくつかのルールケースを含み得る。
【0020】
いくつかのルールケースのうちの少なくとも1つのルールケースをテストする結果は、状態変数の値に依存し得る。いくつかのデータユニットの特定のデータユニットにルールを適用するステップは、状態変数の更新された値に対していくつかのルールケースのうちの少なくとも1つのルールケースをテストするステップを含み得る。順序付けられたサブセットに含まれる各データユニットは特定のデータユニットに関連してよく、データユニットの順序付けられたサブセットの最初のデータユニットは、いくつかのデータユニット内の特定のデータユニットに関連するデータユニットの最初の出現であってよい。いくつかのルールケースのうちの少なくとも1つのルールケースは、第1のデータソースと異なる第2のデータソースから導出された値に基づいてよい。第2のデータソースは、処理の開始の後に動的にアクセスされてよい。
【0021】
いくつかのデータユニットの各データユニットは、第1のデータソースのレコードからの1又は2以上の値と、第2のデータソースからの少なくとも1つの値とを含み得る。いくつかのデータユニットは、第1のデータソースのレコードのセットの順序に従って順序付けられ得る。順序付けられたサブセットに含まれる各データユニットは、共有識別子によって、特定のデータユニットに、及びデータユニットの順序付けられたサブセットの他のデータユニットに関連し得る。共有識別子はキーフィールド値を含み得る。
【0022】
特定のデータユニットを処理するステップは、特定のデータユニットのための1又は2以上の以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの特定のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップを含み得る。特定のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップは、特定のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、いくつかのデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。
【0023】
1又は2以上のデータソースからの特定のデータユニットのための1又は2以上の値を取得するステップは、以前に開かれた第1のデータソースに対する接続から特定のデータユニットのための1又は2以上の値を受信するステップを含み得る。第1のデータソースは、データベースであってよい。第1のデータソースは、データアーカイブファイルであってもよい。
【0024】
特定のデータユニットを第2のモードで処理するステップは、少なくとも順序付けられたサブセットの第1のデータユニットに対して、第1のデータユニットのための以前に取得された値がデータユニットキャッシュに存在し、有効であるかどうかを決定し、以前に取得された値が存在し、有効であると決定された場合は、データユニットキャッシュからの第1のデータユニットのための1又は2以上の値を取得し、そうでない場合は、第1のデータソースを含む1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップを含み得る。
【0025】
第1のデータユニットのための以前に取得された値が有効であるかどうかを決定するステップは、以前に取得された値が取得された以降の経過時間を所定の経過時間閾値と比較するステップを含み得る。1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップは、第1のデータユニットのための1又は2以上の値を受信するために第1のデータソースに対する接続を開くステップと、いくつかのデータユニットの他のデータユニットのための1又は2以上の値を受信するために開いた状態で接続を維持するステップとを含み得る。1又は2以上のデータソースからの第1のデータユニットのための1又は2以上の値を取得するステップは、以前に開かれた第1のデータソースに対する接続から第1のデータユニットのための1又は2以上の値を受信するステップを含み得る。
【0026】
別の態様では、一般的に、非一時的な形態でコンピュータ可読媒体上に記憶された、1又は2以上のデータソースからのデータにルールを適用するためのソフトウェアは、コンピューティングシステムに、第1のデータソースからデータを受信させ、ルールを適用する少なくとも2つの異なるモードのうちの選択されたモードで、第1のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理させるための命令を含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも1つの状態変数に書き込むステップを含む第1のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第2のモードがある。特定のデータユニットを処理するステップは、(1)いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、(2)特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを第1のモードで処理するステップから生じるであろう状態に更新するステップと、(3)状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【0027】
別の態様では、一般的に、1又は2以上のデータソースからのデータにルールを適用するための方法は、第1のデータソースからデータを受信するステップと、ルールを適用する少なくとも2つの異なるモードのうちの選択されたモードで、第1のデータソースから受信されたデータから少なくとも一部導出されたいくつかのデータユニットを処理するステップとを含む。モードには、いくつかのデータユニットが特定の順序で受信され、いくつかのデータユニットを処理するステップが、いくつかのデータユニットのうちの少なくともいくつかのそれぞれに対して、データユニットにルールを適用した結果に基づいて、更新された値を少なくとも1つの状態変数に書き込むステップを含む第1のモードと、いくつかのデータユニットのうちの特定のデータユニットの選択が受信される第2のモードがある。特定のデータユニットを処理するステップは、(1)いくつかのデータユニットからデータユニットの順序付けられたサブセットを含むデータユニットの第1のセットを決定するステップであって、この順序付けられたサブセットに含まれる各データユニットが、いくつかのデータユニット内の特定のデータユニットの前に出現する、決定するステップと、(2)特定のデータユニットにルールを適用する前に、少なくとも1つの状態変数を、データユニットの第1のセットを第1のモードで処理するステップから生じるであろう状態に更新するステップと、(3)状態変数の更新された値を読むステップを含む、特定のデータユニットにルールを適用するステップとを含む。
【発明の効果】
【0028】
態様は、以下の利点のうちの1又は2以上を含むことができる。
【0029】
本明細書で説明されるいくつかの態様は、以下でより詳細に説明されるように、システムが単一ユニットテストモード、バッチテストモード、及び実運用モードでルールを適用すると、一貫性のある結果がもたらされることを保証しながら、従来のシステムと比較すると、ルールを規定及び適用するシステムの性能及び機能を改善する。
【0030】
いくつかの従来のシステムとは対照的に、本明細書で説明される態様は、静的テスト環境を必要としない。これは、態様が、複雑なイベント処理と効果的に連携することができ、静的テスト環境に適合するようにルールを書き込む手段を開発者に変更させる可能性が低いので、有利とすることができる。
【0031】
本発明の他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになろう。
【発明を実施するための形態】
【0033】
1 概要
図1は、開発者110がデータの1又は2以上のソースからのデータ(例えば、データベースレコード)に対する適用のためのデータ処理ルールを規定することを可能にするデータ処理システム100の一例を示す。開発者110によって規定されたデータ処理ルールが実運用環境へとリリースされる前に正しく機能することが重要であるので、システム100は、開発者110がデータ処理ルールをリリースする前にテストデータに対してデータ処理ルールの機能をテストすることを可能にするように構成される。いくつかの例では、システム100は、開発者110が単一ユニットテストモード又はバッチテストモードのどちらかでデータ処理ルールの機能をテストすることを可能にする。単一ユニットテストモードでは、開発者110によって規定されるデータ処理ルールは、一度に1つのテストデータユニットに適用される。バッチテストモードでは、開発者110によって規定されるデータ処理ルールは、一度に複数のテストデータユニットに適用される。
【0034】
システム100は、システム100にデータを供給するためのデータソース102と、データ処理ルールを規定するためのユーザインターフェース112(例えば、ディスプレイスクリーン上のグラフィカルビュー)と、データソース102によって供給されたデータにデータ処理ルールを適用するための実行(execution)モジュール104とを含む。
【0035】
1.1 データソース
一般的に、データソース102は、記憶デバイス又はオンラインデータストリームへの接続などのデータの1又は2以上のソースを含み、その各々は、さまざまなフォーマット(例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット)のいずれかでデータを記憶又は提供し得る。
図1の例示的なシステム100では、データソース102は、テストデータセット114と、クレジットカード残高データセット116と、最近の購入数アーカイブ118とを含む。データソース102に含まれる上記で説明されたデータソースのセットは、データソース102に含まれ得るデータソースのセットの一例にすぎないことに留意されたい。実際、システム100の特定の適用例に応じて、異なるタイプのデータコンテンツを有する多数の異なるタイプのデータソースは、データソース102に含まれ得る。
【0036】
データソース102に含まれるデータセットのうちの少なくともいくつかは、いくつかのレコード(例えば、所定のレコード構造に従ってフォーマットされたレコード、又はデータベーステーブル内の行)を含む。いくつかのレコードの各要素は、場合によってはヌル値又はエンプティ値を含む、いくつかのフィールド(例えば、レコード構造内の定義された属性、又はデータベーステーブル内の列)(例えば、「名」、「姓」、「電子メールアドレス」など)のための値を含むことができる。
【0037】
いくつかの例では、データソース102に含まれるデータのソースのうちの1つは、データの主要ソースとして指定され、データソース102に含まれるデータの他のソースは、データの主要ソースに関連する、データの補助データソースとして指定される。極めて一般的に、データ処理ルールは、主要データソース内のレコードの所定のセットの各レコードの少なくともいくつかのフィールドに適用される。主要データソースのレコードに対するデータ処理ルールの適用中に、補助データソースは、主要データソースからのレコードに関連する他の値又は他のレコードすら取得するためにアクセスされ、データ処理ルールによって必要とされる。例えば、主要データセットの各レコードは、補助データソースからの関連データにアクセスするために使用されるキー(例えば、アカウント番号)を含み得る。主要データソース及び補助データソースからのデータは、以下でより詳細に説明されるように、「テストデータユニット」と呼ばれるユニットとしてテストするために収集可能である。
図1の例示的なシステムでは、主要データソースはテストデータセット114であり、データソース102に含まれる補助データソースは、クレジットカード残高データセット116、及びいくつかの最近の購入アーカイブファイル118である。
【0038】
以下でより詳細に説明されるように、システム100は、補助データソースの静的シミュレーションとして、開発及びテストが始まる前に固定テスト値を決定及び記憶することを要求する代わりに、データ処理ルールの開発及びテスト中に補助データソースに動的にアクセスすることを可能にするように構成される。
【0039】
1.2 ユーザインターフェース
以下で
図2に関してより詳細に説明されるユーザインターフェース112は、開発者110が、テストデータユニットを処理するために使用されるデータ処理ルールのセットを規定することを可能にする。ユーザインターフェース112の出力は、1又は2以上のデータ処理ルールの規定である。ユーザインターフェース112によって生じさせられる1又は2以上のデータ処理ルールの規定は、実行環境104に提供される。
【0040】
1.3 実行環境
実行環境104は、ユーザインターフェース(UI,user interface)モジュール106と、処理モジュール108と、パラメータ120のセットとを含む。処理モジュール108は、状態メモリ122を含む。いくつかの例では、パラメータ120のセット及び状態メモリ122は、データ処理ルールの適用中に動的にアクセスできる追加の補助データソースとして働く。
【0041】
ユーザインターフェース112からの1又は2以上のデータ処理ルールの規定はUIモジュール106に提供され、UIモジュール106は、指定されたデータ処理ルールを、処理モジュール108によって使用可能な形態へと変換する(例えば、コンパイル又は解釈実行する)。処理モジュール108は、使用可能な形態のデータ処理ルール、パラメータ120のセット、及びデータユニットをデータソース102から入力として受け取り、データ処理ルール及びパラメータ120のセットに従って、データソース102からのデータユニットを処理する。いくつかの例では、状態メモリ122は、以下でより詳細に説明されるように、データソース102からのデータを処理するとき、状態を1つのテストデータユニットから次のテストデータユニットまで保持する。データソース102からのデータを処理した結果は、UIモジュール106に戻され、次いで、ユーザインターフェース112に戻され、そこで、開発者110に提示される。
【0042】
実行環境104は、例えば、UNIXオペレーティングシステムのあるバージョンなどの適切なオペレーティングシステムの制御下で、1又は2以上の汎用コンピュータ上でホスティングされ得る。例えば、実行環境104は、ローカル(例えば、対称型マルチプロセッシング(SMP,symmetric multi-processing)コンピュータなどのマルチプロセッサシステム)、又はローカルで分散される(例えば、クラスタ若しくは超並列処理(MPP,massively parallel processing)システムとして結合された複数のプロセッサ)、又はリモート、又はリモートで分散される(例えば、ローカルエリアネットワーク(LAN,local area network)及び/又はワイドエリアネットワーク(WAN,wide-area network)を介して結合された複数のプロセッサ)、又はそれらの任意の組み合わせ、のいずれかで、複数の中央処理装置(CPU,central processing unit)又はプロセッサコアを使用するコンピュータシステムの構成を含む複数ノード並列コンピューティング環境を含むことができる。
【0043】
データソース102を提供する記憶デバイスは、実行環境104のローカルにあってよく、例えば、実行環境104をホスティングするコンピュータに接続された記憶媒体(例えば、ハードドライブ)上に記憶されてよく、又は実行環境104のリモートにあってよく、例えば、リモート接続(例えば、クラウドコンピューティングインフラストラクチャによって提供される)を介して、実行環境104をホスティングするコンピュータと通信するリモートシステム(例えば、メインフレーム)上でホスティングされてよい。
【0044】
2 例示的なユーザインターフェース
図2を参照すると、ユーザインターフェース112の一例は、開発者110がデータ処理ルールを規定及びテストすることを可能にするように構成される。ユーザインターフェース112は、UIモジュール106によって(例えば、コンピュータモニタ上に)レンダリングされ、2次元グリッド224と、データユニット番号制御部226と、単一ユニットテスト制御部228と、バッチテスト制御部230とを含む。非常に一般的に、開発者110は、2次元グリッド224を使用してデータ処理ルールを規定することができ、次いで、単一ユニットテスト制御部228を使用する単一テストデータユニット(データユニット番号制御部226によって規定される)又はバッチテスト制御部230を使用するテストデータユニットのセット全体のどちらかの上で、データ処理ルールをテストすることができる。あるいは、いくつかの実装形態では、開発者110が、データユニット番号制御部226によって規定されるデータユニットを変更した後、UIモジュール106は、開発者110が明示的なコマンドを入力しなくても、その選択に応答して、選択されたテストデータユニット上でのデータ処理ルールのテストを自動的に開始する。
【0045】
2次元グリッド224は、いくつかの列232と、いくつかの行234とを含む。列232は、2つの列タイプ、すなわち、入力列及び出力列に分けられる。
図2の例では、2次元グリッド224は、5つの入力列、すなわち、「トランザクション量」列と、「クレジットカード残高」列と、「最近の購入数」列と、「最近のアラート数」列と、「リスクレベル」列とを含む。非常に一般的に、各入力列は、主要入力データセット114からのフィールドと関連付けられてもよいし、補助データソース102からのフィールドと関連付けられてもよく、そのフィールドから、フィールド値が、(例えば、未加工の値として、又は式の一部として使用するために)取得され得る。いくつかの例では、入力列と関連付けられたフィールドのための値の各セットは、「テストデータユニット」と呼ばれる。いくつかの例では、入力列は、一時変数、定数、又は他の自由な形態の入力値などの、フィールドとは別のソースからの値と関連付け可能である。
【0046】
図2の例では、2次元グリッド224は、単一の出力列、すなわち、アラートを含む。いくつかの例では、アラート出力列は、その出力の値に基づいて、イベント(例えば、テキストメッセージを送信する)をトリガする。
【0047】
2次元グリッド224の行234と入力列の共通部分にあるセル236のうちの少なくともいくつかは、制約を含む。いくつかの例では、制約のうちの少なくともいくつかは、データソース102からの所与のデータユニットのためのフィールドの値と比較値(例えば、ドル量)との比較(例えば、よりも大きい、よりも小さい、又は等しい)を表す。一緒に、2次元グリッド224の所与の行のセル内の制約がルールケースを定義し、各出力値は、ルールケースが満たされた場合のルールの出力を定義する。一般的に、満たされるルールケースの場合、ルールケースのための制約のすべてが満たされなければならない。
【0048】
図2の例では、第1の行は、以下のように、第1のルールケース及び第1の出力値を定義する。
「トランザクション量」入力データの値が$10,000よりも大きく、かつ
「クレジットカード残高」入力データの値が$5,000よりも大きく、かつ
「最近の購入数」入力データの値が3よりも小さく、かつ
「最近のアラート数」入力データの値が1よりも小さく、かつ
「リスクレベル」が「通常」に等しい場合、
「アラート」ステータス出力は、「はい」という値に割り当てられる。
同様に、第2の行は、以下のように、第2のルールケース及び第2の出力値を定義する。
「トランザクション量」入力データの値が$5,000よりも大きく、かつ
「クレジットカード残高」入力データの値が$5,000よりも大きく、かつ
「最近の購入数」入力データの値が3よりも小さく、かつ
「最近のアラート数」入力データの値が1よりも小さく、かつ
「リスクレベル」が「高い」に等しい場合、
「アラート」ステータス出力は、「はい」という値に割り当てられる。
最後に、第3の行は、以下のように、第3のルールケース及び第3の出力値を定義する。
「トランザクション量」入力データの値が$5,000よりも小さい場合、
「アラート」ステータス出力は、「いいえ」という値に割り当てられる。
【0049】
他の任意の行は、下向きの矢印によって示される「いいえ」というデフォルト出力値を有するデフォルトルールケースを表し、これは、矢印の上にあるセル値が、矢印を含むボックス内のすべてのセルに対して繰り返されることを(入力列と出力列の両方に関して)示す。
【0050】
3 データ処理ルールの適用
上記で言及されたように、データソース102内のデータのソースからの1又は2以上のデータユニットにデータ処理ルールを適用するために、ユーザインターフェース112は、データ処理ルールの規定をUIモジュール106に提供する。UIモジュール106は、データ処理ルールの規定を、(例えば、コンパイル、解釈実行、又は何らかの他の変換を介して)処理モジュール108によって使用可能な形態へと処理する。次いで、データ処理ルールの使用可能な形態は、1又は2以上のデータユニットに入力を提供するために、1又は2以上のレコード又はデータソース102からの他の値と共に、処理モジュール108に提供される。処理モジュール108は、1又は2以上のデータユニットにデータ処理ルールを適用し、1又は2以上の出力値を返す。
【0051】
一般的に、2次元グリッド224の行234において定義されたルールケースは、より小さい行番号(例えば、第1の行)を有するルールケースが、より大きい行番号(例えば、第2の行)を有するルールケースよりも高い優先順位を有するように、優先順位によって順序付けられる。2次元グリッド224の行234に関連付けられた優先順位は、処理モジュール108がルールを適用するとき、考慮される。したがって、第1の行において定義されたルールケースが最初にテストされる。第1の行において定義されたルールケースが満たされた(トリガされる、と呼ばれることもある)場合、第1の行において定義された出力値が返され、より低い優先順位を有する行において定義されたルールケースをテストすることなくルールの適用が終了する。第1の行において定義されたルールケースが満たされない場合、処理モジュール108は、第2の行において定義されたルールケースをテストする。第2の行において定義されたルールケースが満たされた場合、第2の行において定義された出力値が返され、より低い優先順位を有する行において定義されたルールケースをテストすることなくルールの適用が終了する。処理モジュール108は、2次元グリッド224の優先順位が最も低い行において定義されたルールケースがテストされ、2次元グリッド224の優先順位が最も低い行において定義されたデフォルト出力値が返されるまで、このプロセスを繰り返す。
【0052】
4 テスト結果の提示
いくつかの例では、処理モジュール108によって返された1又は2以上の出力値がUIモジュール106に提供され、UIモジュール106は、開発者110への提示のために、1又は2以上の出力値をユーザインターフェース112に提供する。次いで、開発者110は、データ処理ルールを適用した結果(例えば、1又は2以上の出力値)をユーザインターフェース112内で見て、データ処理ルールが所望の機能に合致するかどうかを決定できる。必要な場合、開発者110は、ユーザインターフェース112を介して使用して、データ処理ルールに変更を加えてよい。対話型フィードバックのためのこの機能は、本明細書で説明される、単一ユニットテストモード、バッチテストモード、及び実運用モードで一貫性のある結果を取得するための手法によって容易にされる。
【0053】
5 テスト間データユニット依存性
上記で述べられたように、いくつかの例では、ユーザインターフェース112の2次元グリッド224の列に関連付けられたフィールドは、さまざまな補助データソースから得ることが可能であり、いくつかは、データソース102に含まれ、いくつかは、実行環境104に含まれる若しくは別の方法でその内部からアクセス可能である。
図3を参照すると、
図2の例示的なデータ処理ルールのための2次元グリッド224が、2次元グリッド224の列232に関連付けられたフィールドが導出されるさまざまな例示的なデータソースと共に示されている。
図3に示されるデータソースは説明の目的で含まれているにすぎず、通常は、ユーザインターフェース112を介して開発者110に表示されないことに留意されたい。
【0054】
図3では、2次元グリッド224の第1の列に関連付けられた「トランザクション量」フィールドは、テストデータセット114内に出現するレコード内の対応するフィールドから導出され、2次元グリッド224の第2の列に関連付けられた「クレジットカード残高」フィールドは、クレジットカード残高データセット116内に出現するレコード内の対応するフィールドから導出され、2次元グリッド224の第3の列に関連付けられた「最近の購入数」フィールドは、最近の購入アーカイブ118(例えば、米国特許第8,229,902号明細書でより詳細に説明されるインデックス付き圧縮フラットファイル(ICFF,indexed compressed flat file)などのアーカイブ)から導出され、2次元グリッド224の第4の列に関連付けられた「最近のアラート数」フィールドは、状態メモリ122に記憶された値から導出され、2次元グリッド224の第5の列に関連付けられた「リスクレベル」フィールドは、パラメータ120のセットからのパラメータ値から導出される。
図3の例では、テストデータセット114が主要データソースであり、クレジットカード残高データセット116、最近の購入アーカイブ118、状態メモリ、及び外部パラメータ120はすべて補助データソースであることに留意されたい。また、テストデータセット114のレコードに関連する補助データにアクセスすることができるように、テストデータセット114のレコードからの情報(例えば、キー)が、補助データソースに供給されることに留意されたい。
【0055】
図3に示されるように、いくつかの例では、特定の出力列のための出力値が、特定の入力列に関連付けられたデータソースを更新するために使用され得る。例えば、
図3のアラート出力列340の出力値は、「最近のアラート数」という題の第4の入力列がその入力データを導出する状態メモリ122を更新するために使用される。すなわち、
図3の2次元グリッド224によって規定されるルールを適用した結果が、「はい」というアラート値になるとき、状態メモリ122内の「最近のアラート数」フィールドが増分され、アラートが最近発行されたことを示す。ルール適用の出力を、データ処理ルールへの入力として使用されるデータソースに書き込むことによって、データユニット間の依存性が、さまざまなテストデータユニット間に確立され得る。
【0056】
データユニット間の依存性を有するテストデータユニットの場合、第1のテストデータユニット450に対するデータ処理ルールの適用の結果は、1又は2以上の他の異なるテストデータユニットにデータ処理ルールを適用した結果に依存する。
【0057】
6 バッチテスト
バッチテストモードでテストデータユニットにデータ処理ルールを適用するとき、データ処理ルールは、実運用環境内で展開され実運用モードで施行(run)されるデータ処理システムにおいて行われるように、あらかじめ定義された(通常、主要データソースから導出されたテストデータユニット内の値に関連付けられた)順序でテストデータユニットに適用される。テストデータユニットに対する
図2のデータ処理ルールの適用ごとに、アラート出力値が生じさせられ、状態メモリ122は、このアラート出力値に基づいて更新される。バッチテストは、(テストデータユニットのあらかじめ定義されたサブセットの)第1のテストデータユニットから始まるすべてのテストデータユニットを処理するので、所与のテストデータユニットに関して、以前のテストデータユニットのすべてが、適用されたデータ処理ルールを持っていた。したがって、状態メモリ122は、以前のテストデータユニットに対するデータ処理ルールの適用によって生じさせられるアラート出力値を反映する。
【0058】
図4〜6は、顧客アカウントキー値によって識別される所与の顧客(この例では、「顧客A」、「顧客B」などとラベルされる)に対するテストデータユニットのバッチに対するバッチテストモードにおける
図2のデータ処理ルールの例示的な適用を示す。この例では、各テストデータユニットは、主要テストデータセット114から導出された所与の顧客に関するトランザクション量と、補助データソース116、118、120、122から導出された、顧客のクレジットカード残高、顧客に関する最近の購入数、顧客に対して発行された最近のアラート数、及び顧客に関するリスクレベルパラメータを含む、いくつかの補助値とを含む。最近のアラート数は、異なる顧客に関するメモリ122内の異なるそれぞれの状態変数に記憶される。異なる顧客に関するテストデータユニットは、テストされているテストデータユニットのバッチ内に入れられてよい。この例では、順序付けキー値1と2と10とを有するテストデータユニットは顧客Aに関するものであり、順序付けキー値3〜9を有するテストデータユニットは他の顧客に関するものであると仮定される。
【0059】
図4を参照すると、顧客Aに関する第1のテストデータユニット450(1という順序付けキー値を有する)は、$100という第1のトランザクション量441と、$0というクレジットカード残高442と、0という最近の購入数の値444と、0という最近のアラート数の値446と、「高い」というリスクレベルパラメータ値448とを含む。
図2で指定されたデータ処理ルールを適用するために、処理モジュール108は最初に、第1のテストデータユニット450にデータ処理ルールの第1のルールケースを適用する。第1のルールケースを満たすための1つの要件は、トランザクション量441が$10,000よりも大きくなければならないということである。第1のテストデータユニット450に関するトランザクション量441が$100であるので、第1のルールケースは、第1のテストデータユニット450によって満たされない。次いで、処理モジュール108は、第1のテストデータユニット450にデータ処理ルールの第2のルールケースを適用する。第2のルールケースを満たすための1つの要件は、トランザクション量441が$5,000よりも大きくなければならないということである。第1のテストデータユニット450に関するトランザクション量441が$100であるので、第2のルールケースは、第1のテストデータユニット450によって満たされない。最後に、処理モジュール108は、第1のテストデータユニット450にデータ処理ルールの第3のルールケースを適用する。第3のルールケースを満たすための唯一の要件は、トランザクション量441が$5,000よりも小さくなければならないということである。第1のテストデータユニット450に関するトランザクション量441が$100であるので、第3のルールケースは満たされる。第3のルールケースは「いいえ」というアラート値に関連付けられているので、第1のテストデータユニット450へのデータ処理ルールの適用は、「いいえ」というアラート出力値という結果になる。「いいえ」というアラート出力値が出力されるので、最近のアラート数は状態メモリ122内で増分されず、0の状態を保つ。
【0060】
一般的に、1又は2以上の他のプロセスは、テストデータセット114内の第1のトランザクションに基づいて、クレジットカード残高データセット116内の顧客Aのクレジットカード残高の値442と、最近の購入数アーカイブ118内の顧客Aの最近の購入数の値444を更新する。
【0061】
図5を参照すると、顧客Aに関する第2のテストデータユニット552(2という順序付けキー値を有する)は、$5,100という第2のトランザクション量541と、$100というクレジットカード残高542と、1という最近の購入数の値544と、0という最近のアラート数の値546と、「高い」というリスクレベルパラメータ値548とを含む。
図2で指定されたデータ処理ルールを適用するために、処理モジュール108は最初に、第2のテストデータユニット552にデータ処理ルールの第1のルールケースを適用する。第1のルールケースを満たすための1つの要件は、トランザクション量541が$10,000よりも大きくなければならないということである。第2のテストデータユニット552に関するトランザクション量541が$5,100であるので、第1のルールケースは、第2のテストデータユニット552によって満たされない。次いで、処理モジュール108は、第2のテストデータユニット552にデータ処理ルールの第2のルールケースを適用する。第2のテストデータユニット552において、トランザクション量541は$5,000よりも大きく、最近の購入数の値544は3よりも小さく、最近のアラート数の値546も1よりも小さく、リスクレベル値548が「高い」であるので、第2のルールケースは満たされる。第2のルールケースは「はい」というアラート値に関連付けられているので、第2のテストデータユニット552へのデータ処理ルールの適用は、「はい」というアラート出力値が得られる結果になる。上記で説明されたように、データ処理ルールを適用すると、「はい」というアラート出力値が得られる結果になったので、「最近のアラート数」状態メモリ122は、アラートが最近発行されたことを示すために、1の値だけ増分される。
【0062】
以前のデータユニットの処理が、合致する顧客アカウントキー値を有する、後のデータユニットに関する記憶された状態のみに影響を与えるので、順序付けキー値3〜9を有するテストデータユニットは、顧客Aに関する最近のアラート数の値646を変更することなく、順序付けキー値2を有するテストデータユニットの後で順次処理されている。
【0063】
図6を参照すると、顧客Aに関する第3のテストデータユニット654(10という順序付けキー値を有する)は、$11,000という第3のトランザクション量641と、$5,200というクレジットカード残高642と、2という最近の購入数の値644と、1という最近のアラート数の値646と、「高い」というリスクレベルパラメータ値648とを含む。
図2で指定されたデータ処理ルールを適用するために、処理モジュール108は最初に、第3のテストデータユニット654にデータ処理ルールの第1のルールケースを適用する。第1のルールケースを満たすための1つの要件は、最近のアラート数646が1よりも小さい数を持たなければならないということである。第3のテストデータユニット654に関する最近のアラート数の値646が1であるので、第1のルールケースは、第3のテストデータユニット654によって満たされない。次いで、処理モジュール108は、第3のテストデータユニット654にデータ処理ルールの第2のルールケースを適用する。第2のルールケースを満たすための1つの要件は、最近のアラート数646が1よりも小さい数を持たなければならないということである。第3のテストデータユニット654に関する最近のアラート数の値646が1であるので、第2のルールケースは、第3のテストデータユニット654によって満たされない。最後に、処理モジュール108は、第3のテストデータユニット654にデータ処理ルールの第3のルールケースを適用する。第3のルールケースを満たすための唯一の要件は、トランザクション量641が$5,000よりも小さくなければならないということである。第3のテストデータユニット654に関するトランザクション量641が$11,000であるので、第3のルールケースは満たされない。ルールケースのいずれも満たされないとき、データ処理ルールは、「いいえ」というデフォルトアラート出力値を返す。
【0064】
7 単一ユニットテスト
いくつかの例では、テストデータユニットにデータ処理ルールをバッチテストモードで適用するのではなく、開発者110は、テストデータセット114の中央からのレコードの選択されたキー値に対応する単一の選択されたテストデータユニットにデータ処理ルールを適用し得る。そのような場合、テストデータユニットの値が、所定の順序に従って選択されたデータユニットの前に出現する値又はデータユニットにデータ処理ルールを適用することから生じる状態を正確に反映しない場合、データ処理ルールの誤った出力が生じることがある。
【0065】
そのような誤った出力を回避するために、処理モジュール108は、選択されたデータユニットの前に出現するテストデータユニットのサブセットを決定することによって、選択されたテストデータユニットを処理するように構成される。一般的に、テストデータユニットのサブセット内のテストデータユニットは、所定の順序(例えば、テストデータセット114内のレコードからの一意の主キーフィールドのソート順序、又はテストデータセット114内のレコードの記憶順序)に関連付けられる。いくつかの例では、テストデータユニットのサブセット内のテストデータユニットはすべて、共通識別子(例えば、顧客アカウント番号フィールドなどの、テストデータセット114内のレコードからの非一意のキーフィールドの値)によって関係付けられる。選択されたテストデータユニットにデータ処理ルールを適用する前に、処理モジュールは、テストデータユニットのサブセットのうちのテストデータユニットを所定の順序で反復し、各テストデータユニットにデータ処理ルールを適用する。テストデータユニットに対するデータ処理ルールの少なくともいくつかの適用の場合、データ処理ルールの適用によって生じさせられる出力は、状態変数を更新するために使用される。
【0066】
データ処理ルールが、テストデータユニットのサブセットのうちのテストデータユニットのすべてに適用された後、状態変数の更新された値が読み取られ、選択されたテストデータユニットに対するデータ処理ルールの適用において使用される。
【0067】
データ処理ルールが、選択されたテストデータユニットの前に出現するすべてのテストデータユニットに適用されたことを保証することによって、バッチテストモード及び実運用モードで得られるであろう結果と矛盾しないことに関して、状態変数の値及びしたがってデータ処理ルールの出力が正確であることが保証される。
【0068】
図2及び
図7〜9を参照すると、単一ユニットテストモード処理の一例が示されている。
図2では、開発者110が、データユニット番号制御部226を使用して10の順序付けキー値を選択している。単一ユニットテスト制御部228を押すことによって、開発者110は、テストデータセット114の10番目のレコードに関連付けられた選択されたテストデータユニットにデータ処理ルールを適用したいという要求を示す。
図7を参照すると、テストデータユニットの「最近のアラート数」フィールド内の値が不正確であることにより、データ処理ルールの第2のルールケースが誤って満たされるので、それぞれのデータソースからの選択されたテストデータユニット754に対する2次元グリッド224の入力列232の各々に関するフィールドの値を読み取り、それらの値にデータ処理ルールを適用するだけでは、選択されたテストデータユニット754に関する「はい」という正しくないアラート出力値が得られるという結果になろう。
【0069】
この例では、順序付けキー値1と2と10とを有するテストデータユニットは顧客Aに関するものであり、順序付けキー値3〜9を有するテストデータユニットは他の顧客に関するものであるとも仮定される。そのため、選択されたテストデータユニット754(順序付けキー値10を有する)に関するアラート出力値は、第1のテストデータユニット(1という順序付けキー値を有する)及び第2のテストデータユニット(2という順序付けキー値を有する)にデータ処理ルールを適用した結果に依存し、第1のテストデータユニット及び第2のテストデータユニットはそれぞれ、テストデータセット114の第1のレコード及び第2のレコードに関連付けられる。第1のテストデータユニット及び第2のテストデータユニットはまだ、データ処理ルールが適用されていないことがある。この例では、第1のデータユニット及び第2のデータユニットにデータ処理ルールを適用しなければ、顧客Aに関して状態メモリ122に記憶された「最近のアラート数」フィールドの値は(バッチテストモード及び実運用モードと矛盾しない意図された挙動に従って)不正確である。
【0070】
図8及び
図9を参照すると、選択されたテストデータユニット754に対するデータ処理ルールの適用の前に、状態メモリ122に記憶された「最近のアラート数」フィールドの値が正確であることを保証するために、システム100は最初に、第1のテストデータユニット850(1という順序付けキー値を有する)及び第2のテストデータユニット952(2という順序付けキー値を有する)にデータ処理ルールを適用する。
【0071】
図8を参照すると、第1のテストデータユニット850にデータ処理ルールを適用すると、(
図4の場合と同様に)「いいえ」というアラート出力値が得られる結果になる。「いいえ」というアラート出力値が出力されるので、最近のアラート数は状態メモリ122において増分されず、0のままである。
図9を参照すると、第2のテストデータユニット952にデータ処理ルールを適用すると、(
図5の場合と同様に)「はい」というアラート出力値が得られる結果になる。データ処理ルールを適用すると、「はい」というアラート出力値が得られる結果になったので、状態メモリ122内の「最近のアラート数」の値は、アラートが最近発行されたことを示すために、1の値だけ増分される。最後に、
図7に戻ると、選択されたテストデータユニット754にデータ処理ルールを適用すると、状態メモリ122内の「最近のアラート数」の値が正確な値を含むので、(
図6の場合と同様に)「いいえ」というデフォルトアラート出力値が返される結果になる。
【0072】
8 複合イベント処理
いくつかのタイプのデータ処理システムは特に、本明細書で説明される、単一ユニットテストモード、バッチテストモード、及び実運用モードで一貫性のある結果を取得するための技法によって可能にされる動的テスト環境から利益を得ることがある。1つのそのようなタイプのデータ処理が、複合イベント処理である。例えば、
図1の処理モジュール108は、複合イベント処理ルーチンを履行する(implement)ように構成可能である。非常に一般的に、複合イベント処理システムは、複数のソースからのデータを結合して、イベント間の関係におけるパターンを識別することによって、イベントを処理する。いくつかの例では、複合イベント処理は、最近のイベント履歴を使用して、マーケティング機会又は脅威などの意味のあるイベントを識別し、識別された意味のあるイベントに可能な限り早く応答して、入力イベントを処理する。
【0073】
図10を参照すると、例示的な複合イベント処理ルーチンすなわちマーケティングキャンペーンのための状態
図1060が示されている。このマーケティングキャンペーンは、キャッシュバックプログラムについて顧客に通知することによって、クレジットカードの使用を増加させることを意図したものである。例示的なマーケティングキャンペーンでは、現在の購入イベント並びに1又は2以上の過去の購入イベントの両方に基づいて、顧客にキャッシュバック奨励金が提供される。状態
図1060は、状態遷移1064、1068、1072、1076、1078によって相互接続された、いくつかの状態1062、1066、1070、1074、1080を含む。代表的な顧客に関して購入イベントが受信されると、顧客の現在の状態及び受信された購入イベントの性質に基づいて、顧客の状態が更新される。
【0074】
特に、例示的なマーケティングキャンペーンの開始時に、顧客がマーケティングキャンペーンに適格であると考えられる場合、顧客は、(例えば、「適格」状態1062の標識を
図1の状態メモリ122内の状態変数に書き込むことによって)「適格」状態1062に置かれる。
【0075】
第1の購入イベント1064が顧客に関して受信されると、顧客の現在の状態が(例えば、
図1の状態メモリ122内の状態変数から)読み取られる。顧客は現在、「適格」状態1062にあり、第1の購入イベント1064を受信したので、顧客がマーケティングキャンペーンに適格であることを顧客に知らせるために、メッセージ(図示せず)が顧客に送信され、マーケティングキャンペーンは、旅行関連購入及び食品関連購入に関するキャッシュバック販売促進を含む。次いで、顧客の状態が「通知された」状態1066に遷移し、顧客がマーケティングキャンペーンについて通知されたことを示す。
【0076】
「通知された」状態1066にある間、旅行関連購入イベント1068が受信された場合、顧客が旅行関連販売促進を受け、食品関連販売促進に適格であることを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「第1の旅行」状態1070に遷移し、顧客が旅行関連販売促進を受けたことを示す。
【0077】
あるいは、「通知された」状態1066にある間、食品関連購入イベント1072が受信された場合、顧客が食品関連販売促進を受け、旅行関連販売促進に適格であることを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「第1の食品」状態1074に遷移し、顧客が食品関連販売促進を受けたことを示す。
【0078】
「第1の旅行」状態1070にある間、食品関連購入イベント1076が受信された場合、顧客が旅行関連販売促進と食品関連販売促進の両方を受けたことを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「完了」状態1080に遷移し、顧客が販売促進を完了したことを示す。
【0079】
同様に、「第1の食品」状態1074にある間、旅行関連購入イベント1078が受信された場合、顧客が旅行関連販売促進と食品関連販売促進の両方を受けたことを顧客に知らせるために、メッセージが顧客に送信される。次いで、顧客の状態が「完了」状態1080に遷移し、顧客が販売促進を完了したことを示す。
【0080】
8.1 複合イベント処理構成ユーザインターフェース
図11を参照すると、例示的なユーザインターフェース1182によって、ユーザが、
図10の状態
図1060によって規定されるルーチンなどの複合イベント処理ルーチンを履行するようにシステム(例えば、
図1の処理モジュール108)を構成することが可能になる。非常に一般的に、ユーザインターフェースは、ユーザが、複合イベント処理ルーチンのための状態図をテストの順序付けられたセットとして表現することを可能にし、各テストは、テストが満たされた場合に発生する対応する出力を有する。
【0081】
いくつかの例では、ユーザインターフェース1182は、いくつかの列1186といくつかの行1184とを含むセルの2次元グリッド1183として履行される。セルは、各行1184と各列1185の共通部分に存在し、ユーザ入力(例えば、パラメータ値)を受け入れるように構成される。
【0082】
列1186は、2つの列タイプ、すなわち、「トリガ」列1188及び「出力」列1190に分けられる。
図11のユーザインターフェース1182には、3つのトリガ列1188(すなわち、現在の状態、旅行関連、及び分類)及び2つの出力列1190(すなわち、新しい状態及びメッセージ)がある。
【0083】
まとめると、トリガ列1188に関連付けられた、所与の行内のセルは、テスト(例えば、ブールテスト)を定義するために使用される。例えば、2次元グリッド1183の第1の行1185では、「現在の状態」トリガ列に関連付けられたセルは「適格」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第1の行1185におけるトリガ列1188の値を考えると、顧客の現在の状態(例えば、状態変数記憶から読み取られる)が「適格」である場合、新しい購入イベントが旅行関連購入イベント又は食品関連購入イベントであるか否かにかかわらず、システムによって受信された顧客に関する新しい購入イベントが、第1の行1185によって定義されたテストを満たす。
【0084】
出力列1188に関連付けられた所与の行内の各セルは、所与の行に対するテストが満たされた場合に発生する出力アクションを定義する。例えば、2次元グリッド1183の第1の行1185では、「新しい状態」出力列に関連付けられたセルは「通知された」という値を含み、「メッセージ」出力列に関連付けられたセルは適格性通知メッセージ1192を含む。第1の行1185における出力列1190の値を考えると、第1の行1185によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「通知された」に更新され(例えば、状態変数記憶に書き込まれる)、適格性通知メッセージ1192が顧客に送信される。
【0085】
2次元グリッド1183の第2の行1187では、「現在の状態」トリガ列に関連付けられたセルは「通知された」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「旅行関連である」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第2の行1187におけるトリガ列1188の値を考えると、顧客の現在の状態が「通知された」であり、新しい購入イベントが旅行関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第2の行1187によって定義されるテストを満たす。
【0086】
2次元グリッド1183の第2の行1187では、「新しい状態」出力列に関連付けられたセルは「第1の旅行」という値を含み、「メッセージ」出力列に関連付けられたセルは旅行購入通知メッセージ1194を含む。第2の行1187における出力列1190の値を考えると、第2の行1185によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「第1の旅行」に更新され、旅行購入通知メッセージ1194が顧客に送信される。
【0087】
2次元グリッド1183の第3の行1189では、「現在の状態」トリガ列に関連付けられたセルは「通知された」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「食品及び医薬品」という入力値を含む。第3の行1189におけるトリガ列1188の値を考えると、顧客の現在の状態が「通知された」であり、新しい購入イベントが食品関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第3の行1189によって定義されるテストを満たす。
【0088】
2次元グリッド1183の第3の行1189では、「新しい状態」出力列に関連付けられたセルは「第1の食品」という値を含み、「メッセージ」出力列に関連付けられたセルは食品購入通知メッセージ1196を含む。第3の行1189における出力列1190の値を考えると、第3の行1189によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「第1の食品」に更新され、食品購入通知メッセージ1196が顧客に送信される。
【0089】
2次元グリッド1183の第4の行1191では、「現在の状態」トリガ列に関連付けられたセルは「第1の旅行」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルは「食品及び医薬品」という入力値を含む。第4の行1191におけるトリガ列1188の値を考えると、顧客の現在の状態が「第1の旅行」であり、新しい購入イベントが食品関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第4の行1191によって定義されるテストを満たす。
【0090】
2次元グリッド1183の第4の行1191では、「新しい状態」出力列に関連付けられたセルは「完了」という値を含み、「メッセージ」出力列に関連付けられたセルはキャンペーン完了通知メッセージ1198を含む。第4の行1191における出力列1190の値を考えると、第4の行1191によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「完了」に更新され、キャンペーン完了通知メッセージ1198が顧客に送信される。
【0091】
2次元グリッド1183の第5の行1193では、「現在の状態」トリガ列に関連付けられたセルは「第1の食品」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルは「旅行関連である」という入力値を含み、「分類」トリガ列に関連付けられたセルは「任意」という入力値を含む。第5の行1193におけるトリガ列1188の値を考えると、顧客の現在の状態が「第1の食品」であり、新しい購入イベントが旅行関連購入イベントである場合、システムによって受信された顧客に関する新しい購入イベントが、第5の行1193によって定義されるテストを満たす。
【0092】
2次元グリッド1183の第5の行1193では、「新しい状態」出力列に関連付けられたセルは「完了」という値を含み、「メッセージ」出力列に関連付けられたセルはキャンペーン完了通知メッセージ1198を含む。第5の行1193における出力列1190の値を考えると、第5の行1193によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態が「完了」に更新され、キャンペーン完了通知メッセージ1198が顧客に送信される。
【0093】
最後に、2次元グリッド1183の第6の行1195では、「現在の状態」トリガ列に関連付けられたセルは「任意」という入力値を含み、「旅行関連」トリガ列に関連付けられたセルも「任意」という入力値を含み、「分類」トリガ列に関連付けられたセルも「任意」という入力値を含む。第6の行1195におけるトリガ列1188の値を考えると、システムによって受信された顧客に関する任意の新しい購入イベントが、第6の行1195によって定義されるテストを満たす。
【0094】
2次元グリッド1183の第6の行1195では、「新しい状態」出力列に関連付けられたセルは「現在の状態」という値を含み、「メッセージ」出力列に関連付けられたセルはヌルメッセージ1199を含む。第6の行1195における出力列1190の値を考えると、第6の行1195によって定義されるテストが、顧客に関する新しい購入イベントによって満たされる場合、顧客の現在の状態はその「現在の状態」に維持され、通知メッセージは顧客に送信されない。
【0095】
新しい購入イベントが受信されると、2次元グリッド1183の行1184によって定義されたテストが、テストが新しい購入イベントによって満たされるまで、新しい購入イベントに順序正しく適用される。すなわち、第1の行1185によって定義されるテストが、新しい購入イベントに最初に適用される。第1の行1185によって定義されるテストが新しい購入イベントによって満たされない場合、第2の行1187によって定義されるテストが新しい購入イベントに適用される。第2の行1187によって定義されるテストが新しい購入イベントによって満たされない場合、第3の行1189によって定義されるテストが新しい購入イベントに適用され、以下同様である。最終的に、他の行によって定義されたテストのいずれも新しい購入イベントによって満たされない場合、デフォルトの第6の(最終)行1195が新しい購入イベントに適用され、新しい購入イベントによって満たされる。2次元グリッド1183の行1184によって定義されたテストを順序正しく適用することによって、
図10の状態
図1060の機能が達成される。
【0096】
9 代替形態
いくつかの例では、ユーザインターフェースの性能が、所与の読み取り動作のためにデータソースに対する読み取り接続を開き、次いで、その後の読み取り動作のために接続をキャッシュする(例えば、データベースハンドルを保存して、接続を生かしておく)ことによって改善され得る。そうすることによって、接続セットアップ/停止時間が減少し、所与の時間期間内のデータソースに対する接続の数の制限の使い果たしが防止可能である。
【0097】
いくつかの例では、データソース(又はテストデータユニット全体)から読み取られたレコードがキャッシュに記憶可能である。
【0098】
いくつかの例では、レコード(又はテストデータユニット)の値が要求されると、キャッシュが最初に調べられる。レコード(又はテストデータユニット)がキャッシュ内に存在しない場合、キャッシュされた接続が、要求されたレコードを取り出すために調べられる。要求されたレコードを取り出すために接続がキャッシュされていない場合、要求されたレコードを取り出すために、新しい接続が開かれる。
【0099】
いくつかの例では、どこでレコード又はテストデータユニットを取り出すべきかは、レコード又はテストデータユニットが前回取り出されてからの時間に基づく。レコード又はテストデータユニットが最近取り出された場合、キャッシュされた値は有効であると判断され、キャッシュが調べられる。レコード又はテストデータユニットが前回取り出されてから、より長い量の時間が経過した場合、キャッシュされた値は無効であると考えられ、キャッシュされた接続が使用される。レコード又はテストデータユニットが前回取り出されてから、はるかに長い量の時間が経過した場合、キャッシュされた値及びキャッシュされた接続は無効であると考えられ、レコード又はテストデータユニットを取り出すために、新しい接続が開かれる。
【0100】
データベースが、上記で説明された手法から利益を得ることができる1つの一般的なタイプのデータソースであるが、多くの他のタイプのデータソース(例えば、アーカイブファイル、2次データセットなど)も、この手法から利益を得ることができることに留意されたい。
【0101】
いくつかの例では、正確な状態情報を含むテストデータユニットの値が、後で使用するためにキャッシュされる。そのような場合、選択されたテストデータユニットの前のすべてのテストデータユニットにデータ処理ルールを単一レコードテストモードで適用しなければならないというよりむしろ、選択されたテストデータユニットと最も近い以前のキャッシュされたテストデータユニットとの間のそれらのレコードのみにデータ処理ルールを適用させる必要がある。
【0102】
いくつかの例では、ユーザインターフェースによって、開発者は、データベース接続がいつキャッシュされるかを規定することが可能になる。
【0103】
いくつかの例では、状態変数値は、除去される前に、所定の量の時間にわたって状態変数メモリのみに記憶される。このようにして、状態変数は本質的に、スライディングウィンドウを状態変数に適用させ、ウィンドウ処理された集約(windowed aggregation)などの動作を可能にする。
【0104】
いくつかの例では、入力列がパラメータアクセスを要求するとき、パラメータの値がキャッシュ可能である。例えば、実運用環境では、パラメータは、コマンドライン入力又はパラメータセットファイルから読み取られ、必要であれば、ルールベースの適用が始められる環境(すなわち、実運用環境)の文脈で解決され得る。単一ユニットテストモード(又はバッチテストモード)の場合、値は、現在の環境を使用する評価されるパラメータ又は代わりに仮定されるテスト値のどちらかとして、実運用環境が提供するものに近いものとして、(例えば、ユーザ設定可能パラメータに基づいて)選択されていてもよい。
【0105】
10 実装形態
上記で説明されるルール規定及び適用手法は、例えば、適切なソフトウェア命令を実行するプログラム可能なコンピューティングシステムを使用して履行可能であり、又は、フィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)などの適切なハードウェア内で、若しくは何らかのハイブリッド形態で、履行可能である。例えば、プログラムされた手法では、ソフトウェアは、各々が少なくとも1つのプロセッサと、少なくとも1つのデータ記憶システム(揮発性及び/又は不揮発性のメモリ及び/又は記憶素子を含む)と、(少なくとも1つの入力デバイス又はポートを使用して入力を受信するための、及び少なくとも1つの出力デバイス又はポートを使用して出力を提供するための)少なくとも1つのユーザインターフェースとを含む1又は2以上のプログラムされた又はプログラム可能コンピューティングシステム(分散、クライアント/サーバ、又はグリッドなどのさまざまなアーキテクチャであってよい)上で実行される1又は2以上のコンピュータプログラム内にプロシージャを含み得る。ソフトウェアは、例えばデータフローグラフの設計、構成、及び実行に関連するサービスを提供する大規模プログラムの1又は2以上のモジュールを含み得る。プログラムのモジュール(例えば、データフローグラフの要素)は、データ構造又はデータリポジトリ内に記憶されたデータモデルに適合する他の編成されたデータとして履行可能である。
【0106】
ソフトウェアは、揮発性記憶媒体若しくは不揮発性記憶媒体、又は他の任意の非一時的な媒体で具体化される、ある時間の期間(例えば、ダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ期間の間の時間)にわたって媒体の物理的性質(例えば、表面のくぼみ及び平面部、磁区、又は電荷)を使用するなどの、非一時的な形態で記憶されてよい。命令をロードするための準備において、ソフトウェアは、CD−ROM又は他のコンピュータ可読媒体(例えば、汎用コンピューティングシステム又は汎用デバイス又は特殊目的コンピューティングシステム又は特殊目的デバイスによって可読の)などの有形の非一時的な媒体上で提供されてもよいし、ネットワークの通信媒体を介して、ソフトウェアが実行されるコンピューティングシステムの有形の非一時的な媒体に配信されてもよい(例えば、伝播信号において符号化されてもよい)。処理のうちのいくつか又はすべては、特殊目的コンピュータ上で、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)などの特殊目的ハードウェア若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)を使用して、実施(perform)されてよい。処理は、ソフトウェアによって規定される計算の異なる部分が異なるコンピューティング要素によって実施される分散式で履行されてよい。そのような各コンピュータプログラムは、好ましくは、本明細書で説明される処理を実施するために記憶デバイス媒体がコンピュータによって読み取られるとコンピュータを構成及び動作させるために、汎用プログラム可能コンピュータ又は特殊目的プログラム可能コンピュータによってアクセス可能な記憶デバイスのコンピュータ可読記憶媒体(例えば、ソリッドステートメモリ若しくはソリッドステート媒体、又は磁気媒体若しくは光学式媒体)上に記憶される又はそれにダウンロードされる。本発明のシステムはまた、コンピュータプログラムと共に構成される有形の非一時的な媒体として履行されると考えられてよく、そのように構成された媒体は、コンピュータに、本明細書で説明される処理ステップのうちの1又は2以上を実施するために特定のあらかじめ定義されたように動作させる。
【0107】
本発明のいくつかの実施形態について説明してきた。とはいえ、前述の説明は、本発明の範囲を制限するのではなく、本発明の範囲を示すことを意図したものであり、本発明の範囲は以下の特許請求の範囲によって定義されることを理解されたい。したがって、他の実施形態も、以下の特許請求の範囲に含まれる。例えば、本発明の範囲から逸脱することなく、さまざまな修正が加えられてよい。さらに、上記で説明されたステップのうちのいくつかは、順序とは無関係であってよく、したがって、説明された順序とは異なる順序で実施可能である。