什麽是測試覆蓋率?

顧名思義,軟件測試對被測程序的(de)測試範圍的(de)度量指标,用以評價測試的(de)完全程度。最常用的(de)測試覆蓋率評測方法是基于需求的(de)測試覆蓋率和(hé)基于代碼的(de)測試覆蓋率。

基于需求的(de)測試覆蓋率,不難理(lǐ)解就是指一(yī)條設計需求至少有一(yī)個測試用例對其進行驗證。實際評測中有兩種方法,一(yī)種是設計需求所對應的(de)測試用例執行後即認定獲得對該條需求的(de)測試覆蓋,也可(kě)以隻将執行通過了的(de)測試用例所對應的(de)需求認定為(wèi)被覆蓋,通常二者均可(kě)被接受。基于需求的(de)測試覆蓋率的(de)高(gāo)低(dī)主要取決于,測試人員是否對每一(yī)條設計需求都有針對性地(dì)創建和(hé)執行測試用例。

基于代碼的(de)測試覆蓋率,則是從代碼層面度量測試執行範圍的(de)指标,通過統計有多少/哪些代碼在測試中被執行到了來衡量測試的(de)完全度。按照統計的(de)準則的(de)不一(yī)樣,往往分為(wèi)語句覆蓋、分支覆蓋、修正的(de)條件/分支覆蓋(MC/DC)、函數覆蓋和(hé)函數調用覆蓋等多種測試覆蓋率類型。基于代碼的(de)測試覆蓋率提供了對測試完全度更精确的(de)量化指标。

為(wèi)什麽要統計測試覆蓋率? 

簡言之,測試覆蓋率是通過量化“軟件哪裏有被測試過,哪裏沒有被測試過”來保證測試的(de)完全性。誠然,沒有完美的(de)軟件,也沒有100%充分的(de)測試用例,但用戶至少可(kě)以通過測試覆蓋率指标來評價測試的(de)完全度是否達到了預期 –– 很顯然,測試工作結束後,若是依然有為(wèi)數衆多的(de)需求或者代碼都未被測試覆蓋到,将是一(yī)件需要被謹慎對待的(de)事情。

所以,對于有較高(gāo)可(kě)靠性或安全性的(de)軟件系統來說,通過評價測試覆蓋率來提高(gāo)測試的(de)質量是非常有效且有必要的(de)手段。

另一(yī)方面,無論是功能安全SIL/ASIL,還是适航認證,所執行的(de)IEC 61508/ En 5018/ ISO 26262/ DO-178B, DO-178C标準中都對軟件的(de)測試覆蓋率做(zuò)了明确的(de)要求。如(rú)下圖SIL認證要求所示:

測試覆蓋率-1

-- HR: Highly Recommended

-- R: Recommended

Entry Points Coverage: 入口點覆蓋。最基本的(de)測試覆蓋率類型,現在在很多行業中更多地(dì)被以‘函數覆蓋’和(hé)‘函數調用覆蓋’的(de)标準被執行,要求軟件中所包含的(de)函數至少有被執行和(hé)調用到,避免測試的(de)明顯遺漏或出現榮譽代碼。 

Statement Coverage: 語句覆蓋。SIL Level 2, ASIL Level B, DO-178B, DO-178C Level C以上等級的(de)認證都要求軟件測試達到語句覆蓋,以保證每個可(kě)執行的(de)代碼行在測試中至少被執行了一(yī)次。比如(rú)下面的(de)語句隻要一(yī)個測試用例即可(kě)以滿足該語句被測試覆蓋到。

if((a || b) && c)

Brach Coverage: 分支覆蓋。 SIL Level 3, ASIL Level C, DO-178B, DO-178C Level B及以上等級要求測試的(de)分支覆蓋,集中在每個分支判定語句 -- 判定結果可(kě)以是TRUE或FALSE,以保證每個分支至少被遍曆一(yī)次。還是下面的(de)if語句為(wèi)例:

if((a || b) && c)

