Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

コード カバレッジ レポート

[SIL/PIL マネージャー] アプリで [実行] ボタンを使用してソフトウェアインザループ (SIL) モードまたはプロセッサインザループ (PIL) モードでモデルをシミュレートすると、Simulink® Coverage™ により、指定したモデルから生成されたコードについてのコード カバレッジ レポートが model_name_cov.html という名前で作成されます。コード カバレッジ レポートを作成する方法はほかにもあり、たとえば S-Function ブロックや C Caller ブロックなどのカスタム C/C++ ブロックを含むモデルのモデル カバレッジを収集する場合にも作成されます。レポートの種類の詳細については、カバレッジ レポートの種類を参照してください。

SIL/PIL モードで実行しているモデルの場合、コード カバレッジ レポートは [カバレッジの詳細] ペインでも自動的に開かれます。

解析情報

解析情報の節には、解析対象のモデルまたはファイルに関する基本情報が表示されます。

Code Coverage Summary Report for sldemo_fuelsys.

  1. カバレッジ データ情報 — カバレッジ データの収集に使用された MATLAB® リリース バージョンが表示されます。

  2. モデル情報 — モデルのバージョン番号、作成者、最終保存日時など、モデルに関するいくつかのメタデータが表示されます。

  3. ハーネス情報Simulink Test™ ハーネスからカバレッジを収集した場合に表示されます。使用されたハーネスに関するいくつかの情報が表示されます。

  4. ファイル情報 — コード生成で生成されたファイルに関するいくつかのデータが表示されます。

  5. カバレッジ オプション — カバレッジを解析するときに選択されたコンフィギュレーション パラメーターの値が表示されます。フィルターが適用されている場合は、フィルターの名前もここに表示されます。

  6. カバレッジ解析からフィルターで除外されたオブジェクト — カバレッジ フィルター ファイルの名前と絶対パス、カバレッジ解析からフィルターで除外されたすべての式またはカバレッジ オブジェクティブの結果、およびそれらをフィルター処理する理由として指定された根拠が表示されます。

テスト集計

[テスト集計] 節は、以下を行った場合に表示されます。

  • Simulink Test マネージャーを通して少なくとも 2 つのテスト ケースについてカバレッジの結果の集計を記録し、集計結果のカバレッジ レポートを生成した場合。または、

  • カバレッジの結果エクスプローラーで累積カバレッジの結果のカバレッジ レポートを生成した場合。

Simulink Test マネージャーを通してテスト ケースを実行した場合、[テスト集計] 節は、Simulink Test マネージャー内の関連付けられたテスト ケースにリンクされます。

結果エクスプローラーを通してテスト ケースの結果を集計した場合、[テスト集計] 節は、結果エクスプローラーの対応する cvdata ノードにリンクされます。

[テスト集計] 節の各実行について、Simulink Test マネージャーまたはカバレッジの結果エクスプローラー内の対応する結果に対してリンクが張られます。

集計されたユニット テスト

1 つ以上のサブシステム ハーネスのカバレッジを記録した場合、[テスト集計] 節に、実行された各ユニット テストがリストされます。

各テスト対象ユニットが序数 n を取り、1 つのテスト対象ユニットの各テストが序数 m を取り、Un.m の形式で示されます。

Aggregated Tests: Run U1.1 executes test "Switch2 Unit Test - In Range." Run U1.2 executes test "Switch2 Unit Test - Out of Range." Run T1 executes test "Switches Integration Test - In Range." Run T2 executes test "Switches Integration Test - Out of Range."

概要

カバレッジ概要には、以下の 2 つの小節があります。

Summary section of code coverage report showing coverage summaries: Decision, Condition, MCDC, Statement, Function, Function call, and Relational Boundary coverage for 11 files and/or functions.

テスト

[テスト] 節には、各テスト ケースの開始時間と終了時間、およびシミュレーションの前に実行されたセットアップ コマンドが表示されます。各テスト ケースの見出しには、cvtest コマンドを使用して指定されたテスト ケースのラベルが含まれています。この節は、レポートにテスト集計節が含まれない場合にのみ表示されます。

概要

[概要] 節には、ファイルおよび関数ごとにレポートされたコード カバレッジ結果の概要が表示されます。特定のファイルまたは関数の詳細な結果を表示するには、概要の小節でファイルまたは関数の名前をクリックします。

概要テーブルには、ファイルおよび関数ごとに行があります。概要テーブルの最初の列は、そのファイルまたは関数の循環的複雑度を表します。たとえば、ファイル sldemo_fuelsys.c の循環的複雑度は 123 です。その後に続く各列には、該当するカバレッジ メトリクスのラベルが付いています。それぞれの列に、メトリクスのカバレッジ結果が、達成されたカバレッジ オブジェクティブの結果のパーセンテージとして表示されます。バーの青のセクションは達成されたオブジェクティブの結果を示し、バーのピンクの部分は未達カバレッジを示します。正当化されたオブジェクティブの結果はバーの薄い青またはシアンのセクションで示されます。この例の図では、2... look1_binlx の行に正当化されたオブジェクティブがあります。

