Main Content

使用 Simulink Test 中的测试管理器分析模型覆盖率

如果您拥有 Simulink® Test™ 许可证,则可以直接从测试管理器收集覆盖率。有关 Simulink Test 的详细信息,请参阅Simulink Test 快速入门 (Simulink Test)

当您分析模型的覆盖率时,Simulink Coverage™ 会报告并突出显示您的设计中在仿真期间执行的模型对象。使用测试管理器可探索测试和聚合覆盖率,以查看哪些测试激活了特定的模型对象。您可以在一个测试套件中运行多个测试,分析每个测试的覆盖率,然后在测试管理器中查看结果集的聚合结果。使用覆盖率报告和模型突出显示可了解在指定的测试用例期间激活的模型部分。

打开模型

打开 slvnvdemo_powerwindow 模型。slvnvdemo_powerwindow 包含一个电动车窗控制器和一个低阶被控对象模型。该控制器是通过一个 Stateflow® 图来实现的。

选择您的覆盖率度量

App 选项卡上,点击 Simulink Test 以打开测试选项卡。点击 Simulink 测试管理器

此示例包括一个测试文件。在测试管理器中,点击打开。在“打开文件”窗口中,选择 powerwindow_tests.mldatx

测试浏览器窗格中,点击 powerwindow_tests。然后,点击覆盖率设置以展开覆盖率选项。

Test Manager showing an open test file, which contains one test suite titled Powerwindow Test Suite. The test suite contains two test cases.

要为模型启用覆盖率,请在要收集的覆盖率下,选择记录在测系统的覆盖率。在覆盖率度量下,您可以选择要报告的度量。有关覆盖率度量的信息,请参阅结构覆盖率度量

对于此示例,请选择决策条件MCDC

运行测试并收集覆盖率

powerwindow_tests 测试文件中有两个测试。Test Case 1Signal Editor 场景设置为 Driver,是模型中的默认设置。Test Case 2Signal Editor 场景设置为 Passenger

在测试管理器中,您可以通过在测试浏览器中选择单个测试或整个测试套件,然后点击运行来运行它们。选择 Test Case 1,然后点击运行

测试完成后,结果和工件选项卡会打开。点击测试的结果以查看覆盖率结果摘要。

Test Manager showing results for test case 1. Coverage reported is: 71% decision, 79% condition, 32% MCDC, and 100% execution.

Test Case 1 是 Signal Editor 场景设置为 Driver 的情形。您可以在覆盖率结果表的分析的模型列中点击该模型的名称,以在启用模型突出显示的情况下显示该模型的覆盖率结果。覆盖率详细信息窗格也会在 Simulink 窗口中打开。

Simulink window after simulation with coverage enabled. The model is highlighted, some blocks are green, red, and grey. On the right side of the model, a coverage report is open, docked in the Simulink window.

window_system 子系统显示为绿色,因为该子系统内的每个模块均获得 100% 的覆盖率。其他子系统显示为红色,因为其中的一个或多个模块没有获得全覆盖率。

您可以指向某个子系统以查看每个相关度量的覆盖率的简短摘要。例如,指向 power_window_control_system 子系统模块。

Coverage results popup. Decision 100% (2/2), Condition 79% (62/78), MCDC 32% (7/22), Execution 100% (39/39).

如果您左键点击某个模块,覆盖率详细信息窗格将显示该模块的报告部分。例如,点击 power_window_control_system 子系统。

Simulink window after clicking on a subsystem. The docked coverage report shows the section of the report that details coverage results for the subsystem.

您可以进入某个子系统来查看该子系统内容的详细覆盖率结果。双击 power_window_control_system 子系统并查看其包含的模块的覆盖率结果。双击 validate_passenger,然后双击 check_up

点击 And 模块 allow_action 以显示报告的相关部分。

Simulink window after clicking on the And block. The And block is red and the coverage report is displayed on the right.

点击 And 模块以查看条件和 MCDC 结果。由于 And 模块输出两个输入信号的逻辑组合,因此如果两个输入信号均为 true,则输出信号为 true。从条件表中可以看到,输入信号 1 在每个时间步均为 false,而输入信号 2 在 878 个时间步为 true,在 884 个时间步为 false。由于有四种条件结果,而其中一种没有出现,因此 allow_action 模块获得了 75% 的条件覆盖率。

MCDC 分析表列出了由于一种条件结果从 true 变为 false 或从 false 变为 true 而发生的决策逆转。此表报告在第一个条件下只出现了 FF 情形,在第二个条件下没有出现 MCDC 目标,这导致报告的 MCDC 为 0%。

运行多个测试并查看聚合覆盖率

slvnvdemo_powerwindow 模型中,And 模块 power_window_control_system/validate_passenger/check_up/allow_action 具有 75% 的条件覆盖率,因为模型根级的 Signal Editor 模块 Input激活场景设置为 Driver。通过在覆盖率分析中包含 Test Case 2 可以解决这种覆盖率缺失问题。

在测试管理器中,打开测试浏览器选项卡。点击 Powerwindow Test Suite,然后点击运行以运行该测试套件中的测试。测试完成后,测试管理器会打开结果和工件窗格。展开新测试的结果。您可以通过展开每个测试用例来查看每个单独测试的覆盖率结果。

选择 Powerwindow Test Suite,然后点击模型名称 slvnvdemo_powerwindow,以打开该模型并突出显示覆盖率。导航到 power_window_control_system/validate_passenger/check_up,然后点击 And 模块。在覆盖率报告中,条件覆盖率现在为 100%。此外,条件表和 MCDC 表中的 T1T2 链接各自链接到满足每个目标要求的测试。例如,第一个条件的 true 情形通过测试用例 2 T2 得到满足。点击该链接滚动到报告的聚合测试部分。

在测试管理器的聚合覆盖率结果表中,总体覆盖率结果有所改善。当您点击测试套件或测试文件名时,您将看到其中的测试的聚合覆盖率结果。

Test Manager on the Results and Artifacts tab with Powerwindow Test Suite selected. Coverage results are: 86% decision, 92% condition, 45% MCDC, and 100% execution.

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

过滤覆盖率结果

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

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

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

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

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

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

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

在模型中,导航到子系统 power_window_control_system/validate_passenger/check_up 并点击 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 将转到标题为从覆盖率分析中滤除的对象的报告部分。仅当您对覆盖率数据应用一个或多个过滤器时,报告的这一部分才会显示。

返回测试管理器。点击结果集。在聚合覆盖率结果部分,覆盖率过滤器已自动应用,并且 MCDC 覆盖率结果现在为 50%。

注意

您必须点击顶层结果才能查看应用的覆盖率过滤器。该过滤器不包含在测试套件或测试用例结果中。

要应用其他覆盖率过滤器文件,请点击结果集,展开覆盖率过滤器部分,然后点击添加

创建和存档报告

要创建覆盖率报告,请点击报告列中的箭头。您也可以点击聚合覆盖率结果表下的导出。然后,使用 cvhtml 创建覆盖率报告。例如,使用变量名称 coverageData 导出结果,然后输入以下命令:

cvhtml('testManager_covData',coverageData)

相关主题