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

Xcode自带的静态分析工具Analyze。

三个常用复杂度指标:
圈复杂度高;
NPath复杂度高;
NCSS度量高;

OCLint:

使用brew安装。

Clang静态分析器:

在 Clang 静态分析器中,常用的就是 scan-build 和 scan-view 这两个工具。

scan-build 是用来运行分析器的命令行工具;scan-view 包含了 scan-build 工具,会在 scan-build 执行完后将结果可视化。
scan-build 的原理是,将编译器构建改成另一个“假的”编译器来构建,这个“假的”编译器会执行 Clang 来编译,然后执行静态分析器分析你的代码。

Infer:

Infer 是 Facebook 开源的、使用 OCaml 语言编写的静态分析工具,可以对 C、Java 和 Objective-C 代码进行静态分析,可以检查出空指针访问、资源泄露以及内存泄露。

总结:

其中 Clang 静态分析器和 Xcode 的集成度高,也支持命令行。不过,它们检查的规则少,基本都是只能检查出较大的问题,比如类型转换问题,而对内存泄露问题检查的侧重点则在于可用性。
OCLint 检查规则多、定制性强,能够发现很多潜在问题。但缺点也是检查规则太多,反而容易找不到重点;可定制度过高,导致易用性变差。
Infer 的效率高,支持增量分析,可小范围分析。可定制性不算最强,属于中等。
综合来看,Infer 在准确性、性能效率、规则、扩展性、易用性整体度上的把握是做得最好的,我认为这些是决定静态分析器好不好最重要的几点。所以,我比较推荐的是使用 Infer 来进行代码静态分析。

PS:了解过OCLint,其他没有用过,后面可以试试哟~~~

你可能感兴趣的:(6、Clang、Infer和OCLint,我们应该使用谁来做静态分析?)