為(wèi)了滿足該語句的(de)分支覆蓋率,至少需要2個測試用例來分别覆蓋它的(de)TRUE和(hé)FALSE這兩個分支。所以我們在設計測試用例的(de)時候需要考慮if語句中的(de)判定條件,創造符合要求的(de)測試輸入參數。

MC/DC Coverage: 修正的(de)條件/分支覆蓋率。SIL Level 4, ASIL Level D, DO-178B, DO-178C Level A或和(hé)核安全級等最高(gāo)安全等級的(de)标準,除了要求以上測試覆蓋率以外,還會要求MC/DC覆蓋率。它是要求更高(gāo)的(de)測試覆蓋率,更苛刻的(de)覆蓋條件。MC/DC覆蓋率要求條件判定語句中的(de)每個子(zǐ)條件都獨立地(dì)影響條件判定結果。換句話說,條件判定語句中的(de)每個子(zǐ)條件都在其它條件不變的(de)情況下改變了條件判定結果。舉個例子(zǐ),

if((a || b) && c)

為(wèi)了滿足上面的(de)包含a, b, c三個子(zǐ)條件的(de)if條件判定語句的(de)MC/DC覆蓋率,我們需要設計至少4個(n+1)個測試用例,組成3對測試用例,讓a, b, c分别獨立地(dì)影響判定結果。如(rú)下圖所示。

測試覆蓋率-2

                                                                                                                圖:MC/DC條件對

即便是最有經驗的(de)測試工程師,要完成這個任務都是不容易的(de)。所以MC/DC覆蓋率一(yī)般隻會在最高(gāo)安全等級要求的(de)項目,即軟件錯誤可(kě)能造成衆多人員死亡且發生概率不低(dī)的(de)系統中被強制要求。


難點和(hé)挑戰

  • 統計代碼測試覆蓋率勢必要對測試代碼進行插裝,而插裝膨脹率太大、或者編譯器不兼容、或者插裝算法不成熟,都會導緻插裝後無法正常編譯或者運行

  • 隻能統計上位機軟件的(de)測試覆蓋率,無法支持嵌入式式環境

  • 隻能統計單一(yī)測試環節的(de)測試覆蓋率,比如(rú)僅支持單元測試的(de)覆蓋率,無法統計系統測試覆蓋率

  • 多次測試執行的(de)測試覆蓋率無法累加,需要重複集中執行

  • 測試覆蓋率報告不直觀、不易理(lǐ)解

解決方案

  • 基于需求的(de)測試覆蓋率和(hé)追溯關系。通過建立設計需求與測試用例的(de)追溯管理(lǐ)來保證,“基于需求的(de)測試”用例對需求的(de)完整覆蓋

  • 自(zì)動統計單元測試、集成測試等模塊級别的(de)測試覆蓋率

  • 自(zì)動統計系統功能測試的(de)測試覆蓋率

  • 支持不同級别的(de)測試環節之間的(de)測試覆蓋率疊加及增量分析

  • 完美支持各種嵌入式目标機環境和(hé)上位機平台

  • 統計語句覆蓋、分支覆蓋、MC/DC覆蓋、函數覆蓋和(hé)函數調用覆蓋等常用的(de)測試覆蓋率類型

  • 運行時的(de)動态測試覆蓋率統計

  • 動畫回放測試覆蓋過程

  • 完全符合适航和(hé)功能安全等高(gāo)可(kě)靠性行業認證标準的(de)解決方案

相關資源

  • 白皮書

  • 新聞資訊

  • 通過确保測試的(de)完整性控制産品質量_白皮書

    點擊下載

  • 如(rú)何評估嵌入式軟件測試工具_白皮書

    點擊下載

  • 如(rú)何開發高(gāo)質量的(de)軟件_白皮書

    點擊下載

  • 人工分析覆蓋率_白皮書

    點擊下載

  • 利用Wind River VxWorks7實現自(zì)動化軟件測試_白皮書

    點擊下載

  • 2015軟件測試技術報告_白皮書

    點擊下載

RELATED RESOURCES

下載申請

是否需要技術支持

驗證碼

溫馨提示:

我們将通過電子(zǐ)郵件向您發送下載地(dì)址,請核對您填寫的(de)工作郵箱是否正确。

提 交