软件测试-----等价类划分
方法定义
将所有可能输入数据的数据域进行划分,分成若干子集,再从其中选出少数具有代表性的的是用例测试程序,该方法是一种常用的黑盒测试方法。**
分类
等价类划分可有两种不同的情况:有效等价类和无效等价类
- 有效等价类
是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。 - 无效等价类
与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
划分等价类的标准
- 完备测试、避免冗余;
- 划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
- 并是整个集合:完备性;
- 子集互不相交:保证一种形式的无冗余性;
- 同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。
实例分析
首先是测试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
然后根据测试用例测试程序将情况按表列出:
测试实例 | 编号 | 年 | 月 | 日 | 预期结果 | 测试结果 | 备注 | 覆盖等价类 |
---|---|---|---|---|---|---|---|---|
① | 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 ⑭aa+bb=cc||aa+cc=bb||bb+cc=aa ⑮aa+bb!=cc&&aa+cc!=bb&&bb+cc!=aa ⑯aa+bb=cc&&(a=b||b=c||a=c)... ⑰aa+bb!=cc||(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得到的结果都是一样。结果也就是属于一个类别!
以上。