Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

結果からカバレッジの詳細を取得

スクリプトを使用したカバレッジ データの解析

この例では、スクリプトを使用してカバレッジ データを読み込み、解析し、クエリする方法を説明します。

カバレッジ データの読み込み

モデルを読み込み、cvloadを使用してファイル covdata.cvt から保存されたカバレッジ データを復元します。データおよびテスト設定は cell 配列で取得されます。テスト設定は、そのカバレッジ データが作成されたシミュレーションからのパラメーターを含む cvtest オブジェクトに格納されています。

load_system('slvnvdemo_ratelim_harness');
[savedSettings,savedData] = cvload('covdata');
savedData = savedData{1};

カバレッジ データ オブジェクトからの情報の抽出

decisioninfoを使用して、ブロック パスまたはブロック ハンドルからカバレッジ情報を取得します。出力は、単一のモデル オブジェクトの達成された結果と全体の結果を含むベクトルです。

subsysCov = decisioninfo(savedData,...
                   'slvnvdemo_ratelim_harness/Adjustable Rate Limiter')
subsysCov =

     5     6

decisioninfo を使用して、達成されたカバレッジの割合を判別します。

percentCov = 100 * (subsysCov(1)/subsysCov(2))
percentCov =

   83.3333

decisioninfo を使用して、Apply Limited Gain と呼ばれる switch ブロックの判定カバレッジ データを抽出するかどうかを指定します。判定と結果を含む構造体が返されます。

[blockCov,desc] = decisioninfo(savedData, ...
         'slvnvdemo_ratelim_harness/Adjustable Rate Limiter/Apply limited gain');
descDecision = desc.decision;
outcome1 = desc.decision.outcome(1)
outcome2 = desc.decision.outcome(2)
outcome1 = 

  struct with fields:

               text: 'false (out = in3)'
     executionCount: 0
         executedIn: []
         isFiltered: 0
        isJustified: 0
    filterRationale: ''


outcome2 = 

  struct with fields:

               text: 'true (out = in1)'
     executionCount: 101
         executedIn: []
         isFiltered: 0
        isJustified: 0
    filterRationale: ''

decisioninfo 出力から、false の場合の executionCount フィールドが 0 の値であるため、Apply Limited Gain と呼ばれる switch ブロックが false になることはなかったことがわかります。この動作が想定される場合で、かつテストでこの場合を実行する意図がなかった場合、slcoverage.Filterクラスを使用してフィルターの規則を追加してこの未達カバレッジを正当化できます。

最初に、フィルター対象とするブロック インスタンスをクエリします。これは、不完全なカバレッジを受け取った 1 つのブロック インスタンスをフィルター処理することだけが必要なのであって、そのブロック タイプのすべてのインスタンスをフィルター処理する必要はないためです。次に、slcoverage.BlockSelectorクラスを BlockInstance セレクター タイプと共に使用して、フィルター処理する 1 つのブロック インスタンスを特定します。

id = getSimulinkBlockHandle('slvnvdemo_ratelim_harness/Adjustable Rate Limiter/Apply limited gain');
sel = slcoverage.BlockSelector(slcoverage.BlockSelectorType.BlockInstance,id);

slcoverage.Filterクラスおよびslcoverage.FilterRuleクラスを使用して、フィルター オブジェクトとフィルターの規則を作成します。

filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'Edge case',slcoverage.FilterMode.Justify);

addRule メソッドを使用して、規則をフィルターに追加します。次に、新しいフィルター ファイルを save メソッドを使用して保存します。

filt.addRule(rule);
filt.save('blfilter');

元のオブジェクトから新しい cvdata オブジェクトを作成し、それに対してフィルター ファイルを適用します。フィルターされたカバレッジ データに対して decisioninfo を使用して、正当化されたオブジェクティブが達成としてカウントされているため、100% の判定カバレッジとなっていることを確認します。

FilteredData = savedData;
FilteredData.filter = 'blfilter';
newCov = decisioninfo(FilteredData,...
                   'slvnvdemo_ratelim_harness/Adjustable Rate Limiter')
percentNewCov = 100 * (newCov(1)/newCov(2))
newCov =

     6     6


percentNewCov =

   100

カバレッジ情報関数

カバレッジ データを収集した後、次の関数を使用して cvdata オブジェクトから特定のカバレッジ情報を抽出できます。これらの関数を使用すると、モデル内のブロック、サブシステム、Stateflow® チャートまたはモデル自体について指定したカバレッジ情報を取得できます。

cvmodelview を使用して、Simulink モデルでカバレッジの強調表示をオンにできます。cvhtml を使用して、カバレッジ レポートを表示することもできます。

これらの関数を使用する例については、カバレッジ データから詳細な情報を抽出を参照してください。

参考

| | |

関連するトピック