靜態(tài)代碼掃描領域風起云涌十余載,各個掃描工具擁躉眾多,其中Facebook開源的Infer異軍突起,獨領風騷。然而360火線作為新的入場者憑什么能夠擊敗Infer?是真有實力還是噱頭吹捧?
Facebook 開源靜態(tài)分析工具Infer
Infer是?Facebook 旗下開源的靜態(tài)分析工具,至今已在Github上獲得6700+ Star。Infer可以掃描JAVA、Objective-C和 C/C++ 代碼,擅長資源泄漏以及空指針的檢測。
360火線(FireLine)
360火線(Fireline)是360公司技術委員會牽頭,Web平臺部Qtest團隊開發(fā)的一款免費靜態(tài)代碼分析工具。主要針對移動端Android產品進行靜態(tài)代碼分析。其最為突出的優(yōu)點就是資源泄漏問題的全面檢測。同時,火線與360信息安全部門合作,推出了一系列針對移動端安全漏洞的檢測規(guī)則。360火線提供免費使用,掃描速度快,并支持Android Studio插件,Jenkins插件,Gradle部署等多種集成方式。
火線目前是360公司發(fā)布流程中必不可少的環(huán)節(jié),在每次代碼編譯審核時提供靜態(tài)代碼分析檢測,為代碼審計人員、開發(fā)人員分別提供審核和修改代碼的依據。目前火線在360發(fā)布流程中已累計運行超過500天,掃描文件數2千萬+,掃描代碼量超過45億行。火線最近推出的Android Studio插件360 Fireline Plugin下載量已達到4000+。
火線擁有四大類規(guī)則,分別為安全類,內存類,日志類,基礎類。
?安全類:根據360信息安全部門最權威的SDL專門定制,每一條SDL都有真實的攻擊案例
?內存類:各種資源關閉類問題檢測(本次評測的重點)
?日志類:檢測日志輸出敏感信息內容的規(guī)則
?基礎類:規(guī)范類、代碼風格類、復雜度檢查規(guī)則
(詳見官網:http://magic.360.cn)
火線如何擊敗 Facebook Infer
火線針對資源關閉的深入研究
綜合國內外靜態(tài)代碼分析現狀以及結合業(yè)務中常見代碼問題,并走訪、咨詢過多位業(yè)內資深技術專家,我們發(fā)現資源泄漏問題是開發(fā)者非常關注但又會經常疏漏的難題。
隨著對資源泄漏問題逐步深入的研究中我們發(fā)現,目前市面上開源的靜態(tài)代碼掃描產品都無法給出令人滿意的解決方案。即使是目前熱度最高的Infer,針對資源關閉問題的掃描也有一個致命的缺陷,即無法正確識別出跨類跨方法以及第三方關閉類關閉資源對象的復雜場景。
于是火線團隊針對資源泄漏問題進行了深度的研究(點擊查看研究結果相關文章鏈接),采用了新的解決方案,不僅能夠正確識別幾十種不同資源泄漏問題場景,并且針對跨類跨方法的追蹤檢測有了重大突破。
我們梳理了30種資源泄漏場景,通過測試項目TestCasesProject(https://github.com/ariesliu/TestCasesProject),對Infer和火線這兩種種靜態(tài)代碼分析工具的掃描結果做橫向對比分析。
靜態(tài)代碼分析工具測評維度
誤報率和有效率是靜態(tài)代碼分析工具非常關鍵的指標,因此本次測評主要從以下幾個維度分析各個工具的利弊:命中BUG、相似代碼誤報、漏測BUG、缺少規(guī)則。本次評測結果圖標示意如下表所示:
靜態(tài)分析工具掃描結果分析
1、資源泄漏類問題
針對資源泄漏問題,兩種靜態(tài)分析工具的檢測結果,如下表所示:
【點擊圖片查看高清大圖】
【問題描述詳情請見測試項目TestCasesProject源碼】
數據統計結果如下表:
從上表中數據結果分析可得,火線針對30種場景全部正確命中,檢出率100%。Infer的bug有效數表現不錯,但是面對這30種復雜場景,誤報率較高。
經分析Infer誤報的測試用例,發(fā)現Infer對跨類跨文件資源關閉方式以及無需關閉的資源對象無法做出正確檢測。而火線可以良好的檢測所有資源關閉方式以及對無需關閉的資源對象進行有效過濾。
2.其他類規(guī)則
除了針對資源泄漏問題檢測做了深入研究外,火線還定制了獨有的日志和移動端的安全類規(guī)則,以幫助開發(fā)人員規(guī)避代碼中存在的安全風險。(詳見官網:http://magic.360.cn)
【點擊圖片查看高清大圖】
從上表中數據結果分析可得,火線獨有的安全規(guī)則和代碼規(guī)范規(guī)則具有很強的壁壘優(yōu)勢,同時Infer在空指針檢測上的表現有待提高。
總結
綜合以上對比結果,可以明顯的看出360火線在列舉的各個方面都有非常大的領先優(yōu)勢。但是作為靜態(tài)代碼掃描領域的新產品,我們深知還有很長的路要走。360火線目前深耕Android代碼檢測,并已率先支持Kotlin語言掃描。大家在使用過程中有任何問題和建議,歡迎反饋到火線郵箱(g-qtest-fankui@360.cn)。我們會持續(xù)不斷地優(yōu)化改進360火線,以幫助大家更快更好的發(fā)現和解決代碼質量問題。
附錄:
火線與市面上開源的靜態(tài)代碼掃描工具:Infer、PMD、Findbugs、Sonar的橫向對比圖。
【點擊圖片查看高清大圖】