カバレッジ フィルターの作成と使用
この例では、カバレッジ フィルターを使用してカバレッジ解析からモデル要素を除外し、レポート内で未達カバレッジを正当化する方法を示します。
カバレッジ フィルター
検証プロセス中に、フル モデル カバレッジの妨げになる構成がモデルにいくつか含まれていることがあります。たとえば、テストされておらず、検証プロセスには関係のないコントローラー用のドライバーが含まれているサブシステムなどです。このサブシステムはカバレッジ結果から除外できます。
また、特定の判定点への到達など、ブロックの一部の特性を実行しなければならないテスト基準がある可能性があります。このブロックに対するカバレッジの結果をすべて達成するのは不可能であり、これらの未達成の結果をテストで実行する必要がなかった場合、未達カバレッジを正当化できます。
これらの構成を除外または正当化してカバレッジ結果でフィルター処理することにより、テスト可能でテストが必要な未達カバレッジの他の要素に集中できます。
カバレッジ フィルターは CVF ファイルに保存されます。各フィルターは、特定のモデル オブジェクトまたは個別のカバレッジ オブジェクティブ結果を除外または正当化する規則で構成されます。複数のフィルター ファイルをモデルのカバレッジ結果に適用できます。また、複数のモデルで同じフィルター ファイルを使用できます。
モデルのシミュレーションの前後どちらでも、カバレッジ フィルターを作成して適用できます。
モデルを開く
この例では、slvnvdemo_covfilt モデルを使用します。このモデルには、モデル カバレッジの完成を妨げる構成がいくつか含まれています。これらの構成にフィルターを適用してカバレッジ結果から除外することにより、実行中のテストにおける関連性がより高い未達カバレッジ要素に集中できます。
open_system('slvnvdemo_covfilt');
シミュレーション前にカバレッジ結果から除外する項目を指定する
ライブラリ ブロック slvnvdemo_covfilt_lib/protected division はゼロ除算を防止します。このコンテキストでこのブロックのすべてのインスタンスをテストにて完全に網羅する必要がないか目的としていないと判断した場合は、このブロックをカバレッジ結果から除外できます。
コンテキスト メニューからカバレッジ設定を変更するには、まずカバレッジ アナライザー アプリを開く必要があります。[アプリ] タブで、[カバレッジ アナライザー] をクリックします。モデルで protected division ライブラリ ブロックを右クリックし、[ライブラリ参照: slvnvdemo_covfilt_lib/protected division の排除] をクリックして、ライブラリへのすべての参照をフィルターで除外します。コンテキスト メニューの各ボタンには、実行内容を説明するツールヒントが表示されます。

"カバレッジの結果エクスプローラー" の [フィルター エディター] ペインが開きます。"カバレッジの結果エクスプローラー" によって新規フィルター ファイル (既定では、名前は Untitled) が作成され、ライブラリ ブロックへのすべての参照を除外するフィルターの規則が追加されます。

[名前] および [説明] フィールドを使用して、新規フィルター ファイルの名前と説明を指定します。表で、新しい規則の [根拠] フィールドをダブルクリックし、このブロックを除外する理由を説明するテキスト (「division by zero protection」など) を入力します。[適用] をクリックし、フィルター ファイルを保存します。ファイル ダイアログにより、このファイルの保存場所を指定するように求められます。

既存のフィルター ファイルの再利用
類似の構成を含むモデルがある場合、1 つのフィルター ファイルを複数のモデルで使用できます。
たとえば、フィルター ファイル Filter_Tick.cvf は Stateflow® の時相イベント tick をカバレッジ結果から除外します。このイベントが false になることはないため、Stateflow でイベントベースの時相論理に tick を使用するどのモデルにおいても、条件および MCDC のフル カバレッジが妨げられます。
slvnvdemo_covfilt/Mode Logic にはこの構成が含まれているため、フィルター ファイル Filter_Tick.cvf をモデルに適用できます。
この既存のフィルター ファイルを適用するには、"カバレッジの結果エクスプローラー" で [適用済みのフィルター] ノードを右クリックし、[フィルターの読み込み] を選択します。ファイル ダイアログで、Filter_Tick.cvf を選択して [開く] をクリックします。

[適用済みのフィルター] に Filter_DivBy0 と Filter_Tick の両方がリストされることに注目してください。

フィルターで除外されたカバレッジ結果のシミュレーションと確認
[実行 (カバレッジ)] ボタンをクリックしてモデルのシミュレーションを行い、カバレッジを記録します。シミュレーションが完了すると、Simulink® Coverage™ でカバレッジ結果を含むモデルが強調表示され、[カバレッジの詳細] ペインが開きます。

protected division ライブラリ ブロックへの参照がどちらも破線の境界線で囲まれたグレーになり、除外規則により Simulink Coverage でこれらが解析されなかったことが示されます。
[カバレッジの詳細] ペインの [カバレッジ解析からフィルターで除外されたオブジェクト] セクションに、除外された各要素とそれぞれに対応する根拠がリストされます。Filter_DivBy0 と Filter_Tick の両方がここに表示されています。
新規フィルター ファイルの作成
このモデルにのみ関連するフィルターの規則を取得する別のフィルター ファイルを作成します。
"カバレッジの結果エクスプローラー" で、[適用済みのフィルター] ノードを右クリックし、[新規フィルター] を選択します。

このフィルター ファイルの名前と説明を入力します。この例では、名前を slvnvdemo_covfilt_Filter、説明を Filter rules specific to slvnvdemo_covfilt model に設定します。[適用] をクリックし、ファイルの保存場所を指定します。

