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

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

[复制链接]
" E1 E6 f2 H- `: M* X2 @" W/ `

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

5 q# r; Y. l7 L( i$ k4 `8 s6 T0 x5 P% c5 k( k

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

' A5 u$ D, }' E) z

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

+ z# P( U2 z. Z5 A* |. B

一、Alibaba Java Coding Guidelines

" Z! f8 [( _3 A( Q) E; W# e% n8 V

1、整体介绍:

. `, v7 ?: f* H. E8 ]

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

6 U( o4 p) F1 N% L

阿里巴巴规约扫描包括:

; U% P; d( Z8 y2 i, O! y $ X. M j. V6 |: K OOP规约 2 i2 f3 z' F( Y, } 并发处理 * A6 y& D2 f# N# J 控制语句4 D+ D" l* J$ F1 j/ \5 ?. S: n 命名规约. n% y$ l( }2 o2 e& s4 s$ { 常量定义 % j0 `$ H! y2 n" H& [ 注释规范 . z' L$ B/ r% P- l7 ]9 Z3 ~+ O% A) q5 q

2、安装步骤:

4 D- [+ h3 h, z+ s, ]& n

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

1 x3 d3 A0 w- u6 d2 E

3、使用说明:

- D& k; c: c8 w z7 W" z

3.1、运行方式:

+ O$ }3 j$ V% a% K) h

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

8 @' p0 v6 g1 f \1 Q* l5 s+ C

" k, H& y% F+ M( E4 o* L9 J5 Z2 {

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

7 v0 b+ X! C, j

8 ?1 O: v3 F, W+ n& N' h

3.2、菜单功能:

9 l4 @/ E6 L; o7 M" _$ f3 p% i4 X! f( w# u% x 编码规约扫描:开始扫描代码 7 {+ Y% ]+ ?8 g& o: q 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 1 J+ z3 l- I3 q" h8 P, _. C: K 切换语言至英文:中英文切换; j4 ]+ {3 e$ m! r; x & f' e( f# @9 m# t- N

3.3、运行结果:

2 ^: B @4 o" _# X4 P+ E4 R! M9 C

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

% P: w* ^: X/ ^1 g5 R

6 g- f6 ?/ P) h% Q

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

3 r9 j% j9 U% t7 O. N, i; I: Q2 ?

" I" Q3 @1 T( w1 u# b" {* ?0 E; L

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

' T1 N9 h: g( a& Y i; C; s; H

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

* b. A4 M8 }; E8 E; r/ l

) n8 Y# k) K" q4 d" v

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

4 l1 C! V; g: U- y& p8 T

B$ f* |0 A8 ]6 O

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

/ n3 T& i3 ~$ r. o5 ?! k# w

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

: a: ^8 _6 t7 c( N; F' G

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

3 U j- F. K6 ^) Y# b

; W) l9 {/ p* x, B6 i

3.4、工具栏功能介绍:

! h" H7 \! r1 m6 b+ z9 Y- h) c4 B1 r

, S2 p- t& _" v ; ]0 w+ S* X7 C- S( a Rerun Inspection:重新运行一次扫描 2 j1 {" b2 E# V% w Close:关闭真个AJCG面板: V) |2 L' x1 V" z2 K$ f( q Expand All:展开结果的树状结构,整个结果是树状结构的。 - h( P1 Y$ R; Y' S8 s1 M Collapse All:收起结果的树状结构3 ~/ G5 L/ r# l' P4 C Go Pre Problem:选择上一个问题9 Z1 M' ]% i w. ^: H$ `; j( ]3 S" \ Go Next Problem:选择下一个问题 - H. C U$ }! p; Q" X( p3 k Help:帮助3 o4 h% {) m) b) A7 p4 _ Group by Serverity:(不知道如何描述)* G, J: o4 l, J Group by derectory:按目录分组/按类名分组间切换 4 `9 D1 \' H- e6 {/ X { Filter resoled items:过滤掉已经解决的项7 |% H) N4 _% ?+ A( L8 |$ ] Autoscroll to Source:自动滚动到源码 2 |& G I! J8 P" j Export:导出,可以导出为XML和HTML两种格式 - z3 b g( _- x A* ?/ I: v Edit Settings:编辑设置9 R$ A Y2 O3 \/ V6 m 5 i% d! i4 S; }, \

二、CheckStyle:

3 n2 T+ k( k7 W

1、整体介绍:

" w0 r4 A. h. |: k1 |' T

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

# ?8 ^) b/ f8 t1 ?) s. `/ l

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

% o6 u+ y- M( X" \9 z3 D( q

2、安装步骤:

, F6 ?! N* L, ?+ w, m" i

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

9 ] B5 z% K) _# z6 j

3、使用说明:

, ]! M* {* i! w! R* T: \$ t

$ @6 W! `! U; z8 Z' }: t8 O3 d

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

- s }+ Q, j6 {/ V9 }, c+ K# K

三、PMD

$ H& p% K3 h" W! o* R

1、整体介绍:

9 k2 W% V5 M0 v5 x# V( N5 J A

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

4 b& v, V) Y: \ : R5 A+ j4 t" m- k+ b 潜在的bug:空的try/catch/finally/switch语句 * v' e: D6 l* \5 s: {" f7 K3 C2 w 未使用的代码(Dead code):未使用的变量、参数、私有方法等& Q/ L0 ?% x0 ?0 q 可选的代码:String/StringBuffer的滥用 % m& B; m6 W, {' F9 ^: N( m% ` 复杂的表达式:不必须的if语句、可被while替代的for循环3 N* q9 r: _$ i0 j6 \ 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs+ d9 c7 `4 c k 循环体创建新对象:尽量不要在循环体内实例化新对象1 r, z' P& j8 Z& r$ P. s s: c+ V 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 ~/ }1 m' Z) q; h; Y0 ^0 r2 N: _( g: P( Z/ R

2、安装步骤:

2 p* I% L; l6 E

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

0 }: X! c+ Q) ]' c4 v6 J' i

3、使用说明:

* {$ A6 R h9 N" `4 G# T; H+ X6 h 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html/ e7 f6 H+ {3 E0 h0 K; E, p ( n' H. |- {" b$ B0 ?; h# G2 M! I

3.1、运行方式:

* y5 V& U! n' X6 z* p# e

(1)从Tools菜单中启动:

% y7 t% Y6 X, v

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

# o3 C: J6 u( {" L 1 \# f8 C6 x7 L; T6 T3 X6 K Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。* A" z# ~4 G; h$ b# X' ]! s4 v6 o Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。! K/ z! f$ f- x+ O ) f9 I5 ?) Z: C4 Y9 z# n% L$ h

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

3 b/ d! r0 O3 B# `4 ?

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

4 l9 F9 h1 I1 }- q8 U1 ?8 B

3.2、运行结果:

% f+ d' q5 Y, N0 j5 J2 b9 x

" ^) t9 q' v7 \8 S/ C2 h/ U

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

: J( ]' O- Q$ `& s, i

3.3、配置检测规则:

6 B2 o- o. Y8 V) B2 A

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

6 o2 _8 p: V. Q7 S. d! l i3 j

' n# w/ j3 x/ J

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

7 O2 @. C# p8 B

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

