Main Content

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

Stateflow チャートのモデル カバレッジ

Stateflow チャートでのモデル カバレッジ レポートの機能

モデル カバレッジ レポートを生成するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ][結果] ペインで目的のオプションを指定します。Stateflow® チャートについては、Simulink® Coverage™ ソフトウェアはチャート自体の実行と、ステート、遷移判定および各判定を構成する個別の条件の実行を記録します。シミュレーションが完了すると、モデルのテストがどの程度まで実行されたかを示すモデル カバレッジ レポートが表示されます。レポートには以下のデータが示されます。

  • 各排他的サブステートが親のスーパーステートから実行または終了され、親のスーパーステートの履歴により入力された回数

  • 各遷移判定が真または偽として評価された回数

  • 各条件が真または偽として評価された回数

メモ

Stateflow チャートのモデル カバレッジ データを測定するには、次を実行しなければなりません。

  • Stateflow ライセンスを用意する。

  • チャートに対してデバッグ/アニメーションを有効にする。

Stateflow チャートのカバレッジ レポート設定の指定

[カバレッジ] アプリでカバレッジの記録設定を指定します。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ][結果] ペインで [解析後にレポートを自動生成する] オプションを選択することで、モデルのシミュレーション時に生成されたカバレッジ データを含む HTML レポートを作成できます。このレポートは、シミュレーションの終了時に MATLAB® ヘルプ ブラウザーで表示されます。

カバレッジ解析を有効にすると、レポートに指定できる別のカバレッジも選択可能になります。以下の節では、Stateflow チャートのレポートに影響するカバレッジ メトリクスのみを取り上げます。具体的には、判定カバレッジ、条件カバレッジおよび MCDC カバレッジです。

Stateflow チャートの循環的複雑度

循環的複雑度は、制御フロー チャート内のエッジ、ノードおよびコンポーネントに基づくソフトウェア モジュールの複雑度の尺度です。モジュールを何回テストする必要があるかを示します。

循環的複雑度の計算は、次のようになります。

CC = E - N + p

CC は循環的複雑度、E はエッジ数、N はノード数、p はコンポーネント数です。

モデル カバレッジ ツール内では、各判定は制御フロー ノードに、各判定結果は制御フロー エッジにそれぞれ 1 対 1 で対応しています。制御フロー チャート内のその他の構造体は、エッジと同数のノードの一部として扱われ、複雑度の計算には影響しないため、無視されます。このため、循環的複雑度は以下のように表すことができます。

CC = OUTCOMES - DECISIONS + p

解析目的では、各チャートは単一のコンポーネントとみなされます。

Stateflow チャートの判定カバレッジ

判定カバレッジは、動作または実行により一連の相互排他的な結果から必ず 1 つの結果が得られるという基本判定に基づいて、モデルの実行を解釈します。

メモ

判定オブジェクトのフル カバレッジとは、起こり得る結果ごとに少なくとも 1 回、すべての判定が実行されたことを意味します。

判定は、その内容またはプロパティに基づいて判定が実施されるオブジェクトに属しています。以下の表は、Stateflow オブジェクトのモデル カバレッジに対して記録された判定をリストしています。表に続く節で、各判定と起こり得る結果について説明します。

オブジェクト

起こり得る判定

チャート

チャートが、トリガーされた Simulink ブロックである場合は、そのブロックを実行するかどうかを判定しなければなりません。

チャートが排他的 (OR) サブステートを含む場合は、どの状態を実行するのかを判定する必要があります。

ステート

ステートが、排他的 (OR) サブステートを含むスーパーステートである場合は、どのサブステートを実行するのかを判定する必要があります。

ステートが on event name アクション (時相論理演算子が含まれることがあります) を含む場合は、アクションを実行するかどうかを判定しなければなりません。

遷移

遷移が条件付き遷移の場合は、アクティブな遷移元ステートまたはジャンクションを終了して、別のステートまたはジャンクションに入るかどうかを判定する必要があります。

トリガーされた Simulink ブロックの判定に該当するチャート

チャートが、Simulink モデル内でトリガーされたブロックである場合は、ブロックを実行するかどうかの判定がテストされます。ブロックがトリガーされていない場合は、ブロックの実行判定は発生せず、この判定カバレッジは該当なし (NA) として評価されます。

排他的 OR サブステート判定を含むチャート

