java代码扫描工具比较_代码扫描工具的选型和Sonar最佳实践

目标

在编码阶段发现NNE空指针异常、IO流未正确关闭等致命性bug,杜绝此类“零容忍”线上异常的发生。

技术选型

关于代码扫描工具,比较主流的有Sonar、FindBugs、Alibaba Java Coding Guidelines、CheckStyle。

Alibaba Java Coding Guidelines最大的优点是全中文的提示,对国内开发人员相当友好,并且有阿里巴巴团队持续维护。但是经我亲测,无法检测出NNE等潜在bug,所以肯定是排除的。等后续提供了这方面的支持,会是不错的选择。

FindBugs功能完全够用,可以检查出NNE这样的错误,但是很可惜,idea的FindBugs插件最多支持到2018.1版本,看来新时代的我们也无福消受了。但是FindBugs似乎也有独立运行的版本,但是我大致看了一下,GUI界面比较复古风了,看了一下官网,最后一次更新是2015年3月了,这种已经停止维护的东西也不敢用啊

94f5c59cb3c90cb64843ae70af9eaa7e.png

CheckStyle跟Alibaba Java Coding Guidelines有点类似,基本也是规范代码格式的,不能找出潜在bug,因此排除

Sonar大致分为idea插件版本的SonarLint和带有非常友好功能强大GUI的SonarQube代码质量平台,完全能满足我们的需求。并且Sonar提供了面向gitlab、jekins、maven的无缝对接支持,是当下最活跃热门的代码质量扫描工具。

综上所述,我们也只能选择Sonar了。

Sonar最佳实践

简单做法

最简单的做法就是,idea的plugins应用市场直接搜索SonarLint然后安装就可以了。然后直接鼠标右键选择Sonar扫描文件就可以看到结果了:

03bf1c7996dc420ceb47ac093c795472.png

这种简单粗暴的问题有两个

Sonar的规则有一千多条,扫描出的问题严重性有Bugs、Vulnerabilities、Code Smells等几个级别,如果所有的问题都要改过去,效率就太低了,也难以执行,个人认为,除了Bugs级别的必须改掉之外,其他级别的问题不必强制性改掉,有追求的同学可以当作优化自己代码风格的手段。但是不幸的是,SonarLint的错误提示并没有按照错误等级分类过滤的选项,在茫茫问题条目中一个个找Bugs级别的问题,着实蛋疼。当然,也可以右键选择”disable rules“来直接去掉非Bugs等级的扫描规则,但也不够优雅。

4ae1d3464e92fdc4a181e972d53d6a65.png

这种方式全靠自觉,假设代码review的时候,需要把解决掉所有Bugs级别的问题,作为前置准备工作之一,那我们还得像第1点里面说的那样看有没有遗留的bugs级别问题。

推荐做法

第一步下载

自己去官网下一个SonarQube的安装包,这里面有个坑,官网上最新的LTS版本的SonarQube(目前是version-7.9.3)最低要求的Java版本是JDK11,我们现在普遍还是用的Java8,所以推荐大家去下载6.7.7版本的。值得一提的是,SonarLint插件也可选择把扫描结果同步到SonarQube平台上,但是两者的版本要对应好,否则无效(这真的很坑)。

我百度网盘准备了sonarqube-6.7.7的zip文件,链接: pan.baidu.com/s/1aFOTfX0j… 密码: 1n2c

第二步启动

下载完毕,解压后,进入到/sonarqube-6.7.7/bin下面,可以看到有所有通用的平台的启动文件

819b715455a9a10e8fbc172e184587c5.png

我的Mac,在macosx-universal-64文件位置,执行命令 sh sonar.sh start 就可以了,完全不用做其他任何操作,启动日志在/sonarqube-6.7.7/logs/sonar.log中,然后浏览器前往localhost:9000,成功后页面如下:

37dd047dee2fb1f8a2f3e5d0a9ea5506.png

第三步初始化配置

点击右上角选择登陆,初始用户名密码都是admin,然后根据步骤配置token信息。

在项目根目录下面(其实可以在任意目录下面),执行命令

mvn clean install sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=d7b53bc44cd108ee40b6691433bf70eb0a507b0b

复制代码

Dsonar.login后面替换成你自己的token就行了。

执行完后,再回到SonarQube平台,可以看到:

cc4a4e5553ac14479f96c52dbc20cde3.png

点击项目名字,然后再点击Bugs

cf6e4e254e742000399aec6d2c32c12b.png

如下图,我们的老朋友NNE也在其中了

2663942c672f8f4d9a1481a91057c0c5.png

我们改掉后,再重新执行一回命令,Bugs为0就OK啦。(sonar结合上下文跨方法判断的能力比较弱,如果确定不存在风险可以手动选择“Resolve as won't fix”)

当然,为了方便,也可以讲这条mvn命令配置为idea快捷启动项,如下:

951772ebc0a5b7db7b8ef075fc19286c.png

如何实施

将Sonar扫描Bugs问题归零作为代码review前置准备的必要检查之一。

大团队可考虑:申请云服务器来部署Sonar,接入gitlab,每次提交的时候检查有无Bugs问题,如有,则发送钉钉告警信息。接入项目部署平台,将Bugs问题检查作为部署前置检查

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在上一篇文章中,我们介绍了如何安装 SonarQube 和 SonarScanner,并扫描了一个 C# 项目。本文将介绍如何扫描 Java 项目。 ## 准备工作 首先,我们需要安装 Java 环境。可以从官方网站上下载并安装 JDK。 另外,我们还需要安装 Maven。可以从官方网站上下载并安装 Maven。 ## 配置 SonarQube 与上一篇文章相同,我们需要在 SonarQube 中添加 Java 插件。在 SonarQube 的插件页面中搜索 Java 并安装。 ## 配置项目 在扫描 Java 项目之前,我们需要在项目中添加一个 SonarQube 插件。在项目的 pom.xml 文件中添加以下内容: ```xml <build> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.6.0.1398</version> </plugin> </plugins> </build> ``` ## 执行扫描 在项目的根目录下,执行以下命令: ``` mvn sonar:sonar \ -Dsonar.projectKey=<项目键> \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.login=<访问令牌> ``` 其中,`<项目键>` 是在 SonarQube 中创建项目时指定的项目键;`http://localhost:9000` 是 SonarQube 的地址;`<访问令牌>` 是在 SonarQube 中创建用户并生成的访问令牌。 执行完毕后,访问 SonarQube 网站,可以看到 Java 项目的扫描结果。 ## 结论 通过上述步骤,我们可以轻松地扫描 Java 项目,并通过 SonarQube 分析代码质量。如果想了解更多关于 SonarQube 的用法,可以查看官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值