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

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

[复制链接]
+ {# V7 Z/ q' D. ?

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

% [% @+ P" e/ s* O 0 F7 D7 w& `% K8 |. G/ i) H m% M

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

7 G8 Q! n/ G9 O# }& J* \

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

: p) b7 T! x! ~. E8 I* P3 J& A

一、Alibaba Java Coding Guidelines

" L- H. j* B' b- X- h

1、整体介绍:

7 h5 W" J$ a: [+ ^# K( \ }8 Y% W

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

4 L2 B5 v0 [& q% ~$ z) U

阿里巴巴规约扫描包括:

. D3 t2 x$ s% ]1 B5 m ; j9 x% m* P0 p OOP规约 9 e, j! G5 q3 O) Z- r$ X; V# U" p 并发处理; b8 \. r1 a- j, ]0 \: e 控制语句 * f8 n1 y- \4 Z0 O/ j# W0 K 命名规约 " E$ s# q3 ?* \# d6 y 常量定义 - }: W4 O6 g% d# u, \6 T* g 注释规范 : u: Y5 M8 p. h2 e2 H2 U& o . I3 W, f! B) ~7 T

2、安装步骤:

% z- L; L; r" p4 @% x( m2 i; g# G

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

( O8 R+ e3 N: O: A

3、使用说明:

0 y9 H1 y$ ^& Q5 i+ V, O. w

3.1、运行方式:

3 I* @' x% l3 H( v8 y7 w! x

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

0 B R7 o! g9 k, e0 {5 r

) [ E+ H. x* _

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

' f3 D3 O1 V. C) D$ d. J

# T' ?) I5 U9 i6 K

3.2、菜单功能:

# \7 T3 S/ I4 K' Q+ I8 V 5 M* `7 e: w# H. M 编码规约扫描:开始扫描代码. q- K- Q4 q8 V2 n 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 & d" m9 X+ u1 g4 ^ 切换语言至英文:中英文切换" j3 [) Q5 b) T: _ - {$ K G0 n, T- w3 y1 @- ^

3.3、运行结果:

1 n& [2 n6 @' c( T. |8 A3 t

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

+ `+ ?) B3 y1 ~" Z

. B! m* Q3 i* l

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

( _" B% @" u _9 |

2 p0 [" S1 h" p( F& r

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

, j2 j! M4 h' Z5 i- C

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

3 M$ L# c9 u$ `, g$ N7 p1 A

9 E% |$ `8 H& d& D0 x5 {

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

$ `) E# K* L, L: [( G* r

) I' y5 P0 _; o- ^% d" ^

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

3 T T3 i* y# Z; R5 o8 h" z9 m

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

& u$ a- `: _7 [+ \3 N

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

g6 a5 o+ V, R

8 w, g2 X$ L0 s8 q) O

3.4、工具栏功能介绍:

1 e9 t4 J. J+ P% B4 m

4 H' q' c- |% ^5 j6 C! O 5 C. d b; u! l! |9 {# G, [. ~6 N; F" Q& Y Rerun Inspection:重新运行一次扫描 2 F4 U# ]5 _' B! S' [! O/ k Close:关闭真个AJCG面板 - Z" i m4 L6 |+ {9 m0 R Expand All:展开结果的树状结构,整个结果是树状结构的。 j6 F0 f0 s8 N. S' P) U Collapse All:收起结果的树状结构 ) o9 I" L: b9 Y" h/ r5 r Go Pre Problem:选择上一个问题* ~" n- u' G. W( P4 q5 M2 t$ ] Go Next Problem:选择下一个问题1 O* s2 v5 w+ ]3 L Help:帮助 ' d1 V# C& { X A Group by Serverity:(不知道如何描述)3 l, Y5 t6 H$ j/ Z3 j& X Group by derectory:按目录分组/按类名分组间切换 ; r5 ~! L0 ]. e5 f2 y Filter resoled items:过滤掉已经解决的项 5 d, i [5 T, K# G9 E% f Autoscroll to Source:自动滚动到源码 $ a1 k. X3 w# D; V7 m* G Export:导出,可以导出为XML和HTML两种格式/ t$ {) O c3 k& r8 y Edit Settings:编辑设置( L+ B$ u2 g% x! M1 ^# `7 P % s7 x' S+ s, u+ h

二、CheckStyle:

0 C; d; j* ^: m3 H4 P9 ^% W: V) W

1、整体介绍:

+ L6 K' y' _5 [& \) |+ q

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

" m8 s& `+ @* Y8 K

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

% v% l0 Q' `5 A6 E

2、安装步骤:

8 B+ B/ {; F! Y1 l. W

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

# j8 ^; F2 k$ n s! \% [

3、使用说明:

O- |5 k2 _! D# {6 \, K

; j7 }% J7 t6 j) w2 ~, N4 z/ f; v

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

6 W) s, T; k& H2 F: q

三、PMD

. n6 W* A, C2 u2 \, F

1、整体介绍:

