天天看點

黑盒測試之等價類劃分法【幹貨篇】

前言

我們知道黑盒測試裡面有很多的測試方法,有等價類劃分,邊界值分析,錯誤推測法,随機數,因果圖,判定表,正交試驗,場景法等等,今天來聊聊等價類劃分

一、什麼是等價類劃分法

太專業的詞彙可能不容易了解,那我就用通俗的語言來解釋吧。

等價類可以分為有效等價類和無效等價類,就是對程式來說是合法的輸入。通俗的來解釋呢,就是你去了一家面包店,有效等價類呢就是讓你在這家店買面包,無效等價類呢就是讓你在面包店買一隻雞回來。顯然,面包在面包店是可以買的到的,就是有效的請求,雞是一般在面包店買不到的(正經的面包店誰賣雞啊)

含義:

1.有效等價類就是對程式的規格說明有意義的,合理的輸入資料所構成的集合,利用有效等價類可

驗證程式是否實作了規格說明中的功能和性能。

2.無效等價類是那些對程式的規格說明不合理或者無意義的資料所構成的,為了驗證程式做其不應做的事情。

聽懂了嗎?那就再舉例一個簡單的程式吧,比如我設計一個程式,要求輸入一個整數,然後輸出這個整數的兩倍的數值。

黑盒測試之等價類劃分法【幹貨篇】

先分析題目,題目要求是輸入的是整數,很顯然整數肯定是一個有效的輸入,即有效等價類,輸入一個整數輸出正确的數值

黑盒測試之等價類劃分法【幹貨篇】

那如果,我輸入的是小數、符号、字母呢?

黑盒測試之等價類劃分法【幹貨篇】
黑盒測試之等價類劃分法【幹貨篇】
黑盒測試之等價類劃分法【幹貨篇】

顯然,這些都會傳回

InputMismatchException

,輸入不比對異常,即輸入的資料類型和設定接受的資料類型不一緻。

是以,我可以很簡單的劃分出等價類,有效等價類為整數,無效等價類為非整數。

好了,簡單了解了什麼是等價類了,那我們就繼續深入學習了

二、等價類劃分準則

1.在輸入條件規定了取值範圍或值的個數的情況下,則可以确立一個有效等價類和兩個無效等價類。

比如說身份證就固定了18位數字,手機号碼11位等等。(注意這裡隻是關注長度,選擇性忽略其他問題)
複制代碼           

2.在輸入條件規定了輸入值的集合或者規定了“必須如何”的條件的情況下,可确立一個有效等價類和一個無效等價類。

比如要求輸入一個兩位數,那就隻有[1,2,3,4...,99]這個集合裡取有效等價類
複制代碼           

3.在輸入條件是一個布爾量的情況下,可确定一個有效等價類和一個無效等價類。

Boolean值隻有兩個結果,true和false
複制代碼           

4.在規定了輸入資料的一組值(假定n個),并且程式要對每一個輸入值分别處理的情況下,可确立n個有效等價類和一個無效等價類。

比如要求輸入的是一個數組,數組裡面必須是0或1,是以0和1就是有效等價類
複制代碼           

5.在規定了輸入資料必須遵守的規則的情況下,可确立一個有效等價類(符合規則)和若幹個無效等價類(從不同角度違反規則)。

比如身份證号碼,前6位是位址碼,中間8位是出生年月日,後面是三位順序碼加一位校檢碼。
複制代碼           

6.在确知已劃分的等價類中各元素在程式進行中的方式不同的情況下,則應再将該等價類進一步的劃分為更小的等價類.

比如2裡兩位數先劃分了[1,2,3,4...,99]這個有效等價類,假如我的程式對這個兩位數的處理是:
奇數就+1,偶數就/2,。是以還需要對這個集合進行奇數和偶數的進一步劃分。
複制代碼           

三、設計測試用例步驟

1.分析确定等價類

2.建立等價類表,列出所有劃分出的等價類

3.根據列出的等價類表,根據三個步驟設計用例

​ 1) 為每個等價類規定唯一編号

​ 2) 設計新的測試用例,盡可能的去覆寫未被覆寫的有效等價類,重複步驟直到所有有效等價類被覆寫

​ 3) 設計新的測試用例,盡可能的去覆寫未被覆寫的無效等價類,重複步驟直到所有無效等價類被覆寫

四、等價類劃分法的優劣

優點:考慮到單個輸入域的各類情況,避免了盲目或者随機選取資料的不完整性和覆寫的不穩定性,使用簡單友善使用,同時可有效控制測試設計的數量,能夠減少一定的工作量。

缺點:遇到組合的情況的話,等價類劃分法是不足以解決問題的,同時等價類劃分基于等價類中的輸入都能産生相同的效果,在很多情況下用例選擇不當會産生問題(如邊界),還需要結合其他的方法來解決問題

五、小結

當出現邊界值的時候,僅僅用等價類劃分法是無法準确來判斷的時候,就需要結合黑盒測試另外一個方法,邊界值分析法。

舉個簡單的例子:A攻擊B,B反彈80%的傷害,假設A和B的血量都是1000的時候,先進行一個簡單的劃分,很明顯,A的傷害大于等于1000的時候,就能勝利。但是B也是會反彈傷害的,是以需要進行邊界值的判斷,判斷A的傷害範圍達到哪個範圍之間,才不會被反傷打死導緻平局。這時候就需要結合邊界值分析法來輔助測試,通過計算得出當A傷害為1250的時候,會因為B的反傷把自己血量降低為0,那就要對這個值進行邊界值分析,判斷1250-,1250,1250+的時候,A會不會死亡,這就是需要結合其他方法解決問題的時候。當然還有更深入的讨論,要是A的傷害小于1000的時候,B需要多少的傷害才能将A打死,如果是A也有反傷呢,B能否獲得勝利等等