排他的 (OR) サブステートを含むチャートでは、どのサブステートを実行するかの判定がテストされます。チャートがパラレル AND サブステートのみを含む場合は、このカバレッジ測定は該当なし (NA) として評価されます。

排他的 OR サブステート判定を含むスーパーステート

チャートは階層的に上から下の順に処理されるため、排他的 (OR) サブステートの入力、出力および実行は、サブステートの親であるスーパーステートによって判定される場合があります。

メモ

スーパーステートの判定カバレッジは、排他的 (OR) サブステートに対してのみ適用されます。スーパーステートがパラレル (AND) サブステートに対する判定を行うことはありません。

処理対象の排他的 (OR) サブステートは必ずスーパーステートによって判定されるため、スーパーステートの判定結果の数は、そのスーパーステートに含まれている排他的 (OR) サブステートの数です。以下の例では、処理対象のサブステートは、3 つのコンテキストのいずれかで選択されます。

メモ

以下の例では、暗黙的な遷移は点線として示されています。

コンテキスト発生する判定

アクティブな呼び出し

ステート AA1 はアクティブです。

  • ステート A と B の親は、どちらのステートを処理するかを判定する必要があります。この判定は、親に属します。ステート A がアクティブであるため、処理されます。

  • ステート A はステート A1A2 の親であり、どちらのステートを処理するかを判定しなければなりません。この判定は、ステート A に属します。A1 がアクティブであるため、この判定は処理されます。

ステート A1 の処理中に、すべての出力遷移がテストされます。この判定は、親ステート A ではなく遷移に属します。この場合、条件 C2 によってマークされた遷移がテストされ、A2 への遷移を実行するかどうかの判定が行われます。

暗黙的サブステートの終了

スーパーステート A を遷移元とし、ステート B を遷移先とする遷移が発生します。

スーパーステートに 2 つの排他的 (OR) サブステートが含まれている場合、サブステートからスーパーステートへの暗黙的な遷移を実行するサブステートを判定するのはスーパーステート A です。

ヒストリ ジャンクションを含むサブステート入力

ヒストリ ジャンクションは、スーパーステートの終了前に最後にアクティブであったサブステートを記録します。

そのスーパーステートが 1 つ以上の遷移の遷移元になる場合、ヒストリ ジャンクションは、入力対象となる、以前にアクティブであったサブステートを判定します。

詳細については、State 詳細レポート節を参照してください。

On Event_Name アクション ステートメント判定を含むステート

on event_name アクション ステートメントを含むステートでは、時相論理演算子の使用時に、指定されたイベントの入力または指定されたイベントの累積に基づいて、そのステートメントを実行するかどうかを判定しなければなりません。

条件付き遷移の判定

条件付き遷移は、トリガー イベントおよび/または保護条件をもつ遷移です。ステート間の条件付き遷移では、あるステートを終了して別のステートを入力する判定が遷移として認識されます。

メモ

条件付き遷移のみが判定カバレッジを受け取ります。条件を持たない遷移は、判定カバレッジに利用されません。

Stateflow チャートの条件カバレッジ

条件カバレッジでは、起こり得るすべての結果のうち、遷移の判定を構成する個々のサブ条件で達成された範囲、またはステートと遷移の代入ステートメントの論理式で達成された範囲がレポートされます。

たとえば、遷移に対する判定 [A & B & C] に対して、条件カバレッジでは、各サブ条件 A、B および C の真と偽の発生回数がレポートされます。これにより、8 つの起こり得る結果 (3 つのサブ条件それぞれに対して真と偽) が発生したことになります。

結果ABC
1TTT
2TTF
3TFT
4TFF
5FTT
6FTF
7FFT
8FFF

詳細については、Transition 詳細レポート節を参照してください。

Stateflow チャートの MCDC カバレッジ

改良条件判定カバレッジ (MCDC) オプションでは、論理式内の個別のサブ条件が変化した結果、式全体が真から偽または偽から真に変化する現象について、テストでのカバレッジがレポートされます。

たとえば、遷移が条件 [C1 & C2 & C3 | C4 & C5] について実行された場合は、この遷移に対する MCDC レポートでは、結果が真から偽に変化することで、条件全体の結果が真から偽に変化すると考えられる 5 つのサブ条件 (C1, C2, C3, C4, C5) ごとに、実際に変化が発生した回数が表示されます。

Stateflow チャートの関係演算子の境界カバレッジ

