代码规范工具对比
代码规范工具是什么
大家应该都有过写完代码后review的情况;用于提高编码质量,尽早的发现问题;节约开发时间和成本。
但review 这个过程往往要消耗 更多的开发资源。
所以就出现 自动检测可能代码中存在的问题的工具 ,我们一般把这类工具称为静态代码扫描工具。
常见的静态代码扫描工具有 checkstyle ,findBug,PMD,Jtest等等,它们有的用来寻找编码格式问题,有的用来定位可能存在的BUG。代码规范工具呢 。顾名思义主要关心其编码格式,规范。除了最后的静态代码扫描外,有些插件也支持在编码过程中实时显示规范问题。
代码规范工具 是自动比对代码与规范差异的一个工具,用以减少实现这一规范需要耗费的成本。
代码规范的目的
对于整个团队而言,代码规范的目的实际上是为了提高效率。
秦始皇书同文,车同轨,定义了一个规范,才会让整体的交流变得简单,轻松。代码也是一样。
我们编码过程中,免不了团队协作,免不了迭代,升级,维护。
从自己角度看 遵循开发规范,可以让自己在后续迭代中,对于之前代码能够尽快熟悉,不会写了就忘,不会为了之前的一个问题,花费特别长的时间去熟悉逻辑 ,寻找BUG
从团队的角度看,需求可能不一定是一个人维护迭代升级,遵循规范能够减少团队的交流沟通成本。这样后面可以理直气壮的说一句,代码(注释)里面写的很详细,而不是代码需要讲解才能看的懂。
常见的一些代码规范工具
Alibaba Java Coding Guidelines
- 整体介绍
Alibaba Java Coding Guidelines 专注于Java代码规范,目的是让开发者更加方便、快速规范代码格式。该插件在扫描代码后,将不符合规约的代码按 Blocker、Critical、Major 三个等级显示出来,并且大部分可以自动修复,它还基于 Inspection 机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。 - 安装步骤
File > Settings > Plugins > Marketplace 搜索 “Alibaba Java Coding Guidelines”,按照提示进行安装,然后重启即可。 - 使用说明
3.1. 运行方式:
(1) .可以Tools > 阿里编码规约 > 编码规约扫描
(2)在编辑界面或者项目区域点击右键,在右键菜单中选择“编码规约扫描”即可:
3.2.菜单功能:
编码规约扫描:开始扫描代码
打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能
切换语言至英文:中英文切换
3.3. 运行结果
扫描完成后显示结果如下,我们可以看到扫描结果主要分为 Blocker(阻挡者)、Critical(严重问题)、Major(主要的)三个大类,它们表示的是问题的严重程度,严重程度由高到低为:Blocker > Critical > Major,至于每一类中都会包含什么样的问题,图中的内容已经说明了一切
3.4. 工具栏介绍
Rerun Inspection:重新运行一次扫描
Close:关闭真个AJCG面板
Expand All:展开结果的树状结构,整个结果是树状结构的。
Collapse All:收起结果的树状结构
Go Pre Problem:选择上一个问题
Go Next Problem:选择下一个问题
Help:帮助
Group by Serverity:
Group by derectory:按目录分组/按类名分组间切换
Filter resoled items:过滤掉已经解决的项
Autoscroll to Source:自动滚动到源码
Export:导出,可以导出为XML和HTML两种格式
Edit Settings:编辑设置
SonarLit
sonarlit 插件的安裝及使用
安装
打开IntelliJ IDEA—>settings—>plugins,在Marketplace搜索SonarLint,下载安装,重启IntelliJ IDEA。
也可以选择下载插件,丢到plugin 目录手动安装
sonarlint-intellij-6.7.0.45926.zip使用说明
配置自动扫描
打开IntelliJ IDEA—>settings—>Other Settings—>SonarLint General Settings或者IntelliJ IDEA—>settings—>SonarLint General Settings,勾选Settings—>Automatically trigger analysis,点击Apply,再点击OK。
手动执行扫描
鼠标移动到项目根目录,右键选择Ayalyze,选择Ayalyze with SonarLint。
扫描后的结果说明
SonarLint插件在IntelliJ IDEA 中页面显示的名词解释:
Current file:当前文件(展示当前文件存在的哪些问题,以及解决方法)
Rule:规则(告诉你问题的具体内容,并在最后告诉你如何解决这个问题)
Report:报告(鼠标移动到项目根目录,右键选择Ayalyze,选择Ayalyze with SonarLint,完成之后的结果显示,包含整个项目的所有文件的问题)
Locations:位置(告诉你,在哪个地方有问题,问题的重复位置)
Issues:问题
每个issue有五个等级:
BLOCKER(致命):会影响应用程序的缺陷:内存泄漏,未关闭的JDBC连接…必须立刻修复的代码
CRITICAL(关键 ):可能会影响应用程序的缺陷或者是安全性缺陷:空的catch块,sql注入,…必须立刻查看代码;
MAJOR(主要):可能会影响开发者效率的质量缺陷:未覆盖的代码,重复块,未使用的参数….
MINOR(微小):可能会影响开发者效率的质量缺陷:每行不能太长,“switch”语句应该至少有三个条件,….
INFO(未知):既不是缺陷也不是质量问题,只是一个发现。
每个issue有三个状态定义:
Bug:窃听器(可靠性),避免错误和未定义的行为
Vulnerability:漏洞(安全),避免破坏或攻击
Code Smell:代码嗅觉(可维护性),简化代码更新,并提高开发人员的速度
具体用法:
Locations:
左边信息展示,假如这个问题在当前文件中出现多次,则在这条问题的后面会有
的标识,选中并鼠标双击之后,在右边显示具体的位置,如图所示
[注:括号里面的数字表示问题在第几行的第几列]。
Report:
Log:
如何去掉不需要的扫描规则
1.打开settings
2.选择 tools--> Sonarlint -->Rulse →搜索对应的规则
插件对比
插件 | 格式检查 | BUG扫描,漏洞分析 | 更新时间 | 扫描信息收集 | 规则自定义程度 | 插件下载量 | marktplace 评分 | 集成进其他流水线或仓库组件 | |
Alibaba Java Coding Guidelines | 支持 | 不支持 | 不支持 | 动态扫描支持 最终结果不支持 | 不支持 | ||||
SonarLit | 支持 | 支持 | 支持(sonarqube) | 支持 | 支持(gitlab,jenkins) |