13.16 COVERAGEプラグマ
COVERAGE
プラグマは、テストできないPL/SQLコードをカバレッジ用にマークします。これらのマークは、カバレッジ・メトリックの精度を高めます。
COVERAGE
プラグマは、PL/SQLソース・コードをマークして、適切にテストできないコードをカバレッジ用に示します。プラグマは特定のコード・セクションをマークします。実行不可能なコードをマークすることで、テストが実施された程度を評価するために使用されるカバレッジ・メトリックの質を高めます。
構文
coverage_pragma ::=
coverage_pragma_argument ::=
セマンティクス
coverage_pragma
COVERAGE
プラグマは、任意の宣言または文の前に記述できます。
coverage_pragma_argument
COVERAGE
プラグマの引数には、次のいずれかの値が必要です。
-
'NOT_FEASIBLE'
-
'NOT_FEASIBLE_START'
-
'NOT_FEASIBLE_END'
COVERAGE
が引数‘NOT_FEASIBLE’とともに記述されている場合、プラグマに続く最初の宣言または文の先頭を含む基本ブロック全体をマークします。
引数’NOT_FEASIBLE_START’を指定したCOVERAGE
プラグマを任意の宣言または文の前に記述できます。この後に、引数’NOT_FEASIBLE_END’を指定したCOVERAGE
プラグマを続ける必要があります。2番目のプラグマは、任意の宣言または文の前に記述できます。これは最初のプラグマと同じPL/SQLブロックに記述する必要があり、ネストしたサブプログラム定義に記述することはできません。
関連付けられたCOVERAGE
プラグマのペアは、最初のプラグマに続く最初の宣言または文の先頭を含む基本ブロックの先頭から、2番目のプラグマに続く最初の宣言または文を含む基本ブロックの最後まで、実行不可能な基本ブロックをマークします。
内側のサブプログラムの定義または宣言を範囲に含むCOVERAGE
プラグマは、そのサブプログラムのブロックを実行不可能としてマークしません。
例
例13-5 単一の基本ブロックにカバレッジのテスト実行不可能のマークを付ける
この例は、zおよびzl基本ブロックに対する代入に先行するプラグマCOVERAGE
の配置を示しています。これら2つの基本ブロックはカバレッジ計算で無視されます。最初のCOVERAGE
プラグマ(1としてマーク)はzに対する最初の代入を実行不可能としてマークし、2番目(2としてマーク)はzに対する3番目の代入をマークしています。いずれの場合も、影響を受ける基本ブロックは、識別子zから次のEND IF
までです。
IF (x>0) THEN
y :=2;
ELSE
PRAGMA COVERAGE (’NOT_FEASIBLE’); -- 1
z:=3;
END IF;
IF (y>0) THEN
z :=2;
ELSE
PRAGMA COVERAGE (’NOT_FEASIBLE’); -- 2
z :=3;
END IF;
例13-6 行範囲にカバレッジのテスト実行不可能のマークを付ける
この例では、行範囲全体を実行不可能としてマークしています。1つの行範囲に複数の基本ブロックを含めることができます。行範囲が、範囲の先頭で「NOT_FEASIBLE_START」引数を指定したプラグマCOVERAGE
を使用し、範囲の末尾で「NOT_FEASIBLE_END」引数を指定したプラグマCOVERAGE
を使用することにより、カバレッジの実行が可能ではないものとしてマークされています。ペアのCOVERAGE
プラグマは、すべてのブロックを実行不可能としてマークしています。
PRAGMA COVERAGE (’NOT_FEASIBLE_START’);
IF (x>0) THEN
y :=2;
ELSE
z:=3;
END IF;
IF (y>0) THEN
z :=2;
ELSE
z :=3;
END IF;
PRAGMA COVERAGE (’NOT_FEASIBLE_END’);
例13-7 ユニット全体または個別のサブプログラムにカバレッジのテスト実行不可能のマークを付ける
この例では、プロシージャfoo全体を実行不可能としてカバレッジ用にマークしています。サブプログラムの本体をすべて実行不可能としてマークすることで、このサブプログラムを完全に実行不可能としてマークしていることになります。
CREATE PROCEDURE foo IS
PRAGMA COVERAGE (’NOT_FEASIBLE_START’);
......
BEGIN
....
PRAGMA COVERAGE (’NOT_FEASIBLE_END’);
END;
/
例13-8 内部プログラムにカバレッジのテスト実行不可能のマークを付ける
この例は、外側のCOVERAGE
プラグマのペアがプロシージャinnerの内側のカバレッジに影響を与えないことを示しています。innerの本体の内側にあるCOVERAGE
プラグマ(1としてマーク)は、xに対する2番目の代入を実行不可能としてマークしています。引数‘NOT_FEASIBLE_END’を指定したプラグマが最後の行でなくても、プロシージャouterの本体全体が実行不可能としてマークされていることに注意してください。このプラグマは、プラグマに続く文を含む基本ブロックをマークし、そのブロックはプロシージャの最後まで続いています。
CREATE OR REPLACE PROCEDURE outer IS
PRAGMA COVERAGE ('NOT_FEASIBLE_START');
x NUMBER := 7;
PROCEDURE inner IS
BEGIN
IF x < 6 THEN
x := 19;
ELSE
PRAGMA COVERAGE ('NOT_FEASIBLE'); -- 1
x := 203;
END IF;
END;
BEGIN
DBMS_OUTPUT.PUT_LINE ('X= ');
PRAGMA COVERAGE ('NOT_FEASIBLE_END');
DBMS_OUTPUT.PUT_LINE (x);
END;
/
関連トピック
このドキュメント:
-
PLSQL_OPTIMIZE_LEVELコンパイル・パラメータの詳細は、PL/SQLユニットおよびコンパイル・パラメータを参照してください
その他のドキュメント:
-
PL/SQL基本ブロック・カバレッジを使用した品質維持の詳細は、Oracle Database開発ガイドを参照してください
-
DBMS_PLSQL_CODE_COVERAGEパッケージの使用に関する詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください