測試用例設計之等價類劃分方法
by:授客 QQ:1033553122
一.方法簡介
1.定義
把所有可能的輸入資料,即程式的輸入域劃分成若幹部分(子集),然後從每一個子集中選取少數具有代表性的資料作為測試用例。該方法是一種重要的,常用的黑盒測試用例設計方法。
2.劃分等價類:
等價類是指某個輸入域的子集合。在該子集合中,各個輸入資料對于揭露程式中的錯誤都是等效的,并合理地假定:測試某等價類的代表值就等于對這一類其它值的測試,是以,可以把全部輸入資料合理劃分為若幹等價類,在每一個等價類中取一個資料作為測試的輸入條件就可以用少量代表性的測試資料取得較好的測試結果。
等價類劃分可有兩種不同的情況:有效等價類和無效等價類。
1)有效等價類
是指對于程式的規格說明來說是合理的、有意義的輸入資料構成的集合。利用有效等價類可檢驗程式是否實作了規格說明中所規定的功能和性能。
2)無效等價類
與有效等價類的定義恰巧相反。無效等價類指對程式的規格說明是不合理的或無意義的輸入資料所構成的集合。對于具體的問題,無效等價類至少應有一個,也可能有多個。
設計測試用例時,要同時考慮這兩種等價類。因為軟體不僅要能接收合理的資料,也要能經受意外的考驗,這樣的測試才能確定軟體具有更高的可靠性。
3.劃分等價類的标準:
1)劃分等價類重要的是:集合的劃分,劃分為互不相交的一組子集,而子集的并是整個集合;
1.1)并是整個集合:完備性;
1.2)子集互不相交:保證一種形式的無備援性;
1.3)同一類中辨別(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑":等價性。
4.劃分等價類的方法
1)在輸入條件規定了取值範圍或值的個數的情況下,則可以确立一個有效等價類和兩個無效等價類。如:輸入值是學生成績,範圍是0~100;

2)在輸入條件規定了輸入值的集合或者規定了"必須如何"的條件的情況下,可确立一個有效等價類和一個無效等價類;
3)在輸入條件是一個布爾量的情況下,可确定一個有效等價類和一個無效等價類。
4)在規定了輸入資料的一組值(假定n個),并且程式要對每一個輸入值分别處理的情況下,可确立n個有效等價類和一個無效等價類。
例:輸入條件說明學曆可為:專科、大學、碩士、博士四種之一,則分别取這四種這四個值作為四個有效等價類,另外把四種學曆之外的任何學曆作為無效等價類。
5)在規定了輸入資料必須遵守的規則的情況下,可确立一個有效等價類(符合規則)和若幹個無效等價類(從不同角度違反規則);
6)在确知已劃分的等價類中各元素在程式進行中的方式不同的情況下,則應再将該等價類進一步的劃分為更小的等價類。
5.設計測試用例
在确立了等價類後,可建立等價類表,列出所有劃分出的等價類輸入條件:有效等價類、無效等價類,然後從劃分出的等價類中按以下三個原則設計測試用例:
1)為每一個等價類規定一個唯一的編号;
2)設計一個新的測試用例,使其盡可能多地覆寫尚未被覆寫地有效等價類,重複這一步,直到所有的有效等價類都被覆寫為止;
3)設計一個新的測試用例,使其僅覆寫一個尚未被覆寫的無效等價類,重複這一步,直到所有的無效等價類都被覆寫為止。(原因:不同的無效等價類可能互相屏蔽,是以用單一測試用例覆寫無效等價類)
二.實戰演習
1.某程式規定:“輸入三個整數 a 、 b 、 c 分别作為三邊的邊長構成三角形。通過程式判定所構成的三角形的類型,當此三角形為一般三角形、等腰三角形及等邊三角形時,分别作計算…”“。用等價類劃分方法為該程式進行測試用例設計。(三角形問題的複雜之處在于輸入與輸出之間的關系比較複雜。)
解答:
方式1
根據等價分類的定義:是把所有可能的輸入資料,即程式的輸入域劃分成若幹部分(子集),分成有效等價類,無效等價類.而有效,無效的分類是根據題目規定來的。
仔細分析題目:
"輸入三個整數 a 、 b 、 c 分别作為三邊的邊長構成三角形。通過程式判定所構成的三角形的類型,當此三角形為一般三角形、等腰三角形及等邊三角形時,分别作計算 … "
有效等價類:
輸入三個數(a,b,c一個都不能少),
輸入整數(a為整數,b為整數,c為整數),
輸入的數構成三角形(a>0,b>0,c>0 && 兩邊之和大于第三邊)
無效等價類:不滿足有效等價類的
根據劃分的方法之一:在确知已劃分的等價類中各元素在程式進行中的方式不同的情況下,則應再将該等價類進一步的劃分為更小的等價類。
上述題目中等價類,輸入的數構成三角形,不同三角形處理不一樣,是以要進一步劃分有效等價類為:
輸入的數值構成一般三角形,輸入的數值構成等腰三角形,輸入的數值構成等邊三角形,是以,有效等價類為:
輸入三個數(a,b,c一個都不能少),
輸入整數(a,b,c都為整數),
輸入的數值構成三角形(a>0,b>0,c>0&& 兩邊之和大于第三邊--子分類>>夠成一般三角形:a,b,c都不相等;構成等腰三角形:其中a,b,c中僅兩個數相等;構成等邊三角形:a,b,c都相等)
無效等價類:
輸入少于三個數(a,b,c僅少1個,僅少2個);
輸入整數(a,b,c僅某個不為整數,僅某2個不為整數,僅3個都不為整數);
輸入的數值不構成三角形;
1)a,b,c三個數僅某個數為0,僅某兩個數為0,三個都為0
2)a,b,c中僅某個數小于0,僅某2個數小于0,3個數都為0
3)輸入三個數:某兩數之和小于第三個數,某兩數之和等于第三個數)
方式二:
按業務流程來,按等價劃分的原則來
輸入資料->處理(判斷)->輸出
一種,我們按輸入進行分類,這個情況比較複雜,不好分類
一種,我們按輸出進行分類,這個情況就比較簡單了。是以選擇輸出入手
輸出形狀:
{構成三角形,不構成三角形} à分成兩類,且并為整個集合
1)構成三角形-->{一般三角形,等腰三角形,等邊三角形}
2)不同三角形判斷不一樣,同一等價類中,出現處理不同,是以繼續分類,輸出形狀:一般三角形,等腰三角形,等邊三角形,不構成三角形
---------------------------------------------------
有效等價類的要求:
題目顯示要求:整數,三邊,
每邊大于0(隐性需求)
兩邊之和大于第三邊(隐性需求):{一般三角:三邊不相等;等腰三角:兩邊相等;等邊三角:三邊相等}
得出最後的有效等價類
整數
存在三邊
三邊都大于0
兩邊之和大于第三邊,且三邊不相等(一般三角形)
兩邊之和大于第三邊,且僅兩邊相等(等腰三角形)
三邊相等(因為三邊相等,是以兩邊之和必定大于第三邊)(等邊三角形)
無效等價的要求à根據有效等價來确定
存在非整數
不滿足三邊
存在邊小于等于0
兩邊之和小于等于第三邊
---------------------------------------------------------
得出最後的無效等價類
存在非整數:{一邊非整數,兩邊非整數,三邊非整數}
不滿足三邊:{a,b,c僅少1個,僅少2個}
邊存在小于0:{一邊小于0,兩邊小于0,三邊都小于0}
邊存在等于0:{一邊等于0,兩邊等于0,三邊等于0}
兩邊之和小于第三邊:{a+b,a+c,b+c}
兩邊之和等于第三邊:{a+b,a+c,b+c}
得出最有無效等價類
a為非整數,b,c整數
b為非整數,a,c整數
c為非整數,a,b整數
a&b為非整數,c整數
a&c為非整數,b整數
c&b為非整數,a整數
隻給a
隻給b
隻給c
……
等價類劃分圖
用例設計
覆寫有效等價類的測試用例:
a
b
c
覆寫等價類号碼
3
4
5
(1)--(4)
(1)--(3),(5)
5
(1)--(3),(6)
4
(1)--(3),(7)
(1)--(3),(8)
覆寫無效等價類的測試用例:

2.設有一個檔案管理系統,要求使用者輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,并規定日期由6位數字字元組成,前4位表示年,後2位表示月。現用等價類劃分法設計測試用例,來測試程式的"日期檢查功能"。
1)劃分等價類并編号,下表等價類劃分的結果
輸入等價類 | 有效等價類 | 無效等價類 |
日期的類型及長度 | ①6位數字字元 | ②有非數字字元 ③少于6位數字字元 ④多于6位數字字元 |
年份範圍 | ⑤在1990~2049之間 | ⑥小于1990 ⑦大于2049 |
月份範圍 | ⑧在01~12之間 | ⑨等于00 ⑩大于12 |
2)設計測試用例,以便覆寫所有的有效等價類在表中列出了3個有效等價類,編号分别為①、⑤、⑧,設計的測試用例如下(用盡可能少的用例盡可能多的覆寫每個有效效等價類):
測試資料
期望結果
覆寫的有效等價類
200211 輸入有效
①、⑤、⑧
3)為每一個無效等價類設計一個測試用例,設計結果如下:
測試資料
期望結果
覆寫的無效等價類
95June 無效輸入 ②
20036
無效輸入 ③
2001006
無效輸入 ④
198912 無效輸入 ⑥
200401 無效輸入 ⑦
200100 無效輸入 ⑨
200113 無效輸入 ⑩
等價類劃分法細分又可以分為弱一般等價類,弱健壯等價類,強一般等價類,強健壯等價類
強:基于單缺陷假設,你也可以了解為不考慮變量之間的組合關系,即變量之間互不影響;
弱:基于多缺陷假設,你也可以了解為考慮變量之間的組合關系,即變量之間互相影響;;
健壯:考慮無效值;
一般:不考無效值;
弱一般等價類:基于單缺陷假設,用盡可能少的測試用例,覆寫有效等價類中的每個變量區間。
強一般等價類:基于多缺陷假設,需要用n條測試用例覆寫笛卡爾積中,有效等價類中的每個變量區間。
弱健壯等價類:基于單缺陷假設,用盡可能少的測試用例,覆寫有效等價類和無效等價類中的每個變量區間。
強健壯等價類:基于多缺陷假設,需要用n條測試用例覆寫笛卡爾積中,有效等價類和無效等價類中的每個變量區間。
笛卡爾積簡介:
笛卡爾積,又叫“直積”。設A,B為集合,用A中元素為第一進制素,B中元素為第二進制素構成有序對,所有這樣的有序對組成的集合叫做A與B的笛卡爾積,記作AxB。簡單來說,就是行x列。
eg:
集合A
{a11, a12, a13,
a22, a23, a33
}
集合B
{b11, b12,
b22, b23
b31, b32
B X A
如上圖,保持集合A中的每一行不變,然後針對每一行,取集合B中的每一列進行拼接,得到新的行,如下
{a11, a12, a13, b11, b22,
b31
a11, a12, a13, b12, b23,
b32
a22, a23, a33, b11, b22,
a22, a23, a33, b12, b23,
3、假設某個查詢功能,有兩個輸入框(假設分别為輸入框A,輸入框B),查詢的結果依賴A和B的共同輸入,預期輸出對應學曆,對應崗位的薪資,現在對輸入框分别做了限制,要求:
A輸入框,供輸入學曆:研究所學生,大學,大專,如果輸入條件不再這個範圍之内,提示輸入有誤
B輸入框,供輸入崗位:教師,醫生,如果輸入條件不再這個範圍之内,提示輸入有誤
弱一般等價類測試用例設計:
學曆
崗位
預期輸出
研究所學生
教師
7000
大學 醫生
6000
大專
教師
4000
強一般等價類測試用例設計:
醫生
8000
大學 教師
5000
大專 教師
4000
大專 醫生
弱健壯等價類測試用例設計:
其它學曆
其它崗位
報錯
強健壯等價類測試用例設計:
學曆
研究所學生
研究所學生
大學
大學
大專
大專
其它學曆
其它學曆
醫生
報錯
其它學曆 教師
報錯
研究所學生
其它崗位
大學
大專
其它崗位
pdf版下載下傳:
測試用例設計之等價類劃分方法.pdf