提高Android代码质量的4个工具
作者:网络转载 发布时间:[ 2015/7/15 10:45:09 ] 推荐标签:软件测试
Gradle的形式
下面的代码向你展示了在你的项目中使用Findbugs的基本的配置(以Gradle任务为例):
task findbugs(type: FindBugs) {
ignoreFailures = false
effort = "max"
reportLevel = "high"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")
classes = files("${project.rootDir}/app/build/classes")
source 'src'
include '**/*.java'
exclude '**/gen/**'
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/findbugs/findbugs.xml"
}
html {
destination "$project.buildDir/reports/findbugs/findbugs.html"
}
}
classpath = files()
}
它是如此的像一个Checkstyle任务。尽管Findbugs支持HTML和XML两种报告形式,我选择HTML形式,因为这种形式更具有可读性。而且,你只需要把报告的位置设置为书签可以快速访问它的位置。这个任务也会失败如果发现Findbgus错误失败(同样生成报告)。执行 FindBugs任务,像执行CheckStyle任务(除了任务的名称是“FindBugs”)。
Findbugs的使用技巧
由于Android项目是从Java项目略有不同,我强烈推荐使用FindBugs过滤器(规则配置)。你可以在这一个例子(例如项目之一)。它基本上忽略了R文件和你的Manifest文件。顺便说一句,由于(使用)FindBugs分析你的代码,你至少需要编译一次你的代码才能够测试它。
PMD
简介
这个工具有个有趣的事实:PMD不存在一个准确的名称。(所以)在官网上你可以发现很有有趣的名称,例如:
Pretty Much Done
Project Meets Deadline
事实上,PMD是一个工作有点类似Findbugs的强大工具,但是(PMD)直接检查源代码而不是检查字节码(顺便说句,PMD适用很多语言)。 (PMD和Findbugs)的核心目标是相同的,通过静态分析方法找出哪些模式引起的bug。因此为什么同时使用Findbugs和PMD呢?好吧!尽管Findbugs和PMD拥有相同的目标,(但是)他们的检查方法是不同的。所以PMD有时检查出的bug但是Findbugs却检查不出来,反之亦然。
Gradle的形式
下面的代码向你展示了在你的项目中使用PMD的基本的配置(以Gradle任务为例):
task pmd(type: Pmd) {
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ignoreFailures = false
ruleSets = []
source 'src'
include '**/*.java'
exclude '**/gen/**'
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/pmd/pmd.xml"
}
html {
destination "$project.buildDir/reports/pmd/pmd.html"
}
}
}
PMD来说,它几乎与Findbugs相同。PMD支持HTML和XML两种报告形式,所以我再次选择HTML形式。我强烈建议你使用自己的通用配置集文件,正如同我在这个例子(check this file)中一样。所以,你当然应该去看下这些通用配置集文件。我建议你,因为PMD可比FindBugs更有争议的很多,例如:如果你不声明”if statement”或”if statement”为空,它基本上会给你警告信息。如果这些规则是正确的,或这对于您的项目(来说是正确的),我真的认可你和你队友的工作。我不希望程序因为”if statement”崩溃,我认为这样程序的可读性很差。执行PMD任务,像是(执行)CheckStyle任务(除了任务的名称是“PMD”)。
PMD的使用技巧
我建议你不要使用默认的规则配置集,你需要添加这行代码(已经加上):
ruleSets = []
否则,因为默认值是这些基本的规则配置集,基本的规则配置集会和你定义的规则集一起执行。所以,如果你的自定义规则集不在那些基本配置集中,他们仍然会执行。
Android Lint
简介
“Android lint工具是一个静态代码分析工具,它能检查安卓项目源文件的潜在缺陷和优化改进的正确性,安全性,性能,可用性,可访问性和国际化。”
正如官方网站所说,Android Lint是另一种静态分析工具,专门为Android服务。它是非常强大的,能给你大量的建议以提高你的代码质量。
Gradle的形式
android {
lintOptions {
abortOnError true
lintConfig file("${project.rootDir}/config/quality/lint/lint.xml")
// if true, generate an HTML report (with issue explanations, sourcecode, etc)
htmlReport true
// optional path to report (default will be lint-results.html in the builddir)
htmlOutput file("$project.buildDir/reports/lint/lint.html")
}
我建议你使用一个单独的文件来定义哪些配置需要使用和不使用。这个网站根据新的ADT版本定义了全部的配置。我的演示项目中的lint文件包含所有这些规则(ADT 21),包含等级为”ignore”的”severity”:
IconDensities:这个规则配置确保你定义每个图像资源中的(分辨率)密度(除了ldpi)。
IconDipSize:这个规则配置确保你为每个dip定义合适的资源(换句话来说,如果你没有为每个density设置相同的图片资源,则不需要重新设置图片大小)。
所以你可以重用这个lint文件并激活你想要的所有规则。执行Android Lint任务,像执行CheckStyle任务(除了任务的名称是”lint”)。
Android Lint的使用技巧
对于Android Lint没有什么特别的技巧,只需要牢记Android Lint会测试所有配置规则,除了那些等级为“ignore”的“severity”的配置。因此如果发布了新版本ADT下的新配置规则,他们将被检查,而不是忽视。
实例演示
现在,你有所有的方法为您的项目使用这四个工具。显然,如果我们能同时使用这四个工具会更好。你可以添加你的gradle任务之间的依赖,比如当你执行一个任务,其他任务则是第一个完成后执行。通常在Gradle中,通过让工具具有“check”任务来达到工具之间的相互关系:
check.dependsOn ‘checkstyle’, ‘findbugs’, ‘pmd’, ‘lint’现在,当执行“check” 任务的时候,Checkstyle, Findbugs, PMD, and Android Lint将会同时执行。在你执行/ commiting / pushing / ask merge request 之前进行质量检查是一个很棒的方式。
你可以在这个Gradle文件中找到所有任务的一个完整例子。你可以把所有的质量配置文件和Gradle文件从你看到的演示实例中分开,这些演示的实例把一起都放在“config/quality” 文件夹下。
总结
在这篇文章中,利用Gradle对Android使用代码质量检查工具是非常容易。比使用质量工具局部检查您的项目在您自己的计算机上,这些工具可以用于自动构建如Jenkins/Hudson这样的平台,让你自动进行质量检查,同时自动建立过程。执行所有我从CLI展现的测试,如同在 Jenkins/Hudson上执行,简单地执行:
gradle check请随时对这篇文章发表评论,或者问任何有关Android的问题。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
软件测试常用的工具都有哪些?国内外软件测试工具都在这里了2017年常用软件测试工具学习教程大全AutoRunner自动化软件测试工具2016年1月8日V4.0版本已正式发布!软件测试工具TestDirector规范软件测试工具WinRunner的问题整理软件测试工具WinRunner的规则软件测试工具Winrunner TSL命令简介软件测试工具WinRunner脚本测试标准格式使用软件测试工具WinRunner的几点建议软件测试工具WinRunner的工作流程对软件测试工具的认识常用软件测试工具的分析VectorCAST-自动化软件测试工具浅谈软件测试工具在工作中的作用软件测试工具的比较和选择软件测试工具速查手册

sales@spasvo.com