infer 代码静态分析

静态代码分析工具,主要是为了提高我们的代码质量。
通常,我们提高代码质量的方式是通过CodeReview,但是这个过程耗费的人工和时间往往较大。并且随着代码量的增加人肉检测起来会更加费劲。不要指望测试同学能把所有的问题都测试到,潜在问题就更别指望了。定制一些规则,让机器帮我们完成一部分代码质量的检测,从而提高我们的工作效率。
 
 
都能检测啥:

潜藏的问题:
循环引用,未使用的代码,潜在的崩溃,命名规范等等
 
为优化决策提供依据:
圈复杂度:圈选复杂度指的是遍历一个模块时的复杂度,这个复杂度由if、switch、while、for循环,运算符&&||,以及决策点共同决定的,圈选复杂度在4以内低复杂度,5到7是中等复杂度,8到10是高复杂度,再往上就得考虑优化了。因为复杂度过高,可能需要更多的测试情况了。复杂度这个人工就不太好检测了。
NSPath:
一个方法所有可能执行的路径数量,执行路径太多,那么业务逻辑可能就太复杂了,是否考虑优化?
NCSS度量:
NCSS度量指的是不包含注释的代码行数,如果检测到多行代码没有注释,这种的就不太有利于代码的维护了
 
 
 
什么是Infer?
Infer是Facebook开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题。目前Facebook使用该工具来分析Facebook的App,包括Android、iOS、FacebookMessenger和Instagram等等。
 
官网:
https://fbinfer.com/
中文版:
https://infer.liaohuqiu.net/
 
Infer特性
1、支持Android和JavaInfer可检查Android和Java代码中的NullPointException和资源泄露。
2、支持iOS除了以上,Infer还可发现iOS和C代码中的内存泄露。
3、效率高,规模大,几分钟能扫描数千行代码;
4、支持增量及非增量分析
 
 
Infer工作流程
第一阶段,转化阶段:将源代码转成Infer内部的中间语言。类C语言使用Clang进行编译,java语言使用javac进行编译。编译的同时转成中间语言,输出到infer-out目录。
第二阶段,分析阶段分析infer-out目录下的文件,分析每个方法,如果出现错误会继续分析下一个方法,中间不会中断,但是会记录下出错的位置,最终将所有的错误进行汇总输出。•Infer检测的结果在infer-out目录下是JSON格式,叫report.json
Infer安装
环境要求,Python版本:大于等于2.7
•第一种:二进制文件安装从https://github.com/facebook/infer/releases页面获取最新版本infer-osx-vXX.tar.xz (以osx标识),安装。
open ~/.bash_profile
添加

export PATH="${PATH}:/'pwd'/infer-osx-v0.1.0/infer/infer/bin"

保存

source ~/.bash_profile

 
 
第二种:源码安装
1.1安装brew  /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
1.2安装inferbrew install infer 安装达到100%后可通过`infer –version`查看infer版本信息1.3配置到环境变量
echo "export PATH=\"\$PATH:pwd/infer/infer/bin\"" \ >> ~/.bash_profile &&source ~/.bash_profile
 
 
 
 
 
 
Infer进行检测
以下以iOS项目为例
1.cd  到项目目录下面
cd  ........
2.clean 项目
3.开始检测
infer --keep-going --no-xcpretty -- xcodebuild -workspace
CodeDetectionDemo.xcworkspace -scheme CodeDetectionDemo -configuration Debug -
sdk iphonesimulator
 
或者
 

infer --keep-going --no-xcpretty -- xcodebuild -project CodeDetectionDemo.xcodeproj -config Debug -target CodeDetectionDemo

注意事项:项目路径中出现中文会导致检测失败
 
 
 
检测结果
成功,有错误和修改完成之后

infer 代码静态分析的更多相关文章

  1. Understand:高效代码静态分析神器详解(转)

    之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...

  2. C/C++代码静态分析插件 SourceInsight_Scan

    sourceinsight-scan 是一款集成在 SourceInsight 中的c/c++代码静态分析插件,集成了cppcheck,coverity,pclint等业界优秀的静态分析工具的优点. ...

  3. 代码静态分析工具PC-LINT安装配置

    代码静态分析工具PC-LINT安装配置--step by step                             作者:ehui928                             ...

  4. Understand:高效代码静态分析神器详解(一)

    Understand:高效代码静态分析神器详解(一) Understand   之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便 ...

  5. 利用idea的code inspect功能进行代码静态分析

    利用idea.phpstorm系列的ide的code inspect功能可以开发出适用于各种编程语言的代码静态分析工具.这个功能大家可以自己实现扩展规则,规则也使用了visitor模式,规则里对关心的 ...

  6. Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/

    Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/ ===== 之前用Windows系统,一 ...

  7. Understand:高效代码静态分析神器详解(一)【转】

    转自:http://www.codemx.cn/2016/04/30/Understand01/ 之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面, ...

  8. C++ 代码静态分析工具cppcheck【转】

    转自:http://blog.csdn.net/chen19870707/article/details/42393217 权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] c ...

  9. 代码静态分析工具-splint的学习与使用[转]

    代码静态分析工具--splint的学习与使用[转] 引言 最近在项目中使用了静态程序分析工具PC-Lint,体会到它在项目实施中带给开发人员的方便.PC-Lint是一款针对C/C++语言.window ...

随机推荐

  1. River Hopscotch-[二分查找、贪心]

    Description Every year the cows hold an event featuring a peculiar version of hopscotch that involve ...

  2. 2018-8-10-win10-uwp-x_Bind-无法获得资源

    title author date CreateTime categories win10 uwp x:Bind 无法获得资源 lindexi 2018-08-10 19:17:19 +0800 20 ...

  3. P1020 从大到小排序

    题目描述 给你n个整数,请你按照从大到小的顺序输出它们. 输入格式 输入的第一行包含一个整数 \(n(1 \le n \le 10^3)\) ,用于表示元素的个数. 输入的第二行包含 \(n\) 个整 ...

  4. 打地鼠游戏(2)之定义地鼠函数及函数原型 prototype

    在JavaScript中,prototype对象是实现面向对象的一个重要机制. 每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的.pr ...

  5. 洪强宁:宜信PaaS平台基于Calico的容器网络实践

    洪强宁:宜信PaaS平台基于Calico的容器网络实践   本文内容来自由七牛云主办的ECUG Con,独家授权InfoQ整理完成 容器云面临的网络挑战 在传统的IDC的架构里面网络是很重要的事情,在 ...

  6. Flask学习-Virtualenv

    http://www.pythondoc.com/ VirtualEnv Virtualenv用于同一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够: ...

  7. looping through multiple lists

    map: 最大长度输出: zip: 最短输出: third: 有序排列: a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] print "Map:" ...

  8. java面试-泛型

    1.什么是泛型?泛型有什么作用?   泛型就是参数化类型,也就是所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.   在泛型出现之前, ...

  9. DEVOPS技术实践_14:使用docker部署jenkins

    一 基础环境准备 [root@node6 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node6 ~]# yum -y ...

  10. HTTP 安全头配置

    在本篇中,我将介绍常用的安全头信息设置,并对每个响应头设置给出一个示例. HTTP安全头说明 Content-Security-Policy 内容安全策略(CSP)常用来通过指定允许加载哪些资源来防止 ...