Skip to content

Android(8): 代码质量检查

clarkehe edited this page Aug 11, 2016 · 8 revisions

代码质量检查是持续性的工作,检查的两个基本工具是FindBugs和CheckStyle。在实际项目中,检查的工作由测试人员实施,开发人员进行配合,形成日常性的工作。每天会对最新的代码进行检查,使用脚本(一般是测试用python写的)对检查结果进行解析,定位到代码行并根据SVN记录关联责任人,输出邮件,开发则根据邮件结果进行修复。

对于代码进行质量检查,在刚开始会有一些抵触情况。有的是之前没有接触过,有的是觉得需求已经很紧了,还要花时间解决这些问题。还有一方面原因是一刚开始扫描出来的问题会特别多,特别是代码规范的问题,好几千条。但只要走出第一步,熟悉了规则,解决了一些问题积累经验,后面的问题就比较少了。

FindBugs

FindBugs是针对java的静态分析工具,根据经验,确实能发现一些没有意识到的问题,对提高代码质量还是有帮助。扫出的问题以java文件为单位,会定位到代码行,并给出问题说明,处理起来也比较方便。

FindBugs有一些规则和级别,如果觉得有一些规则没太大必要可以进行调整。印象中有两个规则大家觉得比较“无聊”:第一个是有变量申明了但没有使用,第二个是没在静态函数中访问静态变量。这两个如果不处理也没什么问题,但还是最好处理,形成最佳实践。比如有没有使用的变量,可能是代码有Bug,应该使用的,笔误成了其它的变量;确实没有使用的话,就应该删掉。

FindBugs在实际项目中,没有集成到Android Studio,是测试对指定的代码目录进行了扫描。详细的使用方法可参考FindBugs的官网。

CheckStyle

CheckStyle是代码规范分析工具,保证团队的代码符合一个统一的代码规范。CheckStyle的检查也是根据定义的规范文件来的。实际项目中使用的规范文件据说是华为使用的,Github上有下载,我们使用的也是这份规范,并补充了一些规则。

CheckStyle有一个Android的插件,因些一般是集成到Android Studio中。

//添加Plugin
apply plugin: 'checkstyle'

//设置CheckStyle版本
/** 
 * 检查代码规范的checkstyle
 * http://ju.outofmemory.cn/entry/187977
 */
checkstyle {
    toolVersion '6.0'
    showViolations true
}

//设置配置文件
task checkstyle(type: Checkstyle) {
    configFile file("config/checkstyle/checkstyle.xml")
    source 'src/main/java'
    include '**/*.java'
    exclude '**/gen/**'
    ignoreFailures true
    classpath = files()
}

配置好后,要进行检查,执行gradle checkstyle任务就好了,最终检查结果会生成HTML和XML文件。结果也是同FindBugs一样生成报告邮件。

在实际项目中,有争议的还是规则。有些人之前没有进行过代码规范的训练,已经形成了自己的习惯,扫描出来问题就特别多,但还是以规则为主;且规则不宜作太大的修改,尽量跟公司内还有业界保持一致。

有些规则的细节,可根据项目实际情况调整。比如函数最多参数个数这个规则就调了好几次,因为加入了一些历史代码,且不太好修改,只好调整规则。比如重复代码的行数,开始定10行,后来发现空行也算进去了,后面又调整成15行。其他的一些规则,如变量命名、方法命名则没有什么好商量的,按规则的来,习惯就好了。

Lint Clean

在实际项目中,我们还使用了一个LintClean这个工具。主要作用是清除项目中没有使用的资源文件及资源项,如有个xml、png或字符串没有引用。它会扫描出来并进行删除,也会将扫描结果保存到xml。通过持续清除项目中无效资源,即可保证工程整洁,也能防止包文件过大,虽然混淆也会清除无效资源,但还是有一定影响。

这个工具也是插件形式提供的,也可集成到项目,

dependencies {
  classpath 'com.droidtitan:lint-cleaner-plugin:0.3.0'
}

apply plugin: 'com.droidtitan.lintcleaner'

配置好后,执行gradle lintClean,就可进行检查。有时,有些资源可能是resources.getIdentifier的使用的,这样就要加一些白名单。LintClean也提供了加白名单的功能。检查的结果也是由测试人员编写的脚本进行解析,定位到责任人,形成报告并发送邮件。

跟LintClean一起,我们还加了另一个功能,就是扫描资源目录下的png、jpg等图片资源文件,当发现文件大小超过100KB,会单独列出来,当成文件过大警告。根据项目的实际经验,一般单张图片大小比较少的情况下需要100K。

【参考资料】
FindBugs官网
Android Studio配置CheckStyle
huawei_CheckStyle
CheckStyle官网
Android Studio资源自动清理工具 - Lint Cleaner Plugin
Github lint-cleaner-plugin

Clone this wiki locally