在参考模型中实现缺失覆盖
如果仿真的引用模型没有达到全覆盖率,可以使用 Simulink® Design Verifier™ 来生成达到全覆盖率的测试用例。有两种方法:
以编程方式实现缺失覆盖率:使用用于测试生成分析的 API 为参考模型生成测试用例。
逐步增加覆盖率:为缺少覆盖率分析功能的测试框架模型生成测试用例。
以编程方式实现引用模型中的缺失覆盖率
该示例模型使用了未实现全覆盖率的参考模型。当您对引用模型运行测试生成分析并将其与之前记录的覆盖率数据相结合时,您可以实现引用模型的 100%覆盖率。
记录示例模型的覆盖率数据
仿真示例模型。记录条件、决策和 MCDC 覆盖率。
打开示例模型
sldemo_mdlref_basic。openExample('sldemo_mdlref_basic');Model 模块
CounterA、CounterB和CounterC引用模型sldemo_mdlref_counter。在 App 选项卡上,点击 App 部分右侧的箭头。
在模型验证、确认和测试下,点击覆盖率分析器。
在覆盖率选项卡上,点击设置。
在“配置参数”对话框的覆盖率窗格中,设置以下选项:
选择启用覆盖率分析。
选择引用模型。
点击选择模型。在“选择覆盖率分析模型”对话框中,选中引用模型
sldemo_mdlref_counter的复选框。点击确定。sldemo_mdlref_counter的复选框变得可见,对应CounterA和CounterB。由于参考模型CounterC处于加速仿真模式,因此未启用CounterC的覆盖率。指定在仿真期间要记录哪些类型的覆盖率。在覆盖率度量下,选择 MCDC。
在“配置参数”的 覆盖率 > 结果窗格中。设置以下选项:
选择将上次运行保存在工作区变量中将最近一次仿真运行收集的覆盖率数据保存在 MATLAB® 工作区中的变量中。
在 cvdata 对象名称字段中,输入
covdata_original为覆盖数据工作区变量指定一个唯一名称。
点击确定。
为了记录覆盖率数据,启动
sldemo_mdlref_basic模型的仿真。仿真结束后,覆盖率报告打开。报告表明,对于引用模型
sldemo_mdlref_counter实现了以下覆盖率:决策:25%
条件:50%
MCDC:0%
仿真将覆盖率数据保存在 MATLAB 工作区变量
covdata_original中,其中包含覆盖率数据的cvdata对象。将覆盖率数据保存在 MATLAB 路径上的文件中:
cvsave('existingcov',covdata_original);继续此示例时保持模型打开。
查找缺失覆盖率的测试用例
为了实现 sldemo_mdlref_counter 模型的 100%覆盖率,请运行使用现有覆盖率数据的测试生成分析。
打开引用模型。在命令行中输入:
openExample('sldemo_mdlref_counter');创建一个
sldvoptions对象:opts = sldvoptions;
创建
sldvoptions对象时,请指定:该分析忽略了满足条件的覆盖率数据。
包含满足条件的覆盖率数据的文件名 (
existingcov.cvt)
输入以下命令来指定这些选项:
opts.IgnoreCovSatisfied = 'on'; opts.CoverageDataFile = 'existingcov.cvt';
使用指定的选项分析引用模型
sldemo_mdlref_counter:[status, fileNames] = sldvrun('sldemo_mdlref_counter',opts,true);Simulink Design Verifier 分析满足七个目标并为引用模型创建了一个测试用例。
下一个过程使用分析创建的测试用例仿真引用模型 sldemo_mdlref_counter。
实现缺失覆盖率
为了实现引用模型 sldemo_mdlref_counter 的缺失覆盖率,请使用来自 Simulink Design Verifier 分析的测试用例来仿真该模型。
打开引用模型。在命令行中输入:
openExample('sldemo_mdlref_counter');为仿真创建一个
cvtest对象并指定记录决策、条件和 MCDC 覆盖率。cvt = cvtest('sldemo_mdlref_counter'); cvt.settings.decision = 1; cvt.settings.condition = 1; cvt.settings.mcdc = 1;指定录音覆盖率并设置
cvtest对象的名称。runOpts = sldvruntestopts; runOpts.coverageEnabled = true; runOpts.coverageSetting = cvt;
使用
cvtest对象、cvt和fileNames.DataFile中定义的测试用例仿真模型。将记录的覆盖率数据保存在工作区变量covdata_missing中。[~, covdata_missing] = sldvruntest('sldemo_mdlref_counter', fileNames.DataFile, runOpts);
验证完整模型覆盖率
您将顶层模型 sldemo_mdlref_basic 的仿真的覆盖率数据保存在工作区变量 covdata_original 中。要创建一份将顶层模型的覆盖率数据与引用模型 sldemo_mdlref_counter 的缺失覆盖率数据相结合的报告,请输入以下命令:
cvhtml('Coverage Summary', covdata_original, covdata_missing);报告显示,通过分析参考模型并使用这些结果记录覆盖率,可以实现 100% 的决策、条件和 MCDC 覆盖率。

