軟件測試系列--白盒測試覆蓋率的問題


覆蓋率##

一、覆蓋率的概念###

覆蓋率是用來度量測試完整性的一個手段,現在有越來越多的測試工具能夠支持覆蓋率測試,但是它們本身並不包含測試技術,只是測試技術有效性的一個度量。白盒測試中經常用到的覆蓋率是邏輯覆蓋率。

二、覆蓋率的目的###

覆蓋率對於軟件測試有着非常重要的作用,通過覆蓋率我們可以知道我們的測試是否充分,我們測試的弱點在哪些方面,進而指導我們設計能夠增加覆蓋率的測試用例,有效的提高測試質量。

一方面覆蓋率技術可以指導測試用例的設計;另一方面,可以通過覆蓋率來衡量白盒測試的力度。

三、邏輯覆蓋率主要有以下六種:###

(1)語句覆蓋;

(2)判定覆蓋;

(3)條件覆蓋;

(4)判定條件覆蓋;

(5)條件組合覆蓋;

(6)路徑覆蓋。

1、語句覆蓋(Statement Coverage)

語句覆蓋的含義是,在測試時,運行被測程序后,程序中被執行到的可執行語句的比率。

語句覆蓋=(至少被執行一次的語句數量)/可執行的語句總數。

*語句覆蓋是最弱的一種覆蓋方式。

2、判定覆蓋(Decision Coverage)

判定覆蓋也叫分支覆蓋(Branch Coverage),含義是:在測試時,運行被測程序后,程序中所有判斷語句的取真分支和取假分支被執行到的比率。

判定覆蓋=(判定結果被評價的次數)/判定結果的總數。

3、條件覆蓋(Condition Coverage)

條件覆蓋的含義是:在測試時,運行被測程序后,所有判斷語句中每個條件的可能取值(真值和假值)出現過的比率。

條件覆蓋=(條件操作數值至少被評價一次的數量)/(條件操作數值得總數)

4、判定條件覆蓋(Decision Condition Coverage)

判定條件覆蓋也叫分支條件覆蓋(Branch Condition Coverage)它的含義是:在測試時,運行被測程序后,所有判斷語句中每個條件的所有可能值(為真為假)和每個判斷本身的判定結果(為真為假)出現的比率。

判定條件覆蓋=(條件操作數值或判定結果至少被評價一次的數量)/(條件操作數值總數+判定結果總數)

*判定條件覆蓋率實際上就是判定覆蓋率和條件覆蓋率的組合。

5、條件組合覆蓋(Condition combination coverage)

條件組合覆蓋的含義是,在測試時,運行被測程序后,所有語句中子條件所有可能的取值結果組合出現過的比率。

條件組合覆蓋=(至少被執行到一次的條件組合)/總的可能的條件組合數。

*條件組合覆蓋是除路徑覆蓋以外,最強的一種覆蓋方式。

6、路徑覆蓋(Path Coverage)

路徑覆蓋的含義是:在測試時,運行被測程序后,程序中所有可能的路徑被執行過的比率。

路徑覆蓋=(至少被執行到一次的路徑數)/總的路徑數。

四、總結五種邏輯覆蓋率。###

1、語句覆蓋是最弱的一種覆蓋方式。

2、條件組合覆蓋是除路徑覆蓋以外,最強的一種覆蓋方式。

3、百分百的條件組合覆蓋一定包含:百分百的語句覆蓋、百分百的判定覆蓋、百分百的條件覆蓋以及百分百的判定條件覆蓋;但不一定包含百分百的路徑覆蓋。

4、百分百的判定覆蓋(分支覆蓋)一定包含:百分百的語句覆蓋。

5、百分百的條件覆蓋不一定包含:百分百的語句覆蓋。

五、舉例說明。###

圖1

<img src="https://images0.cnblogs.com/blog2015/706704/201504/291739062409387.jpg" width="400" height=400" align=center/>

范例一

1、分析圖1(被測程序流程圖)

(1)語句:有兩條語句,分別為,X=X/A 和 X=X+1。

(2)判定:有兩個判定,分別為(A>1)AND(B=0) 和 (A=2)OR(X>1);這兩個判定,分別都有兩種可能,true或者false,圖中我們用F或者T來表示,所以說這個流程中判定結果的總數為四。

(3)條件:每個判定里面都包含了兩個子條件,每個子條件都有兩種可能性,true或者false,圖中我們分別用T1 F1;T2 F2...來表示,每個判定里面就有四種可能,這樣,這個流程圖中的條件操作數值的總數為八。

(4)判定條件:判定條件覆蓋率實際上就是判定覆蓋率和條件覆蓋率的組合。

(5)條件組合:上面我們在條件里面提到過的,每個判定里面都包含了兩個子條件,每個子條件都有兩種可能性,true或者false,圖中我們分別用T1、F1、T2、F2...來表示,但是和條件覆蓋不一樣的是,每個子條件里面的兩種可能性(T或者F)都要進行兩兩組合,即進行排列組合,那么,條件組合的總數為八種組合。分別為:T1T2,F1F2,T1F2,F1T2;T3T4,F3F4,T3F4,F3T4.

