擊敗Facebook Infer!360火線大起底

靜態(tài)代碼掃描領(lǐng)域風(fēng)起云涌十余載,各個(gè)掃描工具擁躉眾多,其中Facebook開源的Infer異軍突起,獨(dú)領(lǐng)風(fēng)騷。然而360火線作為新的入場(chǎng)者憑什么能夠擊敗Infer?是真有實(shí)力還是噱頭吹捧?

Facebook 開源靜態(tài)分析工具Infer

Infer是?Facebook 旗下開源的靜態(tài)分析工具,至今已在Github上獲得6700+ Star。Infer可以掃描JAVA、Objective-C和 C/C++ 代碼,擅長(zhǎng)資源泄漏以及空指針的檢測(cè)。

360火線(FireLine)

360火線(Fireline)是360公司技術(shù)委員會(huì)牽頭,Web平臺(tái)部Qtest團(tuán)隊(duì)開發(fā)的一款免費(fèi)靜態(tài)代碼分析工具。主要針對(duì)移動(dòng)端Android產(chǎn)品進(jìn)行靜態(tài)代碼分析。其最為突出的優(yōu)點(diǎn)就是資源泄漏問題的全面檢測(cè)。同時(shí),火線與360信息安全部門合作,推出了一系列針對(duì)移動(dòng)端安全漏洞的檢測(cè)規(guī)則。360火線提供免費(fèi)使用,掃描速度快,并支持Android Studio插件,Jenkins插件,Gradle部署等多種集成方式。

火線目前是360公司發(fā)布流程中必不可少的環(huán)節(jié),在每次代碼編譯審核時(shí)提供靜態(tài)代碼分析檢測(cè),為代碼審計(jì)人員、開發(fā)人員分別提供審核和修改代碼的依據(jù)。目前火線在360發(fā)布流程中已累計(jì)運(yùn)行超過500天,掃描文件數(shù)2千萬+,掃描代碼量超過45億行。火線最近推出的Android Studio插件360 Fireline Plugin下載量已達(dá)到4000+。

火線擁有四大類規(guī)則,分別為安全類,內(nèi)存類,日志類,基礎(chǔ)類。

?安全類:根據(jù)360信息安全部門最權(quán)威的SDL專門定制,每一條SDL都有真實(shí)的攻擊案例

?內(nèi)存類:各種資源關(guān)閉類問題檢測(cè)(本次評(píng)測(cè)的重點(diǎn))

?日志類:檢測(cè)日志輸出敏感信息內(nèi)容的規(guī)則

?基礎(chǔ)類:規(guī)范類、代碼風(fēng)格類、復(fù)雜度檢查規(guī)則

詳見官網(wǎng):http://magic.#

火線如何擊敗 Facebook Infer

火線針對(duì)資源關(guān)閉的深入研究

綜合國(guó)內(nèi)外靜態(tài)代碼分析現(xiàn)狀以及結(jié)合業(yè)務(wù)中常見代碼問題,并走訪、咨詢過多位業(yè)內(nèi)資深技術(shù)專家,我們發(fā)現(xiàn)資源泄漏問題是開發(fā)者非常關(guān)注但又會(huì)經(jīng)常疏漏的難題。

隨著對(duì)資源泄漏問題逐步深入的研究中我們發(fā)現(xiàn),目前市面上開源的靜態(tài)代碼掃描產(chǎn)品都無法給出令人滿意的解決方案。即使是目前熱度最高的Infer,針對(duì)資源關(guān)閉問題的掃描也有一個(gè)致命的缺陷,即無法正確識(shí)別出跨類跨方法以及第三方關(guān)閉類關(guān)閉資源對(duì)象的復(fù)雜場(chǎng)景。

于是火線團(tuán)隊(duì)針對(duì)資源泄漏問題進(jìn)行了深度的研究(點(diǎn)擊查看研究結(jié)果相關(guān)文章鏈接),采用了新的解決方案,不僅能夠正確識(shí)別幾十種不同資源泄漏問題場(chǎng)景,并且針對(duì)跨類跨方法的追蹤檢測(cè)有了重大突破。

