主要内容

扩展现有测试套件

此示例说明如何使用 Simulink® Design Verifier™ 扩展现有测试套件以获得缺失模型覆盖率。

您将分析一个示例模型,并生成测试套件以实现全覆盖率。然后修改模型,使测试用例不再实现全覆盖率。最后,使用 Simulink® Design Verifier™ 分析修改后的模型,以获得缺失覆盖率。

生成初始测试套件

分析 sldvdemo_cruise_control 模型并生成实现全模型覆盖率的测试套件。要分析模型以生成提供模型覆盖率的测试用例,请使用 sldvrun 函数。使用 sldvoptions 设置设计验证参数。

open_system 'sldvdemo_cruise_control';
opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'MCDC';
opts.SaveHarnessModel = 'off';
opts.SaveReport = 'off';
[ status, files ] = sldvrun('sldvdemo_cruise_control', opts, true);

测试生成分析结果显示在“Simulink Design Verifier 结果摘要”窗口中。

close_system('sldvdemo_cruise_control',0);

验证完整覆盖率

sldvruntest 函数使用现有测试套件来对模型进行仿真。cvhtml 函数生成覆盖率报告,指示 sldvdemo_cruise_control 模型的初始覆盖率。

open_system 'sldvdemo_cruise_control';
[ outData, initialCov ] = sldvruntest('sldvdemo_cruise_control', files.DataFile, [], true);
cvhtml('Initial coverage',initialCov);
close_system('sldvdemo_cruise_control',0);

修改模型

加载修改后的 sldvdemo_cruise_control_mod 模型。通过使用 Saturation 模块,将控制器目标速度值限制为 70。

load_system 'sldvdemo_cruise_control_mod';
load_system 'sldvdemo_cruise_control_mod/Controller';

测量现有测试套件实现的覆盖率

sldvruntest 函数使用现有测试套件和与 sldvdemo_cruise_control 模型相同的输入来对修改后的 sldvdemo_cruise_control_mod 模型进行仿真。cvhtml 函数生成覆盖率报告,指示修改后的 sldvdemo_cruise_control_mod 模型不再实现全覆盖率。

[ outData, startCov ] = sldvruntest('sldvdemo_cruise_control_mod', files.DataFile, [], true);
cvhtml('Coverage with the original testsuite',startCov);

扩展现有测试套件

为了实现全模型覆盖率,sldvgencov 函数会分析模型并扩展现有测试套件。

[ status, covData, files ] = sldvgencov('sldvdemo_cruise_control_mod', opts, true, startCov);

验证完整覆盖率

验证新的测试套件是否对修改后的 sldvdemo_cruise_control_mod 模型实现了全覆盖率。sldvruntest 函数使用扩展后的测试套件来对修改后的模型进行仿真。cvhtml 报告显示 sldvdemo_cruise_control_mod 模型实现的总体覆盖率。

[ additionalOut, additionalCov ] = sldvruntest('sldvdemo_cruise_control_mod', files.DataFile, [], true);
totalCov = startCov + additionalCov;
cvhtml('With additional coverage',totalCov);

要完成示例,请关闭模型。

close_system('sldvdemo_cruise_control_mod');