推断:Facebook的新Java静态分析工具

如何使用Facebook的Infer改善Java开发工作流程?

如果您与技术话题保持紧密联系(如果您正在阅读此博客,我想您应该这样做),那么您可能听说过Facebook 刚刚向公众发布的新工具:推断。 由于它来自Facebook,所以人们自然会感到好奇,因此我想看看该工具的含义以及它如何对Java开发人员发挥作用。

什么是Facebook的推断?

在评估其潜在用途之前,第一步当然是要了解该工具的作用和用途。 Infer是Facebook最近以开源形式发布的静态分析工具。 专为iOS和Android使用而设计,可用于在应用程序发布之前检测其错误。 Facebook的工程师一直在将Infer用作其Facebook和Instagram应用程序的内部工具,因此已经为大规模移动环境进行了很好的审查。

大致来说,它的工作方式是在编译过程中扫描您的代码,以查找某些预先设想的错误和错误情况。 捕获有关编译过程的信息后,它将对其进行分析以寻找潜在的错误。 如果找到任何内容,它将在您的终端中将它们报告给您,并将它们写入目录文件。 它查找的错误类型的示例包括空指针异常和资源泄漏。

设置Infer需要Python 2.7和Mac OS X或Linux。 要运行它,您可以直接使用javac,也可以使用Maven或Gradle之类的构建工具。 这是一个实际效果的示例:

在此示例中,我们可以看到Infer如何识别简单的空引用,如何输出我们需要对其进行修复的相关信息,以及如何在保存修复后成功传递该类。 可以在Github上找到Infer的完整源代码。

增量与非增量

推断可以增量或非增量方式运行。 两者之间的区别在于Infer是否将删除现有的结果目录。 因此,例如,您可能希望在使用构建系统时以增量方式运行,而在使用单个编译器命令时以非增量方式运行。 要允许增量模式,您只需要添加–incremental标志。

就限制而言,Infer面临着静态分析工具的标准标准。 它可以根据应用程序的编码方式以及与第三方代码的交互方式报告错误警报和/或遗漏错误。 它无法检测的问题范围也很有限,因为它无法以动态方式测试您的代码。 它测试的错误类型也有技术限制。 例如,Infer今天不测试数组边界错误或强制转换异常。

这对Java开发人员意味着什么?

Infer专为移动用途而设计,但对于纯Java而言也非常适用。 由于可以从Maven之类的构建工具运行它,因此将其适应您的工作流程并非易事。 当然,问题是它是否值得使用。

该问题的答案取决于您对静态分析工具的立场。 显然,Infer并不是第一个可用于Java的静态分析工具(例如, FindBugs是一种流行的工具),也不是唯一的开源工具。 但是,它是唯一来自Facebook的网站,它可能会随身携带一定的缓存。 随着Facebook在其巨型应用程序上的广泛使用,Infer已受到大规模抨击。

但是,Infer面对Java的一些语言限制。 它无法处理Java的并发实用程序或诸如算术之类的功能。 其中一些问题对于其他静态分析工具也同样很麻烦,但值得牢记。

工作流程示例

静态分析工具通常适合在开发的中间阶段。 实际上,它们是开发过程的过渡步骤或作为CI / CD工作流一部分的测试工具。 他们无法替换开发人员中的调试器,因为必须对其进行编译才能正常工作,并且它们不能替换生产中的错误跟踪器,因为只有当代码进入生产环境并暴露于动态环境后,才会出现大量错误。输入。 但是,在这两种环境之间有一个空间,可以使用像Infer这样的工具。

例如,您可以选择将Infer作为中间步骤,将其与开发环境选择的IDE结合使用,并将Takipi用于生产环境。 在这种情况下,Infer可以帮助您在生产之前预先捕获一些明显的错误。 这可以为您的用户避免一些问题,或者至少可以减少Takipi仪表板中的某些条目。 或者,如果您正在使用Jenkins运行连续部署模型,则可以在每次发布推送后运行Infer,以查看是否有新的事物引发明显的危险信号。

结论

生产工具书 当像Facebook这样的公司发布与Java兼容的开源工具时,值得一看。 Infer不是专门为Java构建的,但是它仍可用于Java应用程序中的静态代码分析。 它有一定的局限性,但也有一些很好的潜在用途,并且在将来应该会继续改进。 如果您尝试使用它,请让我知道您在评论中的想法。

使用正确的工具对于成功至关重要,要确保在代码交付生产时被覆盖,请查看生产工具权威指南中的警报工具一章 。

翻译自: https://www.javacodegeeks.com/2015/06/infer-a-look-into-facebooks-new-java-static-analysis-tool.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 转换xslt,XSLT xsl:template 元素

元素元素用于构建模板。match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match"/" 定义整个文档)。好了,让我们看一下上一节中的 XSL 文件的简化版本:xmlns:xsl&qu…

开发一个大数据网站做的铺垫

知名大数据分析网站推荐8个 用到的大数据5个关键技术 人工智能6大关键技术

如何优化Hibernate EllementCollection语句

介绍 Hibernate支持三种数据映射类型 : 基本 (例如String,int), Embeddable和Entity 。 通常,数据库行映射到Entity ,每个数据库列都与一个基本属性关联。 当将多个字段映射组合到一个可重用的组…

使用Eclipse将包含第三方jar库的java工程打包成jar包

1、MANIFEST.MF 在工程下新建一个MANIFEST.MF的文件,项目结构如下。 M.java package cn.hwd.main;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.s…

史上最牛逼的导航网站(很全很详细)

