识别并解决由死逻辑导致的覆盖率缺失问题。
本示例展示了如何使用 Simulink®Design Verifier™ 来识别和解决 Simulink Coverage™报告中与失效逻辑相关的缺失覆盖率问题。
死逻辑
死逻辑是指模型中无法访问或未使用的代码或代码块。当模型输入没有任何组合能够使某个条件为真或为假时,该条件的真或假情况就是死逻辑。在测试模型时,无效逻辑会导致覆盖率结果不理想。大多数情况下,死逻辑是设计错误。最佳做法是尽可能删除死逻辑。
虽然您可以在模型中为无效逻辑申述,但某些领域和监管机构对无效逻辑有不同的规定。例如,需要 DO-178 认证或 ISO26262 认证的项目有更严格的要求。可接受的死逻辑示例可能包括:
在以 C 作为操作语言的 Stateflow®图表中,
tick事件报告条件覆盖率和修改后的条件决策覆盖率 (MCDC)。tick事件不可能为 false,所以这是死逻辑。您可以对无法满足的覆盖率结果申述,或者使用 MATLAB®作为行动语言。如果您的模型使用 Simulink 变体块作为可重用组件(例如在模型引用中),并且您没有使用所有变体配置,则未使用的变体配置是死逻辑。您可以对不令人满意的覆盖率结果申述,或者更改可重用组件。有关变体块的更多信息,请参阅 变体模块的模型覆盖率。
打开模型
打开模型。
modelName = "slcov_powerwindow_deadlogic";
open_system(modelName);
slcov_powerwindow_deadlogic 模型使用 Stateflow 图对电动车窗控制器进行建模。电动车窗控制器响应驾驶员和乘客的指令,将车窗向上或向下移动。如果电动车窗检测到障碍物,控制器会发出向下移动的指令一秒钟。如果驾驶员按下向下按钮的时间少于一秒钟,控制器将发出向下命令,直到到达终点或驾驶员按下向上按钮为止。
运行覆盖率分析
在 Simulink 工具栏的覆盖率选项卡上,点击分析覆盖率。或者,您也可以通过输入以下命令以编程方式运行覆盖率分析:
sim(modelName); cvmodelview(covdata);
运行死逻辑检测
在覆盖率详情窗格中,向上滚动到缺失模型覆盖率分析部分。当模型包含未满足的覆盖率结果时,将显示此部分。

点击链接打开执行死逻辑检测对话框。

使用此对话框设置最大分析时间,并指定是否创建覆盖率过滤器,以及为 Simulink Design Verifier 识别的无效逻辑添加理由规则。作为最佳做法,审查失效逻辑检测分析结果,解决因设计错误导致的失效逻辑,并手动申述可接受的失效逻辑的合理性。如果您的型号需要 DO-178 或 ISO26262 认证,则不建议使用为已识别的不满足的覆盖率创建过滤器文件选项。
点击开始。
分析死逻辑检测结果
分析完成后,双击 Stateflow 图 control。Simulink Design Verifier 会用红色突出显示死逻辑。在这个示例中,分析结果显示有五个条件是无效逻辑。

点击 passengerUp 子图中的 [!passenger[1]] 过渡。结果窗口显示有关失效逻辑的信息。

解决与死逻辑相关的缺失覆盖率问题
在 passengerUp 子状态中,从 iniPassengerUp 状态转换出来可以走两条路径。当 passenger[1] 为真时,图会转换到 autoPassengerUp 状态;当 passenger[1] 为假时,图表会进行另一种转换。在此图中,另一个转换包含决策 [!passenger[1]]。因为该图使用 C 作为动作语言,所以 ! 是 NOT 运算符,这使得 !passenger[1] 与 passenger[1] 相反。这意味着 [!passenger[1]] 转换永远不会为假,因为在任何为假的情况下,图都会改为 [passenger[1]] 转换。发生这种情况时,逻辑就过于复杂了。
解决覆盖率不足的问题有两种方法:
证明
[!passenger[1]]转换决策的错误结果申述。编辑模型,移除死逻辑。
在这个示例中,过度指定的转换并没有给模型增加任何内容。在模型中,点击 passengerUp 子状态内的 [!passenger[1]] 转换,删除转换条件,然后点击画布上的任意位置退出状态编辑。
点击关闭关闭 Simulink Design Verifier 结果,然后再次点击分析覆盖率。要再次分析失效逻辑,请在覆盖率详情中,滚动到缺失模型覆盖率分析,点击链接,然后点击开始。Simulink Design Verifier 无法识别从 iniPassengerUp 的第二次转换中的死逻辑。

点击包含条件 after(5,tick) 的 iniPassengerUp 子状态的转换。

结果窗口显示两个覆盖率结果,因为即使您未启用这些指标,Simulink Design Verifier 也会分析决策、条件和 MCDC 结果的死逻辑。在结果窗口中,单击申述 "tick" 为假,以申述缺失的条件结果;单击使用 "tick" 为假的触发表达式申述,以申述缺失的 MCDC 结果。当您点击 Simulink Design Verifier 结果中的申述链接时,将打开过滤器资源管理器窗口。在过滤器资源管理器中,您可以为过滤器命名、添加描述,并为过滤器规则添加理由。在本示例中,将过滤器名称设置为 filter_tick,将描述设置为 Filter dead logic associated with tick,并将理由设置为 tick dead logic,然后点击应用。在保存过滤器对话框中,将文件名设置为 filter_tick,然后点击保存。
应用过滤器后,将打开覆盖率详细信息窗格,并突出显示模型上的覆盖率结果。要返回 Simulink Design Verifier 结果,请在 Simulink Design Verifier 结果摘要窗口中,点击突出显示模型分析结果。图中有四个刻度事件,每个刻度事件包含一个不满足的决策结果和一个不满足的 MCDC 结果。检查并决定是修复还是为每条失效逻辑创建过滤器规则。
另请参阅
slcoverage.Filter | slcoverage.FilterRule