主要内容

Simulink 优化和模型覆盖率

在“配置参数”对话框中,有三个 Simulink® 优化参数可能会影响您的模型覆盖率数据:

内联参数

要在生成代码时将可调模型参数转换为常量值,请在“配置参数”对话框中的数学和数据类型窗格上将默认参数行为设置为内联

当参数被转换为常量时,Simulink 可能会消除模型中的某些决策。您无法获得已消除决策的覆盖率,因此,针对这些决策,覆盖率报告率显示 0/0

模块简化

为在模型仿真和生成代码时实现更快的执行速度,请在“配置参数”对话框中选择模块简化参数。Simulink 软件会将某几组模块折叠为单个更高效的模块,或将其完全移除。

通过模型覆盖率选项之一强制关闭模块简化,您可以在收集模型覆盖率时忽略模块简化参数。

如果您未选择模块简化参数,或者选择了强制关闭模块简化,则 Simulink Coverage™ 软件会为模型中每个收集覆盖率的模块提供覆盖率数据。

如果您选择了模块简化参数且未设置强制关闭模块简化,则覆盖率报告会列出本应收集覆盖率的简化模块。

条件输入分支执行

条件输入分支执行参数可能会导致 Simulink Coverage 结果低于预期。

用例 1:上游 Switch 模块被完全优化掉

Model image shows a step source block connected to the condition port of Switch block one. Output from Switch block one connects to true port of switch block 2. A boolean false block connects to the condition port of Switch block 2, causing Switch block 2 to be false for the entire simulation.

一个设置为 falseConstant 模块连接到 C_Switch2 的控制输入,导致 C_Switch2true 情形不会发生。结果,条件输入分支执行会将 C_Switch1 优化掉。Simulink Coverage 报告 C_Switch1 的覆盖率为 0%。

由于 C_Switch1 模块是死逻辑,因此覆盖率报告会生成一个“已从覆盖率分析中消除的模块”部分。

Model coverage report section titled "Blocks Eliminated from Coverage Analysis" displays a message saying that C_Switch1 might not be executed because of Conditional input branch optimization.

用例 2:上游 Switch 模块被部分优化掉

一个被转换为布尔数据类型的 Step 模块,在阶跃时间之前输出 false,在阶跃时间之后输出 true

Step source input connects to the condition port of two switch blocks. The output signal of A_Switch1 connects to the true port of A_Switch2.

禁用条件输入分支执行会提供全覆盖。启用条件输入分支执行会在 A_Switch1 上提供部分覆盖率,因为当 A_Switch2 出现 true 情形时,A_Switch1 不会出现 false 情形。换句话说,两个 Switch 模块要么都出现 true 情形,要么都出现 false 情形。A_Switch1 的 false 情形不会影响模型。覆盖率报告会正确报告 A_Switch1 的覆盖率为 50%。

解决覆盖不完整问题

对于选中了条件输入分支执行参数的模型,可以通过以下方式解决覆盖不完整的问题:

  • 修改模型设计。因条件输入分支执行导致的覆盖不完整可能表明模型存在设计缺陷。

  • 如果模型中不可访问的逻辑是有意设计的,则可以对缺失覆盖率进行申述。

  • 提供更稳健的测试用例,以便能够访问所有开关决策。

  • 清除条件输入分支执行。这可以消除 Switch 覆盖不完整的问题,但并不能解决不可访问逻辑的问题。

有关用法详细信息,请参阅条件输入分支执行

限制

条件输入分支执行不适用于 Stateflow® 图。