今天,给大家推荐47个聚合型的导航网站 每一个都收录上百个网站,1个能顶100个,丝毫没有夸张的成分。 (推荐收藏) 设计师导航网站 01 优设导航 https://hao.uisdc.com/ 设计师必备的导航网站,包含设计工具、素材资源、字体设计、配色方案、酷站模板等。 界面清晰无广告…

codeforces 337D Book of Evil(dp)

转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Book of Evil Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n settlements numbered from 1 to n. Moving through the swamp is ver…

html 如何去滚动条,css怎么去除滚动条?

css可以通过overflow与scroll属性来实现去除滚动条效果。css设置overflow属性为hidden可以实现去除滚动条或设置scroll属性为no。1、这个可以用CSS实现 你可以用JS操作CSS方法一:设置CSS属性overflow为hidden。<body style"overflow:hidden"&a…

阿里云ECS服务器连接不上3306端口?

连不上3306端口一般有三种情况。 1 .本机上防火墙没有开放3306端口,需要自己配置入站规则,或者关闭本机防火墙。 2 .linux 服务器上的 iptables 防火墙没有开放3306端口, 或者关闭服务器上的防火墙。 打开 /etc/sysconfig/iptables 在 "-A INPUT –m state --sta…

UGUI 锚点

今天我们来学习下UGUI的锚点, 他是做什么的呢? 基本上就是用于界面布局. 1. 1个控件对应1个描点. 2. 描点分成四个小叶片, 每1个叶片 对应 控件四边框的角点 3. 不管屏幕如何放大缩小, 控件四边点与 每一个叶片对应的四边点距离不变.(换句话说,按钮的中心与描点的…

语文课外运用计算机探究,[小学语文]计算机在小学写字教学中的运用之我见

[小学语文]计算机在小学写字教学中的运用之我见随着经济的快速发展,教育也出现了加快发展、加快改革的势态。随着教育技术的不断增加,教学设备得以不断更新,教学手段变得更加现代化。特别是我们火星小学,计算机辅助教学已成为学校…

glassfish_具有GlassFish和一致性的高性能JPA –第1部分

glassfish您以前听说过连贯性吗? 可能是。 它是那些著名的内存网格解决方案之一,这些解决方案承诺了出色的快速数据访问和无限空间用于您经常使用的数据。 其中一些众所周知的竞争对手是Infinispan , Memcached和Terracotta Ehcache 。 它们都…

推荐几个开发高薪技术产品(APP、网站、小程序)的原型设计工具

工欲善其事必先利其器。作为一名产品经理,如何才能快速地设计一款产品?一款优秀的产品原型工具必不可少。如何才能选择一款适合自己的原型工具呢?Benson特意整理了11款产品原型工具以供参考,并学习曲线,性价比&#xf…

APP界面常用的五种颜色搭配

众所周知,每一种颜色带给用户的视觉感受也是不同的。现在人们对手机的依赖程度,就能看到手机中APP的发展前景,那今天就跟大家聊聊如何通过颜色搭配的不同来进行移动端APP界面的布局和排版设计。移动端UI界面中通常是需要选取主色,…

JavaOne 2015 –提交的技巧和建议

大家都知道JavaOne 。 感觉就像一直在那儿。 而且,即使我们跌宕起伏,而地理位置也不是我们想要的那样,旧金山也很昂贵,而且和。 这是有关各种Java的顶级会议。 今年又再次成为程序委员会(“ Java,DevOps和云…

计算机网络课程计划,计算机网络教学计划2017

计算机网络教学计划2017教学计划(课程计划)是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不同课程在管理学习方式的要求及其所占比例。下面是小编整理的计算机网络教学计划范文,希望对你有帮助!计算机网络教学计划(一)一、…

微信服务商开发能力说明文档

最近看到很多人复制我的这篇文章,我也是醉了,你起码搞个转载,注明出处, 然后设置付费文档,发现也不好使,文章比较简短,别人也能免费看到我的文章全部内容, 无奈之下,再次打开这篇文章开始编辑, 前面增加一些废话, 看看有多少人复制我的文档,我都不想评论,找各…

html中scope的作用,AngularJS 作用域(Scope)

AngularJS 作用域(Scope)作用域(Scope)是一个存储应用数据模型的对象为 表达式 提供了一个执行上下文作用域的层级结构对应于 DOM 树结构作用域可以监听 表达式 的变化并传播事件作用域有什么作用域提供了 ($watch) 方法监听数据模型的变化作用域提供了 ($apply) 方法把不是由A…

跳转到企业缓存之前要考虑的事项

介绍 关系数据库事务是ACID ,强大的一致性模型简化了应用程序开发。 由于启用Hibernate缓存是一项配置 ,因此,只要数据访问层开始显示性能问题,就转向缓存非常吸引人。 添加缓存层确实可以提高应用程序性能,但是它有其…

(027) Linux之shell分支if语句

十年运维系列之基础篇 - Linux 作者:曾林 联系:1494445739qq.com 网站:www.jplatformx.com 版权:文章未经同意请勿转载 一、使用if语句 通过shell,我们可以来写出这样的一个使用if语句的shell脚本片段。如下所示&…

解锁计算机桌面,电脑锁屏按什么键解锁

按回车键即可解锁。具体的解锁过程如下1、先将电脑设置一个密码,再使用电脑锁屏快捷键将屏幕锁掉,最后按回车键解锁。首先在电脑桌面上点击开始菜单,找到控制面板点击并进入。2、然后在弹出的界面找到“用户账户和家庭安全”,并单…