静态代码分析工具介绍:
1.CheckStyle
CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来.
CheckStyle检验的主要内容
·Javadoc注释
·命名约定
·标题
·Import语句
·体积大小
·空白
·修饰符
·块
·代码问题
·类设计
·混合检查(包括一些有用的比如非必须的System.out和printstackTrace)
从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范的检查
使用配置:
1.写规则文件
1.1.规则文件demo/config/quality/checkstyle/square-picasso-checkstyle.xml(demo/config/quality/checkstyle是我自定义的文件夹路径)
点击下载:https://pan.baidu.com/s/1boXFrxt
了解规则文件配置:http://blog.csdn.net/yang1982_0907/article/details/18086693
1.2.抑制警告规则demo/config/quality/checkstyle/suppressions.xml
点击下载:https://pan.baidu.com/s/1dE7mOYd
2.在工程的检查项目的build.gradle下配置
apply plugin: 'checkstyle'
task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/config/quality/checkstyle/square-picasso-checkstyle.xml")//指定规则 configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath
source 'src'
include '**/*.java' //这里选择了所有的文件,你也可以选定单个文件,如果选定多个文件,就用逗号隔开就行,例如'**/MainActivity.java','**/User.java'
exclude '**/gen/**'
classpath = files()
}
执行gradle之后,在build目录下生成报告
2.findbugs
FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅参考资料)
在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。
使用配置:
2.1.配置过滤文件
点击下载:https://pan.baidu.com/s/1jHHmdBg
2.2.在工程的检查项目的build.gradle下配置
task findbugs(type: FindBugs, dependsOn: assembleDebug) {
ignoreFailures = false
effort = "max"
reportLevel = "high"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")//配置过滤文件
classes = files("${project.rootDir}/datacollect/build/intermediates/classes")
//这里选择的是所有的class,你也可以只选单个或者多个文件,例如
// files("${project.rootDir}/bsgamesdk_library/build/intermediates/classes/debug/com/example/demo/MainActivity .class") + //files("${project.rootDir}/bsgamesdk_library/build/intermediates/classes/debug/com /example/demo/User.class")
source 'src'
include '**/*.java' //配置源文件,这里配置的所有文件,你也可以配置单个或者多个
// '**/ MainActivity .java','**/User.java'
exclude '**/gen/**'
//报告导出
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/findbugs/findbugs.xml"//配置report输出路径
}
html {
destination "$project.buildDir/reports/findbugs/findbugs.html"//配置report输出路径
}
}
classpath = files()
}
执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图
3.pmd
PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:
® 潜在的bug:空的try/catch/finally/switch语句
® 未使用的代码:未使用的局部变量、参数、私有方法等
® 可选的代码:String/StringBuffer的滥用
® 复杂的表达式:不必须的if语句、可以使用while循环完成的for循环
® 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs
® 循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象
@ 资源关闭:Connect,Result,Statement等使用之后确保关闭掉
此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作
3.1.配置规则文件
点击下载:https://pan.baidu.com/s/1ge7iNPD
3.2.在工程的检查项目的build.gradle下配置
task pmd(type: Pmd) {
ignoreFailures = false
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ruleSets = [] //这里其实没有配置订制的规则
source 'src'
include '**/*.java'//指定文件检查,这里是所有文件,可以指定单个或者多个,例如:'**/MainActivity.java','**/User.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"
}
}
}
执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图
4.lint
Android Lint是一个静态的代码分析工具,它可以检测Android项目源文件中潜在的bug,也可以在正确性、安全性、性能、可用性、可访问性和国际化等方面进行优化。正如官方网站所说,Android Lint是另一种静态分析工具,专门为Android服务。它是非常强大的,能给你大量的建议以提高你的代码质量。
规则下载:https://pan.baidu.com/s/1dFxZAEH
android {
lintOptions {
abortOnError true
xmlReport false
htmlReport true
lintConfig file("${project.rootDir}/config/quality/lint/lint.xml") //配置lint检查项
htmlOutput file("$project.buildDir/reports/lint/lint-result.html")
xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")
}
}
执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图