Main Content

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

运行测试套件并解决缺失的模型覆盖率

此示例显示如何运行测试套件、收集覆盖率以及生成测试用例以满足缺失的模型覆盖率。

在此示例中,您将测试在自动驾驶汽车的自适应巡航控制中计算车辆目标速度的算法。您的测试必须确保您的开发团队按照需求实现了算法。

在此示例中,测试套件包含几个与需求相关的测试用例。您使用:

  • Requirements Toolbox™ 管理 Simulink 环境中的需求

  • Simulink® Test™ 开发、管理和执行基于仿真的测试

  • Simulink® Coverage™ 用于测量 Simulink 模型和生成代码的测试覆盖率

  • Simulink® Design Verifier™ 检测设计错误,生成测试以实现测试覆盖率目标,并使用静态分析正式验证需求

模型覆盖率衡量您的设计有多少部分已经通过仿真进行了测试。拥有完整的模型覆盖率可以增强您对彻底测试模型行为的信心。缺失模型覆盖率可能是由于逻辑无效、测试不完整、功能意外、需求不完整或缺失造成的。

在测试管理器中打开测试套件

首先,打开工程。

prj = openProject("RequirementsBasedTestingProject");
Refreshing Simulink customizations

在测试管理器中打开测试文件。

sltest.testmanager.clear
sltest.testmanager.load('CruiseControl_TestSuite.mldatx');
sltest.testmanager.view

test-suite-open.png

测试套件由许多测试用例组成,每个测试用例测试一个需求。

启用覆盖率分析

要在测试管理器中启用模型覆盖率:

  1. 测试浏览器窗格中,点击 CruiseControl_TestSuite 测试套件。

  2. 打开覆盖率设置部分。

  3. 要收集的覆盖率部分中,选择记录在测系统的覆盖率

覆盖率度量部分中,选择了决策条件MCDC。要了解有关这些覆盖率度量的更多信息,请参阅模型覆盖的类型

test-manager-coverage.png

执行测试套件

测试浏览器窗格中,选择测试套件 CruiseControl_TestSuite,然后点击运行

test-manager-run.png

测试管理器切换到结果和工件选项卡以显示测试执行进度。该测试套件有 15 个测试用例。

查看模型覆盖率结果

要查看模型覆盖率结果,点击结果和工件选项卡中最近的测试运行,然后展开聚合覆盖率结果。收集同一模型的多个测试的模型覆盖率,并将结果添加到单个覆盖率摘要中,这称为覆盖率聚合,因为模型覆盖率是针对每个测试用例收集的,然后在测试套件中的所有测试用例中进行聚合。

测试报告几乎全覆盖。要确认收到的覆盖率基于正确的需求,请选择将覆盖率范围结果范围限定到链接的需求

scope-coverage-to-requirements.png

测试现在根据需求确定覆盖率结果。

scoped-coverage-results.png

当您将范围限定在需求内时,覆盖率结果会降低。这种减少是由于偶然覆盖率造成的,当测试用例执行与该测试用例要测试的需求无关的模型的一部分时,就会发生这种情况。在需求范围覆盖率中,只有通过与该目标的需求相关的测试用例完全执行,该目标才被完全覆盖。

要进一步调查,请点击聚合覆盖率结果中的报告图标打开覆盖率结果。

stm-coverage-report-icon.png

覆盖率报告显示与链接需求范围相符的覆盖率结果的摘要。缺失覆盖率标为红色,大部分缺失覆盖率是由于偶然覆盖率造成的,您可以通过将结果范围限定为链接需求来删除这些偶然覆盖率。

cov-report-summary.png

在“摘要”部分,点击 SF:ON

cov-report-state-on.png

大多数覆盖率目标都有相关的测试用例,即使它们没有得到满足。此外,没有针对“ON”状态的需求链接。欲查看完全覆盖率目标的示例,请查看从结点 #0 到交叉口 #1 的转移

cov-report-fully-covered-objective.png

Stateflow 转移由测试用例 T3 完全执行,该测试用例是与转移的父需求相关的测试用例。在这种情况下,Stateflow 转移没有偶然覆盖率。

解决附带保险问题

要解决“ON”状态的偶然覆盖率问题,请查看需求以确定工程是否缺少需求,或者“ON”状态是否实现了现有需求。

打开需求编辑器中设置的需求:

slreq.clear
reqSet = 'CruiseControl_TestSuite.slreqx';
slreq.open(reqSet);
rmi.navigate('linktype_rmi_slreq',reqSet,'17')
clear reqSet

需求 2.4 是与此部分设计相关的正确需求。

requirement-17.png

在需求编辑器中,通过选择需求并点击添加链接>选择与需求的链接,创建从需求 2.4 到状态的链接。

requirements-editor-add-link.png

调查不完全覆盖

在根据需求确定覆盖率范围之前,工程覆盖率是不完整的。您可以通过打开测试管理器并清除范围覆盖率结果至链接需求来确认这一点。

scope-coverage-to-requirements.png

这种缺失覆盖率表明模型的某些部分在仿真中没有得到运用。

要打开突出显示覆盖率结果的模型,请在聚合覆盖率结果部分中点击模型名称。

