目标

在编码阶段发现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月了,这种已经停止维护的东西也不敢用啊

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

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

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

Sonar最佳实践

简单做法

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

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

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

这种方式全靠自觉,假设代码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下面,可以看到有所有通用的平台的启动文件

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

第三步初始化配置

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

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

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

复制代码

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

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

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

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

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

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

如何实施

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

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

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

  1. wsdl2java 工具下载_利用wsdl2java工具生成webservice的客户端代码

    1.JDK环境 2.下载apache-cxf发布包:http://cxf.apache.org/download.html 目前最新版本为3.2.6, 解压后如下: 解压发布包,设置CXF_HOME, ...

  2. c vscode 高亮,vscode设置代码字体颜色高亮_编程开发工具

    vscode如何恢复默认设置_编程开发工具 vscode恢复默认设置的方法是:1.首先点击左下角,打开设置:2.然后点击右上角[{}]按钮:3.最后将右侧的用户设置json全部清空即可恢复默认设置. ...

  3. service 层 拼接的html 代码如何直接返回_代码分层的设计之道

    分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分.MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护.MVC:英文即 Model-Vi ...

  4. devops 开源工具链_使用开源工具构建DevOps管道的初学者指南

    devops 开源工具链 DevOps已成为修复缓慢,孤立或其他功能不正常的软件开发流程的默认答案. 但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么. 本文探讨了什么是DevOp ...

  5. java五子棋人机对战_实现简单的人机对战五子棋(实践)

    五子棋人机对战实践项目 总的任务和目标 完成一个人机对战的五子棋项目,基本效果如下: 第一部分 Java绘图原理 1.   基本概念 像素,坐标 2.   组件自定义绘图原理 3.   Graphic ...

  6. pb 判断sql 是否合法_宜信技术|《SQL优化最佳实践》作者带你重新了解SQL

    一.SQL :一种熟悉又陌生的编程语言 这里有几个关键词:"熟悉"."陌生"."编程语言". 说它"熟悉",是因为它是D ...

  7. 基于python技术的自动化运维是干嘛的_《Python自动化运维 技术与最佳实践》.pdf...

    [实例简介]Python自动化运维 技术与最佳实践 [刘天斯著][机械工业出版社][2014.12][291页].pdf [实例截图] [核心代码] 目 录 本书赞誉 前 言 第一部分 基础篇 第1章 ...

  8. 持续集成与持续部署实践_持续集成和部署的3个最佳实践

    持续集成与持续部署实践 本文涵盖了三个关键主题:自动化CI / CD配置,将Git存储库用于常见的CI / CD工件以及对Jenkins管道进行参数设置. 术语 首先是第一件事: 让我们定义一些术语. ...

  9. 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践

    大家应该都接手过这种项目,前人找一个开源软件改一改,发上线. 我这里便曾经遇到过类似的问题. 随着需求的增加,各种维护人员东改改西改改,原来的开源项目被改的面目全非,再也无法和上游合并. 甚至TLS协 ...

最新文章

  1. 针对web服务器容灾自动切换方案
  2. oracle 查重复_日常答疑|MySQL删除重复数据踩过得坑
  3. Open vSwitch VLAN相关字段详解(dl_vlan、dl_vlan_pcp、vlan_vid、vlan_pcp、vlan_tci)
  4. android SDK manager 无法获取更新版本列表
  5. STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
  6. apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)
  7. 作者:胡晓彦(1987-),女,中国科学院国家空间科学中心助理研究员
  8. 控件的WM_NOTIFY消息映射
  9. Alpha 冲刺 (1/10)
  10. 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
  11. Nginx之升级和构建后添加新的模块
  12. 关于VerifyRenderingInServerForm方法的思考(转)
  13. 祖国60岁生日,我在北京度过。
  14. java list api_Java核心API -- 6(Collection集合List、Set、ArrayList、HashSet)
  15. linux下c语言url请求
  16. (转)国内各家智能投顾比较
  17. 鸿蒙os开机时间,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒
  18. 数据中台你想知道的都在这里!
  19. win10系统下如何打开bios如何打开Intel-VT-x教程
  20. Java8新特性之新时间API

热门文章

  1. 没结过婚的我,所了解的婚姻
  2. 几步教会你螺母拧出螺栓动画
  3. threejs点滴yan
  4. 微软四月补丁星期二值得关注的漏洞
  5. [置顶] 历届博客之星获奖博客分享
  6. lg android 互动游戏,一加8 Pro可体验Android 11 Beta;三款三星新品齐曝光;ROG游戏手机3来了;LG被选为可伸缩显示屏研发领导厂商...
  7. 金额数字转换成中文写法
  8. Java 复数的加减,求模,比较
  9. java虚拟机方法区
  10. Teledyne Dalsa图像采集卡(转)