Stateflow チャートのモデル カバレッジ
モデル カバレッジ レポートは、[実行] ボタンを使用してモデルのシミュレーションを行う場合は自動的に生成されます。[実行] ボタンを使用しなかった場合、またはモデルのシミュレーションを行わないでカバレッジ データを読み込んだ場合は、cvhtml
を使用してモデル カバレッジ レポートを生成します。
Stateflow® チャートについては、Simulink® Coverage™ はチャート自体の実行と、ステート、遷移判定、および各判定を構成する個別の条件の実行を記録します。Simulink Coverage は論理式が含まれている代入ステートメントの解析も行います。論理式とは、logical AND
(&&
) や logical OR
(||
) などの論理演算子が含まれている式です。代入ステートメントは、ステートの開始または終了のアクション、遷移アクションなど、チャート内の任意の場所に配置できます。
メモ
モデル カバレッジでは論理式が含まれている代入ステートメントのみを解析しますが、コード カバレッジではすべての boolean 代入ステートメントを解析します。この違いのため、モデルとコード カバレッジの結果に不一致が生じることがあります。
シミュレーションが完了すると、Simulink Coverage はモデルのテストがどの程度まで実行されたかレポートします。レポートには以下のデータが示されます。
各排他的サブステートが親のスーパーステートから実行または終了され、親のスーパーステートの履歴により入力された回数。サブステートは、その
during
アクションが実行されると実行済みとみなされます。各遷移判定が真または偽として評価された回数。
各条件が真または偽として評価された回数。
メモ
Stateflow チャートのモデル カバレッジ データを測定するには、次を実行しなければなりません。
Stateflow ライセンスを用意する。
チャートに対してデバッグ/アニメーションを有効にする。
Stateflow チャートのカバレッジ レポート設定の指定
[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインからカバレッジの記録設定を指定します。
カバレッジ解析を有効にすると、さまざまなカバレッジ メトリクスの選択も有効になります。以下の節では、Stateflow チャートのレポートに影響するカバレッジ メトリクスのみを取り上げます。具体的には、判定カバレッジ、条件カバレッジおよび MCDC カバレッジです。
Stateflow チャートのモデル カバレッジ レポート
モデル カバレッジ レポートの以下の節は、Bang-Bang Controller チャートを含む sf_boiler
モデルのシミュレーションによって生成されたものです。このレポートでは、MCDC のカバレッジ メトリクスが有効になっています。モデルを開くには、MATLAB® コマンド ウィンドウで次を実行します。
openExample("sf_boiler");
概要レポート節
モデル カバレッジ レポートの冒頭の概要節には、テスト全体のカバレッジ結果が表示されます。
この階層内の各行は、その階層レベル自体とその階層の下位レベルのカバレッジ結果を要約しています。ハイパーリンクをクリックすると、レポート内で同じ階層番号が割り当てられている以降の節が表示されます。表示された節には、その階層のカバレッジとその子オブジェクトのカバレッジの詳細が記載されています。
最上位レベルの 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 つのサブステート (
HIGH
とNORM
)ヒストリ ジャンクション
関数
warm
カバレッジ レポートには、ステート On
に関する State 節があります。
On
ステートの判定カバレッジでは、どのサブステートを実行するかの判定がテストされます。
3 つの判定がレポートに表示されます。
実行されたサブステート:
On
の実行時に実行するサブステート。親の終了時に終了したサブステート:
On
の終了時にアクティブなサブステート。NORM
はOn
の終了時にアクティブでないものとして記載されます。これは、カバレッジ ツールが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 つの条件を表しています。そのため、この遷移には、sec
、after(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
] では、C1
、C2
、C3
のいずれかの条件が偽の場合、|
の左側は偽となります。同様に、C4
または C5
が偽の場合、右側も偽となります。単一の条件を変更することで判定結果を変更する、一致するペアを検索する場合に、その他の条件を一定に維持する必要はありません。上記に該当する場合、MCDC レポートでは、これらの条件を "x" 付きで表示して、結果の要素としては無関係であることを示します。各条件は、以下のように表示されます。
最初に一致したペアを考えます。条件 1 は True 結果列で真であるため、対応する False 結果列では必ず偽になります。これにより、C1
が偽の場合は C1 & C2 & C3
は常に偽になるため、偽の結果については条件 C2
と C3
は無関係になります。また、偽の結果は偽として評価される必要があるため、C4 & C5
の評価も偽でなければなりません。この場合、C4
= F で一致が検出され、条件 C5
は無関係になります。
Stateflow チャート内の C/C++ コードのコード カバレッジ
Stateflow チャートにカスタム C/C++ コードが含まれる場合、Simulink Coverage はコード カバレッジを記録できます。詳細については、Simulink モデルのカスタム C/C++ コードのカバレッジを参照してください。
Stateflow 状態遷移表のモデル カバレッジ
状態遷移表は、Stateflow のモーダル ロジックを表す方法のひとつです。Stateflow チャートではモーダル ロジックがグラフィカルに表されますが、状態遷移表では同等のモーダル ロジックが表形式で表されます。詳細については、状態遷移表 (Stateflow)を参照してください。
状態遷移表のカバレッジ結果は、同等の Stateflow チャートのカバレッジ結果と同じです。たとえば、slvnvdemo_covfilt
モデル例の Mode Logic チャートにある時相論理式 after(4, tick)
について考えてみます。
チャートまたは状態遷移表で C をアクション言語として使用する場合、after(4, tick)
遷移は tick
の発生と時間遅延 after(4, tick)
という 2 つの条件を表しています。時相イベント tick
は偽にはならないため、最初の条件は満たされず、遷移 after(4, tick)
に対して 100% の条件カバレッジと MCDC カバレッジが達成されることはありません。
MATLAB をアクション言語として使用する場合、after(4, tick)
遷移は 1 つの判定を表し、tick
の発生に対するサブ条件はありません。チャートまたは遷移表は、判定カバレッジのみをレポートします。