stm-coverage-modelname.png

或者,您可以使用 Simulink 画布左下角的覆盖率详细信息徽章打开覆盖率详细信息窗格。

coverage-annotated-canvas.png

当您点击模型中的元素时,覆盖率详细信息窗格会显示每个模型元素的覆盖率结果。

生成测试向量以分析缺失的模型覆盖率

导致模型覆盖率不完整的可能根本原因有很多,例如死逻辑、基于需求的测试不完整、缺失或不完整的需求。在某些情况下,由于设计的复杂性,不完整的模型覆盖率可能难以分析。在这些情况下,您可以使用 Simulink Design Verifier 来创建自动生成的测试,以帮助您了解达到设计中给定点所需的仿真输入。您还可以使用这些生成的测试来补充现有的基于需求的测试。这些生成的测试不是基于需求的,因为它们不包括您必须定义的预期结果。

对于这个例子来说,最重要的两个问题是:

  1. 该设计是否完全可测试?换句话说,是否存在死逻辑?如果无法生成测试来到达模型的某些部分,则可能存在死逻辑。

  2. 如果设计完全可测试,那么测试用例是什么样的?您可以将测试用例视为一种语言,它可以帮助您了解为什么基于需求的测试缺少测试覆盖率。

在测试管理器的结果和工件窗格中,点击最近的测试运行。在聚合覆盖率结果部分下,选择最新的一组覆盖率结果,然后点击添加缺失覆盖率测试

add-tests-for-missing-coverage.png

在“添加缺失覆盖率测试”窗口中,选择以下选项:

  1. 框架<Create a new harness>

  2. Signal Editor

  3. 测试用例<Create a new test case>

  4. 测试类型Simulation Test

  5. 测试文件CruiseControl_TestSuite

  6. 点击确定

add-tests-dialog-box.png

结果窗口表明,Simulink Design Verifier 考虑了现有测试用例所实现的覆盖率,并生成了测试向量以实现另外四个覆盖率目标的覆盖率。

sldv-results.png

四个缺失覆盖率目标都得到满足,表明它们不是死逻辑。有关更多信息,请参阅如何使用 Simulink Design Verifier 自动检测 Simulink 模型中的设计错误

当 Simulink Design Verifier 生成测试时,新的测试用例会出现在测试管理器中。

stm-generated-tests.png

这三个测试向量是该测试用例内的迭代。

test-vector-iterations.png

使用自动生成的测试向量生成完整测试套件的覆盖率报告

要了解这些测试向量如何帮助实现测试套件缺失覆盖率目标,请查看覆盖率报告。

右键点击测试用例并选择剪切,将新的测试用例移动到现有测试套件中。然后右键点击 CruiseControl_TestSuite 并点击粘贴。右键点击新建测试用例 1 并选择重命名,将测试用例重命名为 Generated test vectors

generated-test-vectors.png

生成的测试向量测试用例的输入部分中,选择在测试结果中包含输入数据

include-inputs-in-results.png

使用新的测试用例运行 CruiseControl_TestSuite 并查看更新的测试结果。

stm-topped-off-coverage.png

测试套件摘要显示已通过 18 项测试。生成的测试向量满足缺失覆盖率,但 Simulink Design Verifier 不会分析模型对于这些输入向量的预期输出是什么。如果您想在测试中使用这些测试用例,则必须确定在给定生成的输入时模型输出应该是什么,并根据需要更新或创建需求或测试。

通过点击聚合覆盖率结果部分中报告列中的箭头图标来生成新的覆盖率报告。

generate-coverage-report.png

在覆盖率报告中,在摘要部分中,点击 SF:ON 打开该状态的详细信息部分。

cov-report-summary-2.png

要查看分析模型从 Accel 子状态退出 ON 状态情形下的测试用例,请返回覆盖率报告部分 State "ON" 并查看 State "Accel" 行。测试用例 T18 是 Simulink Design Verifier 生成的测试用例之一,它满足此目标。

test-case-t18.png

要滚动到测试列表,点击 T18

testcase-3.png

返回测试管理器以可视化测试用例

T18 是 TestCase_3。要在测试管理器中查看测试用例,点击 TestCase_3

stm-testcase-3.png

通过点击可视化 > 显示仿真输出图来可视化测试用例。

stm-visualize.png

您可以:

  • 使用信号编辑器输入下拉菜单添加输入来查看输入。

  • 使用子图按钮添加子图。

  • 放大特定时间并使用光标平移测试用例。

stm-visualizing-data.png

根据您对 Simulink Design Verifier 生成的输入向量的分析,您必须采取措施来解决模型中的问题。您可以:

  • 编写新需求

  • 修改现有需求

  • 附加到或修改现有测试

  • 解释缺失覆盖率

最简单的选择是附加或修改现有测试。对于此示例,将附加步骤附加到 Disengage upon braking event 测试用例。

  1. 点击测试浏览器可以查看测试用例。

  2. 点击刹车时脱离

  3. 在测系统部分的测试框架下,点击测试框架名称旁边的箭头以打开该测试框架。

stm-open-harness.png

使用测试框架,您可以修改测试用例以满足生成的测试用例所满足的覆盖率目标。

相关主题