詳細

[詳細] 節には、コード カバレッジの結果の詳細なレポートが表示されます。[詳細] 節の各小節に、解析されたコードに含まれるファイルまたは関数についての結果の概要が表示されます。

モデル オブジェクトを左クリックすると、モデル オブジェクトの [モデル オブジェクト別の詳細] 小節にアクセスできます。

ファイルの詳細

[ファイルの詳細] 節には、コード ファイル全体の結果の概要が表示され、その後に関数の一覧が続きます。関数の名前をクリックすると、[詳細] の該当する小節に移動します。

たとえば、モデル sldemo_fuelsys を SIL モードで実行すると、生成されたコードは sldemo_fuelsys.c に格納されます。

Details section of coverage report which shows sldemo_fuelsys.c and a list of functions, followed by a list of metrics with achieved coverage percentages for each metric applicable to the entire C code file.

[ファイル] 小節のカバレッジ率は、ファイル内に格納されている各関数の合計のカバレッジです。関数の名前をクリックすると、個別のカバレッジの詳細を表示できます。

関数の詳細

各関数の [詳細] 節には、関数のテスト カバレッジ結果の概要、関数に含まれる式の一覧、および親ファイルと関連するモデル オブジェクトへのリンクが表示されます。

次の図は、sldemo_fuelsys モデル例の SIL モード シミュレーションにおける関数 rt_ertODEUpdateeContinuousStates のカバレッジ結果を示しています。

Details section of the code coverage report for Function rt_ertODEUpdateContinuousStates (line 252) in the sldemo_fuelsys example model.

要件テストの詳細

Requirements Toolbox™ の要件にリンクされた Simulink Test のテスト ケースを少なくとも 2 つ実行すると、カバレッジ レポートの集計に、モデル要素間のリンク、テスト ケース、リンクされている要件の詳細が記載されます。

[要件テストの詳細] 節には以下が含まれます。

  • 実装済みの要件 — モデル要素にリンクされている要件。

  • テストにより検証済み — その要件を検証したテスト。

  • 関連付けられた実行 — 各検証テストに関連付けられた実行。

Switch block Switch1 links to the requirement "Enable Switch Detection" which is verified by test "Enable button" in run "U1.1"

カバレッジ結果からカバレッジ レポート内の要件にトレースする例については、カバレッジ結果から要件へのトレースを参照してください。

循環的複雑度

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

  • [概要] 節にはモデルの階層構造の各オブジェクトの循環的複雑度が表示されます。ファイルまたは関数の場合、この数字にはすべての子孫の循環的複雑度が含まれています。

    Summary section of code coverage report cropped to show only file/function names and their associated cyclomatic complexity numbers.

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

    Details section of the code coverage report for Function rt_ertODEUpdateContinuousStates (line 252) in the sldemo_fuelsys example model, cropped to highlight the location of the cyclomatic complexity metric.

判定解析

コード カバレッジ レポートには、関数内の各判定について個別の節が含まれます。[判定解析] の表には、判定について起こり得る結果と、テスト シミュレーションごとの結果の発生回数が表示されます。発生しなかった結果は、赤色で強調表示された表の行に表示されます。既定では、判定カバレッジが 100% となる判定については [判定解析] の表は表示されません。カバレッジ レポートのオプションの詳細については、結果エクスプローラーからカバレッジ データへのアクセスを参照してください。

Details section of the code coverage report for the function rt_remd (line 329) showing 50% decision coverage in the decisions analyzed table.

この例では、判定 u1 < 0.0 はすべてのタイム ステップで false であるため、この判定の判定カバレッジは 50% になります。

関数のリンク rt_remd をクリックすると、その関数の結果を表示する [詳細] 節内の上の部分にスクロールします。モデル オブジェクトのリンク sldemo_fuelsys をクリックすると、モデルが開き、カバレッジが強調表示されます。

条件解析

条件解析表には、関数またはファイル内に含まれる各条件について、真と偽の条件結果の発生回数が表示されます。

Details section of the code coverage report for the expression (u1 != 0.0) && (u1 != u1_0) (line 339) showing 50% condition coverage in the conditions analyzed table.

この例では、u0 と等しくない条件 u != 0.0 はすべてのタイム ステップで true であり、uu1_0 と等しくない条件 u1 != u1_0 はすべてのタイム ステップで false です。したがって、それぞれの条件の条件カバレッジが 50% になり、親の式の条件カバレッジは 50% になります。

MCDC 解析

MCDC 解析表には、MCDC 入力条件ケースと、レポートされたテスト ケースが条件ケースをどの程度網羅できているかが表示されます。