シミュレーション後のカバレッジ結果からの項目の除外
フィルターの規則を作成して、シミュレーション後にカバレッジ結果に適用することもできます。これにより、シミュレーションを再実行することなく、カバレッジ結果を確認し、フィルターを作成または調整し、新しいカバレッジ レポートを生成できます。
たとえば、Switchable config サブシステムを考えます。これは、定数値を使用して、サブシステムのイネーブル端子を駆動し、モデル構成を変更する一般的な設計パターンをモデル化します。しかし、イネーブル ロジックとサブシステムの内容により、未達カバレッジとなる場合があります。このモデルではこの構成を使用しないため、カバレッジ解析から除外できます。
[カバレッジの詳細] ペインから新しいフィルター規則を追加すると、Simulink Coverage はその新しいフィルター規則を、現在選択しているフィルター ファイルに追加します。新しいフィルター規則を作成するには、まず [適用済みのフィルター] をクリックします。

Simulink エディターで、Switchable config サブシステムをクリックします。[カバレッジの詳細] ペインに、このサブシステムのカバレッジの詳細が表示されます。[正当化または排除] リンクをクリックします。[カバレッジ フィルターの選択] ダイアログ ボックスが開くので、[<新規フィルター ファイルの作成>] をクリックします。


新しいフィルター ファイルの名前と説明を入力します。[フィルター規則] セクションに、この規則の根拠を入力します (unused config など)。

[適用] をクリックして、フィルター ファイルに変更を保存し、カバレッジ結果を更新します。

Switchable config サブシステムが、実線の境界線で囲まれた赤色ではなく、破線の境界線で囲まれたグレーになり、フィルターによってカバレッジ結果から除外されたことが示されます。
カバレッジ結果の個々のオブジェクティブ結果の正当化
Simulink エディターで、Saturation という名前の Saturation ブロックをクリックし、[カバレッジの詳細] ペインでカバレッジ結果を確認します。Saturation ブロックの下限が 0、上限が 200 となっているため、2 つの判定結果が達成されていません。ただし、このブロックへの入力は rate 信号で、これは 0 以下になることはありません。したがって、Saturation ブロックの下限は完全には実行されないため、対応する判定結果を正当化できます。
判定 input > lower limit に対する偽の結果の横にある [正当化規則を追加] アイコン
をクリックします。

"カバレッジの結果エクスプローラー" により、新しいフィルターの規則が [フィルター エディター] ペインで現在選択されているフィルター ファイルに追加されます。正当化の根拠を指定します (rate > 0)。
[適用] をクリックして、フィルター ファイルを保存し、カバレッジ結果を更新します。

[カバレッジの詳細] ペインでは、Saturation ブロックの正当化された結果が薄い青で表示され、根拠へリンクされることに注目してください。判定 input >= upper limit の真の結果をフィルターで除外しておらず、解析がこの結果を実行するのに不十分であるため、Saturation ブロックにはまだ未達カバレッジがあり赤色のままになります。

Simulink Design Verifier を使用したデッド ロジックのフィルター規則の生成
場合によっては、デッド ロジックで、関連付けられたカバレッジ オブジェクティブが非達成であるために未達カバレッジが発生することがあります。このロジックがモデルから削除すべきでない要素を対象としている場合、これらの未達カバレッジ結果を正当化できます。
Simulink Design Verifier™ ライセンスがある場合、デッド ロジックに対する正当化フィルター規則を自動的に作成できます。
カバレッジの結果エクスプローラーで、[適用済みのフィルター] ノードを選択します。[フィルター エディター] ペインで、[デッド ロジックに対する正当化フィルター規則を作成 (Simulink Design Verifier を使用)] を選択します。

このオプションは Simulink Design Verifier™ を使用してデッド ロジックについてモデルを解析します。Simulink Design Verifier により新規フィルターが作成され、正当化規則が対応するそれぞれのカバレッジ結果に追加されます。

Simulink Design Verifier は 2 つの条件結果、7 つの判定結果、1 つの MCDC 結果についてデッド ロジックを検出し、正当化します。
このフィルター ファイルの名前と説明を指定します。この例では、名前を slvnvdemo_covfilt_DeadLogic、説明を Justify dead logic in slvnvdemo_covfilt model に設定し、[適用] をクリックします。ファイル ダイアログで、このフィルター ファイルの保存場所を指定します。
"Simulink Design Verifier の結果" ウィンドウを閉じます。
R2026a では、カバレッジ レポートからデッド ロジックの検出解析を開始することもできます。詳細については、Identify and Resolve Missing Coverage Caused by Dead Logicを参照してください。
フィルター処理されたカバレッジ結果の確認
Simulink エディターの [カバレッジ] タブの [結果の確認] セクションで、[カバレッジの強調表示] を選択します。

この例の 4 つのフィルターを適用すると、シミュレーションはこのモデルに対して 100% の条件カバレッジ、63% の判定カバレッジ、75% の実行カバレッジを達成します。カバレッジ結果には MCDC の対象となるモデル オブジェクトが含まれなくなるため、カバレッジ レポートにはこのメトリクスはリストされません。カバレッジ フィルター Filter_Tick にはレポートから結果を除外する除外規則が含まれているため、デッド ロジック解析で除外された MCDC の結果はカバレッジ レポートに表示されません。

Mode Logic チャート、time capture サブシステム、および Saturation ブロックにおける残りの未達カバレッジは不適切なテストを示しています。このタイプの未解決のカバレッジは、テストを拡張してこれらのモデル要素をより徹底して実行することで対処できます。
参考
slcoverage.Filter | slcoverage.FilterRule