在構(gòu)建關(guān)鍵系統(tǒng)時(shí),將代碼覆蓋率結(jié)構(gòu)化是必須的,也是非常重要的。這篇文章闡述了Parasoft C/C++test如何通過覆蓋率指導(dǎo)助手等自動(dòng)化生產(chǎn)力功能更好地幫助測試團(tuán)隊(duì)。
軟件測試是軟件開發(fā)不可分割的一部分。每個(gè)開發(fā)和執(zhí)行代碼的行業(yè)都可以從使用結(jié)構(gòu)代碼覆蓋率測試工具中受益。這些工具在安全關(guān)鍵型應(yīng)用的嵌入式開發(fā)行業(yè)中特別有用,在這些行業(yè)中,軟件系統(tǒng)不能出現(xiàn)故障,否則就會(huì)涉及生命危險(xiǎn)。Parasoft C/C++test的覆蓋率指導(dǎo)助手能夠幫助用戶對難以捉摸又耗時(shí)的代碼創(chuàng)建測試用例。
代碼覆蓋率是一個(gè)重要且必要的條件
我們在嵌入式安全和安全關(guān)鍵系統(tǒng)中將代碼提升到100%覆蓋率有多種目的。其中最主要的目是符合DO-178C、IEC 62304等流程標(biāo)準(zhǔn)中定義的驗(yàn)證和確認(rèn)(Verification & Validation)要求。
優(yōu)點(diǎn)
代碼覆蓋率提供的價(jià)值是對V&V(Verification & Validation)過程的提升,它可以幫助我們清除代碼中的缺陷,確保每行代碼都已執(zhí)行,從而滿足團(tuán)隊(duì)或者認(rèn)證的要求。這可以大大提高團(tuán)隊(duì)代碼質(zhì)量的安全性和可靠性。
同樣,如果我們執(zhí)行了所有的測試用例,而只獲得了60%的覆蓋率,那么很明顯我們沒有創(chuàng)建足夠的測試用例。因此,隱藏的缺陷可能潛伏在這些未測試的部分。
另一個(gè)問題是“死代碼”。這意味著這些代碼永遠(yuǎn)不會(huì)被執(zhí)行,因?yàn)闆]有條件能夠支持這些代碼被執(zhí)行。這種情況可能發(fā)生在實(shí)現(xiàn)了某個(gè)特性/功能,但在某種條件下,這個(gè)功能需求被刪除了。如果不完全刪除這些相關(guān)的代碼,就可能會(huì)導(dǎo)致死代碼這種情況。在函數(shù)或方法中查找死代碼的同時(shí),還可以突出必須解決的壞代碼。
如何滿足您的代碼覆蓋率要求
您可以通過下面的測試方法或它們的組合方法來實(shí)現(xiàn)代碼的高覆蓋率:
單元測試
集成測試
系統(tǒng)測試
下面是Parasoft支持度較高的兩種方法:
1.系統(tǒng)測試和單元測試的組合。首先,檢測代碼并執(zhí)行所有的系統(tǒng)測試用例,這將會(huì)產(chǎn)生比較高的覆蓋率指標(biāo)。最后,使用單元測試方法來提升剩余未覆蓋代碼的覆蓋率。
2.利用單元測試實(shí)現(xiàn)100%代碼覆蓋率。這種方法很直接。用戶創(chuàng)建單元級的測試用例,以確保對每個(gè)功能/方法被覆蓋。
代碼覆蓋率指標(biāo)
覆蓋率指標(biāo)有非常多種類。具體應(yīng)用哪種覆蓋率指標(biāo)取決于IEC 61508中定義的安全完整性等級(SIL)。另一種情況是DO-178B/C的設(shè)計(jì)保證級別(DAL)對覆蓋率指標(biāo)的不同要求。對于嵌入式系統(tǒng),我們可能常用到的覆蓋率指標(biāo)是語句、分支、修改條件/判定(MC/DC)覆蓋率。其中,對于那些最嚴(yán)格的要求,會(huì)包括匯編代碼的覆蓋率。Parasoft支持收集所有這些覆蓋率指標(biāo),包括其他行業(yè)名稱不同的覆蓋率指標(biāo)種類,比如塊、調(diào)用、函數(shù)、路徑、判定覆蓋率等。
圖一:指標(biāo)和趨勢
自動(dòng)化流程
Parasoft C/C++test的“一鍵獲取覆蓋率”功能在對減輕團(tuán)隊(duì)工作任務(wù)和減少成本方面,有著巨大作用。首先是自動(dòng)生成測試用例,我們只需要單擊一下測試配置,C/C++test即可分析代碼并且自動(dòng)生成智能的單元測試用例。然后我們可以執(zhí)行這些單元測試用例。根據(jù)不同代碼的大小和復(fù)雜性,團(tuán)隊(duì)基本上可以達(dá)到80%左右的覆蓋率。
對于復(fù)雜的代碼,總是有一些結(jié)構(gòu)復(fù)雜的代碼語句,要覆蓋這些語句并且獲取覆蓋率是非常困難的。對于這些結(jié)構(gòu)復(fù)雜的代碼,我們可能需要根據(jù)不同的路徑或條件情況排列,設(shè)計(jì)很多組測試用例,才有可能覆蓋這些代碼,這需要花費(fèi)我們大量的時(shí)間和精力。但是我們現(xiàn)在就有一個(gè)完美的解決方案,那就是Parasoft C/C++test Coverage Advisor。Parasoft C/C++test覆蓋率指導(dǎo)助手,可以幫我們分析結(jié)構(gòu)或條件復(fù)雜的代碼,提供給我們多組測試用例,使這些代碼更容易被覆蓋。
如何在Coverage Advisor中獲取覆蓋率
在編輯器中,右鍵單擊您想要覆蓋的代碼行,然后選擇Parasoft->Show in Coverage Advisor。
圖二:在Coverage Advisor菜單中顯示
下圖展示了為用戶提供的多種測試用例,前置條件字段表示:
mainSensorSignal和coSensorSignal的范圍和輸入值
外部調(diào)用的預(yù)期輸出
在使用這些設(shè)置的參數(shù)值和外部調(diào)用的樁函數(shù)創(chuàng)建單元測試用例時(shí),用戶將獲得所選行的覆蓋率。
圖三:Parasoft C/C++test2020.2 Coverage Advisor行覆蓋分析反饋
總結(jié)
在構(gòu)建嵌入式安全和安全關(guān)鍵型軟件系統(tǒng)時(shí),代碼結(jié)構(gòu)覆蓋率是必須的。同時(shí),我們可以將對應(yīng)的測試用例和需求關(guān)聯(lián)上,這樣可以確保:
創(chuàng)建了足夠的測試用例來測試軟件
沒有任何死代碼
每一行代碼都經(jīng)過合規(guī)性和認(rèn)證需求的檢查
Parasoft C/C++test是一個(gè)完整的軟件測試解決方案,它為團(tuán)隊(duì)提供了測試方法功能和自動(dòng)化生產(chǎn)能力,比如覆蓋率覆蓋率指導(dǎo)助手。利用這個(gè)功能,開發(fā)人員可以快速實(shí)現(xiàn)他們的代碼覆蓋率目標(biāo)。相應(yīng)地,管理者可以加快產(chǎn)品上市時(shí)間、保障審計(jì)和簡化產(chǎn)品認(rèn)證。在向市場輸出高質(zhì)量軟件的同時(shí),能夠降低成本投入。
審核編輯 :李倩
-
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307987 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73890 -
代碼
+關(guān)注
關(guān)注
30文章
4837瀏覽量
69121
原文標(biāo)題:解決提升覆蓋率難題-使用C/C++test覆蓋率指導(dǎo)助手
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
synopsys 的design ware:DW_fpv_div,浮點(diǎn)數(shù)除法器,默認(rèn)32位下,想提升覆蓋率(TMAX),如果用功能case去提升覆蓋率呢?
怎么提高非隨機(jī)圖形設(shè)計(jì)的故障覆蓋率?
嵌入式仿真平臺(tái)SkyEye的覆蓋率分析相關(guān)資料下載
重點(diǎn)厘清覆蓋率相關(guān)的概念以及在芯片開發(fā)流程中跟覆蓋率相關(guān)的事項(xiàng)
Systemverilog覆蓋率的合并和計(jì)算方式
Verilog代碼覆蓋率檢查
IP開發(fā)時(shí)如何考慮復(fù)用覆蓋率
嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)
![嵌入式代碼<b class='flag-5'>覆蓋率</b>統(tǒng)計(jì)方法和經(jīng)驗(yàn)](https://file.elecfans.com/web1/M00/D8/D3/o4YBAF_1YqiAZu9UAAAxHZKXLMg754.png)
統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)
![統(tǒng)計(jì)嵌入式代碼<b class='flag-5'>覆蓋率</b>的方法和經(jīng)驗(yàn)](https://file.elecfans.com/web1/M00/E7/B9/pIYBAGBhb12AYhw9AAAxHZKXLMg997.png)
怎么才能寫出高覆蓋率的Verilog代碼?
高覆蓋率的Verilog代碼的編寫技巧
代碼覆蓋率記錄
![代碼<b class='flag-5'>覆蓋率</b>記錄](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論