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;
/

関連トピック

このドキュメント:

その他のドキュメント: