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

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

[复制链接]
+ L! a) f8 h- t' p% E* F

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

# N* [9 M& z4 B" E5 }* L - e) ?5 \- M. q/ m

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

" q, o7 a' d: u; e' |8 v7 M

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

% h' P+ [8 @% l0 E1 D3 k: ?

一、Alibaba Java Coding Guidelines

E: y' @$ ?! M- k$ n. y

1、整体介绍:

4 o4 U* m6 x7 V7 R7 w3 U

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

" X% o0 j6 p+ }" b% d

阿里巴巴规约扫描包括:

/ y& ~+ }6 ~! T4 t$ @ : {, w/ v8 P s1 q6 F! V OOP规约' ?+ H. u' B7 g. \8 ], T; @ 并发处理+ Y% o: Y" E( O8 z# G: O% i 控制语句% k1 ~6 _ c4 K! }# k 命名规约 0 X/ g% h7 ` C ]& @3 `) O" E5 J; s 常量定义7 U7 K" o. ]( Q( I0 g' f8 Y! w 注释规范, F& }$ `, C: g ' H. F$ b# k8 X! A, k- A8 _$ U" A

2、安装步骤:

& L+ `, a# I# u

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

" d9 B: ~# M' o8 V, [9 ]* t

3、使用说明:

( Q, y+ A* m0 C2 b& Q* W

3.1、运行方式:

" w6 L7 d5 h$ q5 o

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

_, U" P1 [3 j1 E/ W4 L( ~

& E/ X; J+ P3 i

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

6 t% Q& Z; q- {; l7 M6 \

/ }; D$ h; [5 u. v( z( ~6 A

3.2、菜单功能:

7 u/ n# x: f Z $ N" s! a& _( M: }: _4 q+ O- _ 编码规约扫描:开始扫描代码 ( a: U% w( A P! o; c 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能# r7 d( T4 n; { 切换语言至英文:中英文切换9 O' C) l+ z x; U# y# B3 E 5 F% J% ^5 b- w# V

3.3、运行结果:

$ M5 H% x! {/ ~# I

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

- F# s! t% k4 O2 q# Y8 u* X

. z, Z; ]) x5 _6 [5 Y% x: @) G8 ^

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

: [6 ]( N: a& Q8 m3 |5 c

l4 o2 S' ^) @; r

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

! p% V2 A0 z% K( ^8 p' E/ \$ C

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

5 Z2 d! y- C( U' b9 I9 Y) U

2 @) w, { c: H1 z& F4 L

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

, o* d% B# _- l% u8 \$ Y

5 @5 j) r. u( A0 n& o5 ]9 h

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

0 [9 ~+ E! w! D. V+ V. Z: c

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

0 |4 T; g$ A! T( G# m& u

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

/ W1 n2 W' n* Q# A7 {6 ^6 i

5 C6 b$ I2 t0 I! Z3 N$ Y. X

3.4、工具栏功能介绍:

: q" t+ G& d, r; }5 e. ~: S, N

' m# H! s K4 J, A1 D) Y) ? 1 z Z: `" w" u1 a; k1 a' l Rerun Inspection:重新运行一次扫描 2 V$ E) ^& q, M+ p& @ Close:关闭真个AJCG面板& x' M0 e! I4 ~+ X Expand All:展开结果的树状结构,整个结果是树状结构的。. q: p: c$ C6 B1 Q8 O3 E2 f Collapse All:收起结果的树状结构+ d6 I1 |$ l/ F0 X4 D$ `) p" \ Go Pre Problem:选择上一个问题 2 W7 F4 i" {" d5 W3 x Go Next Problem:选择下一个问题9 @# V0 Z9 d; y! | \8 @& S Help:帮助" q, Y I2 q5 u+ Z1 [& l6 P Group by Serverity:(不知道如何描述)% {9 _; g; \3 Z3 S0 r3 Y Group by derectory:按目录分组/按类名分组间切换1 e$ g. S7 x7 g1 X Filter resoled items:过滤掉已经解决的项1 u- m; ^8 Z- O& g8 a8 Z& v Autoscroll to Source:自动滚动到源码 % X; Z9 D& ^; W8 Y, q% S Export:导出,可以导出为XML和HTML两种格式7 U7 I& W, I, |& q" J+ T" A Edit Settings:编辑设置 4 E! [7 O- L* G. I+ h; [( K ; o+ }; \0 [3 u* _+ K5 ?% v& Y

二、CheckStyle:

- }3 E# n+ Y/ ~, ^# o

1、整体介绍:

. |4 E( |, B' E0 U, y

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

5 R9 ]7 e* S) N# c5 n4 Z3 j

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

4 ^4 M' `/ R- I- S# @- d# b

