文档

使用第三方工具收集代码覆盖率指标

如果安金宝app装了Simulink®Coverage™,您可以在软件在环(SIL)或处理器在环(PIL)模拟期间收集代码覆盖指标收集代码覆盖数据(金宝app仿真软件覆盖)。在这个例子中,您可以使用第三方工具收集代码覆盖率指标,例如bullseycoverage或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。值= counter_mode_values_run1;count_enable.signals。值= count_enable_values_run1;set_param(模型,“SimulationMode”“正常”);

设置仿真数据检查器,用于交互式查看和比较仿真结果。

金宝appSimulink.sdi.view;金宝appSimulink.sdi.clear;

运行仿真。

simout_normal_run1 = sim(模型,“ReturnWorkspaceOutputs”“上”);

获取结果。

金宝appSimulink.sdi.createRun ('运行1(正常模式)'“namevalue”...“simout_normal_run1”}, {simout_normal_run1});

在正常模式下运行第二次模拟

对于第一个模拟,报告显示所实现的覆盖率小于100%。使用不同的输入信号运行第二个模拟,将MC/DC覆盖水平提高到100%。注意,模型覆盖率报告被配置为显示跨两个模拟运行的累积覆盖率。

counter_mode.signals。值= counter_mode_values_run2;count_enable.signals。值= count_enable_values_run2;set_param(模型,“SimulationMode”“正常”);simout_normal_run2 = sim(模型,“ReturnWorkspaceOutputs”“上”);金宝appSimulink.sdi.createRun ('运行2(正常模式)'“namevalue”...“simout_normal_run2”}, {simout_normal_run2});

配置模型以度量代码覆盖率

在运行SIL模拟之前,检查第三方工具的可用性,并配置模型以收集代码覆盖率指标。如果没有第三方工具,模型使用Simulink®Verification and Validation™。金宝app

covToolPath ='';ldraPath = coder.coverage.LDRA.getPath;bullseyePath = coder.coverage.BullseyeCoverage.getPath;coverageSettings = get_param(模型,“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。值= counter_mode_values_run1;count_enable.signals。值= count_enable_values_run1;set_param(模型,“SimulationMode”“software-in-the-loop”);set_param(模型,“CodeExecutionProfiling”“关闭”);set_param(模型,“CodeProfilingInstrumentation”“关闭”);simout_sil_run1 = sim(模型,“ReturnWorkspaceOutputs”“上”);金宝appSimulink.sdi.createRun (“运行1 (SIL模式)”“namevalue”...“simout_sil_run1”}, {simout_sil_run1});
###开始构建过程的模型:rtwdemo_sil_topmodel ### #成功完成构建过程的模型:rtwdemo_sil_topmodel ### #准备启动SIL模拟…建筑与gcc。墨西哥人成功完成。###使用SIL文件更新代码生成报告…###启动SIL模拟组件:rtwdemo_sil_topmodel ###停止SIL模拟组件:rtwdemo_sil_topmodel

在SIL模式下运行第二个模拟。

counter_mode.signals。值= counter_mode_values_run2;count_enable.signals。值= count_enable_values_run2;set_param(模型,“SimulationMode”“software-in-the-loop”);set_param(模型,“CodeExecutionProfiling”“关闭”);set_param(模型,“CodeProfilingInstrumentation”“关闭”);simout_sil_run2 = sim(模型,“ReturnWorkspaceOutputs”“上”);金宝appSimulink.sdi.createRun (“运行2 (SIL模式)”“namevalue”...“simout_sil_run2”}, {simout_sil_run2});
###为'rtwdemo_sil_topmodel'生成的代码是最新的,因为没有发现结构、参数或代码替换库更改。###成功完成模型的构建过程:rtwdemo_sil_topmodel ###准备启动SIL模拟…###启动SIL模拟组件:rtwdemo_sil_topmodel ###停止SIL模拟组件:rtwdemo_sil_topmodel

模拟完成后,单击命令窗口中的链接以打开代码覆盖率报告并查看累积代码覆盖率结果。只有当您安装了第三方工具时,该链接才可用。

使用代码覆盖率报告中的超链接到框图中的相应位置。然后,通过使用覆盖率显示窗口,您可以打开模型覆盖率报告的相应部分。比较模型覆盖率和代码覆盖率结果。

仿真数据检查器自动打开,允许交互查看和分析结果。使用比较和检查窗格确认SIL和正常模式记录的信号在两次运行中是相同的。

结束语

在这个例子中,你:

  • 在正常模式模拟期间收集的模型覆盖度量。

  • 在SIL模拟期间收集的代码覆盖率指标。

  • 在代码覆盖率和模型覆盖率报告之间导航。

  • 交叉检查两份报告的指标。

相关的话题