OCLint
OCLint 是基于 Clang Tooling 開發(fā)的靜態(tài)分析工具,主要用來發(fā)現(xiàn)編譯器檢查不到的那些潛在的關鍵技術問題。OCLint 0.13 版本中,包含了 71 條規(guī)則。
這些規(guī)則已經(jīng)基本覆蓋了具有通用性的規(guī)則,主要包括語法上的基礎規(guī)則、Cocoa 庫相關規(guī)則、一些約定俗成的規(guī)則、各種空語句檢查、是否按新語法改寫的檢查、命名上長變量名短變量名檢查、無用的語句變量和參數(shù)的檢查。
除此之外,還包括了和代碼量大小是否合理相關的一些規(guī)則,比如過大的類、類里方法是否太多、參數(shù)是否過多、Block 嵌套是否太深、方法里代碼是否過多、圈復雜度的檢查等。
Clang 靜態(tài)分析器
Clang 靜態(tài)分析器(Clang Static Analyzer)是一個用 C++ 開發(fā)的,用來分析 C、C++ 和 Objective-C 的開源工具,是 Clang 項目的一部分,構建在 Clang 和 LLVM 之上。Clang 靜態(tài)分析器的分析引擎用的就是 Clang 的庫。
Clang 靜態(tài)分析器專門為速度做過優(yōu)化,可以在保證查出錯誤的前提下,使用更聰明的算法減少檢查的工作量。
Clang 靜態(tài)分析器是由分析引擎 (analyzer core) 和 checkers 組成的。所有的 checker 都是基于底層分析引擎之上的。通過分析引擎提供的功能,我們可以編寫新的 checker。
checker 架構能夠方便用戶擴展代碼檢查的規(guī)則,或者通過自定義來擴展 bug 類型
Infer
Infer 是 Facebook 開源的、使用 OCaml 語言編寫的靜態(tài)分析工具,可以對 C、Java 和 Objective-C 代碼進行靜態(tài)分析,可以檢查出空指針訪問、資源泄露以及內(nèi)存泄露
總結
Clang 靜態(tài)分析器、Infer 和 OCLint 這三個 iOS 靜態(tài)分析工具。對于 iOS 的靜態(tài)分析,這三個工具都是基于 Clang 庫開發(fā)的。
其中 Clang 靜態(tài)分析器和 Xcode 的集成度高,也支持命令行。不過,它們檢查的規(guī)則少,基本都是只能檢查出較大的問題,比如類型轉(zhuǎn)換問題,而對內(nèi)存泄露問題檢查的側(cè)重點則在于可用性。
OCLint 檢查規(guī)則多、定制性強,能夠發(fā)現(xiàn)很多潛在問題。但缺點也是檢查規(guī)則太多,反而容易找不到重點;可定制度過高,導致易用性變差。
Infer 的效率高,支持增量分析,可小范圍分析??啥ㄖ菩圆凰阕顝?,屬于中等。