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

[复制链接]
- \* i- |" T5 f6 Q

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

! T' |! Y6 A2 ]+ I ; Q$ D2 [3 A5 N! }2 U

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

4 l' h p1 p& r* R- o+ o$ H

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

# F1 y, t8 e9 t+ Z# }) B

一、Alibaba Java Coding Guidelines

0 B5 V% x% l: m# k% Y% F

1、整体介绍:

) T# I1 `3 g l$ F% ?7 ]; H

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

3 Z; Z4 ]: Z4 D% G4 j

阿里巴巴规约扫描包括:

4 E: \6 [% _5 x ^$ \! ^+ [0 C 4 H' P# c5 Z; I2 ` OOP规约 % m6 @. A5 ]7 B. M 并发处理 + ]) y* ?0 [+ `: J4 H 控制语句* n/ R" q" _$ K# K1 N4 V& _& S 命名规约3 l! b! b }5 k 常量定义* I, J/ B" S" G 注释规范 ' b3 b8 z* i: B- O# I 4 [ d$ D) V9 y# Z% ^

2、安装步骤:

) r( F. X' X3 C

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

1 B! [, a- w% T

3、使用说明:

; d$ S; f0 D9 X- D

3.1、运行方式:

6 g; z; u! ~/ O# p

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

. s( r/ ?* e; j! P

$ M% X0 j+ Z. r( e6 [

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

$ j3 W8 L7 x' G8 F4 R

. i4 O- y N, y: Y' [

3.2、菜单功能:

1 o9 F& u$ Z D f0 |' M9 L 3 X8 y) ~' Q! T( A% ] 编码规约扫描:开始扫描代码1 J" L2 L' P/ B' T6 V# C 打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能 . K5 {! M G- V' S 切换语言至英文:中英文切换 9 a9 a0 E8 c$ \! c) y5 A: u ' R1 G1 [6 p. p- a: X$ ~

3.3、运行结果:

% w* g5 O# j6 l: }3 V" L

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

8 p" c$ U3 ?0 r% D

. T4 t& Q/ w' y! V6 E

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

+ W; }, p6 h3 N, |0 g

) f% _! ^; r$ v6 ~) `, ?& p' E: s

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

: i& o3 H* R5 p1 B8 d

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

. I5 `) Z& | g% O

7 T5 U7 w0 A& z9 ?1 ?/ D" \* n

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

5 h3 }% P! ~6 F3 m3 ?- U: o

% T0 b& T; `# u4 a. d

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

' q( N y6 ?% m3 e* ?

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

* S! R/ Q. V% ^

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

7 |& v' w6 U" x6 Z% p

7 V6 y# A0 T- P& O. v

3.4、工具栏功能介绍:

3 e2 `* b% U% w2 r

) R+ v B: O5 q" `. r5 I/ e( M ; T) z# I5 i/ d5 x5 |" a Rerun Inspection:重新运行一次扫描 . @9 s [+ a" c. H Close:关闭真个AJCG面板% H* C+ h! v2 _. G; B. h7 j3 j. S Expand All:展开结果的树状结构,整个结果是树状结构的。# I& S; N+ x8 g& [/ j8 q: h Collapse All:收起结果的树状结构 % N* H$ r7 D+ H5 c6 [# c Go Pre Problem:选择上一个问题 6 D! _& f/ P6 |% \ r5 ?2 C Go Next Problem:选择下一个问题 ) D3 I% `/ s) e7 S0 u. E Help:帮助$ v% w5 f; _) Z) k Group by Serverity:(不知道如何描述) R1 j- {' r5 h* b0 B Group by derectory:按目录分组/按类名分组间切换 9 J& [1 q7 w4 N/ H Filter resoled items:过滤掉已经解决的项 . w; Q$ m' @" U, @+ f Autoscroll to Source:自动滚动到源码2 q8 i' J9 `4 f3 k/ _+ v3 a Export:导出,可以导出为XML和HTML两种格式 2 _" j. f- l+ A o6 M( G9 _) v Edit Settings:编辑设置 / l! Q& V* D& G+ g3 V0 `+ B/ T# _4 S5 p" T+ ?" U3 S% j

二、CheckStyle:

8 V2 y8 q* J4 g& i0 B) y& K

