專業(yè)軟件測試工程師告訴你:如何選擇現(xiàn)代的靜態(tài)分析工具
從50000英尺的高度看,所有靜態(tài)分析工具看起來都一樣。他們分析代碼,不執(zhí)行代碼并發(fā)現(xiàn)缺陷、漏洞和其他問題。
所有工具都會生成警告和報告。它們通常集成到IDE和CI/CD/build系統(tǒng)中。如果您想成功地將任何編碼工具集成到您的日常開發(fā)中并獲得最大的投資回報,則必須全面評估您的選擇。
超越靜態(tài)分析工具
當(dāng)試圖確定哪種靜態(tài)分析工具最有效時,許多評估人員會采用一種通用的方法來為其團(tuán)隊或組織選擇工具。他們使用相同的代碼運(yùn)行每個工具,比較結(jié)果,然后立即選擇報告最多違規(guī)情況的工具。
這并不是真正的產(chǎn)品評估。這是一場烘烤。贏家不一定是在團(tuán)隊或組織內(nèi)建立可持續(xù)、可擴(kuò)展的靜態(tài)分析過程的最佳工具。
實(shí)際上,在成功進(jìn)行這些靜態(tài)分析時,通常會忽略許多關(guān)鍵因素,這些因素是成功采用靜態(tài)分析與另一失敗嘗試之間的區(qū)別。
評估您的靜態(tài)代碼分析需求和當(dāng)前狀況
在開始尋找工具之前,請對您的組織進(jìn)行殘酷誠實(shí)的調(diào)查。評估以下內(nèi)容:
您的組織需要什么。要成功進(jìn)行靜態(tài)分析,重要的是要了解要解決的問題。
- 靜態(tài)分析正在解決哪些具體的痛點(diǎn)?
- 組織是否有合規(guī)要求?
- 應(yīng)用程序安全性值得關(guān)注嗎?
- 已經(jīng)做什么了?
- 誰需要查看分析報告并采取行動?
您的組織所在的位置。了解新工具的目的以及它們是否適合您的組織也很重要。
- 您當(dāng)前的開發(fā)過程是否穩(wěn)定,可重復(fù)且精簡,足以為靜態(tài)分析奠定堅實(shí)的基礎(chǔ)?
- 先前評估或?qū)嵤╈o態(tài)分析工具的結(jié)果是什么?
工具選擇過程中的標(biāo)準(zhǔn)
在開發(fā)過程中選擇靜態(tài)分析工具進(jìn)行采用和最終集成需要付出努力和計劃。這不僅僅是技術(shù)審查。該過程需要檢查該工具與您的組織的適合程度。評估銷售和支持工具的供應(yīng)商也很重要。
工具評估標(biāo)準(zhǔn)
以下是對候選工具進(jìn)行技術(shù)評估時要考慮的標(biāo)準(zhǔn):
- 必要準(zhǔn)則的涵蓋范圍
- 內(nèi)置檢查器的質(zhì)量,以獲取必要的準(zhǔn)則
- 覆蓋行業(yè)和企業(yè)標(biāo)準(zhǔn)
- 分析的深度和廣度
- 減少噪音的實(shí)用方法(違反可忽略的檢查程序)
- 誤報的合理數(shù)量和方法
- 可接受的假陰性數(shù)
- 輕松調(diào)整內(nèi)置檢查器以適合您組織的政策
- 輕松添加新的自定義檢查器以檢查唯一需求
- 新的自定義檢查器支持的復(fù)雜程度
供應(yīng)商注意事項(xiàng)
選擇正確的供應(yīng)商與選擇正確的工具一樣重要。當(dāng)組織獲得工具時,他們即承諾與所選供應(yīng)商建立關(guān)系。
在大多數(shù)成功的工具部署背后,有一家供應(yīng)商致力于幫助組織實(shí)現(xiàn)業(yè)務(wù)目標(biāo),應(yīng)對表面挑戰(zhàn)并推動采用。
在整個評估過程中,必須考慮幾層供應(yīng)商資格和評估。此時,請考慮以下事項(xiàng):
- 供應(yīng)商對規(guī)模、增長和愿景的能力支持是否符合您的要求和目標(biāo)?
- 供應(yīng)商是否有一致的策略來在整個組織中進(jìn)行部署,以及如何隨著組織需求的變化而發(fā)展
- 供應(yīng)商推薦使用其工具的“最佳做法”是什么?
了解供應(yīng)商在市場中的聲譽(yù)也很重要。回答這些問題:
- 哪些組織正在使用該工具?
- 案例研究揭示了其部署、使用和收益的哪些方面?
- 行業(yè)專家在評論、文章和獎項(xiàng)中怎么說?
質(zhì)量與數(shù)量:關(guān)于覆蓋范圍
潛在客戶的一個常見問題是:您的產(chǎn)品有幾個檢查器?
這個問題暗示著工具的質(zhì)量取決于它所涵蓋的不同錯誤的數(shù)量。對于任何工具(尤其是靜態(tài)分析工具)而言,這都是很差的措施。
靜態(tài)分析工具的用戶應(yīng)該真正關(guān)心每個工具覆蓋不同錯誤類型,編碼標(biāo)準(zhǔn)和分析深度的程度。一個常見的例子是每個供應(yīng)商聲稱他們的工具聲稱CWE Top 25或OWASP Top 10或MISRA C/C++覆蓋率。
看到供應(yīng)商聲稱100%覆蓋了流行的編碼標(biāo)準(zhǔn)并不少見。通常會引起誤解的說法。真正的問題應(yīng)該是,而不是擔(dān)心檢查程序或規(guī)則的數(shù)量:工具覆蓋您所關(guān)注的編碼問題的程度如何?
示例:MISRA C,C++和CERT C覆蓋范圍
盡管像MISRA這樣的編碼標(biāo)準(zhǔn)已經(jīng)扎根于汽車領(lǐng)域,但它們的采用正遍及其他對安全至關(guān)重要的領(lǐng)域。與市場需要的SEI CERT C一起使用,或用于降低軟件開發(fā)的風(fēng)險。無論用例如何,這些標(biāo)準(zhǔn)都不可避免地用于評估靜態(tài)分析工具。
但是,由于每個標(biāo)準(zhǔn)的覆蓋范圍聲明并未準(zhǔn)確定義工具對覆蓋范圍的聲明方式,因此可以解釋。深入研究可能對您的用例重要的特定功能具有價值。例如,如果您的項(xiàng)目需要MISRA C,則應(yīng)詳細(xì)查看每種工具的功能。
考慮以下對各種開源和商業(yè)解決方案的評估,以評估它們對MISRA和CERT C標(biāo)準(zhǔn)的覆蓋范圍:
開源解決方案的覆蓋率很差,這并不奇怪,因?yàn)樗鼈兊囊鈭D從未遵循這樣的標(biāo)準(zhǔn)。但是,通常聲稱支持這些標(biāo)準(zhǔn)的各種商業(yè)工具并沒有真正交付。在這里重要的真正評估標(biāo)準(zhǔn)是標(biāo)準(zhǔn)的覆蓋范圍,而不是支持該標(biāo)準(zhǔn)所需的檢查人員數(shù)量。
但是,在使用測試套件衡量標(biāo)準(zhǔn)的覆蓋率時,您還需要考慮測試套件本身的覆蓋率。下圖的Juliet CWE Top 25(2011)覆蓋范圍圖像列出了通用弱點(diǎn)枚舉(CWE)ID以及Juliet C/C++和Java測試套件中的任何測試是否涵蓋了它們。您可以清楚地看到測試套件沒有完全覆蓋重要的CWE(前25名),這在許多測試套件中都是常見的。
開源解決方案
關(guān)于將靜態(tài)分析解決方案使用開源工具的問題顯而易見。FOSS需要牢記一些關(guān)鍵問題。評估需要包括缺少的重要功能,服務(wù)和支持的成本。
通常,這里提供有關(guān)FOSS成本和收益的詳細(xì)信息,包括支持、項(xiàng)目活動和壽命以及可伸縮性等問題。如果行業(yè)標(biāo)準(zhǔn)很重要,并且外部審核是您業(yè)務(wù)的一部分,則FOSS解決方案可能不是一個選擇。
需要回答的問題
在評估每個試點(diǎn)項(xiàng)目的結(jié)果時,評估和最終決策應(yīng)歸結(jié)為回答以下關(guān)鍵問題:
團(tuán)隊會真正采用并使用它嗎?如果無法部署,開發(fā)人員不使用它,或者對項(xiàng)目進(jìn)度造成太大干擾,那么世界上最好的工具將無法提供任何價值。要確定采用某項(xiàng)工具的程度,不僅需要對工具、檢查器和集成進(jìn)行全面評估,還需要對供應(yīng)商,其支持、服務(wù)和培訓(xùn)進(jìn)行全面評估。
它會解決組織和團(tuán)隊正在嘗試解決的問題嗎?部署新技術(shù)需要專注于要解決的問題,而不僅僅是期望靜態(tài)分析將解決您的問題。
此外,對解決該問題的新技術(shù)的期望應(yīng)該是現(xiàn)實(shí)的。量化成功和投資回報很重要。務(wù)必提前確定如何衡量成功:損失的時間,錯過的發(fā)布或現(xiàn)場支持案例。
這是一個長期的解決方案嗎?評估很耗時,需要團(tuán)隊投入。全面部署需要更多的時間和精力。選擇一種“目前已經(jīng)足夠好”的工具可能會在短期內(nèi)節(jié)省金錢,但從長期來看卻非常昂貴。
總結(jié)
靜態(tài)分析工具的評估通常最終會失敗,在此過程中,每個工具都在同一段代碼上進(jìn)行測試并根據(jù)結(jié)果進(jìn)行評估。盡管這是有用的并且技術(shù)評估很重要,但是評估人員還需要超越這些結(jié)果,以更大的眼光看待更長的時間。
評估人員需要考慮工具如何有效地管理結(jié)果,包括易于使用的可視化和報告。 團(tuán)隊?wèi)?yīng)該清楚地了解每種工具如何支持在編碼標(biāo)準(zhǔn)等領(lǐng)域提出的主張。