**【 這個時候大家不能混淆這兩個概念,只是因為2個判定比較特殊而已,因為2乘以2和2的2次方是相等的,條件里面是八種條件,而條件組合里面是八種組合。如果一個判定里面有三個子條件的話,這一個判定里面的條件總值就成為2乘以3;而條件組合就是2的3次方。】

(6)路徑:圖1中路徑共有四條,即:abd,ace,abe,acd。

2、給出用例,計算以上六種覆蓋率的值

執行CASE:A=2;B=1;X=3。

在計算覆蓋率之前,我們首先要看判定中的子條件在做什么運算,第一個判定中,這兩個子條件在做與運算,(一個假即為假)。第二個判定中,這兩個子條件在做或預算,(一個真即為真)。

(1)語句覆蓋率:1/2 (50%)

分析:第一個判定中子條件的值為T1、F2(一真一假),所以我們走F這條分支,此時X=X/A這條語句沒有被執行到;接下來,我們看第二個判定,它的子條件的值為T3、T4(都為真),所以我們走T這條分支,這時,語句X=X+1這條語句被執行到了。也就是說,我們只執行到一條語句,所以語句覆蓋率位1/2。

(2)判定覆蓋率:2/4 (50%)

分析:我們剛才在分析語句覆蓋的時候,我們提到第一個判定語句走的是F分支,第二個判定語句也的是T分支,所以我們共走了兩條分支,分支總數為4,所以判定覆蓋率為:2/4。

(3)條件覆蓋率:4/8 (50%)

第一個判定中子條件的值為T1、F2;第二個判定的子條件的值為T3、T4。也就是說我們執行到的條件總數為4;總共的條件操作總值為8,所以條件覆蓋率為:4/8。

(4)判定條件覆蓋率:6/12 (50%)

前面我們已經分析過了,判定條件覆蓋率實際上就是判定覆蓋率和條件覆蓋率的組合,所以判定條件覆蓋率就等與,2/4 (判定覆蓋率)+ 4/8(條件覆蓋率)=6/12(注意,這里的“+”代表的是組合,而不是算數相加,所以是分子分母分別相加即可)。

(5)條件組合覆蓋率:2/8 (25%)

同樣的,在條件覆蓋率分析中我們已經提到過了,第一個判定中子條件的組合為T1F2;第二個判定的子條件的組合為T3T4,也就是說我們執行到了兩種組合;我們在分析流程圖的時候已經提到過,總的可能的條件總數為八種組合,所以說條件組合覆蓋率為:2/8。

(6)路徑覆蓋率:1/4 (25%)

在流程圖分析中我們已經提到,路徑共有四條,而我們走到的路徑為只有abe一條,所以路徑覆蓋率為:1/4。

范例二:

被測程序流程圖還是上面范例一的圖1

執行case1:A=2,B=0,X=3;

執行case2:A=1,B=0,X=1。

計算這兩種情況下的6種覆蓋率。

(1)語句覆蓋率:2/2 (100%)

case1:第一個判定中子條件的值為T1、T2(都為真),所以我們走T這條分支,執行到X=X/A這條語句;接下來,第二個判定,它的子條件的值為T3、T4(都為真),所以我們走T這條分支,這時,語句X=X+1這條語句被執行到了。也就是說,我們把兩條語句都執行到了,所以語句覆蓋率位2/2。

所以說case1這一條用例就可以到達100%的語句覆蓋,我們就不用再去執行case2了。

(2)判定覆蓋率:4/4 (100%)

case1:我們剛才在分析語句覆蓋的時候,我們提到第一個判定語句走的是T分支,第二個判定語句走的也是T分支;

case2:第一個判定語句中子條件的值為F1、T2,所以我們走F分支;第二個判定語句中子條件的值為F3、F4,所以我們依然走F分支;

上面兩個用例把我們兩個判定中的4個分支都執行到了,所以判定覆蓋率為4/4(100%)。

(3)條件覆蓋率:7/8(100%)

case1:第一個判定語句中子條件的值為T1、T2,第二個判定條件中子條件的值為T3、T4;

case2:第一個判定語句中子條件的值為F1、T2,第二個判定條件中子條件的值為F3、F4;

這兩個用例執行了七種條件,F2沒有執行到,所以條件覆蓋率為:7/8(100%)。

(4)判定條件覆蓋率:11/12。

判定條件覆蓋率=判定覆蓋率和條件覆蓋率的組合 = 4/4 + 7/8 = 11/12。

(5)條件組合覆蓋率:4/8 (50%)

case1:第一個判定語句中子條件的組合為T1T2,第二個判定條件中子條件的組合為T3T4;
	
case2:第一個判定語句中子條件的組合為F1T2,第二個判定條件中子條件的組合為F3F4;

我們可以看出:這兩個用例只執行到八種組合中的四種組合,所以條件組合覆蓋率為4/8(50%)。

(6)路徑覆蓋率:2/4(50%)

case1:在這條用例中我們所執行到的路徑為:ace。

case2:在這條用例中我們所執行到的路徑為:abd。

這兩條用例執行到兩條路徑(ace和abd),還有兩條路徑(abe和acd)沒有執行到,所以路徑覆蓋率為2/4(50%)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM