Main Content

未達カバレッジの解決

モデル カバレッジの結果を表示した後、モデルが 100% のカバレッジに達していないことを見つける場合があります。モデルで未達カバレッジを解決できます。

テスト ケースの追加によるカバレッジの改善

slvnvdemo_powerwindow モデルでは、And ブロック power_window_control_system/validate_passenger/check_up/allow_action の条件カバレッジが 75% になっています。最初の条件の true ケースが発生しなかったのは、モデル ルート レベルの Signal Editor ブロック Input[アクティブなシナリオ] パラメーターが [Driver] に設定されているためです。[アクティブなシナリオ][Passenger] に変更します。[カバレッジの解析] をクリックしてモデルを再度シミュレートします。

Simulink window after clicking the And block allow_action. The Coverage Details pane shows detailed coverage results for the block.

And ブロック allow_action では条件カバレッジが 100% となります。最初の条件は、595 個のタイム ステップで true、2797 個のタイム ステップで false でした。また、条件テーブルと MCDC テーブルの [T1] および [T2] リンクは、各オブジェクティブをテストするために使用されたテストにリンクされています。たとえば、最初の条件である true ケースは、テスト実行 2 [T2] で達成されていました。リンクをクリックして、レポートの [テスト集計] セクションにスクロールします。

カバレッジの結果エクスプローラーでのカバレッジ データの確認

カバレッジの結果エクスプローラーを使用して、カバレッジ データを確認することもできます。[カバレッジ] タブで、[結果エクスプローラー] をクリックします。実行データは左側のペインの [現在の累積データ] に示されます。[実行 1][実行 2] をクリックして、カバレッジ結果を比較します。

Side-by-side comparison of Run 1 and Run 2 coverage results summary in the Coverage Results Explorer.

[現在の累積データ] をクリックすると、これらの 2 つの実行の集計結果が示されます。

Coverage Results Explorer cumulative data view.

集計結果は、2 つの個々のテスト ケースよりも高いカバレッジ率を示してます。これはテスト ケースが一部のブロックで異なるオブジェクティブを達成しているためです。

カバレッジ結果のフィルター

カバレッジ レポートを解析して、モデルまたはテスト ケースを変更しただけでは修正できない未達カバレッジがあることを見つけた場合は、未達結果をフィルターして、未達カバレッジとして報告されないようにすることができます。カバレッジ結果をフィルターする理由として、次が考えられます。

  • ブロックが別のテスト スイートでテストされ、現在のカバレッジ解析に適用できない。

  • ブロックが、発生するはずがないと考えるエッジ ケースをキャッチすることを意図している。このタイプのモデル設計は "防御的コーディング" と呼ばれることもあります。

次の 2 つのタイプのカバレッジ フィルターがあります。

  • 対象外指定フィルター規則はモデル要素に適用でき、適用すると要素はカバレッジ解析で無視されます。対象外指定されたモデル要素は、選択したメトリクスに適用できない他の要素と同様に、強調表示されたモデルでグレー表示されます。

  • 正当化フィルター規則は、達成されないカバレッジ結果に適用できます。このフィルター規則を使用すると、Simulink® Coverage™ では、残りのモデル要素は解析できますが、正当化された結果は未達カバレッジとしてレポートされません。このフィルター規則により、モデル オブジェクトのカバレッジを、完全に対象外指定することなく改善できます。

And ブロック条件 1 の MCDC 結果が別のテスト スイートでテストされ、このケースに適用できないとします。結果を正当化して、これを未達カバレッジとしてレポートされないようにできます。

And ブロック allow_action をクリックして、カバレッジ レポートの関連セクションにスクロールします。TF ケースが発生しなかったため、MCDC 条件 C1 (allow_action In1) は不完全です。C1 (allow_action In1) MCDC 結果を正当化するには、[正当化規則を追加] アイコン をクリックします。

カバレッジの結果エクスプローラーで [フィルター エディター] ペインが開き、新しい無題のフィルター ファイルが示されます。フィルター ファイルには、指定された結果の正当化規則が含まれます。複数のフィルター規則を同じフィルター ファイルに追加できます。

The Filter Editor showing the new Untitled filter.

[名前] フィールドに、「slvnvdemo_powerwindow_filter」と入力します。[Filter Rules] の下で、[根拠] フィールドをダブルクリックし、「Tested in a different test suite」と入力します。[適用] をクリックして、ファイルを保存します。モデルとカバレッジ レポートが自動的に更新されて、結果が正当化されたことが示されます。

Simulink window after clicking on the And block. The docked coverage report shows the section of the report that details coverage results for the And block, and the C1 MCDC outcome is highlighted cyan to indicate that it is justified.

[カバレッジの詳細] ペインでは、正当化された結果がシアンで強調表示され、正当化の根拠にリンクします。[J1] をクリックすると、[カバレッジ解析からフィルターで除外されたオブジェクト] というタイトルのレポート セクションが示されます。レポートのこのセクションは、カバレッジ データに 1 つ以上のフィルターを適用した場合にのみ表示されます。

コマンド ライン情報

テストをプログラムで追加してカバレッジを集計するには、以下を入力します。

blockPath = [modelName,'/Input'];
set_param(blockPath,'ActiveScenario','Passenger')
simOut2 = sim(simIn);
covDataRun2 = simOut2.covData;
cvmodelview(covDataRun2);
aggregatedCovData = covData + covDataRun2;

カバレッジ結果をプログラムでフィルターするには、以下を入力します。

filt = slcoverage.Filter;
setFilterName(filt,'slvnvdemo_powerwindow_filter');
blockPath = [modelName,'/power_window_control_system/validate_passenger/check_up/allow_action'];
sel = slcoverage.MetricSelector(slcoverage.MetricSelectorType.MCDCOutcome,blockPath,1,1);
rule = slcoverage.FilterRule(sel,'Tested in a different test suite');
addRule(filt,rule);
save(filt,'slvnvdemo_powerwindow_filter')
aggregatedCovData.filter = 'slvnvdemo_powerwindow_filter';

関連するトピック