随着项目代码规模变大,Coverity的检查结果要是全部堆在一个列表里,后面无论是分派任务还是统计缺陷都会变得很乱。解决这个问题,比较有效的办法是配置组件映射,其实就是按照代码的文件路径把问题自动归类到不同组件下,这样哪个团队该处理哪部分代码就一目了然。Coverity Connect本身支持组件功能,允许用户通过文件规则把源代码文件做逻辑分组,而且在一个组件映射里可以添加多条规则,还能设置这些规则的优先级,让匹配更准确。
一、Coverity怎么配置组件映射
在动手配置之前,最好先把整个项目的代码目录结构梳理清楚,不要一边翻看检查结果一边随手建组件,那样很容易导致规则互相交叉,后面文件归属会更混乱。
1、进入组件映射页面
用具有相应权限的账号登录Coverity Connect,在界面中找到【Configuration】→【Component Maps】这个入口,进入组件映射管理页面。这个菜单需要特定的用户权限,要求账号能够创建组件映射、添加组件以及配置访问规则。
2、创建或复制组件映射
系统通常会自带一个默认的组件映射,可以直接在这个默认映射上修改,也可以先把它复制一份,再按自己项目的需要单独新建一套。Coverity的文档建议不要所有项目都混用同一套默认规则,因为不同项目的目录结构差别很大,公用的规则很难把文件分准。
3、按路径添加文件规则
接下来为每一个组件添加文件路径规则,例如把src/driver、src/network、src/ui,还有third_party等目录分别对应到各自的组件上去。写规则时路径要尽量具体到稳定的目录层级,不要只用一个很短的关键词,那样很容易把其他不相关的文件也拉进来,导致归属错误。
4、绑定到对应的Stream
组件映射建好以后,还需要把它跟具体项目和Stream关联上,检查结果才会按照新规则去展示。如果某个Stream需要换用另一套组件映射,可以进入【Configuration】→【Projects and Streams】→【Stream Details】→【Edit】去修改,整个过程不需要重新提交缺陷,操作比较方便。
二、Coverity组件归属错误怎么修正
当发现有缺陷被错误地归到某个组件时,常见的原因有这几种:路径规则写得太宽泛、规则顺序排得不对、Stream仍然绑在旧的映射上,或者源码在构建服务器上的实际路径跟本地不一致。修正的时候,应该先查清楚规则是怎么命中的,而不是一上来就手工去改缺陷的状态。
1、检查文件的实际路径
先打开归属错误的缺陷,仔细看一下里面记录的文件路径,然后拿着这个路径回到组件映射的规则列表里,一条一条地去比对。很多问题其实都出在构建时多了一层类似workspace或仓库名的父目录,或者路径中包含符号链接,导致规则没能按预期的方式命中文件。
2、收紧路径规则
假如src/common这个目录同时被公共组件和业务组件的规则覆盖了,那就需要把规则写得更细致一些,例如将src/common/security划给安全组件,将src/common/log划给基础组件。规则一旦太笼统,就很容易把不相干的文件归进来,导致组件归属混乱。
3、调整规则的优先级
同一个文件可能会被多条规则匹配到,这时候就要看规则的执行顺序了。Coverity Connect允许设置文件规则的优先级,所以应该把更具体、更精确的规则排在前头,把通用兜底的规则放在后面,这样就不会互相干扰,归属也会更准确。
4、确认Stream已经应用了新的映射
组件映射修改完之后,一定记得去Stream Details里确认一下,当前Stream到底用的是不是刚刚修改过的那套映射。如果只在组件映射本身做了改动,但Stream仍然绑着旧映射,那么结果页面自然就不会按新的规则来显示,改了半天等于白改。
三、Coverity组件映射调整后怎么复核
组件映射修正完了,不能只看某一条缺陷是不是归对了,还应该多抽几个不同目录、不同类型的缺陷出来看一看,确认新规则没有造成别的误归属,避免出现新的归类错误。
1、用组件筛选结果
在Issues页面里按组件进行筛选,然后依次点开每个组件,看看下面列出的文件路径是不是都符合预期。像third_party、generated、test这类目录尤其要仔细检查,避免它们混进核心业务组件里,干扰后续的统计和分派。
2、导出组件映射做备份
Coverity支持导入和导出组件映射,导出的JSON格式文件包含了组件、文件规则和默认负责人等信息。所以在正式调整之前,最好先把当前的映射导出一份存起来,万一改错了还可以直接回退到之前的版本,减少风险。
3、同步默认负责人
组件映射的一个常见用途就是用来分派问题给对应的负责人。如果组件调整了,或者负责人发生了变化,那在映射里设置的默认负责人也要同步改掉。而且切换组件映射之后,新产生的缺陷会怎样分配也要验证一下,免得组件是归对了,但任务还是派给了原来的人员。
总结
Coverity配置组件映射,大致流程是先进入【Configuration】→【Component Maps】,按照源码的存放路径建好组件和文件规则,然后再把这份映射绑定到对应的Stream上。如果发现组件归属有错误,重点去查文件的实际路径、规则的粗细、规则的优先顺序,以及Stream与映射的绑定关系。在调整前先导出一份备份,调整后再用组件筛选和抽样检查来复核,这样才能确保后面的缺陷统计和问题分派都是准确的。
