主要内容

创建和执行测试用例

这个例子展示了如何使用Simulink®Design Ver金宝appifier™函数来记录输入信号,创建一个利用模型,为缺失的覆盖率生成测试用例,合并利用模型,并执行测试用例。

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

检查产品的可用性

本示例需要有效的statflow®许可证。为了演示在软件在环(SIL)模式下的测试执行,还需要有效的Simulink®Coder™和Embedded Coder™许可证。金宝app

如果~许可证(“测试”“Stateflow”返回结束canUseSIL =许可证(“测试”“Real-Time_Workshop”) & &...许可证(“测试”“RTW_Embedded_Coder”);

记录组件的输入信号并创建控制模型

slvnvdemo_powerwindow模型包含一个动力窗控制器和一个低阶电厂模型。组件slvnvdemo_powerwindow power_window_control_system /控制模型块引用模型吗slvnvdemo_powerwindow_controller,它使用statflow®图表来实现控制器。

要使用模拟工厂模型中的控制器的信号为控制器创建一个利用模型,首先记录输入信号,然后使用记录的数据调用利用模型生成。

open_system (“slvnvdemo_powerwindow”);load_system (“slvnvdemo_powerwindow_controller”);loggedSignalsPlant =...sldvlogsignals (“slvnvdemo_powerwindow / power_window_control_system /控制”);harnessModelFilePath =...sldvmakeharness (“slvnvdemo_powerwindow_controller”, loggedSignalsPlant);[~, harnessModel] = fileparts (harnessModelFilePath);
###启动串行模型引用仿真构建### #成功更新了模型引用仿真目标:模型重建行动的原因  ============================================================================================================================ slvnvdemo_powerwindow_controller slvnvdemo_powerwindow_controller_msf代码生成和编译。Mexa64并不存在。###启动串行模型参考仿真构建### # slvnvdemo_powerwindow_controller的模型参考仿真目标是最新的。Build Summary 0 of 1 models built (1 models already up to) Build duration: 0h 0m 0.65053s ### #启动serial model reference simulation Build ###成功更新model reference simulation target for:模型重建行动的原因  =============================================================================== slvnvdemo_powerwindow_controller生成和编译代码1的模型建立(0模型已经更新)构建持续时间:0 h 0米13.436秒

用记录的信号测量覆盖率

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

cvhtml函数生成一个报告,该报告指出,通过模拟从闭环模型中捕获的测试用例,可以实现40%的Decision、35%的Condition和10%的MCDC覆盖率。

测试= cvt (harnessModel);test.modelRefSettings.enable =“上”;test.modelRefSettings.excludeTopModel = 1;covDataFromLoggedSignals = cvsim(测试);cvhtml (“使用记录的测试用例的覆盖率”, covDataFromLoggedSignals);

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

在您可以在测试生成期间使用现有的覆盖率数据之前,必须将数据保存到覆盖率数据文件(.cvt)中。中的覆盖率数据路径可以使用现有的覆盖率数据覆盖率数据文件参数,并设置忽略在现有覆盖数据中满足的目标参数测试生成Simulink金宝app Design Verifier配置参数的窗格。

正如您在报告中所看到的,Simulink Design Ve金宝apprifier将测试生成限制为现有覆盖文件中没有覆盖的覆盖目标。注意状态流程图中有8个覆盖率目标控制被证明是无法令人满意的。这表示无法测试不必要的冗余逻辑。

cvsave (“existingCovFromLoggedSignals”, covDataFromLoggedSignals);选择= sldvoptions;选择。IgnoreCovSatisfied =“上”;选择。CoverageDataFile =“existingCovFromLoggedSignals.cvt”;选择。ModelCoverageObjectives =“MCDC”;选择。TestSuiteOptimization =“LongTestcases”;选择。SaveHarnessModel =“上”;选择。ModelReferenceHarness =“上”;选择。MaxProcessTime = 500;[status, filename] = sldvrun(“slvnvdemo_powerwindow_controller”、选择正确的);[~, newharnesmodel] = fileparts(filnames . harnessmodel); / /新建一个文件open_system (newHarnessModel);

从利用模型合并测试用例

现在使用sldvmergeharness将生成的测试用例与记录的测试用例结合起来。该命令以一列仪表模型作为参数。

sldvmergeharness (harnessModel newHarnessModel);

记录控制模型的测试用例

以便以编程方式执行模型slvnvdemo_powerwindow_controller在合并的控制模型中捕获的测试用例,首先使用sldvlogsignals函数以获取所需数据格式的所有测试用例的输入值。

loggedSignalsMergedHarness = sldvlogsignals (harnessModel);disp (loggedSignalsMergedHarness);
loggedteststunitinfo: [1x1 struct]

使用CGV API在仿真模式下执行模型

使用sldvruncgvtest函数执行模型slvnvdemo_powerwindow_controller在仿真模式中,使用从利用模型捕获的测试用例。

runopts = sldvruntestopts (“cgv”);disp (runopts);runopts。cgvConn =“sim卡”;cgvSim = sldvruncgvtest (“slvnvdemo_powerwindow_controller”...loggedSignalsMergedHarness runopts);
testdx: [] allowCopyModel: 0 cgvCompType: 'topmodel' cgvConn: 'sim'启动执行:ComponentType: topmodel Connectivity: sim InputData: /tmp/Bdoc21b_1757077_40715/tp300809f9/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_1. testdx: [] allowCopyModel: 0 cgvCompType: 'topmodel' cgvConn: 'sim'结束CGV执行:状态完成。启动执行:ComponentType: topmodel Connectivity: sim InputData: /tmp/Bdoc21b_1757077_40715/tp300809f9/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_2。结束CGV执行:状态完成。

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

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

如果canUseSIL runopts。cgvConn =“银”其他的%当不可能使用SIL时,示例运行另一个模拟。runopts。cgvConn =“sim卡”结束cgvSil = sldvruncgvtest (“slvnvdemo_powerwindow_controller”...loggedSignalsMergedHarness runopts);
启动执行:ComponentType: topmodel Connectivity: sil InputData: /tmp/Bdoc21b_1757077_40715/tp300809f9/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_1_1。### Starting build procedure for: slvnvdemo_powerwindow_controller ###成功完成build procedure for: slvnvdemo_powerwindow_controller模型重建行动的原因  ================================================================================================================= slvnvdemo_powerwindow_controller代码生成和编译代码生成信息文件不存在。构建时间:0h 0m 23.631 ###准备启动SIL模拟…建筑与gcc。墨西哥人成功完成。### start SIL simulation for component: slvnvdemo_powerwindow_controller ### # Application stopped ### # stop SIL simulation for component: slvnvdemo_powerwindow_controller结束CGV执行:status completed。启动执行:ComponentType: topmodel Connectivity: sil InputData: /tmp/Bdoc21b_1757077_40715/tp300809f9/ex67947267/cgv_runtest/slvnvdemo_powerwindow_controller/slvnvdemo_powerwindow_controller_cgv_input_tc_2_1。### Starting build procedure for: slvnvdemo_powerwindow_controller ###成功完成build procedure for: slvnvdemo_powerwindow_controller模型重建行动的原因  ================================================================================================ slvnvdemo_powerwindow_controller代码生成和编译生成的代码是过时了。构建时间:0h 0m 12.356s ### #准备启动SIL模拟…建筑与gcc。 MEX completed successfully. ### Starting SIL simulation for component: slvnvdemo_powerwindow_controller ### Application stopped ### Stopping SIL simulation for component: slvnvdemo_powerwindow_controller End CGV execution: status completed.

比较仿真和SIL模式的结果

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

i=1:length(loggedSignalsMergedHarness.TestCases) simout = cgvSim.getOutputData(i);silout = cgvSil.getOutputData(我);[matchNames, ~, mismatchNames, ~] =...cgv.CGV.compare (simout silout);流('\nTest Case(%d): %d Signals match, %d Signals mismatch'...我,长度(matchNames),长度(mismatchNames));结束
测试用例(1):4 Signals match, 0 Signals mismatch

清理

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

close_system (harnessModel 0);close_system (newHarnessModel 0);close_system (“slvnvdemo_powerwindow”, 0);close_system (“slvnvdemo_powerwindow_controller”, 0);