使用第三方工具收集代码覆盖率度量
如果安金宝app装了Simulink®Coverage™,您可以在软件在循环(SIL)或处理器在循环(PIL)模拟期间收集代码覆盖率度量—参见收集代码覆盖率数据(金宝app仿真软件覆盖)。在这个例子中,您可以使用第三方工具收集代码覆盖率指标,例如BullseyeCoverage或LDRA Testbed。您必须安装第三方工具-参见代码覆盖工具支持金宝app。
这个屏幕截图显示了一个代码覆盖报告,它是通过运行一个启用了代码覆盖工具的SIL模拟而获得的。注释依赖于您指定的代码覆盖工具。
在本例中,您在正常模式模拟期间测量模型覆盖率,并在SIL模式中重复相同的模拟以测量代码覆盖率。通过使用模型覆盖率和代码覆盖率报告中的超链接,您可以比较模型覆盖率和代码覆盖率的结果。
有关SIL和PIL模拟示例,请参见用SIL和PIL模拟测试生成的代码。
初始设置
确保模型是新打开的。
模型=“rtwdemo_sil_topmodel”;close_system(模型中,0)open_system(模型)
删除现有的构建文件夹。
buildFolder = RTW.getBuildDir(模型);如果(buildFolder存在。BuildDirectory,“dir”)删除文件夹(buildFolder。BuildDirectory,“年代”);结束
配置模型覆盖报告的生成。
set_param(模型,“RecordCoverage”,“上”)明确covCumulativeData
建立刺激数据。
T = 0.1;%采样时间[ticks_to_count, reset, counter_mode, count_enable,…counter_mode_values_run1 counter_mode_values_run2,…Count_enable_values_run1, count_enable_values_run2] =…rtwdemo_sil_topmodel_data (T);
在正常模式下运行模拟
该模型被配置为收集模型覆盖度量。当模拟完成时,将打开模型覆盖报告。使用覆盖率显示窗口从模型中的块导航到覆盖率报告的相应部分。
counter_mode.signals。Values = counter_mode_values_run1;count_enable.signals。Values = count_enable_values_run1;set_param(模型,“SimulationMode”,“正常”);
设置仿真数据检查器,用于交互式查看和比较仿真结果。
金宝appSimulink.sdi.view;金宝appSimulink.sdi.clear;
运行模拟。
Simout_normal_run1 = sim(model,“ReturnWorkspaceOutputs”,“上”);
捕获结果。
金宝appSimulink.sdi.createRun ('运行1(正常模式)',“namevalue”,…{“simout_normal_run1”}, {simout_normal_run1});
在正常模式下运行第二次模拟
对于第一次模拟,报告显示实现的覆盖率小于100%。使用不同的输入信号进行第二次模拟,将MC/DC覆盖率提高到100%。注意,模型覆盖率报告被配置为显示跨两个模拟运行的累积覆盖率。
counter_mode.signals。Values = counter_mode_values_run2;count_enable.signals。Values = count_enable_values_run2;set_param(模型,“SimulationMode”,“正常”);Simout_normal_run2 = sim(model,“ReturnWorkspaceOutputs”,“上”);金宝appSimulink.sdi.createRun (“运行2(正常模式)”,“namevalue”,…{“simout_normal_run2”}, {simout_normal_run2});
配置模型以度量代码覆盖率
在运行SIL模拟之前,检查第三方工具的可用性,并配置模型以收集代码覆盖度量。如果没有可用的第三方工具,则该模型使用Simulink Coverage。金宝app
covToolPath =”;ldraPath = coder.coverage. ldraPath . getpath;bullseyePath = coder.coverage.BullseyeCoverage.getPath;coveragessettings = get_param(model,“CodeCoverageSettings”);coverageSettings。TopModelCoverage =“上”;如果~ isempty (ldraPath) coverageSettings。CoverageTool =“LDRA试验台”;elseif~ isempty (bullseyePath) coverageSettings。CoverageTool =“BullseyeCoverage”;其他的coverageSettings。CoverageTool =“没有”;结束set_param(模型,“CodeCoverageSettings”, coverageSettings);
在SIL模式下运行模拟
正常模式模拟产生模型的覆盖度量。使用SIL模拟,您可以将相同的输入刺激信号应用于生成的代码并测量代码覆盖率。
在SIL模式下运行第一个模拟。
counter_mode.signals。Values = counter_mode_values_run1;count_enable.signals。Values = count_enable_values_run1;set_param(模型,“SimulationMode”,“software-in-the-loop”);set_param(模型,“CodeExecutionProfiling”,“关闭”);set_param(模型,“CodeProfilingInstrumentation”,“关闭”);Simout_sil_run1 = sim(model,“ReturnWorkspaceOutputs”,“上”);金宝appSimulink.sdi.createRun ('运行1 (SIL模式)',“namevalue”,…{“simout_sil_run1”}, {simout_sil_run1});
启动rtwdemo_sil_topmodel的构建过程###成功完成rtwdemo_sil_topmodel的构建过程构建摘要构建了顶级模型目标:模型动作重建原因===================================================================================================== rtwdemo_sil_topmodel生成和编译的代码生成信息文件不存在。构建1个模型中的1个(0个模型已经更新)构建持续时间:0h 0m 46.903s ###准备开始SIL模拟…用“MinGW64编译器(C)”构建。MEX成功完成。使用SIL文件更新代码生成报告…###启动组件的SIL模拟:rtwdemo_sil_topmodel ###停止组件的SIL模拟:rtwdemo_sil_topmodel ###完成代码覆盖率分析
在SIL模式下运行第二个模拟。
counter_mode.signals。Values = counter_mode_values_run2;count_enable.signals。Values = count_enable_values_run2;set_param(模型,“SimulationMode”,“software-in-the-loop”);set_param(模型,“CodeExecutionProfiling”,“关闭”);set_param(模型,“CodeProfilingInstrumentation”,“关闭”);Simout_sil_run2 = sim(model,“ReturnWorkspaceOutputs”,“上”);金宝appSimulink.sdi.createRun ('运行2 (SIL模式)',“namevalue”,…{“simout_sil_run2”}, {simout_sil_run2});
rtwdemo_sil_topmodel的生成代码是最新的,因为没有发现结构、参数或代码替换库的更改。# # #成功完成构建过程:rtwdemo_sil_topmodel模型建立目标:总结构建模型重建行动的理由 ============================================================================== rtwdemo_sil_topmodel编译的代码编译工件是过时了。构建1个模型中的1个(已经更新的0个模型)构建持续时间:0h 0m 4.488s ###准备开始SIL模拟…###启动组件的SIL模拟:rtwdemo_sil_topmodel ###停止组件的SIL模拟:rtwdemo_sil_topmodel ###完成代码覆盖率分析
当模拟完成后,单击命令窗口中的链接,打开代码覆盖率报告并查看累积的代码覆盖率结果。该链接仅在安装第三方工具时可用。
使用代码覆盖率报告中的超链接转到框图中的相应位置。然后,通过使用覆盖率显示窗口,您可以打开模型覆盖率报告的相应部分。比较模型覆盖率和代码覆盖率的结果。
仿真数据检查器自动打开,允许交互式查看和分析结果。使用Compare和Inspect窗格确认两次运行的SIL和正常模式日志信号是相同的。
结束语
在这个例子中,你:
在正常模式模拟期间收集的模型覆盖度量。
在SIL模拟期间收集的代码覆盖率度量。
在代码覆盖率和模型覆盖率报告之间导航。
交叉检查两个报告中的指标。