2、安装步骤:

6 K" Y$ a% Q; b0 k3 @( K# s# ]

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

) n1 x* x7 [( v% C2 r6 o

3、使用说明:

9 Y6 y. a# i: e# d' i$ e

( P! _6 Z$ o' C9 v) f9 d; `4 Z6 l

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

) I4 |8 m4 \ K. n; _4 s

三、PMD

3 t4 J0 Q* _6 v6 |# U+ l' p, ~8 Q% j

1、整体介绍:

. s! i8 ?, a: O- F0 F7 Z! X4 O

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

$ ~6 Q. o% S. R) O + C& X1 }; m& W3 G& w+ I8 }. Y 潜在的bug:空的try/catch/finally/switch语句 : @( H$ t6 z; `- K/ o1 N! A! a 未使用的代码(Dead code):未使用的变量、参数、私有方法等 f5 @5 d6 a1 v3 T 可选的代码:String/StringBuffer的滥用 5 w! F1 I" q# j4 a" n+ R/ W. e5 t 复杂的表达式:不必须的if语句、可被while替代的for循环5 t7 Z0 d' d6 o( K* P% J 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs- v* _8 s) }# p, N' s0 [$ B- c4 s 循环体创建新对象:尽量不要在循环体内实例化新对象 ( h: f" U }6 H7 }/ F5 Q7 z5 h 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 9 r+ z5 a$ A7 j2 Y I4 ] : A$ }) U/ B! E7 q; t( P+ `8 f! x

2、安装步骤:

# t) O# t. J1 T- F+ V

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

6 k8 B, w' t8 g) I8 D0 {( [5 N! r

3、使用说明:

3 U3 B" P' Y; M. q+ R2 Y8 W ' y$ r# s0 ^: u: i4 E; v2 d; V; E 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html4 z+ u* ~/ `9 }& B: v. d % J6 C9 ?6 m0 y( H

3.1、运行方式:

2 t& ]$ a7 `8 ~6 m1 D; Y* \

(1)从Tools菜单中启动:

7 a- f7 y3 u4 r7 T5 v3 }

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

" Q. _6 q5 L, o9 D H& z' O: v3 f" B$ D8 Y+ @# v Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。+ O/ U1 s$ p( C1 k Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。 3 ]- L) o4 ^. \0 A2 `) t+ M, { - y" K% R& m2 O) q( c8 q; l0 U$ S

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

; _6 J: K7 r$ P; g' W8 |% P7 d

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

# c; G1 i( r# u+ h7 {" O! y3 H

3.2、运行结果:

2 x. e8 L+ t& e3 d0 t& N% N

( k9 O9 q8 j& L# n8 g( g

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

3 v1 H: s8 m. T+ g

3.3、配置检测规则:

7 {% ^2 {1 }0 n2 H

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

) b7 N, A" l- t

& E8 O, p$ H: }, F! o

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

9 O9 S$ j$ P8 C5 H# h/ c2 y; z

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

$ C: K$ p4 @8 b$ d) e) G

% b# Z7 j8 D4 M8 Q( l2 t

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

: s W7 S8 W" }; Z( p

四、FindBugs:

: o7 G7 a! a9 [

1、整体介绍:

) S8 f- g7 F0 u D

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

. K$ {& |0 h& w

2、安装步骤:

) O: o4 R$ W3 W3 i) g

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

) ]- Z! e1 ^; E/ J3 E8 C# s

3、使用说明:

' L. G: x8 U& b! A* J Q

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

4 R6 B* D6 F9 e1 Y+ m H# j# G6 U

0 W0 c2 T2 o* }% x7 @4 u

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

6 H% I# G( S1 N$ |

. u5 V( O1 ]) x; H- H/ W- \9 \

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

8 n( J0 }0 w1 {1 \7 W : i/ C: O, E; y) c* F: q6 s

4、附:常见的错误信息

5 i2 ^& E- A+ g _9 U( N, q5 E8 f

4.1、Bad practice 代码坏习惯:

1 z, N1 z s4 t' A8 Z7 C * Y8 L6 B5 O( n& I# e

图片

9 J( f( N) l& a6 X

4.2、Dodgy code 糟糕的代码:

/ V2 i4 e! U, h" d# a! g6 ] O / m9 L: w0 g% z

4.3、Internationalization 代码国际化相关:

# N2 C: S6 }: k' H* }

4.4、Performance 代码性能相关:

# N1 Z' T+ q! A , s4 i8 ~- m) P; \

4.5、Experimental:

6 T! Z9 E8 i! k* U: F1 q$ F& e* Z) k4 _7 y9 R

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

* r/ ~' s) u( w ; @5 ~( d* U6 ^9 ~

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

0 u! Z$ R) z: P( X; c1 T/ X5 j; }- \

4.8、Correctness 代码正确性相关:

# D. p) q: o, o0 D Y/ L i E) A $ Y7 R1 u/ F& i7 W5 U) r

五、SonarLint:

7 O% x& G% t1 h) H1 z, N4 c+ i: L/ {

1、整体介绍:

8 y9 Z* e3 g4 _. a( r

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

% j# y. g5 I+ j% E6 T- X

2、安装步骤:

6 ?5 \! a. p( U6 R

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

3 P- U' g) }9 ?3 y% e

3、使用说明:

7 `. D5 z2 b3 u y) N9 h, E' V6 c# H. a

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

/ c8 \6 Q B* y' M* v, O+ B& z% X: [$ C

4、配置 SonarLint 服务端:

' ^: }8 j& v% s" ^

4.1、配置 Sonar 服务器:

9 X" r: ~) D, e8 o1 v

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

% T3 `9 y! s) V6 X0 F$ d [ 3 v' E$ ^$ H. h. s* f' U: h

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

6 z$ H. a+ q! M8 m- V5 e) y4 X# I& Y/ G$ v) k( {

4.2、具体 Sonar工程配置:

3 M" ^$ C* L& O4 ?

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

6 O/ m" t* T" p! E) K' @% A: O+ Q0 R & i6 Q% \6 O: I

4.3、使用 SonarLint 检查:

, [$ X; b# B' ?$ e* s; @

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

8 U5 p9 g. g m# h, ]# f * r* p8 M6 I! ?

总结

. T3 C' b) l8 S9 h ) h4 f( Y! V1 h3 } 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了& h1 J' V, T) x 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: : a" x1 | J+ o7 _ PMD 自定义能力强,用来自定义项目BUG规则非常好用 ) O% r0 i6 S( ~3 f" i+ `* o Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 * [1 m9 ` ~* _ ~+ r$ x3 Q SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 4 V$ l) ^; H6 z, n) @. Z! b, u' m

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

3 U E6 h4 i' J8 j1 T9 T) ^! r. J2 [, H/ Q$ ]' g

责任编辑:

4 i. v: f9 E( D( L4 { t" U# Z5 K/ L' N) x+ U8 _+ A4 _6 `! w3 B5 i+ g 4 u; ?/ k8 q0 q. J ; ^# o5 d5 A; _7 |
回复

举报 使用道具

相关帖子

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