微信号:gh_1cb598337696

介绍:Qtest,是360公司唯一的服务端测试团队.我们的理念是做一个会编程的测试工程师,做一个不断思考,全力保证产品质量的测试工程师.

Java代码静态检查工具Error Prone

2018-12-26 17:13 newbeetester

点击蓝字关注这个神奇的公众号~

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

http://errorprone.info/


Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!


陪伴是最长情的告白

每日为你推送最in的测试技术

识别二维码

关注我们

 
Qtest之道 更多文章 奇效周年庆-听说你和奖品只差一个手指的距离? 接口测试--参数实现MD5加密签名规则 最大连接数限制因素 浅谈接口自动化测试 【转发有奖】骚年,性能优化了解一下——360移动技术开放日
猜您喜欢 高级PHP工程师所应该具备一些技能 iOS 视图,动画渲染机制探究 3月4号阿里百川厦门创业基地启动仪式暨创业大赛欢迎您 Linux自主访问控制机制模块之详细描述-函数实现机制(12) 数组的函数式编程与Math对象的奇淫巧技