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