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

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

[复制链接]
+ ^6 [$ n& O$ w. ]0 c1 [% K) C

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

# s3 B# U" w" z) X0 i ' c, ~2 _: X0 v: T" X

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

' E$ t' r# E. p0 l, l; e

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

( _* q' H! r& p$ Q- r) _7 c

一、Alibaba Java Coding Guidelines

( k: F& ~/ D( z4 Q5 j

1、整体介绍:

5 V2 O$ j& V: g9 ?! J

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

3 j& N4 n: g5 R

阿里巴巴规约扫描包括:

' ?8 {: Z/ P4 O . H7 x4 e8 v Z: d+ S [, ?7 L OOP规约! m2 h; a$ }0 x$ q5 t: C' m 并发处理- s/ k3 p& X+ |- p 控制语句7 D" W+ I4 ?# R 命名规约 4 Z1 o9 k# ]! P 常量定义 ( f5 N; u, b# p# d' V* U' b 注释规范9 i" P g. ?# r' J1 D0 V% X) ` # [6 e, X( T" T+ _3 ^% \

2、安装步骤:

/ N+ X0 o& Y1 u

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

x: W% c/ {' ]$ S) a$ ]/ s+ _. K

3、使用说明:

! }6 E5 |& m# X. k* S8 w

3.1、运行方式:

/ @+ Y: A) J$ u6 K5 r. z3 M

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

; W- P6 O1 W4 X' @' }6 e

5 P# S: i5 J! P5 l. k

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

7 V! z. c* \ c3 X7 [8 @

" y' E4 @6 R: w6 s; _9 |

3.2、菜单功能:

, y) X$ O" \! Z4 A# e3 o7 \1 t9 C2 ^ 编码规约扫描:开始扫描代码0 e# o+ J) C8 n' s5 J: U1 G' l 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 1 ]0 [: x# Q4 K 切换语言至英文:中英文切换0 w+ V2 v M& v; l* z 5 W1 ]! G/ Q) _0 J: Q

3.3、运行结果:

6 ]3 X8 n* b9 L% A1 t/ _& t% K- m

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

' u2 s- M- k9 M1 G

- K1 A; h: `" ^: W8 K

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

+ H# k5 l8 D: H4 s# L

5 R: G' k1 r9 [- E

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

" a# A* T$ X, O# G) H

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

2 Z `3 r+ ?0 o

" j& _! `4 t t8 r8 C" j

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

1 _! L* N! O. A$ r6 s! Z6 R/ V

8 H0 d/ O; ~! R. d8 ?! W! x: a+ M

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

( z* _% G2 _- t5 Q

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

g; R* g$ _9 a. Y9 \

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

5 G% t3 s3 e5 K& N- F! K7 l

! Q4 U6 s$ N! s

3.4、工具栏功能介绍:

1 ?; k$ \2 [4 ]* p P |; \ ]

