购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 使用静态代码分析工具

前面的小节介绍了一些编码规范及最佳实践,如果在编码阶段可以很好地遵循这些规范,并践行最佳实践的话,就可以大大提升代码的质量、提高可读性、降低维护成本等。在很多公司内部及开发团队中,为了保证大家都遵循这些规范,都会有静态代码分析(Static Code Analysis)流程来保证在上线前检测出代码缺陷。

本章主要介绍静态代码分析技术相关的方法和工具,在掌握了这些方法和工具后,就可以很好地进行静态代码分析了。

1.3.1 什么是静态代码分析

静态代码分析是指在不运行计算机程序的条件下进行程序分析的方法。静态代码分析仅通过分析代码的词法、语法、语义、控制流等来检查代码的正确性,帮助软件开发人员、质量保证人员查找代码中的结构性错误、不符合代码规范的地方、安全漏洞等,从而保证软件的整体质量。

在进行静态代码分析时不需要运行被测试的代码,所以一般在编码阶段就可以发现问题。在整个软件开发生命周期中,大概有30%~70%的代码逻辑设计和编码缺陷是可以通过静态代码分析发现和修复的。

由于静态代码分析需要分析者有很多的经验积累,并且极其耗费时间,因此对于很多软件开发团队来说,使用静态代码分析工具自动化执行代码审查和分析,能够极大提高软件的可靠性并节省软件开发和测试的成本。

目前有很多静态代码扫描工具可以作为IDE的插件,在编写代码阶段进行实时静态扫描,实时提示代码缺陷,可以帮我们大大节省做代码审查和修复的时间。

1.3.2 静态代码分析工具

在代码构建过程中使用静态分析工具有着诸多好处,所以在市面上有很多成熟的静态代码分析工具。本节重点讲解静态代码分析工具Checkstyle、FindBugs及P3C的使用方法。

1.Checkstyle

Checkstyle是SourceForge的开源项目,是一个帮助 Java开发人员遵循某些编码规范的工具。它能对代码的编码格式、命名方式、Javadoc、类设计等进行自动化的代码规范和风格检查,从而有效约束开发人员更好地遵循代码编写规范。

Checkstyle目前几乎支持所有主流的IDE,在IntelliJ IDEA和Eclipse上都有Checkstyle的插件。

Checkstyle 支持用户根据需求自定义代码审查规范,用户可以在已有检查规范如命名约定、Javadoc、块、类设计等基础上添加或初除自定义检查规范。Checkstyle插件还可以直接导入代码审查配置文件,例如可以直接使用Checkstyle配合Google Java Style Guide配置文件对Java代码进行静态扫描。

在 IntelliJ IDEA 设置菜单中选择“Plugins”菜单项,单击中下方的“Browse repositories…”按钮,即可通过网络搜索并安装Checkstyle插件,如图1.1所示。

图1.1

在安装好 Checkstyle 后,便可以在 IntelliJ IDEA 的“Other Setting…”选项中找到Checkstyle的设置入口,进入修改Checkstyle的设置页面。下面通过Checkstyle使用Google Java Style Guide进行代码扫描,如图1.2所示。

图1.2

在配置好Checkstyle后就可以扫描代码了。Checkstyle有一个单独的视图,其中包含代码扫描、规则选择、代码缺陷列表展示等功能,如图1.3所示。

图1.3

Checkstyle 会根据配置的规则扫描代码,并列举扫描到的代码缺陷,开发者可以通过如图1.3所示的视图查看有缺陷的代码,并选择性地进行修复。

2.FindBugs

FindBugs 是马里兰大学开源的一款主要针对 Java 语言的静态代码分析工具,通过检查类文件或JAR文件,将字节码与预先定义好的缺陷模式进行对比来发现代码缺陷,以达到静态代码分析的目的。和Checkstyle一样,FindBugs既可以提供可视化UI界面,也可以作为Eclipse插件使用。

在 IDE的 FindBugs视图中需要先选择待扫描的.class文件,如果已经有这些.class对应的源文件,就可以选择这些.java文件,这样便可以从稍后得出的报告中便捷地定位代码缺陷。还可以选择工程使用的 library,这样可以帮助 FindBugs 做一些高阶检查,以发现更深层的一些Bug。

在选择以上各项后,便可以进行检测了,之后可以生成一份详细的报告。我们根据这份报告,就可以发现在许多代码中潜在的Bug。FindBugs的扫描结果有一个单独的视图页面,它会根据代码缺陷的性质,把扫描出来的代码缺陷大致分为以下几类。

◎ Dodgy code:糟糕的代码。

◎ Bad practice:不好的做法。

◎ Correctness:可能不正确。

◎ Experimental:实验。

◎ Internationalization:国际化。

◎ Malicious code vulnerility:恶意的代码漏洞。

◎ Multithreaded correctness:多线程问题。

◎ Performance:性能问题。

如图1.4所示是使用FindBugs对一段代码扫描后得到的代码缺陷列表,其中包含了前面提到的Dodgy code、Bad partice、Correctness及Experimental等4类缺陷。很多代码中的常见问题,例如引用了空指针(null pointer dereference)、多余的代码(useless code)等都可以被轻易检测出来。FindBugs除了会提示代码有哪些问题,还会提供一些问题成因及修改意见等,可以很好地帮助开发人员在修改代码缺陷的同时提升自己的编码能力。

图1.4

3.P3C

在 2017年10月14日举办的杭州云栖大会上,Java代码规约扫描插件全球首发仪式正式启动,《阿里巴巴Java开发规约》(后面简称“规范”)正式以插件形式公开走向业界,引领 Java 语言的规范之路。该插件是基于规范进行静态代码分析的工具,同样支持目前流行的多种IDE,例如IDEA、Eclipse等。

该插件在扫描代码后,将不符合规约的代码按Blocker、Critical、Major三个等级显示在下方甚至 IDEA上。该插件还基于 Inspection 机制提供了实时检测功能,在编写代码的同时能快速发现问题所在。而且,该插件能给出代码修改建议,还能对部分规则提供一键修改功能,方便开发者修改有问题的代码。

P3C同样在 IDE中提供了单独的视图,可以进行代码扫描及代码缺陷查看,如图 1.5所示为通过P3C扫描后得到的代码缺陷列表及详情。

图1.5

相对于 FindBugs等其他工具,阿里巴巴推出的 P3C插件对代码缺陷的描述及改进意见十分详细,是开发人员提升代码质量的必备工具。 uJDmxs2T8KqJCpnsFxh03xPNJW8sr1cujRjw7PX5rz58XUW76UB7q6EKS8H45vmZ

点击中间区域
呼出菜单
上一章
目录
下一章
×