很多团队在做QAC治理时,嘴上说的是“基线以后只看新增”,实际落地时却常常变成“先把老问题放着不管”。这两件事看着接近,做法却完全不同。按Perforce QAC当前官方文档的口径,基线更像是一份后续比对用的参考结果,而“只管新增违规”则要么依赖基线抑制,要么依赖后续差异分析流程。要是这两个概念没拆开,团队最后看到的往往不是新增问题,而是一堆混着老问题、改动问题和匹配失败问题的结果。
一、QAC基线与新代码
QAC里的“基线”不是简单做一次扫描留个记录,“新代码”也不等于只分析刚改过的那几个文件。先把这两个概念捋顺,后面才谈得上只盯新增违规。
1、基线本质上是一份参考诊断集合
官方对Baseline Diagnostics Suppression的说明很直接,基线就是生成基线时那一批已有diagnostics的集合。后续分析时,如果某条诊断能够被识别为与基线中的某条诊断相同,它就会被抑制掉。也就是说,基线的作用不是删除老问题,而是让旧问题在后续查看结果时先退到后台。
2、基线抑制发生在查看结果这一步
文档里专门强调,baseline suppressions是applied at view time,不会影响diagnostics的生成。换句话说,分析引擎还是照常跑,旧问题也还是会被识别出来,只是你在结果视图里可以选择不把它们当成当前重点看。这一点很关键,因为很多团队误以为做了基线之后旧问题就“不存在了”,后面一做报表就容易口径打架。
3、新代码分析和只看新增不是同一个动作
qacli analyze默认只会重分析发生变化的文件,以及受它们影响的依赖文件或配置。这个机制解决的是分析效率问题,目的是避免每次都全量重跑,但它不等于自动帮你完成“只看新增违规”的筛选。也就是说,只分析改动文件,只能说明范围缩小了,不能直接说明结果已经只剩新增。
二、QAC基线后如何只管新增违规
想把团队视线真正收敛到新增违规,做法不能停留在“少分析一点文件”,而要把参考基线和后续比对动作一起定下来。这样输出的结果,才更接近大家口中的“新代码只看新问题”。
1、老项目先做一次基线,再往后看变化
如果面对的是存量问题很多的老代码,最稳妥的做法是先生成一版基线。官方写得很明确,基线特别适合legacy code场景,基线建立之后,原始代码里的旧diagnostics会被压到后台,而代码变化引出的diagnostics会显示出来。这样做的意义,不是替旧问题洗白,而是先把研发注意力拉回到当前改动。
2、基线生成时先保证结果稳定
官方同时提醒,打基线之前要确认分析里没有timeout message,尤其是在启用了Dataflow Analysis的情况下。因为一旦分析超时,前后两次生成出来的消息可能不一致,后续基线匹配就会不稳定,最后旧问题可能被误判成新问题,新问题也可能对不上。
3、做持续集成时用差异分析去盯新增
如果你们已经把QAC结果接进Validate或持续集成流程,更适合把“只管新增违规”放到差异分析这一层做。Validate文档说明得很清楚,Differential Analysis是相对于参考项目分析结果来生成新问题报告的,通常就是对一个变更集或一批改动文件做对比,目标就是找出这次改动新带进来的issues。
4、把新增违规直接接到质量门禁
只看新增违规,光“看见”还不够,最好让它和构建结果直接关联。Validate的CI Builds支持配置CI Quality Gate,而且查询条件可以直接按Issues页面的搜索语法来写。这样一来,团队就不只是知道这次新增了哪些问题,而是可以把“新增违规是否超过阈值”直接变成通过、失败或需要处理的门槛。
三、QAC新增违规为什么总是看不准
很多团队并不是没做基线,也不是没跑增量,而是最后看到的“新增结果”总觉得不干净。问题通常不在工具概念本身,而在执行细节没有固定住。
1、把抑制当成删除,结果口径就会乱
基线抑制只是让旧问题在视图里退后,不是把旧diagnostics真正从分析结果里抹掉。要是安全团队、研发团队和管理报表对这一点理解不一致,就会出现有人说“问题没了”,有人说“问题还在”的争论。
2、把增量分析当成新增筛选,结果会混
默认只重分析改动文件,解决的是计算量,不是问题归类。要是团队直接拿这批结果当“新增违规清单”,没有再结合基线或差异分析去判断,新旧问题就很容易混到一起。
3、基线配置和后续规则没同步,匹配会漂
在Validate导入QAC项目时,文档提到基线项目设置可以双向同步,QAC的规则配置也会被带到Validate侧。如果基线时的规则、抑制和后续分析时的规则不是同一套,原本能对上的diagnostics也可能被拆成两批不同结果,新增口径自然会越来越乱。
总结
QAC基线与新代码这件事,真正要分清的是三层含义:基线是参考集合,增量分析是缩小分析范围,只看新增违规则需要建立在基线抑制或差异分析之上。QAC基线后如何只管新增违规,最稳的做法不是一句“老问题先不看”,而是先把基线打稳,再把后续改动结果放到统一口径下去比对。这样团队最终看到的,才更接近真正值得优先处理的新增问题。