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

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

[复制链接]
' P4 ^0 H9 f* a R

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

. d* F, M5 U5 R : a& U$ U9 Q: G' i

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

. |4 @- O0 {# \ t' Q

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

9 C. ~3 ]/ }- @! e. `

一、Alibaba Java Coding Guidelines

. Z" R$ r" u( I! F

1、整体介绍:

9 }. D9 `+ q) g/ ^+ L* J. y

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

- @5 o$ [: x. H& N" k& x

阿里巴巴规约扫描包括:

' m0 }6 f7 n& x6 Q! r: T* d # I: ]- D) y% v9 |5 c OOP规约2 b2 ^6 H" N ]$ V0 y 并发处理 0 A3 w8 _0 U9 Y; B9 a! A 控制语句/ A. B" g* X. J' O6 e2 ]8 q 命名规约* }0 [4 j% G' S6 N" T7 N1 x 常量定义0 Q$ q: g+ O9 Q 注释规范 9 } ]# v% F7 O8 _+ V( T5 J1 |, Y . p. t1 |& r7 s6 a! O7 v

2、安装步骤:

0 p$ Q$ ~- Y% j1 a9 W

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

( ~- j3 K$ x* R6 h8 ]7 n. d7 a- E7 r

3、使用说明:

9 P2 `( p9 N1 w4 }0 M) @

3.1、运行方式:

1 T) c- E' Y X' a7 a% c

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

v' i, S, I3 `2 S' e

7 V1 y! k/ A5 {) p5 ]3 m: T

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

( W/ b9 e0 \: w; b

3 ~8 \1 d, N2 L- @) U

3.2、菜单功能:

$ f. p+ E. j# A7 g" Z 0 K# H5 ~% u* G0 k# p 编码规约扫描:开始扫描代码* ]+ J9 ^& k( v+ e& n" X 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能7 u, }4 _! |0 n* M" Y3 J 切换语言至英文:中英文切换 1 ?+ H; `3 A, x# Y; ~; { 1 y& Z% ^; k9 n- S; a

3.3、运行结果:

' W. W# p V5 F+ b6 k, c$ d( V5 ~- o

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

6 N7 V- e: g: D/ g* S4 a# ?

7 T$ ?3 t5 l: X) Y

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

1 A" m! M7 h1 c2 Q

2 O& Y# L6 z* e# `0 T, ]! G

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

) }9 m* w6 g8 O) M# z$ y

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

& l. e9 E9 M" J" z/ D3 x8 X

/ r! M3 S$ Q# ~# Z

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

( C# U+ i1 D) E1 A" i, l9 E

9 E0 g# L) ^+ |5 A; F2 N

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

6 c: A6 O3 r! |% d$ W% ~

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

. W# L' b, S, g

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

3 x+ P1 C# C7 e$ D6 V. Z

4 p- N0 c8 \. h

3.4、工具栏功能介绍:

8 u' ~+ A; T7 g o8 h* n

, [8 g4 ]! Q( V4 C ' ]6 Q: S' u4 q5 Z; l0 Z Rerun Inspection:重新运行一次扫描 ( b2 v/ v& B. D" w% y" U! P Close:关闭真个AJCG面板 % x3 G7 W: F! Z$ h7 q. i Expand All:展开结果的树状结构,整个结果是树状结构的。 3 E, }* D3 z5 ?2 A) y Collapse All:收起结果的树状结构 * c: Y! l+ T1 j( H0 y Go Pre Problem:选择上一个问题 % b' `- S) ?: ?* R, H7 Z& A5 P Go Next Problem:选择下一个问题 8 D; ]: K! Y7 F Help:帮助 5 Z- M9 l2 b* r* g9 d$ } _ Group by Serverity:(不知道如何描述) * P' b( r, N8 j Group by derectory:按目录分组/按类名分组间切换 7 [) o+ q5 I: H7 ?1 ~ Filter resoled items:过滤掉已经解决的项8 N+ L$ |& _5 E Autoscroll to Source:自动滚动到源码 $ |" S5 ?/ b" ?- L Export:导出,可以导出为XML和HTML两种格式/ R3 l$ T) z ~# M/ D Edit Settings:编辑设置 $ I: i F6 s3 F2 h* x7 R4 O 6 z- u, G( A( p( Y4 o- [0 J {% `

二、CheckStyle:

5 J. ^8 e* @& G& c/ g

1、整体介绍:

) |, Q% K* v- x' J

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

1 C4 N" t* C+ w) i g1 X5 X5 v# D

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

4 T9 Z. |, Y9 e% _ t0 e3 A

2、安装步骤:

G7 L& e# l4 b# z# x* t" q) K: z

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

3 ?. d) v# y, S2 i9 z, \( A& S0 W