增加测试框架中引用模型的覆盖率
您可以逐步实现生成的测试框架模型的全面覆盖率。此示例显示如何首先生成未实现完全覆盖率的测试框架模型。接下来,它展示了如何在测试框架模型上运行缺失覆盖率分析以生成 100%覆盖率的测试用例。
注意
此方法仅支持引用输入模型的 Simulink Design Verifier 生成的测试框架模型。当测试单元从顶层模型复制时,Design Verifier 不适用于测试框架模型。有关详细信息,请参阅 生成的框架中的引用输入模型。
生成测试框架模型并记录覆盖率数据
为了实现 sldemo_mdlref_counter 模型的完全覆盖率,请对 Simulink Design Verifier 生成的框架模型运行缺失覆盖率分析。
打开示例模型:
openExample('sldemo_mdlref_counter');为引用模型
sldemo_mdlref_counter创建框架模型:[savedHarnessFilePath] = sldvmakeharness('sldemo_mdlref_counter');有关框架模型的更多信息,请参阅管理 Simulink Design Verifier 框架模型。
在框架模型
sldemo_mdlref_counter_harness中,将格式指定为数据集。这会导致引用模型sldemo_mdlref_counter和框架模型sldemo_mdlref_counter_harness具有相同的参数设置。有关详细信息,请参阅模型配置参数:数据导入/导出。仿真
sldemo_mdlref_counter_harness模型,记录框架模型中测试用例所达到的覆盖率。仿真结束后,出现覆盖率报告。报告显示了sldemo_mdlref_counter所实现的覆盖率:
生成缺失覆盖率的测试用例
打开框架模型:
open_system('sldemo_mdlref_counter_harness');
要为缺失覆盖率生成测试用例,请在 Design Verifier 选项卡上点击添加缺失覆盖率。通知指示添加的新测试的数量。
Input 模块的 Signal Editor 块参数对话框显示与
Test Case_2一起添加的Test Case_1。
在框架模型中,点击全部运行(覆盖率)。该软件使用所有测试用例仿真框架模型,收集模型覆盖率信息,并显示覆盖率报告。覆盖率报告表明缺失的覆盖率分析记录了
sldemo_mdlref_counter的 100%覆盖率。
更新 Simulink Design Verifier 分析选项
打开框架模型。
open_system('sldemo_mdlref_counter_harness');在 Design Verifier 选项卡上,点击测试生成设置。引用模型 sldemo_mdlref_counter 的“配置参数”对话框打开。为缺失覆盖率分析设置 Design Verifier 选项。有关详细信息,请参阅“配置参数”对话框中的选项。
查看缺失覆盖率分析的有效结果
打开引用模型。
open_system('sldemo_mdlref_counter');在 Design Verifier 选项卡的查看结果部分中,点击加载以前的结果。浏览到之前生成的数据文件并点击打开。
要查看缺失覆盖率测试用例的活动结果,点击结果摘要。“结果摘要”窗口打开,其中显示缺失的覆盖率分析结果。有关活动结果的更多信息,请参阅 查看分析结果。缺失的覆盖率测试用例数据存储在包含名为 sldvData 的结构体的 MAT 文件中。有关详细信息,请参阅 生成 sldvData 结构。
限制
缺失覆盖率分析是一个基于用户界面的工作流程。命令行函数不适用于缺失覆盖率分析。
缺失覆盖率分析工作流不支持约束参数的值。有关详细信息,请参阅 使用参数表查找约束。