前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Facebook开源静态代码分析工具Infer介绍

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

作者头像
小博测试成长之路
发布2021-03-06 23:00:59
2.5K0
发布2021-03-06 23:00:59
举报
文章被收录于专栏:软件测试学习软件测试学习

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目录),执行下面的命令:

代码语言:javascript
复制
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 检查环境变量是否配置成功

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

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

输入如下命令即可扫描:

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

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

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

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

使用介绍:

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

代码语言:javascript
复制
infer -o ./inferresult_first  -- mvn clean  compileinfer -o ./inferresult_first  -- mvn clean  compile

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

代码语言:javascript
复制
infer -o ./inferresult_second  -- mvn clean  compileinfer -o ./inferresult_second  -- mvn clean  compile

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

代码语言:javascript
复制
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中配置如下:

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

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)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小博测试成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档