3、使用说明:

. F* H4 E5 Q$ E* [" `! j

& v2 r( g) N, N8 N4 O) H7 T. \

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

! W( L. s: [3 j9 @) u1 p

三、PMD

+ K; ^. }9 j4 Y$ E

1、整体介绍:

8 M* v0 t4 q0 T0 p1 h6 q+ r

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

! y* N5 g" x9 C J 0 j4 V. Y1 K7 }: D, `5 b k 潜在的bug:空的try/catch/finally/switch语句 4 @5 N0 V% l) z2 u) E6 j, O 未使用的代码(Dead code):未使用的变量、参数、私有方法等 9 r# ?9 C) h8 i( T 可选的代码:String/StringBuffer的滥用 ! I5 @* L* e+ ]; C) b% N 复杂的表达式:不必须的if语句、可被while替代的for循环; }, z* Y. |" q8 P) P1 T 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs, ~& t2 q8 d1 ~4 f: ` 循环体创建新对象:尽量不要在循环体内实例化新对象 & b( w: l5 I' F! e# d 资源关闭:Connect,Result,Statement等使用之后确保关闭掉5 A; @1 x, T7 h9 c) F/ u; W - E9 F* Y! i9 ~$ N

2、安装步骤:

7 w# f$ U5 s) Q" d7 u

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

6 w) s. A0 {" R" M

3、使用说明:

8 e5 k+ z6 q; `, h# S% t! ^ ; O7 d" R/ T" ~% v: J( y 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html4 Q9 T# C; d( ^( X# E8 p1 ]" j " W# p% h5 z; n3 f P

3.1、运行方式:

4 e& Z2 \ D: T4 l+ Y2 I$ ]

(1)从Tools菜单中启动:

0 ?6 j9 f5 N: _1 V5 J3 K1 z# K$ G

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

3 l m9 w8 O; @! k' N * c$ y2 Y/ Y" B! c- s, l) }" H O* q Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 }/ e1 I: J# {7 L Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。 0 O7 y$ A$ j' J1 {: P2 c; A 2 F" N/ B3 G4 B: R- s7 ^0 m

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

$ y5 G! F, w/ u

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

$ N* B* ~2 Z& z8 L2 N

3.2、运行结果:

1 i. U& X0 O3 ]* |