我們梳理了30種資源泄漏場(chǎng)景,通過測(cè)試項(xiàng)目TestCasesProject(https://github.com/ariesliu/TestCasesProject),對(duì)Infer和火線這兩種種靜態(tài)代碼分析工具的掃描結(jié)果做橫向?qū)Ρ确治觥?/p>

靜態(tài)代碼分析工具測(cè)評(píng)維度

誤報(bào)率和有效率是靜態(tài)代碼分析工具非常關(guān)鍵的指標(biāo),因此本次測(cè)評(píng)主要從以下幾個(gè)維度分析各個(gè)工具的利弊:命中BUG、相似代碼誤報(bào)、漏測(cè)BUG、缺少規(guī)則。本次評(píng)測(cè)結(jié)果圖標(biāo)示意如下表所示:

靜態(tài)分析工具掃描結(jié)果分析

1、資源泄漏類問題

針對(duì)資源泄漏問題,兩種靜態(tài)分析工具的檢測(cè)結(jié)果,如下表所示:

【點(diǎn)擊圖片查看高清大圖】

【問題描述詳情請(qǐng)見測(cè)試項(xiàng)目TestCasesProject源碼】

數(shù)據(jù)統(tǒng)計(jì)結(jié)果如下表:

從上表中數(shù)據(jù)結(jié)果分析可得,火線針對(duì)30種場(chǎng)景全部正確命中,檢出率100%。Infer的bug有效數(shù)表現(xiàn)不錯(cuò),但是面對(duì)這30種復(fù)雜場(chǎng)景,誤報(bào)率較高。

經(jīng)分析Infer誤報(bào)的測(cè)試用例,發(fā)現(xiàn)Infer對(duì)跨類跨文件資源關(guān)閉方式以及無需關(guān)閉的資源對(duì)象無法做出正確檢測(cè)。而火線可以良好的檢測(cè)所有資源關(guān)閉方式以及對(duì)無需關(guān)閉的資源對(duì)象進(jìn)行有效過濾。

2.其他類規(guī)則

除了針對(duì)資源泄漏問題檢測(cè)做了深入研究外,火線還定制了獨(dú)有的日志和移動(dòng)端的安全類規(guī)則,以幫助開發(fā)人員規(guī)避代碼中存在的安全風(fēng)險(xiǎn)。(詳見官網(wǎng):http://magic.#

【點(diǎn)擊圖片查看高清大圖】

從上表中數(shù)據(jù)結(jié)果分析可得,火線獨(dú)有的安全規(guī)則和代碼規(guī)范規(guī)則具有很強(qiáng)的壁壘優(yōu)勢(shì),同時(shí)Infer在空指針檢測(cè)上的表現(xiàn)有待提高。

總結(jié)

綜合以上對(duì)比結(jié)果,可以明顯的看出360火線在列舉的各個(gè)方面都有非常大的領(lǐng)先優(yōu)勢(shì)。但是作為靜態(tài)代碼掃描領(lǐng)域的新產(chǎn)品,我們深知還有很長(zhǎng)的路要走。360火線目前深耕Android代碼檢測(cè),并已率先支持Kotlin語言掃描。大家在使用過程中有任何問題和建議,歡迎反饋到火線郵箱(g-qtest-fankui@#)。我們會(huì)持續(xù)不斷地優(yōu)化改進(jìn)360火線,以幫助大家更快更好的發(fā)現(xiàn)和解決代碼質(zhì)量問題。

附錄

火線與市面上開源的靜態(tài)代碼掃描工具:Infer、PMD、Findbugs、Sonar的橫向?qū)Ρ葓D。

【點(diǎn)擊圖片查看高清大圖】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,688評(píng)論 4 61
  • 1. 靜態(tài)掃描流程 1.1 版本發(fā)布流程 大致分為5個(gè)階段,靜態(tài)代碼掃描的工作在第3步進(jìn)行,如圖: 1.2 典型案...
    MarcusMa閱讀 9,965評(píng)論 1 17
  • 住院期間,經(jīng)歷了許多病友的逝去,年輕的老的都有。 當(dāng)年輕的去世,就會(huì)有人感嘆,這么年輕,好可惜! 想了一下在哪個(gè)時(shí)...
    玉空空閱讀 360評(píng)論 0 0
  • 東歐。 從康斯坦斯到柏林,買的德鐵19歐特價(jià)票。 抵達(dá)柏林咯。 要不怎么說,出門的時(shí)候攻略一定要自己做。別人做的后...
    筱筱方閱讀 386評(píng)論 0 0

友情鏈接更多精彩內(nèi)容