Details section of the code coverage report for the expression (u1 != 0.0) && (u1 != u1_0) showing 0% MCDC in the MCDC analysis table.

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

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

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

  • 各位置の文字は入力値を表します (TtrueFfalsex はショートサーキットされるために対象にならない条件値を表します)。

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

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

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

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

解析で使用される MCDC 定義によっては、一部のモデル要素による MCDC カバレッジの達成率が低くなります。解析で使用される MCDC 定義がどのようにカバレッジの結果に影響するのかの詳細については、Simulink Coverage における改良条件判定カバレッジ (MCDC) 定義を参照してください。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで [Simulink 論理ブロックをショートサーキットとして扱う] を選択すると、MCDC カバレッジ解析ではショートサーキットされた入力が実際に発生するかどうかは検証されません。MCDC 解析表の条件式 (TFxxx など) で x が使用されている場合、ショートサーキットされた入力であることを表しています。

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

生成コードに対してテスト ケースが達成するカバレッジ度を MCDC カバレッジ解析で近似する場合は、[Simulink 論理ブロックをショートサーキットとして扱う] オプションを選択します (大半の高水準言語は論理式をショートサーキットします)。

累積カバレッジ

連続するカバレッジ結果を記録した後に、カバレッジの結果エクスプローラー内からカバレッジ結果へのアクセス、管理および集計を実行できます。既定では、各シミュレーションの結果はレポートに累積的に保存、記録されます。

カバレッジの結果エクスプローラーの [設定] ペインで [累積進行状況レポートの表示] を選択すると、累積カバレッジ レポートに含まれるすべての表の右端の領域にある結果に、実行結果の合計値が反映されます。レポートは、最後の実行による追加カバレッジと、セッション内での過去のすべての実行により得られたカバレッジを簡単に比較できるように構成されています。

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

  • 現在の実行 — 完了したばかりのシミュレーションのカバレッジ結果。

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

  • 累積 — 完了したばかりのシミュレーションを含むそれまでのシミュレーションでモデルについて収集された総カバレッジ。

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

Summary section of code coverage report showing extra columns. The current run, delta, and cumulative coverage summaries are displayed, resulting in 23 total columns.

判定解析

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

たとえば、u < 0.0 の判定の表において、実行 1 ではすべてのタイム ステップで判定が false であり、実行 2 でも同様であるため、列 [#2] で追加の判定カバレッジは追加されず、実行 1 と合計の両方の判定カバレッジが 50% になります。

条件解析

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

たとえば、この図の条件の表では、[条件解析] の表に累積カバレッジ結果が表示されています。条件 u != 0.0 は、実行 1 ではすべてのタイム ステップで true であり、実行 2 でも同様であるため、合計の条件カバレッジは 50% になります。条件 u1 != u1_0 は、実行 1 ではすべてのタイム ステップで false であり、実行 2 でも同様であるため、合計の条件カバレッジは 50% になります。

MCDC 解析

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

メモ

コマンド ラインで、再利用可能なサブシステムと Stateflow® 構造の累積カバレッジを計算できます。詳細については、再利用可能なサブシステムの累積カバレッジの取得を参照してください。

Relational Boundary Analyzed

累積カバレッジの [Relational Boundary analyzed] の表には関係演算子の境界の結果を示すデータ列が 3 つあり、それぞれ現在の実行、前回の実行以降のデルタ、累積データを表しています。

たとえば、式 rtmIsMajorTimeStep(rtM) についての関係演算子の境界の解析では、実行 1 の関係演算子の境界カバレッジが 67% で、実行 2 には追加のカバレッジがないため、関係演算子の境界カバレッジの合計が 67% になっています。

関係演算子の境界

[関係演算子の境界] のカバレッジを収集すると、Simulink Coverage で作成される、関係演算子の境界カバレッジを受け取る式のコード カバレッジ レポートに関係演算子の境界の表が含まれます。この表は、関連する明示的または暗黙的な関係演算に適用されます。詳細については、関係演算子の境界カバレッジを参照してください。

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

整数

両方のオペランドが整数である場合 (または一方のオペランドが整数でもう一方が boolean である場合)、表は次のように表示されます。

Relational Boundary table for input1 - input2 showing a result of 0 for 51 out of 51 time steps, resulting in 33% relational boundary coverage.

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 は最下位ビットの値を表します。詳細については、精度 (Fixed-Point Designer)を参照してください。2 つのオペランドの精度が異なる場合、精度の値が小さい方が使用されます。

Relational Boundary table for input1 - input2 showing a result of -LSB for 51 out of 51 time steps, resulting in 33% relational boundary coverage.

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 は、入力値と指定した許容誤差を使用して計算された値を表します。許容誤差を指定しない場合、既定値が使用されます。詳細については、関係演算子の境界カバレッジを参照してください。

Relational Boundary table for input1 - input2 showing a result of [-tol.. 0) for 51 out of 51 time steps, resulting in 50% relational boundary coverage.

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 は関演算子の境界の上の領域に含まれます。

参考

関連するトピック