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

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

[复制链接]
4 f# d5 s$ z1 ` V8 @8 I+ c/ ]

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

1 s0 o# J6 S! X : i* q" v& \4 _" R f

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

7 X- q) ]$ D; E, R

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

5 E+ ~( k0 z+ q/ H" f; p7 s" g/ {

一、Alibaba Java Coding Guidelines

1 O7 n9 {1 ]5 ?5 z% c5 S7 f

1、整体介绍:

& t) k( r+ f8 [. v g7 L

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

) S3 t, h4 f# J3 d

阿里巴巴规约扫描包括:

% T1 F4 r! U! p" j6 F6 M$ O * P2 b% R0 s2 C/ I' p& D" w5 M4 N0 x OOP规约& N5 y! E9 Y5 r 并发处理 $ Q' a! t# H8 C" K7 a- c& ? 控制语句 + f( N! P7 i# X! N6 a4 v 命名规约 ( X( v2 r5 a* d5 [, s 常量定义2 ]0 e7 R1 X0 j6 } 注释规范" ], Q* `& ?$ A& m# g: Q5 F- | $ G6 J1 o1 A* e8 k/ V& Q6 [5 P/ A& s

2、安装步骤:

$ Y- P& \% I% K. k/ P% W8 V0 o

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

+ S8 |0 _) ^" n3 ?1 U; E1 ^

3、使用说明:

9 _6 _& u& X/ g, [- J

3.1、运行方式:

: ]" O$ y" [3 y5 \

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

$ C& l, T, [9 h P. }

, g" s5 V7 r3 Y& P, k2 {

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

0 g. G0 y; a- f

( b% `) a* K' L7 b/ A' \4 y

3.2、菜单功能:

5 Q2 B P/ q' s$ {: `9 j 1 T. W6 Z, @; N1 G1 y+ n! Z: O. T 编码规约扫描:开始扫描代码0 @# v2 o0 F4 v Q! h9 a/ H 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 , D) J [" H& \0 B7 s# H 切换语言至英文:中英文切换% s: ?- K# v$ R* u- j, E# c* H! {- ` ( X4 v9 P( [$ v8 H6 Q

3.3、运行结果:

$ K. K, F. w- `% u+ d

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

6 f7 G' q3 [% {1 T+ A; b3 L

( h6 {( n7 p+ p9 c

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

. k) g- w9 ?3 F8 e$ Q7 H. u

) s4 h: ~3 n& o7 L

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

# W, I- w* S- `5 U0 h

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

, X+ l) |4 d/ p* {1 U" o) e" j

; ?% [+ ?5 M! _

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

$ d k, t* C T4 A5 y: E

( X* } [/ a$ ~' K# r( p

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

7 x9 U7 v- `/ H& ]/ G/ b5 Q

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

- ]6 p8 V6 q& V d3 [+ d

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

) V9 J- k+ U! \7 @2 E/ n" S) A

# k+ P6 D; U. l4 f8 I9 k2 u

3.4、工具栏功能介绍:

$ ?" n) A D$ z- Z: N" B

8 S3 m6 R. m/ s' N0 ?9 S0 Y( o1 w ; I8 R k& O& R* [; c# @: Y" N Rerun Inspection:重新运行一次扫描/ p( V" O4 c0 b/ k) S2 i Close:关闭真个AJCG面板! g5 x/ X4 |2 U8 }3 s0 q Expand All:展开结果的树状结构,整个结果是树状结构的。 8 A0 Y1 y. {( m" H Collapse All:收起结果的树状结构$ J& ]) R" I( s n+ j2 g5 U Go Pre Problem:选择上一个问题 . T# f1 |7 W2 h1 _& k Go Next Problem:选择下一个问题 4 s+ i+ l R1 Y! c; ?+ o Help:帮助 F' D7 s3 w; Z& I, u8 V4 W Group by Serverity:(不知道如何描述) 5 F9 J2 I+ ]- e1 M7 b$ d2 y; g Group by derectory:按目录分组/按类名分组间切换4 D( U0 A0 G% Y; L Filter resoled items:过滤掉已经解决的项0 g- O9 v0 W# K( O' b4 v Autoscroll to Source:自动滚动到源码/ A+ `6 d- R0 ?* Q8 x0 X' a Export:导出,可以导出为XML和HTML两种格式5 Z8 Y# [+ O1 B: h Edit Settings:编辑设置9 [+ D. k# F; D7 w9 \% r+ N1 Z n : L! L5 u0 P5 S6 ?. c$ F0 E/ \) u8 m

二、CheckStyle:

1 l! M/ l' G* m2 y3 s

1、整体介绍:

6 N5 |" Y3 S% W- `1 S

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

1 U8 X5 W6 n9 ^7 y

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

3 D% r: N0 c$ b+ L. ?# g

2、安装步骤:

5 n& H# R( k9 Z. n) B2 A2 g

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

' G# Z, H/ _" d0 y4 }+ s9 d8 M

3、使用说明:

0 E; ~5 f$ a: J3 ]+ {

$ D! Y' h- {. u) z+ h5 b

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

+ M6 m7 w% H3 E: V; \- A% T l

三、PMD

6 n: O4 Q' B( G

1、整体介绍:

) F* o3 g4 n x* q0 V7 n

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

# G% B. y E$ t : r* Z" R: \" k5 }5 h4 T- u1 q 潜在的bug:空的try/catch/finally/switch语句, x! N: h1 t. @- \/ z% }: |" J8 A 未使用的代码(Dead code):未使用的变量、参数、私有方法等 & k U' F4 z3 E 可选的代码:String/StringBuffer的滥用 8 g9 Z5 J" X* I8 A s( e" Y- h 复杂的表达式:不必须的if语句、可被while替代的for循环( ~; W ~2 f' M' T 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs U' w& k. s C$ u& e* b; d' @ 循环体创建新对象:尽量不要在循环体内实例化新对象2 a" D$ ^/ A" N8 R. `& h4 J L 资源关闭:Connect,Result,Statement等使用之后确保关闭掉) Z. M* Z* c' O* w7 c* c$ X$ t# g 9 ~/ Z$ I, \2 y0 l! p" ^

2、安装步骤:

3 R1 Q5 W4 z- o) r1 Q r5 p# ?

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

. f. ]2 r0 P* {- i; V' t

3、使用说明:

. v; e$ m4 R3 D 7 }) r* s' |8 j8 `! A 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html1 J/ ?/ ?% M/ ^# Z3 e% N/ L9 Y$ y/ @6 W ( h! l k! `+ H8 N, T- n

3.1、运行方式:

+ R: ~! T& w6 X% }4 d3 K

(1)从Tools菜单中启动:

7 y4 N$ T0 T$ i2 g) i0 [2 }

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

" ?& h2 n, y3 A' y4 ~2 G3 m/ f( k & w1 y) v% L) S1 y; ?2 N Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。6 d' y/ G; u% B5 t# s; f Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。3 a( }5 ^+ c" d1 R) a U- ~ 0 S" \) y6 g5 v% B

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

+ I8 u% o/ Y" a: V( L7 e

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

. w {9 g" ?* e0 i

3.2、运行结果:

& R8 x7 b; Y2 M

! B' O/ D% a) o

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

0 h3 C% {& i5 F! J5 Z: N+ e# i4 V% M

3.3、配置检测规则:

2 i; Z) R/ j" N; e9 S7 {

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

6 g( t" T# b0 c" ~4 ^, _

h* r+ J* i& }) |9 z

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

* m8 Z& G" V, e5 |) [, y$ E; H7 N

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

1 o0 Y: }9 _2 ?. ?8 e! V

, q* u4 f$ h" l" v- x S

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

9 R6 U0 t% _( X" Q9 ~; Z, M

四、FindBugs:

" ]; [$ j& _0 z

1、整体介绍:

! i3 W. [( t/ [6 i* M

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

" o8 L& ^! Z# O) C# F7 Y

2、安装步骤:

: e' n$ I4 G2 c2 R6 L$ I5 l

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

( J; t1 ]7 s7 W* L; y0 L& Y, b7 A

3、使用说明:

) \8 L: S9 p# ~

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

. ~- j; R( Z& L( l- N

/ G# x l8 w& N/ a0 i0 F

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

3 `$ U' }/ U7 k* S0 j, x3 K

* L4 M, d+ @2 c8 O" y0 N/ Y- c8 `; r8 }

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

G! |, ~7 J8 {/ n2 j* P - ~9 i% X4 K' m% E' d& u, h9 o

4、附:常见的错误信息

/ V' Y9 M: S+ L0 Q* e( z4 R

4.1、Bad practice 代码坏习惯:

2 Z7 ~0 I1 R# J5 a% A6 m, X) E# B0 @ 7 R9 F/ |* f7 A+ D- w2 |9 S: v' d

图片

% e3 |4 V$ E/ ~2 p" O- K/ R3 o

4.2、Dodgy code 糟糕的代码:

+ `! p, S7 T7 |% Z1 \1 f* k- E, a0 F- O) R; s; i( X

4.3、Internationalization 代码国际化相关:

: c1 B' ]$ g% a6 D; V' J4 [

4.4、Performance 代码性能相关:

+ o7 K. c/ l4 S9 h " _4 m* X- P" L7 J. S% b; D

4.5、Experimental:

0 T) V9 a) t; z : Z5 ?6 Z+ p- b `, e2 `

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

; w) u( C" L$ k3 O4 x1 _# ?9 n' b/ Y ) f$ K% G4 f1 H% A0 N! `4 T

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

1 c& J+ z- K; p7 s7 |, ^7 N, P: \; O* m

4.8、Correctness 代码正确性相关:

1 E/ v& F/ H/ s& O o0 ^2 f5 D% `4 N3 L) i9 t# j6 D

五、SonarLint:

: {/ t& p- M( d I& }4 Z( p

1、整体介绍:

# n- `' d' f/ J: T

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

) Y1 U7 |5 s* S- Q

2、安装步骤:

7 ^3 m$ c4 X q8 d' U, _

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

; w( Y+ a @7 p* C% V3 {( l

3、使用说明:

8 F8 F% f6 ~6 E3 Q : Y! V+ {5 x P8 U, V: D; g6 l

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

; b! d; k% E1 f) r+ R! N+ h8 S1 E5 X7 e4 M3 Y. {2 i. r3 I

4、配置 SonarLint 服务端:

+ s2 D" G" Q$ L1 A+ Z) u

4.1、配置 Sonar 服务器:

. M# b% u' V9 O2 [% G0 h

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

4 q) Z! Z& i" U `# W" m; B; A4 r) x8 J

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

( o0 m+ C4 T8 g$ e: d $ \0 X" v: ?& L- Q; \. k

4.2、具体 Sonar工程配置:

3 `9 H9 c! j0 g& j% A- V

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

9 n1 ?) t* E. N: l0 M! F/ m: G ; }; @! E; ^1 y

4.3、使用 SonarLint 检查:

% U0 r* O7 q1 ^! A

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

, T! I$ z4 y1 D8 l) j: T2 ^4 M! k' R) P

总结

# N2 v v7 L* Q3 l& K7 P2 n# t + t0 X3 ~/ q8 R9 l# f i- Z 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 9 Z B* F# _. R! J0 c; G 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: 2 d" A: d) K* a3 S8 c$ J9 c2 M PMD 自定义能力强,用来自定义项目BUG规则非常好用 0 ^9 p f+ r( Y- J2 D! z Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。, B" h$ p' D" E' O, R8 M6 V- _3 m SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景& k, h$ r" a3 A4 _ ! o# P4 e9 G, @$ F% s0 M) }

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

( U: Q' W9 i* @ ; b& t2 l2 N/ }& ]0 ?5 V# x* ?

责任编辑:

- f ]$ b8 E- s2 {8 r8 l5 M/ L B2 N9 ^ 6 f9 t5 g z- f: }& [% `% j , t# ^) J; E9 F- t$ y6 d 1 ]( u; B2 z1 J, w$ ?6 S
回复

举报 使用道具

相关帖子

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