1、整体介绍:

6 K8 _& n5 t6 U0 i9 O7 C9 i: @

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

# |& d3 {& G" N) K

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

) k& a! R4 K0 x

2、安装步骤:

: @* Y2 d- I. u) p8 C

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

1 N- Q2 q) q( _; c" F5 D

3、使用说明:

. f4 q0 q5 P4 I$ l' Q! [5 Z

G/ J1 x/ e Z( c' g) P& |* f

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

; e* B. X& k& q" u

三、PMD

* P3 f5 p1 `( H; W+ n! |6 g: I

1、整体介绍:

" U. p( o# e/ r

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

3 W8 c+ z9 J% B9 }! F; U 0 R% l3 Q, q. u& B 潜在的bug:空的try/catch/finally/switch语句2 p+ }- n: m6 \+ I 未使用的代码(Dead code):未使用的变量、参数、私有方法等; y* x+ d, b# V' O1 P6 s+ a 可选的代码:String/StringBuffer的滥用 . F4 \4 ^. O0 h, w. o4 Z 复杂的表达式:不必须的if语句、可被while替代的for循环 * E" e8 p6 _# v 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs # |8 L p+ c Q# B& I; B 循环体创建新对象:尽量不要在循环体内实例化新对象 . f/ ^" }5 R0 o. `! l* g5 e2 w6 \% c 资源关闭:Connect,Result,Statement等使用之后确保关闭掉 8 O* Z: `5 V' X5 ]" C% Q2 e% c1 Q i" C

2、安装步骤:

$ g# w5 \) J9 b4 Y4 i' B4 j+ m

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

* [( S; _0 H0 d- g @

3、使用说明:

9 b& H( @5 s1 B: F& D4 {/ k0 L7 @$ g9 r 参考文章:http://wjhsh.net/andy-songwei-p-11830812.html + n2 P# }0 k# O9 S, F l + A7 P, _. T# q0 a6 U

3.1、运行方式:

* ^! }. T4 z0 A, f- Z- Z( I

(1)从Tools菜单中启动:

/ [! l5 _" ~6 S* Z- v, y: J8 v9 R

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

; B8 q& l! m/ T5 R) b l 7 S0 b P$ r. A3 D+ M3 s6 Y Pre Defined:预定义的规则,也就是插件自带的检测规则。后面展开的列表中列出了所有的规则列表,想扫描哪一种类型的问题,点击即可。其中“All”表示使用所有的规则。 & X* n$ b9 _+ `% ?/ X2 g; f4 W Custom Rules:自定义的检测规则,PMD允许用户根据需要自定义检查规则,默认这里是不可点击的,需要在设置中导入自定义规则文件后方可选择。 2 [3 P$ v0 \! Z; e% [/ m) f# X 3 b( ]9 [1 n/ V) G( E0 |

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

1 _ D' m M: _& W

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

, E3 p& c1 f9 l7 u, O _9 g

3.2、运行结果:

4 Z2 ?) x- ?4 x: B9 n7 f: j: x

. t8 _$ ^& k5 |4 K7 F

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

- }1 t) a. e2 H

3.3、配置检测规则:

- h3 _2 Q- `! z% W( k

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

0 Y) I5 }; f2 D# L i$ j

1 [4 j7 W. s* ^2 l5 l7 r+ \

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

' S/ q$ h$ c! D Y8 \0 k

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

! y& c# W4 u" q3 O) K

6 N% H2 _: s3 h

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

$ q) R4 ~: O/ N/ s. p

四、FindBugs:

: S3 d" e) I8 ~( F, n, o% g# Z

1、整体介绍:

1 Q5 S' C$ {- o. r. F5 E* W7 t

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

/ c4 `( z7 d0 q) A# c+ G' k

2、安装步骤:

v! U- ]7 m% N- F4 l# q' [

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

; I. a2 i5 N& y( ]

3、使用说明:

