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

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

[复制链接]
& @7 Q8 ?$ Z' v2 l' b; H

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

! D. T+ Z8 X; H9 A& s + n2 H7 m7 \. M& d, f- k! {( ~# z* D

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

, d( z, F3 W5 o0 x% a2 p

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

" g v' h( [9 n$ }/ n

一、Alibaba Java Coding Guidelines

h3 Q. a8 `2 _3 t' Y8 X) b+ ?0 \

1、整体介绍:

' f. a5 n2 i6 V! r. ]$ X' {1 M

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

' m) T# ~1 w, i

阿里巴巴规约扫描包括:

- x P, T8 p, w% {4 h3 r 0 J1 O9 c5 d( Q& `: L/ N0 t OOP规约; v; ?$ ~* }7 s k 并发处理 * r$ @8 F& B0 ]6 E1 ` 控制语句/ j3 g. L/ h3 E! J7 f' w 命名规约 / W/ h- L, c1 ?- _9 O# }4 { 常量定义1 W4 K$ `2 w& c) K/ D5 i" f$ @ 注释规范 : @2 H8 l! g+ @3 _+ c" B ( k7 H1 d+ L6 g4 {

2、安装步骤:

$ U" r5 z# _% s. W s

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

1 v( {* ^( L; d* i5 d5 N. t4 g% G

3、使用说明:

! z: u: X& z a

3.1、运行方式:

- W! u: `$ ^1 z$ ]

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

9 `( d1 [/ S. n, ]

. l" [1 d0 C h: K

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

+ D8 \# |4 q; Q d' b

; H: T5 i/ U9 n: `& E2 Z

3.2、菜单功能:

\1 T3 r! T- Z. t, T/ _9 B' ~3 ?' N0 N3 ^7 ]: p/ L* W2 a( K, l 编码规约扫描:开始扫描代码 3 x/ L9 F+ z% E: {8 I+ N: d6 p' o 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 3 u3 m9 {! ]* b# }& k( l 切换语言至英文:中英文切换+ K6 y' b! W; M' R0 w 5 J; b6 I4 s! M

3.3、运行结果:

/ O( M2 C8 @& }$ m- H C4 D+ ^

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

$ ^, b0 T+ d- w

3 x2 t. m2 t# H6 J

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

9 R6 l) N" C$ R3 e' ]4 `

6 Z R% B2 D6 h4 M: U$ p3 U

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

9 S8 }, ]/ [. h: V9 i

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

- ^; w) M, }: ], Q0 Y4 N

6 Y, w" l* J! r E+ d

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

+ W% ?% y3 B5 w, Y

# @; R7 f, @' `7 e' c( {# J

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

4 p, R$ ]/ T f: f- U5 v- a

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

, k$ u% _. b. r: c7 V* K( Q& }

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

$ A; W% o- J: \& j) b# u

! O+ B8 ^3 d* Q: h" h0 k2 |

3.4、工具栏功能介绍:

