消除缺失覆盖率
查看模型覆盖率结果后,您可能会发现您的模型没有达到 100% 的覆盖率。您可以消除模型中的缺失覆盖率。
添加测试用例以提高覆盖率
在 slvnvdemo_powerwindow
模型中,And 模块 power_window_control_system/validate_passenger/check_up/allow_action
具有 75% 的条件覆盖率。第一个条件的 true
情形并未发生,因为在模型根级的 Signal Editor 模块 Input
中,激活场景参数设置为 Driver。将激活场景更改为 Passenger。通过点击分析覆盖率,对模型再次进行仿真。
And 模块 allow_action
现在获得 100% 的条件覆盖率。第一个条件在 595 个时间步中为 true,在 2797 个时间步中为 false。此外,条件表和 MCDC 表中的 T1 和 T2 链接各自链接到用于测试每个目标的测试。例如,第一个条件的 true
情形通过测试运行 2 T2 得到满足。点击该链接滚动到报告的聚合测试部分。
在覆盖率结果浏览器中查看覆盖率数据
您还可以使用覆盖率结果浏览器来查看覆盖率数据。在覆盖率选项卡上,点击结果浏览器。运行数据位于左窗格中的当前累积数据下。点击运行 1 和运行 2 以比较覆盖率结果。
点击当前累积数据以查看这两个运行的聚合结果。
聚合结果显示比两个单独测试用例中的任何一个都要高的覆盖率,因为这些测试用例满足某些模块中的不同目标要求。
过滤覆盖率结果
如果您分析覆盖率报告时发现,覆盖率缺失问题无法通过更改模型或测试用例来修复,则可以过滤缺失的结果,使它们不会被报告为缺失覆盖率。您可能想要过滤覆盖率结果的一些潜在原因包括:
模块由不同的测试套件进行测试,不适用于当前的覆盖率分析。
模块旨在捕获您认为无论如何都不应该发生的边缘情形。这种类型的模型设计有时称为防御性编码。
有下面两种类型的覆盖率过滤器:
排除过滤规则可以应用于模型元素,并使覆盖率分析忽略该元素。与不适用于所选度量的其他元素一样,排除的模型元素在突出显示的模型中呈灰显状态。
申述过滤规则可以应用于未满足的覆盖率结果。此过滤规则允许 Simulink® Coverage™ 分析模型元素的其余部分,但不会将申述的结果报告为缺失覆盖率。此过滤规则允许您提高模型对象的覆盖率,而无需完全排除它。
假设 And 模块条件 1 的 MCDC 结果已由不同的测试套件进行测试,并且不适用于此情形。您可以对结果进行申述,使其不会被报告为缺失覆盖率。
点击 And 模块 allow_action
以滚动到覆盖率报告中的相关部分。MCDC 条件 C1 (allow_action In1)
不完整,因为未发生 TF
情形。要对 C1 (allow_action In1)
MCDC 结果进行申述,请点击“添加申述规则”图标 。
覆盖率结果浏览器会打开过滤器编辑器窗格,其中包含一个新的无标题过滤器文件。该过滤器文件包含指定结果的申述规则。您可以将多个过滤规则添加到同一过滤器文件中。
在名称字段中,输入 slvnvdemo_powerwindow_filter
。在过滤规则下,双击理由字段,然后输入 Tested in a different test suite
。点击应用,然后保存文件。模型和覆盖率报告会自动更新,以表明结果已申述。
在覆盖率详细信息窗格中,已申述的结果以青色突出显示,并链接到申述理由。点击 J1 将转到标题为从覆盖率分析中滤除的对象的报告部分。仅当您对覆盖率数据应用一个或多个过滤器时,报告的这一部分才会显示。
命令行信息
要以编程方式添加测试和聚合覆盖率,请输入以下命令:
blockPath = [modelName,'/Input']; set_param(blockPath,'ActiveScenario','Passenger') simOut2 = sim(simIn); covDataRun2 = simOut2.covData; cvmodelview(covDataRun2); aggregatedCovData = covData + covDataRun2;
要以编程方式过滤覆盖率结果,请输入以下命令:
filt = slcoverage.Filter; setFilterName(filt,'slvnvdemo_powerwindow_filter'); blockPath = [modelName,'/power_window_control_system/validate_passenger/check_up/allow_action']; sel = slcoverage.MetricSelector(slcoverage.MetricSelectorType.MCDCOutcome,blockPath,1,1); rule = slcoverage.FilterRule(sel,'Tested in a different test suite'); addRule(filt,rule); save(filt,'slvnvdemo_powerwindow_filter') aggregatedCovData.filter = 'slvnvdemo_powerwindow_filter';