在開發(fā)安全、可靠和合規(guī)的軟件時,完備靜態(tài)分析是一種有益的實踐。本篇文章中,我們將討論完備分析與靜態(tài)分析的不同之處,為什么它很重要,以及完備靜態(tài)代碼分析的工作原理。
什么是完備靜態(tài)分析?
完備靜態(tài)分析是指分析結(jié)果的完整性或"健全性"。對于提供可靠性分析結(jié)果的靜態(tài)分析工具,這意味著如果軟件中存在特定的錯誤,缺陷或漏洞,那么該工具將出具相關(guān)的報告。
如果出現(xiàn)存在爭議的問題,那么工具將以某種形式提出警告*,這樣一來任何問題都會的得到診斷。
(*備注:這些在Helix QAC中被歸類為可能的問題,如果不需要完備分析,則可以禁用。)
完備靜態(tài)分析不同于其他靜態(tài)分析的地方在于,后者的結(jié)果可能基于在一定時間或資源內(nèi)可能發(fā)生的事情。
鑒于對程序的運行時行為進行建模需要某些近似值(例如,缺乏對程序輸入或操作系統(tǒng)狀態(tài)的知識),完備分析需要過度近似。
過度近似可以保證沒有假陰性(對于給定的漏洞類型),而低近似值通常優(yōu)先考慮沒有誤報。
其他形式的靜態(tài)分析沒有表現(xiàn)出這種嚴格性,并且可能包含低近似和過近似的混合。
也許完備和不完備的分析工具所得出的結(jié)果可能都會為程序的特定部分提供一份清晰的運行狀態(tài)證明,但是完備分析引擎提供了額外的保證,即印證這一結(jié)論的所有可能性和所有路徑都已得到驗證。
完備靜態(tài)分析的工作原理
在提到完備分析時,我們通常會考慮更復(fù)雜的程序間和程序內(nèi)控制和數(shù)據(jù)流分析形式,正如當(dāng)今最先進的靜態(tài)分析工具所采用的那樣。
與更簡單的代碼語法和語義分析不同,控制流和數(shù)據(jù)流靜態(tài)分析通常與檢測更復(fù)雜的問題相關(guān)聯(lián),例如:
- 空指針取消引用
- 陣列或緩沖區(qū)下溢和溢出
- 未初始化對象的使用
- 內(nèi)存分配和取消分配異常
- 數(shù)字溢出、下溢和環(huán)繞
- 除以零
- 死代碼
- 數(shù)據(jù)爭用、死鎖和其他并發(fā)沖突
控制和數(shù)據(jù)流分析是一項高計算負載的任務(wù),因為必須考慮系統(tǒng)的所有可能輸入以及通過系統(tǒng)所有可能的控制流路徑。事實上,由于控制流和數(shù)據(jù)流分析的暴力窮舉算法會導(dǎo)致分析時間指數(shù)暴漲,因此很少采用該方案。符號執(zhí)行和抽象解釋算法將是一個更優(yōu)雅的選擇。
根據(jù)Roberto Amadini、Graeme Gange、Peter Schachte、Harald S?ndergaard和Peter J.Stuckey的抽象解釋、符號執(zhí)行和約束,“抽象解釋是一個靜態(tài)分析框架,用于完備的過度近似程序的所有可能運行時狀態(tài)?!?。
而“符號執(zhí)行是一個可訪問性分析框架,它試圖探索程序的所有可能的執(zhí)行路徑”。抽象解釋和符號執(zhí)行在執(zhí)行期間以不變性或路徑條件的形式維持約束,該路徑條件確定可以執(zhí)行哪些路徑,并且可以在各種數(shù)據(jù)源中保持哪些值。
然而,需要注意的是,雖然抽象解釋是完備的,但符號執(zhí)行卻不是。
為什么完備靜態(tài)分析很重要?
健全性是安全關(guān)鍵軟件系統(tǒng)中的一個重要因素,特別是因為它保證軟件不包含任何正在檢查的編碼缺陷。也就是說,完備分析可用于顯示軟件中沒有錯誤。
因此,在汽車系統(tǒng)的ISO 26262功能安全(FuSa)標準中,抽象解釋分析被明確引用為軟件單元驗證方法(表7,方法1i)。
如何使用Helix QAC 執(zhí)行完備靜態(tài)分析
由于能夠提供深入和高度準確的分析結(jié)果,Helix QAC在30多年來一直是一個值得信賴的靜態(tài)代碼分析工具。Helix QAC能夠進行良好的靜態(tài)分析,是需要滿足嚴格合規(guī)要求的嚴格監(jiān)管和安全關(guān)鍵行業(yè)的首選工具。
但是,為了在Helix QAC項目中啟用完備分析,需要執(zhí)行某些步驟:
數(shù)據(jù)流深度需要設(shè)置為最大值(5),這將添加多個 -prodoption,如上面的屏幕截圖所示。(請參閱 QAC 或 QAC++ 組件手冊中的"分析超時"部分,了解為什么這些"超時"設(shè)置對于聲音分析是必需的。
此外,“df::inter=5”和“inter-TU Analysis”雖然不是完備分析所必需的,但可以以額外的計算成本啟用,以減少需要報告的可能問題的數(shù)量。這些設(shè)置的效果是啟用程序間和程序內(nèi)分析。
選擇Helix QAC進行完備靜態(tài)分析
親身體驗Helix QAC完備靜態(tài)分析對代碼質(zhì)量和健全性的影響,立即聯(lián)系北匯信息以免費試用。
-
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229
發(fā)布評論請先 登錄
相關(guān)推薦
評論