收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

腾憬文化科技香港科技事业部 | 五款IDEA 插件,堪称代码质量检查利器!

[复制链接]
) U1 U9 E0 f0 w- F. F

原标题:腾憬文化科技香港科技事业部 | 五款IDEA 插件,堪称代码质量检查利器!

7 D' r6 L# ^5 c2 u; Z$ ^1 S / E+ O: T+ A6 Q; n x" i0 V

随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是,代码审查难度大,代码缺陷、漏洞不易发现,且审查工作随着代码量增加而增加,审查效率低。

, L( O6 b9 W- W+ k( i

工欲善其事,必先利其器,因此,这篇文章给大家介绍几种检查代码质量的利器,Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint,让你在关注代码质量的同时,减少 code review 的工作量,提高 code review 的效率,并通过代码质量分析去反向提升我们的代码编写能力

6 [' v8 s9 b7 P5 Z5 k

一、Alibaba Java Coding Guidelines

' M& ?) g% }2 y7 r% M" L" ^5 `

1、整体介绍:

9 b6 L: [" b h2 p" i4 t$ t

Alibaba Java Coding Guidelines 专注于Java代码规范,目的是让开发者更加方便、快速规范代码格式。该插件在扫描代码后,将不符合规约的代码按 Blocker、Critical、Major 三个等级显示出来,并且大部分可以自动修复,它还基于 Inspection 机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。

3 j+ c. v4 ~( a6 a+ D- c

阿里巴巴规约扫描包括:

* r2 N2 W; u* g* N4 ?& _3 J& }6 g4 d P8 z& f' ? OOP规约 ! T1 l+ ]# x/ M9 O) P 并发处理 # k& p; a& E6 N+ B4 S' | 控制语句 4 [4 ?3 K6 m5 _9 K' w, t4 ]8 N 命名规约4 s |5 n5 h- ~) E) y* ] 常量定义 1 _) e3 G! I6 v* A) @6 d" ` 注释规范 8 {2 r: S) w, d' o , e6 w3 S% e" g1 G2 M: j& V

2、安装步骤:

8 {4 d+ H2 D+ V( U5 p+ {

File > Settings > Plugins > Marketplace 搜索 “Alibaba Java Coding Guidelines”,按照提示进行安装,然后重启即可。

" b# t! R5 n Q7 g1 \

3、使用说明:

6 H+ ?* [; p u" i) I' }

3.1、运行方式:

6 t: i) [3 O4 M0 k/ l

(1)可以Tools > 阿里编码规约 > 编码规约扫描

4 p' _. o; m; C1 [3 F1 q5 ?* ^

* A# T; @! g8 |+ d7 J

(2)在编辑界面或者项目区域点击右键,在右键菜单中选择“编码规约扫描”即可:

1 ~& _; k; n8 x* k2 e

" R' X) ]# N3 q$ {- x# V

3.2、菜单功能:

( \1 b$ E# v" o$ F. }. X- ?9 N + `' S @2 ]# E4 }4 y( T 编码规约扫描:开始扫描代码 7 F$ B6 u$ N- Z2 b% h% P7 z/ e 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能* f" W% Z$ c1 R2 l, Q, e 切换语言至英文:中英文切换/ F) w4 M" W0 c6 I 5 S: \$ U" i+ P

3.3、运行结果:

, v6 ?, g; _/ i' G+ E' V

扫描完成后显示结果如下,我们可以看到扫描结果主要分为 Blocker(阻挡者)、Critical(严重问题)、Major(主要的)三个大类,它们表示的是问题的严重程度,严重程度由高到低为:Blocker > Critical > Major,至于每一类中都会包含什么样的问题,图中的内容已经说明了一切。

+ N8 f' V( U$ M

8 U/ A' ]: J! W& t2 ^, U

选中其中的一个问题项目,会出现如下内容(如果当前鼠标点击的是最终项,右边区域显示的是其它的内容,后面会再讲到):

$ s d$ M# A* F* Z- d

9 u* m! j1 ~6 y% ^& h

(1)指定区域搜索同一类问题:

1 e. K9 }3 u; {2 A

当点击③处的按钮时,会弹出如下按钮:

& o0 O, \* C, v

- H1 [) _& r( c

这里选择扫描区域,来扫描鼠标选中的同类问题。如果按照默认选择,那么运行后的结果就如下图所示:

/ }9 p- x7 v, ?. K5 O1 `

5 G, P* z V" O7 b H* u3 y$ a. N

这里我们可以看到,显示了整个Project中的所有该类的问题。

( \1 c& H6 J/ {0 g

(2)预览具体的不规范代码:

9 J1 d7 H8 d) Y6 c2 z3 u3 v

如果点击的是最终的问题点或者问题所在的类文件,那显示的就是如下界面,预览该处不规范的代码。

. C) {; E$ K: l) z8 ?. c- U, c; V

. `0 R* d9 t8 M# b0 [4 |

3.4、工具栏功能介绍:

& l( H$ Q( L0 R3 v* p

$ _) x a# _& L* I / {6 S+ ~. ]0 l" m5 ] Rerun Inspection:重新运行一次扫描 & b! V# M7 o }# X! @. d( g Close:关闭真个AJCG面板+ [8 m4 Y0 Q+ @2 k! H! x! k Expand All:展开结果的树状结构,整个结果是树状结构的。 7 G2 ^- U2 Y; B0 p6 m7 x7 x Collapse All:收起结果的树状结构 6 R" z4 ] Z4 y. J! X% K Go Pre Problem:选择上一个问题 - q* A; F! g9 ~6 [- |. F/ }0 z# L Go Next Problem:选择下一个问题7 p2 T: F" ^& G" S- j8 b4 R; I# W Help:帮助 4 N2 J. z4 G/ J1 U Group by Serverity:(不知道如何描述)4 o+ N% ?% S! t( z& f7 X# h Group by derectory:按目录分组/按类名分组间切换 % d& i2 A3 `7 Y Filter resoled items:过滤掉已经解决的项; ^' U) I9 |$ o6 t3 b$ m. v Autoscroll to Source:自动滚动到源码 k1 s7 @: _( z7 u7 K) b Export:导出,可以导出为XML和HTML两种格式 ) L7 u8 I. C& X! V" h6 O Edit Settings:编辑设置 " f2 i. R; E4 R' \" w0 q 2 L; k9 ~4 |- V$ G2 Y0 Y! A

二、CheckStyle:

" n' J; E Y( V0 h$ f8 F2 w

1、整体介绍:

! b" |' H2 }1 r% e' J/ i

CheckStyle 侧重检查编码格式和代码风格规范,如命名规范、Javadoc注释规范、空格规范、size度量(如过长的方法)、重复代码、多余Imports等,从而有效约束开发人员更好地遵循代码编写规范。Checkstyle主要是文法层面的代码编写规范的分析,对bug几乎没什么发现能力。

5 F3 J' I( U& j! T8 _

Checkstyle插件中默认内置有2个执行代码检查的配置文件(Sun Checks 和 Sun Checks),但是这两个文件检查的非常详细严格,即使优秀的开源项目也会检查出来有非常多的错误告信息,所以需要导入我们自定义的配置文件。

- X0 Y5 V0 U! A* ~0 L* ?

2、安装步骤:

& ?4 S5 q% |" K" V/ U% s1 R- q5 ^

通过 File > Settings > Plugins > Marketplace 搜索 “CheckStyle”,按照提示进行安装,然后重启即可。

; p! e& M5 V- ?7 P, k1 M

3、使用说明:

' G8 _7 l( ^( H! t, L/ |/ }9 A( z

4 p2 r2 d6 P: l o

可以看到基本都是一些缩进啥的编码规范,可以不用太关注

* M) n; b& J; g

三、PMD

" Y/ V) _0 i4 i! o/ f# s, [, y) k

1、整体介绍:

$ |- S2 ]7 D) O( g/ B8 _1 \+ Z

PMD侧重面向安全编码规则,且具备一定的数据流分析和路径分析能力,能力比CheckStyle稍微强点,并且 PMD 支持自定义规则,PMD可以直接使用的规则包括以下内容:

. } Y( y9 L# t; v2 R# a, M& N5 D+ ]1 g 潜在的bug:空的try/catch/finally/switch语句 ' q) `2 `9 ^1 a" a' [% @ 未使用的代码(Dead code):未使用的变量、参数、私有方法等7 H6 e$ S! n. a, q! D4 Y) j 可选的代码:String/StringBuffer的滥用1 c. J; N8 `9 i$ p( P9 Y# C 复杂的表达式:不必须的if语句、可被while替代的for循环 5 w5 X* E$ d! N% X 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs ( t4 Z @% D, d3 p4 y1 O1 k 循环体创建新对象:尽量不要在循环体内实例化新对象 , f: ^. r3 E3 W; y4 b 资源关闭:Connect,Result,Statement等使用之后确保关闭掉* i. A6 Z* _' ~" `' C5 H ; Y e9 `5 H# _+ C4 j- Y

2、安装步骤:

% n& x- ^' _; h, w, U" v

通过 File > Settings > Plugins > Marketplace 搜索 “PMDPlugin”,按照提示进行安装,然后重启即可

1 Q P: w" b7 d$ `" ~

3、使用说明:

4 T2 Q5 D+ C, z3 n 4 F4 U! q N1 c& R7 L 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html $ z) f0 u, N* m" C6 J$ J9 e' J0 \6 z

3.1、运行方式:

; H( u$ Q0 t2 ^& Y* l

(1)从Tools菜单中启动:

& J( D( J' N! e: R% T4 n+ m

通过 Tools > Run PMD 可以看到如下的界面,如果通过该方式启动,扫描的范围就是整个项目中的文件了。

* Z8 w7 ^2 Y% L: a # K3 N9 L0 z G8 Q% p Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 9 d5 n& ?; E. d+ o: l9 }% q Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。5 J% x& ~, ?- z) m5 t! I 6 N+ }# M Y* P4 s$ T

(2)从右键菜单中启动:

7 h% N" h: Z/ }) M% D7 w5 F

在文件或者编辑器中点击右键,也可以看到“Run PMD”选项,如果通过该方式启动, 检测范围取决于鼠标或光标当前所选中的区域。

' R- A. V, J0 Z/ a4 K

3.2、运行结果:

2 U* @! e( F, c/ @5 s9 {8 y

_& `4 \' n) X8 @7 J

运行后会出现如上所示的面板,左边工具栏,鼠标停留在上面会提示其功能;右边显示了检测结果,当点击具体某一问题项时,会跳转到对应的源码中。

4 X# r1 p9 @$ e8 P+ }' X( m% }

3.3、配置检测规则:

, c+ H. S2 N8 p5 N

通过 File > Settings > Other Settings > PMD 可以打开检测规则的设置界面:

8 D5 H7 j4 [; T9 W

6 L, E, j3 |- y

在 “RuleSets(规则设置)” 界面可以管理自定义的检测规则。因为在实际工作中,可能需要根据实际情况自定义检测规则,就可以通过这里导入,如果要使用它,需要在启动PMD进行检测时选择该自定义规则。

$ D" E! P6 P4 F1 Y( H

点击“Options”选项卡,在其中可以配置一些检测规则选项:

0 q, x5 ^( b4 W- O2 l w- d

# J* F' x; R$ C' d- [4 _6 O

其中重点需要留意的是“Skip TestSource”这一项,因为在项目中有不少Android Studio自动生成的测试代码,如下所示,选择上述选项后可以将其过滤掉。

9 X8 c+ e- s/ g8 t8 S

四、FindBugs:

- e- f1 E. ~+ f% q3 t

1、整体介绍:

- ^: ^- n& z% }% u

FindBugs 侧重于发现代码中存在的bug,如运行时错误检测(空指针检查、未合理关闭资源、字符串相同判断错(==,而不是equals)等),它可以简单高效全面地帮助我们发现程序代码中存在的bug以及潜在隐患,针对各种问题,它提供了简单的修改意见供我们参考

/ x( A9 a- E& x* c

2、安装步骤:

3 q$ {0 w2 H$ C9 [1 I1 T6 ^ Q# G; l t

通过 File > Settings > Plugins > Marketplace 搜索 “FindBugs”,按照提示进行安装,然后重启即可

% o/ c' n8 o0 E' ~

3、使用说明:

# m1 U D3 v1 F( ?

FindBugs 可以分析单个文件、包下面的所有文件、整个module下的文件、整个project下的文件,右键想要分析的文件名/包名/module名/project

! G5 U. j1 C. m: [3 K I

2 l j9 ^% u4 w6 P% U

分析完之后就会出现结果面板

! N. ^8 R; m( T" G* ~

& F7 t' a# f k9 H

点击对应的item在右边会定位到具体的代码,这是根据提示进行处理修改就行

, |- i% {7 m C5 @3 P X4 O! K) M . T+ p: U5 g d( ~# [$ M0 m

4、附:常见的错误信息

$ Y: F1 z$ t& H. ^, T7 F. \

4.1、Bad practice 代码坏习惯:

. j# a* v7 \- D& x3 x' i! d8 U( U; K5 _! L* ?5 |9 G

图片

* Q& J, h( R3 w ?

4.2、Dodgy code 糟糕的代码:

" z2 n1 Z& x/ a; w . Q5 f" z2 L* x2 D& P

4.3、Internationalization 代码国际化相关:

( d. l* c: w+ u8 g) @9 j, y

4.4、Performance 代码性能相关:

$ h* ^, F6 f4 f* l0 B / B: w* G3 v. i2 m) U; J

4.5、Experimental:

; o2 g: Y0 }0 {! @$ \ * P2 S- p) Q, \$ g7 h0 T. ~4 [* r

4.6、Malicious code vulnerability 恶意破坏代码相关:

7 R; C7 i! Z+ k% T + z$ s* K2 @8 A! a7 L

4.7、Multithreaded correctness 多线程代码正确性相关:

) N& \, E6 ]/ z" V: d8 v

4.8、Correctness 代码正确性相关:

5 Y5 T- H5 b; F( {2 O* B4 z+ r3 }' \$ j

五、SonarLint:

4 M' K6 n% ~# a' B) g" p+ g% H

1、整体介绍:

4 N; p/ T+ v- l6 F, L

sonar 比 Findbugs 高了一个层级,它不仅关注常规静态BUG,还关注到了如代码质量、包与包、类与类之间的依赖情况,代码耦合情况,类、方法、文件的复杂度,代码中是否包含大量复制粘贴的代码,关注的是项目代码整体的健康情况。sonar 有两种使用方式:插件和客户端,sonar 的插件名称为 sonarLint。

! L5 A8 f% { c

2、安装步骤:

% ^$ k! }2 M& n6 q1 z: ~8 L; ?: B# C

通过 File > Settings > Plugins > Marketplace 搜索 “SonarLint”,按照提示进行安装,然后重启即可

, x' o& N0 j) B$ g4 }! X

3、使用说明:

. D; }7 b5 |. o8 k% |/ p I ; p }$ O1 }$ I% F: A# @

右键项目或者文件进行如上图所示操作,执行之后可以看到如下信息,如果代码中有不合理的地方会在report中显示,同时点击错误的地方在右边会给出建议的修改供参考。

) T5 ^$ w/ Z3 O8 G. W6 O7 m ; T- j; Z" f+ _, d2 W; j, i, C8 |

4、配置 SonarLint 服务端:

" l1 J! Q% ]' [# B# X% S

4.1、配置 Sonar 服务器:

8 B1 c+ X$ Y, n1 d& U1 r4 E

sonarLint 插件的使用场景是自用自审,但 sonar 也提供了平台版本,使用场景则是他审,sonar 平台的搭建就不在这篇文章介绍了,感兴趣的读者可以自己上网查看,我们这里主要介绍如何在 sonarLint 插件中配置关联 sonar 平台服务器的工程,进行本地检查:

& `5 ?* A! w, r, ~' Y 1 U( P9 h S0 d: Q# }

点击新增按钮,输入Configuration Name,配置sonarlint 服务器的地址,然后下拉框选择 Login/Password,输入 sonarlint服务器的账号密码

/ y5 {& N9 c( c' s# H ~0 h4 `

4.2、具体 Sonar工程配置:

. R, s& Z2 s8 W: ~6 U3 r. M

配置完服务器之后,需要针对具体工程进行配置,点击 connection下拉框,选择上面配置好的服务器连接,然后点击 Search in list,找到对应的工程:

; ~2 i* u& S% X1 k 9 C; P2 Q% E6 h

4.3、使用 SonarLint 检查:

, x* z5 @+ y' ~0 S" ?2 G6 T

配置完上面两步之后,接下来就可以选择要进行检查的类或者目录进行 sonarlint 检查了(跟第3点的使用方式一致),同时,在 commit 代码的时候,勾选 “Perform Sonarlint analysis”,会针对你要提交的代码进行sonarlint检查

6 M. Z* J& P% ]- Q5 A2 Q+ \' J# B2 w

总结

) j) \7 ~% V3 Z9 ~, t$ v" B6 U, `6 P' f2 h6 y) G. I! T$ Q' D* ^6 G 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了# u8 a4 w Q; h9 F9 C2 B- A- Z# w 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: % N0 h3 g) L- Z PMD 自定义能力强,用来自定义项目BUG规则非常好用0 [6 |0 p. d5 b# O Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 0 w" i3 ~+ W" O# Y SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 % X6 { E+ D. F: e3 `( _ ) g# K$ _/ O" J& u

文章由重庆腾憬文化科技有限公司新闻事业部整理,仅用于学习交流,版权归原作者所有,如有问题,请及时与我们联系,我们将第一时间做出处理。返回搜狐,查看更多

5 \1 O7 B$ g' U2 }" q& E; l # F) P9 d) L c9 a& l8 R

责任编辑:

, P! x) {8 l$ ^6 G5 f3 ~8 [$ @ # u% f3 c. a2 ?0 P% @7 O4 D( r2 R4 ^$ ], x- ^ 4 J6 {' E; ~+ M+ @ ) ~! r& p$ e- O8 {* [ w" {
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
家国依稀残梦里
活跃在3 天前
快速回复 返回顶部 返回列表