Main Content

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

Simulink 优化和模型覆盖

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

内联参数

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

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

模块简化

为了在模型仿真和生成的代码中实现更快的执行,请在配置参数对话框中选择模块简化参数。Simulink 软件将某些模块组折叠成一个更高效的模块,或将其完全删除。

模型覆盖率选项之一强制关闭模块简化允许您在收集模型覆盖率时忽略模块简化参数。

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

如果选择模块简化参数并且不设置强制关闭模块简化,覆盖率报告将列出本应收集覆盖率的减少的模块。

条件输入分支执行

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

Case 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.

Constant 模块设置为 false 并将其连接到 C_Switch2 上的控制输入会导致 C_Switch2true case 不会发生。条件输入分支执行优化了 C_Switch1Simulink 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.

Case 2:上游 Switch 模块部分优化

转换为布尔数据类型的 Step 模块分别在步骤时间之前和之后输出 falsetrue

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_Switch1 不会在 A_Switch2 看到 true case 的同时看到 false case。换句话说,要么两个 Switch 模块都为 true,要么两个都为 false。A_Switch1 的 false case 不会影响模型。覆盖率报告正确报告了 A_Switch1 的 50% 覆盖率。

解决覆盖不完整问题

您可以通过以下方式解决选择条件输入分支执行参数的模型中的不完整覆盖率:

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

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

  • 提供一个更为强大的测试用例,可以访问所有的开关决策。

  • 清除条件输入分支执行。这消除了 Switch 覆盖率不完整的问题,但没有解决无法访问的逻辑。

有关使用详细信息,请参阅Conditional input branch execution

限制

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