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

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

[复制链接]
4 X& K# F4 s6 k# ^3 k) n* {

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

1 U( W; p, H, }# e4 o8 S0 N! W! y1 B6 I2 |0 w

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

@6 ^! S* B, m2 ]

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

. [* U# w T `2 x4 m$ ^' F

一、Alibaba Java Coding Guidelines

" Q9 Z9 b2 g0 S: u1 q3 `5 U7 P

1、整体介绍:

& G/ C3 J- d( ?8 N; e) J# {% w

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

; ]! J, Z# l" b A

阿里巴巴规约扫描包括:

- s" r% f: o- J4 ]; u( ` E% Z 6 N2 p* ^* a* q1 a OOP规约 1 p2 t3 H3 M/ H5 O3 @ h 并发处理$ O* |& F. ?$ i' T3 c' S r& N1 u 控制语句. @5 x5 L& D( q( Z t8 F M 命名规约1 M7 Q( U3 L$ N 常量定义' s7 b4 [/ \2 j9 X6 J 注释规范& \) Z k! q4 e9 d, m! q ) O+ z/ l2 v- y: R) h3 c5 y* `

2、安装步骤:

. I9 V1 H. F6 B$ T* S1 X

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

/ V5 B( m C5 [. I, i; D6 B

3、使用说明:

' `0 u6 o# Y q1 m- S- ^9 C

3.1、运行方式:

: F- R3 @5 T) V) B

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

6 v& Q& Y: h3 m0 {# Q

0 S1 J% d8 e/ I

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

: J1 [$ E. i! _9 j% T6 Y8 H

# c o3 u3 C% `$ X% j+ y. [

3.2、菜单功能:

& k1 X0 F% @( H0 ^7 W$ }! R) M# N/ f 编码规约扫描:开始扫描代码 - ~# B$ W! o+ V! q y2 @ 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能$ v- N8 Q/ z# @ 切换语言至英文:中英文切换 ' s, e1 |, B1 r3 b7 m& b 1 V$ i0 ?- ^ z5 |* M, v

3.3、运行结果:

; N' ^3 P/ z9 T2 X& R- T: g

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

" G# U; u. Z* G, d1 Q+ {

& h2 \( v: x3 Q0 |

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

3 I6 J$ \ X1 n. Q3 t0 n: [& _

7 L" w3 J) ~' R+ g1 q; }

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

7 n8 N$ }. l. g# V: ?# R! i

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

y# z0 U7 I4 \( [2 s7 Q0 l

2 a4 ~! X( y- y% ~9 \

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

L9 X( L* z) a K. a: T3 d9 {

5 F! I& _) ]6 y8 Y, }! ~. `/ e* }

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

5 @' v2 ^5 @# J$ V! ], f

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

; \- A; M$ {. e. R( S. r- _' E

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

1 F# M9 C3 M1 u# G

" L1 \) g9 W. Y1 u

3.4、工具栏功能介绍:

8 N9 G5 G' O& N2 |& b, N4 L

- ?( V3 ^- ?- g 6 k" r, t+ P3 o* ~0 S2 d+ ? Rerun Inspection:重新运行一次扫描: R. E$ l8 k4 r Close:关闭真个AJCG面板 1 k8 v0 j0 o. O1 R/ H8 \* t Expand All:展开结果的树状结构,整个结果是树状结构的。 & ~$ p' {" ]! @+ G3 x2 U C Collapse All:收起结果的树状结构7 G6 y1 a( y9 F3 a- L Go Pre Problem:选择上一个问题 2 P" ]& M* g% ^% q Go Next Problem:选择下一个问题 / j \9 y) ^: J" t: [ Help:帮助% ]0 D8 C7 x8 \: m: J& s9 [7 M Group by Serverity:(不知道如何描述)' G! k* a. s: {8 H Group by derectory:按目录分组/按类名分组间切换 $ O: B6 b/ i; H0 p Filter resoled items:过滤掉已经解决的项% n8 U9 \; h% k* R9 ]7 h Autoscroll to Source:自动滚动到源码5 }" \' o( N1 H! m1 z Export:导出,可以导出为XML和HTML两种格式 # t3 ^$ n G# m1 P Edit Settings:编辑设置 ( I2 k3 c, m" e5 ?0 f2 g, z7 b6 B* }

二、CheckStyle:

6 e- F9 C+ E0 _

1、整体介绍:

& K# T) [' V2 I |& B/ z" L

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

0 v! E) D1 z9 S$ t

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

; P8 R/ W; R5 d) P

2、安装步骤:

+ b5 V7 ]2 X. U9 `3 ~9 r

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

4 F0 d; G: a) p+ M- n9 M: X; J

