您的位置:首页 > 编程语言

基于SonarQube实现代码扫描的团队定制

2016-09-02 09:16 1261 查看
目前笔者所在的团队接入代码扫描的应用有七十多个,四百万行左右的代码。SonarQube自带的代码规则加上Findbugs的规则,一共有近五百条规则,因此在违规较多的时候,仅严重+阻断两个级别的违规总量可达到四千个。如果加上其他比较轻的等级的违规,千行代码违规可达到80到90之间。那么面对如此多的违规,要是每一个都要求研发去修改,那是不现实的。团队在最初实施代码扫描的时候,总是会收到研发团队反馈说“误报率高!”。那么经过分析以后,发现所谓的误报率一部分是因为SonarQube
规则集中的一些规则并不适用于当前项目
。例如:”Throwable and Error classes should not be caught”规则在SonarQube里属于阻断级别的问题。可是在实际应用的时候,有些场景是需要来catch Throwable的。那么就开始了代码规则团队定制的第一步:“裁剪规则集”。裁剪规则集,如果以全量规则集为基础,一条一条评估,那么是非常耗时的。那么我们就先找出一个规则比较少的待定的规则集,然后再通过排除法,排除掉不适用的规则,留下的就是我们要使用的规则。这个待定的规则集是如何选择呢,我们就可以利用二八原则,通过全量规则扫描,找出出现问题最多的规则。下面的历史数据是占全量违规80%的部分违规:
 图1-1(其中第4条就是后来被裁剪掉的一条规则) 随着对于SonarQube的规则的了解,可以进一步补充自己的规则集。那么我们先来了解下SonarQube的规则集:下面是不同严重等级的描述:
图1-2除了按照严重等级划分外,规则集还可以按照不同的质量维度来划分:可维护性、可靠性和安全。可维护性(Maintainability):标记为Code Smells 类别的规则,均属于可维护性范畴,比如代码可读性、代码规范等。可靠性(Reliability):一些潜在的Bug,如Findbugs扫出来的一些bug。安全(Security):来源于CWE、OWASP
Top 10的一些规则。 了解了SonarQube规则集,并且掌握的定制规则集的方法以后,如何在流程中实现呢。强大的SonarQube提供了很好的支持。首先需要在SonarQube页面创建自己的规则集:
图1-3然后有两种方法来设定该规则集适用的项目,第一种方法是在SonarQube的质量配置页面选择已有的项目来实现配置:
图1-4第二种方法是在sonar runner 的参数配置中sonar.profile来指定规则集:例如sonar.profile
=”Sonar way with Findbugs”(在4.5以后的版本中该参数已经废弃)。 一旦规则定制好了,还需要持续跟进,不断去掉不适用的规则,新增有用的规则。另外团队定制规则的基础就是要确保规则集是研发团队共同定制出来的,而不是上面指定的,这样大家才有积极性来维护自己的代码规则。

如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: