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