( F0 u9 ~# C3 L" f# w: |4 E6 z: g5 z

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

8 _& v: K e. X) b1 i' w

4 f$ f% W* f+ g

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

8 [0 w, o' C/ h7 v" W. ~4 V7 }

, P) j* I3 R. P7 G7 a8 ?

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

( d8 X, N0 h7 c: t. K: Q4 J: E! y, g3 k. m4 V. P

4、附:常见的错误信息

+ d) u& j: v- ^7 Z z* P

4.1、Bad practice 代码坏习惯:

. D; D" l9 W5 q# s" ]1 J5 d) ~9 n9 y9 c

图片

2 H4 e5 }+ M/ N" r6 C. t. n/ A

4.2、Dodgy code 糟糕的代码:

T2 C) M' O# K# M/ v% l/ K1 o1 ~& [0 `2 {5 i: @( ]: U

4.3、Internationalization 代码国际化相关:

. g! @& l; ?0 U3 p" V3 \

4.4、Performance 代码性能相关:

: }$ t4 W( x( N( ]; V5 `+ G5 X 5 {5 h9 G3 C2 H0 N1 E; N

4.5、Experimental:

5 {/ B5 [" j3 [6 R5 K0 [1 Y - K. m u& L/ }" x

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

& T( ?! h$ k. e) f3 v 3 c I2 R0 }# \2 o4 o9 \0 `# s& z8 ?

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

% I' o: I* E5 D; C

4.8、Correctness 代码正确性相关:

, Q& c% C& `- Q2 Y \: k; h) h( D ( H# U6 F8 v6 k& h4 H

五、SonarLint:

# j) k/ q K! Z1 H6 O

1、整体介绍:

& m5 N* a- C# M& O! t

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

9 i! X% R, W+ `

2、安装步骤:

2 {! }$ c/ [0 T$ o6 Z- J7 ^ M* T2 f

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

! h* ]! g1 g+ Q) a" S

3、使用说明:

+ i, J/ R: o4 O- ] }: P$ F% j3 ~9 E6 L. ~5 W

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

' g" v* i8 ?5 o, n# o$ { 9 O# ~0 Z0 S+ x

4、配置 SonarLint 服务端:

* l; s: v! \9 ^( H3 M

4.1、配置 Sonar 服务器:

C1 w2 z- q, |9 l

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

0 H( c3 t- T3 C3 F1 B: l I& K' p6 W4 R' |8 t: K5 ^

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

$ [ d l3 F& ~# c8 R# v 6 b: c0 M. _8 X; F8 t, H$ J

4.2、具体 Sonar工程配置:

1 S- L" S: @, N" K

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

! y5 \. J/ Y8 J. X c) H4 V/ f7 ]9 ^ t

4.3、使用 SonarLint 检查:

- j$ s5 c4 q5 o( ]) G0 i" k

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

. _) p" Q+ k% [+ w @' K) \ ! y0 H4 ]' E* D% [9 j% x2 l

总结

4 z" i' e. f/ ?! S & h0 |& ^7 ]/ r 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 就可以了 {1 I! m4 S" T7 | 找 BUG 的话,使用 PMD、Findbugs、SonarLint 相互补充: ' x2 E3 m0 k7 v( { PMD 自定义能力强,用来自定义项目BUG规则非常好用8 \5 [/ t/ G5 G Findbugs 找 BUG 能力很强,我们拿找到的BUG给新员工培训也很好。 5 e& E+ Q8 P$ [ w. B4 ^ SonarLint 规则丰富,比 Findbugs 能覆盖到更全的场景 6 c8 O8 s4 G% q0 x$ d 3 Y: S7 ?* x% k8 L

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

( K+ @/ V; P3 z Q) `7 T4 b% @; d: P# z; m! r

责任编辑:

# \! E: p% Y5 Z g& S4 \ ' | c/ o( I% x; n% B w% h! ^, p" g% `4 x , f+ L+ d& [1 E% C- m: e+ u$ q) L - i _' {# Y4 S7 `
回复

举报 使用道具

相关帖子

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