Facebook开源静态代码分析工具Infer介绍

简介: Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。

Facebook开源的静态代码分析工具Infer使用指南



01

什么是Infer?


Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。

官网地址如下:https://infer.liaohuqiu.net/



02

如何安装Infer?


在github上下载infer的安装包,目前infer只支持mac和linux系统。下载地址如下:

https://github.com/facebook/infer/releases

github上面下载比较慢,我下载了一个0.17.0的版本,存放到网盘了,可以从网盘下载:

链接:https://pan.baidu.com/s/1jkpoLXjMmwmrEJVPb6PZcA

提取码:1234



linux上安装步骤如下:


将下载好的linux系统下的安装包传到linux服务器(假设约定存放在/root/tools目录),执行下面的命令:

cd /root/tools
xz -d infer-linux64-v0.17.0.tar.xz (先转成tar格式)
tar xvf infer-linux64-v0.17.0.tar
cd /root/tools/infer-linux64-v0.17.0
echo "export PATH=\"\$PATH:`pwd`/bin\"" \ >> ~/.bash_profile &&
source ~/.bash_profile

如果你是在 linux 中,如果 ~/.bash_profile 不存在的话,你也许需要把 ~/.bash_profile 替换成 ~/.bashrc



执行完之后,输入 infer --version 检查环境变量是否配置成功


微信图片_20220113173729.png


03

如何使用Infer进行maven工程的代码扫描?


进入到代码pom.xml文件所在目录

输入如下命令即可扫描:

infer --  mvn compile  (执行该命令会默认在当前目录下生成一个infer-out的报告目录),该目录下会有一个bugs.txt和report.json,可以用来查看扫描出来的bug和报告信息。



04

如何使用Infer进行多个版本扫描结果对比?


infer扫描结果默认保存在infer-out文件夹中,要对比多个版本的扫描结果的话,可以将不同的扫描结果存放于不同的文件夹中。

infer可以使用-o参数指定报告输出的文件夹名称。


使用介绍:

扫描第一次,指定生成报告的位置:

infer -o ./inferresult_first  -- mvn clean  compileinfer -o ./inferresult_first  -- mvn clean  compile

开发修复bug后,进行第二次扫描:

infer -o ./inferresult_second  -- mvn clean  compileinfer -o ./inferresult_second  -- mvn clean  compile

然后使用infer的reportdiff命令,输出两次infer扫描的对比结果,命令如下:

infer reportdiff --report-current inferresult_second/report.json --report-previous inferresult_first/report.json

使用上面命令,会在 infer-out中多出来一个文件夹differential,文件中有三个json文件分别为:

introduced.json:新增问题

fixed.json:新版本修复问题

preexisting.json:一直存在问题



05

如何集成jenkins进行持续集成?


理论上,一切支持命令行操作的工具都支持集成到Jenkins中。infer集成jenkins的操作就不详细介绍了,添加一个执行shell脚本的步骤,直接执行shell命令即可。

下面,主要介绍一下,如何在jenkins上展示infer的报告:加--pmd-xml参数生成xml报告

先安装PMD插件,然后在jenkins中配置如下:


微信图片_20220113173734.png


运行后,jenkins中对应job的左侧列表中会出现PMD Warnings的选项,点击即可看到详细的扫描结果:


微信图片_20220113173737.png


微信图片_20220113173740.png


06

课后扩展


以上只是基于linux系统简单介绍一下Facebook公司的开源代码扫描工具Infer的简单用法,让大家可以有个简单的了解。遗留一些问题感兴趣的朋友可以继续扩展学习:

1、mac电脑上如何搭建环境

2、除了扫描maven工程的java代码外,gradle编译的工程以及ios代码如何扫描

3、可以跟其他的代码扫描工具进行一下对比,看看各自的优缺点以及使用场景。比如sonar,findbugs、checkstyle、fortify等。

4、如何去采集jenkins上配置的扫描job的数据,分析项目各版本用工具扫描出来的代码问题的一个趋势和遗留问题 ,再了解一下这个工具是否会有误报的情况,如果存在误报,是否可以设置过滤?

更多Infer学习资料请访问官网(https://infer.liaohuqiu.net/docs/getting-started.html



相关文章
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
201 0
|
缓存 数据可视化 测试技术
开源多年后,Facebook这个调试工具,再登Github热门榜
让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
|
前端开发 JavaScript 测试技术
Facebook 开源可扩展文本编辑器 Lexical
Meta(原 Facebook)近日开源可扩展文本编辑器 Lexical,源代码托管在 GitHub 上采用 MIT 许可证。
546 0
Facebook 开源可扩展文本编辑器 Lexical
|
机器学习/深度学习 人工智能 文字识别
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
近日,Facebook的AI研究院发表了一篇论文「DIFFERENTIABLE WEIGHTED FINITE-STATE TRANSDUCERS」,开源了用于图网络建模的GTN框架,操作类似于PyTorch这种传统的框架,也可以进行自动微分等操作,大大提高了对图模型建模的效率。
344 0
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
|
移动开发 Java 程序员
Facebook 将神奇动画引擎 Pop 开源了!
Facebook 2月发布的新闻类应用Paper,因为其灵动的用户界面和交互,成为近来最令人眼前一亮的移动产品之一。 而这个产品的背后是2011年Facebook收购的Push Pop Press,创始人是分别在Apple任设计师和工程师的Mike Matas与Kimon Tsinteris。他们的合作者还有传奇人物Bret Victor。他们为美国前副总统Al Gore开发的电子书Our Choice当时就曾技惊四座。
347 0
Facebook 将神奇动画引擎 Pop 开源了!
|
PHP C语言 开发者
Facebook 发布开源编程语言 Hack
Facebook周四发布一款名为“Hack”的全新编程语言,并声称该语言将能使代码的编写和测试更加高效快速。Facebook已在公司内部使用该语言超过一年时间,现在将以开源的形式将其正式发布。
430 0
Facebook 发布开源编程语言 Hack
|
存储 安全 算法
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
现如今很多的智能手机,都支持把应用安装到SD卡中,这会帮用户节省很多空间,但是许多黑客也会利用这一点窃取用户的隐私。一般情况下,应用都有SD卡的读写权限,当然他也可以读取到其他应用,存储在SD卡上的数据。这意味着如果你安装了恶意的应用,他就可以轻易的获取SD卡上的所有数据。
382 0
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
|
SQL 存储 前端开发
Facebook 在 2013 年的开源贡献
自从 Facebook 的第一行PHP代码,第一句 MySQL 的 INSERT 语句以来,开源就已经是我们工程哲学中的一个重要的部分。
206 0
Facebook 在 2013 年的开源贡献
|
SQL 存储 分布式计算
Facebook 正式开源其大数据查询引擎 Presto
Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析。该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Facebook 雇员中使用,运行超过 30000 个查询,每日数据在 1PB 级别。Facebook 称 Presto 的性能比诸如 Hive 和 Map*Reduce 要好上 10 倍有多。
362 0
Facebook 正式开源其大数据查询引擎 Presto
|
安全 前端开发 API
KVOController:facebook 开源的 KVO(Key-value Observing)工具
KVOController 是一个简单安全的 KVO(Key-value Observing,键-值 观察)工具,用于 iOS 和 OS X 应用开发中,开源自 facebook。
276 0