主要内容

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

通过扩展基于需求的测试来提高测试完整性

R2026b

在基于模型的设计中,需求定义了组件或系统的预期行为。根据这些需求,您可以推导出功能测试,以验证实现是否符合预期行为。随着设计的演进,您需要执行这些测试并审查覆盖率结果,以评估验证的完整性。有关功能测试的详细信息,请参阅 用于验证的功能测试 (Simulink Test)。

编写功能测试通常有两种常见的方法。在黑盒测试方法中,您根据需求编写功能测试,并利用这些测试来验证其实现。这些测试虽然实现了预期的验证目标,但可能会导致实现中的部分内容未被测试。未覆盖的目标可能表明存在缺失的测试用例、不完整的需求、无效逻辑或实现问题。有关详细信息,请参阅根据需求测试模型并报告结果 (Requirements Toolbox)。

白盒测试方法综合运用了需求、现有测试用例和实现细节。覆盖率分析能够识别出当前测试未考虑的模型行为,这有助于您发现缺失的需求、不完整的测试、实现问题或无效逻辑。尽管这种方法依赖于实现细节,但它有助于发现缺失或冲突的需求,并在测试的后期阶段非常有效。

Simulink® Design Verifier™ 结合 Test Sequence 测试框架中的现有功能测试对模型进行分析,并生成额外的测试用例。生成的测试:

  • 源自输入测试用例

  • 仅添加实现未涵盖目标所需的额外步骤

  • 包含能够说明与原始用户自创测试之间关系的信息

工作流

要使用 Simulink Design Verifier 生成更多测试用例,请采用此工作流。该工作流将覆盖率驱动分析与工程审查相结合,以提高验证的完整性。

  1. 根据需求创建功能测试,并针对模型运行这些测试。

  2. 收集模型覆盖情况,以识别实施过程中未覆盖的目标。

  3. 使用 Simulink Design Verifier 结合现有的测试序列对模型进行分析。Simulink Design Verifier 生成的测试将原始行为进行扩展,以覆盖剩余的目标。

  4. 将新增的行为与原始需求进行对比。确定生成的用例是否体现了有意义的功能,还是表明存在诸如逻辑死区或需求不完整等问题。

  5. 审核完成后,将测试扩展纳入功能测试套件,作为基于需求的附加测试。

Flowchart showing the workflow for creating a functional test case for test generation.

通过扩展现有的基于需求的测试来生成额外的功能测试

本示例演示了如何使用 Simulink® Design Verifier™ 从现有功能测试中生成额外的测试用例。Simulink Design Verifier 并非从头开始生成测试,而是扩展现有的用户编写的测试序列,在保留原始测试意图的同时,生成能够验证此前未被覆盖的模型行为的新测试。在分析完成后,您需要审查生成的测试与原始测试之间的关系,并将经过审查的测试扩展转换为额外的功能测试,以提高模型覆盖率。有关功能测试的详细信息,请参阅 执行功能测试并分析测试覆盖率。

需求

使用基于需求的测试对模型 sldvex_crs_controller 进行验证。

打开模型:

open_system("sldvex_crs_controller");

需求集 sldvex_crs_req_func_spec 中的需求 #29 Activate conditions 规定,只有当驾驶员在有效条件下执行正确的操作序列时,巡航控制系统才会启动。

该需求规定,当驾驶员按下设定速度或增量按钮,且车速不低于 40 公里/小时时,巡航控制器应启动。编写一个测试用例,按照以下步骤验证此需求:

步骤

测试序列中的操作

预期行为

1

打开点火开关。

车辆进入运行状态。

2

将车速提高到 40 公里/小时以上。

巡航控制的激活条件已满足。

3

按下按钮以启用巡航控制。

巡航控制已启用。

4

按下该按钮可设置或增加巡航控制。

巡航控制启动。

该场景模拟了预期中的实际交互情况,并以基于时间、场景驱动的形式构成了功能测试的基础。

模型 sldvex_crs_controller 包含一个测试框架模型 TestControllerActivation_Harness,该模型包含使用 Test Sequence 模块的测试。Test Sequence 模块可让您将预期的系统行为以易于理解的功能场景形式表达出来。

打开测试框架:

sltest.harness.open("sldvex_crs_controller", "TestControllerActivation_Harness");

使用 Test Sequence 模块进行测试设计

双击 TestControllerActivation_Harness 模型中的 Test Sequence 模块,以步骤序列的形式查看驾驶员交互动作。有关详细信息,请参阅 Test Sequence (Simulink Test) 模块。

仿真顶层模型并生成测试

1.在 Simulink® 工具栏的 App 选项卡中,打开设计验证器。

2.在工具栏的分析部分,点击“记住选择”图标 以取消固定当前选择。

3.选择 Model 模块 sldvex_crs_controller。在设计验证器选项卡中,点击生成测试 > 仿真顶层模型并生成测试。

Simulink Design Verifier 为 Model 模块组件生成测试用例。结果摘要窗口显示,在 76 个目标中,有 35 个目标已满足,另有 41 个目标已通过现有测试或覆盖率数据得到满足。要访问详细的分析报告,请点击 HTML。

检查结果

在 Simulink Design Verifier 报告中,点击测试用例。生成的测试用例重用了原来的激活序列。该分析在测试用例 1 的基础上进行了扩展,从而生成测试用例 2。

测试用例 2 保留了 测试用例 1 中的步骤 1 至 1001,并对第 1002 步及之后的步骤进行了修改,以满足新的目标。

在目标部分中点击 sldvex_crs_controller/DriverSwRequest/Switch,以检查相关目标 44.logical trigger input true (output is from 1st input port)。该目标与巡航控制的取消速度有关。在 Simulink® 画布中,Switch 模块被高亮显示,这表明关联目标已由现有测试用例满足。

您还可以使用 TestControllerActivation_Harness.mat 文件查看测试用例与目标的映射关系。

load TestControllerActivation_Harness.mat

使用 Model Slicer 或 Simulation Data Inspector 来可视化信号值或结果。

使用 Model Slicer 可视化结果

在“结果”对话框中,点击与通过现有测试用例满足目标相对应的检查按钮。Model Slicer 打开后,高亮显示的路径表明评估将依次经过各个阶段,直至到达 Cancel 请求逻辑。由于选择了取消路径,子系统将输出值 reqMode.Cancel 赋给 reqMod,该值即成为驱动的请求工作模式。

使用 Simulink 数据检查器可视化结果

在“结果摘要”窗口中点击在 Simulink 数据检查器中查看测试,以查看测试用例 1 和测试用例 2 的信号值。

测试用例 2 首先使用来自 测试用例 1 的初始化序列来激活巡航控制。车辆速度 vehSp 达到 40 km/h,随后在 测试用例 2 的 cncl 信号被触发时降为零,这验证了巡航控制的预期行为。

结合测试用例 2 运行仿真,既可验证该需求,又能扩展测试场景以提高测试覆盖率。

还可以选择将 sldvex_crs_req_func_spec 需求集中的任何与递减模式行为相关的需求与测试用例 2 关联。

另请参阅

|

主题