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. Python--day26--类方法和静态方法

    类方法: 静态方法:

  2. 京东基于Spark的风控系统架构实践和技术细节

    京东基于Spark的风控系统架构实践和技术细节 时间 2016-06-02 09:36:32  炼数成金 原文  http://www.dataguru.cn/article-9419-1.html ...

  3. java TreeSet的排序之定制排序

    TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2 ...

  4. P1004 奶牛与牧场

    题目描述 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供 \(a\) 头牛吃 \(b\) 天,或可供 \(c\) 头牛吃 \(d\) 天,那么,这片牧场每天新生的草量最多可供几头牛吃1天? 输 ...

  5. linux I/O 内存分配和映射

    I/O 内存区必须在使用前分配. 分配内存区的接口是( 在 <linux/ioport.h> 定义): struct resource *request_mem_region(unsign ...

  6. Python中&、^与and、or

    导火索:给定两个列表,怎么找出他们相同的元素和不通的元素? list1 = [1, 2, 3, 4, 57, 8, 90] list2 = [2, 3, 4, 5, 6, 7, 8] lis = li ...

  7. linux 注册一个 PCI 驱动

    为了被正确注册到内核, 所有的 PCI 驱动必须创建的主结构是 struct pci_driver 结构. 这个结构包含许多函数回调和变量, 来描述 PCI 驱动给 PCI 核心. 这里是这个结构的一 ...

  8. Qt4.5 QFrame(相当于Delphi里的TPanel,有各种凹凸方式)

    QFrame类是有框架的窗口部件的基类. QPopupMenu使用这个来把菜单“升高”,高于周围屏幕.QProgressBar有“凹陷”的外观.QLabel有平坦的外观.这些有框架的窗口部件可以被改变 ...

  9. FCKeditor使用

    fckeditor - (1)资料介绍与安装 fckeditor介绍  FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.  1.fckeditor官网:http://ww ...

  10. 苹果笔记本修改pycharm for mac 修改字体大小

    实在是隐藏的太深了,无语