主要内容

创建和使用覆盖率过滤器

此示例说明如何使用 Simulink® Coverage™ 模型覆盖率过滤器从覆盖率分析中排除模型元素,以及对报告中缺失的覆盖率进行申述。

覆盖率过滤器

在验证过程中,模型中可能包含一些会阻碍实现全模型覆盖率的构造,例如包含未测试且与验证过程无关的控制器驱动的子系统。您可以将此子系统从覆盖率结果中排除。

或者,您可能有这样的测试标准:要求对某个模块的特定方面进行测试,例如触发特定的决策点。如果无法满足此模块的所有覆盖率结果,并且您原本也没打算对这些未满足的结果进行测试,那么您可以对缺失覆盖率进行申述。

通过排除这些构造或对这些构造进行申述来将它们从覆盖率结果中滤除,您可以专注于其他可以且应该测试的缺失覆盖率方面。

覆盖率过滤器存储在 CVF 文件中。每个过滤器包含排除或申述某些模型对象或单个覆盖率目标结果的规则。您可以将多个过滤器文件应用于一个模型的覆盖率结果。多个模型也可以使用同一个过滤器文件。

您可以在对模型进行仿真之前或之后创建和应用覆盖率过滤器。

打开模型

此示例使用 slvnvdemo_covfilt 模型,该模型包含从覆盖率结果中过滤出来的常见模式示例。

open_system('slvnvdemo_covfilt');

在仿真前指定要从覆盖率结果中排除的项

库模块 slvnvdemo_covfilt_lib/protected division 可防止除以零错误。如果您确定您的测试不需要或不打算在此上下文中完全覆盖此模块的每个实例,则可以从覆盖率结果中排除此模块。

在 Simulink 编辑器中,右键点击 protected division 库模块,然后依次点击覆盖率 > 排除引用的库: slvnvdemo_covfilt_lib/protected division,以过滤对该库的所有引用。

这将打开覆盖率结果浏览器过滤器编辑器窗格。请注意,覆盖率结果浏览器创建了一个新的过滤器文件,初始名称为 Untitled,并添加了一条排除对该库模块的所有引用的过滤器规则。

使用名称描述字段为新的过滤器文件指定名称和描述。在表中,双击新规则的理由字段,并输入描述为何排除此模块的文本,例如 division by zero protection。点击应用以保存该过滤器文件。此时会弹出一个文件对话框,提示您指定保存该文件的位置。

重用现有过滤器文件

如果您的模型包含类似的构造,则可以在多个模型中使用同一个过滤器文件。

例如,过滤器文件 Filter_Tick.cvf 从覆盖率结果中排除 Stateflow 时序事件 tick。此事件永远不可能为 false,因此,对于任何在 Stateflow 中基于事件的时序逻辑内使用 tick 的模型,它都会阻止实现全条件和 MCDC 覆盖率。

由于 slvnvdemo_covfilt/Mode Logic 包含此构造,因此您可以将过滤器文件 Filter_Tick.cvf 应用于该模型。

要应用此现有过滤器文件,请在覆盖率结果浏览器中右键点击应用的过滤器节点,然后选择加载过滤器。在文件对话框中,选择 Filter_Tick.cvf 并点击打开

请注意,应用的过滤器下现在列出了 Filter_DivBy0Filter_Tick

仿真并查看过滤后的覆盖率结果

点击运行(覆盖率) 按钮以对模型进行仿真并记录覆盖率。仿真完成后,Simulink Coverage 会突出显示具有覆盖率结果的模型,覆盖率详细信息窗格会打开。

在 Simulink 画布中,对 protected division 库模块的两个引用都显示为灰色,这表明由于排除规则,Simulink Coverage 不会对它们进行分析。

覆盖率详细信息窗格中,从覆盖率分析中滤除的对象部分列出了每个被排除的元素以及每个元素对应的理由。Filter_DivBy0Filter_Tick 都显示在这里。

创建新的过滤器文件

创建另一个过滤器文件,以捕获仅与此模型相关的过滤器规则。

覆盖率结果浏览器中,右键点击应用的过滤器节点,然后选择新建过滤器

为此过滤器文件输入名称和描述。点击应用,并指定保存此文件的位置。

在仿真后从覆盖率结果中排除项

