Main Content

モデル カバレッジの種類

Simulink® Coverage™ では、複数の種類のカバレッジ解析を実行できます。

実行カバレッジ (EC)

実行カバレッジは最も基本的な形式のカバレッジです。各項目について、実行カバレッジはその項目がシミュレーション時に実行されたかどうかを判定します。

判定カバレッジ (DC)

判定カバレッジでは、モデルの判定点を表す要素 (Switch ブロックや Stateflow® ステートなど) を解析します。各項目について、判定カバレッジはその項目で通過したシミュレーション パス数の割合を特定します。

モデル カバレッジ レポートの判定カバレッジ データの例については、判定解析を参照してください。

条件カバレッジ (CC)

条件カバレッジでは、入力の論理組み合わせを出力するブロック (Logical Operator ブロックなど) と Stateflow 遷移を解析します。テスト ケースでフル カバレッジが得られるのは、モデル内で論理ブロックの各インスタンスへの入力と遷移での各条件が、シミュレーション中に少なくとも 1 回 true になり、かつシミュレーション中に少なくとも 1 回 false になる場合です。条件カバレッジ解析では、モデル内のブロックごとに、テスト ケースが当該のブロックを完全に網羅しているかどうかがレポートされます。

モデルのカバレッジを収集した結果、条件カバレッジが 100% にならない場合があります。たとえば、[コンフィギュレーション パラメーター] の [カバレッジ] ペインで [Simulink 論理ブロックをショートサーキットとして扱う] を選択して、論理ブロックをショートサーキットするよう指定した場合、そのブロックの条件カバレッジが 100% にならないことがあります。詳細については、MCDC 解析を参照してください。

モデル カバレッジ レポートの条件カバレッジ データの例については、条件解析を参照してください。

改良条件判定カバレッジ (MCDC)

Simulink Coverage ソフトウェアの改良条件判定カバレッジ解析は、判定カバレッジ機能と条件カバレッジ機能を拡張したものです。入力の論理組み合わせを出力するブロックと Stateflow 遷移の解析により、論理ブロック入力と遷移条件の独立性をテスト ケースがどの程度テストしているかを判定します。

  • ブロックの場合、他のどの入力にも依存していない、いずれかの入力の変化によりブロック出力も変化する場合、テスト ケースでフル カバレッジが得られます。

  • Stateflow 遷移の場合、どの条件でも、条件の変化による遷移が少なくとも 1 回発生していれば、テスト ケースでフル カバレッジが得られます。

モデルに含まれるブロックが、異なる種類の論理演算子と 12 を超える条件を保有する式を定義している場合、MCDC カバレッジを記録することができません。

Simulink Coverage の MCDC カバレッジでは、判定カバレッジや条件カバレッジが完全にならない場合があるため、判定カバレッジが 100% "でなくても" MCDC カバレッジを 100% 達成できるようになっています。

Simulink オブジェクトの一部は、MCDC カバレッジをサポートしますが、オブジェクトによっては条件カバレッジのみをサポートしたり、判定カバレッジのみをサポートしたりする場合があります。カバレッジの対象となるモデル オブジェクトの表は、どのオブジェクトがどの種類のモデル カバレッジの対象となるかを示しています。たとえば、Combinatorial Logic ブロックは判定カバレッジと条件カバレッジの対象になりますが、MCDC カバレッジの対象にはなりません。

モデルの MCDC カバレッジを 100% にするには、DO-178C/DO-331 標準の定義どおり、[コンフィギュレーション パラメーター] の [カバレッジ] ペインで、[構造カバレッジ レベル] として改良条件判定カバレッジ (MCDC)を選択します。

モデルのカバレッジを収集した結果、MCDC カバレッジが 100% にならない場合があります。たとえば、論理ブロックをショートサーキットするように指定した場合、そのブロックの MCDC カバレッジが 100% にならない可能性があります。

