Stateflow 图的覆盖率类型
Stateflow 图的圈复杂度
循环复杂度是根据软件模块在控制流图中的边、节点和组件来衡量软件模块的复杂度。它指示了您需要测试模块的次数。
圈复杂度的计算如下:
CC = E - N + p
其中 CC 是圈复杂度,E 是边数,N 是节点数,p 是组件数。
在模型覆盖率工具中,每个决策都完全等同于一个控制流节点,每个决策结果等同于一个控制流边。控制流程图中的任何附加结构体都会被忽略,因为它贡献的节点数与边数相同,因此对复杂性计算没有影响。因此,您可以按如下方式表达圈复杂度:
CC = OUTCOMES - DECISIONS + p
为了分析目的,每个图都算作一个单独的组件。
Stateflow 图的决策覆盖率
决策覆盖率根据底层决策来解释模型执行,其中行为或执行必须从一组互斥的结果中选择一个结果。
注意
决策对象的全覆盖意味着每个决策的每个可能结果都至少发生一次。
决策属于对象,该对象根据其内容或属性做出决策。下表列出了针对拥有它们的 Stateflow® 对象的模型覆盖率记录的决策。表格后面的部分描述了这些决策及其可能的结果。
对象 | 可能的决策 |
|---|---|
图 | 如果图是触发的 Simulink® 模块,它必须决定是否执行其模块。 如果图包含排他 (OR) 子状态,则它必须决定执行哪个状态。 |
状态 | 如果一个状态是包含排他 (OR) 子状态的超状态,它必须决定执行哪个子状态。 如果状态具有 |
转移 | 如果转移是条件转移,它必须决定是否退出其活动源状态或结点并进入另一个状态或结点。 |
图作为触发的 Simulink 模块决策
如果图是 Simulink 模型中的触发模块,则会测试执行该模块的决策。如果未触发模块,则不存在执行该模块的决策,并且决策覆盖率的测量不适用 (NA)。
包含排他或子状态决策的图
如果图包含排他 (OR) 子状态,则测试执行哪个子状态的决策。如果图仅包含并行 AND 子状态,则此覆盖率测量不适用 (NA)。
包含异或子状态的超级状态决策
由于图是从上到下按层次处理的,因此诸如排他 (OR) 子状态的进入、退出和执行等程序有时由父超状态决定。
注意
超状态的决策覆盖率仅适用于排他 (OR) 子状态。超状态不会对平行 (AND) 子状态做出任何决策。
由于超状态必须决定处理哪个排他 (OR) 子状态,因此超状态的决策结果数量就是它包含的排他 (OR) 子状态的数量。在下面的示例中,选择处理哪个子状态可以在三种可能的上下文中发生。
注意
在以下示例中,隐式转移显示为虚线。
| 上下文 | 示例 | 发生的决策 |
|---|---|---|
激活调用 | 状态
|
在处理状态 |
隐式子状态退出 | 发生一个转移,其源是超状态 A,其目标是状态 B。
| 如果超状态有两个互斥(或)子状态,则由超状态 A 决策哪个子状态执行从子状态到超状态的隐式转移。 |
具有历史结点的子状态条目 | 历史结点记录了在退出超状态之前哪个子状态最后处于活动。
| 如果该超状态成为一个或多个转移的目标,则历史结点将决定进入哪个先前活动的子状态。 |
有关详细信息,请参阅状态详细信息报告部分。
状态与事件名称动作语句决策
具有 on event_name 动作语句的状态必须决定在使用时间逻辑运算符时是根据指定事件的接收还是根据指定事件的累积来执行该语句。
条件转移决策
条件转移是具有触发事件和/或保护条件的转移。在从一种状态到另一种状态的条件转移中,退出一种状态并进入另一种状态的决策归功于转移本身。
注意
只有条件转移才能获得决策覆盖率。没有决策的转移不适用于决策覆盖率。
Stateflow 图的条件覆盖率
条件覆盖率报告组成转移决策的各个子条件或状态和转移中的赋值语句中的逻辑表达式的所有可能结果的实现程度。
例如,对于转移中的决策 [A & B & C],条件覆盖率报告了每个子条件 A、B 和 C 的 true 和 false 情况。这会产生八种可能的结果:三个子条件各为 true 和 false 的情况。
| 结果 | A | B | C |
|---|---|---|---|
| 1 | T | T | T |
| 2 | T | T | F |
| 3 | T | F | T |
| 4 | T | F | F |
| 5 | F | T | T |
| 6 | F | T | F |
| 7 | F | F | T |
| 8 | F | F | F |
有关详细信息,请参阅转移详细信息报告部分。
Stateflow 图的 MCDC 覆盖率
修正条件/决策覆盖率 (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™ 函数:
sldv.condition(Simulink Design Verifier)sldv.test(Simulink Design Verifier)sldv.assume(Simulink Design Verifier)sldv.prove(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 图的模型:

要收集 Simulink Design Verifier 函数的覆盖率,请在配置参数对话框的覆盖率窗格中选择目标和约束。
仿真后,模型覆盖率报告列出了 sldv.condition、sldv.assume、sldv.prove、和 sldv.test 函数的覆盖率。



