主要内容

创建和执行测试用例

此示例显示如何使用Simulink®设计验证员™功能来记录输金宝app入信号,创建线束模型,为缺少覆盖,合并线束模型和执行测试用例生成测试用例。

该示例首先将输入信号记录到在其父模型中实现控制器的组件,并根据记录的数据为控制器创建利用模型。您可以使用Sim金宝appulink Design Verifier来找到一个新的测试用例来实现缺失的覆盖率。然后,将第一个管理模型与Simulink设计验证器分析后生成的管理模型合并。金宝app最后,捕获所有测试用例并在仿真模式和软件在环(SIL)模式下使用这些测试用例执行控制器,并使用CGV API比较结果。

检查产品可用性

此示例需要有效的状态福®许可证。为了演示软件循环(SIL)模式下的测试执行,它还需要有效的Simulink®Coder™和嵌入式编码器™许可证。金宝app

如果〜许可证('测试'“Stateflow”返回;结尾canusesil =许可证('测试''实时_workshop')& &...许可证('测试'“RTW_Embedded_Coder”);

将输入信号记录到组件并创建线束模型

slvnvdemo_powerwindow.模型包含一个功率窗控制器和一个低阶工厂模型。组件slvnvdemo_powerwindow power_window_control_system /控制是一个推荐模型的模型块slvnvdemo_powerwindow_controller.,它使用Stateflow®图表实现控制器。

要为控制器创建带有模拟控制器中的信号的控制器模型,请先记录输入信号,然后用记录数据调用线束生成。

Open_System('slvnvdemo_powerwindow');load_system('slvnvdemo_powerwindow_controller');loggedSignalsPlant =...sldvlogsignals('slvnvdemo_powerwindow / power_window_control_system / control');harnessmodelfilepath =...SLDVMakeharness('slvnvdemo_powerwindow_controller',loggedSignalAlplant);[〜,harnessmodel] = fileparts(harnessmodelfilepath);
###启动串行模型参考仿真构建###成功更新模型参考仿真目标为:模型重建行动的原因  ============================================================================================================================ slvnvdemo_powerwindow_controller slvnvdemo_powerwindow_controller_msf代码生成和编译。Mexa64不存在。1 of 1 models built (0 models already up to date)构建时间:0h 0m 29.351 ###启动串行模型参考仿真构建### slvnvdemo_powerwindow_controller的模型参考仿真目标是最新的Build Summary 0 of 1 models built (1 models already up to date) Build duration: 0h 0m 0.8083 - ### Starting serial model reference simulation Build ###成功更新model reference simulation target for:模型重建行动的原因  =============================================================================== slvnvdemo_powerwindow_controller生成和编译代码1的模型建立(0模型已经更新)构建持续时间:0 h 0米15.55秒

用记录信号测量覆盖范围

使用cvtcvsim用于测量控制器模型所实现的模型覆盖率的函数slvnvdemo_powerwindow_controller.利用利用模型中捕获的记录信号。

cvhtml.功能生成报告,表示通过模拟从闭环模型捕获的测试用例来实现40%的决定,35%条件和10%MCDC覆盖。

测试= CVTEST(HarnessModel);test.modelrefsettings.Enable =“上”;test.modelRefSettings.excludeTopModel = 1;covDataFromLoggedSignals = cvsim(测试);cvhtml ('用记录的测试用例的报道',covdatafromloggedSignals);

寻找缺失覆盖率的测试用例

在测试生成期间使用现有覆盖率数据之前,必须将数据保存到覆盖数据文件(.cvt)。您可以通过指定覆盖范围数据路径来使用现有的覆盖率数据覆盖数据文件参数和设置忽略目标在现有的覆盖数据中满足参数在里面测试生成Simulink金宝app设计验证程序配置参数窗格。

正如您在报告中看到的,Simulink Design Ver金宝appifier将测试生成限制为现有覆盖文件中未覆盖的覆盖目标。请注意,8个覆盖目标在zhowsflow图表中控制被证明是不可或缺的。这表示无法测试的不必要的冗余逻辑。

cvsave('现有的vfroomloggedsigns',covdatafromloggedSignals);选择= sldvoptions;opts.ignorecovsatisfied =“上”;选择。CoverageDataFile ='现有录帧romloggedsignals.cvt';opts.modelcoverageObjectives =“MCDC”;opts.testsuiteoptimization =.“LongTestcases”;选择。SaveHarnessModel =“上”;选择。ModelReferenceHarness =“上”;opts.maxprocesstime = 500;[状态,文件名] = sldvrun('slvnvdemo_powerwindow_controller',选择,真实);[〜,newharnessmodel] = fileparts(filenames.harnessmodel);Open_System(NewHarnessModel);

合并Harness模型的测试用例

现在使用SLDVMerGeharness.将生成的测试用例组合在记录的测试用例中。该命令将线束模型列表作为参数。

Sldvergeharness(Harnessmodel,Newharnessmodel);

利示模型的测井测试用例

以编程方式执行模型slvnvdemo_powerwindow_controller.通过在合并的线束模型中捕获的测试用例,首先使用sldvlogsignals函数以必要的数据格式获取所有测试用例的输入值。

loggedsignsallmergedharness = sldvlogsignals(harnessmodel);DISP(LoggedSignalAlsmergergharness);
LoggedTestUnitInfo: [1x1 struct]

使用CGV API执行模拟模式的模型

使用sldvruncgvtest.函数来执行模型slvnvdemo_powerwindow_controller.在模拟模式中,使用从控制模型中捕获的测试用例。

RONOPTS = SLDVRULESTOPTS(“cgv”);disp (runopts);RONOPTS.CGVCONN =“sim卡”;cgvSim = sldvruncgvtest ('slvnvdemo_powerwindow_controller'...loggedSignalsMergedHarness runopts);
testdx: [] allowCopyModel: 0 cgvCompType: 'topmodel' cgvConn: 'sim' Starting execution: ComponentType: topmodel Connectivity: sim InputData: /tmp/Bdoc21a_1606923_115738/tp63569e3a/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_1. txt /tmp/Bdoc21a_1606923_115738/tp63569e3a/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_1. txtmat结束CGV执行:状态完成。开始执行:ComponentType: topmodel Connectivity: sim InputData: /tmp/Bdoc21a_1606923_115738/tp63569e3a/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_2。mat结束CGV执行:状态完成。

使用CGV API在SIL模式下执行模型

现在使用的sldvruncgvtest.函数来执行模型slvnvdemo_powerwindow_controller.在SIL模式下,使用相同的测试用例。

如果canUseSIL runopts。cgvConn ='SIL';别的%不可能时%,示例运行另一个模拟。RONOPTS.CGVCONN =“sim卡”;结尾cgvsil = sldvruncgvtest('slvnvdemo_powerwindow_controller'...loggedSignalsMergedHarness runopts);
开始执行:COMPONENTTYPE:TOPMODEL连接:SIL InputData:/tmp/Bdoc21a_1606923_115738/tp63569e3a/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_1_1.mat ###开始构建过程为:slvnvdemo_powerwindow_controller ###的构建过程的顺利完成为:slvnvdemo_powerwindow_controller制作摘要顶部模型目标内置:模型动作重建原因================================================================================================================= slvnvdemo_powerwindow_controller代码生成和编译的代码生成信息文件不存在。1个型号中的1个(0型号已达到迄今为止)构建持续时间:0H 0M 21.862S ###准备启动SIL模拟...与“GCC”构建。MEX成功完成。###启动组件的SIL仿真:SLVNVDEMO_POWERWINDOM_CONTROLLER ###停止组件SIL仿真:SLVNVDEMO_POWERWINDO_CONTROLLER END CGV执行:状态已完成。开始执行:COMPONENTTYPE:TOPMODEL连接:SIL InputData:/tmp/Bdoc21a_1606923_115738/tp63569e3a/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_2_1.mat ###开始构建过程为:slvnvdemo_powerwindow_controller ###的构建过程的顺利完成为:slvnvdemo_powerwindow_controller制作摘要顶部模型目标内置:模型动作重建原因================================================================================================ slvnvdemo_powerwindow_controller代码生成和编译生成的代码已过期。建造的1个(0型号已最新的0型号)构建持续时间:0H 0M 16.519S ###准备启动SIL仿真......用'GCC'建立建筑物。 MEX completed successfully. ### Starting SIL simulation for component: slvnvdemo_powerwindow_controller ### Stopping SIL simulation for component: slvnvdemo_powerwindow_controller End CGV execution: status completed.

比较模拟和SIL模式的结果

sldvruncgvtest.返回一个cgv。CGV运行测试后的。使用CGV API对在harness模型中设计的每个测试用例在仿真和SIL模式下的执行结果进行比较,表明它们是相等的。

为了i=1:length(loggedSignalsMergedHarness.TestCases) simout = cgvSim.getOutputData(i);silout = cgvSil.getOutputData(我);[matchNames, ~, mismatchNames, ~] =...cgv.CGV.compare (simout silout);流('\ ntest案例(%d):%d信号匹配,%d信号不匹配'...我,长度(匹配法),长度(mismatchnames));结尾
测试用例(1):4信号匹配,0信号不匹配测试案例(2):4信号匹配,0信号不匹配

清理

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

close_system(harnessmodel,0);close_system(newharnessmodel,0);close_system('slvnvdemo_powerwindow',0);close_system('slvnvdemo_powerwindow_controller',0);