版本交付前,两次扫描的缺陷总数变化不大,却不代表没有新问题:部分历史缺陷可能消失,同时又检出了另一批缺陷。弄清Coverity怎么对比历史扫描快照、Coverity如何区分新增缺陷与已有缺陷,需要先确定比较基线,再查看同一个缺陷在两次结果中是否出现,不能只依据总数或状态名称判断。
一、Coverity怎么对比历史扫描快照
Coverity Connect可以按快照ID指定比较范围。版本复核宜先选定同一数据流中的两份有效快照,再进行差异筛选。
1、找到当前快照与历史基线
①进入目标项目的【快照】视图,通过【数据流】定位需要比较的记录。
②核对两份快照的【ID】、【日期】、【版本】、【描述】,记录当前扫描与基线扫描各自的ID。
③打开对应快照的【构建详情】、【分析详情】,结合流水线记录确认代码版本、构建目标及分析配置是否可比。
扫描提交日期与代码提交日期不是同一概念。发布复核应使用实际发布版本对应的快照,不能只按日期接近程度选择基线。
2、设置比较方向
显示范围决定列出哪份快照的问题,比较对象决定拿什么历史结果判断差异。两个位置互换,结果含义也会改变。
①打开【问题:按快照】视图,点击齿轮图标,进入【编辑设置】→【快照范围】。
②在【显示】中填写当前快照ID,在【比较对象】中填写基线ID;例如当前为10015、基线为10014,使用时替换为自己的记录。
③点击【显示匹配项】核对范围,确认匹配的是预期快照,再应用设置。
3、检查列和筛选范围
①在【编辑设置】→【列】中加入【CID】、【比较】、【检查器】及所需的定位字段。
②返回【筛选器】,核对【状态】、【问题类型】、【所有者】等条件,移除与本次比较无关的限制。
默认的待处理问题视图可能隐藏已忽略的问题,或只显示特定问题类型。核对完整差异前,应明确这些限制是否符合统计目的。
二、Coverity如何区分新增缺陷与已有缺陷
判断依据是缺陷相对于所选基线的存在情况。“新增”表示当前快照检出、基线未检出,并不直接证明问题由本次代码修改引入。
1、筛选相对基线新增的缺陷
①保持【显示】为当前快照、【比较对象】为历史基线,在【比较】筛选器中选择【不存在】。
②打开筛选出的【CID】,核对检查器、文件位置和缺陷路径,再与对应代码变更记录对照。
此处“不存在”指该CID不在比较基线中,并非当前扫描没有该问题。相对旧发布版本新增,也不一定是相对上一次扫描新增。
2、筛选基线中已有的缺陷
已有缺陷是当前与基线共同检出的问题,是否已经评审、是否需要修复,应另看分类信息。
①保持两份快照ID不变,将【比较】改为【存在】,查看共同检出的CID。
②根据处理目的进一步设置【分类】、【所有者】、【影响】,区分待处理问题与已有处置结论的问题。
3、区分新增状态与新增检出
①查看【状态】与【分类】,核对问题是否仍处于未分类状态,不把【状态】中的【新增】直接当作本轮新增。
②加入【首次被检测到】、【第一个快照】等列,辅助追溯该CID的历史,再回到快照比较结果确认。
③回到【快照】视图查看【最近被检测到】指标时,确认其针对前一个快照,不能直接用于任意发布基线的新增统计。
长期没有分类的历史问题,也可能保留“新增”状态。首次检测时间提供追溯线索,不能替代指定快照之间的比较。
4、复核异常增加与问题重现
①对数量明显增加的【检查器】查看代表性CID,核对是否刚启用了新规则、升级分析器或补全了构建捕获。
②对当前检出、基线未检出的CID,查看更早快照中的记录,区分首次检出与历史问题重新出现。
③若某批文件的结果同时变化,回查【构建详情】及构建日志,确认宏定义、编译目标和捕获范围是否改变。
新启用规则可能检出早已存在的代码问题;捕获不完整也可能让缺陷暂时消失。配置变化造成的差异,应与代码变化分开记录。
三、Coverity历史快照比较后如何复核与留档
新增、持续存在和当前未再检出是三个不同集合。复核和报告应保留比较方向,便于其他成员重复查询。
1、反向检查当前未再检出的缺陷
①将【显示】改为历史基线ID,将【比较对象】改为当前快照ID。
②在【比较】中选择【不存在】,查看基线中出现、当前未再检出的CID。
③对照相关修复提交,确认对应文件仍被捕获、相关检查器仍启用,再记录复核结论。
当前未再检出不等于已经验证修复。文件移除、分析范围缩小或规则变化,也可能产生这一结果。
2、保存视图和比较清单
①通过【另存为副本】分别保存新增与已有缺陷视图,在名称中注明比较用途。
②使用【导出CSV】保存清单,附上数据流、当前快照ID、基线ID及筛选条件。
③核对是否启用了【显示相同项】;统计缺陷数量时按CID去重,避免把同一缺陷的多处出现重复计入。
固定ID便于复现某次版本结论;使用last()等相对表达式时,范围会随新快照变化,也可能匹配多个数据流,应核对实际匹配结果。
总结
Coverity怎么对比历史扫描快照、Coverity如何区分新增缺陷与已有缺陷,关系到版本质量报告能否准确反映变化。明确基线后,新增问题和持续存在的问题才有共同的判断口径,团队也能分别安排评审与修复。总数下降、状态变化或单次未检出,都不足以独立说明代码质量已经改善。将快照ID、分析配置和复核依据随报告保留,可以减少后续沟通中的歧义。如有软件选型、版本配置等方面的需求,欢迎联系咨询。
