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