このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
MATLAB 関数のモデル カバレッジ
MATLAB®
MATLAB 関数のモデル カバレッジについて
Simulink® Coverage™ ソフトウェアにより、Simulink モデルのシミュレーションが実行され、MATLAB Function ブロックのコードの判定と条件に対するモデル カバレッジ データがレポートされます。モデル カバレッジの対象となるのは、コード生成用に設定された MATLAB 関数のカバレッジのみです。
たとえば、以下のような if
ステートメントについて考えてみます。
if (x > 0 || y > 0) reset = 1;
この if
ステートメントには、2 つの条件 (x > 0
と y > 0
) がある判定があります。Simulink Coverage ソフトウェアは、モデルのシミュレーション時にすべての判定と条件が実行されることを確認します。
MATLAB 関数のモデル カバレッジの種類
コード生成用に設定された MATLAB 関数について Simulink Coverage ソフトウェアにより記録されるモデル カバレッジの種類は、以下のとおりです。
判定カバレッジ
シミュレーション時に以下の MATLAB Function ブロック ステートメントがテストされ、判定カバレッジが計算されます。
関数ヘッダー — 関数またはローカル関数が実行された場合に、判定カバレッジが 100% になります。
if
—if
式が少なくとも 1 回ずつtrue
およびfalse
として評価された場合に、判定カバレッジが 100% になります。switch
— 実現不可能なケースを含むすべてのswitch
ケースが網羅された場合に、判定カバレッジが 100% になります。for
— 同等ループ条件が少なくとも 1 回ずつtrue
およびfalse
として評価された場合に、判定カバレッジが 100% になります。while
— 同等ループ条件が少なくとも 1 回ずつtrue
およびfalse
として評価された場合に、判定カバレッジは 100% になります。
条件カバレッジと MCDC カバレッジ
シミュレーション時に MATLAB Function ブロック関数で次の論理条件がテストされ、条件カバレッジと MCDC カバレッジが計算されます。
if
ステートメント条件代入ステートメントの論理式
Simulink Design Verifier カバレッジ
次の MATLAB 関数はコード生成と Simulink Design Verifier™ でアクティブとなります。
sldv.condition
(Simulink Design Verifier)sldv.test
(Simulink Design Verifier)sldv.assume
(Simulink Design Verifier)sldv.prove
(Simulink Design Verifier)
[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで [オブジェクティブと制約] カバレッジ メトリクスが指定されている場合、Simulink Coverage ソフトウェアによりこれらの関数のカバレッジが記録されます。
これらの関数はいずれも、式 expr
(sldv.test(
など) を評価します。expr
)expr
は有効な MATLAB 論理式です。Simulink Design Verifier カバレッジでは、式 expr
が true
と評価されるタイム ステップの数が測定されます。
少なくとも 1 つのタイム ステップで expr
が true
であれば、その関数の Simulink Design Verifier カバレッジは 100% になります。それ以外の場合、Simulink Coverage ソフトウェアではその関数のカバレッジが 0% としてレポートされます。
カバレッジ レポートでの Simulink Design Verifier 関数のカバレッジ データの例については、Simulink Design Verifier カバレッジを参照してください。
関係演算子の境界カバレッジ
MATLAB Function ブロックに関係演算が含まれる場合は、関係演算子の境界カバレッジ メトリクスがこのブロックに適用されます。
MATLAB Function ブロックが関係演算を含む関数を複数回呼び出すと、関係演算子の境界カバレッジは、関数が呼びされたすべてのインスタンスにおける累積結果をレポートします。関数の関係演算がそれぞれの呼び出しで異なる型のオペランドを使用する場合、関係演算子の境界カバレッジは、より厳格なオペランド型の許容誤差規則を使用します。たとえば、関係演算がある呼び出しで int32
オペランドを使用し、別の呼び出しで double
オペランドを使用する場合、関係演算子の境界カバレッジは double
オペランドの許容誤差規則を使用します。
許容誤差の規則と型の厳格さの順序については、関係演算子の境界カバレッジを参照してください。
MATLAB 関数のカバレッジを収集する方法
モデルのシミュレーションの実行時に、Simulink Coverage ソフトウェアではコード生成用に設定された MATLAB 関数のカバレッジ データを収集できます。[カバレッジ] アプリからモデル カバレッジを有効にします。
次の MATLAB 関数のモデル カバレッジを収集します。
MATLAB Function ブロックの関数
外部 MATLAB ファイルの関数
外部 MATLAB ファイルのカバレッジを収集するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで、[MATLAB ファイルのカバレッジ] を選択します。
Simulink Design Verifier 関数は以下があります。
sldv.condition
(Simulink Design Verifier)sldv.test
(Simulink Design Verifier)sldv.assume
(Simulink Design Verifier)sldv.prove
(Simulink Design Verifier)
これらの関数のカバレッジを収集するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで [オブジェクティブと制約] カバレッジ メトリクスを選択します。
以下の節では、それぞれの状況でのモデル カバレッジの例を紹介します。
例: MATLAB 関数のモデル カバレッジ
MATLAB Function ブロックのモデル カバレッジ
Simulink Coverage ソフトウェアでは、MATLAB Function ブロックの関数のモデル カバレッジが測定されます。
次のモデルでは、MATLAB Function ブロックに 2 つの MATLAB 関数があります。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインにある [ソルバーの選択] で、シミュレーション パラメーターを次のように設定します。
タイプ —
固定ステップ
ソルバー —
離散 (連続状態なし)
固定ステップ (基本サンプル時間) —
1
MATLAB Function ブロックには、以下の 2 つの関数があります。
最上位の関数
run_intersect_test
は 2 つの四角形 (1 つは固定、もう 1 つは移動) の座標を引数としてrect_intersect
に送ります。ローカル関数
rect_intersect
は、2 つの四角形の交差をテストします。移動する四角形の原点は、タイム ステップごとにx
方向とy
方向の両方に1
ずつ増加します。
移動するテスト四角形の原点の座標は、固定データ x1
および y1
(いずれも初期値は -1
) で表されます。最初のサンプルでは x1
と y1
は両方とも 0
に増加します。その後のシミュレーション時の四角形の引数の推移は次の図のようになります。
固定の四角形は太枠で示されていて、左下の原点の座標は (2,4)
で、幅と高さは 2 です。時間が t = 0
の時点では、最初のテスト四角形の原点の座標は (0,0)
で、幅と高さは 2 です。その後のサンプルでは、テスト四角形の原点の座標は (1,1)
ずつ増加しています。サンプル時間 t = 2
、3
、4
での四角形はテスト四角形と交差しています。
ローカル関数 rect_intersect
は2 つの四角形の引数が交差しているか確認します。各引数は四角形の左下の角 (原点) の座標、幅、高さで構成されています。左側と右側の x
値と、上側と下側の y
値は、四角形ごとに計算され、入れ子にされた if-else
判定で比較されます。この関数は、四角形が交差している場合は logical 1 を、交差していない場合は logical 0 を返します。
シミュレーション時のスコープの出力は、サンプル時間に対する戻り値のプロットを表し、サンプル時間 2
、3
および 4
で交差している四角形を明示します。
シミュレーションが終了すると、モデル カバレッジ レポートがブラウザー ウィンドウに表示されます。概要に続いて、モデル カバレッジ レポートの詳細節にモデルの各部分に関する情報が表示されます。
MATLAB Function ブロックのモデル カバレッジ レポートには、ブロック自体には関数以外に判定はないことが示されています。
この後の各節では、関数、ブロック、モデルという逆の順序でモデル例のモデル カバレッジ レポートを確認します。逆の順序で確認することで、各節の先頭に表示される概要情報の意味がわかりやすくなります。
MATLAB 関数 run_intersect_test のカバレッジ. MATLAB Function ブロック関数 run_intersect_test
のモデル カバレッジは、リンク付きの関数名の下に表示されます。このリンクをクリックすると、エディターで関数が開きます。
リンク付きの関数名の下に、run_intersect_test
のコードがある親 MATLAB Function ブロックのモデル カバレッジ レポートへのリンクがあります。
関数のレポートの上半分には、モデル カバレッジ結果の概要が表示されます。run_intersect_test
のカバレッジ メトリクスには、判定カバレッジ、条件カバレッジ、MCDC カバレッジがあります。run_intersect_test
のコードを調べると、これらのメトリクスについて理解できるようになります。
カバレッジ要素がある行の行番号が強調表示されます。
1 行目は、最上位の関数
run_intersect_test
が実行されるかどうかの判定カバレッジの対象となります。6 行目は、
if
ステートメントの判定カバレッジの対象となります。14 行目は、ローカル関数
rect_intersect
が実行されるかどうかの判定カバレッジの対象となります。27 行目と 30 行目は、
if
ステートメントおよび条件の判定カバレッジ、条件カバレッジ、MCDC カバレッジの対象となります。これらの各行は、リストに続くレポートの題名になっています。
30 行目の条件
right1 < left2
は赤色で強調表示されています。これは、この条件がシミュレーションで起こり得るすべての結果に対してテストされているわけではないことを示しています。具体的にどの結果に対するテストが行われていないかは、30 行目の判定に対するレポートに示されています。
この後の各節には、各 run_intersect_test
判定行のカバレッジが表示されます。各行のカバレッジでは、行の内容がそのままタイトルとなります。行をクリックすると、エディターで当該の行が開きます。
1 行目のカバレッジ. 1 行目のカバレッジ メトリクスは、関数 run_intersect_test
のカバレッジ データの一部です。
コード生成用に設定された各 MATLAB 関数の 1 行目は、呼び出しに応じて関数を実行する判定のメトリクスとしてカバレッジ解析の対象になります。run_intersect_test
のカバレッジは、シミュレーション時に少なくとも 1 回実行されていることを示しています。
6 行目のカバレッジ. "判定解析" 表は、6 行目の判定 (if isempty(x1)
) が全部で 8 回実行されていることを表しています。最初に実行された時点で、この判定は true
と判定され、run_intersect_test
により固定データの値が初期化されました。残りの 7 回の実行では、この判定は false
と評価されました。起こり得る両方の結果が発生したため、判定カバレッジは 100% となります。
14 行目のカバレッジ. "判定解析" 表は、テスト時にローカル関数 rect_intersect
が実行されたことを示しており、カバレッジも 100% になっています。
27 行目のカバレッジ. "判定解析" 表は、27 行目の判定に対して起こり得る結果として、true
と false
の 2 つが存在することを示しています。8 回の実行のうち 5 回で、この判定は false
と評価されています。残りの 3 回は true
と評価されています。起こり得る両方の結果が発生したため、判定カバレッジは 100% となります。
"条件解析" 表からは、27 行目の判定のその他の詳細もわかります。この判定は論理 OR (||
) 演算で結合された 2 つの条件で構成されているため、判定が true
と評価されるには 1 つの条件だけが true
と評価されなければなりません。最初の条件が true
と評価された場合は、2 番目の条件を評価する必要はありません。最初の条件 (top1 < bottom2
) は 8 回評価され、そのうち 2 回は true
と評価されました。つまり、2 番目の条件は 6 回しか評価されていません。そのうち 1 回だけが true
と評価されているため、この判定が true
と判定された回数は全部で 3 回となり、その値が "判定解析" 表に表示されています。
MCDC カバレッジは、条件結果が T
から F
または F
から T
に変化したことが原因で反転した判定を検出します。"MCDC 解析" 表には、判定の反転の原因となる可能性がある条件の結果の組み合わせがすべて表示されます。文字 x
は、判定の反転に関連しない条件結果を示しています。シミュレーション時に発生しなかった判定の反転による条件結果は、小かっこで囲まれて表示されます。この例では小かっこは表示されていないため、判定の反転による結果はすべて発生していることになり、27 行目の判定の MCDC カバレッジが完全に網羅されています。
30 行目のカバレッジ. 30 行目の判定 (if (right1 < left2 || right2 < left1)
) は 27 行目の判定の if
ステートメント内で入れ子になっていて、27 行目の判定が false
である場合にのみ評価されます。27 行目の判定が false
として 5 回評価されているため、30 行目は 5 回評価され、そのうち 3 回が false
でした。true
と false
の両方の結果が得られたため、30 行目の判定カバレッジは 100% です。
27 行目と同様に、30 行目には論理 OR 演算子 (||
) によって 2 つの条件が関連付けられているため、条件 1 が false
の場合にのみ条件 2 がテストされます。条件 1 のテスト結果が 5 回 false
になっているため、条件 2 は 5 回テストされます。そのうち、条件 2 のテスト結果は 2 回 true
、3 回 false
になっているため、この判定の結果は 2 回 true
になっているとみなされます。
30 行目の判定では、最初の条件のテスト結果が true
にならないため、両方の結果は得られず、最初の条件の条件カバレッジは赤色で強調表示されています。また、この条件の true
の結果に基づき、判定の反転に対する MCDC カバレッジも同様に強調表示されています。
run_intersect_test
のカバレッジ. [詳細] タブで、次のように関数 run_intersect_test
全体のカバレッジの概要を示すメトリクスが表示され、繰り返されます。
カバレッジ メトリクスの概要でまとめられている結果から、次のことがわかります。
run_intersect_test
の 8 つの判定結果がレポート行で報告されています。1 行目: 1 つ (実行済み)
6 行目: 2 つ (
true
とfalse
)14 行目: 1 つ (実行済み)
27 行目: 2 つ (
true
とfalse
)30 行目: 2 つ (
true
とfalse
)
各行の判定カバレッジは 100% を示しています。これは、
run_intersect_test
の判定カバレッジが、8 つの起こり得る結果のうちの 8 つ (100%) であることを示しています。run_intersect_test
の 4 つの条件がレポート行で報告されています。27 行目と 30 行目にはそれぞれ 2 つの条件があり、各条件には 2 つの条件結果 (true
とfalse
) があるため、run_intersect_test
の条件結果は合計で 8 つになります。30 行目 (right1 < left2
) の最初の条件を除くすべての条件で、true
とfalse
の両方の結果に対してテスト結果が正になります。つまり、run_intersect_test
の条件カバレッジは 8 分の 7 (88%) となります。27 行目と 30 行目の判定の MCDC カバレッジ表それぞれに、各条件に対し判定の反転のケースが 2 つ挙げられており、可能な反転は全部で 4 つとなります。30 行目の条件
right1 < left2
の評価の変化 (true
からfalse
) に対する判定の反転のみが、このシミュレーションでは発生していません。つまり、有効な反転のケースのうちシミュレーション時にテストされたのは 4 つのうち 3 つ (75%) で、カバレッジは 75% となります。
外部ファイルの MATLAB 関数のモデル カバレッジ
ここではMATLAB Function ブロックのモデル カバレッジで使用したモデルと同じモデルで、run_intersect_test
と rect_intersect
という MATLAB 関数が、run_intersect_test.m
という外部 MATLAB ファイルに保存されているものとします。
外部ファイルの MATLAB 関数のカバレッジを収集するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで、[MATLAB ファイルのカバレッジ] を選択します。
シミュレーションが完了すると、モデル カバレッジ レポートの概要に、最上位モデルと外部関数に関する節が表示されます。
run_intersect_test.m
のモデル カバレッジ レポートには、関数が MATLAB Function ブロックに保存されている場合と同様のカバレッジ データが記載されます。
外部ファイルの MATLAB 関数のモデル カバレッジ レポートの詳細な例は、外部 MATLAB ファイル カバレッジ レポートを参照してください。
Simulink Design Verifier MATLAB 関数のモデル カバレッジ
MATLAB コードに、コード生成用に設定された次の Simulink Design Verifier 関数のいずれかが含まれている場合は、カバレッジを測定できます。
sldv.condition
(Simulink Design Verifier)sldv.test
(Simulink Design Verifier)sldv.assume
(Simulink Design Verifier)sldv.prove
(Simulink Design Verifier)
この例では、MATLAB Function ブロックがある以下のモデルについて考えます。
MATLAB Function ブロックには次のコードが含まれます。
function y = fcn(u) % This block supports MATLAB for code generation. sldv.condition(u > -30) sldv.test(u == 30) y = 1;
Simulink Design Verifier MATLAB 関数のカバレッジを収集するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインの [その他のメトリクス] で、[オブジェクティブと制約] を選択します。
シミュレーション後に、モデル カバレッジ レポートに関数 sldv.condition
と関数 sldv.test
のカバレッジが表示されます。sldv.condition
については、式 u > -30
が 51 回 true
と評価されています。sldv.test
については、式 u == 30
が 51 回 true
と評価されています。
Simulink Design Verifier ブロックのモデル カバレッジ データの例は、オブジェクティブと制約カバレッジを参照してください。