等價類划分測試用例設計方法


一.方法簡介
1.定義
是把所有可能的輸入數據,即程序的輸入域划分成若干部分(子集),然后從每一個子集中選取少數具有代表性的數據作為測試用例。該方法是一種重要的,常用的黑盒測試用例設計方法。
2.划分等價類
等價類是指某個輸入域的子集合。在該子集合中,各個輸入數據對於揭露程序中的錯誤都是等效的,並合理地假定:測試某等價類的代表值就等於對這一類其它值的測試。因此,可以把全部輸入數據合理划分為若干等價類,在每一個等價類中取一個數據作為測試的輸入條件,就可以用少量代表性的測試數據取得較好的測試結果。
等價類划分可有兩種不同的情況:有效等價類和無效等價類。
1)有效等價類
是指對於程序的規格說明來說是合理的、有意義的輸入數據構成的集合。利用有效等價類可檢驗程序是否實現了規格說明中所規定的功能和性能。
2)無效等價類
與有效等價類的定義恰巧相反。無效等價類指對程序的規格說明是不合理的或無意義的輸入數據所構成的集合。對於具體的問題,無效等價類至少應有一個,也可能有多個。
設計測試用例時,要同時考慮這兩種等價類。因為軟件不僅要能接收合理的數據,也要能經受意外的考驗,這樣的測試才能確保軟件具有更高的可靠性。
3.划分等價類的標准
1)完備測試、避免冗余;
2)划分等價類重要的是:集合的划分,划分為互不相交的一組子集,而子集的並是整個集合;
3)並是整個集合:完備性;
4)子集互不相交:保證一種形式的無冗余性;
5)同一類中標識(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑"。
4.划分等價類的方法
1) 在輸入條件規定了取值范圍或值的個數的情況下,則可以確立一個有效等價類和兩個無效等價類。如:輸入值是學生成績,范圍是0~100;
<ignore_js_op>
2) 在輸入條件規定了輸入值的集合或者規定了"必須如何"的條件的情況下,可確立一個有效等價類和一個無效等價類;
3) 在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類。
4) 在規定了輸入數據的一組值(假定n個),並且程序要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類。
例:輸入條件說明學歷可為:專科、本科、碩士、博士四種之一,則分別取這四種學歷的四個值作為四個有效等價類,另外把四種學歷之外的任何學歷作為無效等價類。
5) 在規定了輸入數據必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則);
6) 在確知已划分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步的划分為更小的等價類。
 
5.設計測試用例
在確立了等價類后,可建立等價類表,列出所有划分出的等價類輸入條件:有效等價類、無效等價類,然后從划分出的等價類中按以下三個原則設計測試用例:
1) 為每一個等價類規定一個唯一的編號;
2) 設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋地有效等價類,重復這一步,直到所有的有效等價類都被覆蓋為止;
3) 設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步,直到所有的無效等價類都被覆蓋為止。
 
二.實戰演習
1.某程序規定:"輸入三個整數 a 、 b 、 c 分別作為三邊的邊長構成三角形。通過程序判定所構成的三角形的類型,當此三角形為一般三角形、等腰三角形及等邊三角形時,分別作計算 … "。用等價類划分方法為該程序進行測試用例設計。(三角形問題的復雜之處在於輸入與輸出之間的關系比較復雜。)
分析題目中給出和隱含的對輸入條件的要求:
(1)整數(2)三個數(3)非零數(4)正數(5)兩邊之和大於第三邊(6)等腰(7)等邊
如果 a 、 b 、 c 滿足條件( 1 ) ~ ( 4 ),則輸出下列四種情況之一:
1)如果不滿足條件(5),則程序輸出為 " 非三角形 " 。
2)如果三條邊相等即滿足條件(7),則程序輸出為 " 等邊三角形 " 。
3)如果只有兩條邊相等、即滿足條件(6),則程序輸出為 " 等腰三角形 " 。
4)如果三條邊都不相等,則程序輸出為 " 一般三角形" 。

 

列出等價類表並編號
 
<ignore_js_op>

 

