邏輯覆蓋測試:是通過對程式邏輯結構的遍歷實現程式的覆蓋。從覆蓋源**的不同程度可以分為以下六個標準:語句覆蓋、判定覆蓋(又稱為分支覆蓋)、條件覆蓋、判定-條件覆蓋(又稱為分支-條件覆蓋)、條件組合覆蓋和路徑覆蓋。
先看一下具體例子的源**(c語言):
int logicexample(int x, int y)
else
if(magic
return magic; // 語句塊4}
一般做白盒測試不會直接根據源**,而是根據流程圖來設計測試用例和編寫測試**,在沒有設計文件時,要根據源**畫出流程圖:
做好了上面的準備工作,接下來就開始講解六個邏輯覆蓋標準:
一、語句覆蓋
1、概念:
設計足夠多的測試用例,使得被測試程式中的每條可執行語句至少被執行一次。在本例中,可執行語句是指語句塊1到語句塊4中的語句。
2、測試用例:
可以執行到語句塊1和語句塊4,所走的路徑:a-b-e-f
可以執行到語句塊2、語句塊3和語句塊4,所走的路徑:a-c-d-f
這樣,通過兩個測試用例即達到了語句覆蓋的標準,當然,測試用例(測試用例組)並不是唯一的。
3、測試的充分性:
假設第乙個判斷語句if(x>0 && y>0)中的「&&」被程式設計師錯誤地寫成了「||」,即if(x>0 || y>0),使用上面設計出來的一組測試用例來進行測試,仍然可以達到100%的語句覆蓋,所以語句覆蓋無法發現上述的邏輯錯誤。
在六種邏輯覆蓋標準中,語句覆蓋標準是最弱的。
二、判斷覆蓋(分支覆蓋)
1、概念:
設計足夠多的測試用例,使得被測試程式中的每個判斷的「真」、「假」分支至少被執行一次。在本例中共有兩個判斷if(x>0 && y>0)(記為p1)和if(magic < 0)(記為p2)。
2、測試用例:
資料p1
p2路徑tf
a-b-e-f
f
ta-c-d-f
兩個判斷的取真、假分支都已經被執行過,所以滿足了判斷覆蓋的標準。
3、測試的充分性:
假設第乙個判斷語句if(x>0 && y>0)中的「&&」被程式設計師錯誤地寫成了「||」,即if(x>0 || y>0),使用上面設計出來的一組測試用例來進行測試,仍然可以達到100%的判定覆蓋,所以判定覆蓋也無法發現上述的邏輯錯誤。
跟語句覆蓋相比:由於可執行語句要不就在判定的真分支,要不就在假分支上,所以,只要滿足了判定覆蓋標準就一定滿足語句覆蓋標準,反之則不然。因此,判定覆蓋比語句覆蓋更強。
三、條件覆蓋
1、概念:
設計足夠多的測試用例,使得被測試程式中的每個判斷語句中的每個邏輯條件的可能值至少被滿足一次。
也可以描述成:
設計足夠多的測試用例,使得被測試程式中的每個邏輯條件的可能值至少被滿足一次。
在本例中有兩個判斷if(x>0 && y>0)(記為p1)和if(magic < 0)(記為p2),共計三個條件x>0(記為c1)、y>0(記為c2)和magic<0(記為c3)。
2、測試用例:
資料
c1c2
c3p1
p2路徑tt
ttfa-b-e-fff
ffta-c-d-f
三個條件的各種可能取值都滿足了一次,因此,達到了100%條件覆蓋的標準。
3、測試的充分性:
上面的測試用例同時也到達了100%判定覆蓋的標準,但並不能保證達到100%條件覆蓋標準的測試用例(組)都能到達100%的判定覆蓋標準,看下面的例子:
資料
c1c2
c3p1
p2路徑tf
tffa-c-e-fft
fffa-c-e-f
既然條件覆蓋標準不能100%達到判定覆蓋的標準,也就不一定能夠達到100%的語句覆蓋標準了。
四、判定-條件覆蓋(分支-條件覆蓋)
1、概念:
設計足夠多的測試用例,使得被測試程式中的每個判斷本身的判定結果(真假)至少滿足一次,同時,每個邏輯條件的可能值也至少被滿足一次。即同時滿足100%判定覆蓋和100%條件覆蓋的標準。
2、測試用例:
資料
c1c2
c3p1
p2路徑tt
ttfa-b-e-fff
ffta-c-d-f
所有條件的可能取值都滿足了一次,而且所有的判斷本身的判定結果也都滿足了一次。
3、測試的充分性:
達到100%判定-條件覆蓋標準一定能夠達到100%條件覆蓋、100%判定覆蓋和100%語句覆蓋。
五、條件組合覆蓋
1、概念:
設計足夠多的測試用例,使得被測試程式中的每個判斷的所有可能條件取值的組合至少被滿足一次。
注意:a、條件組合只針對同乙個判斷語句內存在多個條件的情況,讓這些條件的取值進行笛卡爾乘積組合。
b、不同的判斷語句內的條件取值之間無需組合。
c、對於單條件的判斷語句,只需要滿足自己的所有取值即可。
2、測試用例:
資料c1
c2c3
p1p2路徑f
ffff
a-c-e-fft
fffa-c-e-ftf
fffa-c-e-ftt
ttta-b-d-f
c1和c2處於同一判斷語句中,它們的所有取值的組合都被滿足了一次。
3、測試的充分性:
100%滿足條件組合標準一定滿足100%條件覆蓋標準和100%判定覆蓋標準。
但上面的例子中,只走了兩條路徑a-c-e-f和a-b-d-f,而本例的程式存在三條路徑(a-b-d-f/a-c-d-f/a-c-e-f),還有一條路徑是a-b-e-f,是不可能覆蓋的路徑。
六、路徑覆蓋
1、概念:
設計足夠多的測試用例,使得被測試程式中的每條路徑至少被覆蓋一次。
2、測試用例:
資料c1
c2c3
p1p2路徑t
tttt
a-b-d-fft
tfta-c-d-f
這條路徑不可能
a-b-e-fft
fffa-c-e-f
所有可能的路徑都滿足過一次。
3、測試的充分性:
由上表可見,100%滿足路徑覆蓋,但並不一定能100%滿足條件覆蓋(c2只取到了真),但一定能100%滿足判定覆蓋標準(因為路徑就是從判斷的某條分支走的)
六種邏輯覆蓋的強弱關係:
在外面很多的教程都認為這六種邏輯覆蓋從弱到強的排列順序是:
語句覆蓋->判定覆蓋->條件覆蓋->判定-條件覆蓋->條件組合覆蓋->路徑覆蓋
但經過上面的分析,它們之間的關係實際上可以用下圖表示:
而路徑覆蓋很難在該圖表示出來。
白盒測試邏輯覆蓋法
看新定的測試覆蓋率標準,有點暈。1 語句覆蓋率達到100 2 分支覆蓋率不低於70 開始覺得,這兩個限制有點矛盾,語句覆蓋率都達到100 了,分支覆蓋率還沒達到100 答案 是。舉個例子說明 if a and b then action1 if c or d then action2 就拿這個來說,...
白盒測試 邏輯覆蓋法
白盒測試又稱結構測試 透明盒測試 邏輯驅動測試或基於 的測試。白盒測試是一種測試用例設計方法方法,盒子指的是被測試的軟體,白盒指的是盒子是可視的,你清楚盒子內部的東西以及裡面是如何運作的。白盒 法全面了解程式內部邏輯結構 對所有邏輯路徑進行測試。白盒 法是窮舉路徑測試。在使用這一方案時,測試者必須檢...
軟體測試 實驗 1 邏輯覆蓋測試方法
1 能熟練應用白盒測試技術 邏輯覆蓋方法 進行測試用例設計。2 對測試用例進行優化設計。作業系統 windows xp,windows 7,windows 10 應用系統 visual c 開發工具和office工具 說明 程式段中每行開頭的數字 1 10 是對每條語句的編號。1 畫出程式的控制流圖...