3、使用说明:

) | `# B7 s. t* x

" O& l1 k$ @4 {

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

' ^& T% d- r. z3 C

三、PMD

2 m7 F6 e: l. y/ ~$ j T/ G

1、整体介绍:

' `$ c7 W3 N2 @4 ^( A3 p

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

; ~6 @" J# p6 e! J" h# R + @* u0 K+ [* |2 z 潜在的bug:空的try/catch/finally/switch语句' e. g% R+ \5 S0 x; N 未使用的代码(Dead code):未使用的变量、参数、私有方法等6 M5 V) u8 A5 |( _ q4 N 可选的代码:String/StringBuffer的滥用 4 T) I' d/ G. i: {5 E& u" D 复杂的表达式:不必须的if语句、可被while替代的for循环. m2 E2 z4 ]$ ~& }. c" s$ F1 s' Q- f 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs" x" q% E; E; R! ~) }% P' y 循环体创建新对象:尽量不要在循环体内实例化新对象+ K4 o7 j5 s: s2 L+ s. G7 C 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 & W+ N$ x1 G# h$ H } z- j3 {0 h, W7 h+ C, D

2、安装步骤:

! v7 z6 A6 a) B: s1 d

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

) ~ B( C: {: d2 a+ p) L6 M( N J8 J

3、使用说明:

1 E0 ~- U8 q J0 b; v 2 P# L3 u) i/ A2 D+ ?) w 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html9 W( G: A3 v& W, D. r / k7 i/ m; o% u6 \& m# [

3.1、运行方式:

1 D& b) n; H* W2 I9 K

(1)从Tools菜单中启动:

& j: n$ @ k5 w3 ^( e; {& |3 K( @

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

) X& r2 V/ A0 B' g3 G! ^ ' S( B" h( R0 C% w- k Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。# T' [! }4 t. q1 h& @ Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。1 y$ I: E7 W1 O% s) [. A# P ; a& Y& J3 X7 |2 A- g! i" V

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

+ f' z9 O: F5 M' O( f! B6 ^8 O, _' i8 m

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

" n5 F J+ c7 K/ R* E. E

3.2、运行结果:

; A- y& X5 M. {7 q! `

4 x2 a) A& p; y9 ^. ~! X

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

: d, p7 ]& t" X# z* O( E* b6 W; Y

3.3、配置检测规则:

9 E* A- E% f/ f; ]- u

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

/ k, ]" z' J+ I; V5 @" J0 x

9 \1 V! h7 u2 w; a' z

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

7 Z3 R n z& ?! O$ S2 x; d& B3 e g

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

% o9 K* A {$ ]& h. F: C

M/ W- N% J( @$ K

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

$ ?/ m w& P; M

四、FindBugs:

( `1 |7 a* ]3 M, J7 X+ ]8 w( A

1、整体介绍:

3 Y; d/ e; H1 n" k$ R

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

, S+ q0 s9 [1 |) b7 j! K

2、安装步骤:

9 Z6 P3 @+ C* [0 _( V P2 T7 X3 ~

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

! Q2 Y3 g* L: G6 u# @8 G* x

3、使用说明:

7 }$ ?) O' v3 j9 ]. }- j# }

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

% t0 y1 @7 q& F

/ z ~0 i4 R8 h/ u- W

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

) d: a4 J8 h ]5 F6 W4 O

@+ n1 `7 A4 w- W0 M

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

6 z6 U6 N9 ~4 ^ # a- [+ H* N) } ]2 N2 `( E

4、附:常见的错误信息

1 x! ]" Q& P1 p8 `" a0 R9 `

4.1、Bad practice 代码坏习惯:

) [5 z- B8 H5 K/ E( X' K) a$ V7 I, [6 V7 N# q

图片

& C1 A- C8 a( G

4.2、Dodgy code 糟糕的代码:

5 E; L4 T) I, Z* w6 e% \ 0 L" u/ V+ ~" r$ z9 @6 _

4.3、Internationalization 代码国际化相关:

+ F! r8 [+ n/ |

4.4、Performance 代码性能相关:

$ Z- D6 I# }3 [6 @& s + W' C+ x4 z0 N

4.5、Experimental:

: K6 j$ h* b. W/ Y9 G7 S* v+ g) @1 q4 N5 f

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

4 Z& V" E5 ^; ~$ f4 D( w- e9 v$ k$ Q& T' V9 ]' ]

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

, `5 I5 o( X% D1 H/ x# `3 J: i" m9 b

4.8、Correctness 代码正确性相关:

0 U; K1 q0 F! L* C! R1 q) h0 E 1 ]. r! R* d9 z) i) O

五、SonarLint:

: H+ C* G" L3 n+ X+ b0 ^2 G

1、整体介绍:

8 S% e) F" d7 i5 o

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

: y f. l. J8 a; i3 X8 T8 ? u8 u

2、安装步骤:

) N. E+ g$ j* G; G( t! g

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

2 C2 H' z, W# G

3、使用说明:

3 j+ b- p5 C0 s( G3 @" U2 m3 | ; x$ {2 p H- \* g- x3 }

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

) K! w/ r c+ {8 p5 A # o$ J" I' K9 i7 j

4、配置 SonarLint 服务端:

. K4 A0 f+ V2 b9 r- p

4.1、配置 Sonar 服务器:

3 M- H' y: u+ w0 c

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

/ s& y3 O0 }" `# c 3 J2 \5 I+ n/ I2 S9 U5 e9 p

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

: s" g/ h/ g+ F1 ~+ V' S 8 L+ S, \4 o- y! {7 h) M2 G( U

4.2、具体 Sonar工程配置:

. P# O/ [9 B' f

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

0 ^. q6 e0 Y' p. w8 ~3 r4 r4 |/ H! k3 C: `2 F9 I

4.3、使用 SonarLint 检查:

# ]) P3 y( [- N

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

# J8 w( o3 }% I! ?# l" N% T( _ - d, C' m- S8 m8 A

总结

' ? |7 n" U, L- ^, z" F) `# d 4 w; U! E; v. x3 J9 j# I 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了/ b! U+ D" z8 ?6 m; B) G+ i 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充:, \4 U7 f: B# X PMD 自定义能力强,用来自定义项目BUG规则非常好用 % J: g' X; m6 G1 x& g Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 : S! q* m/ c/ y$ I7 y! Y SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 5 H+ v2 p9 H+ t1 b' k - u4 ~# a/ p5 W9 \

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

% j4 c9 L# |5 p5 s, K4 k! k( [) S T

责任编辑:

0 c8 k5 ?* M. z% y( @ g # W8 h- x z8 j1 ~ ; `8 ]5 Y. P. I! s7 e7 P # B! ?' M6 `, F. {& N7 l2 K7 U* f7 ?3 P" w; ^
回复

举报 使用道具

相关帖子

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