覆蓋有效等價類的測試用例:
a b c 覆蓋等價類號碼
3 4 5 (1)--(7)
4 4 5 (1)--(7),(8)
4 5 5 (1)--(7),(9)
5 4 5 (1)--(7),(10)
4 4 4 (1)--(7),(11)

 

覆蓋無效等價類的測試用例
 
<ignore_js_op>
2.設有一個檔案管理系統,要求用戶輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月。現用等價類划分法設計測試用例,來測試程序的"日期檢查功能"。
 

 

1) 划分等價類並編號,下表等價類划分的結果
<ignore_js_op>

 

2) 設計測試用例,以便覆蓋所有的有效等價類。在表中列出了3個有效等價類,編號分別為①、⑤、⑧,設計的測試用例如下:
 
  
測試數據
  
期望結果
覆蓋的有效等價類
200211
輸入有效
①、⑤、⑧
 
3)為每一個無效等價類設計一個測試用例,設計結果如下:
 
  
序號
  
測試數據
期望結果
覆蓋的無效等價類
1
95June
無效輸入
2
20036
無效輸入
3
2001006
無效輸入
4
198912
無效輸入
5
207401
無效輸入
6
200100
無效輸入
7
200113
無效輸入
 
3.NextDate 函數包含三個變量:month 、 day 和 year ,函數的輸出為輸入日期后一天的日期。例如,輸入為 2006年3月 7日,則函數的輸出為 2006年3月8日。要求輸入變量 month 、 day 和 year 均為整數值,並且滿足下列條件:
①1≤month≤12
②1≤day≤31
③1920≤year≤2050
1)有效等價類為:
M1={月份:1≤月份≤12}
D1={日期:1≤日期≤31}
Y1={年:1812≤年≤2012}
2)若條件 ① ~ ③中任何一個條件失效,則 NextDate 函數都會產生一個輸出,指明相應的變量超出取值范圍,比如 "month 的值不在 1-12 范圍當中 " 。顯然還存在着大量的 year 、 month 、 day 的無效組合,NextDate函數將這些組合作統一的輸出: " 無效輸入日期" 。其無效等價類為:
M2={月份:月份<1}
M3={月份:月份>12}
D2={日期:日期<1}
D3={日期:日期>31}
Y2={年:年<1812}
Y3={年:年>2012}
弱一般等價類測試用例
 
  
月份
  
日期
預期輸出
6
15
1912
1912年6月16日
 
注:弱--有單缺陷假設;健壯--考慮了無效值
 
 
 
(一)弱健壯等價類測
 
  
用例ID
  
月份
日期
預期輸出
WR1
6
15
1912
1912年6月16日
WR2
-1
15
1912
月份不在1~12中
WR3
13
15
1912
月份不在1~12中
WR4
6
-1
1912
日期不在1~31中
WR5
6
32
1912
日期不在1~31中
WR6
6
15
1811
年份不在1812~2012中
WR7
6
15
2013
年份不在1812~2012中
 
(二)強健壯等價類測試
 
  
用例ID
  
月份
日期
預期輸出
SR1
-1
15
1912
月份不在1~12中
SR2
6
-1
1912
日期不在1~31中
SR3
6
15
1811
年份不在1812~2012中
SR4
-1
-1
1912
兩個無效一個有效
SR5
6
-1
1811
兩個無效一個有效
SR6
-1
15
1811
兩個無效一個有效
SR7
-1
-1
1811
三個無效
 
4.佣金問題等價類測試用例,它是根據佣金函數的輸出值域定義等價類,來改進測試用例集合。
 
  
銷售額
  
佣金
銷售額≤1000元
佣金=10%
1000<銷售額≤1800
佣金=100+(銷售額-1000)*15%
銷售額>1800
佣金=220+(銷售額-1800)*20%
下面是具體的一個測試用例:
 
  
測試用例
  
槍機(45)
槍托(30)
槍管(25)
銷售額
佣金
1
5
5
5
500
50
2
15
15
15
1500
175
3
25
25
25
2500
360
 

 

根據輸出域選擇輸入值,使落在輸出域等價類內,可以結合弱健壯測試用例結合。


http://www.bcbxhome.com/bcbx/forum.php?mod=viewthread&tid=28&fromuid=27
(出處: 編測編學軟件測試)


免責聲明!

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



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