iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?

NCSS度量
NPath复杂度
圈复杂度
资源和内存泄露
空指针访问
Clang静态分析器
Infer
OCLint
功能有限
可定制性中等
支持增量分析
效率高
分析阶段
转化阶段
直接安装binary releases
源码安装
检查侧重点
检查规则少
支持命令行
集成度高
分析阶段
转化阶段
控制流程图
功能接口
checkers
分析引擎
scan-view
scan-build
使用Homebrew
无法检查特定类型的错误
耗时
检查代码规范和可维护性
可用性问题
盲点检查
提高工程质量
发现代码错误
第三方静态检查工具
Xcode自带的静态分析工具Analyze
代码调试技术
Clang提供的能力
推荐使用Infer
三款工具比较
缺点
优点
工作原理
使用
安装方式
使用OCaml语言编写
Facebook开源
缺点
优点
工作原理
示例
checker
常用工具
优化
构建在Clang和LLVM之上
使用
安装方法
规则说明
安装方式
71条规则
基于Clang Tooling
缺陷
功能
静态分析
课后作业
小结
Infer
Clang静态分析器
OCLint
静态分析器
iOS开发的静态分析器,应该如何选择?

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。
随着业务开发迭代速度越来越快,完全依赖人工保证工程质量也变得越来越不牢靠。所以,静态分析,这种可以帮助我们在编写代码的阶段就能及时发现代码错误,从而在根儿上保证工程质量的技术,就成为了 iOS 开发者最常用到的一种代码调试技术。
Xcode 自带的静态分析工具 Analyze,通过静态语法分析能够找出在代码层面就能发现的内存泄露问题,还可以通过上下文分析出是否存在变量无用等问题。但是,Analyze 的功能还是有限,还是无法帮助我们在编写代码的阶段发现更多的问题。所以,这才诞生出了功能更全、定制化高、效率高的第三方静态检查工具。比如,OCLint、Infer、Clang 静态分析器等。
一款优秀的静态分析器,能够帮助我们更加全面的发现人工测试中的盲点,提高检查问题的效率,寻找潜在的可用性问题,比如空指针访问、资源和内存泄露等等。
同时,静态分析器还可以检查代码规范和代码可维护性的问题,根据一些指标就能够找出哪些代码需要优化和重构。这里有三个常用的复杂度指标,可以帮助我们度量是否需要优化和重构代码。
圈复杂度高。圈复杂度,指的是遍历一个模块时的复杂度,这个复杂度是由分支语句比如 if、case、while、for,还有运算符比如 &&、||,以及决策点,共同确定的。一般来说,圈复杂度在以 4 以内是低复杂度,5 到 7 是中复杂度,8 到 10 是高复杂度,11 以上时复杂度就非常高了,这时需要考虑重构,不然就会因为测试用例的数量过高而难以维护。
而这个圈复杂度的值,是很难通过人工分析出来的。而静态分析器就可以根据圈复杂度规则,来监控圈复杂度,及时发现代码是否过于复杂,发现问题后及早解决,以免造成代码过于复杂难以维护。
NPath 复杂度高。NPath 度量是指一个方法所有可能执行的路径数量。一般高于 200 就需要考虑降低复杂度了。
NCSS 度量高。NCSS 度量是指不包含注释的源码行数,方法和类过大会导致代码维护时阅读困难,大的 NCSS 值表示方法或类做的事情太多,应该拆分或重构。一般方法行数不过百,类的行数不过千。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