6 ^+ j- R3 J( L! f' L

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

; ?2 h2 g8 N; T9 h' j

3.3、配置检测规则:

# A; T' i' ^' {: c1 k( Z3 A

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

% j# T" r5 k( V0 d7 }4 |( J* t

3 ~0 k, R7 \0 l! r

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

3 J' p: [. i4 D

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

5 Z! v7 g+ D( r2 B1 |; U5 @

8 g' C; X4 u. J/ B" C

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

: K. ^/ O. P! x/ Z! B4 ^4 [+ m

四、FindBugs:

( O; K3 f4 {7 x# N! i* @

1、整体介绍:

% S) X" o3 S7 D! {: m! C, d

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

1 ^, i% O5 V0 p* G) A4 x4 T9 _

2、安装步骤:

) z/ o- r( w, L

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

4 x) ^9 j6 z4 ?) _% J

3、使用说明:

& n& G5 C9 C% W3 M5 X: o

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

* g. ~( c' _2 Q+ D" c/ }

7 V# r- z) |, N& q) T

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

( @' R+ K$ [- p. d2 K1 A. C

- W1 R" Q- x2 O3 L. y+ i

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

/ [: N( W/ Z+ Z% R% D ( V+ D: ], N4 L! I- ~9 s) k

4、附:常见的错误信息

" r8 {- M4 B2 u' Z

4.1、Bad practice 代码坏习惯:

0 q: p3 @7 U3 n5 l- O0 f. @ ( ~9 \0 c; D) P. W

图片

9 i# i! G0 \3 A9 W4 T

4.2、Dodgy code 糟糕的代码:

V: ~1 L* F4 V/ }* p: O' ~! z; X9 h$ E- D; s0 @

4.3、Internationalization 代码国际化相关:

# M1 E4 w, P" S/ ~4 V- o

4.4、Performance 代码性能相关:

% A. I; s2 b5 L$ l3 s( i 4 s Z$ _4 t5 e6 Q! r; V6 s7 ^2 k

4.5、Experimental:

$ R: i# l6 I( H5 Q. F$ L* s! U# M- f" s& B1 {4 a/ W3 ^7 U" A" P' B

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

2 G5 ?: H0 ?6 a& N+ s' K0 @& m $ V; r* `6 G. Q4 e; b, B

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

- r/ p1 f, f$ d1 [/ V8 ^; ?

4.8、Correctness 代码正确性相关:

! s0 ?: ^/ ^3 Y * I9 @: g& g" L8 l- [+ {- D7 }5 j

五、SonarLint:

' Z( S6 z3 u2 U

1、整体介绍:

( v1 ]$ ^0 _1 x: c U

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

* b+ A( G5 u* f }- f$ L- A

2、安装步骤:

* }4 [) g: }, F

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

6 `* D$ ^4 G1 S

3、使用说明:

2 `% q) ] ?8 p" c + V) h( n1 a& e" G: d

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

4 v/ ], p8 h+ D% T: T4 @ 6 g4 F; K# q3 k; j6 e3 l0 ]

4、配置 SonarLint 服务端:

3 Z/ Z$ C x4 f( q. W( A

4.1、配置 Sonar 服务器:

6 M1 A, e) g1 q( t! i

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

6 ?0 M0 R$ z* h0 b% r) I* _* G 3 g- H% |" t, l. x2 U

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

- Q! T X2 w( i2 _! Z3 j3 N: a$ O, d! ]" B% b- \+ t" F

4.2、具体 Sonar工程配置:

! W6 m+ [# {: o8 A: u3 b! y

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

# i. ]7 `2 z/ ~& j4 D, c& i. w3 v9 L2 L

4.3、使用 SonarLint 检查:

4 a: Q n& w8 ^ J w, m G) G& f

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

# {5 S+ h4 `) k" T/ c" R5 q 3 S, L) w! e* K2 M8 w2 e1 G

总结

2 K1 M' m+ ?$ n# R" J; t9 q 5 j6 K2 b3 _) `5 K/ W 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了, O- Z2 a) r/ n" `- b 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充:; A5 J K" \/ {4 m" u3 ` PMD 自定义能力强,用来自定义项目BUG规则非常好用 ' u" r w$ e! S' m% p! N) K9 z Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 / D& u2 q9 \) v SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景3 d" G. [3 X5 i# W % {- E# q) J6 J" u

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

8 M6 A- U$ H" z& K* ^' p) J) q% I , S0 X/ g, M9 e" C: q6 R8 X- C

责任编辑:

0 c* Z* o* A/ l. @- @ ; t/ H4 W9 R4 i+ B% `! S 9 c- o" X$ b. c, k0 q/ {/ m! @4 r; k * y" r0 Z* r/ W6 n. a
回复

举报 使用道具

相关帖子

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