Stateflow チャートの切り替えに関係演算が含まれる場合、その切り替えは関係演算子の境界カバレッジの対象になります。詳細については、関係演算子の境界カバレッジを参照してください。

Stateflow チャートの Simulink Design Verifier カバレッジ

Stateflow チャートでは次の Simulink Design Verifier™ 関数を使用できます。

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

[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで [オブジェクティブと制約] カバレッジ メトリクスが指定されている場合、Simulink Coverage ソフトウェアによりこれらの関数のカバレッジが記録されます。

これらの関数は、いずれも式 expr (sldv.test(expr) など) を評価します。expr は有効な MATLAB 論理式です。Simulink Design Verifier カバレッジでは、式 exprtrue と評価されるタイム ステップの数が測定されます。

少なくとも 1 つのタイム ステップで exprtrue であれば、その関数の Simulink Design Verifier カバレッジは 100% になります。それ以外の場合、Simulink Coverage ソフトウェアではその関数のカバレッジが 0% としてレポートされます。

次の Stateflow チャートがあるモデルを考えてみます。

Simulink Design Verifier 関数のカバレッジを収集するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで、[オブジェクティブと制約] を選択します。

シミュレーション後に、モデル カバレッジ レポートに sldv.conditionsldv.assumesldv.provesldv.test の各関数のカバレッジが表示されます。

Stateflow チャートのモデル カバレッジ レポート

モデル カバレッジ レポートの以下の節は、Bang-Bang Controller チャートを含む sf_boiler モデルのシミュレーションによって生成されたものです。このレポートでは、MCDC のカバレッジ メトリクスが有効になっています。

概要レポート節

モデル カバレッジ レポートの冒頭の概要節には、テスト全体のカバレッジ結果が表示されます。

この階層内の各行は、その階層レベル自体とその階層の下位レベルのカバレッジ結果を要約しています。ハイパーリンクをクリックすると、レポート内で同じ階層番号が割り当てられている以降の節が表示されます。表示された節には、その階層のカバレッジとその子オブジェクトのカバレッジの詳細が記載されています。

最上位レベルの sf_boiler は Simulink モデル自体です。2 番目のレベルの Bang-Bang Controller は Stateflow チャートです。以降のレベルは、包含階層内の順序で チャート内のスーパーステートに該当します。各スーパーステートは、接頭辞 SF: を使用しています。最下位レベルの Boiler Plant model は、モデル内の追加サブシステムです。

Subsystem および Chart 詳細レポート節

Stateflow チャートのカバレッジを記録すると、Simulink Coverage ソフトウェアでは 2 種類のチャートのカバレッジ (サブシステムとチャート) のレポートが作成されます。

  • Subsystem — この節にはチャートのカバレッジのレポートが表示されます。

    • カバレッジ (このオブジェクト): コンテナー オブジェクトとしてのチャートのカバレッジ データ

    • カバレッジ (子を含む): チャートのカバレッジ データと、チャートのステートと遷移。

    節タイトルのサブシステム名のハイパーリンクをクリックすると、Bang-Bang Controller ブロックがブロック線図で強調表示されます。

    このチャートには明示的なトリガーがないので、判定カバレッジは適用不可 (NA) です。条件カバレッジと MCDC はチャートに対しては適用不可 (NA) ですが、子孫に対しては適用されます。

  • チャート — この節にはチャートのカバレッジのレポートが表示されます。

    • カバレッジ (このオブジェクト): チャートと入力に対するカバレッジ データ

    • カバレッジ (子を含む): チャートのカバレッジ データと、チャートのステートと遷移。

    節タイトルのチャート名のハイパーリンクをクリックすると、チャートが Stateflow エディターで開きます。

    チャートとその子孫の判定カバレッジが表示されます。条件カバレッジと MCDC はチャートに対しては適用不可 (NA) ですが、子孫に対しては適用されます。

State 詳細レポート節

カバレッジ レポートには、チャートのステートごとに State 節があり、各ステートについて記録されたカバレッジの詳細情報が表示されます。

sf_boiler モデルで、ステート On はボックス Heater にあります。On はスーパーステートで、次の内容が含まれます。

  • 2 つのサブステート (HIGHNORM)

  • ヒストリ ジャンクション

  • 関数 warm

カバレッジ レポートには、ステート On に関する State 節があります。

On ステートの判定カバレッジでは、どのサブステートを実行するかの判定がテストされます。

3 つの判定がレポートに表示されます。

  • 実行されたサブステート: On の実行時に実行するサブステート。

  • 親の終了時に終了したサブステート: On の終了時にアクティブなサブステート。NORMOn の終了時にアクティブでないものとして記載されます。これは、カバレッジ ツールが NORM から Off へのスーパートランジションを On から Off への遷移として解釈するためです。

  • ヒストリに基づき以前にアクティブであったサブステートに移行: On の再実行時に再入するサブステート。ヒストリ ジャンクションには過去にアクティブであったサブステートが記録されます。

各判定の結果は HIGH または NORM のいずれかになるため、起こり得る結果は 3 × 2 = 6 とおりです。この結果は、6 つの起こり得る結果のうち 5 つがシミュレーション時にテストされたことを示しています。

循環的複雑度と判定カバレッジは、On ステートの子孫に対しても適用されます。HIGH から NORM への遷移に対する条件 [warm()] に必要な判定により、起こり得る判定結果の数は合計で 8 になります。条件カバレッジと MCDC は、ステートに対しては適用不可 (NA) となります。

メモ

循環的複雑度の計算を構成するノードとエッジは、モデル オブジェクト (ステートや遷移など) との直接的な関係はありません。代わりに、この計算では、同等の制御フローのグラフ表現が必要になります。

Transition 詳細レポート節

遷移に関するレポートは、その遷移固有のオブジェクトのレポート節に表示されます。遷移は、概要節のモデルの階層構造には表示されません。これは、この階層が他の Stateflow オブジェクトを含むスーパーステートに基づいているからです。

上記の遷移の判定は、40 秒の時間遅延と条件 [cold()] に依存します。40 秒の時間の遅れで、環境が cold (cold() = 1) である場合は、この遷移を実行する判定と Heater をオンにする処理が行われます。その他の時間間隔または環境条件については、判定は実行されません。

判定カバレッジについては、真と偽の両方の結果が得られました。2 つの判定結果のうち 2 つが得られたため、カバレッジはフルまたは 100% でした。

条件カバレッジは、6 つの条件結果のうち 4 つのみがテストされたことを示しています。時相論理ステートメント after(40,sec) は、sec の発生と時間遅延 after(40,sec) という 2 つの条件を表しています。そのため、この遷移には、secafter(40,sec)cold() という 3 つの条件が存在することになります。各判定は真または偽であるため、起こり得る条件結果は 6 つ存在することになります。

条件解析表には、それぞれの条件には、結果 (真または偽) ごとの発生回数を記録した行が表示されます。起こり得る結果が発生しなかった判定行は、影付きで表示されます。たとえば、1 行目と 3 行目では、偽の結果の発生は記録されていません。

MCDC レポートでは、以下を満たす各条件の特定の判定ペアを対象として、遷移条件の発生の組み合わせがすべてスキャンされます。

  • 条件が真から偽に変化する。

  • 判定結果に関与するその他の条件がすべて一定である。

  • 判定結果が真から偽または偽から真に変化する。

上記 3 つの条件は暗黙的な AND 演算子によって関連付けられており、その基準は各条件が発生することで達成されます。

テストされた条件

真の結果

偽の結果

1

TTT

Fxx

2

TTT

TFx

3

TTT

TTF

各行において、テストされた条件が真から偽に変化し、その他の条件は一定のままであることに注意してください。無関係な要素は、"x" でコーディングされています (以下で説明)。両方の結果がテスト時に発生した場合は、カバレッジはテストされた条件に対して完全 (100%) になります。

上記のレポートの例は、条件 2 に対するカバレッジのみを示しています。条件 1 と 3 で必要な偽の結果が得られず、両方の条件で小かっこで囲まれて示されています。したがって、条件行 1 と 3 は影付きで表示されています。条件 2 はテストされましたが、条件 1 と 3 はテストされなかったため、MCDC は 33% です。

判定によっては、一部の条件の値が特定の状況下で無関係になる場合があります。たとえば、判定 [C1 & C2 & C3 | C4 & C5] では、C1C2C3 のいずれかの条件が偽の場合、| の左側は偽となります。同様に、C4 または C5 が偽の場合、右側も偽となります。単一の条件を変更することで判定結果を変更する、一致するペアを検索する場合に、その他の条件を一定に維持する必要はありません。上記に該当する場合、MCDC レポートでは、これらの条件を "x" 付きで表示して、結果の要素としては無関係であることを示します。各条件は、以下のように表示されます。

最初に一致したペアを考えます。条件 1 は True 結果列で真であるため、対応する False 結果列では必ず偽になります。これにより、C1 が偽の場合は C1 & C2 & C3 は常に偽になるため、偽の結果については条件 C2C3 は無関係になります。また、偽の結果は偽として評価される必要があるため、C4 & C5 の評価も偽でなければなりません。この場合、C4 = F で一致が検出され、条件 C5 は無関係になります。

Stateflow 状態遷移表のモデル カバレッジ

状態遷移表は、Stateflow のモーダル ロジックを表す方法のひとつです。Stateflow チャートではモーダル ロジックがグラフィカルに表されますが、状態遷移表では同等のモーダル ロジックが表形式で表されます。詳細については、状態遷移表 (Stateflow)を参照してください。

状態遷移表のカバレッジ結果は、同等の Stateflow チャートのカバレッジ結果とほぼ同じですが、時相論理のカバレッジに若干の違いがあります。たとえば、slvnvdemo_covfilt モデル例の Mode Logic チャートにある時相論理式 after(4, tick) について考えてみます。

チャートのカバレッジで、after(4, tick) 遷移はtick の発生と時間遅延 after(4, tick) という 2 つの条件を表しています。時相イベント tick は偽にはならないため、最初の条件は満たされず、遷移 after(4, tick) に対して 100% の条件カバレッジと MCDC カバレッジが記録されることはありません。

状態遷移表カバレッジで、after(4, tick) 遷移は 1 つの判定を表し、tick の発生に対するサブ条件はありません。そのため、判定カバレッジのみが記録されます。

時相論理判定がある状態遷移表については、上記の例のように、条件カバレッジと MCDC カバレッジは記録されません。

Stateflow Atomic サブチャートのモデル カバレッジ

Stateflow チャートでは、Atomic サブチャートは複数のチャートおよびモデル間で同じステートまたはサブチャートを再利用するためのグラフィカル オブジェクトです。

シミュレーション時にモデルのカバレッジ データを記録するように指定すると、Simulink Coverage ソフトウェアによりモデル内のすべての Atomic サブチャートに対するカバレッジが記録されます。カバレッジ データには、チャート自体の実行と、ステート、遷移判定および Atomic サブチャートの各判定を構成する個別の条件の実行が記録されます。

doc_atomic_subcharts_map_iodata モデル例のシミュレーションを実行し、判定カバレッジを記録します。

  1. doc_atomic_subcharts_map_iodata モデルを開きます。

    このモデルには、Stateflow チャートに入力信号を与える 2 つの Sine Wave ブロックがあります。チャートには A と B の 2 つの Atomic サブチャートがあり、A という名前の同じライブラリ チャートからリンクされています。このライブラリ チャートには次のオブジェクトが含まれています。

  2. Simulink エディターの [モデル化] タブで [モデル設定] を選択します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインを選択します。

  3. [カバレッジ解析を有効にする] を選択して、[システム全体] を選択します。

  4. [カバレッジ][結果] ペインで、[解析後にレポートを自動生成する] を選択します。

  5. [OK] をクリックして、[コンフィギュレーション パラメーター] ダイアログ ボックスを閉じます。

  6. doc_atomic_subcharts_map_iodata モデルをシミュレーションします。

    シミュレーションが完了すると、カバレッジ レポートが開きます。

このレポートには、Atomic サブチャート A および B のカバレッジ データが次の形式で表示されます。

  • Atomic サブチャート インスタンスとその内容の場合。このチャートには明示的なトリガーがないので、判定カバレッジは適用不可 (NA) です。

  • ライブラリ チャート A とその内容の場合。チャート自体のカバレッジは、入力 u1 では 100% で、ライブラリ チャート内のステートと遷移では 88% です。

    Atomic サブチャート B は同じライブラリ チャート A のコピーです。サブチャート B の内容のカバレッジは、サブチャート A の内容のカバレッジと等しくなります。

Stateflow 真理値表のモデル カバレッジ

Stateflow 真理値表のカバレッジのタイプ

Simulink Coverage ソフトウェアは、モデルのシミュレーション時に Stateflow チャートでオブジェクトによって実行された判定のモデル カバレッジをレポートします。このレポートには、真理値表関数によって実行された判定のカバレッジが含まれます。

真理値表のタイプレポートに含まれるカバレッジ データのタイプ
Stateflow Classic

条件のみ。

MATLAB

条件と、判定点を持つアクションのみ。

メモ

コード生成に対応する MATLAB のアクション言語では、ループや switch ステートメントなど、制御フロー構造体を使用してアクションの判定点を指定できます。

メモ

Stateflow 真理値表のモデル カバレッジ データを測定するには、Stateflow ライセンスがなければなりません。Stateflow 真理値表の詳細については、再利用可能なサブシステムおよび Stateflow® 構造の累積カバレッジの取得を参照してください。

Stateflow 真理値表のカバレッジの解析

Stateflow ライセンスがある場合は、真理値表のモデル カバレッジ レポートを生成できます。

以下のモデルを考えます。

Stateflow チャートには次のような真理値表があります。

モデルのシミュレーションを実行してカバレッジを収集すると、モデル カバレッジ レポートには次のようなデータが表示されます。

[カバレッジ (このオブジェクト)] 列には、カバレッジが表示されません。その理由は、真理値表関数のコンテナー オブジェクト (Stateflow チャート) が、ttable 真理値表を実行するかどうか判定しないからです。

[カバレッジ (子を含む)] 列には、グラフィカル関数のカバレッジが表示されます。このグラフィカル関数は、真理値表に対する遷移を作成する判定ロジックを備えています。グラフィカル関数での遷移には、真理値表の判定と条件が含まれています。[カバレッジ (子を含む)] 列の子孫のカバレッジには、これらの条件と判定が含まれています。真理値表への関数呼び出しによって、これらの条件と判定のモデル カバレッジをテストします。

メモ

真理値表に対するグラフィカル関数の詳細については、生成された Stateflow 真理値表の内容の表示 (Stateflow)を参照してください。

ttable 真理値表の判定とその個別条件に対するカバレッジは、以下のとおりです。

カバレッジ説明

既定の判定 [D4] に対するモデル カバレッジなし

既定の判定を導くロジックはすべて、前述の判定すべてが偽であるという結論に基づいています。これは、既定の判定でロジックが不要であるため、モデル カバレッジが存在しないことを意味します。

17% (1/6) の判定カバレッジ

真理値表への入力値である 3 つの定数 (100) によって、判定 D1 のみが真になります。これらの入力値は、6 つの判定 ([D1][D3]T または F) のいずれか 1 つのみを満たします。

各条件の結果値は T または F であるため、3 つの条件で有効な値は 6 つになります。

18 (17%) の条件カバレッジのうちの 3 つ

3 つの判定 D1D2 および D3 には、条件カバレッジがあります。これは、入力値セット (100) によって判定 D1 のみが真とされるからです。

MCDC カバレッジなし (0/9)

MCDC カバレッジは、条件結果が T から F または F から T に変化したことが原因で反転した判定を検出します。シミュレーションでは、1 つの入力値セットのみがテストされるため、モデルは判定を反転しません。

欠落したカバレッジ

赤い文字 TF は、これらの条件に対してモデル カバレッジが欠落していることを示しています。判定 [D1] では、T 判定のみが満たされます。判定 [D2][D3] および [D4] では、どの条件も満たされません。

Stateflow チャートのカバレッジのカラー表示

モデル カバレッジ ツールは、Simulink ブロック線図に個別のブロックのモデル カバレッジ結果を直接表示します。この機能を有効にした場合、モデル カバレッジ ツールは以下の処理を実行します。

  • シミュレーション時にモデル カバレッジを受信する Stateflow オブジェクトを強調表示します。

  • 各オブジェクトのモデル カバレッジ情報の概要をコンテキスト依存形式で表示します。

    メモ

    カバレッジ ツールは、カバレッジ情報のレポートを表示しているチャートの表示色のみを変更します。遷移や状態の選択など、チャートを操作すると、表示色は既定値に戻ります。

Simulink ウィンドウにおけるこの機能の有効化と選択の詳細については、カバレッジの強調表示の有効化を参照してください。

モデル カラーリングによるモデル カバレッジの表示

モデル カラーリングによるカバレッジの表示を有効にすると、モデルでモデル カバレッジ レポートを生成するたびに、カバレッジ対象として認識された個別のチャート オブジェクトが薄い緑色または薄い赤色で強調表示されます。

  1. sf_car モデルを開きます。

  2. Simulink エディターの [モデル化] タブで [モデル設定] を選択します。

  3. [コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで、[カバレッジ解析を有効にする] を選択します。

  4. [カバレッジ][結果] ペインで、[モデルのカラーリングを使用してカバレッジの結果を表示] を選択します。

  5. [OK] をクリックします。

  6. モデルのシミュレーションを実行します。

    シミュレーションが終了すると、カバレッジを含むチャート オブジェクトが強調表示されます。

    オブジェクトの強調表示では、カバレッジが以下のように示されます。

    • フル カバレッジの場合、薄い緑色

    • 部分カバレッジの場合、薄い赤色

    • ゼロ カバレッジの場合、色なし

    メモ

    チャートの表示色を元に戻すには、オブジェクトを選択または選択解除します。

  7. チャートで selection_state をクリックします。

    以下のサマリー レポートが表示されます。

    強調表示された Stateflow オブジェクトをクリックすると、そのオブジェクトに対するカバレッジの概要が [カバレッジ表示] ウィンドウ に表示されます。カバレッジ レポート内のこのオブジェクトに関する節を開くには、このハイパーリンクをクリックします。

    ヒント

    以下のいずれかの方法で、マウス クリックの代わりに、マウス カーソルの移動に応じてブロックを表示するように [カバレッジ表示] ウィンドウを設定できます。

    • [カバレッジ表示] ウィンドウの右側で下向き矢印を選択し、[フォーカス] を選択します。

    • 強調表示されたブロックを右クリックし、[カバレッジ][マウス先に詳細を表示] を選択します。

Stateflow チャート内の C/C++ コードのコード カバレッジ

Stateflow チャートにカスタム C/C++ コードが含まれる場合、Simulink Coverage はコード カバレッジを記録できます。詳細については、Simulink モデルのカスタム C/C++ コードのカバレッジを参照してください。

再利用可能なサブシステムおよび Stateflow® 構造の累積カバレッジの取得

この例では、再利用可能なサブシステムをもつモデルの累積カバレッジ結果を作成および表示する方法を説明します。

Simulink® Coverage™ は、まったく同じに構成された次のものについて、複数のインスタンスの累積カバレッジを提供します。

  • 再利用可能なサブシステム

  • Stateflow™ 構造

累積カバレッジを取得するには、コマンド ラインで個々のカバレッジ結果を追加します。個々のカバレッジ結果を追加することで、モデルおよびテスト ハーネス全体の複数のインスタンスの累積カバレッジ結果を取得できます。

モデル例を開く

MATLAB® コマンド ラインで、次を入力します。

model = 'slvnvdemo_cv_mutual_exclusion';
open_system(model);

このモデルには、再利用可能なサブシステムのインスタンスが 2 つあります。インスタンスの名前は、Subsystem 1 および Subsystem 2 です。

Subsystem 1 の判定カバレッジの取得

Subsystem 1 の判定カバレッジのコマンドを実行します。

testobj1 = cvtest([model '/Subsystem 1']);
testobj1.settings.decision = 1;
covobj1 = cvsim(testobj1);

Subsystem 2 の判定カバレッジの取得

Subsystem 2 の判定カバレッジのコマンドを実行します。

testobj2 = cvtest([model '/Subsystem 2']);
testobj2.settings.decision = 1;
covobj2 = cvsim(testobj2);

Subsystem 1 および Subsystem 2 のカバレッジ結果の追加

Subsystem 1 および Subsystem 2 の累積的な判定カバレッジを作成するコマンドを実行します。

covobj3 = covobj1 + covobj2;

Subsystem 1 のカバレッジ レポートの生成

Subsystem 1 の判定カバレッジの HTML レポートを作成します。

cvhtml('subsystem1',covobj1)

レポートには、Subsystem 1 の判定カバレッジが 50% であることが示されます。enable logical valuetrue 条件が解析されていません。

Subsystem 2 のカバレッジ レポートの生成

Subsystem 2 の判定カバレッジの HTML レポートを作成します。

cvhtml('subsystem2',covobj2)

レポートには、Subsystem 2 の判定カバレッジが 50% であることが示されます。enable logical valuefalse 条件が解析されていません。

Subsystem 1 および Subsystem 2 の累積カバレッジのカバレッジ レポートの生成

Subsystem 1 および Subsystem 2 の累積的な判定カバレッジの HTML レポートを作成します。

cvhtml('cum_subsystem',covobj3)

再利用可能なサブシステム、Subsystem 1 および Subsystem 2 の累積的な判定カバレッジは 100% です。enable logical valuetrue および false のどちらの条件も解析されています。