7 ビジネス・ルールのテストと検証
作成または編集したルールをテストおよび検証します。
7.1 概要
ビジネス・ルールのテスト機能により、開発者とビジネス・ユーザーのどちらも、想定したとおりにルールが動作していること、また、変更した場合は、ルールが既存の機能を妨げていないことをすばやく確認できます。
ルールは、Oracle JDeveloperまたはBusiness Process Composerで設計時に作成およびテストできます。実行時には、SOAコンポーザでルールをテストできます。
XML、前のルール・アクションまたはJavaなどのプログラミング言語の知識がなくても、テストを宣言的に記述できます。さらに、テストでは、すべてのタイプのファクト(XML、Java、RLおよびADF-BC)がサポートされており、SOAまたは非SOAユース・ケースで実行できます。
テスト機能では、テスト・レポートに診断コメントおよび予期した値と実際の値との相違が表示され、ルールの訂正やテストの修正に使用できます。
図7-1は、JDeveloperのUIを示しています。JDeveloperの使用の詳細は、『Oracle Fusion Middleware Oracle JDeveloperによるアプリケーションの開発』のOracle JDeveloperの概要に関する項を参照してください。
7.1.1 テスト機能のコンポーネント
どのUIを使用するかに関係なく、JDeveloper、BP ComposerおよびSOAコンポーザでテスト機能はほぼ同様に動作します。
デシジョン関数は、開始する前にすでに作成されている必要があります。デシジョン関数とテストの間には1対1マッピングが存在します。デシジョン関数をテスト・スイートまたはテスト・テンプレートに一度関連付けると、後から変更することはできません。
テスト機能のコンポーネントは次のとおりです。
-
テスト・スイートとテスト・ケース
1つ以上のテスト・ケースでテスト・スイートを作成できます。他のテスト・ケースを作成するためのテンプレートとして機能するテンプレートを作成することもできます。
-
テスト・テンプレート
テスト・テンプレートにより、いくつかのファクト・プロパティの値のみが異なる、類似したテスト・ケースを作成できます。テンプレートによって、パラメータの値を指定して非定型テストを実行することも可能になります。非定型テストにより、健全性テストを実行し、テスト・スイートでテスト・ケースとして作成する前に、特定のパラメータに対して様々な値の組合せを試してみることができます。
-
テスト実行
テスト・スイートまたはテスト・ケースを実行すると、デシジョン関数が呼び出され、そのデシジョン関数で定義されているルールセットが実行され、図7-2に示すように、新しいタブに結果が表示されます。テストは、RL生成を介して実行されます。
次のことに注意してください。
-
テストは、ディクショナリの「テスト」タブからでも、「デシジョン関数」タブからでも実行できます。
-
テストは、リンクされているディクショナリのデシジョン関数の現行ディクショナリで定義できます。
-
リンクされているディクショナリで定義されているテストは、現行ディクショナリで実行できます。リンクされているディクショナリからのテストは、読取り専用として実行に使用できます。
-
デシジョン関数の入力/出力を変更すると、その変更は、定義済のテストに自動的に同期されます。テストは、そのテストで参照されるファクト・タイプに同期されます。デシジョン関数からファクトを削除すると、テスト機能によって、それらのファクトをそのテストの入力/出力ツリーから削除できるようになります。
-
ファクトはテスト・データを定義するFactTypeのインスタンスであり、それぞれのFactTypeプロパティに対応するプロパティ値を持っています。プロパティ値が複雑なデータ・タイプである場合、それもファクト・インスタンスを使用して定義されます。
-
7.2 JDeveloperでのルールのテスト
ルールは、JDeveloperで設計する際にテストできます。
「テスト・ケース」エディタでテスト・ケースの入力および予期される出力値を定義します。ここでの値には、単純な値、グローバル、関数などを使用する式を使用できます。
入力および出力ファクト・ツリーは、デシジョン関数に指定された入力/出力に従って自動的に初期化されます。
テスト入力および出力ファクト・ツリーは、デシジョン関数に対する変更(入力または出力の追加、削除、変更)またはファクト・タイプの変更(プロパティの追加、削除、変更)とも自動的に同期します。自動同期フラグおよび強調表示によって、デシジョン関数またはファクト・タイプで変更されたファクトおよびプロパティの値が無効化されます。入力/出力に対するこれらのフラグの表示は、テスト定義の特定および問題の修正に役立ちます。
権限関連ケースのテスト
権限関連ケースをテストする前に、リフレッシュ時間を10秒に変更します。これは信頼性の高いテスト結果のための需要な前提条件です。
リフレッシュ時間を10秒に変更するには:
-
$MW_HOME/user_projects/domains/soainfra/config/fmwconfig
に移動します。 -
jps-config.xml
を開きます。 -
oracle.security.jps.ldap.policystore.refresh.interval
を10000に設定します。<serviceInstance name="pdp.service" provider="pdp.service.provider"> <property name="oracle.security.jps.ldap.policystore.refresh.interval" value="10000"/> </serviceInstance>
-
サーバーを再起動します。
7.2.1 テスト・スイートとケースの作成および管理方法
1つ以上のテスト・ケースでテスト・スイートを作成できます。テスト・スイートは、個別のデシジョン関数に対してのみ定義できます。
デシジョン関数の詳細は、デシジョン関数の使用を参照してください。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
テスト・スイートを作成するには:
テスト・スイートおよびケースの作成が完了すると、それらを実行できます。詳細は、「テスト・スイートまたはケースの実行方法」を参照してください。
7.2.2 テスト・テンプレートの作成方法
テスト・テンプレートを使用すると、入力および出力値を再使用して、それらのフィールドおよび値のテストを反復できます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
テスト・テンプレートを作成するには:
テスト・テンプレートの設定が完了すると、それらを実行できます。詳細は、「テスト・テンプレートからの非定型テストの実行方法」を参照してください。
7.2.3 テスト・スイートまたはケースの実行方法
テストを実行すると、新しいタブが開き、診断コメント、例外およびテスト結果が表示されます。テストは、スイート、複数のテスト・ケースまたは個別のテスト・ケースとして実行できます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
複数のテスト・スイートまたはケースを実行するには:
「実行」ボタンは、テスト・スイートまたはテスト・ケース(またはテスト・テンプレート)が表から選択され、現在のディクショナリに検証警告が存在しない場合のみ、使用可能になります。
7.2.4 テスト・テンプレートからの非定型テストの実行方法
ここで、入力および出力ツリーのノードを編集することでテンプレートから非定型テストを実行できます。入力および出力は、デシジョン関数からのものです。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
テスト・テンプレートから非定型テストを実行するには:
7.2.5 特定のデシジョン関数に対するテストの実行方法
テストは、「デシジョン関数」タブから実行できます。このビューは、特定のデシジョン関数のテスト・スイートおよびテスト・ケースのみを表示します。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
特定のデシジョン関数のテストを実行するには:
- ルール・デザイナで、「デシジョン関数」タブをクリックします。
- クリックしてテスト・ケースを選択し、「テスト」ボタンをクリックします。
- 「デシジョン関数テスト・エディタ」ダイアログが表示されます。このダイアログは、テスト機能の単なるもう1つのビューです。
7.3 Business Process Composerでのルールのテスト
ルールは、Business Process Composerで設計する際にテストできます。
Business Process Composerの使用方法の詳細は、Oracle Fusion Middleware Oracle Business Process Composerでのビジネス・プロセスの開発のOracle Business Process Composerの概要に関する項を参照してください。
7.4 SOAコンポーザでのルールのテスト
ランタイムには、SOAコンポーザを使用してルールのリグレッション・テストを実行できます。これによって、ビジネス・ユーザーは、変更後のルールで既存の機能が変更されるかどうかをすばやくチェックできます。
図7-7は、SOAコンポーザの「テスト」タブを示しています。「テスト」タブは、デプロイ済コンポジットがあるか、SOAコンポーザ・セッション内である場合にのみ表示されます。「セッションの作成」をクリックしてセッションを開きます。
7.4.1 テスト・スイートとケースの作成および管理方法
1つ以上のテスト・ケースでテスト・スイートを作成できます。テスト・スイートは、個別のデシジョン関数に対してのみ定義できます。
デシジョン関数の詳細は、デシジョン関数の使用を参照してください。
フィールドおよび他のUIコントロールの詳細なドキュメントは、SOAコンポーザ内から「ヘルプ」、「このページのヘルプ」をクリックしてください。
テスト・スイートおよびケースを管理するには:
テスト・スイートおよびケースの設定が完了すると、実行可能になります。詳細は、「テスト・スイートまたはケースの実行方法」を参照してください。
7.4.2 テスト・テンプレートの作成方法
テスト・テンプレートを使用すると、入力および出力値を再使用して、それらのフィールドおよび値のテストを反復できます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、SOAコンポーザ内から「ヘルプ」、「このページのヘルプ」をクリックしてください。
テスト・テンプレートを作成するには:
- ルール・デザイナで、「テスト」タブをクリックします。
- ナビゲーション・ツリーで「テスト・モデル」をクリックします。「テスト・テンプレート」領域で、「+」をクリックして、新規テスト・テンプレートを作成します。
- 「名前」および「説明」を入力して、「デシジョン関数」を選択します。
- 「保存」をクリックします。
テスト・テンプレートから非定型テストを実行するには、「テスト・テンプレートからの非定型テストの実行方法」を参照してください。
7.4.3 テスト・スイートまたはケースの実行方法
テストを実行すると、新しいタブが開き、診断コメント、例外およびテスト結果が表示されます。テストは、スイート、複数のテスト・ケースまたは個別のテスト・ケースとして実行できます。テストは、RL生成を介して実行されます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、SOAコンポーザ内から「ヘルプ」、「このページのヘルプ」をクリックしてください。
1つのテスト・スイートまたはケースを実行するには:
「テスト・モデル」ツリーからテスト・スイートを選択して実行した場合、図7-11に示すように「デシジョン・トレース」タブが表示されます。
7.4.4 テスト・テンプレートからの非定型テストの実行方法
図7-12に示すように、入力および出力ツリーは、関連するデシジョン関数から入力および出力ファクトとともにロードされます。デシジョン関数でファクトを変更した場合、それらの変更は、入力および出力ファクトに自動的に同期されます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、SOAコンポーザ内から「ヘルプ」、「このページのヘルプ」をクリックしてください。
テスト・テンプレートから非定型テストを実行するには:
7.4.5 特定のデシジョン関数に対するテストの実行方法
図7-13に示すように、特定のデシジョン関数に対してテストを実行できます。
フィールドおよび他のUIコントロールの詳細なドキュメントは、JDeveloper内から「ヘルプ」を参照してください。
特定のデシジョン関数のテストを実行するには:
- 「デシジョン関数」タブをクリックし、リストから適切なデシジョン関数を選択します。
- 「テスト」フィールドで、ドロップダウンを使用して適切なテストを選択します。
- 「テスト」タブにテストが開きます。テストをクリックし、「実行」をクリックしてテストを実行します。
- 「結果」タブが表示されます。新しいタブをクリックして、テスト結果を表示します。
7.5 ルール関数を使用したデシジョン関数のテスト
デシジョン関数を作成し、そのデシジョン関数をOracle Business Rules関数を使用してルール・デザイナからコールすることで、ルールセットをテストできます。
Oracle Business Rules関数本体で、入力ファクトを作成し、デシジョン関数をコールし、デシジョン関数からのファクト出力を検証します。詳細は、「デシジョン関数の概要」および「Oracle Business Rules関数の概要」を参照してください。
Oracle Business Rules関数を使用してデシジョン関数をテストするには:
7.5.1 デシジョン関数のテストに関する必知事項
ルール・デザイナ内でOracle Business Rules関数を使用してデシジョン関数をテストできます。テスト関数を使用する際の注意事項は、次のとおりです。
-
テストOracle Business Rules関数に関連付けられているディクショナリに検証警告が含まれている場合は、「テスト関数」ボタンがグレー表示されます。「テスト関数」ボタンが表示されるのは、ディクショナリが警告なしに検証された場合のみです。
-
ロギングを有効化するために、
RL.
watch.all()
をコールできます。RL Language関数の詳細は、『Oracle Business Process Managementルール言語リファレンス』を参照してください。このマニュアルでは、RL.watch.all()
はRL Language関数watchAll()
の別名です。 -
前述の例のかわりに、次の例に示す関数本体を入力することもできます。
call RL.watch.all() assign new TestScore testScore = new TestScore() modify (testScore, name: "Bill Reynolds", testName: "Math Test", testScore: 81) assign new TestGrade testGrade = (TestGrade)DecisionFunction_1(testScore).get(0) return testGrade.grade == Grade.B
testScore
値が81
の場合、この関数は、「テストにパスしました」を返します。testScore
値が91
の場合、この関数は、「テストが失敗しました」を返します。この関数は
RL.watch.all()
を実行し、その出力を表示します。等級がB範囲である場合、ダイアログに「テストにパスしました」が表示されます。アサートされた等級がB範囲でない場合、ダイアログに「テストが失敗しました」が表示されます。
7.6 SOAコンポーザでのデシジョン・サービスのテスト
デシジョン・サービスを持つOracle Business Rulesを使用するBPMまたはSOAアプリケーションでは、Oracle Enterprise Manager Fusion Middleware Controlコンソールで、テスト用に自身のコンポジットのインスタンスを作成できる「Webサービスのテスト」ページを使用することによって、実行時にルールをテストできます。
自身のコンポジットの設計およびデプロイを終了した後にそのテスト・インスタンスを作成する方法の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSOAコンポジット・アプリケーションのテスト・インスタンスの開始に関する項を参照してください。
デシジョン・サービス実行の監査証跡を表示できます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のビジネス・ルール・トレースのモニタリングに関する項を参照してください。