方法定義:將所有可能輸入數據的數據域進行劃分,分成若干子集,再從其中選出少數具有代表性的的是用例測試程序,該方法是一種常用的黑盒測試方法。
▲等價類劃分可有兩種不同的情況:有效等價類和無效等價類。
1)有效等價類
是指對於程序的規格說明來說是合理的、有意義的輸入數據構成的集合。利用有效等價類可檢驗程序是否實現了規格說明中所規定的功能和性能。
2)無效等價類
與有效等價類的定義恰巧相反。無效等價類指對程序的規格說明是不合理的或無意義的輸入數據所構成的集合。對於具體的問題,無效等價類至少應有一個,也可能有多個。
▲劃分等價類的標準:
1)完備測試、避免冗餘;
2)劃分等價類重要的是:集合的劃分,劃分爲互不相交的一組子集,而子集的並是整個集合;
3)並是整個集合:完備性;
4)子集互不相交:保證一種形式的無冗餘性;
5)同一類中標識(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑"。
實例分析:首先是測試1600年至2100年的任意一天的下一天的日期情況,按照年、月、日的取值劃分。劃分情況如下:
①1600<= y <=2100平年 ②1600<= y <=2100閏年 ③y <1600 ④y >2100 ⑤m∈{1,3,5,7,8,10} ⑥m∈{4,6,9,11} ⑦m = 2 ⑧m = 12 ⑨ m <1 ⑩m >12 ⑪1<= d <=27 ⑫d = 28 ⑬d = 29 ⑭d = 30 ⑮d = 31 ⑯d > 31 ⑰d < 1 |
按照等價類範圍選出某些具有代表性的策劃用例:
①2001.4.22 ②2000.2.29 ③1500.4.13 ④2101.5.10 ⑤2000.3.31 ⑥2100.12.30 ⑦2000.0.30 ⑧2000.13.2 ⑨2001.2.28 ⑩2000.1.32 ⑪2000.1.0 |
然後根據測試用例測試程序將情況按表列出:
測試實例 編號 |
日期(年/月/日) | 預期結果 | 測試結果 | 備註 | 覆蓋等價類 | |||
Y | M | D | ||||||
① | 2001 | 4 | 22 | 2001年4月23日 | 2001年4月23日 | pass | ①⑥⑪ | |
② | 2000 | 2 | 29 | 2000年3月1日 | 2000年3月1日 | pass | ②⑦⑬ | |
③ | 1500 | 4 | 13 | 輸入年份超出範圍! | 輸入年份超出範圍! | pass | ③ | |
④ | 2101 | 5 | 10 | 輸入年份超出範圍! | 輸入年份超出範圍! | pass | ④ | |
⑤ | 2000 | 3 | 31 | 2000年4月1日 | 2000年4月1日 | pass | ⑤⑮ | |
⑥ | 2100 | 12 | 30 | 2100年12月31日 | 2100年12月31日 | pass | ⑧⑭ | |
⑦ | 2000 | 0 | 30 | 不存在0月 | 2000年1月1日 | failed | 備註一 | ⑨ |
⑧ | 2000 | 13 | 2 | 輸入數據非法 | 輸入數據非法 | pass | ⑩ | |
⑨ | 2001 | 2 | 28 | 2001年3月1日 | 2001年3月1日 | pass | ⑫ | |
⑩ | 2000 | 1 | 32 | 不存在1月32日 | 2000年2月1日 | failed | 備註二 | ⑯ |
⑪ | 2000 | 1 | 0 | 輸入數據非法 | 2000年1月1日 | failed | 備註三 | ⑰ |
備註一: | |||||
備註二: | |||||
備註三: | |||||
然後是測試三角形種類程序(感覺這個有錯誤):
等價類劃分: | ①a<=0 ②a>200 ③b<=0 ④b>200 ⑤c<=0 ⑥c>200 ⑦0<a、b、c<200 ⑧(a+b)>c||(a+c)>b||(b+c)>a ⑨ (a+b)<c&&(a+c)<b&&(b+c)<a ⑩a=b||b=c||a=c ⑪a!=b&&a!=c&&b!=c ⑫a=b&&a=c&&b=c ⑬a!=b||a!=c||b!=c ⑭a*a+b*b=c*c||a*a+c*c=b*b||b*b+c*c=a*a ⑮a*a+b*b!=c*c&&a*a+c*c!=b*b&&b*b+c*c!=a*a ⑯a*a+b*b=c*c&&(a=b||b=c||a=c)... ⑰a*a+b*b!=c*c||(a!=b&&b!=c&&a!=c)... | |||||||
測試實例: |
①4,5,6 ②1,1,2 ③2,2,3 ④2,2,2 ⑤3,4,5 ⑥1,1,1.414214(√2) ⑦0,2,1 ⑧ ⑨201,100,150 ⑩20,201,190 ⑪1,2,0 ⑫190,20,201 |
|||||||
測試實例 編號 |
邊長 | 預期結果 | 測試結果 | 備註 | 覆蓋等價類 | ||||
a | b | c | |||||||
① | 4 | 5 | 6 | 一般三角形 | 一般三角形 | pass | ⑦⑧⑪⑬⑮⑰ | ||
② | 1 | 1 | 2 | 非三角形 | 等腰三角形 | failed | 備註一 | ⑨ | |
③ | 2 | 2 | 3 | 等腰三角形 | 等腰三角形 | pass | ⑩ | ||
④ | 2 | 2 | 2 | 等邊三角形 | 等邊三角形 | pass | ⑫ | ||
⑤ | 3 | 4 | 5 | 直角三角形 | 直角三角形 | pass | ⑭ | ||
⑥ | 1 | 1 | 1.414214 | 等腰直角三角形 | 等腰三角形 | failed | 備註二 | ⑯ | |
⑦ | 0 | 2 | 1 | 輸入數據非法 | 輸入數據非法 | pass | ① | ||
⑧ | 201 | 100 | 150 | 輸入數據非法 | 輸入數據非法 | pass | ② | ||
⑨ | 2 | 0 | 1 | 輸入數據非法 | 輸入數據非法 | pass | ③ | ||
⑩ | 20 | 201 | 190 | 輸入數據非法 | 輸入數據非法 | pass | ④ | ||
⑪ | 1 | 2 | 0 | 輸入數據非法 | 輸入數據非法 | pass | ⑤ | ||
⑫ | 190 | 20 | 201 | 輸入數據非法 | 輸入數據非法 | pass | ⑥ |
備註一: | |||||
備註二: | |||||
這個條件所遇到的類似if else switch得到的結果都是一樣。結果也就是屬於一個類別
以上。