基礎復習-白盒測試方法


白盒測試是一種測試手段,多用於單元測試階段,測試對象是函數代碼等。追求的目標叫做:邏輯覆蓋率。共分為 語句覆蓋,判定覆蓋,條件覆蓋,判定/條件覆蓋 ,條件組合,路徑覆蓋 共六種測試方法。

語句覆蓋

語句覆蓋其就是讓每句代碼都至少執行一次的方法。

比如下面這段代碼:

if a > 2:
    print ">"
else:
    print "<"

若是要保證每條語句都至少執行一次的話,你就需要倆條用例即可:a = 1 和 a = 3

判定覆蓋

也叫分支覆蓋,目的是讓每個判定的 真假 都至少出現一次。

比如下面這段代碼:

if a > 2 or b >3:
    print ">"
else:
    print "<"

若要保證每個判定真假都至少出現一次,則最少需要倆條用例:a = 3 和 a =1,b=1
這樣 就保證了 判定(a>2orb>3) 真假至少出現了一次。

條件覆蓋

保證代碼中每個條件的真假都至少出現一次,這個就比較難了。來看下面的代碼:

if a>1 or b>2:
    print '>'
else:
    print '<'

若要保證條件(a>1)和(b>2)和(else)都至少出現一次真假,那么用例如下:

a = 0,b = 0 :此時條件(a>1)和(b>2)都出現了假

a = 4, b=4 :此時條件(a>1)和(b>2)都出現了真

判定條件覆蓋

這個方法就是要把判定和條件組合起來。用盡量少的用例同時滿足倆種覆蓋率的技術。

比如這段代碼:

if a>1 and b>1:
    print '>'
else:
    print '<'

用例設計如下:

a = 0,b=0 此時條件(a>1)為假,條件(b>1)為假,判定(a>1 and b>1) 也為假。

a =2 ,b=2 此時條件(a>1)為真,條件(b>1)為真,判定(a>1 and b>1) 也為真。

這樣我們僅用了 兩條用例就完美實現了 所有條件和所有判定的真假都至少出現了一次的情況,當然面對更為復雜的判斷,這個則更難,比如:

if a>1 and b>1 and c<1:
    print '>'
else:
    print '<'

用例如下 a =0,b=0,c=2 ,此時條件(a>1)(b>1)(c<1) 都為假,而判定(a>1 and b>1 and c<1) 也為假

a = 5,b=5,c=0 ,此時條件(a>1)(b>1)(c<1) 都為真,而判定(a>1 and b>1 and c<1) 也為真

條件組合覆蓋

注意這個方法是針對判定作為結果的,只是手段是條件而已。

目的為:保證 判定的所有情況都至少出現一次 ,而不單單是真假。

if a>1 or b>1:
    print '>'
else:
    print '<'

我們這里要保證判定(a>1 or b>1)的所有情況都出現一次,用例如下:

a = 0,b=0 : 假假 = 假

a = 5,b=5 : 真真 = 真

a = 0,b=5 : 假真 = 真

a = 5,b=0 : 真假 = 真

結果就是至少4條用例才能判定的所有情況都至少出現一次,雖然三個都是真,但是原因是不同的。

路徑覆蓋

保證代碼中每條路徑都至少執行一次!注意,這里並非語句,而是路徑。

例子如下:

if a>1:
    print '*'
else:
    print '%'
if b>1:
    print '&'
else:
    print '#'

這個例子中,如果我們是語句覆蓋,那么倆條用例足以,保證每條語句都至少執行一次,最終的輸出可以為:*& 和 %#

但是路徑覆蓋則不這么簡單,路徑中,第一個判定的真假和第二個判定的真假各種組合 成為各種路徑。

所以要求輸出至少為以下所有情況路徑:*& 和 *# 和 %& 和 %# 排列組合共四種路徑。

所以至少需要如下四條用例:

a = 5,b=5: *&

a = 5,b=0: *#

a = 0,b=5: %&

a = 0,b=0: %#

好了這就是路徑覆蓋,也是號稱最強的覆蓋法,在時間成本不夠的情況下,優先選用路徑覆蓋是最全面的。

最后還要給大家多介紹倆種白盒覆蓋率方法,只是這倆種更加冷門,知道的人不多:

ESTCA覆蓋法

也叫錯誤敏感測試用例分析規則。由Foster提出,屬於根據程序中的謂詞最容易出錯的部分得出的規則,屬於大數據的范疇。

LCSAJ覆蓋法

也叫線性代碼順序和跳轉覆蓋法,是一個比較全面的測試方法。

每個LCSAJ定義為一段代碼:起始於程序入口或者一個跳轉點,結束於程序出口或一個跳轉點。

整個方法的做法就是:分層測試

第一層用語句覆蓋,第二層是分支覆蓋,第三層就是一段LCSAJ覆蓋,第四層就是任意相連的倆段LCSAJ覆蓋。第五層就是任意相連的三層LCSAJ覆蓋,以此類推。看起來更像是 一種集成測試的方法。


免責聲明!

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



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