テスト ケースをそれぞれ独立して実行し、すべてのカバレッジ結果を累積すると、モデルが変更後の条件カバレッジおよび判定カバレッジの標準に準拠しているか確認することができます。DO-178C/DO-331 標準の詳細については、Using Model Advisor Checks for DO-178C/DO-331 Industry Standards (Simulink Check)を参照してください。

モデル カバレッジ レポートの MCDC カバレッジ データの例については、MCDC 解析を参照してください。累積されたカバレッジの結果の例については、累積カバレッジを参照してください。

循環的複雑度

モデルの循環的複雑度を計算するには、このメトリクスを使用します。循環的複雑度は、モデルの構造的複雑度の測定値です。モデルの複雑度の測定値は、統合されたロジックやエラー チェックなど、この解析で考慮されないコード機能が原因で、生成されたコードとは異なる場合があります。

モデル カバレッジでは、オブジェクト (ブロック、チャート、ステートなど) の循環的複雑度の計算に次の公式を使用します。

c=1N(on1)

N はオブジェクトが表す判定点の数、on は n 番目の判定点の結果の数です。計算では、ベクトル化演算または Multiport switch ブロックを単一の判定点として考慮します。Atomic サブシステムと Stateflow チャートに対しては、複雑度の値に 1 が加算されます。

この結果により、以下についてローカル循環的複雑度と集約循環的複雑度が得られます。

  • モデル

  • サブシステム

  • チャート

  • MATLAB® 関数

ローカル複雑度は、オブジェクトの階層レベルでの循環的複雑度です。集約循環的複雑度は、オブジェクトとその子孫の循環的複雑度です。

循環的複雑度は次のとおりです。

  • ライブラリ モデルでは動作しません。

  • マスク サブシステムの内容を解析します。

  • 非アクティブなバリアントは解析しません。

  • 指定されている場合、ライブラリにリンクされたブロックまたは参照モデルの内容を解析します。

  • アクセラレータ モードの参照モデルは解析しません。

モデル カバレッジ レポートの循環的複雑度の例については、モデル カバレッジ レポートの循環的複雑度を参照してください。コードの循環的複雑度の詳細については、循環的複雑度を参照してください。

ルックアップ テーブル カバレッジ

ルックアップ テーブル カバレッジ (LUT) では、1-D Lookup Table ブロックなど、入出力のテーブルの入力情報を出力し、テーブルのエントリ間を内挿するか、テーブルのエントリから外挿するブロックを調査します。ルックアップ テーブル カバレッジは、テーブル ルックアップがそれぞれの内挿間隔を使用する頻度を記録します。テスト ケースで各内挿および外挿間隔が少なくとも 1 回実行された場合、テスト ケースでフル カバレッジが得られます。カバレッジ レポートでは、モデル内の各ルックアップ テーブル ブロックごとに、ルックアップ テーブルの色付きマップが表示され、各内挿が示されます。n-D Lookup Table ブロックのブレークポイントの総数が 1,500,000 を超える場合、そのブロックのカバレッジは記録されません。

モデル カバレッジ レポートのルックアップ テーブル カバレッジ データの例については、n 次元ルックアップ テーブルを参照してください。

メモ

ルックアップ テーブル カバレッジの設定はシミュレーションの開始時にのみ行います。ルックアップ テーブル カバレッジに影響するパラメーターを実行時に調整しても、該当するブロックのカバレッジ設定は更新されません。

信号範囲カバレッジ

信号範囲カバレッジではモデル内の各ブロックでシミュレーション中に測定された信号値の最小値と最大値が記録されます。出力信号があるブロックのみが信号範囲カバレッジの対象となります。

Simulink Coverage では、制御信号 (あるブロックが別のブロックの実行を開始するために使用する信号) の信号範囲カバレッジは記録されません。制御信号を参照してください。

モデル内の信号の総数が 65535 を超えた場合や、モデル内の信号の幅が 65535 を超える場合、Simulink Coverage は信号範囲カバレッジを記録できません。

