Main Content

本页采用了机器翻译。点击此处可查看英文原文。

Stateflow 图的覆盖类型

Stateflow 图的圈复杂度

循环复杂度是根据软件模块在控制流图中的边、节点和组件来衡量软件模块的复杂度。它指示了您需要测试模块的次数。

圈复杂度的计算如下:

CC = E - N + p

其中 CC 是圈复杂度,E 是边数,N 是节点数,p 是组件数。

在模型覆盖工具中,每个决策都完全等同于一个控制流节点,每个决策结果等同于一个控制流边。控制流程图中的任何附加结构体都会被忽略,因为它贡献的节点数与边数相同,因此对复杂性计算没有影响。因此,您可以按如下方式表达圈复杂度:

CC = OUTCOMES - DECISIONS + p

为了分析目的,每个图都算作一个单独的组成部分。

Stateflow 图的决策覆盖率

决策覆盖率根据底层决策来解释模型执行,其中行为或执行必须从一组互斥的结果中选择一个结果。

注意

决策对象的全覆盖意味着每个决策的每个可能结果都至少发生一次。

决策属于对象,该对象根据其内容或属性做出决策。下表列出了针对拥有它们的 Stateflow® 对象的模型覆盖率记录的决策。表格后面的部分描述了这些决策及其可能的结果。

对象

可能的决策

如果图是触发的 Simulink® 模块,它必须决策是否执行其模块。

如果图包含排他 (OR) 子状态,则它必须决策执行哪个状态。

状态

如果一个状态是包含排他(OR)子状态的超状态,它必须决策执行哪个子状态。

如果状态具有 on event name 动作(可能包括时间逻辑运算符),则该状态必须决策是否执行这些动作。

转移

如果转移是条件转移,它必须决策是否退出其活动源状态或连接点并进入另一个状态或连接点。

图作为触发的 Simulink 模块决策

如果图是 Simulink 模型中的触发模块,则会测试执行该模块的决策。如果未触发模块,则不存在执行该模块的决策,并且决策覆盖率的测量不适用(NA)。

包含排他或子状态决策的图

如果图包含排他 (OR) 子状态,则测试执行哪个子状态的决策。如果图仅包含并行 AND 子状态,则此覆盖率测量不适用(NA)。

包含异或子状态的超级状态决策

由于图是从上到下按层次处理的,因此诸如排他 (OR) 子状态的进入、退出和执行等程序有时由父超状态决策。

注意

超状态的决策覆盖率仅适用于排他(OR)子状态。超状态不会对平行(AND)子状态做出任何决策。

由于超状态必须决策处理哪个排他 (OR) 子状态,因此超状态的决策结果数量就是它包含的排他 (OR) 子状态的数量。在下面的例子中,选择处理哪个子状态可以在三种可能的上下文中发生。

注意

在以下示例中,隐式转移显示为虚线。

上下文示例发生的决策

激活调用

状态 AA1 处于活动。

Stateflow state A contains two substaes A1 and A2. State A1 contains one transition to start A2 with transition condition C2.

  • 状态 A 和 B 的父状态必须决策处理其中的哪一个状态。这个决策权在父母手中。由于 A 处于活动,因此对其进行处理。

  • 状态 A 是状态 A1A2 的父状态,它必须决策处理哪一个状态。这个决策属于状态 A。由于 A1 处于活动,因此对其进行处理。

在处理状态 A1 期间,将测试所有出向转移。这个决策属于转移,而不是父状态 A。在这种情况下,测试条件 C2 标记的转移,并决策是否采取转移到 A2

隐式子状态退出

发生一个转移,其源是超状态 A,其目的地是状态 B。

Stateflow state A contains two substates A1 and A2. Both substates have uncertain transitions to state B.

如果超状态有两个互斥(或)子状态,则由超状态 A 决策哪个子状态执行从子状态到超状态的隐式转移。

具有历史连接点的子状态条目

历史连接记录了在退出超状态之前哪个子状态最后处于活动。

A transition from outside state A enters a history junction inside state A. The junction could send the signal to enter one of the substates inside state A.

如果该超状态成为一个或多个转移的目的地,则历史连接点将决策进入哪个先前活动的子状态。

有关更多信息,请参阅状态详细信息报告部分

状态与事件名称动作语句决策

具有 on event_name 动作语句的状态必须决策在使用时间逻辑运算符时是根据指定事件的接收还是根据指定事件的累积来执行该语句。

条件转移决策

条件转移是具有触发事件和/或保护条件的转移。在从一种状态到另一种状态的条件转移中,退出一种状态并进入另一种状态的决策归功于转移本身。

注意

只有条件转移才能获得决策覆盖率。没有决策的转移不适用于决策覆盖率。

Stateflow 图的条件覆盖率

条件覆盖率报告组成转移决策的各个子条件或状态和转移中的赋值语句中的逻辑表达式的所有可能结果的实现程度。

例如,对于转移中的决策 [A & B & C],条件覆盖率报告了每个子条件 A、B 和 C 的 true 和 false 情况。这会产生八种可能的结果:三个子条件各为 true 和 false 的情况。

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

有关更多信息,请参阅转移详细信息报告部分

MCDC 覆盖 Stateflow

修正条件/决策覆盖 (MCDC) 选项报告测试的覆盖率范围,其中改变逻辑表达式中的单个子条件会导致整个表达式从 true 变为 false 或从 false 变为 true。

例如,如果转移在条件 [C1 & C2 & C3 | C4 & C5] 上执行,则该转移的 MCDC 报告显示五个子条件 (C1, C2, C3, C4, C5) 中的每一个的实际发生情况,其中将其结果从 true 更改为 false 能够将整个条件的结果从 true 更改为 false。

Stateflow 图的关系边界覆盖

如果 Stateflow 图中的转移涉及关系操作,则会获得关系边界覆盖率。有关更多信息,请参阅关系边界覆盖率

Simulink Design Verifier Stateflow 图的覆盖率

您可以在 Stateflow 图中使用以下 Simulink Design Verifier™ 函数:

如果您没有 Simulink Design Verifier 许可证,您可以收集包含这些函数的 Stateflow 图的模型覆盖率,但您无法使用 Simulink Design Verifier 软件分析模型。

当您在配置参数对话框的覆盖率窗格中指定目标和约束覆盖率度量时,Simulink Coverage™ 软件会记录这些函数的覆盖率。

这些函数中的每一个都会评估表达式 expr,例如 sldv.test(expr),其中 expr 是任何有效的布尔 MATLAB® 表达式。Simulink Design Verifier 覆盖率测量表达式 expr 评估为 true 的时间步数。

如果 expr 至少在一个时间步内为 true,则该函数的 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.prove、和 sldv.test 函数的覆盖率。

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