更快地投放市場的趨勢容易產生以下誤解:靜態分析只是發現錯誤。軟件開發人員必須盡可能多地消除錯誤,并會使用錯誤快速發現工具,但很可能仍然存在一些錯誤。這種做法對于非安全關鍵型應用(如智能手機應用)可能足夠了,但對于安全關鍵型應用可能是不夠的。
因此,安全關鍵型應用需要更嚴格的方法來驗證安全性和穩健性,這就是靜態分析可以帶來的其他好處。在本文中,我們將消除靜態分析只是發現錯誤這一誤解,并證明它可以幫助驗證是否符合編碼標準,生成有關代碼質量的指標,并可以在軟件開發的任何階段使用。
毫無疑問,發現錯誤肯定是靜態代碼分析的一個重要方面。但是,靜態分析技術的范圍廣泛,從簡單的語法檢查或基于啟發式的方法,到基于形式化方法的高級驗證,不一而足。
這一范圍還體現在市場上各種各樣的靜態分析工具。例如,一些高級編譯器有一個采用靜態分析形式的內置語法檢查器。在該范圍的另一端是基于形式化方法的工具,如可以執行語義分析的 Polyspace,為您的軟件提供詳細的運行行為。
Polyspace Bug Finder 是一種可以幫助發現錯誤的靜態分析工具,但它還可用于:
檢查您的軟件是否符合編碼標準,如 MISRA C/C++、JSF++ 和自定義規則
生成代碼度量指標以幫助您改進代碼質量。
此外,使用 Polyspace Code Prover,您還可以證明您的軟件不會由于特定類型的關鍵運行時錯誤而崩潰。
因此,這些工具已經超出了簡單的錯誤發現,在驗證和確認過程中非常有價值。例如,下圖中的代碼是形式驗證的結果,該結果確認在任何運行條件下都不會發生溢出錯誤:
如前所述,您可以使用靜態分析來檢查您的代碼是否符合特定的編碼準則或標準,從而避免使用不安全或不可靠的結構。它還可以幫助您捕捉表明代碼質量的關鍵指標,如圈復雜度、執行不到的代碼、使用共享全局變量和遞歸 、省去編寫測試用例的開銷。這些指標可以幫助您找出設計問題,例如可能最終影響軟件性能和可靠性的代碼架構。
使用非初始化變量或不受保護的共享變量可能在特定的測試用例中顯示意想不到的結果。然后,您可能會承擔調試任務,花費大量的時間試圖找出問題所在。更糟糕的是,由于此類運行時錯誤的不可預知性,這些缺陷可能不會在測試過程中顯示出來。
靜態分析更為廣泛的優勢并不廣為人知,因此它在軟件開發工作流程的后期才被采用。因為它被簡單地認為是一種發現錯誤的方法,所以它通常在軟件開發的最后階段才被采用(例如,靜態分析是質量工程團隊發布代碼之前的最后一關)。超過90%的潛在客戶在進入了項目的結束階段后才與我們聯系,了解我們的靜態分析解決方案。
但是,如果您想利用上面討論的所有優勢,則應在開發的早期階段引入靜態分析。實際上,使用編譯器就是一個這樣的例子,因為編譯器是一個非常簡單的靜態分析工具,可幫助開發代碼的語法和語義。研究發現,盡早發現和修復編碼錯誤可以獲得顯著的成本效益。還可以縮短您所開發軟件所需的測試時間。因此,靜態分析在早期引入您的工作流非常重要,它遠不是簡單地識別錯誤。
-
代碼
+關注
關注
30文章
4801瀏覽量
68735 -
編譯器
+關注
關注
1文章
1636瀏覽量
49172 -
靜態分析
+關注
關注
1文章
41瀏覽量
3898
發布評論請先 登錄
相關推薦
評論