等价类划分法

等价类划分可以把全部输人数据合理划分为若干等价类,在每一个等价类中取个数据作为测试的输人条件,就可以用少量代表性的测试数据取得较好的测试效果。

有效等价类:指对于程序规格说明来说,由合理的、有意义的输入数据构成的集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。
无效等价类:指对于程序规格说明来说,由不合理的、无意义的输人数据构成的集合。利用它,可以检查程序中功能和性能的实现是否有不符合规格说明要求的地方。
划分等价类的方法有:1.按区间划分;2.按数值划分;3.按数值集合划分;4.按限制条件划分;5.按限制规则划分;6。按处理方式划分。

在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。软件不能只接收合理的数据,还要经受意外的考验,即接收无效的或不合理的数据,这样的软件才能具有较高的可靠性。

边界值分析法

基于边界值分析方法选择测试用例的原则如下:

  1. 如果输人条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据。
  2. 如果输人条件规定了值的个数,则用最大个数、最小个数、比最大个数多1个、比最小个数少1个的数作为测试数据。
  3. 根据规格说明的每一个输出条件,使用规则1和规则2。
  4. 根据规格说明的每一个输出条件,使用规则1和规则2。
  5. 如果程序的规格说明给出的输人域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例。
  6. 如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例。
  7. 分析规格说明,找出其他可能的边界条件。

三角形问题的需求规格描述如下:
输入三个整数 a、b、c,分别作为三角形的三条边,现通过程序判断由三条边构 成的三角形的类型为等边三角形、等腰三角形、一般三角形、以及构不成三角形。
现在要求输入三个整数 a、b、c,必须满足以下条件:
条件 1 1≤a≤100 条件 2 1≤b≤100 条件 3 1≤c≤100
条件 4 a<b+ c 条件 5 b<a+ c 条件 6 c<a+ b
如果输入值 a、b、c 不满足条件 1、条件 2 和条件 3 ,程序给出“边的取值超出 允许范围”的信息。
如果输入值 a、b、c 满足条件 1、条件 2 和条件 3,则输出下列四种情况之一:
(1)如果不满足条件 4、条件 5 和条件 6 中的一个,则程序输出为“非三角 形”。
(2)如果三条边相等,则程序输出为“等边三角形”。
(3)如果恰好有两条边相等,则程序输出为“等腰三角形”。
(4)如果三条边都不相等,则程序输出为“一般三角形”。
针对此需求:
1、分析该程序的输出,建立等价类划分表,并根据等价类表设计测试用例;
2、分析输入,根据边界值条件设计测试用例;
3、用所有测试用例对程序进行测试,记录每组测试用例对应的输出结果,并对结果进行分析;(测试用例见附表)
4、确定是否存在 bug,如果存在 bug,分析其原因并调试修复。

该题目的GUI程序:https://download.csdn.net/download/weixin_43845524/12439300(官方自动调的积分)
  1. 划分有效等价类和无效等价类
输入条件有效等价类无效等价类
是否能构成三角形的三条边1≤a≤100 (1)
1≤b≤100 (2)
1≤c≤100 (3)
a<b+ c (4)
b<a+ c (5)
c<a+ b (6)
(a<1)(7) (a>100) (21)
(b<1)(8) (b>100) (22)
(c<1)(9) (c>100) (23)
a>=b+ c (10)
b>=a+ c (11)
c>=a+ b (12)
是否为等腰三角形a=b (13)
b=c (14)
c=a (15)
(a!=b)and(b!=c)and(c!=a) (16)
是否为等边三角形(a=b)and(b=c)and(c=a) (17)(a!=b) (18)
(b!=c) (19)
(c!=a) (20)
  1. 设计有效等价类的测试用例
序号测试用例(a,b,c)预期输出覆盖等价类实际输出
13,4,5一般三角形1,2,3,4,5,6一般三角形
23,3,4等腰三角形1,2,3,4,5,6,13等腰三角形
33,4,3等腰三角形1,2,3,4,5,6,15等腰三角形
44,3,3等腰三角形1,2,3,4,5,6,14等腰三角形
53,3,3等边三角形1, 2,3,4,5,6,17等腰三角形

结论:测试用例第 5 组实际输出与预期不符,推测没对三条边是否同时相等进行判断。

  1. 设计无效等价类的测试用例
序号测试用例(a,b,c)预期输出覆盖等价类实际输出
10,1,2边的取值超出允许范围7越界
2101,1,2边的取值超出允许范围21越界
31,2,0边的取值超出允许范围9越界
41,2,101边的取值超出允许范围23越界
51,0,2边的取值超出允许范围8越界
61,101,2边的取值超出允许范围22越界
72,1,1非三角形10等腰三角形
81,2,1非三角形11等腰三角形
91,1,2非三角形12等腰三角形
103,4,5非等腰三角形16一般三角形
114,3,3非等边三角形18等腰三角形
123,4,3非等边三角形19等腰三角形
133,3,4非等边三角形20等腰三角形
14,,,无效等价类越界
151,2,无效等价类越界
161,,无效等价类越界
17@,1,2无效等价类越界
18S,1,2无效等价类越界

结论:测试用例第 7,8,9 组实际输出与预期不符,推测没对两边之和要小于第三边进行判断。

  1. 边界值分析
序号测试用例(a,b,c)预期输出覆盖等价类实际输出
10,1,2边的取值超出允许范围7越界
2101,1,2边的取值超出允许范围21越界
31,2,0边的取值超出允许范围9越界
41,2,101边的取值超出允许范围23越界
51,0,2边的取值超出允许范围8越界
61,101,2边的取值超出允许范围22越界
71,100,100等腰三角形1,2,3等腰三角形
82,100,99一般三角形2一般三角形
93,3,1等腰三角形3等腰三角形

结论:所有测试用例组符合预期,暂时没有问题。

综上,目前检测出两条 bug:

  1. 推测没对三条边是否同时相等进行判断
  2. 推测没对两边之和要小于第三边进行判断。

建议:问题严重性较低,不至于重构,适当添加卫语句即可。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