1 s( R; r" }7 u% E# \+ T

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

& L# `0 I/ F. m * E: @7 \1 V0 E 潜在的bug:空的try/catch/finally/switch语句 8 ?- d# `+ `4 d y+ M 未使用的代码(Dead code):未使用的变量、参数、私有方法等 3 Z! K3 v- R% r8 C) G; J 可选的代码:String/StringBuffer的滥用 ) S9 D3 w1 Y- Y# ~% h3 ] 复杂的表达式:不必须的if语句、可被while替代的for循环5 e% ~) M+ L" H0 ^ 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs1 z/ m& g7 k1 C# B5 x/ k) F* D4 c 循环体创建新对象:尽量不要在循环体内实例化新对象 ; M( W- ?6 u1 z3 A: y! o* ?; x 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 ( O$ v4 `& {- G! l/ s % n* m- ^1 Z1 [7 \: e

2、安装步骤:

+ k. v& X6 r0 c5 Y {

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

u' M2 P {7 R4 |, o2 B

3、使用说明:

* ? @ A( e* q, L. e 1 B' @6 Q1 J' N s; E# A 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html5 M- K' m4 S6 a" D6 [ 7 e: n7 L* p3 ?1 [

3.1、运行方式:

4 U' y4 D& K1 }5 F4 p* a

(1)从Tools菜单中启动:

* ~, j: @7 q y

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

$ z, ^# R5 f n* k* K# g 2 g: B: J$ _0 V( X Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 - {9 A: c' K0 w9 s/ b; u Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。4 @( K P, E+ E0 e/ w( C ' t! C g) I) T& _- _' L# L

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

5 H7 K9 o% V' c6 F% d

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

" p+ j6 z4 R9 r5 c, T

3.2、运行结果:

( V* `% b( ~0 Y; `% q P+ }

/ z! D B) s) \, P0 [. v

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

* g' e0 H0 U% A

3.3、配置检测规则:

) y) L j# n& B, ^

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

& ]8 u8 m$ X! c3 D' \8 Y

, o; c( I' d1 Z# A* v

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

% V7 k- W' |% q0 E5 k4 m

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

) W& b" B* E+ J' d/ r) |

9 s9 k- L- ?0 S5 _- j U0 d

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

% V, I1 B" J% X1 t* T* S

四、FindBugs:

: w( L8 L& e8 W; }7 a

1、整体介绍:

" ` p8 l' \1 b0 D5 B

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

9 @# p1 i- U. b5 f5 o+ R! D

2、安装步骤:

; M" x2 o7 T( H8 W* O& c2 o0 R

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

4 t/ |" r; h8 g: \

3、使用说明:

2 y" e$ @6 L9 t. I

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

) n/ Q1 I8 E4 X

4 }, q, Z* i( `# m6 O& v

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

+ w( v0 O4 N b' z( ?

+ A, F. N8 s# i. I! G j7 X

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

4 B- a7 j4 ]- B& f 7 N: z8 s6 f, [3 I+ U

4、附:常见的错误信息

; T' H: P$ x" n8 s& G* k

4.1、Bad practice 代码坏习惯:

7 H4 z$ g) a R8 {8 c1 X; E8 \ - q2 p- a0 S0 r# z% c9 ]

图片

* c m. C( t/ n9 W

4.2、Dodgy code 糟糕的代码:

& G' [. M o" D$ R L3 j" H) |' P* G7 @

4.3、Internationalization 代码国际化相关:

# P6 ?0 v3 R+ V4 b9 k6 ^. D

4.4、Performance 代码性能相关:

$ }* R: M/ l1 B8 e+ s& N + C% r5 Y! @) F1 j+ _

4.5、Experimental:

: K' {! z' ^' ^+ H$ n; c Y* ?1 U3 W' s- U) Q/ h

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

3 O5 k/ Z# h! ^& w, x - o3 `8 H, x, v$ r* d1 x

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

# @+ i4 Q B6 V, S) L$ f

4.8、Correctness 代码正确性相关:

$ z1 R$ [1 p8 m/ B& g( Q ~/ l8 l) ^3 W! f5 O

五、SonarLint:

! P+ x6 v1 |/ b( C/ ~: H

1、整体介绍:

0 j5 _, `7 P* B7 h. q3 J3 i

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

0 H( W/ [6 S0 a) l e4 } V

2、安装步骤:

7 k* v2 I; b- z: G+ d

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

. L0 U. G3 l# f

3、使用说明:

: E5 f' n7 D* Q* @% u& z + @- {2 d/ R, t3 Q

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

# U# h6 z4 j* R7 t; D2 s9 p L 8 j5 \; Q* h( u8 m% p7 B

4、配置 SonarLint 服务端:

( I7 G' j0 ~; y/ `. O

4.1、配置 Sonar 服务器:

" B9 k. W- Y& A8 G

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

$ |! u) ^$ J K/ t3 g# S3 W $ _4 D7 _/ i8 n' c0 G

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

+ \$ B. K! Y% @( r5 E3 j6 N. g9 e! S1 ~$ ^0 m' v; ]" N

4.2、具体 Sonar工程配置:

) A7 B' p( ]* P% n

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

0 c: s$ h6 T% l+ i% t0 I# V# ~- A, Z5 f$ p+ a: A% {

4.3、使用 SonarLint 检查:

+ Q7 T5 ~7 u4 r+ b; q

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

) d( S5 g a+ I& w& k ' m2 [7 A9 r- x! H$ S2 [

总结

+ H7 j5 c7 n) s: d5 W3 f ( x( U; t4 L- i# i# d4 r1 t6 ? 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 0 e1 I4 I7 P2 W! ` 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充:5 F) k1 Z. h& \+ u5 n) R |5 K, q PMD 自定义能力强,用来自定义项目BUG规则非常好用$ w9 W4 l# \$ L s5 V Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 ) B) _! m8 r+ W3 o3 }/ N SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 * D% R+ L4 m' o9 l5 N& \( { 9 `! K3 W& s2 X

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

, K( ?. [- A! ?' E" d8 W2 h& e& h I& x1 O

责任编辑:

0 ~. I( m3 R* H1 s; \" C " Q, a4 X, J: ~2 n0 |. H! `2 e8 l # Z6 _( D$ L5 j& Q I ' m1 w6 K, e* |, D# \
回复

举报 使用道具

相关帖子

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