Simulink Coverage では、配列表記を使用することで、カバレッジ レポートでスカラー信号とベクトル信号が区別されます。モデルに非有界の可変サイズの信号が含まれている場合、単一の次元だけが非有界であっても、Simulink Coverage は信号範囲の集計された測定を報告します。非有界の配列とは、最大配列サイズが inf に設定された可変サイズの配列です。非有界の可変サイズの配列の詳細については、可変サイズのカスタマイズを参照してください。

モデル カバレッジ レポートの信号範囲カバレッジ データの例については、信号範囲解析を参照してください。

メモ

再利用可能なサブシステムまたは単一範囲のカバレッジをもつ Stateflow 構成の累積カバレッジを作成した場合、累積カバレッジの信号値の範囲は可能な限り最大の値になります。詳細については、再利用可能なサブシステムの累積カバレッジの取得を参照してください。

信号サイズ カバレッジ

信号サイズ カバレッジでは、モデル内のすべての可変サイズ信号の最小サイズ、最大サイズ、割り当てサイズが記録されます。レポートには、可変サイズの出力信号があるブロックのみが含まれます。可変サイズの信号が非有界の場合、割り当てサイズはカバレッジ レポートで - として表示され、sigsizeinfo によって inf として返されます。可変サイズの信号は、最大配列サイズが inf の場合に非有界です。

モデル内の信号の総数が 65535 を超えた場合や、幅が 65535 を超える信号がモデルにある場合には、信号サイズのカバレッジは記録されません。

モデル カバレッジ レポートの信号サイズ カバレッジ データの例については、可変次元信号の信号サイズ カバレッジを参照してください。

可変サイズ信号の詳細については、可変サイズの信号の基礎を参照してください。

オブジェクティブと制約カバレッジ

Simulink Coverage ソフトウェアにより、次の Simulink Design Verifier™ ブロックとコード生成用 MATLAB 関数で使用するモデル カバレッジ データが収集されます。

Simulink Design Verifier ブロックコード生成用 MATLAB 関数
Test Condition (Simulink Design Verifier)sldv.condition (Simulink Design Verifier)
Test Objective (Simulink Design Verifier)sldv.test (Simulink Design Verifier)
Proof Assumption (Simulink Design Verifier)sldv.assume (Simulink Design Verifier)
Proof Objective (Simulink Design Verifier)sldv.prove (Simulink Design Verifier)

Simulink Design Verifier ライセンスを保有していない場合でも、これらのブロックや関数があるモデルのモデル カバレッジを収集することはできますが、Simulink Design Verifier ソフトウェアでモデルを解析することはできません。

モデルに 1 つ以上の Simulink Design Verifier ブロックまたは関数を追加すると、次のことができるようになります。

  • Simulink Design Verifier 解析の結果をチェックし、生成されたテスト ケースを実行し、ブロックを使用して結果を観察する。

  • Test Objective ブロックを使用してモデルの要件を定義し、シミュレーション時に収集されたモデル カバレッジ データを使用して結果を検証する。

  • モデルを解析し、作成したテスト ハーネスを Test Objective ブロックでシミュレーションして、モデル カバレッジ データを収集する。

  • モデルを解析し、Proof Assumption ブロックを使用して Simulink Design Verifier により特定された反例を検証する。

Simulink Design Verifier のカバレッジを収集するように指定すると、以下のようになります。

  • Simulink Design Verifier ブロックおよび関数のカバレッジが収集されます。

  • Simulink Design Verifier ブロックにリンクする信号のデータ型がチェックされます。信号のデータ型が固定小数点型の場合、ブロック パラメーターも固定小数点型でなければなりません。信号のデータ型が固定小数点型でない場合、ブロック パラメーターのデータ型の変換が試行されます。ブロック パラメーターのデータ型を変換できない場合、エラーが報告されます。この場合、信号と一致するようにブロック パラメーターのデータ型を明示的に割り当てなければなりません。

  • モデルに Verification Subsystem ブロックがある場合、Verification Subsystem (Simulink Design Verifier) ブロックにある Simulink Design Verifier ブロックのカバレッジのみが記録されます。Verification Subsystem ブロック内のその他のブロックのカバレッジは記録されません。

