在功能安全中測試覆蓋率是比較重要的概念,也是在驗證過程中通常需要花費時間較多的步驟,如果能借助于靜態檢查工具的死邏輯查找和聲明、測試用例自動補全等功能往往能取得事半功倍的效果。功能安全標準中常見的幾種覆蓋率類型有:
- 語句覆蓋:程序中的每條語句是否都被執行到。
- 判定覆蓋(決策覆蓋):各分支路徑是否都被執行到。
- 條件覆蓋:進入分支前的判斷條件中的各子條件的可能輸出是否都滿足到。
- 修正條件判定覆蓋(MC/DC):每個能獨立影響到決策輸出的條件是否都被滿足到。MC/DC 其實是條件組合覆蓋的子集,條件組合覆蓋要求覆蓋判定中所有條件取值的所有可能組合,所需測試用例和條件數成指數關系,在實際應用中難以操作。MC/DC 具有條件組合覆蓋的優勢,同時大幅減少用例數。比如對于判定條件 X||(Y&&Z), MC/DC 通過下表的四個測試用例即可實現 100% 覆蓋,而如果采用條件組合覆蓋則需要8個測試用例,隨著條件數的增加用例數的差異會更加明顯。
在采用基于模型設計時,語句覆蓋對等的概念是執行覆蓋,意指模型中的每個基本模塊在仿真過程中是否都被運行到。判定覆蓋、條件覆蓋和 MC/DC 在模型層面均有類似的概念。
函數覆蓋和函數調用覆蓋
函數是程序的基本組成部分,程序通過調用函數實現功能,同一函數可能會被多次調用。如果所有定義的函數均被執行到,則滿足函數覆蓋;如果程序中的所有函數調用處(包括同一函數的多次調用)均被執行到,則滿足函數調用覆蓋。函數覆蓋和函數調用覆蓋只針對代碼,對于模型則沒有對應概念。在基于模型設計中,我們可以借助于軟件在環(SIL)測試來獲取這一指標。
單元級與架構級覆蓋率要求
在 ISO 26262:2018 中覆蓋率要求在單元級和架構級是不一樣的,因此如何合理劃分單元是非常重要的。
覆蓋率與死邏輯
在靜態檢查中有一項是檢查程序中有無不可達代碼(死邏輯),但并不能替代測試覆蓋率。沒有不可達代碼意味著有 100% 測試覆蓋的可能,后續還需要通過運行測試用例并收集到覆蓋率數據;有不可達代碼意味著從理論上無法通過測試達到 100% 覆蓋。
利用代碼檢查完善覆蓋率測試
在實踐中我們可以利用靜態檢查的這個能力來輔助測試覆蓋率,從而發現程序中的缺陷或者加以聲明(Justification)。以代碼靜態檢查和形式化驗證能力見長的 Polyspace 在 R2023b 之后增加了動態測試工具 Polyspace Test, 我們可以從以下案例中來看兩者是如何相輔相成實現測試覆蓋率和聲明的。
首先利用代碼解析功能查看程序中所涉及的頭文件、函數和數據類型,在函數調用圖中理解函數調用的層次關系。
在設計測試用例時可以與對應的需求進行鏈接,在編譯前選擇獲取代碼覆蓋率。
從收集的覆蓋率數據看到語句和決策覆蓋尚未滿足,也可以進一步分析具體的覆蓋點。
將已有的覆蓋率數據作為輸入并借助于自動生成測試功能,再次運行包括新增的生成用例在內的所有用例,覆蓋率數據有明顯提升,尚未達到的決策覆蓋很有可能是不可達代碼。
我們可以借助集成的靜態檢查和形式化驗證功能分析并定位到具體的不可達代碼處,通過代碼審查排查代碼缺陷或者將靜態檢查結果導入到覆蓋分析中作為聲明。
以上從工具的角度展示了如何利用靜態檢查和形式化驗證的能力來完善測試覆蓋率的過程,具體的使用方法需要根據代碼的安全要求和質量目標所定的流程來開展。
-
函數
+關注
關注
3文章
4331瀏覽量
62610 -
代碼
+關注
關注
30文章
4788瀏覽量
68603 -
功能安全
+關注
關注
2文章
92瀏覽量
5652 -
靜態檢查
+關注
關注
0文章
3瀏覽量
844
原文標題:功能安全 | 利用代碼檢查完善測試覆蓋率
文章出處:【微信號:MATLAB,微信公眾號:MATLAB】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論