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

統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)

怎么才能寫出高覆蓋率的Verilog代碼?
高覆蓋率的Verilog代碼的編寫技巧
代碼覆蓋率記錄

評(píng)論