選擇程式碼覆蓋率工具的10個準則

作者 : Klaus Lambertz,Verifysoft Technology執行長暨聯合創始人

如果沒有充分和有記錄的測試,就不可能確定軟體是否安全及功能是否正確。在這種情況下,程式碼覆蓋率(或測試覆蓋率)這個測量指標就顯得尤為重要…

為了開發出安全可靠的軟體,測試是品質保證中不可或缺的一部分。如果沒有充分和有記錄的測試,就不可能確定軟體是否安全及功能是否正確。在這種情況下,程式碼覆蓋率(code coverage,或測試覆蓋率,test coverage)這個測量指標就顯得尤為重要,這是因為它可以用來衡量一個軟體已經被測試的全面程度。

程式碼覆蓋率表示已測程式碼佔總程式碼的比例,舉例來說,如果在測試期間執行了四分之三的程式碼選項,那麼程式碼覆蓋率就是75%。

特別是在安全關鍵的軟體發展專案中,產業標準對程式碼覆蓋率提出了很高的要求,如果沒有足夠的測試覆蓋率證明,產品就無法獲得認證。在其他開發專案中,許多公司也越來越重視軟體品質和測量程式碼覆蓋率。

市場上可用的程式碼覆蓋率分析器有很多種,它們在操作性能和產品品質方面存在顯著差異。出於這個原因,以下提供選擇程式碼覆蓋率工具的十個基本標準:

1.獨立於編譯器

當然,程式碼覆蓋率工具必須與專案中使用的編譯器配合使用。然而,選用一個從一開始就可以獨立於編譯器使用的工具很有意義。這樣的工具不僅可以在當前項目中使用,也可以在使用不同編譯器的所有專案中使用。獨立於編譯器的覆蓋率工具能以更加多樣化的方式使用,因此非常值得投資。

2.容易使用

如果一款軟體設計成不必要的複雜,或者設計時沒有經過深思熟慮,則很少有人願意使用。而一款操作簡單的測試覆蓋率軟體可顯著提高使用者的接受度。理想情況下,這些工具應該在後台運作,在測試過程中不會為用戶產生任何額外的負擔。

3.覆蓋率報告容易理解

在評估覆蓋率報告時,應該很容易看清楚程式碼的哪些部分已通過測試、哪些部分仍未覆蓋到。使用良好的覆蓋率工具,測試人員可輕鬆地在原始程式碼層級辨識哪些測試案例仍未完成。透過執行這些缺失的測試,就能針對性地提高程式碼覆蓋率,同時也能避免因冗餘測試而導致不必要的工作。

4.可為安全關鍵開發項目提供更高的覆蓋率水準

針對安全關鍵軟體的測試,許多標準(例如汽車領域的ISO 26262、航空領域的DO-178C和鐵路運輸領域的EN-50128)規定了高達MC/DC覆蓋率的高覆蓋水準。因此,必須確保覆蓋率工具能夠支援所有要求的覆蓋率等級。為了能夠長期使用同一個解決方案,不僅應該考慮當前的需求,還應該考慮未來的需求。重要的是要知道:許多覆蓋率工具僅提供判斷或分支覆蓋,不足以用於安全關鍵軟體的開發。

5.靈活整合

即使在公司內部,開發環境和工具鏈也常是多種多樣,覆蓋率工具應該可以輕鬆應對所有這些不同的環境。它們必須能夠無縫整合進相應的生成過程和測試的運作中,並且不會太麻煩。如果這些工具也可以透過命令行使用,那麼在自動化生成執行程式碼的創建方面就具有很大的優勢。

6.檢測開銷低

大多數覆蓋率工具透過檢測原始程式碼來測量程式碼覆蓋率。它們會在原始程式碼中增加「計數器」,用於計算測試過程中相關程式碼部分的執行位置和執行頻率。但是,這會增加原始程式碼的大小。因此在對記憶體容量有限的嵌入式目標進行測試時,應注意盡可能降低這種所謂的儀器檢測開銷。

7.支援不同的程式設計語言

許多公司經常使用不同的程式設計語言,也可能計畫在未來導入其他語言。因此,從一開始就選擇支援所有或盡可能多的語言的工具是有意義的。

8.支援「創造性」的程式設計

一些覆蓋率工具在分析非通用標準或具有深度嵌套的語言結構時會遇到問題。因此一個好的測試覆蓋率工應該能夠應對「創造性」的程式設計風格。

9.支援安全關鍵類軟體發展

在開發安全關鍵類軟體時,相關標準要求整個工具鏈都必須得到認證,目的是證明覆蓋率分析器和整個工具鏈中使用的其他工具都能可靠地工作。專業的程式碼覆蓋率工具製造商透過認證套件和有關工具認證的建議來支援軟體專案,在這種情況下,仍應注意所選的覆蓋率工具是否已成功用於安全關鍵類專案。

10.評估許可、技術支援和用戶參考

在工具評估過程中應檢查覆蓋率工具對專案的適用性。在此期間,已對技術支持的表現有一個印象。是否也可以透過電話或電子郵件獲得支援?支持人員的能力如何?回應時間呢?用戶手冊有多好和有多實用?製造商是否也提供培訓?最後而且也很重要的一點是,建議查看製造商提供的用戶參考資料,它們可以提供有關覆蓋率分析器的品質和供應商能力的更多資訊。

總結

對於安全關鍵類的軟體發展來說程式碼覆蓋率測試是強制性的。對於任何想要提高軟體品質的人而言,測量覆蓋率是一個很好的方法,它能提高軟體測試的價值。在選擇程式碼覆蓋率分析器時,必須注意確保這些工具能夠滿足多方面的要求,並能發揮重要作用。如果使用得當,一個好的測試覆蓋率工具有助於顯著提高軟體品質,提高開發人員和測試人員的積極性,並節省測試成本。

(參考原文:10 criteria for selecting a code coverage tool,by Klaus Lambertz)

本文同步刊登於《電子工程專輯》雜誌202112月號

 

 

 

 

加入我們官方帳號LINE@,最新消息一手掌握!

發表評論