2.1 概述
本节将介绍静态代码审查的意义以及如何在Android Studio中集成它们。需要注意的是,这些工具并不是万能的,虽然它们能高效且全面地执行代码检查工作,但它们并不具备人类的“逻辑思维”优势。也就是说,静态代码审查工具是无法确保程序逻辑表达上的正确性的。除此之外,代码中的不安全(如某些条件下的死循环、空指针异常等)、代码的执行效率甚至编程风格、变量命名等都可以被静态代码审查工具检测出来。
2.1.1 静态代码审查的意义
静态代码审查可以说是整个软件开发过程中必不可少的环节,但目前仍有很多公司忽视它。实际上,这种代码审查比动态测试(指通过运行被测程序,检查其运行结果是否符合预期,并符合运行效率和健壮性等要求的测试)更有效率。根据项目自身情况的不同,静态代码审查可以找到30%~70%的代码缺陷。
静态代码审查通常在编译和进行动态测试之前进行,这样做能在产品正式发布之前发现缺陷,大大降低维护成本,被检代码覆盖率高。同时,这种审查通常会花费较长的时间,并需要由对项目代码有足够了解的工程师处理。
2.1.2 安装静态代码审查工具
本小节将介绍几种静态代码审查工具,以及讲解如何安装它们,分别是Android Lint、CheckStyle、Spotbugs和PMD。这4种工具都是被众多知名厂商广泛使用过的优秀工具,而且笔者在实际工作中也亲自使用过,并在一定程度上确保了App的最终质量。
1.Android Lint
为方便广大Android App开发者进行静态代码审查,Google官方提供了一个工具——Android Lint,并且已经预先集成在IDE中了。国内的很多知名大厂(如美团)都在使用该工具。作为Android App开发者,使用该工具是必知必会的技能。
2.安装CheckStyle
CheckStyle是SourceForge下的一个项目,提供了一个帮助Java开发人员遵守某些代码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是枯燥的任务中解脱出来。默认情况下,CheckStyle内置了Google和Sun公司的代码检查规范。网络上也流传了很多其他类型的检查规范,比较知名的如阿里巴巴公司的代码检查规范等,都可以获取到。另一方面,如果有需要,完全可以自定义一套代码规范,方便进行团队开发项目的代码检查。可以说,CheckStyle的自由度是很高的。
安装CheckStyle的方法很简单,启动Android Studio,打开插件设置窗口,切换到Marketplace选项卡,在搜索框中输入checkstyle(不区分大小写),按回车键,就可以找到该插件,如图2.1所示。
图2.1 找到CheckStyle插件
第一个项目就是我们要找的结果。单击Install按钮,等待安装完成,重启IDE,即可完成CheckStyle工具的安装。
如果上述安装方式总是失败,或想安装特定的版本,还可采用本地安装的方式。
打开Jetbrains插件库网站,找到CheckStyle,下载指定的版本,如图2.2所示。
图2.2 下载CheckStyle插件
下载得到的文件通常是一个ZIP压缩包,启动Android Studio的插件设置窗口,单击选项卡右侧的小齿轮,通过选择Install Plugin from Disk…菜单项来安装该插件,如图2.3所示。
图2.3 本地安装CheckStyle插件
在接下来弹出的窗口中,选择下载好的ZIP文件,确认后即可开始安装。
3.安装SpotBugs
SpotBugs的前身是大名鼎鼎的静态代码检查工具——FindBugs,FindBugs是一款老牌的Java代码静态审查工具。在2009年,Google举行了一场全球范围的fixit活动,当时就是使用FindBugs工具查找Java代码的问题。在那次活动中,总计得到了4000个高质量的问题报告,并由Google的工程师决定哪些需要修复。最终,工程师们提交了代码修改,使1100多个问题得到解决,并支持将FindBugs工具审查工作纳入Google的软件开发流程。
但是,FindBugs自2016年后就不再维护了。而作为FindBugs的替代者——SpotBugs支持JDK(Java Development Kit)8及以上的版本,由于本书采用的JDK版本是8,因此将使用SpotBugs工具进行静态代码审查。
虽然使用SpotBugs是未来的趋势,但遗憾的是,SpotBugs目前并没有适用于Android Studio的插件。它可以作为独立工具运行,也可以借助Maven、Gradle等构建工具使用。打开SpotBugs官网,即可轻松找到下载链接,如图2.4所示。
图2.4 下载SpotBugs工具
官网提供了GZip和ZIP两种格式的压缩包,并提供了环境变量的配置方法。我们下载ZIP格式的压缩包,将其解压到/Users/当前登录的用户名/SpotBugs/,并如图2.5所示配置环境变量。
图2.5 配置SpotBugs环境变量
使用Windows操作系统的读者请以相同的环境变量名设定。
需要特别注意的是,截至目前,SpotBugs的最新稳定版的版本号是3.1.12,4.x版本仍处于Beta阶段。笔者建议大家使用稳定版,但是3.1.12版在SpotBugs网站上已经下载不到了(实际上是maven库中已经不存在这个版本了)。幸运的是,我们仍可以在国内镜像站点找到它,比如阿里云提供的仓库服务。
此外,如果你正在使用的JDK版本为8或者更低,并且还想使用FindBugs进行代码审查,下面的内容将会对你有帮助。
和安装FireLine类似,我们可以通过使用Android Studio中的FindBugs插件进行代码审查。启动Android Studio,打开插件设置窗口,切换到Marketplace选项卡,在搜索框中输入findbugs(不区分大小写),按回车键,就可以找到该插件,如图2.6所示。
图2.6 安装FindBugs插件
注意,这里我们安装FindBugs-IDEA即可。
单击Install按钮,等待安装完成,重启IDE,即可完成FindBugs工具的安装。
4.安装PMD
和上述工具相比,PMD静态代码审查工具显得更有意思。该工具是一款采用BSD协议发布的Java程序代码检查工具,其官方甚至没有说明其名称的含义,最接近的可能是Programming Mistake Detector。此外,它是开源的,所支持的代码类型除了Java外,还有XML,因此我们可以用它来检查Android App项目代码。
安装PMD的方法一样很简单,启动Android Studio,打开插件设置窗口,切换到Marketplace选项卡,在搜索框中输入pmd(不区分大小写),按回车键,就可以找到该插件,如图2.7所示。
图2.7 安装PMD插件
单击PMDPlugin插件下面的Install按钮进行安装,并根据提示重新启动IDE,即可完成安装。
除了安装Android Studio插件外,为了实现自定义PMD检查,还需要下载可独立运行的PMD工具。打开PMD在GitHub上的开源库站点,下载并保存最新版本的release版本即可,如图2.8所示。
图2.8 下载可独立运行的PMD发行版
下载成功后,我们将其解压到/Users/当前登录的用户名/PMD/,并如图2.9所示配置环境变量并设置别名。
图2.9 配置PMD环境变量
使用Windows操作系统的读者请以相同的环境变量名设定(无须设置别名)。
好了,所有笔者推荐的静态代码审查工具都已经安装妥当了。接下来,让我们逐个熟悉这几种工具吧。