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

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

[复制链接]
7 P- W4 Q7 a: V

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

( g6 N( X8 n/ u0 n' r2 A/ U* P! \" D+ S. l: L' ~

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

. R$ u, w; ?$ m

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

9 ?, s6 a/ {6 |; s9 `: V: ~

一、Alibaba Java Coding Guidelines

1 K- h2 B. @! `% |) {. e

1、整体介绍:

& e. f/ l: }7 D: a, G

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

) K( y5 v( t+ f4 g

阿里巴巴规约扫描包括:

) q7 W7 ^+ ? i: t 1 Y6 {0 `2 a9 b; N' ^" p, T OOP规约9 c8 g9 |4 M6 S' c5 p! l7 A5 Z/ A 并发处理% d% l/ R$ j8 F8 S 控制语句0 B1 {/ {* X) g o) m 命名规约7 Z/ M; l0 M1 B 常量定义% y' i8 U6 J$ v: n 注释规范 - ?' h" Z* b0 U" a - G) ]% ~1 T, \9 ]

2、安装步骤:

& F1 l9 w5 l( M9 `/ J) j) N( C

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

6 ~# o/ `0 W3 a. Z& ~1 x# w7 t: m

3、使用说明:

9 _( V8 ^8 y) A( z7 p5 Z1 S9 b8 Y

3.1、运行方式:

8 f$ O+ |" j. V% b4 f( r

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

9 @5 Y9 i" ?$ g/ f T. N q

0 \0 r/ h, B0 S3 Z

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

3 D7 f2 C; U! c( Y/ `- w7 y

" S8 o1 F4 i( W% X, L# |

3.2、菜单功能:

& }+ h5 z9 _8 [- T" e5 X $ c5 L0 ^5 t7 E4 V 编码规约扫描:开始扫描代码6 H! e3 q9 C" X: Z 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 $ H' }5 r: S# U) o9 U7 }. r- ^ 切换语言至英文:中英文切换 , s0 |, u9 V$ G+ s7 M$ y8 n ! m4 d" ~7 ?/ L: I E: o# @/ H* Q, {

3.3、运行结果:

) u0 `" M1 N7 U C) ?7 T

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

8 }6 t* L+ F4 E, `' A' x! d3 v, e

4 h! W, r! ? r

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

7 K: f. ]2 A% l1 A8 n0 ^8 W

8 I, D" t! w& l

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

. k3 F2 k( l! k2 _3 e7 T" Z# k

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

9 B! g$ _/ ^* a

! o0 T* W V$ ^, _# R2 ?4 H# [

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

+ M- z# U" u( B) @

" V4 L& r, o- @6 y) |) x. R

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

! j: D2 g. U6 m: o8 U$ Q

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

" d4 Q" U! w6 D! z: d5 F

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

* M4 m4 Z, b+ a, G

5 r8 D. |' w6 w; T" F# Y9 `2 m6 }

3.4、工具栏功能介绍:

9 S" B: e: _# Y- J1 L9 e- r

0 x; a5 {( l+ z d; V # |9 V. [5 Z/ v6 u4 v- g Rerun Inspection:重新运行一次扫描 , p' e3 x/ [" D8 F Close:关闭真个AJCG面板 6 u. n9 Y T2 a8 K5 b( m Expand All:展开结果的树状结构,整个结果是树状结构的。2 w* c* q4 Y- D9 b! m' v Collapse All:收起结果的树状结构 Q! J0 |+ P$ c! {0 [ Go Pre Problem:选择上一个问题 9 B* i# d* [( t2 ~! s Go Next Problem:选择下一个问题 ' b* L& A" d" P- ? Help:帮助 & i- y4 _; H, u" n9 ?, ^8 h Group by Serverity:(不知道如何描述) : G4 A8 J$ h+ o0 [/ T/ [0 | Group by derectory:按目录分组/按类名分组间切换" |% h; @/ r% w) g8 Q# u% T4 \: _ Filter resoled items:过滤掉已经解决的项 3 x3 c n/ ^2 X2 U, `' a: } Autoscroll to Source:自动滚动到源码+ w! |2 h# H( U" o) n; N Export:导出,可以导出为XML和HTML两种格式 ) T0 g. } U* n, Z* F9 K Edit Settings:编辑设置, \" w4 g; b" K1 T& C& x/ c& h: K & T- r$ S z+ U6 m

二、CheckStyle:

0 A2 B! h7 d0 v3 m$ S. O0 Q; W

1、整体介绍:

2 N& A1 [$ R4 E% c7 a/ Z$ |5 n' X

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

: p$ G# Q1 @! c& |$ C' S+ \" N

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

9 }" [0 C* z Y% I2 w! l

2、安装步骤:

! e9 ?" {+ `' B* F( T

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

4 ?: a' B) U" l/ D% K1 w8 h

3、使用说明:

6 }5 ]( U/ b9 w$ ~& Y

+ t- B& x9 u& z% A

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

# V' Y$ Q' J6 j- l3 l# N

三、PMD

) e2 K" G8 q' ?- L# `5 C

1、整体介绍:

6 b% F# a) d1 g7 a5 }

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

* W. F+ d G5 z% e1 I0 k# m. R) G8 r+ {4 {8 b/ K 潜在的bug:空的try/catch/finally/switch语句/ q* z# p7 { i0 F b) Z1 d 未使用的代码(Dead code):未使用的变量、参数、私有方法等: j$ V8 `' d6 Y9 j4 i# Y 可选的代码:String/StringBuffer的滥用 - B" z7 \0 g* I; v$ m0 T 复杂的表达式:不必须的if语句、可被while替代的for循环 9 B) p! ?% }( E 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs' |& s* c7 b$ B- M2 |4 m2 { 循环体创建新对象:尽量不要在循环体内实例化新对象/ @5 Y1 n, u, w; J 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 + y6 h) b* i6 o ! D' G) m5 O* P; P

2、安装步骤:

% e3 V L/ q+ s

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

0 P' f' z( w; u q6 y, v

3、使用说明:

! h W a$ P' F; o5 d& R: C% J( a1 i' a- v# F 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html0 h: A! y) T+ o; M) E ; V" I% Z5 U, K

3.1、运行方式:

w; v/ M2 t: L$ s- M

(1)从Tools菜单中启动:

% p6 B$ k) }7 u! {* G

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

- }: e" A- b6 z/ _0 b, e6 W. d# { Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 / _5 t' D/ M! \. ^! s* o Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。6 E4 [9 c6 g. ^' G) h ; ~4 o1 L0 y. k4 r6 `. N

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

! y- b& ~& X9 p" q0 L

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

- t: B- S [( `6 v6 |

3.2、运行结果:

4 O0 b; P( J. Z; |6 e) P

- Z. v$ u7 k! @5 R5 C

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

( W( I$ B$ v3 {1 M+ R4 h+ A( W8 }

3.3、配置检测规则:

4 r) I( K0 p: \% V9 R2 S

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

9 A: z# d4 n1 o$ W F% x* c; m

4 y O* X! t S$ W: K+ O3 D2 j) P) t

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

! c6 A5 C) P8 O3 J* `7 O* p0 N

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

" G b/ d* h' F; j- J( E* H" g

* T# ?& D/ Z z$ L2 t4 C

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

# C7 ~* Z; z, T u! D: M+ T O1 p

四、FindBugs:

" ~( u% p5 `: c" C3 K2 i

1、整体介绍:

; ~7 C7 D6 d8 h2 _. \1 ]' W

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

2 W ~ _$ E6 X5 e! q: W2 J. r

2、安装步骤:

* g! O8 V0 { a

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

7 ?; f: a U- U, }( s; M3 d

3、使用说明:

. W- G% N7 j# G* S

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

& p5 \! I1 R# `0 e

: [8 |/ A4 N5 D. g) c: S N

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

, L7 t+ m r; F2 c' O& Q; c

0 S# F- a# o7 S1 I9 x0 F/ H; g8 }4 @

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

8 ~6 Z, I/ @* v* F& X* V " l* X9 a, y, ?8 \6 \3 ~

4、附:常见的错误信息

3 ?2 d% |+ s: v5 ^

4.1、Bad practice 代码坏习惯:

* o2 U; n+ \" y$ x7 R) I% V ( y/ z6 E* `6 G( t* V; w

图片

9 B2 j6 ^$ o7 [) A/ ^- E5 r

4.2、Dodgy code 糟糕的代码:

* Q' X+ y! H4 j+ O7 H! t; c- B- [7 m1 R! _2 o& l# k6 x5 L

4.3、Internationalization 代码国际化相关:

! i+ `' Q- Y6 T& ~6 K) z9 |, [

4.4、Performance 代码性能相关:

* q2 H7 T& Z. J3 V- E) j: h ! I7 X- s) ~# q

4.5、Experimental:

6 o% q* a) n6 W; i" a 1 o3 X" Y) M) ~5 d4 m6 h+ I, |

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

$ \% P; G3 p- R7 {; Y # N. O3 C% X2 c, b' }. u l& Q6 n

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

) k5 o m9 v9 f- r2 [: V8 f

4.8、Correctness 代码正确性相关:

$ m% ?6 J4 R5 y, P- S ! _8 P( D* ~* D7 a% N' G/ Y

五、SonarLint:

/ S/ N% s- S L" t) D6 q

1、整体介绍:

8 F& R) J. s- C! {

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

- m! D, z$ h7 y

2、安装步骤:

+ m/ o* m/ @5 |% ]. F

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

4 M! t5 g* s7 E: I7 m/ m8 P

3、使用说明:

; j# h f4 o* H7 }6 p' J% ` 6 O# K, l0 w/ S" x( u$ _; J

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

. ^1 o" d4 B9 R! g# t - T0 n K! ]0 U% L9 Z* t

4、配置 SonarLint 服务端:

8 P! z& U) w! R% B2 R0 P

4.1、配置 Sonar 服务器:

' U6 j% C' e) p! D

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

/ l4 j5 m* U# y; F: T# m & y' q2 ~8 ^8 G+ {. N

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

; z2 M5 x9 h* Q $ {4 c F. o% t) q! Y9 n

4.2、具体 Sonar工程配置:

" e1 B3 A, L: D c7 f- i' }; j

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

! ?% ]" K1 ]8 c" l; l, n3 g- C4 h1 T2 G8 n! q3 @, F

4.3、使用 SonarLint 检查:

* d: R. v9 c, V8 \5 _

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

" q3 U, q+ n* W" z0 L& d . O. P( B. ?8 @! R

总结

; s q7 p9 H9 Y7 `7 [* n& f# {$ _7 {/ f1 h) Y 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 ' K9 ?( g- t, S0 a8 F) }) m! S8 I! n% y 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充:4 y' A; W0 ~$ o/ L g0 K |. N PMD 自定义能力强,用来自定义项目BUG规则非常好用 2 t8 C+ j, f4 w8 ^0 A x Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。: d" j- s6 i7 @5 m; x: G" O. z" R' C SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 / w' E. d8 b8 m ) i) w! H* F6 q9 b

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

. b( {3 a0 ~" Y( |: K7 v |" I& D2 R; |

责任编辑:

9 o+ s' Z9 B2 D1 y , m) U2 _7 i% g8 R * q! X- ^2 E; N! B( q : i! Z0 R* y$ M+ e: ` [/ k5 T0 {4 ?
回复

举报 使用道具

相关帖子

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