為了開(kāi)發(fā)安全可靠的軟件,測(cè)試是質(zhì)量保證不可或缺的一部分。如果沒(méi)有充分的記錄測(cè)試,就不可能確定軟件是否安全且功能是否正確。在這種情況下,代碼覆蓋率(測(cè)試覆蓋率)的測(cè)量尤為重要。這是因?yàn)樗梢杂脕?lái)確定一個(gè)軟件已經(jīng)被測(cè)試的全面程度。代碼覆蓋率表示測(cè)試代碼與總代碼的比率。簡(jiǎn)而言之,例如,如果在測(cè)試期間運(yùn)行四分之三的可能選項(xiàng),則代碼覆蓋率為 75%。
特別是在安全關(guān)鍵型軟件開(kāi)發(fā)中,行業(yè)標(biāo)準(zhǔn)對(duì)代碼覆蓋率規(guī)定了精確的要求,因此如果沒(méi)有足夠的測(cè)試覆蓋率證明,產(chǎn)品就無(wú)法在此處進(jìn)行認(rèn)證。而且在其他開(kāi)發(fā)項(xiàng)目中,公司也越來(lái)越重視軟件質(zhì)量和衡量代碼覆蓋率。
市場(chǎng)上有各種代碼覆蓋率分析儀可用于測(cè)量代碼覆蓋率。它們?cè)谔幚砗唾|(zhì)量方面存在顯著差異。出于這個(gè)原因,我們展示了選擇代碼覆蓋工具的十個(gè)基本標(biāo)準(zhǔn):
1. 獨(dú)立于編譯器
當(dāng)然,代碼覆蓋工具必須與項(xiàng)目中使用的編譯器配合使用。但是,從一開(kāi)始就依賴于可以獨(dú)立于編譯器使用的工具是很有意義的。這樣的工具可以在所有項(xiàng)目中使用,在編譯器更改的情況下也可以在當(dāng)前項(xiàng)目中使用??梢元?dú)立于編譯器使用的覆蓋工具可以以更多樣化的方式使用,因此是值得投資的。
2. 易用性
如果最好的軟件不必要地復(fù)雜或沒(méi)有經(jīng)過(guò)深思熟慮,則不情愿地(因此很少)使用它。另一方面,簡(jiǎn)單的處理可以顯著提高用戶對(duì)使用測(cè)試覆蓋工具的接受度。理想情況下,該工具在后臺(tái)運(yùn)行,并且在測(cè)試期間不會(huì)為用戶生成任何額外的工作。
3. 報(bào)道的可理解性
在評(píng)估覆蓋率報(bào)告時(shí),應(yīng)該一目了然地知道哪些代碼部分已經(jīng)過(guò)測(cè)試,哪些地方仍然缺乏覆蓋率。使用良好的覆蓋率工具,測(cè)試人員可以輕松地在源代碼級(jí)別識(shí)別哪些測(cè)試用例仍然出色。通過(guò)執(zhí)行這些缺失的測(cè)試,可以有針對(duì)性地增加代碼覆蓋率。同時(shí),這避免了因冗余測(cè)試而導(dǎo)致的不必要的工作。
圖:除了單個(gè)代碼部分的代碼覆蓋率概述(上),有效的代碼覆蓋率工具(如 Testwell CTC++)還顯示詳細(xì)信息(下),準(zhǔn)確顯示測(cè)試覆蓋源代碼的程度,即使是最高覆蓋率。(來(lái)源:Verifysoft Technology)
4. 為安全關(guān)鍵型開(kāi)發(fā)提供更高覆蓋水平的支持
對(duì)于安全關(guān)鍵軟件的測(cè)試,標(biāo)準(zhǔn)(例如汽車領(lǐng)域的 ISO 26262、航空領(lǐng)域的 DO-178C 和鐵路運(yùn)輸領(lǐng)域的 EN-50128)規(guī)定了最高 MC/DC 覆蓋范圍的高覆蓋水平。因此,必須確保覆蓋工具支持所有必需的覆蓋級(jí)別。為了能夠長(zhǎng)期使用解決方案,不僅要考慮當(dāng)前的需求,還要考慮未來(lái)的需求。重要提示:許多覆蓋工具僅提供決策或分支覆蓋,因此不足以進(jìn)行安全關(guān)鍵型軟件開(kāi)發(fā)。
代碼覆蓋率一覽
函數(shù)覆蓋率
函數(shù)覆蓋率衡量程序的所有函數(shù)是否都被調(diào)用。功能覆蓋率是通常測(cè)試覆蓋率級(jí)別中“最弱的”。
語(yǔ)句覆蓋率
語(yǔ)句覆蓋率衡量測(cè)試語(yǔ)句與所有語(yǔ)句相比的百分比。
決策覆蓋率/分支覆蓋率
在此覆蓋率級(jí)別,每個(gè)決策必須至少測(cè)試一次為真,一次為假。對(duì)于普通的 if 語(yǔ)句,這對(duì)應(yīng)于分支覆蓋,其中每個(gè)分支都必須已執(zhí)行。
條件覆蓋
條件覆蓋詳細(xì)考慮復(fù)合決策。對(duì)于由通過(guò)布爾運(yùn)算符組成的多個(gè)原子條件組成的決策,必須將這些條件中的每一個(gè)單獨(dú)測(cè)試為“真”和“假”。
多條件覆蓋和修正條件/決策覆蓋 (MC/DC)
對(duì)于多條件覆蓋,必須檢查所有可能的真假組合以進(jìn)行復(fù)合決策。在一個(gè)決策中有多個(gè)條件的情況下,這需要大量幾乎不切實(shí)際的測(cè)試用例。因此,在實(shí)踐和標(biāo)準(zhǔn)中,修改后的條件/決策覆蓋率 (MC/DC) 是相關(guān)的,其中測(cè)試用例的數(shù)量減少了,而測(cè)試覆蓋率的信息價(jià)值仍然足夠高。
5. 靈活集成
即使在公司內(nèi)部,開(kāi)發(fā)環(huán)境和工具鏈通常也非常多樣化。覆蓋工具應(yīng)該可以輕松應(yīng)對(duì)所有這些不同的環(huán)境。必須能夠無(wú)縫地集成到各自的構(gòu)建過(guò)程和測(cè)試的執(zhí)行中,并且無(wú)需付出很大的努力。如果該工具也可以通過(guò)命令行使用,則在創(chuàng)建自動(dòng)構(gòu)建方面具有優(yōu)勢(shì)。
6. 低儀表開(kāi)銷
大多數(shù)覆蓋率工具通過(guò)檢測(cè)源代碼來(lái)衡量代碼覆蓋率。源代碼由帶有“計(jì)數(shù)器”的覆蓋工具豐富,它計(jì)算相關(guān)代碼部分在測(cè)試期間執(zhí)行的位置和頻率。但是,這會(huì)增加原始代碼的大小。因此,在內(nèi)存有限的嵌入式目標(biāo)上進(jìn)行測(cè)試時(shí),應(yīng)注意將這種所謂的檢測(cè)開(kāi)銷保持在盡可能低的水平。各個(gè)代碼覆蓋工具之間的內(nèi)存需求差異有時(shí)是相當(dāng)大的。例如,Verifysoft Technology 的代碼覆蓋率分析器 Testwell CTC++ 在這方面非常節(jié)省資源。
7.支持不同的編程語(yǔ)言
公司經(jīng)常使用不同的編程語(yǔ)言或計(jì)劃在未來(lái)引入其他語(yǔ)言。因此,從一開(kāi)始就選擇支持所有或盡可能多的這些語(yǔ)言的工具是有意義的。
8. 支持“創(chuàng)意”編程
一些覆蓋工具在分析偏離通用標(biāo)準(zhǔn)或嵌套深度較高的語(yǔ)言結(jié)構(gòu)時(shí)會(huì)遇到問(wèn)題。然而,衡量測(cè)試覆蓋率的好工具也應(yīng)該能夠應(yīng)對(duì)“創(chuàng)造性”的編程風(fēng)格。
9. 安全關(guān)鍵軟件開(kāi)發(fā)的適用性
在開(kāi)發(fā)安全關(guān)鍵型軟件時(shí),相關(guān)標(biāo)準(zhǔn)要求整個(gè)工具鏈必須經(jīng)過(guò)認(rèn)證。這里的目的是證明覆蓋分析器和整個(gè)工具鏈中使用的其他工具都能可靠地工作。專業(yè)代碼覆蓋工具的制造商通過(guò)鑒定工具包和工具鑒定建議支持軟件項(xiàng)目。在這種情況下,還應(yīng)注意所選的覆蓋工具是否已在安全關(guān)鍵項(xiàng)目中成功使用。
10. 評(píng)估許可、技術(shù)支持和客戶參考
應(yīng)在工具評(píng)估期間檢查覆蓋工具對(duì)自己項(xiàng)目的適用性。在此期間,您已經(jīng)對(duì)技術(shù)支持的表現(xiàn)有所了解。是否也可以通過(guò)電話或僅通過(guò)電子郵件獲得支持?支持人員的能力如何?響應(yīng)時(shí)間呢?用戶手冊(cè)有多好和實(shí)用?制造商是否也提供培訓(xùn)?最后但同樣重要的是,還建議查看制造商的客戶參考資料。這些可以提供有關(guān)覆蓋分析儀質(zhì)量和供應(yīng)商性能的更多信息。
結(jié)論
代碼覆蓋對(duì)于安全關(guān)鍵型軟件開(kāi)發(fā)來(lái)說(shuō)是強(qiáng)制性的,這是有充分理由的。但對(duì)于任何想要提高軟件質(zhì)量的人來(lái)說(shuō),這也是衡量和增加測(cè)試覆蓋率和價(jià)值的好方法。在選擇代碼覆蓋率分析器時(shí),必須注意確保該工具滿足設(shè)定的要求。此外,易用性和專業(yè)支持等因素也起著重要作用。正確使用,一個(gè)好的測(cè)試覆蓋工具有助于顯著提高質(zhì)量,增加開(kāi)發(fā)人員和測(cè)試人員的積極性,并以節(jié)省成本的方式執(zhí)行測(cè)試。
審核編輯 黃昊宇
-
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70758 -
覆蓋
+關(guān)注
關(guān)注
0文章
18瀏覽量
11055
發(fā)布評(píng)論請(qǐng)先 登錄
HarmonyOS AI輔助編程工具(CodeGenie)代碼測(cè)試
代碼靜態(tài)測(cè)試工具Perforce QAC 2025.1新特性

零跑汽車選擇QNX技術(shù)為B10車型提供支持
安森美再談圖像傳感器的選擇標(biāo)準(zhǔn)
STM32CubeMX生成代碼就會(huì)覆蓋CMakeLists.txt文件,怎么解決?
安森美分析圖像傳感器的選擇標(biāo)準(zhǔn)

點(diǎn)焊機(jī)測(cè)量工具選擇與應(yīng)用指南

了解DeepSeek-V3 和 DeepSeek-R1兩個(gè)大模型的不同定位和應(yīng)用選擇
EE-306:PGO linker-面向Blackfin處理器的代碼布局工具

LLMWorld上線代碼翻譯新工具——問(wèn)丫·碼語(yǔ)翻譯俠,快來(lái)體驗(yàn)!

ECU故障診斷工具 如何選擇合適的ECU
知識(shí)分享 | 符合ISO 26262標(biāo)準(zhǔn)的工具分類與鑒定

RISC-V Vector Intrinsic使用標(biāo)準(zhǔn)
化學(xué)標(biāo)識(shí)選擇工具(GPC)的簡(jiǎn)單指南

評(píng)論