4 N- J: ~% x+ [

* g$ H" w! ]: @; T; U! Y9 ^ 7 U2 @" i. d& w/ x Rerun Inspection:重新运行一次扫描 . F7 Q( {. F2 |$ {' `' N) O Close:关闭真个AJCG面板* p; k9 K x3 C Expand All:展开结果的树状结构,整个结果是树状结构的。3 J4 r' f4 ~( ?& h6 r5 n Collapse All:收起结果的树状结构; P# z, V/ ^" M. X2 p) H' D9 | Go Pre Problem:选择上一个问题# n* C- y) h' L4 V' N- j; O, J; P Go Next Problem:选择下一个问题+ G+ M/ e! G- r Help:帮助: D; E. ]2 O% t/ h' m- q+ t Group by Serverity:(不知道如何描述) Y6 A9 z) k- F' V" O; G4 {) d; l Group by derectory:按目录分组/按类名分组间切换% `" z# t) l- r: s1 f$ R Filter resoled items:过滤掉已经解决的项. Q" W, Y0 \" M8 g- Z; E Autoscroll to Source:自动滚动到源码1 U1 `* ~3 T2 V, ]% T1 |2 x Export:导出,可以导出为XML和HTML两种格式, o( ?& e, ?, A9 q Edit Settings:编辑设置 # J2 z( L# s9 _. x5 J: W) ?+ k- x6 }, X M

二、CheckStyle:

1 k9 {. N# B# t

1、整体介绍:

# h" k6 s% ~' Q* v% L

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

( K( v6 o# M1 o1 ~) E, P

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

5 o8 d! n& p4 b7 H2 S" J: k

2、安装步骤:

0 H$ }! ^( a f/ `% v" M

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

/ q$ X3 H/ Y: ~! I6 ^. }" s5 H

3、使用说明:

+ c1 u- M; ]' d6 E _! a+ ]

2 F2 D0 H1 E1 v- v5 M

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

! ~; W M2 t& Y j4 Z

三、PMD

) A; k Q" ^$ ^% g: U) l* Y4 \

1、整体介绍:

' J* b1 P; B) _6 N$ Y/ c2 y4 q/ I

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

0 S4 b0 y. b/ x9 I! }1 \7 ] / r! N. ]3 t6 O$ U$ \" u 潜在的bug:空的try/catch/finally/switch语句 : @( Z9 A% J4 e5 v `% D f 未使用的代码(Dead code):未使用的变量、参数、私有方法等 3 v- }! K6 k8 Q* S H% k 可选的代码:String/StringBuffer的滥用 7 q0 x# o* E. U& C* x2 W! ~ 复杂的表达式:不必须的if语句、可被while替代的for循环 ' i6 h* i& m/ k' T7 } 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs4 g2 x, }. l# p6 A& z) h' I) y 循环体创建新对象:尽量不要在循环体内实例化新对象 " {3 @7 P/ T u% t, G* v; T% t 资源关闭:Connect,Result,Statement等使用之后确保关闭掉! {+ O: b% a* Y; E% G: c% w1 \ ' E* U) } ?( c6 ?. f+ u( E

2、安装步骤:

5 `, K6 r' h7 Y+ t6 ], z

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

) k1 Y4 y! L+ \6 U

3、使用说明:

' X! a! D# ] b% y. g5 L) ^- B9 A. M- J* I0 t 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html$ O4 H! E" i. f8 O) `+ A$ n $ w7 w5 @4 I3 l

3.1、运行方式:

3 ~6 d$ z3 W7 b- Y

(1)从Tools菜单中启动:

; j9 D) Z) |7 p; @! f2 v. U

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

* _8 B9 k5 o, W4 w8 u& L# C: } 6 S' N3 }% s7 N2 L7 Q2 ^7 K Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。. P \; f) X1 w" Z' O; R& y Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。9 ?# P6 ]* Y/ ^0 h5 d S ' I+ h X( {/ `$ M q: y+ p% c( m

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

4 K1 j$ t& V% r

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

* t4 M. f! D& K% [, T, o. x

3.2、运行结果:

( G" J* P& f; r" H, c/ a. W- t8 Y3 V

7 I" A1 H+ T' M1 a, I5 ]* ~

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

8 d/ L4 m0 D) ^- N+ b4 o! _

3.3、配置检测规则:

" o) g, I$ ^; t8 ^1 x/ m* _

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

6 f+ p/ x) W: P. M1 j

, C& j3 d3 {! R; u* ~! |

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

1 E- r) }# ~" e4 ~

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

0 \$ c. v: l1 V

# A4 k5 I4 x5 V' {

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

( x, `! o3 s' G: X% {3 V# L

四、FindBugs:

. ~2 U, y! ~- H; R# L

1、整体介绍:

: T1 o& V* f! O- J# R

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

+ G# h1 n9 ]4 V. z2 z

2、安装步骤:

% s$ }1 q* f% L) X, S# d

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

& B7 T( [; B2 \- I7 Q8 x& {& A! ]3 C

3、使用说明:

/ A d; A$ ~! }3 f8 e

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

- l! t) l; B; k! w( @

9 C7 S9 `0 e+ U8 ^2 C9 F" c" j& r

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

( ?' i( ~+ d! t, l+ J1 v& h

2 e# B' i0 q m. t, {* g" V

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

" k) ~3 [: G, \% k2 N 7 `9 m- I( p1 j) ]3 k

4、附:常见的错误信息

' w# C$ `& x! A* p* X, u( }0 d

4.1、Bad practice 代码坏习惯:

" J% k: E$ w, P m* V7 x, F' `( l

图片

$ I* F0 W) u0 y b

4.2、Dodgy code 糟糕的代码:

' b) ~: Y% a7 L* x X8 w 2 v6 l* V5 b$ R

4.3、Internationalization 代码国际化相关:

; n& G+ m% U+ B/ v: o u' s G$ ^

4.4、Performance 代码性能相关:

5 y. h1 k" U9 V ; G Q1 U9 y) [9 S+ B

4.5、Experimental:

0 i$ V' p& G4 W5 c% u' m! R3 ?( j9 W( d7 o: Y$ x- s8 ]

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

8 T* H) \4 o9 P; U) W5 f& @' [* O

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

( c# v& D3 @* C

4.8、Correctness 代码正确性相关:

: E o9 y" k# I- L! v- E 2 H. K1 E6 T7 Q* x- E0 u4 W! @

五、SonarLint:

Q/ S0 O+ v) X( N, [. g) _. ^

1、整体介绍:

/ d! `- q4 z& T

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

( ~- B4 D) E- [5 V

2、安装步骤:

( t5 } i! ^2 B1 Q3 @

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

: e+ t( [4 E5 E. |0 O

3、使用说明:

8 ^- r* ^; i% p0 e' J! I) L * d- N0 u, Q/ A, u

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

# `" [ d# b# ~" R6 r. K 4 Z/ Y; L% _. I9 S- d+ J/ v+ \

4、配置 SonarLint 服务端:

! d/ `0 u5 O! D

4.1、配置 Sonar 服务器:

) O% t3 g6 j( P

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

1 `# M* P8 P; y% P8 s3 q7 B : b6 R/ C/ o; \. K4 z8 @

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

2 z5 U7 @9 T" m5 w ' U7 R1 Y$ j" E4 i, E# x

4.2、具体 Sonar工程配置:

' a" z4 _/ J/ }6 k1 X- b

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

0 m% H* v7 l# m, o+ s8 { n* _ B! S' G

4.3、使用 SonarLint 检查:

5 x0 J" w1 K% N/ E" a# B

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

" e. l7 ^- |9 q 5 N4 a9 d/ P4 r

总结

) v, s& t; V( N 9 |' \+ \ s: W# m: ~* A 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了# ]! k3 }( n, q5 D 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: 9 u$ q$ g% p+ @' D. S- w" _# ~ PMD 自定义能力强,用来自定义项目BUG规则非常好用 ( y6 q* u5 z' j R: N- \3 N, S- r Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 . `( Y& X+ ? G2 W, q5 m SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 ( Q) f: H; s, a" O& P4 f; Z( \, R% ]+ r0 J, ^! Y5 N/ z" b5 Z

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

6 K. ~5 ]# n; D- ?4 j! e! _/ x2 ?: |9 U$ q

责任编辑:

4 C) L) S! } e* S' `7 d' f/ W; x: C7 {+ X# t9 L0 ~1 o4 x8 f" ` / F7 f2 e" k8 `) ]$ T. G* h 1 t! ^% M+ a+ y) ]; K7 ]: L! I, M0 v9 L
回复

举报 使用道具

相关帖子

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