Simulink 优化和模型覆盖率
在“配置参数”对话框中,有三个 Simulink® 优化参数可能会影响您的模型覆盖率数据:
内联参数
要在生成代码时将可调模型参数转换为常量值,请在“配置参数”对话框中的数学和数据类型窗格上将默认参数行为设置为内联。
当参数被转换为常量时,Simulink 可能会消除模型中的某些决策。您无法获得已消除决策的覆盖率,因此,针对这些决策,覆盖率报告率显示 0/0。
模块简化
为在模型仿真和生成代码时实现更快的执行速度,请在“配置参数”对话框中选择模块简化参数。Simulink 软件会将某几组模块折叠为单个更高效的模块,或将其完全移除。
通过模型覆盖率选项之一强制关闭模块简化,您可以在收集模型覆盖率时忽略模块简化参数。
如果您未选择模块简化参数,或者选择了强制关闭模块简化,则 Simulink Coverage™ 软件会为模型中每个收集覆盖率的模块提供覆盖率数据。
如果您选择了模块简化参数且未设置强制关闭模块简化,则覆盖率报告会列出本应收集覆盖率的简化模块。
条件输入分支执行
条件输入分支执行参数可能会导致 Simulink Coverage 结果低于预期。
用例 1:上游 Switch 模块被完全优化掉

一个设置为 false 的 Constant 模块连接到 C_Switch2 的控制输入,导致 C_Switch2 的 true 情形不会发生。结果,条件输入分支执行会将 C_Switch1 优化掉。Simulink Coverage 报告 C_Switch1 的覆盖率为 0%。
由于 C_Switch1 模块是死逻辑,因此覆盖率报告会生成一个“已从覆盖率分析中消除的模块”部分。

用例 2:上游 Switch 模块被部分优化掉
一个被转换为布尔数据类型的 Step 模块,在阶跃时间之前输出 false,在阶跃时间之后输出 true。

禁用条件输入分支执行会提供全覆盖。启用条件输入分支执行会在 A_Switch1 上提供部分覆盖率,因为当 A_Switch2 出现 true 情形时,A_Switch1 不会出现 false 情形。换句话说,两个 Switch 模块要么都出现 true 情形,要么都出现 false 情形。A_Switch1 的 false 情形不会影响模型。覆盖率报告会正确报告 A_Switch1 的覆盖率为 50%。
解决覆盖不完整问题
对于选中了条件输入分支执行参数的模型,可以通过以下方式解决覆盖不完整的问题:
修改模型设计。因条件输入分支执行导致的覆盖不完整可能表明模型存在设计缺陷。
如果模型中不可访问的逻辑是有意设计的,则可以对缺失覆盖率进行申述。
提供更稳健的测试用例,以便能够访问所有开关决策。
清除条件输入分支执行。这可以消除 Switch 覆盖不完整的问题,但并不能解决不可访问逻辑的问题。
有关用法详细信息,请参阅条件输入分支执行。
限制
条件输入分支执行不适用于 Stateflow® 图。