測試覆蓋率
用來衡量測試的充分性和完整性,從廣義的角度來講,測試覆蓋率主要分為兩大類
- 面向項目的需求覆蓋率
- 偏向技術的代碼覆蓋率
需求覆蓋率
定義:指測試對需求的覆蓋程度,通常的做法是將每一條分解后的軟件需求和對應的測試用例建立一對多的映射關系,最終目標是保證測試可以覆蓋每個需求
現狀:需求覆蓋率統計方法屬於傳統瀑布模型下的軟件工程實踐,已經很難適應當下的敏捷開發實踐了
應對:所以現在很少直接基於需求來衡量測試覆蓋率,而是將軟件需求轉換成測試需求,然后基於測試需求再來設計測試點
now:現在人們口中的測試覆蓋率,通常默認指代碼覆蓋率,而不是需求覆蓋率
代碼覆蓋率
定義:簡單來說,是指至少被執行了一次的條目數占整個條目數的百分比
語句覆蓋:已經 被執行到的語句 占 總可執行語句 的百分比,要求最低的覆蓋率指標
判定覆蓋:又稱 分支覆蓋 ,度量程序中每一個判定的分支是否都被測試到,即每個判斷的 取真分支 和 取假分支 都要覆蓋一次;比如,對於 if(a>0 && b>0),就要求覆蓋“a>0 && b>0”為 TURE 和 FALSE 各一次。
條件覆蓋:判定中的每個條件的結果TRUE和FALSE是否都被測試到了;比如,對於 if(a>0 && b>0),就要求“a>0”取 TRUE 和 FALSE 各一次,同時要求“b>0”取 TRUE 和 FALSE 各一次。
代碼覆蓋率的價值
統計代碼覆蓋率的根本目的是找出潛在的遺漏測試用例,並有針對性的進行補充,同時還可以識別出代碼中那些由於需求變更等原因造成的不可達的廢棄代碼。
通常我們希望代碼覆蓋率越高越好,說明測試用例設計時充分且完備的;
但實際情況是,隨着代碼覆蓋率提高,測試成本也會迅速增加;所以在企業中,一般只有單元測試階段對代碼覆蓋率有較高的要求
代碼覆蓋率的局限性
即使設計的測試用例已達到100%的代碼覆蓋率,軟件產品的質量也是做不到萬無一失的
根本原因是:代碼覆蓋率的計算是基於現有代碼的,並不能發現那些 未考慮某些輸入 以及 未處理某些情況 形成的缺陷
顯然,代碼覆蓋率反映的僅僅是已有代碼的哪些邏輯被執行過,哪些邏輯未被執行;依此依據去補充用例測試那些還未被覆蓋到的執行路徑
總的來說:高的代碼覆蓋率不一定能保證軟件質量,但是低的代碼覆蓋率一定不能保證軟件質量
