C/C++test做变更影响分析时,既可以按代码变更缩小静态分析范围,也可以结合DTP,根据历史覆盖率找出需要重新执行的测试。处理“C/C++test变更影响分析怎么配置C/C++test变更影响范围不完整如何检查”,先确认自己要筛的是代码文件,还是受影响的测试用例,这两套配置不能混着看。
一、C/C++test变更影响分析怎么配置
只想检查本次修改的代码,可以使用源代码管理范围过滤。需要知道“改了这些代码后该重跑哪些测试”,还要把测试结果和逐测试覆盖率上传到DTP。
1、按源代码变更限制分析范围
①打开C/C++test的【选项】或【首选项】。
②进入【源代码管理】,配置Git等代码仓库。
③复制一份现有测试配置,进入【范围】页面。
④选择本地修改文件,或当前分支相对基准分支的变化文件。
⑤保存配置并执行分析。
命令行环境可以在设置文件中加入:
scope.scontrol.files.filter.mode=branch
scope.scontrol.ref.branch=main
cpptest.scope.adjuster.cu.enabled=true
local模式只检查本地修改,branch模式则比较当前分支与参考分支。启用编译单元范围调整后,头文件变化引起的相关源文件也能被纳入,范围会更贴近真实构建关系。
参考分支一定要写对。团队主分支叫develop,设置里却一直和main比较,出来的变更范围自然会让人摸不着头脑。
2、连接DTP并上传测试覆盖数据
①打开【Parasoft】→【选项/首选项】。
②进入【DTP】,填写服务器和项目名称。
③勾选向DTP报告测试结果。
④在测试配置中启用详细代码覆盖率。
⑤执行测试并发布结果。
命令行可通过设置文件启用DTP连接,核心参数包括dtp.enabled=true、dtp.url、dtp.project和report.dtp.publish=true。C/C++test可以向DTP发送单元测试、覆盖率及源码范围等信息,供后续影响分析使用。
这里别只上传一张覆盖率汇总表。影响分析需要知道每个测试到底覆盖了哪些文件或代码位置,只有项目总覆盖率,没法反推出该重跑哪条用例。
3、建立基线构建和目标构建
①用稳定代码运行完整测试集。
②上传测试详情和覆盖率,作为基线构建。
③修改代码后创建新的目标构建。
④上传目标构建的覆盖数据。
⑤在DTP的Test Impact Analysis中选择两次构建。
DTP会比较基线和目标构建,再根据代码变化与历史测试覆盖关系标记需要重跑的测试。基线需要测试及覆盖数据;目标构建至少需要覆盖数据,若同时上传了测试结果,也要包含测试详情。
基线和目标构建最好来自同一条分支。官方文档说明,不同分支之间的测试会被视为不同测试,直接拿开发分支和主分支比较,结果可能缺一大块。
二、C/C++test变更影响范围不完整如何检查
范围不完整通常不是一个开关没打开,而是源码、测试和覆盖率之间有一段关系没采集到。先找缺的是文件还是测试,再往前查会快很多。
1、检查源码是否进入分析项目
①查看C/C++test项目中的源码目录。
②核对构建数据或编译数据库是否为当前版本。
③检查新增文件有没有参与真实编译。
④确认头文件目录和宏定义完整。
⑤清理旧缓存后重新导入构建信息。
C/C++test依赖项目构建选项识别编译单元。编译数据没更新,新加的源文件、条件编译分支和头文件依赖就可能缺失。官方也建议让工具从真实构建系统获取编译器、包含目录和宏参数。
新增文件已经提交到仓库,却没写进CMake或工程文件,工具不把它算进影响范围很正常。先把工程构建补完整,别急着去改DTP配置。
2、确认测试与覆盖率已经对应
①运行一条已知会经过目标函数的测试。
②打开本地【覆盖率】视图。
③确认目标文件和函数显示为已覆盖。
④查看DTP中是否存在这条测试的详细记录。
⑤再检查影响分析结果。
使用CppUnit或CppUtest等外部框架时,需要同时接入结果监听器和覆盖率注释器。注释器会在覆盖数据中标记每条测试的开始和结束,缺少这些标记,DTP只能看到总体覆盖,无法准确建立测试与代码的对应关系。
用例明明执行过,影响列表里却找不到它,先查这里。很多时候测试结果上传了,逐测试覆盖信息却没带上。
3、核对构建标识和覆盖率映像
①查看两次报告使用的build.id。
②核对项目名和会话标签。
③检查覆盖率标签是否一致。
④在DTP构建审计中查看覆盖数据。
⑤确认过滤器接收了对应运行配置。
DTP需要依靠构建ID和覆盖率映像聚合测试与覆盖数据。单元测试使用一个构建ID,覆盖率又上传到另一个构建,页面上都能看到数据,但它们不会自动拼成完整影响关系。
4、检查范围过滤是否过窄
本地变更和分支差异过滤适合快速检查,但它会排除没有直接变化的资源。跨文件数据流、重复代码、指标统计和部分依赖分析需要更多项目上下文,范围缩得太小后,结果可能出现漏报或误差。
桌面开发阶段可以只查变更文件,持续集成中仍应定期跑一次全项目分析。要不然每天的报告看着很干净,真正跨模块的问题却一直没被重新计算。
三、怎样确认变更影响配置已经生效
影响分析配置完成后,最好做一次可控验证。别直接拿几千个文件的大版本判断,哪里漏了也不好找。
1、做一组小范围验证
①选择一个已有测试覆盖的简单函数。
②修改一条确定会影响执行的语句。
③重新生成目标构建数据。
④查看该测试是否被标记为需要重跑。
⑤恢复代码后再验证一次。
这条测试能稳定出现,说明代码变化、覆盖率映射和构建比较基本连通。完全没出现,再按源码、覆盖率和构建ID三层往回查。
2、固定团队配置口径
参考分支、源码根目录、编译参数、覆盖类型和构建命名最好写进统一设置文件。不同流水线各配一套,今天少一个源码目录,明天换一个覆盖率标签,结果很难长期比较。
变更分析也不应该完全代替完整回归。它适合快速找出优先测试范围,发布前仍要结合项目风险和质量要求决定是否执行全量测试。
总结
“C/C++test变更影响分析怎么配置C/C++test变更影响范围不完整如何检查”关系到代码变化能否准确映射到分析范围和回归测试。源码构建信息、逐测试覆盖率及构建标识保持一致,结果才不会时多时少。希望本文对大家配置C/C++test变更影响分析和核对测试范围有所帮助。