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

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

[复制链接]
7 O. k$ {. e- x2 t( O/ T$ m9 ^

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

! |; j2 p" c! c0 y. q / Z. m8 ]0 v$ I

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

5 J- o- H5 @. r7 @8 G

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

; g2 V a0 Z; c

一、Alibaba Java Coding Guidelines

3 u( Y4 T5 V a& T& i# T" W* l

1、整体介绍:

, p" T+ x u0 t- T0 f* N6 p9 l8 e

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

7 Y* r4 q' x2 @, Z7 K5 |2 X8 s

阿里巴巴规约扫描包括:

( W( T1 |- ^( K6 O7 E: m# Z* T6 \$ R9 y' F( p" e& ? OOP规约6 z8 h8 ?8 X2 l4 z3 ^ 并发处理/ k, ]$ c5 T3 X0 w% x: E s4 ^6 L 控制语句 5 J3 g5 B2 v" m3 V) c3 ` 命名规约- b- A) z! u- ~0 i3 `8 f/ I 常量定义 4 f# W9 t: w. g( ~; A: Q& Y0 q, }* q 注释规范 # A$ m1 ] @) R' S8 W 1 N5 P" N0 _% `! p; N7 l% l

2、安装步骤:

- e2 c7 `, W* q9 j& H0 N

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

3 Z! i* W$ N# \% `+ l4 V

3、使用说明:

% l9 [& b' N, k0 I, d/ _

3.1、运行方式:

H; f5 U* i! c1 U' w$ t: e7 @& M( o

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

( H* ~* Z7 L+ \2 z' m" g! w5 A8 C2 h$ C

3 H0 j. n! z' ~: Q2 V

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

0 L- C$ d+ e( |* Q4 r8 z

& {" m8 ^" s- j

3.2、菜单功能:

7 X8 b; R* F, Z2 z( i. N1 H6 u& p6 a0 [* s: p 编码规约扫描:开始扫描代码 ! X4 E. B/ h- a( c. `: z/ y5 B 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 & l$ s8 r- I% M+ i8 L4 W. n 切换语言至英文:中英文切换. j# I! ^. Q4 }& @7 C ' Z+ L) |) e2 ~* b

3.3、运行结果:

8 U* q6 q' ]: e; z4 j

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

, c/ l6 h& r* x8 {

& j6 k! z0 ~& `! @8 ]% W

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

7 I) W8 g% y: p; f4 v

* D8 w4 b( C( |5 C0 N6 o7 B

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

7 Q5 x$ W" ^; H# O1 d9 S1 |/ q2 F

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

: l$ a$ v0 y) L) r6 f5 e1 P

0 G$ [8 r5 B5 J& v2 l

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

3 Z6 I; U! l! n& U0 V4 H; G, Z( h

* m! ]2 O. T2 w+ D

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

4 P. L4 }1 |1 `; i+ H6 p6 n& J

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

7 d! }/ Z- M$ Y% a5 y5 F

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

0 q/ \: Z0 V2 Y! X7 J! f

3 b0 n" {, e& v6 h! q8 q

3.4、工具栏功能介绍:

+ v" U: U) _! C* D# O4 P

2 j' z9 w4 C0 a, W2 [$ e & s h9 Z& W( }% w; p8 G" e# x Rerun Inspection:重新运行一次扫描2 E6 ?7 f' s, o6 p' y% z9 m2 i Close:关闭真个AJCG面板$ f. S' y, h( h8 L. R) K, `( d Expand All:展开结果的树状结构,整个结果是树状结构的。 # k0 I! P: ?3 _/ r Collapse All:收起结果的树状结构# a, m9 \ c- A4 W Go Pre Problem:选择上一个问题; p+ I7 i4 ~1 ?0 a Go Next Problem:选择下一个问题( \) D6 A& {6 _, N g- t" L Help:帮助( q" `4 ^* }# x# m- q2 S Group by Serverity:(不知道如何描述)" E5 z$ b( [0 Y Group by derectory:按目录分组/按类名分组间切换3 Z$ a9 i c+ d Filter resoled items:过滤掉已经解决的项/ F1 X. }9 |- `% |: T' U Autoscroll to Source:自动滚动到源码 # h* Y/ [1 T& \' u Export:导出,可以导出为XML和HTML两种格式 8 E t2 m/ E9 @5 n. H Edit Settings:编辑设置 5 f5 g0 f4 T7 \ { B6 _ 6 [- a. I7 W" ]4 Y; `, b0 h

二、CheckStyle:

2 q- h8 q0 M% }: m1 ~" B# e1 w

1、整体介绍:

9 h4 p! M0 {. T, l

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

1 |( Q9 ?# ?. _7 A% ?( t1 |

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

/ g$ A" K% X6 Y; \

2、安装步骤:

/ O/ Q* ~7 a' t' P/ D/ ]

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

$ d5 G. p7 @; u3 h: o# e7 k

3、使用说明:

S2 J) W. V8 ?$ m1 Q4 H3 v

/ h$ p+ n! K0 Q( d

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

$ s' I U- s+ T6 k7 Q0 h

三、PMD

) m$ z6 A2 X8 f1 O& I& d7 w# ?

1、整体介绍:

: e! V' O/ i: O& Z8 q9 t

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

0 U7 g/ r* j' W: h# P3 z+ c5 O. }# r% V- X# [2 W) Z 潜在的bug:空的try/catch/finally/switch语句 1 T% d9 A, l& k 未使用的代码(Dead code):未使用的变量、参数、私有方法等 # _5 l9 G/ C$ {/ m" s+ [4 a- X 可选的代码:String/StringBuffer的滥用9 m9 a, Q p# \4 ` 复杂的表达式:不必须的if语句、可被while替代的for循环3 P) l1 R% a J; H 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs ^- ^' u) R" H% s. F% [ 循环体创建新对象:尽量不要在循环体内实例化新对象1 z5 _" j3 S, h% P 资源关闭:Connect,Result,Statement等使用之后确保关闭掉9 O* Q# g6 |% v- t ! P9 O) P. ]# K4 y

2、安装步骤:

A! Y( W1 I6 p5 Z. Y. K" ]3 K

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

( K0 g# F' S1 a3 `; x9 |

3、使用说明:

% i: H; y# _) w 7 _4 F" G5 c; s. m+ L$ k 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html0 @+ h+ e- Z- Z C0 @9 L' ~5 |1 e }1 h ! a4 D7 K# s# k" H0 y

3.1、运行方式:

9 T' P9 a6 e3 s- M5 z

(1)从Tools菜单中启动:

5 h# F0 X1 N3 a; m/ n. C

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

' V6 t3 A$ Y: k* A# R _* q6 C9 F; v7 ]( |# _' Y Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 ) O7 I, L- J; {* K- O; ^ Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。3 v9 m- c5 P( e" }: U 9 r4 E# ^+ n+ |: u6 _

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

1 d4 ^9 w% e. @8 N

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

0 `5 }$ s( q, k- K

3.2、运行结果:

5 A J3 F3 n3 ~) b' a- \( H7 C

! F$ M7 |: I W- w$ j& e* Q( n. }9 t* [

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

* }# T1 u4 i+ V: t" [: p: K/ s

3.3、配置检测规则:

: H) x: x, H3 H6 F0 @ Y, C

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

$ [9 a4 s; |* Z; G6 V

7 Q. _& O* ^" ~/ i

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

* N- H/ b9 \, c

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

) ^6 ?7 j I2 G- d! J- X1 ~

0 N! I( K0 _! a; ]; \

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

5 K" m$ I+ s1 s+ k+ n1 }. t: t

四、FindBugs:

9 A2 q) e; i; ^7 g G4 t% V( p V8 I

1、整体介绍:

6 i! ^# H) k) U; ]( Z' W, @

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

! a* I# K) m5 N* U' s

2、安装步骤:

5 Q/ d* D8 w1 t% Q; B

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

1 T& l: y$ i9 u3 f8 N/ W* T6 ?

3、使用说明:

g# v3 }) D, T5 P3 d" f# P" X

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

0 j+ {3 K+ m( W

0 `2 _1 ~' [+ X3 P

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

+ c7 ? }1 r$ p$ o8 _/ r$ p

4 ` g5 g0 g" g& ^

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

; K) q$ }- c' @7 ^+ n- g8 K7 h - ?/ p' f8 k3 b, c$ }: W' {

4、附:常见的错误信息

5 T. [1 m/ ^ o/ ?3 ]: t

4.1、Bad practice 代码坏习惯:

9 a5 `8 @4 r# N9 ~% q : m+ Z: a7 B5 ^

图片

' o0 {- B$ }/ @. i R

4.2、Dodgy code 糟糕的代码:

' x4 ^6 v5 A. s/ j3 B8 \3 G; s/ j, O

4.3、Internationalization 代码国际化相关:

' k& I2 U: x3 n6 p( q5 U. l

4.4、Performance 代码性能相关:

, X8 ?, E5 U, }- H9 F" M ' j' J" E2 c. A1 o, _( e$ z

4.5、Experimental:

8 ^; Q: g, ^9 R* \( v 6 V! W# s0 A0 k8 l& P' M2 K t' _

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

/ _9 n8 p1 h6 J0 g- W 5 c X( j, @. z+ H# j0 p+ v. \

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

7 a. N, [6 h2 C+ Y! b8 P+ N

4.8、Correctness 代码正确性相关:

. z4 s& x8 M0 p3 N* Q) x+ Q $ x$ t# ?( {2 }% Q5 z

五、SonarLint:

- C: J; _' z( q: i+ H

1、整体介绍:

. J/ k$ \% d& n

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

% c, J+ W4 j0 b. f+ S* q) }* D+ U, r

2、安装步骤:

% | W0 f, l" u$ m5 B2 p9 b

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

9 {; V+ z1 S+ X- `0 @* U3 q

3、使用说明:

0 k: W; ^4 l, p+ O7 t; ^ 9 U+ z8 G1 T2 N# H

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

. ^) P, k0 a | B$ r 6 K4 K$ `9 f* h: b! f% U

4、配置 SonarLint 服务端:

/ |' g1 Z" ?% S. r' Q3 [% v$ }2 `4 G

4.1、配置 Sonar 服务器:

3 s' r; u% e* p8 Z- N( E

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

. H0 K! L# x/ d. n. U. A $ j0 v0 T$ F4 H, m/ W' D

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

! @. _% l+ I0 G* q1 a8 Z1 `( Z; ^& c/ G; a! Y% Z

4.2、具体 Sonar工程配置:

9 ]( L/ ]4 x2 P, N0 ^9 k9 \3 K

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

0 g3 [3 h- \" M! ^& ? 6 X; f3 l) x8 X: B: f

4.3、使用 SonarLint 检查:

4 M1 y# |8 K& \; v7 V

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

. }& s0 W5 W" Q6 C& u5 |: D8 D q 5 B+ M' D" b% ^+ ~! n1 U, g' U

总结

& i3 e" B$ H# p2 u) G9 v4 v : F. A* ?% k; ] 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 % y1 K5 J0 \/ G 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: % Q+ A1 D# U! w- V' Z; @$ }; K PMD 自定义能力强,用来自定义项目BUG规则非常好用 5 ^8 Z L& X9 Y3 u j Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 ) n; T2 V! b d# {# E5 U2 O SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景6 n, S+ T8 r+ U w 4 g/ l- e) l) ]2 ?4 N+ l( M$ ^

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

0 e) ~ r2 O; r g$ D 2 J/ i# m! F( C4 d$ [

责任编辑:

$ q( s1 ~. F% X9 ^3 K / {+ \0 J. y5 Q$ k9 w 5 d; Q% L2 }3 `- \ l 3 s/ u; I/ y- C# x1 |# b 1 b- q8 n0 u% ^# m; o( ], _
回复

举报 使用道具

相关帖子

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