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