Main Content

Stateflow チャートのカバレッジの種類

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 チャートがあるモデルを考えてみます。

The stateflow chart is named "state 1" and utilizes Simulink Design Verifier.

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

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

All four Simulink Design Verifier coverage metrics report 100% coverage (1 out of 1 objective outcomes satisfied).