Polyspace是MathWorks產(chǎn)品家族的一員, 也許有人還不知道它能做什么以及作用原理是什么。簡單來說,Polyspace是基于抽象解釋原理的代碼級靜態(tài)分析和驗證工具。
的確,由于時間和成本的關(guān)系我們不可能做窮舉測試,但并不能就此推斷我們沒有測試的工況是安全的。
以汽車行業(yè)為例,已發(fā)生的多次召回事件經(jīng)分析是因為軟件缺陷尤其是運行時錯誤(run-time error)造成的。所謂的運行時錯誤,是指在通常的調(diào)試過程中需要程序運行起來之后才可能顯現(xiàn)的錯誤,如指針越界、數(shù)據(jù)溢出等。換句話說,如果測試用例沒有覆蓋到特定的輸入條件時,這些問題可能就沒有機會被發(fā)現(xiàn)。
Windows平臺下調(diào)試運行時錯誤發(fā)生的案例
除汽車行業(yè)以外,航空航天、鐵路、醫(yī)療等所謂高完整性系統(tǒng)行業(yè),嵌入式軟件往往承載著系統(tǒng)大部分重要功能的實現(xiàn),一旦發(fā)生問題會帶來異常嚴重的后果。軟件的靜態(tài)分析作為動態(tài)功能測試的重要補充,在這些行業(yè)應(yīng)用非常廣泛。
所謂的靜態(tài)分析,指在不運行程序的情況下,基于數(shù)學(xué)方法的分析來驗證代碼是否滿足規(guī)范性、安全性、可靠性、可維護性等指標的一種代碼分析技術(shù)。通俗地說,靜態(tài)分析可以通過不寫測試用例達到動態(tài)窮舉測試的效果,是用來提高代碼魯棒性和證明軟件安全性的重要手段。
Polyspace所采用的靜態(tài)分析方法是抽象解釋,是軟件形式化驗證方法(Formal Verification)的一種,它在處理復(fù)雜的計算問題或模型的過程中通過對問題進行近似抽象,取出其中的關(guān)鍵部分進行分析,從而減少問題的復(fù)雜程度。
抽象解釋
簡單舉例,判斷x/(x-y)是否有除零的風(fēng)險的問題可以轉(zhuǎn)換為左下圖 x和y的取值范圍是否有可能落在y=x的紅線上。Polyspace基于程序控制結(jié)構(gòu)、函數(shù)調(diào)用關(guān)系、多任務(wù)分析等,通過復(fù)雜的數(shù)據(jù)流析取過程抽象到右下圖綠色多面空間中來判斷是否有可能落在y=x上。
Polyspace中的抽象解釋
經(jīng)Polyspace分析后的代碼結(jié)果以不同顏色表:
綠色代表為安全代碼,無需花過多精力審查;
紅色代碼問題代碼,需要立刻解決;
灰色代表不可達代碼,需要審查是設(shè)計錯誤還是有意為之;
橙色代表有風(fēng)險代碼,需要重點審查。
另外還可以設(shè)定編碼規(guī)范(如MISRA)和自定義代碼風(fēng)格,違反之處以紫色顯示;同時可以看到代碼變量隨控制流的數(shù)據(jù)范圍變化情況,快速查找和定位問題原因。
Polyspace的分析結(jié)果
不論是自動代碼還是手寫代碼甚或混合代碼,Polyspace可以承擔類似“質(zhì)量門”的角色,幫助查找常見軟件缺陷、進行代碼規(guī)范檢查、提供軟件度量信息,更進一步通過證明不存在運行時錯誤交付安全代碼,大大提高代碼審查的效率并可提供安全認證所需的相關(guān)證據(jù)。
-
代碼
+關(guān)注
關(guān)注
30文章
4668瀏覽量
67753 -
靜態(tài)分析
+關(guān)注
關(guān)注
1文章
36瀏覽量
3866
發(fā)布評論請先 登錄
相關(guān)推薦
評論