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--day69--pythonDjango终端打印SQL语句、在Python脚本中调用Django环境

    Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...

  2. laravel .env 文件的使用

    转载地址  http://www.cnblogs.com/Eden-cola/p/DotEnv-in-lumen.html umen 是 laravel 的衍生品,核心功能的使用和 laravel 都 ...

  3. [转]SpringBoot整合Swagger2以及生产环境的安全问题处理

    1.创建springboot项目 https://www.cnblogs.com/i-tao/p/8878562.html 这里我们使用多环境配置: application-dev.yml(开发环境) ...

  4. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令

    引言: Tensorflow大名鼎鼎,这里不再赘述其为何物.这里讲描述在安装python包的时候碰到的“No matching distribution found for tensorflow”,其 ...

  5. H3C 路由表查找规则(1)

  6. Spring激活profile的方式

    Spring中激活profile的方法:设置spring.profiles.active和spring.profiles.default这两个属性 设置激活profile属性的地方(优先级由高到底) ...

  7. 解决 npm run dev b报错 “'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。”

    摘自:https://www.cnblogs.com/laraLee/p/9174383.html 前提: 电脑已经安装了nodeJS和npm,  项目是直接下载的zip包. 在项目目录下运行“npm ...

  8. SpringMVC 非注解配置

    web.xml配置: <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>o ...

  9. 2018-8-10-C#-使用Emit深克隆

    title author date CreateTime categories C# 使用Emit深克隆 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17: ...

  10. 遍历$.map和$.each

    <body> <p style="color:red;"><b>Values: </b></p> <form> ...