$ d7 T4 h9 D" q . \9 u8 G) T6 c6 K Rerun Inspection:重新运行一次扫描 0 s1 O: P3 F! ]( n6 J Close:关闭真个AJCG面板 ' {/ z1 h- q- l Expand All:展开结果的树状结构,整个结果是树状结构的。' q. a! p6 j0 ?( c Collapse All:收起结果的树状结构 7 B. T& t9 z, G3 \# h# D Go Pre Problem:选择上一个问题. y! F" j, K8 [( f! P Go Next Problem:选择下一个问题 - |" x6 }' v, L. E7 d" ?& v Help:帮助 . e3 x. m, B# C! W5 C! X Group by Serverity:(不知道如何描述) Z6 _2 W' g2 { d Group by derectory:按目录分组/按类名分组间切换 7 z7 h0 w, A, v, [& T f Filter resoled items:过滤掉已经解决的项! P9 B& x$ X9 [! k& r2 U- [7 b* a H Autoscroll to Source:自动滚动到源码 8 @. W/ @9 }6 a: z1 G Export:导出,可以导出为XML和HTML两种格式 ( |+ z, F) G7 K* ?; O' \( P Edit Settings:编辑设置 ' k1 {# W: n. j5 w0 t7 _2 N5 M/ W& [ {; g6 k/ b" l

二、CheckStyle:

{+ P9 Y& p' r1 K6 ?

1、整体介绍:

6 ?+ f6 P. u! r# j8 U* H

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

2 j$ n% x7 m p

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

7 M' b& ?) K' T( U% M) u

2、安装步骤:

. x2 b5 `6 d h' Y A7 |4 \; d

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

; @" R6 |5 r- Q9 e: q

3、使用说明:

& T' P: S5 X- x1 T8 s) h

9 u+ J* W+ T7 m5 d

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

1 l8 G) u5 }' \, B9 b

三、PMD

& |5 q$ O8 }- C0 l; o) [

1、整体介绍:

9 C- j8 e( f6 e, ?+ S/ J

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

0 h" o1 P$ w1 H/ H x9 s/ W ! d( v+ }% F& a; {% O" V; T/ W 潜在的bug:空的try/catch/finally/switch语句1 e* L! f7 s3 u4 V 未使用的代码(Dead code):未使用的变量、参数、私有方法等" G$ ?4 E. O: V! [1 Y# N% H 可选的代码:String/StringBuffer的滥用 B6 a) j7 T8 d 复杂的表达式:不必须的if语句、可被while替代的for循环( W- Q( g/ p- ]2 Q" v4 n; E 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs6 m5 C+ ]; N! G- ?: g$ i 循环体创建新对象:尽量不要在循环体内实例化新对象5 a" ~; ^/ @) k* t2 y" ^ 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 ( \* G3 i2 i5 `2 { N" E ! X* Q% \6 w, S

2、安装步骤:

- T" l% j" V% Q# o# x/ f

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

, {7 b2 s( `% Q. }0 r- D6 K

3、使用说明:

+ p5 l* z7 c& N/ v! V( I 8 z/ y- A- r! B; {7 Z6 K% u# {0 S5 w 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html 7 j" \! n* A4 ]/ z9 _ T- R4 P' l0 B4 T

3.1、运行方式:

8 Q# H* p' N1 @4 S

(1)从Tools菜单中启动:

7 h" @: e* } f6 J) A5 M! a

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

% j9 w: W. `/ T) @' e/ k2 m4 C$ F 3 X% w* |2 y3 B) e0 i$ h/ L" K- G T, n Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。- a' X' w/ Q8 h6 e+ ] Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。7 @6 ~/ y0 n2 z ) l) E, G% W) e$ C- g

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

: Q5 P- _! \. a0 B

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

0 ^+ @/ d0 b' y$ @

3.2、运行结果:

. X4 F( D0 r7 L) e! S" p

6 N7 g0 G0 X/ [) I" P

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

9 V/ t6 X5 `6 b+ Z( V+ \8 U

3.3、配置检测规则:

6 D' Y) f1 C' d/ {# b% }* _

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

. a* n2 T; c) Y' w! a9 D1 P, S2 q' E# q

& w+ p& A8 n0 [% H

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

0 C, @& r1 u- J2 P+ r) H+ b" R

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

/ E; ]! s7 I7 [3 b1 Z2 j' M: G3 Q

. b# h# Q8 M; V" P r

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

3 K; H9 }7 U* j, }5 p/ [+ {9 g G

四、FindBugs:

4 y8 L: Q2 e) H [

1、整体介绍:

L& E3 S8 X! [" }8 H: O, }

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

% q- N+ E, d- L. w

2、安装步骤:

+ }+ f* y2 Z- |/ g/ a3 E1 j

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

4 ]$ ~$ r3 _. g' U/ Z. `+ a2 u

3、使用说明:

( o$ z! \) r5 c% W0 h8 I

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

1 K8 {( U! r: X' F7 P, R

6 Z) c) m, E1 S

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

4 h! T- q( D5 ?+ m- b; f' a3 v6 e

0 @2 e% ^0 p8 V) u+ p( F7 m

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

( Y, F$ `; D) n$ v1 s& } , Q: d, r8 i" ?& S: \: B

4、附:常见的错误信息

8 y: \* N) m$ B. s

4.1、Bad practice 代码坏习惯:

, x" ^0 W' _: O- X/ `5 \8 s7 o0 \1 a

图片

1 ^9 A4 L0 a* E$ S8 F8 B

4.2、Dodgy code 糟糕的代码:

* Q1 r# z$ }1 {1 b+ A 3 N7 d3 O3 k+ {/ i, h6 [

4.3、Internationalization 代码国际化相关:

! u% n ]* x0 p+ t# S- X

4.4、Performance 代码性能相关:

6 B0 n! a$ b( s$ q4 t. U : |7 Z: q- v j8 {; D

4.5、Experimental:

4 f8 a9 Y9 b/ V1 q& \% D! [9 V8 W; R; R8 f' ]' B, P; X4 n

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

, \" s0 W5 {' w; J0 D . e! p8 ]$ y3 Q% s6 x

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

( }1 A" o- w: i

4.8、Correctness 代码正确性相关:

+ P' D9 t0 ]& f+ n( I. E7 c% [/ n # s- N7 C6 B7 h' a

五、SonarLint:

9 e# u q+ O% L

1、整体介绍:

* n* w# E9 v) e6 X9 r

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

0 x u# G F) n0 Q7 n

2、安装步骤:

8 w1 s4 G( ^; |$ w# e( C

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

0 S) D4 s; Y( [6 r1 T5 c

3、使用说明:

( o# q4 q. U$ ]$ {. r$ F7 q0 Z; U. `5 X( f5 O9 w8 [/ f5 }: ^+ U

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

4 a' @0 j. b* k( [9 F% R. [ W3 m5 j" R7 w/ p( v

4、配置 SonarLint 服务端:

, D6 `+ x( u. X2 e

4.1、配置 Sonar 服务器:

8 d7 N& d4 R" ]4 {5 u# \

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

$ y( }, v+ a' {9 l0 {8 o4 U* T# m3 T2 J # o, m/ A6 n8 L3 T

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

7 k3 W+ d/ W/ c% H* _ . g/ C- u T7 U2 ?* y7 s6 f* T) H, r

4.2、具体 Sonar工程配置:

5 D5 |1 [ d3 _3 I' p o. {+ g6 u

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

# \# `8 ^% F' h. B6 A) H7 d* u - a5 M3 m' O! p7 d( v; n

4.3、使用 SonarLint 检查:

9 {3 u$ I) j7 ]2 ?. R

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

* u# O! e$ C; ^' P H1 d6 c ) C0 x9 ^- ] Z- j6 N

总结

) A% f8 Z& ]/ S- j2 o3 H8 ~7 G( p5 B8 t6 r" o 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 , m4 k. G% l+ ^$ C& Z 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: # {, t$ h+ b+ t1 W( ] PMD 自定义能力强,用来自定义项目BUG规则非常好用 / M# k& K& r# n+ ^ Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。& w1 W6 m z/ ]3 t" S SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 2 g5 m$ q q0 t9 F/ i7 G8 E. l/ }$ X/ t* V& y

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

1 Y) P( F3 N2 Q2 |3 w+ l3 b7 L- F3 d r

责任编辑:

' b8 L8 B1 t+ a7 A- d$ h5 z0 K* _ # j, E) g# i. Z9 _! f 8 ~. [5 e2 O6 N, P8 ?# G- H+ M8 R 6 l0 R7 H7 h5 O$ K' A) A, Q8 q
回复

举报 使用道具

相关帖子

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