○ 條件覆蓋(Condition Coverage)率:每個條件操作數(Operand)可能的取值被測試所占的比例。
◆ 條件覆蓋率=(條件操作數值被至少執行一次的數量)/(條件操作數值的總數)
◆ 條件操作符容易被確認,有助于自動化測試;
◆ 優于判定覆蓋,但不能替代判定覆蓋率
○ 條件判斷覆蓋(Decision Condition Coverage/Branch Condition Coverage)率:設計足夠多的測試用例來滿足判定覆蓋率和條件覆蓋率
◆ 判定條件覆蓋率=(條件操作數值或判定結果至少被評價一次的數量)/(條件操作數值總數+判定結果總數)
◆ 便于自動化,優于條件覆蓋和判定覆蓋;
◆ 不是完整的覆蓋,還應該考慮路徑覆蓋。
○ 路徑覆蓋(Path Coverage)率:設計足夠多的測試用例,遍歷程序的所有可能的路徑
◆ 路徑覆蓋率=(至少被執行一次的路徑數)/(總的路徑數)
◆ 遇到復雜程序,循環次數多的時候,完成路徑覆蓋是很困難的,也沒有包含判定條件覆蓋。
從上面的集中邏輯覆蓋測試來看,它們相互補充,盡量達到被測試程序的100%,然而我們還是要明確測試是為了盡可能找出程序中的錯誤。卻沒有一種十全十美的測試方法來發現所有的錯誤,這也體現了測試的局限性。
● 功能覆蓋(Function Coverage)率,屬于黑盒測試范疇。
○ 需求覆蓋:
◆ 需求覆蓋率=(被驗證到的需求數量)/(總的需求數量)
○ 接口覆蓋/入口點覆蓋:使得系統的每個接口被測試到。
以上所說的覆蓋率都是屬于結構化覆蓋率的范疇,但是在面向對象領域中卻遇到挑戰。
面向對象的覆蓋率:關于面向對象的一些特性的測試,如:多態性、繼承性、封裝性等。
class Base{
public:void foo(){helper();}
void bar(){helper();}
private:virtual void helper(){...};};
class Derived:public Base{
private:virtual void helper(){...}};
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/