ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

最上位モデル カバレッジ レポート

Simulink® Verification and Validation™ ソフトウェアでは、model_name_cov.html という最上位モデルのモデル カバレッジ レポートが必ず作成されます。このモデル カバレッジ レポートには以下のセクションがあります。

カバレッジ概要

カバレッジ概要セクションには、解析対象のモデルに関する以下の基本情報が表示されます。

  • モデル情報

  • シミュレーション最適化オプション

  • カバレッジ オプション

カバレッジ概要セクションには、以下の 2 つのサブセクションがあります。

  • Tests: 各テスト ケースの開始時間と終了時間およびシミュレーションの前に実行されたすべてのセットアップ コマンド。各テスト ケースの見出しには、cvtest コマンドを使用して指定されたテスト ケースのラベルが含まれています。

  • 概要: サブシステムの結果の概要。特定のサブシステムの詳細結果を表示するには、概要サブセクションでサブシステム名をクリックします。

詳細

詳細セクションには、モデル カバレッジの詳細結果が表示されます。詳細レポートの各セクションには、モデル内の各オブジェクトのテストで使用されたメトリックの結果の概要が表示されます。

また、次の手順でモデル要素の詳細サブセクションにアクセスすることもできます。

  1. Simulink 要素を右クリックします。

  2. コンテキスト メニューで [カバレッジ][レポート] を選択します。

フィルターされたオブジェクト

Filtered Objects セクションには、フィルターによりカバレッジの記録対象から除外されたモデル内のすべてのオブジェクトと、そのオブジェクトをフィルターした根拠が表示されます。フィルター規則により特定の種類のブロックをすべてフィルターするように指定された場合は、該当するブロックがすべて表示されます。

次の図では、複数のブロック、サブシステム、遷移がフィルターされています。protected division と protected division1 の 2 つのライブラリにリンクされたブロックではブロック ライブラリがフィルターされているため、これらのブロックもフィルターされています。

モデルの詳細

詳細セクションには、モデル全体の結果の概要が表示され、その後に要素の一覧が続きます。モデル要素名をクリックするとカバレッジ結果が表示されます。

次の図は、sldemo_fuelsys モデル例の詳細セクションを示しています。

サブシステムの詳細

各サブシステムの詳細セクションには、サブシステムのテスト カバレッジ結果の概要と、その中に含まれるサブシステムの一覧が表示されます。概要の後には、ブロック、チャート、MATLAB® 関数のセクションがあり、サブシステム内に判定点があるオブジェクトごとにセクションが 1 つずつあります。

次の図は、sldemo_fuelsys モデル例の Engine Gas Dynamics サブシステムのカバレッジ結果を示しています。

ブロック詳細

次の図は、sldemo_fuelsys モデル例の Engine Gas Dynamics サブシステムの Mixing & Combustion サブシステムにある MinMax ブロックの判定カバレッジ結果を示しています。

カバレッジが 100% でないモデルの階層構造の最初のブロックのブロック詳細セクションの最初にカバーされていないリンク要素が表示されます。最初のカバーされていないリンク要素には、カバレッジが 100% でない "次の" ブロックのレポートにあるブロック詳細セクションへのリンクがあります。

これより後のカバレッジが 100% でないブロックには、カバレッジが 100% でない前のブロックと次のブロックのレポートにあるブロック詳細セクションへのリンクがあります。

チャートの詳細

次の図は、sldemo_fuelsys モデル例の Stateflow® チャート control_logic のカバレッジ結果を示しています。

Stateflow チャートとそのオブジェクトに対するモデル カバレッジ レポートの詳細は、「Stateflow チャートのモデル カバレッジ」を参照してください。

MATLAB 関数と Simulink Design Verifier 関数のカバレッジの詳細

既定では、Simulink Verification and Validation でモデル内のすべての MATLAB 関数のカバレッジが記録されます。MATLAB 関数は MATLAB Function ブロック、Stateflow チャートまたは外部 MATLAB ファイルにあります。

MATLAB 関数に呼び出される関数 sldv.* および Simulink Design Verifier™ ブロックの Simulink Design Verifier カバレッジを記録するには、[カバレッジの設定] ダイアログ ボックス] の [カバレッジ] タブで [Simulink Design Verifier] を選択します。

この例では、MATLAB 関数 hFcnsInExternalEML のカバレッジの詳細が表示されます。この関数は 4 つの Simulink Design Verifier 関数を呼び出しています。この例では、hFcnsInExternalEML のコードは外部ファイルにあります。

この例では、次の関数の Simulink Design Verifier カバレッジの詳細も示しています。

カバレッジ結果では、カバレッジが 100% となるコードは緑色で表示されます。100% に満たないコードは赤で表示されます。

関数 hFcnsInExternalEMLsldv.* の呼び出しのカバレッジは次のとおりです。

  • 1 行目で、hFcnsInExternalEML の関数宣言が緑色で表示されています。これは、シミュレーションでこの関数が少なくとも 1 回実行されていることを示しています。fcn はシミュレーション中に hFcnsInExternalEML を 11 回呼び出しています。

    4 行目の sldv.assume(u1 > u2) のカバレッジは 0% です。これは、u1 > u2 が 1 回も真と評価されなかったためです。

  • 5 行目の sldv.condition(u1 == 0) カバレッジは 100% です。これは u1 == 0 が少なくとも 1 つのタイム ステップで真と評価されているためです。

  • 6 行目の switch u1 のカバレッジは 25% です。これは、switch ステートメントの 4 つの結果のうち 1 つ (case 0) だけがシミュレーションで発生したためです。

  • 17 行目の sldv.test(y > u1); sldv.test (y == 4) のカバレッジは 50% です。最初の sldv.test の呼び出しではカバレッジが 100% になっていますが、2 番目の sldv.test の呼び出しではカバレッジが 0% になっています。

MATLAB 関数のカバレッジの詳細は、MATLAB 関数のモデル カバレッジを参照してください。

Simulink Design Verifier 関数のカバレッジの詳細は、Simulink Design Verifier カバレッジを参照してください。

循環的複雑度

モデル カバレッジ レポートでは、循環的複雑度の数値を 2 か所に表示するように指定することができます。

  • [概要] セクションにはモデルの階層構造の各オブジェクトの循環的複雑度が表示されます。サブシステムまたは Stateflow チャートの場合、この数字にはすべての下位オブジェクトの循環的複雑度が含まれています。

  • 各オブジェクトの詳細セクションには、すべてのオブジェクトの循環的複雑度が個別に表示されます。

判定解析

判定解析表には、判定について起こり得る結果と、テスト シミュレーションごとの結果の発生回数が表示されます。発生しなかった結果は、赤色で強調表示された表の行に表示されます。

次の図は、sldemo_fuelsys モデル例の Engine Gas Dynamics サブシステムの Throttle & Manifold サブシステムにある Saturate ブロックの判定解析表を示しています。

目的のブロックを表示および強調表示するには、そのブロックの判定解析表があるセクションの最上部にあるブロック名をクリックします。

条件解析

条件解析表には、対応するブロックの入力端子ごとの真および偽の条件の発生回数が表示されます。

MCDC 解析

MC/DC 解析表には、対応するブロックにより表される MCDC 入力条件ケースと、レポートされたテスト ケースが条件ケースをどの程度網羅できているかが表示されます。

MC/DC 解析表の各行は、ブロックに対する特定の入力の条件ケースを表しています。ブロックの入力 n の条件ケースは、入力値を組み合わせたものです。入力 n は、条件ケースの "判定入力" と呼ばれています。入力 n の値を変更すると、ブロックの出力値も変わります。

MC/DC 解析表には、条件ケースを表す条件ケース式が表示されます。条件ケース式は次の性質がある文字列です。

  • 文字列内での文字の位置は入力端子番号に対応します。

  • 各位置の文字は入力値を表します(TtrueFfalse を表します)。

  • 太字は判定入力の値を表します。

