java自动推断类型_推断:Facebook的新Java静态分析工具

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如何识别简单的null引用,如何输出我们需要对其进行修复的相关信息,以及如何在保存修复后成功传递该类。 可以在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用于生产环境。 在这种情况下,推断可以帮助您在生产之前预先捕获一些明显的错误。 这可以为您的用户避免一些问题,或者至少可以减少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

java自动推断类型

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

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

相关文章

android官方架构组件,Android 架构组件官方文档01——LifeCycle

使用生命周期感知组件处理生命周期支持生命周期的组件执行操作以响应另一个组件(例如Activity和fragment)的生命周期状态更改。这些组件可帮助您生成组织性更好,并且通常更轻量的代码,这些代码更易于维护。常见的模式是在Activity和fragment的生命周期方…

C语言的核心和灵魂

点击蓝字关注我们提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了。今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。悬空指针C语言中的指针可以指向一块内…

javaone_JavaOne 2015 –提交技巧和建议

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

C语言_结构体总结,附实例源码

点击蓝字关注我们当前文章介绍动态堆空间内存分配与释放,C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点,最后通过一个学生管理系统综合练习结构体数组的使用。1. 动态内存管理C语言代码----->编译----->链接------>可执行…

四大C语言知识总结

点击蓝字关注我们1、#define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时,常量表中并…

jdbc select语句_SELECT语句使用JDBC和Hibernate批量获取

jdbc select语句介绍 现在,我已经介绍了Hibernate对INSERT , UPDATE和DELETE语句的批处理支持,是时候分析SELECT语句结果集的批量提取了。 JDBC ResultSet提供了一个客户端Proxy游标,用于获取当前语句的返回数据。 执行该语句后&…

看懂开源项目,你得熟悉这几个 C++11 新特性

点击蓝字关注我们C11 中增加了许多的新特性。在本文中,我们来聊一下 lambda 表达式,闭包,std::function以及std::bind。lambda 表达式C11 中新增了 lambda 表达式这一语言特性。lambda 表达式可以让我们快速和便捷的创建一个 “函数”。下面是…

5元素升级android6,【五元素ifive X.7】无障碍升级,ifveX详细升级固件教程,快为爱机升级吧。...

android系统的乐趣就是可以随意的刷机,所以拿到如此高配置的ifiveX也是想随时体验最新的android系统。而很多朋友可能只会用设备,刷机这种比较技术性的动作就不太会弄了。也就在这周,才帮同事刷RUU把已经无法启动的G12刷了回来。所以刷机还是…

昆仑通态复制的程序可以用吗_昆仑通态专题(七):MCGS组态软件的设备窗口...

点击上方蓝色字体,关注我们设备窗口是MCGS嵌入版组态软件系统的重要组成部分,在设备窗口中建立系统与外部硬件设备的连接关系,使系统能够从外部设备读取数据并控制外部设备的工作状态,实现对工业过程设备的实时监控与操作。01 设备…

嵌入式C语言程序调试和宏使用的技巧

点击蓝字关注我们01.调试相关的宏在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序…

matlab中欠定方程组超定方程组_《数值天气预报》:球坐标系中的基本方程组

人们是如何预报天气的?目前的预报方法主要有两种:一种是基于由各种探测资料绘制的天气图,结合历史资料进行分析预测;另一种是基于大气方程组,利用数值解法对其进行求解,从而得到未来时刻的大气状态。后者就…

浏览器总是跳转到缓存界面_跳转到企业缓存之前要考虑的事项

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

CryptoTab 服务器_如何架设FTP服务器,如何架设FTP服务器,具体架设方法

FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务。 FTP的全称是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。那么&#xf…

C语言和C++的区别和联系

点击蓝字关注我们C语言和C到底是什么关系?首先C和C语言本来就是两种不同的编程语言,但C确实是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。对于有些人说的C完全就包含了C语言的说法也并没有错。C一开始被本贾尼斯特劳斯特卢普&#…

hibernate语句_如何优化Hibernate EllementCollection语句

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

C++ 虚函数表剖析

点击蓝字关注我们一、概述为了实现C的多态,C使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类&a…

aix pax_通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分

aix paxJBoss Fuse是一个功能强大的分布式集成平台,具有内置功能,可用于针对集成的微服务部署进行集中式配置管理,服务发现,版本控制,API网关,负载平衡,故障转移等。 JBoss Fuse 6.x构建在Fabri…

android王者调不了界面,王者荣耀登录界面怎么改?登录界面更改教程[多图]

王者荣耀登录界面怎么改?许多玩家都想更改自己登陆的界面,但是都不清楚,下面就让安卓乐园小编为大家带来,登录界面更改教程。王者荣耀登录界面怎么改?1、安卓手机打开文件管理,找到根目录下Android/data/co…

y空间兑换代码_Python爬虫实战:QQ空间全自动点赞工具

QQ空间自动点赞前景提要目标确定分析介绍登陆获取cookie寻找XML寻找可变参数获取第一个空间动态寻找点赞所需的URL寻找可变参数功能提升到秒赞全部代码最后还是希望你们能给我点一波小小的关注。奉上自己诚挚的爱心私信小编01即可获取大量Python学习资料前景提要因为我周围的小…

学点 STL C++ 无序容器和元组

点击蓝字关注我们无序容器我们已经熟知了传统 C 中的有序容器 std::map/std::set&#xff0c;这些元素内部通过红黑树进行实现&#xff0c; 插入和搜索的平均复杂度均为 O(log(size))。在插入元素时候&#xff0c;会根据 < 操作符比较元素大小并判断元素是否相同&#xff0c…