结构覆盖率度量
Simulink® Coverage™ 在测量模型的覆盖率时,使用与代码覆盖率相同的原则。在代码覆盖率中,您可以创建测试来显示每一行代码的执行情况,以显示程序中没有意外行为。Simulink Coverage 对 Simulink 模型应用相同的测量。Simulink Coverage 会分析您的模型,并报告模型的哪些模块和逻辑分支在仿真期间处于活动状态。
结构覆盖率度量用于分析模型的结构元素(例如,模块和 Stateflow® 图),并报告模型和逻辑分支(如果适用)的执行情况。模型覆盖率的四个结构覆盖度量分别是模块执行覆盖率、决策覆盖率、条件覆盖率和修正条件决策覆盖率 (MCDC)。
有关这些覆盖率度量和其他覆盖率度量的详细信息,请参阅Types of Model Coverage。
模块执行覆盖率
模块执行覆盖率用于说明在仿真期间是否执行了每个模块。与模块执行覆盖率最相似的代码覆盖率度量是语句覆盖率。
大多数模块都会获得执行覆盖率,但有些类型的模块不会获得任何覆盖率度量。有关详细信息,请参阅Model Objects That Do Not Receive Coverage。
决策覆盖率
决策覆盖率用于分析代码或模型中的决策点。在代码覆盖率中,决策是由一个或多个条件以及零个或多个布尔运算符组成的布尔表达式。在模型覆盖率中,决策是模型中的一个位置,在该位置处由一个或多个输入信号的值决定模块的输出信号。
在代码覆盖率中,如果决策 A && B
在至少一个时间步为 true
,并且在至少一个时间步为 false,则该决策具有 100% 的决策覆盖率,无论决策内各个条件的结果如何。同样,在模型覆盖率中,如果 true
情形被执行至少一个时间步,并且 false
情形被执行至少一个时间步,则 Switch 模块具有 100% 的决策覆盖率。
条件决策覆盖率
条件决策覆盖率用于分析决策点和构成决策的条件。在代码覆盖率中,条件是不包含布尔运算符的布尔表达式。换句话说,它是一个不能分解为更简单的布尔表达式的布尔表达式。条件的一个示例是类似 A
这样的表达式,其结果为 true
或 false
。
在模型覆盖率中,条件覆盖率用于分析输出其输入的逻辑组合的模块。模型中条件的一个示例是 Logical Operator 模块。对于运算符设置为 And
的 Logical Operator 模块,如果其所有输入信号均为 true
,则该模块将输出 true
。这就是其输入的逻辑组合的含义。
如果条件在至少一个时间步为 true
,并且在至少一个时间步为 false
,则表达式 A
具有 100% 的覆盖率。同样,如果 Logical Operator 模块的每个输入信号在至少一个时间步为 true
,并且在至少一个时间步为 false
,则该模块具有 100% 的条件覆盖率。在此示例模型中,信号 A
和 B
为模型中的布尔值,代表着与代码示例中相同的条件。
修正条件决策覆盖率 (MCDC)
MCDC 属于条件决策覆盖率,要求每个条件必须独立影响决策结果。
在代码覆盖率中,MCDC 用于分析代码以测试程序的每个入口点和出口点至少被调用一次,并且每个条件和决策都至少采用一次每个可能的结果。此外,每个条件必须独立影响决策结果。
使用与决策 A && B
相同的示例时,要实现 100% 的 MCDC 覆盖率,条件必须显示 TT
、TF
和 FT
。您需要这三个结果来表明每个条件都独立影响了模块的结果。不需要 FF
结果,因为它不会改变 TF
和 FT
情形的决策结果。
在模型覆盖率中,MCDC 会查找由于一种条件结果从 true
变为 false
或从 false
变为 true
而发生的决策逆转。Logical Operator 模块就是一个可以接受 MCDC 覆盖率分析的模块示例。
如果每个输入条件结果都发生改变并独立影响决策的结果,则 And 模块将具有 100% 的 MCDC 覆盖率。例如,具有两个输入条件的 And 模块必须显示三个结果。两个输入条件均为 true 的 true
情形以及两种 false 情形:条件 1 为 false,条件 2 为 true;以及条件 1 为 true,条件 2 为 false。