什麽是測試覆蓋率?
顧名思義,軟件測試對被測程序的(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認證要求所示:
-- 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ú)下圖所示。
圖: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)解決方案
相關産品
VectorCAST
領先的(de)C/C++/Ada軟件動态測試和(hé)測試完整性驗證工具,覆蓋軟件的(de)單元測試、集成測試、系統測試、回歸測試和(hé)覆蓋率分析等主要測試環節。在自(zì)動化生成測試用例、高(gāo)效的(de)圖形化測試平台和(hé)嵌入式測試方面具有顯著優勢。
查看更多
DT10
新一(yī)代的(de)軟件灰盒測試和(hé)系統動态跟蹤調試工具,利用領先的(de)自(zì)動化碼插裝技術,支持對軟件的(de)長(cháng)時間運行監控、複雜bug回溯定位、性能測試、軟硬件同步檢測和(hé)覆蓋率分析等,尤其适用于高(gāo)可(kě)靠性要求的(de)嵌入式軟件。
查看更多
Visure Requirements
一(yī)站式的(de)完整需求管理(lǐ)平台,用于軟硬件産品的(de)研發需求管理(lǐ),建立貫穿應用全生命周期的(de)可(kě)追溯性,覆蓋需求的(de)定義、導入、編輯、變更和(hé)維護等各個環節。內(nèi)建“開箱即用”數據模型,快速滿足常見的(de)高(gāo)可(kě)靠性研發标準。
查看更多
相關資源
白皮書
新聞資訊
通過确保測試的(de)完整性控制産品質量_白皮書
點擊下載
如(rú)何評估嵌入式軟件測試工具_白皮書
點擊下載
如(rú)何開發高(gāo)質量的(de)軟件_白皮書
點擊下載
人工分析覆蓋率_白皮書
點擊下載
利用Wind River VxWorks7實現自(zì)動化軟件測試_白皮書
點擊下載
2015軟件測試技術報告_白皮書
點擊下載
RELATED RESOURCES
下載申請