主要内容

MATLAB Function 模块的覆盖率

此示例解释了模型覆盖率与 MATLAB Function 模块内的 MATLAB® 代码的关系。

slvnvdemo_eml_model_coverage_demo 模型包含几个 MATLAB Function 模块,用于演示模型覆盖率行为。该模型已配置为收集覆盖率。在仿真选项卡上,点击运行(覆盖率)

slvnvdemo-eml-model-thumbnail.png

load_system('slvnvdemo_eml_model_coverage_demo')
sim('slvnvdemo_eml_model_coverage_demo')

仿真完成后,覆盖率详细信息窗格将在 Simulink 窗口的右侧打开。在覆盖率详细信息中,向上滚动即可查看报告的摘要部分。在本节中,您可以看到顶层模型和每个 MATLAB Function 模块,它们根据它们所演示的 MATLAB Function 模块覆盖率类型命名。

函数覆盖率

点击标题为 Function coverage 的模块,以在覆盖率详细信息窗格中显示该模块。

mlfb-function-cov.png

MATLAB Function 模块中的功能报告模块内的每个功能是否至少执行一次并产生决策结果。在 Function coverage 模块中,3 个函数中有 2 个被调用,因此该模块的决策覆盖率为 67%。

If 语句覆盖率

点击标题为 If coverage 的模块。

mlfb-if-cov.png

MATLAB Function 模块中的 If 语句报告决策覆盖率,以指示 if 语句是 true 还是 false。全覆盖要求至少有一次执行 if 语句为 true,并且至少有一次执行该语句为 false。添加 else 语句时,覆盖率要求不会改变。

在这个 MATLAB Function 模块中,有 8 个决策结果。8 个结果中的 6 个是 3 个 if 语句的 true 和 false 结果,另外 2 个是指示 2 个函数各自被调用的决策结果。

And-Or 条件覆盖率

点击标题为 and-or coverage 的模块。

mlfb-andor-cov.png

如果 MATLAB Function 模块中的语句的表达式中包含 &&||,则会接收条件和决策覆盖率。条件全覆盖要求每个条件至少评估为 true 一次,且至少评估为 false 一次。完整的 MCDC 覆盖率要求显示每个条件独立影响决策(if 语句)的结果。

Switch-Case 语句覆盖率

点击标题为 Switch-case coverage 的模块。

mlfb-switchcase-cov.png

MATLAB Function 模块中的 Switch-case 语句报告决策结果,表明在仿真期间执行了哪些 case 语句。要获得全覆盖,您的模型必须至少执行每个 case 语句一次。即使不使用 else 关键字,仍然必须至少执行一次 switch 语句,其中没有有效的 case 语句才能实现全覆盖。

While 语句覆盖率

点击标题为 While coverage 的模块。

mlfb-while-cov.png

MATLAB Function 模块中的 While 语句报告 while 循环决策结果。全覆盖要求至少有一次执行中 while 循环表达式为 true,以及至少有一次执行中表达式为 false。

For 语句覆盖率

点击标题为 For Coverage 的模块。

mlfb-for-cov.png

MATLAB Function 模块中的 For 语句报告循环表达式的决策结果。全覆盖要求至少有一次执行中循环表达式为 true,以及至少有一次执行中表达式为 false。

赋值语句覆盖率

点击标题为 Assignment Coverage 的模块。

mlfb-assignment-cov.png

MATLAB Function 模块内包含 &&|| 的赋值语句中的逻辑表达式会报告条件覆盖率。条件全覆盖要求每个条件至少评估为 true 一次,且至少评估为 false 一次。完整的 MCDC 要求每个条件独立地影响父级决策结果。

外部 MATLAB 文件和本地或嵌套函数

外部 MATLAB 文件和 MATLAB Function 模块内的函数调用的本地或嵌套函数以与模块内其余代码相同的方式获得覆盖率。不同之处在于,外部 MATLAB 文件会生成单独的 cvdata 对象,因此会生成单独的代码覆盖率报告,并且不包含在主模型覆盖率报告中。摘要报告包含每个外部 MATLAB 文件的代码覆盖率报告的链接。