什麼(me)是測試覆蓋率?
顧名思義,軟件測試對(duì)被(bèi)測程序的測試範圍的度量指标,用以評價測試的完全程度。最常用的測試覆蓋率評測方法是基于需求的測試覆蓋率和基于代碼的測試覆蓋率。
基于需求的測試覆蓋率,不難理解就(jiù)是指一條設計需求至少有一個測試用例對(duì)其進(jìn)行驗證。實際評測中有兩(liǎng)種(zhǒng)方法,一種(zhǒng)是設計需求所對(duì)應的測試用例執行後(hòu)即認定獲得對(duì)該條需求的測試覆蓋,也可以隻將(jiāng)執行通過(guò)了的測試用例所對(duì)應的需求認定爲被(bèi)覆蓋,通常二者均可被(bèi)接受。基于需求的測試覆蓋率的高低主要取決于,測試人員是否對(duì)每一條設計需求都(dōu)有針對(duì)性地創建和執行測試用例。
基于代碼的測試覆蓋率,則是從代碼層面(miàn)度量測試執行範圍的指标,通過(guò)統計有多少/哪些代碼在測試中被(bèi)執行到了來衡量測試的完全度。按照統計的準則的不一樣(yàng),往往分爲語句覆蓋、分支覆蓋、修正的條件/分支覆蓋(MC/DC)、函數覆蓋和函數調用覆蓋等多種(zhǒng)測試覆蓋率類型。基于代碼的測試覆蓋率提供了對(duì)測試完全度更精确的量化指标。
爲什麼(me)要統計測試覆蓋率?
簡言之,測試覆蓋率是通過(guò)量化“軟件哪裡(lǐ)有被(bèi)測試過(guò),哪裡(lǐ)沒(méi)有被(bèi)測試過(guò)”來保證測試的完全性。誠然,沒(méi)有完美的軟件,也沒(méi)有100%充分的測試用例,但用戶至少可以通過(guò)測試覆蓋率指标來評價測試的完全度是否達到了預期 –– 很顯然,測試工作結束後(hòu),若是依然有爲數衆多的需求或者代碼都(dōu)未被(bèi)測試覆蓋到,將(jiāng)是一件需要被(bèi)謹慎對(duì)待的事(shì)情。
所以,對(duì)于有較高可靠性或安全性的軟件系統來說(shuō),通過(guò)評價測試覆蓋率來提高測試的質量是非常有效且有必要的手段。
另一方面(miàn),無論是功能(néng)安全SIL/ASIL,還(hái)是适航認證,所執行的IEC 61508/ En 5018/ ISO 26262/ DO-178B, DO-178C标準中都(dōu)對(duì)軟件的測試覆蓋率做了明确的要求。如下圖SIL認證要求所示:
-- HR: Highly Recommended
-- R: Recommended
Entry Points Coverage: 入口點覆蓋。最基本的測試覆蓋率類型,現在在很多行業中更多地被(bèi)以‘函數覆蓋’和‘函數調用覆蓋’的标準被(bèi)執行,要求軟件中所包含的函數至少有被(bèi)執行和調用到,避免測試的明顯遺漏或出現榮譽代碼。
Statement Coverage: 語句覆蓋。SIL Level 2, ASIL Level B, DO-178B, DO-178C Level C以上等級的認證都(dōu)要求軟件測試達到語句覆蓋,以保證每個可執行的代碼行在測試中至少被(bèi)執行了一次。比如下面(miàn)的語句隻要一個測試用例即可以滿足該語句被(bèi)測試覆蓋到。
if((a || b) && c)
Brach Coverage: 分支覆蓋。 SIL Level 3, ASIL Level C, DO-178B, DO-178C Level B及以上等級要求測試的分支覆蓋,集中在每個分支判定語句 -- 判定結果可以是TRUE或FALSE,以保證每個分支至少被(bèi)遍曆一次。還(hái)是下面(miàn)的if語句爲例:
if((a || b) && c)
爲了滿足該語句的分支覆蓋率,至少需要2個測試用例來分别覆蓋它的TRUE和FALSE這(zhè)兩(liǎng)個分支。所以我們在設計測試用例的時(shí)候需要考慮if語句中的判定條件,創造符合要求的測試輸入參數。
MC/DC Coverage: 修正的條件/分支覆蓋率。SIL Level 4, ASIL Level D, DO-178B, DO-178C Level A或和核安全級等最高安全等級的标準,除了要求以上測試覆蓋率以外,還(hái)會(huì)要求MC/DC覆蓋率。它是要求更高的測試覆蓋率,更苛刻的覆蓋條件。MC/DC覆蓋率要求條件判定語句中的每個子條件都(dōu)獨立地影響條件判定結果。換句話說(shuō),條件判定語句中的每個子條件都(dōu)在其它條件不變的情況下改變了條件判定結果。舉個例子,
if((a || b) && c)
爲了滿足上面(miàn)的包含a, b, c三個子條件的if條件判定語句的MC/DC覆蓋率,我們需要設計至少4個(n+1)個測試用例,組成(chéng)3對(duì)測試用例,讓a, b, c分别獨立地影響判定結果。如下圖所示。
圖:MC/DC條件對(duì)
即便是最有經(jīng)驗的測試工程師,要完成(chéng)這(zhè)個任務都(dōu)是不容易的。所以MC/DC覆蓋率一般隻會(huì)在最高安全等級要求的項目,即軟件錯誤可能(néng)造成(chéng)衆多人員死亡且發(fā)生概率不低的系統中被(bèi)強制要求。
難點和挑戰
統計代碼測試覆蓋率勢必要對(duì)測試代碼進(jìn)行插裝,而插裝膨脹率太大、或者編譯器不兼容、或者插裝算法不成(chéng)熟,都(dōu)會(huì)導緻插裝後(hòu)無法正常編譯或者運行
隻能(néng)統計上位機軟件的測試覆蓋率,無法支持嵌入式式環境
隻能(néng)統計單一測試環節的測試覆蓋率,比如僅支持單元測試的覆蓋率,無法統計系統測試覆蓋率
多次測試執行的測試覆蓋率無法累加,需要重複集中執行
測試覆蓋率報告不直觀、不易理解
解決方案
基于需求的測試覆蓋率和追溯關系。通過(guò)建立設計需求與測試用例的追溯管理來保證,“基于需求的測試”用例對(duì)需求的完整覆蓋
自動統計單元測試、集成(chéng)測試等模塊級别的測試覆蓋率
自動統計系統功能(néng)測試的測試覆蓋率
支持不同級别的測試環節之間的測試覆蓋率疊加及增量分析
完美支持各種(zhǒng)嵌入式目标機環境和上位機平台
統計語句覆蓋、分支覆蓋、MC/DC覆蓋、函數覆蓋和函數調用覆蓋等常用的測試覆蓋率類型
運行時(shí)的動态測試覆蓋率統計
動畫回放測試覆蓋過(guò)程
完全符合适航和功能(néng)安全等高可靠性行業認證标準的解決方案
相關産品
VectorCAST
領先的C/C++/Ada軟件動态測試和測試完整性驗證工具,覆蓋軟件的單元測試、集成(chéng)測試、系統測試、回歸測試和覆蓋率分析等主要測試環節。在自動化生成(chéng)測試用例、高效的圖形化測試平台和嵌入式測試方面(miàn)具有顯著優勢。
查看更多
DT10
新一代的軟件灰盒測試和系統動态跟蹤調試工具,利用領先的自動化碼插裝技術,支持對(duì)軟件的長(cháng)時(shí)間運行監控、複雜bug回溯定位、性能(néng)測試、軟硬件同步檢測和覆蓋率分析等,尤其适用于高可靠性要求的嵌入式軟件。
查看更多
Visure Requirements
一站式的完整需求管理平台,用于軟硬件産品的研發(fā)需求管理,建立貫穿應用全生命周期的可追溯性,覆蓋需求的定義、導入、編輯、變更和維護等各個環節。内建“開(kāi)箱即用”數據模型,快速滿足常見的高可靠性研發(fā)标準。
查看更多
相關資源
白皮書
新聞資訊
通過(guò)确保測試的完整性控制産品質量_白皮書
點擊下載
如何評估嵌入式軟件測試工具_白皮書
點擊下載
如何開(kāi)發(fā)高質量的軟件_白皮書
點擊下載
人工分析覆蓋率_白皮書
點擊下載
利用Wind River VxWorks7實現自動化軟件測試_白皮書
點擊下載
2015軟件測試技術報告_白皮書
點擊下載
RELATED RESOURCES
下載申請