单元测试运行成功后,下一步是看代码究竟执行到了哪里。C/C++test可以按行、函数、分支等口径统计覆盖率;如果结果为空,先别急着补测试用例,检查测试是否执行、覆盖率是否启用,往往更快找到问题。下文以C/C++test Professional的Eclipse集成界面为例。
一、C/C++test怎么进行代码覆盖率分析
建议先选定一个项目或源文件,用行覆盖率查看整体情况,再逐层找到未覆盖的函数。分析分支条件时,可切换到分支覆盖率;两种数字衡量的内容不同。
1、启用覆盖率统计
①点击【Parasoft】→【Test Configurations】,选中用于执行单元测试的配置。
②打开【Execution】→【General】,勾选【Enable Test Execution】,将【Execution mode】设为【Unit Testing】。
③在【Instrumentation mode】中选择【Full】;如需指定统计口径,选择【Custom instrumentation】,点击【Edit】,启用【C/C++Code Coverage】并勾选所需指标。
④保存配置,返回项目树。
2、运行测试并查看覆盖率
①在项目树中选中要统计的项目或源文件,点击【Parasoft】→【Test Using】,运行刚才设置的单元测试配置。
②测试结束后,点击【Parasoft】→【Show View】→【Coverage】。
③在【Coverage】视图的下拉菜单中选择【Type】→所需覆盖率类型,展开项目、文件和函数节点查看结果。
④双击目标文件,在代码编辑器中查看已覆盖与未覆盖的位置。
3、核对单个用例的覆盖范围
①点击【Parasoft】→【Show View】→【Test Case Explorer】,选中需要分析的用例。
②在【Coverage】视图中点击【Synchronize with selection in Test Case Explorer】,查看这些用例对应的覆盖情况。
③检查完毕后关闭该同步筛选,再查看整个测试范围的统计结果。
二、C/C++test覆盖率统计结果缺失如何检查
“没有数字”与“覆盖率为零”要分开看。前者重点检查配置和结果展示;后者还要确认目标代码是否进入测试范围、相关用例是否实际运行。
1、检查统计配置与显示口径
①打开【Parasoft】→【Test Configurations】→【Execution】→【General】,确认【Enable Test Execution】已勾选。
②检查【Instrumentation mode】:若选中【Full runtime w/o coverage】或【No instrumentation】,改为【Full】后重新运行测试。
③如果使用【Custom instrumentation】,点击【Edit】,检查【C/C++Code Coverage】及所需统计指标。
④回到【Coverage】视图,点击【Type】,切换到已启用的指标。
2、检查测试和文件范围
①打开【Test Case Explorer】,确认本次运行的用例及其结果。
②在项目树中重新选中待测源文件或项目,运行同一测试配置。
③打开该配置的【Scope】,检查目标文件是否被筛选条件排除。
④若【Coverage】视图只显示项目汇总,展开项目节点,再查看文件和函数数据。
3、检查筛选和旧结果
①在【Coverage】视图中检查是否开启了与【Test Case Explorer】选择项同步的筛选;如需查看全部用例,关闭筛选。
②打开【Execution】→【General】,检查【Quick execution mode】。需要重新生成覆盖率结果时,取消勾选并运行测试。
③查看测试运行输出;若测试可执行文件构建失败或用例没有执行,先处理对应报错,再重新统计。
4、检查特定代码的统计设置
①如果缺少的是C++模板代码的覆盖率,打开测试配置的【Execution】→【General】。
②在【Instrumentation mode】旁点击【Edit】,启用【Enable coverage for C++templates】。
③保存配置,重新运行包含该模板实例的测试用例。
三、发现未覆盖代码后怎么继续分析
统计结果出现后,可以先从未覆盖的函数和分支入手。行覆盖率显示“执行到这一行”,分支覆盖率则能帮助检查条件判断的不同走向;看见绿色标记,也不代表该处所有分支都测到了。
1、定位遗漏的执行路径
①在【Coverage】视图中选择【Type】→行覆盖率,展开覆盖率较低的文件。
②双击目标函数,对照编辑器中的未覆盖标记,找出对应的输入条件。
③将【Type】切换为分支覆盖率,检查条件判断是否还有未执行的走向。
2、补充用例并复查
①在【Test Case Explorer】中找到目标函数的测试用例,补充能触发遗漏分支的输入值。
②如果分支取决于其他函数的返回值,调整该测试用例使用的桩函数返回值。
③重新运行测试,回到【Coverage】视图核对新增覆盖的位置。
总结
覆盖率数字适合用来寻找测试盲区,也适合在代码调整后观察哪些路径受到了影响。读结果时,把统计范围、指标口径和实际执行的用例放在一起看,数字才有参考价值。希望这篇关于C/C++test代码覆盖率分析与结果缺失检查的内容对大家有帮助;如有C/C++test相关需求,欢迎联系我们咨询。