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" など) を入力します。終了したら、[適用] をクリックし、フィルター ファイルを保存します。ファイル ダイアログにより、このファイルの保存場所を指定するよう求められます。

既存のフィルター ファイルの再利用

一般化された規則をもつフィルター ファイルを共有して再適用し、同様の構成が含まれるさまざまなモデルのカバレッジ結果をフィルター処理します。

たとえば、既存のフィルター ファイル Filter_Tick.cvf は Stateflow の時相イベント tick をカバレッジ結果から除外する規則を取得します。このイベントが false になることはないため、Stateflow でイベントベースの時相論理に tick を使用するどのモデルにおいても、条件および MCDC のフル カバレッジを妨ぐことができます。

slvnvdemo_covfilt/Mode Logic にはそのような構成が含まれているため、フィルター ファイル Filter_Tick.cvf をモデルに適用できます。

この既存のフィルター ファイルを適用するには、カバレッジの結果エクスプローラー[適用済みのフィルター] ノードを右クリックし、[フィルターの読み込み] を選択します。表示されるファイル ダイアログで、Filter_Tick.cvf を選択して [開く] をクリックします。

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

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

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

protected division ライブラリ ブロックへの参照がどちらも Simulink キャンバスでグレー表示され、カバレッジ結果から除外されたことを示していることに注目してください。

[カバレッジ詳細] ウィンドウで内容をスクロールし、[カバレッジ解析からフィルター処理されたオブジェクト] というタイトルのセクションを確認します。このセクションには、除外された各要素とそれぞれに対応する根拠がリストされ、フィルター ファイルで整理されます。Filter_DivBy0Filter_Tick はどちらも適用されています。

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

上で使用したフィルター ファイルは多数の異なるモデルに幅広く適用される可能性のある一般化されたフィルターの規則を取得します。

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

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

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

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

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

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

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

新しいフィルターの規則が [フィルター エディター] で現在選択されているフィルター ファイルに追加されます。既定の設定では、この規則のモードが "Excluded" に設定されます。この規則の根拠を入力します ("unused config" など)。

終了したら、[適用] をクリックします。これにより、フィルター ファイルへの変更が保存され、モデルに表示されるカバレッジ結果が自動的に更新されます。Switchable config サブシステムがグレー表示され、カバレッジ結果から除外されたことを示していることに注目してください。

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

Simulink エディターで、Saturation ブロックをクリックし、[カバレッジの詳細] ウィンドウでカバレッジ結果を確認します。2 つの判定結果が達成されないことに注目してください。これは、Saturation ブロックの下限が 0、上限が 200 となっているためです。ただし、このブロックへの入力は 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 エディターで、[カバレッジ] アプリの [結果の確認] セクションに移動し、[カバレッジの強調表示] をクリックします。

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

Mode Logic チャート、time capture サブシステム、および Saturation ブロックにおける残りの未達カバレッジは不適切なテストを示しており、これらの要素をより徹底して実行する入力値をもつ追加のシミュレーションを使用して対処しなければなりません。

まとめ

カバレッジのフィルターは、現在のテストのコンテキストで完全に実行されることが予想または意図されていないモデルの要素を示すさまざまな方法を提供します。

実行する必要のないモデル オブジェクトおよびカバレッジ オブジェクティブの結果をフィルター処理すると、テスト可能でテストが必要な構成の未達カバレッジに集中できます。