Main Content

カバレッジ フィルターの作成と使用

この例では、Simulink® Coverage™ のモデル カバレッジ フィルターを使用してカバレッジ解析からモデル要素を除外し、レポート内で未達カバレッジを正当化する方法を示します。

カバレッジ フィルター

検証プロセス中に、フル モデル カバレッジの妨げになる構成がモデルにいくつか含まれていることがあります。たとえば、テストされておらず、検証プロセスには関係のないコントローラー用のドライバーが含まれているサブシステムなどです。このサブシステムはカバレッジ結果から除外できます。

また、特定の判定点への到達など、ブロックの一部の特性を実行しなければならないテスト基準がある可能性があります。このブロックに対するカバレッジの結果をすべて達成するのは不可能であり、これらの未達成の結果をテストで実行する必要がなかった場合、未達カバレッジを正当化できます。

これらの構成を除外または正当化してカバレッジ結果でフィルター処理することにより、テスト可能でテストが必要な未達カバレッジの他の要素に集中できます。

カバレッジ フィルターは CVF ファイルに保存されます。各フィルターは、特定のモデル オブジェクトまたは個別のカバレッジ オブジェクティブ結果を除外または正当化する規則で構成されます。複数のフィルター ファイルをモデルのカバレッジ結果に適用できます。また、複数のモデルで同じフィルター ファイルを使用できます。

モデルのシミュレーションの前後どちらでも、カバレッジ フィルターを作成して適用できます。

モデルを開く

この例では、カバレッジ結果から一般的なパターンをフィルターで除外した例を含む slvnvdemo_covfilt モデルを使用します。

open_system('slvnvdemo_covfilt');

シミュレーション前にカバレッジ結果から除外する項目を指定する

ライブラリ ブロック slvnvdemo_covfilt_lib/protected division はゼロ除算を防止します。このコンテキストでこのブロックのすべてのインスタンスを完全に網羅する必要がないか目的としていないと判断した場合は、このブロックをカバレッジ結果から除外できます。

Simulink エディターで 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_DivBy0Filter_Tick の両方がリストされることに注目してください。

フィルターで除外されたカバレッジ結果のシミュレーションと確認

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

protected division ライブラリ ブロックへの参照がどちらも Simulink キャンバスでグレー表示され、除外規則により Simulink Coverage がこれらを解析しないことを示します。

[カバレッジの詳細] ペインの [カバレッジ解析からフィルターで除外されたオブジェクト] セクションに、除外された各要素とそれぞれに対応する根拠がリストされます。Filter_DivBy0Filter_Tick の両方がここに表示されています。

新規フィルター ファイルの作成

このモデルにのみ関連するフィルターの規則を取得する別のフィルター ファイルを作成します。

"カバレッジの結果エクスプローラー" で、[適用済みのフィルター] ノードを右クリックし、[新規フィルター] を選択します。

このフィルター ファイルの名前と説明を入力します。[適用] をクリックし、ファイルの保存場所を指定します。

シミュレーション後のカバレッジ結果からの項目の除外

フィルターの規則を作成して、シミュレーション後にカバレッジ結果に適用することもできます。これにより、シミュレーションを再実行することなく、カバレッジ結果を確認し、フィルターを作成または調整し、新しいカバレッジ レポートを生成できます。

たとえば、Switchable config サブシステムを考えます。これは、定数値を使用して、サブシステムのイネーブル端子を駆動し、モデル コンフィギュレーションを変更する一般的な設計パターンをモデル化します。しかし、イネーブル ロジックとサブシステムの内容により、未達カバレッジとなる場合があります。このモデルではこの構成を使用しないため、カバレッジ解析から除外できます。

Simulink エディターで、Switchable config サブシステムをクリックします。[カバレッジの詳細] ペインに、このサブシステムのカバレッジの詳細が表示されます。[正当化または排除] リンクをクリックします。

リンクによって新しいフィルターの規則が作成され、[フィルター エディター] ペインで現在選択されているフィルター ファイルに追加されます。[フィルター ルール] セクションの [モード] 列の既定の設定は Excluded です。この規則の根拠を入力します (「unused config」など)。

[適用] をクリックして、フィルター ファイルに変更を保存し、カバレッジ結果を更新します。Switchable config サブシステムがグレー表示され、カバレッジ結果からフィルター処理によって除外されたことを示します。

カバレッジ結果の個々のオブジェクティブ結果の正当化

Simulink エディターで、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 は 2 つの条件結果、7 つの判定結果、1 つの MCDC 結果についてデッド ロジックを検出し、正当化します。

このフィルター ファイルの名前と説明を指定します。終了したら、[適用] をクリックします。ファイル ダイアログで、このフィルター ファイルの保存場所を指定します。

"Simulink Design Verifier の結果" ウィンドウを閉じます。

フィルター処理されたカバレッジ結果の確認

Simulink エディターの [カバレッジ] タブの [結果の確認] セクションで、[カバレッジの強調表示] を選択します。

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

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