在功能安全中測試覆蓋率是比較重要的概念,也是在驗(yàn)證過程中通常需要花費(fèi)時(shí)間較多的步驟,如果能借助于靜態(tài)檢查工具的死邏輯查找和聲明、測試用例自動補(bǔ)全等功能往往能取得事半功倍的效果。功能安全標(biāo)準(zhǔn)中常見的幾種覆蓋率類型有:
- 語句覆蓋:程序中的每條語句是否都被執(zhí)行到。
- 判定覆蓋(決策覆蓋):各分支路徑是否都被執(zhí)行到。
- 條件覆蓋:進(jìn)入分支前的判斷條件中的各子條件的可能輸出是否都滿足到。
- 修正條件判定覆蓋(MC/DC):每個(gè)能獨(dú)立影響到?jīng)Q策輸出的條件是否都被滿足到。MC/DC 其實(shí)是條件組合覆蓋的子集,條件組合覆蓋要求覆蓋判定中所有條件取值的所有可能組合,所需測試用例和條件數(shù)成指數(shù)關(guān)系,在實(shí)際應(yīng)用中難以操作。MC/DC 具有條件組合覆蓋的優(yōu)勢,同時(shí)大幅減少用例數(shù)。比如對于判定條件 X||(Y&&Z), MC/DC 通過下表的四個(gè)測試用例即可實(shí)現(xiàn) 100% 覆蓋,而如果采用條件組合覆蓋則需要8個(gè)測試用例,隨著條件數(shù)的增加用例數(shù)的差異會更加明顯。

在采用基于模型設(shè)計(jì)時(shí),語句覆蓋對等的概念是執(zhí)行覆蓋,意指模型中的每個(gè)基本模塊在仿真過程中是否都被運(yùn)行到。判定覆蓋、條件覆蓋和 MC/DC 在模型層面均有類似的概念。
函數(shù)覆蓋和函數(shù)調(diào)用覆蓋
函數(shù)是程序的基本組成部分,程序通過調(diào)用函數(shù)實(shí)現(xiàn)功能,同一函數(shù)可能會被多次調(diào)用。如果所有定義的函數(shù)均被執(zhí)行到,則滿足函數(shù)覆蓋;如果程序中的所有函數(shù)調(diào)用處(包括同一函數(shù)的多次調(diào)用)均被執(zhí)行到,則滿足函數(shù)調(diào)用覆蓋。函數(shù)覆蓋和函數(shù)調(diào)用覆蓋只針對代碼,對于模型則沒有對應(yīng)概念。在基于模型設(shè)計(jì)中,我們可以借助于軟件在環(huán)(SIL)測試來獲取這一指標(biāo)。
單元級與架構(gòu)級覆蓋率要求
在 ISO 26262:2018 中覆蓋率要求在單元級和架構(gòu)級是不一樣的,因此如何合理劃分單元是非常重要的。


覆蓋率與死邏輯
在靜態(tài)檢查中有一項(xiàng)是檢查程序中有無不可達(dá)代碼(死邏輯),但并不能替代測試覆蓋率。沒有不可達(dá)代碼意味著有 100% 測試覆蓋的可能,后續(xù)還需要通過運(yùn)行測試用例并收集到覆蓋率數(shù)據(jù);有不可達(dá)代碼意味著從理論上無法通過測試達(dá)到 100% 覆蓋。
利用代碼檢查完善覆蓋率測試
在實(shí)踐中我們可以利用靜態(tài)檢查的這個(gè)能力來輔助測試覆蓋率,從而發(fā)現(xiàn)程序中的缺陷或者加以聲明(Justification)。以代碼靜態(tài)檢查和形式化驗(yàn)證能力見長的 Polyspace 在 R2023b 之后增加了動態(tài)測試工具 Polyspace Test, 我們可以從以下案例中來看兩者是如何相輔相成實(shí)現(xiàn)測試覆蓋率和聲明的。
首先利用代碼解析功能查看程序中所涉及的頭文件、函數(shù)和數(shù)據(jù)類型,在函數(shù)調(diào)用圖中理解函數(shù)調(diào)用的層次關(guān)系。

在設(shè)計(jì)測試用例時(shí)可以與對應(yīng)的需求進(jìn)行鏈接,在編譯前選擇獲取代碼覆蓋率。

從收集的覆蓋率數(shù)據(jù)看到語句和決策覆蓋尚未滿足,也可以進(jìn)一步分析具體的覆蓋點(diǎn)。


將已有的覆蓋率數(shù)據(jù)作為輸入并借助于自動生成測試功能,再次運(yùn)行包括新增的生成用例在內(nèi)的所有用例,覆蓋率數(shù)據(jù)有明顯提升,尚未達(dá)到的決策覆蓋很有可能是不可達(dá)代碼。


我們可以借助集成的靜態(tài)檢查和形式化驗(yàn)證功能分析并定位到具體的不可達(dá)代碼處,通過代碼審查排查代碼缺陷或者將靜態(tài)檢查結(jié)果導(dǎo)入到覆蓋分析中作為聲明。


以上從工具的角度展示了如何利用靜態(tài)檢查和形式化驗(yàn)證的能力來完善測試覆蓋率的過程,具體的使用方法需要根據(jù)代碼的安全要求和質(zhì)量目標(biāo)所定的流程來開展。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4421瀏覽量
67815 -
代碼
+關(guān)注
關(guān)注
30文章
4975瀏覽量
74339 -
功能安全
+關(guān)注
關(guān)注
2文章
210瀏覽量
6219 -
靜態(tài)檢查
+關(guān)注
關(guān)注
0文章
3瀏覽量
963
原文標(biāo)題:功能安全 | 利用代碼檢查完善測試覆蓋率
文章出處:【微信號:MATLAB,微信公眾號:MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式仿真平臺SkyEye的覆蓋率分析相關(guān)資料下載
單元測試/集成測試自動化工具--WinAMS
關(guān)于SpinalHDL中的驗(yàn)證覆蓋率收集簡單說明
重點(diǎn)厘清覆蓋率相關(guān)的概念以及在芯片開發(fā)流程中跟覆蓋率相關(guān)的事項(xiàng)
Verilog代碼覆蓋率檢查
使用 Veloce 完成局部系統(tǒng)級協(xié)議檢查和 覆蓋率收斂
汽車功能安全診斷覆蓋率的評估
嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)
嵌入式代碼覆蓋率如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)
統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)
代碼覆蓋率工具的重要性
EDA仿真驗(yàn)證環(huán)境中的激勵(lì)、檢查和覆蓋率
單元測試工具TESSY 新版本亮點(diǎn)速覽:提供測試駕駛艙視圖、超級覆蓋率、代碼訪問分析、增強(qiáng)覆蓋率審查
利用靜態(tài)檢查工具完善功能安全中測試覆蓋率
評論