您也可以在仿真后创建过滤器规则并将其应用于覆盖率结果。这样,您可以查看覆盖率结果,创建或调整过滤器,生成新的覆盖率报告,而无需重新运行仿真。

例如,以 Switchable config 子系统为例,它对一种常见的设计模式进行建模,该模式使用常量值来驱动子系统使能端口以更改模型配置。然而,使能逻辑和子系统内容可能会导致覆盖率缺失。由于此模型不使用此配置,因此您可以将其从覆盖率分析中排除。

当您从覆盖率详细信息窗格添加新的过滤器规则时,Simulink Coverage 会将这个新过滤器规则添加到您当前选定的任何过滤器文件中。要创建新的过滤器规则,请先点击应用的过滤器

在 Simulink 编辑器中,点击 Switchable config 子系统。覆盖率详细信息窗格会显示此子系统的覆盖率详细信息。点击申述或排除链接。此时会打开“选择覆盖率过滤器”对话框,点击 <新建过滤器文件>

为新的过滤器文件输入名称和描述。在过滤器规则部分中,输入此规则的理由,例如 unused config

点击应用以保存对该过滤器文件的更改并更新覆盖率结果。现在 Switchable config 子系统显示为灰色,这表明过滤器已将其从覆盖率结果中排除。

基于覆盖率结果对单个目标结果进行申述

在 Simulink 编辑器中,点击 Saturation 模块,并在覆盖率详细信息窗格中查看覆盖率结果。有两个决策结果未得到满足,因为 Saturation 模块的下限为 0,上限为 200。然而,此模块的输入是 rate 信号,该信号的值永远不会小于或等于 0。因此,Saturation 模块的下限没有得到充分测试,您可以对相应的决策结果进行申述。

点击决策 input > lower limit 的 false 结果旁边的添加申述规则图标。

覆盖率结果浏览器会在过滤器编辑器窗格中为当前选定的过滤器文件添加一条新的过滤器规则。指定申述理由,例如 rate > 0

点击应用以保存该过滤器文件并更新覆盖率结果。

请注意,在覆盖率详细信息窗格中,Saturation 模块的已申述结果显示为淡蓝色,并链接到相应的理由。由于您没有对决策 input >= upper limit 的 true 结果进行过滤,并且分析不足以涵盖到这个结果,因此 Saturation 模块存在缺失覆盖率并且仍显示为红色。

为死逻辑自动生成过滤器规则

在某些情况下,缺失覆盖率是由于死逻辑导致的,并且无法满足相关联的覆盖率目标。如果此逻辑用于您不想从模型中删除的元素,那么您可以对这些缺失覆盖率结果进行申述。

如果您拥有 Simulink Design Verifier™ 许可证,则可以为死逻辑自动创建申述过滤器规则。

覆盖率结果浏览器中,选择应用的过滤器节点。在过滤器编辑器窗格中,选择为死逻辑制定申述过滤器规则(使用 Simulink Design Verifier)

此选项使用 Simulink Design Verifier™ 来分析模型中的死逻辑。Simulink Design Verifier 会创建一个新的过滤器,并为每个相应的覆盖率结果添加申述规则。

Simulink Design Verifier 针对两个条件结果、七个决策结果和一个 MCDC 结果检测死逻辑并进行申述。

为此过滤器文件指定名称和描述。完成后点击应用。在文件对话框中,指定保存此过滤器文件的位置。

关闭 Simulink Design Verifier 结果窗口。

查看过滤后的覆盖率结果

在 Simulink 编辑器中,在覆盖率选项卡的查看结果部分中,选择覆盖率突出显示

在应用此示例中的四个过滤器后,该模型的仿真现在实现了 100% 的条件覆盖率、63% 的决策覆盖率和 75% 的执行覆盖率。由于覆盖率结果中不再包含接收 MCDC 的模型对象,因此覆盖率报告中未列出此度量。覆盖率报告不会显示死逻辑分析过滤掉的 MCDC 结果,因为覆盖率过滤器 Filter_Tick 包含一条排除规则,该规则将该结果从报告中剔除了。

Mode Logic 图、time capture 子系统和 Saturation 模块中剩余的缺失覆盖率表明测试不充分。您可以通过扩展测试以对这些模型元素进行更彻底的测试,来解决此类未解决的覆盖率问题。