使用Alibaba代码规范插件和SonarLint插件提高代码质量

代码质量的重要性

在我们日常完成需求中,常常因为时间紧迫,项目紧急上线,总想着先实现再说,然后等日后上线之后再慢慢优化,我相信,你可能看过很多祖传代码,各种//TODO,然而往往随着项目的上线,TODO就变成DONE了。

其实,不是我们不想去完成TODO,而是一旦项目上线交付,验证过后的功能再次修改肯定会带来一定的风险,所以只要不出问题,就不会再次打开修改,甚至重构,这也是祖传代码的由来。

所以,为了避免低质量代码的存在,在编码阶段就应该保持一定的代码质量,及时时间紧迫交付压力大,也要保持着一定的代码洁癖,做到在一定条件下最优。

还有,程序员的思维都是完美主义,所以一旦确定思路,编码的速度其实可以很快,特别是简单的业务代码,小键盘敲得飞起,我们都讨厌各种if非空判断,各种check,因为这是不完美的,而代码质量的高低往往就在这些细节,而我们常常忽略的就是这些。

如果等到测试阶段再发现问题,那就得返工,而如果测试没有发现问题等到生产发布之后才发现问题,或者造成程序漏洞,那么将会得不偿失,还可能造成生产事故,所以每个程序员都有必要提高自己的代码质量,对自己的代码负责的同时也对自己的工作负责。

不断提高代码质量

从大的方面来讲,可以从这几个方面,不断提高自己的编程能力:

  • 编码之前需要做一定的设计,主要考虑:耦合度,拓展性,复用度
  • 熟悉类库,熟悉API,避免自己造轮子
  • 阅读优秀源码并加以实践
  • 参考一些已有的最佳实践,代码片段,但是避免复制粘贴
  • 多考虑一些细节、边界、异常场景
  • 保持代码的整洁,包括类、方法、变量的命名
  • 在I/O操作多考虑性能问题,重要信息多考虑安全问题

代码质量的修炼不是一日而成,而是在实践中不断练习,当有一天觉得自己写的代码就像一首诗的时候,当自己的代码被人夸奖的时候,内心岂不是也是美滋滋

使用Alibaba代码规范插件和SonarLint插件实时提高代码质量

Alibaba Java开发手册 & 代码规范插件

阿里巴巴Java开发手册

项目地址:https://github.com/alibaba/p3c

《阿里巴巴Java开发手册》在经历过N多个最终版(也是大家共同努力),最终得到大家共同的认可,至少在国内为行业规范的贡献还是不容小觑(直至今天,IDEA插件下载了达到了80万次),也顺利地出了书,感谢!

手册主要有如下几部分:

  • 编程规范
  • 异常日志
  • 单元测试
  • 安全规约
  • Mysql数据库
  • 工程结构
  • 设计规约
代码规范插件

官方安装教程:https://github.com/alibaba/p3c/wiki

代码规范插件实现了开发手册中的53条规则,基本都是基于PMD实现,可以扫描工程已有的代码,也可以实时检查,让我们及时发现问题代码,规避风险,写出规范代码,特别是对于同一团队,统一的代码规范非常重要,形成统一的风格,有利于看懂他人代码,排查问题等。

检查结果一共分三个等级:

等级 严重程度 备注
Blocker 严重的 有明显问题,影响功能,性能等
Critical 危险的 一般问题,遵循的标准
Major 主要的 多为建议

扫描结果效果如下:

alibaba_code_guidelines.png

SonarQube 与 SonarLint插件

SonarQube

项目地址:https://www.sonarqube.org/

SonarQube是一种自动代码审查工具,支持多种语言,可检测代码中的错误,漏洞和代码异味等。并且能够生成代码审查报告,它能够集成单元测试,统计单元测试覆盖率等。它还能很好与现有的DevOps结合,例如,在Java方面支持Maven插件,并且能够与Jenkins集成,实现自动化分析、测试,生成报告等。

sonar_qube.png
SonarLint插件

项目地址:https://www.sonarlint.org/

一个IDE插件,与SonarQube使用同样的代码分析工具,能够在编码的阶段实时检查代码,并且在代码提交前做检查等,把存在的问题提前暴露,提高代码质量。

三种问题类型

Type 类型 备注
Bug Bug 代码Bug,影响程序运行
Vulnerability 漏洞 漏洞,有可能被攻击
Codesmell 代码异味 可以优化,不然会影响代码的可维护性

五个问题等级

Severity 严重性 备注
BLOCKER 阻断 影响程序正常运行
CRITICAL 严重 可能会影响程序运行,安全等
MAJOR 主要 影响开发效率,代码质量
MINOR 次要 可能会影响开发效率,代码质量
INFO 提示 不影响程序,一些建议

扫描结果效果如下:

sonarlint.png
Alibaba代码规范插件 vs SonarLint

介绍完这两个插件,那么应该如何选择呢?

这两个插件的侧重点不同:

  • Alibaba代码规范插件比较关心的是代码规范,编码风格上的,例如,命名规范,注释,代码行数等
  • SonarLint比较关心代码正确性,存在的问题,风险,漏洞等,例如,重复代码,空指针,安全漏洞等

所以,我建议结合使用,使用前者来规范代码,使用后者来提前发现代码的问题,配合起来提高工程整体的代码质量,并且能够在编码阶段规避风险,提高程序的健壮性。

说了这么多,赶紧用起来吧!

你可能感兴趣的:(使用Alibaba代码规范插件和SonarLint插件提高代码质量)