主要内容

使用第三方工具收集代码覆盖率度量

如果安金宝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模拟期间收集的代码覆盖率度量。

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

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

相关的话题