Java代码静态检查工具Error Prone

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以上)

正在上传…重新上传取消

image950×766 110 KB


 

( 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,后续会继续和小伙伴们分享并探讨。

参考链接

GitHub - google/error-prone: Catch common Java mistakes as compile-time errors

https://github.com/tbroyer/gradle-errorprone-plugin

http://errorprone.info/ 1

Q

本文转载自 360质量效能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值