什麼情況下需要進行靜態程式分析?常用Java靜態程式碼分析工具的優勢

k_yj1發表於2020-08-06

靜態程式碼分析是指無需執行被測程式碼,僅透過分析或檢查源程式的語法、結構、過程、介面等來檢查程式的正確性,找出程式碼隱藏的錯誤和缺陷,如引數不匹配,有歧義的巢狀語句,錯誤的遞迴,非法計算,可能出現的空指標引用等等。

在軟體開發過程中,靜態程式碼分析往往先於動態測試之前進行,同時也可以作為制定動態 的參考。統計證明,在整個軟體開發生命週期中,30% 至 70% 的程式碼邏輯設計和編碼缺陷是可以透過靜態程式碼分析來發現和修復的。

靜態程式碼分析

但是,由於 往往要求大量的時間消耗和相關知識的積累,因此對於軟體開發團隊來說,使用靜態程式碼分析工具自動化執行程式碼檢查和分析,能夠極大地提高軟體可靠性並節省軟體開發和測試成本。

那在什麼情況下需要進行靜態程式分析呢?

靜態程式分析往往作為一個多人參與的專案中程式碼審查過程的一個階段,因編寫完一部分程式碼之後就可以進行靜態分析,分析過程不需要執行整個程式,這有助於在專案早期發現以下問題:變數宣告瞭但未使用、變數型別不匹配、變數在使用前未定義、不可達程式碼、死迴圈、陣列越界、記憶體洩漏等。

靜態程式碼分析工具的優勢

1. 幫助程式開發人員自動執行靜態程式碼分析,快速定位程式碼隱藏錯誤和缺陷。

2. 幫助程式碼設計人員更專注於分析和解決程式碼設計缺陷。

3. 顯著減少在程式碼逐行檢查上花費的時間,提高軟體可靠性並節省軟體開發和測試成本。

Java 靜態程式碼分析理論基礎和主要技術

缺陷模式匹配:缺陷模式匹配事先從程式碼分析經驗中收集足夠多的共性缺陷模式,將待分析程式碼與已有的共性缺陷模式進行模式匹配,從而完成軟體的安全分析。這種方式的優點是簡單方便,但是要求內建足夠多缺陷模式,且容易產生誤報。

型別推斷:型別推斷技術是指透過對程式碼中運算物件型別進行推理,從而保證程式碼中每條語句都針對正確的型別執行。這種技術首先將預定義一套型別機制,包括類 型等價、型別包含等推理規則,而後基於這一規則進行推理計算。型別推斷可以檢查程式碼中的型別錯誤,簡單,高效,適合程式碼缺陷的快速檢測。

模型檢查:模型檢驗建立於有限狀態自動機的概念基礎之上,這一理論將被分析程式碼抽象為一個自動機系統,並且假設該系統是有限狀態的、或者是可以透過抽象歸 結為有限狀態。模型檢驗過程中,首先將被分析程式碼中的每條語句產生的影響抽象為一個有限狀態自動機的一個狀態,而後透過分析有限狀態機從而達到程式碼分析的 目的。模型檢驗主要適合檢驗程式併發等時序特性,但是對於資料值域資料型別等方面作用較弱。

資料流分析:資料流分析也是一種軟體驗證技術,這種技術透過收集程式碼中引用到的變數資訊,從而分析變數在程式中的賦值、引用以及傳遞等情況。對資料流進行 分析可以確定變數的定義以及在程式碼中被引用的情況,同時還能夠檢查程式碼資料流異常,如引用在前賦值在後、只賦值無引用等。資料流分析主要適合檢驗程式中的 資料域特性。

是基於Java開發,Java Swing的模式支援系統跨平臺執行;支援C、C++、Java等多種程式語言掃描;支援windows平臺、linux平臺、命令列環境、IDE環境。規則包含國軍標5369,MISRAC:2004,國軍標5369(C++),Java sun 程式設計規範,Java sun 安全規則等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981042/viewspace-2709681/,如需轉載,請註明出處,否則將追究法律責任。

相關文章