软件在环代码覆盖率
此示例展示如何使用软件在环(SIL) 模式从模型参考收集代码覆盖率度量。
生成代码覆盖率结果
模型 slvnvdemo_counter_harness
是一个框架模型,它使用 Signal Editor 模块来指定对 slvnvdemo_counter
模型的模型引用的输入。
该模型配置为覆盖率,但仿真模式设置为 Normal
。在普通仿真模式下,您只能收集模型覆盖率数据。要收集软件在环覆盖率,请使用以下方法之一:
从模型参考中,在 Model 模块的模块参数中设置引用模型的仿真模式。点击 Model 模块
slvnvdemo_counter
,然后点击 Model 模块选项卡。将仿真模式设置为Software-in-the-Loop (SIL)
。模块图标的角变为黑色,并且模块上的模型名称下出现 (SIL)。
在 App 标签中,点击覆盖率分析器。然后,在覆盖率选项卡上,点击分析覆盖率。Simulink Coverage® 收集使用 SIL 仿真模式的引用子系统生成的代码的覆盖率。
使用 SIL/PIL 管理器应用程序运行仿真。当您想要收集顶层模型和引用模型的覆盖率时,或者当覆盖率分析范围设置为
Entire System
时,请使用这种方法。在应用程序选项卡上,点击 SIL/PIL 管理器。点击运行验证。Simulink Coverage® 收集 SIL/PIL 仿真生成的代码的覆盖率。请注意,如果您想收集顶层模型的覆盖率,分析覆盖率按钮始终运行普通模式仿真,并且不会生成代码覆盖率结果。
有关配置覆盖率模型的更多信息,请参阅指定覆盖率选项。
在覆盖率详细信息中查看覆盖率结果
当仿真完成后,Simulink® 打开代码和覆盖率详细信息窗格。每次只能查看其中一个窗格。代码窗格默认打开,包含从模型生成的代码的详细信息。在代码窗格的底部,点击覆盖率详细信息标签。
窗格显示消息 Coverage was not recorded for
slvnvdemo_counter_harness
。出现此消息的原因是,该模型配置为收集模型参考 slvnvdemo_counter
的覆盖率,而不是顶层模型 slvnvdemo_counter_harness
的覆盖率。点击模型模块 slvnvdemo_counter
以查看此模型参考的覆盖率结果。
滚动到覆盖率详细信息窗格顶部即可看到 SIL 模式覆盖率摘要。
点击详细信息可查看覆盖率报告的详细信息部分。本节列出了按源文件组织的代码覆盖率、这些文件调用的函数以及构成这些函数的各个覆盖率目标结果。
在模型中,点击名为 limit
的 Switch 模块以查看报告的按模型对象的详细信息部分,其中列出了每个模型对象的表达式和函数。例如,Switch 模块 limit
在函数 slvnvdemo_counter.c
的第 48、50 和 53 行获得决策和语句代码覆盖率,并且覆盖的表达式是 rtb_inputGElower
。
在代码视图中查看覆盖率结果
您还可以在 Embedded Coder® 创建的代码视图中查看覆盖率结果。在覆盖率详细信息窗格的底部,点击代码。
每一行代码都有一个注释,表明是否具有全覆盖。例如第 40 行有以下注释:
语句
rtb_inputGElower
下方的^S
以绿色显示,表示该行已执行并受到完整的语句覆盖率。条件
rtb_input >= *rtu_lower
下方的^tf
以绿色显示,表示条件的 true false case 均已执行,并且条件具有完全条件覆盖率。
有关代码视图注释的更多信息,请参阅Code Coverage for Models in Software-in-the-Loop (SIL) Mode and Processor-in-the-Loop (PIL) Mode (Embedded Coder)。
创建并查看独立覆盖率报告
要创建独立的代码覆盖率报告,请在覆盖率选项卡中点击生成报告。代码覆盖率报告包含显示生成的代码的部分。
每个代码语句和逻辑模块都包含一个注释或一组注释,用于描述生成代码的源模块。每个评论还包含一个链接,可将您带回模型并帮助进行模型到代码映射。