iOS开发中的静态分析工具是开发者在编写代码阶段及时发现代码错误、提高工程质量的重要利器。本文详细介绍了静态分析器的作用和常用的复杂度指标,如圈复杂度、NPath复杂度和NCSS度量,以及静态分析器的优缺点。文章还介绍了三款主流的静态分析工具OCLint、Clang静态分析器、Infer,并详细介绍了它们的特点和安装方式。OCLint基于Clang Tooling开发,包含了71条规则,覆盖了语法上的基础规则、Cocoa库相关规则、约定俗成的规则等,具有灵活的规则配置和可扩展性。Clang静态分析器是一个用C++开发的开源工具,专门为速度做过优化,提供了丰富的功能接口,使得开发者可以编写自定义的checker来进行静态检查。另外,文章还介绍了Facebook开源的静态分析工具Infer,它可以对C、Java和Objective-C代码进行静态分析,检查出空指针访问、资源泄露以及内存泄露。总的来说,本文全面介绍了iOS开发中的静态分析工具及其特点,为开发者提供了丰富的选择和安装指南,对于提高代码质量和开发效率具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(41)

  • 最新
  • 精选
  • iLearn
    老师,Swift的要怎么搞?

    作者回复: SwiftLint

    2019-03-26
    4
    20
  • scorpiozj
    请问Xcode中的静态检查就是clang 静态检查吗?

    作者回复: 是的

    2019-03-29
    2
  • jimmy
    oclint的一些研究 https://xiaozhuanlan.com/topic/9647358012

    作者回复: 赞

    2019-03-27
    2
  • 頑 張
    infer跑不起来的 希望这篇能帮到https://blog.csdn.net/elisa1988/article/details/46531745?utm_source=blogxgwz7

    作者回复: 赞

    2019-04-01
    2
    1
  • 择一城终老
    从来没有用过,感觉听天书一样,哈哈!不过大致了解了其功能,但是原理还真不好懂

    作者回复: 可以用用,动手试试看

    2019-03-27
  • 晓龙
    clang是一个c c++ oc 编译器,静态分析利用clang做代码编译层面的事情,内存泄露,强弱引用,方法调用深度等分析工作交给分析器本身。 Clang是不是类似于oc中的runtime?

    作者回复: 当然不是

    2019-03-26
  • Roger
    给宝宝喂夜奶,顺便来看看新的一课讲什么
    2019-03-26
    1
    32
  • drunkenMouse
    1. OClint 想执行自己指定的项目,还是不会。。最后查了别的资料,说是要写脚本安装xcpretty,而且说是不维护了。 2. CLang 静态分析器的clang —analyze -Xclang -analyzer-checker-help 我执行之后,并没有成功显示常用的Checker。。 3. Clang 静态分析器的lib/StaticAnalyzer/Checkers这个路径也没有找到,是不是换地方了? 4. OClint、Clang静态分析器与Infer 都需要Clang编译器的LLVM对源码做词法、语法上的分析生成AST(一种静态语法树,代码更精简,遍历更轻松),然后对生成的AST做静态分析,达到编译代码层面的分析。 5. OCLint说是不维护了,所以除了规则太多导致的重点找不到,可定制性过高导致的易用性变差外,也PASS(其实我对这句规则多所以XX的理解感受不是很深。。) Clang静态分析器,规则少只能检策较大问题,对内存泄漏一类问题若无错误也不提示外,回调次数也多。每执行一句,都要回调所有的Checker的回调函数。所以PASS Infer 定制性不是最高,但是不差。可以小范围分析,所以效率高。还支持增量分析(使用已缓存数据,非增量会清楚缓存)。所以,建议Infer
    2019-03-27
    20
  • yb坏蛋biubiu
    clang作为llvm编译器前端,进行预编译、词法分析生成token片、语法分析生成AST后,提供一个切面,开发者可以在这里利用clang生成的AST语法树进行自定义规则遍历分析,clang也提供了相应的checker和抛出诊断异常的diagnosis。
    2019-03-26
    9
  • 简生
    个人觉得虽然OCLint检测规则多,易用性没有Infer好。但是Sonar+OCLint可以对检测结果进行一个可视化的管理,还是会偏向于选择OCLint。😊
    2019-03-30
    2
    6
收起评论
显示
设置
留言
41
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部