Simulink Design Verifier のカバレッジ収集を指定していない場合、モデル内の Simulink Design Verifier ブロックのデータ型はチェックされず、カバレッジも収集されません。

モデル カバレッジ レポートの Simulink Design Verifier ブロックまたは関数のカバレッジ データの例については、Simulink Design Verifier カバレッジを参照してください。

整数オーバーフローで飽和カバレッジ

整数オーバーフローで飽和カバレッジでは、Abs ブロックのように、[整数オーバーフローで飽和] パラメーターが選択されているブロックを調べます。このパラメーターが選択されているブロックのみが整数オーバーフローで飽和カバレッジの対象となります。

整数オーバーフローで飽和カバレッジでは、ブロックが整数オーバーフローで飽和する回数を記録します。

ブロックが少なくとも 1 回整数オーバーフローで飽和し、かつ少なくとも 1 回飽和しない場合に、テスト ケースでフル カバレッジが得られます。

モデル カバレッジ レポートの整数オーバーフローで飽和カバレッジ データの例については、整数オーバーフローで飽和についての解析を参照してください。

関係演算子の境界カバレッジ

関係演算子の境界カバレッジは、明示的または暗黙的な関係演算を含むブロック、Stateflow グラフおよび MATLAB Function ブロックを検証します。

  • Relational Operator および If などのブロックは明示的な関係演算を含みます。

  • Abs および Saturation などのブロックは暗黙的な関係演算を含みます。

これらのモデル オブジェクトでは、シミュレーションで次の値を使用して関係演算がテストされているかどうかメトリクスによって記録されます。

  • 等しいオペランド値。

    関係演算子の境界カバレッジのこの部分は、両方のオペランドが整数または固定小数点数である場合のみに適用されます。

  • 特定の許容誤差によって異なるオペランド値。

    関係演算子の境界カバレッジのこの部分は、すべてのオペランドに適用されます。整数および固定小数点のオペランドの場合、許容誤差は固定されます。浮動小数点オペランドの場合は、事前定義された許容誤差を使用することも、独自の許容誤差を指定することもできます。

許容誤差値は、両方のオペランドのデータ型に応じて変更します。両方のオペランドのデータ型が同じ場合、許容誤差は次のルールに従います。

オペランドのデータ型許容誤差
singledouble などの浮動小数点

max(absTol, relTol* max(|lhs|,|rhs|))

  • absTol は、指定する絶対許容差値です。既定値は 1e-05 です。

  • relTol は、指定する相対許容誤差です。既定値は 0.01 です。

  • lhs は左オペランドで、rhs は右オペランドです。

  • max(x,y) は、x または y の大きい方を返します。

固定小数点最下位ビットに対応する値。詳細については、精度 (Fixed-Point Designer)を参照してください。精度値を検索するには、関数 lsb (Fixed-Point Designer) を使用します。
整数1
BooleanN/A
EnumN/A

2 つのオペランドの型が異なる場合、許容誤差はより厳格な型の規則に従います。オペランドの 1 つが boolean である場合、許容誤差は他のオペランドの規則に従います。厳格さは、次の順序で低くなっていきます。

  1. 浮動小数点

  2. 固定小数点

  3. 整数

両方のオペランドが固定小数点でも精度が異なる場合は、精度の値が小さい方のオペランドが許容誤差として使用されます。

浮動小数点データ型をもつ関係演算子の境界について、カバレッジ レポートは標準的な区間の表記法を使用します。つまり、大かっこ ([]) で含有を、丸かっこ (()) で除外を示します。たとえば、[-tol..0) を示すテーブルは、ステートメント value >= -tol && value < 0 を表します。

浮動小数点入力の関係演算子の境界カバレッジに対する絶対許容誤差および相対許容誤差の値は、[コンフィギュレーション パラメーター] ダイアログ ボックスの[カバレッジ] ペイン[カバレッジ メトリクス] セクションでこのメトリクスを選択するときに指定します。

詳細については、それぞれ以下を参照してください。