Main Content

本页采用了机器翻译。点击此处可查看最新英文版本。

使用代码窗格查看和过滤代码覆盖率结果

此示例展示了如何直接从 Simulink® 中的代码窗格查看代码覆盖率结果并申述代码覆盖率结果。

配置覆盖率设置并分析模型

首先,确保模型已启用覆盖率。在 Simulink 工具条中的建模选项卡上,点击模型设置。在配置参数对话框的覆盖率窗格中,选择启用覆盖率分析。然后将结构覆盖率级别设置为 Condition Decision 并点击确定

要在软件在环 (SIL) 或处理器在环 (PIL) 模式下运行仿真,您可以使用 SIL/PIL 管理器应用程序。在 Simulink 工具条中的应用程序选项卡上,点击 SIL/PIL 管理器

SIL/PIL 选项卡中,将模式设置为仅 SIL/PIL 仿真。点击运行 SIL/PIL

查看覆盖率结果

当仿真完成时,代码窗格将显示带有覆盖率注释的生成代码。当您从 SIL/PIL 管理器应用程序运行仿真时,代码窗格将打开。您可以通过从应用程序选项卡打开 Embedded Coder 应用程序并点击查看代码来手动打开代码窗格。

如果点击某个模块,Simulink 将突出显示与该模块相关的生成代码行。例如,点击 Multiport Switch 模块以突出显示从第 67 行开始的代码。

代码窗格中的注释指向特定的覆盖率目标,每个注释的颜色表示覆盖率分析的完整性。在第 35 行,行号左边的红线表示第 35 行的目标覆盖率为 0%。在这种情况下,该行上只有一个覆盖率目标,但线条颜色可以快速概括该行上的所有覆盖率目标。将光标指向函数名称开头下方的插入符号,即可查看包含更多信息的工具提示。

工具提示澄清了缺失覆盖率属于函数调用度量,并且在代码执行期间未调用第 35 行的函数。

在第 50 行,绿线表示突出显示的目标具有 100% 的覆盖率。对于完全或部分覆盖率的目标,carat 注释有附加文本来表明哪些目标已经得到满足。例如,第 50 行显示 ^Fcn。将光标指向此注释可查看包含附加信息的另一个工具提示。

工具提示表明代码执行过程中调用了第 50 行的函数,并且具有完整的函数调用覆盖率。

类似地,^S 表示语句覆盖率。

^Sw 表示 switch 标签,或者 switch 语句的默认 case。

如果覆盖率度量包含多个可能的结果,则注释将显示所有满意的结果。例如,部分覆盖率的条件分别根据是否满足 true 或 false case 显示黄色 ^t^f。如果两个结果都满足,注释将显示绿色的 ^tf。工具提示会显示所有结果,即使不满意。滚动到第 64 行并将光标指向注释 ^t

注释和工具提示表明条件的 true 结果得到满足,但在代码执行期间并未发生 false case。

对覆盖率结果进行申述

假设第 64 行的条件 slcoverage_demo_smoke_U.In1 <= slcoverage_demo_smoke_U.In2 的 false case 与此测试无关。您可以通过点击注释工具提示中的未覆盖链接,从代码窗格中申述此结果。

当您点击工具提示链接时,覆盖率结果资源管理器将打开过滤器编辑器窗格并创建一个新规则来证明您选择的结果。在过滤器编辑器窗格中,在名称字段中输入 codePaneFilter。在过滤规则下,将理由设置为 not relevant。点击应用,然后在保存对话框中,点击保存。保存过滤器并返回模型后,在覆盖率详细信息底部,点击代码即可返回代码窗格。

在第 64 行,黄色注释 ^t 变为青色,表示 true case 得到满足并且 false case 得到证明。此外,行号左侧的黄线变为青色,表示该行的覆盖率结果包含申述过滤器规则。

当您使用代码窗格中的工具提示链接过滤结果时,Simulink Coverage 会创建一个申述规则。您不能将其更改为排除规则。要创建排除过滤器规则,请使用覆盖率详细信息窗格中的调整或排除链接。

排除覆盖率结果

代码窗格的底部,点击覆盖率详细信息。滚动至第 2.2 决策 rtu_In1 < -0.5(第 40 行) 节。点击对齐或排除。如果出现过滤器选择对话框,请选择您创建的相同过滤器 codePaneFilter

覆盖率结果浏览器的过滤器编辑器窗格将打开,并在您之前创建的过滤器中创建一个新的排除规则。

在模型中,在覆盖率详细信息窗格的底部,点击代码。在第 40 行,灰色克拉指向排除的覆盖率目标。

在一行代码上查看多种结果

打开 slcoverage_demo_smoke2.slx 模型。

通过点击应用程序选项卡中的 SIL/PIL 管理器来打开 SIL/PIL 应用程序。点击运行 SIL/PIL

代码窗格中,滚动到第 79 行。此行包含两个相互堆叠的注释,因为这行代码包含由两个条件组成的决策。决策的注释显示在第一个条件旁边。

大写黄色 ^F 指的是决策 slcoverage_demo_smoke2_U.In3 && slcoverage_demo_smoke2_U.In4,小写黄色 ^f 指的是决策中的第一个条件 slcoverage_demo_smoke2_U.In3。指向大写的 ^F 即可查看决策工具提示。

您可以看到,false case 得到满足,但是代码执行期间并未发生决策的 true case。如果您还查看条件工具提示,您会看到相同的结果。现在,指向第 80 行的插入符号以查看第二个条件 slcoverage_demo_smoke2_U.In4 的工具提示。

该工具提示与行号左侧的红色条一致,表示此条件的条件覆盖率为 0%。未评估该条件的原因是由于逻辑短路。因为每次代码执行时第一个条件都为 false,并且决策是 && 运算符,所以决策为 false,所以不需要评估第二个条件。

在一行代码上过滤多个结果

在条件 ^f 的工具提示中,点击链接未涵盖。在覆盖率结果浏览器的过滤器编辑器窗格中,将名称设置为 codePaneFilter2,将理由设置为 Not relevant。点击应用。在出现的对话框中,点击保存。在覆盖率详细信息底部,点击代码。在第 79 行,行号左侧的黄色条保持黄色,因为这一行仍然存在未满足和未申述的覆盖率,但是黄色 ^f 变为青色。

查看代码窗格摘要

代码窗格的底部,有一个代码覆盖率摘要。例如,在这个模型中,您可以看到 26% 的决策覆盖率和 17% 的条件覆盖率。将光标指向 条件: 17% 查看包含更多信息的工具提示。

限制

代码窗格不支持显示和过滤修正条件决策覆盖率 (MCDC) 结果。要查看和过滤 MCDC 代码覆盖率结果,请使用覆盖率详细信息窗格或覆盖率报告。

不支持从代码窗格创建和应用排除规则,但您可以使用覆盖率详细信息窗格或通过使用覆盖率结果资源管理器加载过滤器来查看您应用的排除规则。

相关主题