たとえば、FTF は 3 つの入力があるブロックの条件ケースで、2 番目の入力が判定入力であることを示しています。

[判定/条件] 列は、入力条件ケースの判定入力を表します。[真の出力] 列は、ブロックが条件ケースの true 値を出力するための判定入力値を表しています。[真の出力] のエントリでは条件式 (たとえば FF) を使用して、ブロックのすべての入力の値が表示されます。判定変数の値は太字で表示されます。

式の前後のかっこは、指定された入力の組み合わせが、このレポートに記載されている最初 (または唯一) のテスト ケースでは発生しなかったことを表します。つまり、このテスト ケースは該当する条件ケースを網羅していないことになります。[偽の出力] 列は、ブロックが false 値を出力するための判定入力の値と、レポートの対象となる最初 (または唯一) のテスト ケース中に実際にその値が発生したかどうかを表しています。

[カバレッジの設定] ダイアログ ボックスで [Simulink 論理ブロックをショートサーキットして扱う] を選択すると、MC/DC カバレッジ解析ではショートサーキットされた入力が実際に発生したかどうかは検証されません。MC/DC 解析表の条件式 (TFxxx など) で x が使用されている場合、ショートサーキットされた入力がツールで解析されていないことを表しています。

この機能を有効にして、モデル カバレッジの収集時に論理ブロックがショートサーキットされている場合、このブロックのカバレッジが 100% にならない場合があります。

累積カバレッジ

[結果] タブで [ワークスペース変数の累積結果を保存] を選択し、[レポート] タブで [累積実行] を選択すると、各シミュレーションの結果が保存され、レポートに記録されます。

累積カバレッジ レポートでは、すべての表の一番右側の領域にある結果は、実行結果の合計値を反映しています。レポートは、最後の実行による追加カバレッジと、セッション内での過去のすべての実行により得られたカバレッジを簡単に比較できるように構成されています。

累積カバレッジ レポートには、以下の情報が表示されます。

  • Current Run: 現在完了したシミュレーションのカバレッジ結果。

  • Delta: 現在完了したシミュレーションで得られた累積カバレッジに追加されたカバレッジのパーセンテージ。以前のシミュレーションの累積カバレッジと現在のカバレッジがともに非ゼロの場合、新しいカバレッジが累積カバレッジに追加されなければ、デルタが 0 になることがあります。

  • Cumulative: 完了したばかりのシミュレーションを除くそれまでのシミュレーションでモデルについて収集されたカバレッジの合計。

slvnv_autopilot_test_harness モデルの 3 つのテスト ケースを実行すると、概要レポートには 3 番目のテスト ケースで得られた追加カバレッジと、最初の 2 つのテスト ケースで得られた累積カバレッジが表示されます。

累積カバレッジの判定解析表には判定結果を示すデータ列が 3 つあり、それぞれ現在の実行、前回の実行以降のデルタ、累積データを表しています。

条件解析表には列見出し #n T#n F があり、各テスト ケースの結果が表示されます。この表では Tot TTot F で累積結果を表しています。テスト ケースごとに、対応するブロックの各入力端子での真および偽の条件を特定できます。

