通过扩展基于需求的测试来提高测试完整性
R2026b在基于模型的设计中,需求定义了组件或系统的预期行为。根据这些需求,您可以推导出功能测试,以验证实现是否符合预期行为。随着设计的演进,您需要执行这些测试并审查覆盖率结果,以评估验证的完整性。有关功能测试的详细信息,请参阅 用于验证的功能测试 (Simulink Test)。
编写功能测试通常有两种常见的方法。在黑盒测试方法中,您根据需求编写功能测试,并利用这些测试来验证其实现。这些测试虽然实现了预期的验证目标,但可能会导致实现中的部分内容未被测试。未覆盖的目标可能表明存在缺失的测试用例、不完整的需求、无效逻辑或实现问题。有关详细信息,请参阅根据需求测试模型并报告结果 (Requirements Toolbox)。
白盒测试方法综合运用了需求、现有测试用例和实现细节。覆盖率分析能够识别出当前测试未考虑的模型行为,这有助于您发现缺失的需求、不完整的测试、实现问题或无效逻辑。尽管这种方法依赖于实现细节,但它有助于发现缺失或冲突的需求,并在测试的后期阶段非常有效。
Simulink® Design Verifier™ 结合 Test Sequence 测试框架中的现有功能测试对模型进行分析,并生成额外的测试用例。生成的测试:
源自输入测试用例
仅添加实现未涵盖目标所需的额外步骤
包含能够说明与原始用户自创测试之间关系的信息
工作流
要使用 Simulink Design Verifier 生成更多测试用例,请采用此工作流。该工作流将覆盖率驱动分析与工程审查相结合,以提高验证的完整性。
根据需求创建功能测试,并针对模型运行这些测试。
收集模型覆盖情况,以识别实施过程中未覆盖的目标。
使用 Simulink Design Verifier 结合现有的测试序列对模型进行分析。Simulink Design Verifier 生成的测试将原始行为进行扩展,以覆盖剩余的目标。
将新增的行为与原始需求进行对比。确定生成的用例是否体现了有意义的功能,还是表明存在诸如逻辑死区或需求不完整等问题。
审核完成后,将测试扩展纳入功能测试套件,作为基于需求的附加测试。
通过扩展现有的基于需求的测试来生成额外的功能测试
本示例演示了如何使用 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 关联。
另请参阅
主题
- 执行功能测试并分析测试覆盖率
- 通过生成测试输入来增加覆盖率 (Simulink Test)