( p- t% {0 V8 r6 W7 m5 g

3 U' n: q4 k- R

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

2 V0 Y: d4 T; S6 F8 p

四、FindBugs:

0 I+ g% Z% {/ c0 d. G# S+ _

1、整体介绍:

/ h7 m: w1 D& w/ v

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

1 b- z+ M; a* r' t" F9 S2 i

2、安装步骤:

- A, W9 ~ P9 W* z4 a

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

H: ]& p: v, Q1 L9 y6 x

3、使用说明:

0 ^. d, i. Y+ p2 L' a" U

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

; d& o/ S* z( A2 N8 a

6 f( A7 Q& D7 d' U: `

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

. {- x# j; y7 V. p0 c0 N0 R

# F7 U0 v/ z+ J4 w$ `4 v

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

3 q7 [ h0 q$ ], i- e* i7 M1 @5 d) r) O, k8 @

4、附:常见的错误信息

3 r ~1 k6 J& R

4.1、Bad practice 代码坏习惯:

p: F- n* a6 e# R, y8 L5 T , r) j& d5 _2 B, z* F

图片

; ?3 r. z$ s" s+ B+ L+ {' ~

4.2、Dodgy code 糟糕的代码:

( O6 i/ ]0 L* V* ]) k: d - k8 u8 ~7 J# C- N" }

4.3、Internationalization 代码国际化相关:

# E' j- M1 Z+ K- i& J# B

4.4、Performance 代码性能相关:

: [& q9 Y9 f- e5 `0 @3 o! `. k: D& Y

4.5、Experimental:

/ M! D$ S; q$ x+ p3 s/ X) T9 ]6 ]8 v- @8 u

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

- o- D. t% S# [, J# j 6 Q' z a! Y- i3 N! z

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

( u* W$ U2 r9 w2 {

4.8、Correctness 代码正确性相关:

+ U' }8 Z$ [# q) P( q# e0 h" b % ~0 h- h8 D! X+ I) r7 X1 G( j

五、SonarLint:

* ^6 T1 R" |8 J

1、整体介绍:

( b, |! u/ C6 ~

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

; ~* F% t; o4 c0 A

2、安装步骤:

3 p y- c: y' i; {

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

4 v5 `% z, l4 p" g) o& c# Y

3、使用说明:

0 E( X) }# _2 \ ) Q7 o( k7 b8 N5 q' H' F4 ^

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

+ c' ?0 u. k; } ( f8 I" [+ X7 y9 d* b

4、配置 SonarLint 服务端:

# Q' q: a# L- ~# B! p! [$ R C

4.1、配置 Sonar 服务器:

j, [" I; G6 `& e l* }

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

( j/ T" F# a$ S4 |, d4 |; ]4 z 9 Y& |, z, G) q, s" R3 P7 M5 b) c6 \

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

. G8 e% x- D2 Y; {% Q* g& ?& U 7 u+ N3 C8 ` O) [7 G- d( U

4.2、具体 Sonar工程配置:

+ }/ e& d9 h) P; B6 @( @

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

& f0 o0 {5 i% g) Q! x) g 5 h4 h; I! V* P/ X; X/ K, `9 L; i

4.3、使用 SonarLint 检查:

; ^1 K0 L1 Y$ V9 @% O4 g9 a

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

: a/ V w% X; H 1 ^' {/ k7 y7 t2 a, H; P

总结

+ T1 P- p4 }2 p# _3 ]& K2 B' f; p2 X. s' E 2 Z! Q- ~6 O) p1 }3 y' e 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 / ~5 }7 i$ \, k. S! X* ? 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充:5 p* A. H% z% H PMD 自定义能力强,用来自定义项目BUG规则非常好用; Q M/ Y! ? _ h Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。9 T" H7 U4 K5 R- i3 S. A. E+ o5 q SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 " u' x; @+ C1 X" D* @0 @- c ( ~ V+ `; K8 i' @6 T0 w5 }" l% m' p

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

. S( U4 t1 [4 ~% p9 ?" S$ v# U3 X " T- s3 G. e# H, x( n! |1 z

责任编辑:

) m" ?" ? R9 I$ w , C. _9 j, f. `6 @ : Q0 X3 A+ B4 |" ]9 F. m . z( b0 O% p# T7 |0 f# `6 N' x
回复

举报 使用道具

相关帖子

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