Main Content

消除缺失覆盖率

查看模型覆盖率结果后,您可能会发现您的模型没有达到 100% 的覆盖率。您可以消除模型中的缺失覆盖率。

添加测试用例以提高覆盖率

slvnvdemo_powerwindow 模型中,And 模块 power_window_control_system/validate_passenger/check_up/allow_action 具有 75% 的条件覆盖率。第一个条件的 true 情形并未发生,因为在模型根级的 Signal Editor 模块 Input 中,激活场景参数设置为 Driver。将激活场景更改为 Passenger。通过点击分析覆盖率,对模型再次进行仿真。

Simulink window after clicking the And block allow_action. The Coverage Details pane shows detailed coverage results for the block.

And 模块 allow_action 现在获得 100% 的条件覆盖率。第一个条件在 595 个时间步中为 true,在 2797 个时间步中为 false。此外,条件表和 MCDC 表中的 T1T2 链接各自链接到用于测试每个目标的测试。例如,第一个条件的 true 情形通过测试运行 2 T2 得到满足。点击该链接滚动到报告的聚合测试部分。

在覆盖率结果浏览器中查看覆盖率数据

您还可以使用覆盖率结果浏览器来查看覆盖率数据。在覆盖率选项卡上,点击结果浏览器。运行数据位于左窗格中的当前累积数据下。点击运行 1运行 2 以比较覆盖率结果。

Side-by-side comparison of Run 1 and Run 2 coverage results summary in the Coverage Results Explorer.

点击当前累积数据以查看这两个运行的聚合结果。

Coverage Results Explorer cumulative data view.

聚合结果显示比两个单独测试用例中的任何一个都要高的覆盖率,因为这些测试用例满足某些模块中的不同目标要求。

过滤覆盖率结果

如果您分析覆盖率报告时发现,覆盖率缺失问题无法通过更改模型或测试用例来修复,则可以过滤缺失的结果,使它们不会被报告为缺失覆盖率。您可能想要过滤覆盖率结果的一些潜在原因包括:

  • 模块由不同的测试套件进行测试,不适用于当前的覆盖率分析。

  • 模块旨在捕获您认为无论如何都不应该发生的边缘情形。这种类型的模型设计有时称为防御性编码

有下面两种类型的覆盖率过滤器:

  • 排除过滤规则可以应用于模型元素,并使覆盖率分析忽略该元素。与不适用于所选度量的其他元素一样,排除的模型元素在突出显示的模型中呈灰显状态。

  • 申述过滤规则可以应用于未满足的覆盖率结果。此过滤规则允许 Simulink® Coverage™ 分析模型元素的其余部分,但不会将申述的结果报告为缺失覆盖率。此过滤规则允许您提高模型对象的覆盖率,而无需完全排除它。

假设 And 模块条件 1 的 MCDC 结果已由不同的测试套件进行测试,并且不适用于此情形。您可以对结果进行申述,使其不会被报告为缺失覆盖率。

点击 And 模块 allow_action 以滚动到覆盖率报告中的相关部分。MCDC 条件 C1 (allow_action In1) 不完整,因为未发生 TF 情形。要对 C1 (allow_action In1) MCDC 结果进行申述,请点击“添加申述规则”图标

覆盖率结果浏览器会打开过滤器编辑器窗格,其中包含一个新的无标题过滤器文件。该过滤器文件包含指定结果的申述规则。您可以将多个过滤规则添加到同一过滤器文件中。

The Filter Editor showing the new Untitled filter.

名称字段中,输入 slvnvdemo_powerwindow_filter。在过滤规则下,双击理由字段,然后输入 Tested in a different test suite。点击应用,然后保存文件。模型和覆盖率报告会自动更新,以表明结果已申述。

Simulink window after clicking on the And block. The docked coverage report shows the section of the report that details coverage results for the And block, and the C1 MCDC outcome is highlighted cyan to indicate that it is justified.

覆盖率详细信息窗格中,已申述的结果以青色突出显示,并链接到申述理由。点击 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';

相关主题