主要内容

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

识别并解决由死逻辑导致的覆盖率缺失问题。

自 R2026a 起

本示例展示了如何使用 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);

运行死逻辑检测

覆盖率详情窗格中,向上滚动到缺失模型覆盖率分析部分。当模型包含未满足的覆盖率结果时,将显示此部分。

The Missing Model Coverage Analysis section

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

Perform Dead Logic Detection dialog box with a maximum analysis time of 300 seconds and the option to create a filter file not selected

使用此对话框设置最大分析时间,并指定是否创建覆盖率过滤器,以及为 Simulink Design Verifier 识别的无效逻辑添加理由规则。作为最佳做法,审查失效逻辑检测分析结果,解决因设计错误导致的失效逻辑,并手动申述可接受的失效逻辑的合理性。如果您的型号需要 DO-178 或 ISO26262 认证,则不建议使用为已识别的不满足的覆盖率创建过滤器文件选项。

点击开始

分析死逻辑检测结果

分析完成后,双击 Stateflow 图 control。Simulink Design Verifier 会用红色突出显示死逻辑。在这个示例中,分析结果显示有五个条件是无效逻辑。

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

Results window displaying the trigger expression for the Sateflow transition can only be true

解决与死逻辑相关的缺失覆盖率问题

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 的第二次转换中的死逻辑。

Simulink Design Verifier highlights the model with four dead logic objectives, all associated with the Stateflow tick

点击包含条件 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 结果。检查并决定是修复还是为每条失效逻辑创建过滤器规则。

另请参阅

|

主题