01
什么是 Error Prone?
谷歌2015年开源的java静态检查工具,可以轻松集成于现有的编译环境中,帮助开发者在编译期间发现代码缺陷,针对java和Android十分适用。
- Hook标准的构建过程,代码无侵入- 错误产生后及时告知- 提供完善的修复建议,并且允许基于此构建工具
示例:
02
如何使用?
1、添加依赖
Gradle配置方案是由外部贡献(https://github.com/tbroyer/gradle-errorprone-plugin)
注意:
Gradle插件依赖Gradle内部API,只支持Gradle2.0以上的对应版本,且需要要与javac版本对应(JDK7以上)
( Maven、ANT配置见官方文档:http://errorprone.info/docs/installation)
2、控制检查项
Error Prone中使用bug模板的方式进行检查,允许用户启用和禁用特定检查项,可以配置选项来旋盖默认的严重级别。
Javac的命令行选项如下
-Xep:<checkName>[:severity]
CheckName是检查规范的名称,例如上面例子中的” StringSplitter”;
Serverity是{“OFF”,“WARN”,“ERROR”}之一,ERROR会中断编译并告警,WARN会提示告警但不会中断编译,其他值会导致编译错误。
如果一个检查项被重复设置,则使用最后一次设置的severity生效。
使用gradle中的设置举例:
注: D:\AndroidTest\leakcanary-1.5.4\leakcanary-android\src\main\java\com\squareup\leakcanary\internal\LeakCanaryInternals.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
1 个错误
3、过滤检查目录
我们还可以自定义过滤检查目录来减少无必要的检查与误报。例如官方的例子,我们在complieArgs添加-XepExcludedPaths 标志,以过滤包含build/generated的路径下所有文件
4、优势与缺陷
对比老牌的FindBugs,Error Prone有很多优点:
- Google主导并开源的项目,社区活跃度很高,有详细丰富的文档指导- 提供简单但明确的修复指导- Bug Partten的检查模式,不必维护xml- 不检查字节码,hook到编译过程中,编译即体现,可以尽早发现问题- 支持插件化的自定义检查标准,已有基于Error Prone开源项目NullAway
缺点: - 不支持多语言- 仅支持JDK7以上,且与Gradle版本的协调稍显繁琐- 目前源码中已有的检查标准比较谨慎,只有100左右的告警,不如FindBugs丰富- 会增加编译时间
5、应用与前景
使用Error Prone可以尽早捕获最基础的错误,完全符合QA对于挖掘有价值bug的理念。在项目的debug阶段,Error Prone的介入可以大幅降低由基础编码错误导致的bug发生,并培养开发形成良好的编程规范。在Release编译时关闭Error Prone,配合Findbugs进行检查形成从开发到CI门禁的质量保证流程。
年轻活跃的开源社区是 Error Prone最大的优势,有着广阔的探索视野,且Google、Uber、Flipboard对于 Error Prone丰富的实践经验,有力的保证了该项目的应用前景。QTest已经在测试开发内部探索实践Error Prone,后续会继续和小伙伴们分享并探讨。
参考链接
https://github.com/google/error-prone
https://github.com/tbroyer/gradle-errorprone-plugin
Q
本文转载自 360质量效能