MC/DC 解析の [#n True Out] および [#n False Out] 列には、各テスト ケースの条件ケースが表示されます。[真の出力合計] および [偽の出力合計] 列は累積結果を示しています。

n 次元ルックアップ テーブル

以下の対話型のチャートでは、ルックアップ テーブルの要素へのアクセス範囲の概要が示されます。この例では、2 つの Sine Wave ブロックにより x および y インデックスが生成され、乱数値が設定された 10 行 10 列の要素の 2-D Lookup Table ブロックにアクセスします。

このモデルでは、ルックアップ テーブル インデックスは各方向に 1、2、…10 の値です。Sine Wave 2 ブロックの位相は Sine Wave 1 ブロックと pi/2 ラジアンだけずれています。これにより、円周の x 値と y 値が生成されます。これらの値は、得られたルックアップ テーブル カバレッジを確認する際に表示されます。

このレポートには、ルックアップ テーブルの要素を表す 2 次元テーブルが表示されます。要素インデックスはセルの境界グリッド線 (各方向に 10 本ずつ) で表されます。ルックアップ テーブルがテーブル値の間で内挿する領域はセル領域として表されます。要素 1 の左と要素 10 の右の外挿領域は、テーブルの外周のセル (外周の境界線なし) で表されます。

各セルでテスト時に内挿 (または外挿) された値の数 ("実行回数") は、セルに設定された緑色の色調で表されます。緑色の色調の 6 つのレベルと、それぞれに対応する実行回数の範囲は、テーブルの右側に表示されます。

テーブルの各セルをクリックすると、セルのインデックスの場所とテスト時の具体的な実行回数を示すダイアログ ボックスが表示されます。次の例では、円の右端にある色付きのセルの内容を示しています。

選択したセルは赤色の輪郭で表示されます。また、テーブルの端にある外挿セルをクリックすることもできます。

太いグリッド線は、インデックス値に等しいブロック入力がシミュレーション時に少なくとも 1 回発生していることを示しています。境界線をクリックすると、そのインデックス値の具体的な発生回数が表示されます。

次のモデル例では、乱数値が設定された 10 × 10 × 5 の要素がある n-D Lookup Table ブロックを使用しています。

x および y の両方のテーブル軸に 1、2、…10 の各インデックスがあります。z 軸には 10、20、…50 の各インデックスがあります。ルックアップ テーブル値へのアクセスには、前の例で 2 つの Sine Wave ブロックにより生成された x および y インデックスと、Ramp ブロックにより生成された z インデックスを使用します。

シミュレーション後に、次のようなルックアップ テーブル レポートが表示されます。

リンク Force Map Generation を使用すると、2 次元テーブルの代わりに次のテーブルが表示されます。

3 次元ルックアップ テーブル ブロックのルックアップ テーブル カバレッジは複数の 2 次元テーブルのセットで表されます。

縦棒は厳密な z インデックス値を表しています。10, 20, 30, 40, 50。縦線が太線になっている場合、ブロック入力のうち少なくとも 1 つがシミュレーション時にその線が示すインデックス値と等しくなったことを表します。線をクリックすると、その線が表すインデックス値に対するカバレッジ レポートが表示されます。

どの次元のルックアップ テーブルに対しても、ルックアップ テーブル カバレッジのレポートを生成できます。4 次元テーブルのカバレッジは、前の例と同様に、複数の 3 次元のセットで表されます。さらに 5 次元テーブルは「3 次元のセット」のセットで表され、以下同様になります。

ブロック削減

どのモデル カバレッジ レポートでも、最初に Simulink の [ブロック削減] パラメーターのステータスが表示されます。次の例は、[ブロック削減を強制オフ] が設定されている場合を示しています。

次の例では、Simulink の [ブロック削減] パラメーターが有効になっていて、[ブロック削減を強制オフ] は設定されていません。

次のモデルでは、入力が定数 3 だけなので、シミュレーションでは MinMax1 ブロックが実行されません。

[ブロック削減を強制オフ] が設定されている場合、MinMax1 ブロックへの入力の最小値は常に 1 なので、このブロックのカバレッジ データはレポートに表示されません。

[ブロック削減を強制オフ] が設定されていない場合、削減されたブロックのカバレッジ データは表示されません。

関係演算子の境界

[カバレッジ] タブで、[関係演算子の境界] カバレッジ メトリックを選択すると、このカバレッジでサポートされる各モデル オブジェクトのモデル カバレッジ レポートに関係演算子の境界の表が作成されます。この表は、モデル オブジェクトに含まれる明示的または暗黙的な関係演算に適用されます。詳細は、以下を参照してください。

以下の表は、関係式 input1 <= input2 の関係演算子の境界カバレッジ レポートを示しています。表の表示は、オペランドのデータ型によって異なります。

整数

両方の演算子が整数である場合 (または一方の演算子が整数でもう一方が Boolean である場合)、表は次のように表示されます。

operand_1 <= operand_2 などの関係演算の場合は次のようになります。

  • 1 行目には、2 つのオペランドが operand_1 - operand_2 の形式で示されます。

  • 2 行目には、operand_1 - operand_2 が -1 と等しくなるシミュレーション中の回数が示されます。

  • 3 行目には、operand_1operand_2 と等しくなるシミュレーション中の回数が示されます。

  • 4 行目には、operand_1 - operand_2 が 1 と等しくなるシミュレーション中の回数が示されます。

固定小数点

オペランドの 1 つの型が固定小数点型で、他のオペランドが固定小数点または整数である場合、表は次のように表示されます。LSB は最下位ビットの値を表します。詳細は、「精度」を参照してください。2 つのオペランドの精度が異なる場合、精度の値が小さい方が使用されます。

operand_1 <= operand_2 などの関係演算の場合は次のようになります。

  • 1 行目には、2 つのオペランドが operand_1 - operand_2 の形式で示されます。

  • 2 行目には、operand_1 - operand_2-LSB と等しくなるシミュレーション中の回数が示されます。

  • 3 行目には、operand_1operand_2 と等しくなるシミュレーション中の回数が示されます。

  • 4 行目には、operand_1 - operand_2LSB と等しくなるシミュレーション中の回数が示されます。

浮動小数点

オペランドの 1 つの型が浮動小数点型の場合、表は次のように表示されます。tol は、入力値と指定した許容誤差を使用して計算された値を表します。許容誤差を指定しない場合、既定値が使用されます。詳細は、「関係演算子の境界カバレッジ」を参照してください。

operand_1 <= operand_2 などの関係演算の場合は次のようになります。

  • 1 行目には、2 つのオペランドが operand_1 - operand_2 の形式で示されます。

  • 2 行目には、operand_1 - operand_2 に範囲 [-tol..0] 内の値が含まれるシミュレーション中の回数が示されます。

  • 3 行目には、operand_1 - operand_2 に範囲 (0..tol] 内の値が含まれるシミュレーション中の回数が示されます。

この表の表示は、ブロックの関係演算子に従って変更します。関係演算子に応じて、0 と等しい operand_1 - operand_2 の値は、次のいずれかになります。

  • 関係演算子の境界カバレッジから除外される。

  • 関係演算子の境界の上の領域に含まれる。

  • 関演算子の境界の下の領域に含まれる。

Relational Operatorレポートの形式説明
==[-tol..0)0 は除外されます。
(0..tol]
!=[-tol..0)0 は除外されます。
(0..tol]
<=[-tol..0]0 は関係演算子の境界の下の領域に含まれます。
(0..tol]
<[-tol..0)0 は関係演算子の境界の上の領域に含まれます。
[0..tol]
>=[-tol..0)0 は関係演算子の境界の上の領域に含まれます。
[0..tol]
>[-tol..0]0 は関係演算子の境界の下の領域に含まれます。
(0..tol]

0 は <= の場合は関係演算子の境界の下に含まれますが、< の場合は関係演算子の境界の上に含まれます。この規則は判定カバレッジと一致します。次に例を示します。

  • 関係式 input1 <= input2 では、input1input2 以下の場合判定は真です。<= はグループ化されます。したがって、0 は関演算子の境界の下の領域に含まれます。

  • 関係式 input1 < input2 では、input1input2 未満の場合にのみ判定は真です。>= はグループ化されます。したがって、0 は関演算子の境界の上の領域に含まれます。

整数オーバーフローで飽和についての解析

[カバレッジ] タブで [整数オーバーフローで飽和] カバレッジ メトリックを選択すると、モデル カバレッジ レポートに Saturation on Overflow analyzed 表が作成されます。選択した [整数オーバーフローで飽和] パラメーターで各ブロックの表が作成されます。

Saturation on Overflow analyzed 表には、ブロックが整数オーバーフローで飽和した回数が表示され、真判定を示します。ブロックが整数オーバーフローで飽和していない場合、表は偽判定を示します。発生しなかった結果は、赤色で強調表示されたテーブル行に表示されます。

次の図は、sldemo_fuelsys モデル例の Engine Gas Dynamics サブシステムの Mixing & Combustion サブシステムにある MinMax ブロックの Saturation on Overflow analyzed 表を示しています。

目的のブロックを表示および強調表示するには、そのブロックの Saturation on Overflow analyzed 表があるセクションの最上部にあるブロック名をクリックします。

信号範囲解析

[信号範囲] カバレッジが選択されている場合、モデル カバレッジ レポートの最後に Signal Range Analysis セクションが作成されます。このセクションには、シミュレーション時に測定されたモデルの出力信号ごとの信号値の最大値と最小値が表示されます。

Signal Range Analysis レポートに簡単にアクセスするには、モデル カバレッジ レポートの最上部にあるスクロールしない領域の [シグナル範囲] リンクを使用します。sldemo_fuelsys モデル例レポートでの例を以下に示します。

各ブロックは階層構造で示されていて、子ブロックは親ブロックの直下に表示されます。信号範囲レポートでは各ブロック名がリンクになっています。たとえば、EGO sensor リンクを選択すると、このブロックが元のブロック線図内で強調表示されます。

可変次元信号の信号サイズ カバレッジ

[信号サイズ]を選択すると、モデル カバレッジ レポートの信号範囲データの後に [可変信号の幅] セクションが作成されます。このセクションには、モデルの出力端子のうち可変サイズの信号がある端子のすべてについて、信号サイズの最大値と最小値が表示されます。また、Simulink によりその信号に割り当てられたメモリの量が表示されます。この値はシミュレーション時の測定値です。このリストには、シミュレーション中にサイズが変動しない信号は表示 "されません"。

次の例では、カバレッジ レポートに [可変信号の幅] セクションが表示されています。この例では、Abs ブロックの信号サイズは 2 ~ 5 の間で変動していて、割り当てられているメモリは 5 です。

各ブロックは階層構造で示されていて、子ブロックは親ブロックの直下に表示されます。[可変信号の幅] リストに表示されているブロック名はそれぞれリンクになっています。リンクをクリックすると、Simulink エディターで該当するブロックが強調表示されます。解析後、可変サイズの信号の線幅が太くなって表示されます。

Simulink Design Verifier カバレッジ

[Simulink Design Verifier] を選択すると、解析によりモデル内のすべての Simulink Design Verifier ブロックのカバレッジ データが収集されます。

この仕組みの例は、sldvdemo_debounce_testobjblks モデルを参照してください。

このモデルには、2 つの Test Objective ブロックがあります。

  • True ブロック: 値が 2 である信号のプロパティを定義します。

  • Edge ブロック: Masked Objective サブシステム内にあります。このブロックは、Masked Objective サブシステムの AND ブロックの出力が 2 から 1 に変わるプロパティを表します。

Simulink Design Verifier ソフトウェアはこのモデルを解析し、特定のテスト オブジェクティブを達成するテスト ケースがあるハーネス モデルを生成します。元のモデルがこれらのオブジェクティブを達成しているか確認するには、ハーネス モデルのシミュレーションを実行してモデル カバレッジ データを収集します。モデル カバレッジ ツールは、Test Objective ブロックで指定した間隔内にある判定点または値を解析します。

この例では、信号値が少なくとも 1 回は 2 になっているため、カバレッジ レポートでは True ブロックのカバレッジが 100% となっています。この信号値は、14 のタイム ステップのうち 6 つで 2 となっています。

Edge ブロックへの入力信号の値は、14 のタイム ステップのうちの 1 つで True となっています。

この情報は役に立ちましたか?