啊胡

V1

2022/09/01阅读:63主题:绿意

黑盒测试之 等价类划分法

实践是检验真理的唯一标准

是什么(What)

所谓等价类是指某个输入域的子集,等价类划分是一种典型的、常用的黑盒测试方法。使用这一方法时,把所有可能的输入数据(即将程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据)作为测试用例。

由于测试时,不可能用所有可以输入的数据来测试程序,而只能从全部可供输入的数据中选取代表性子集进行测试,每一类的代表性数据在测试中的作用等价于这一类的其他值。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据取得较好的测试效果。

等价类划分包括有效等价类和无效等价类两种情况。

• 有效等价类:指对于程序规格说明来说,由合理的、有意义的输入数据构成的集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。

• 无效等价类:指对于程序规格说明来说,由不合理的、无意义的输入数据构成的集合。利用它,可以检查程序中功能和性能的实现是否有不符合规格说明要求的地方。

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

划分等价类的方法(How)

① 按区间划分:如果可能的输入数据属于一个取值范围,则可以确定1个有效等价类和2个无效等价类。如:输入值是学生成绩,范围是0~100,其有效等价类就是0~100区间,无效等价类就是<0和>100的区间,可以确定1个有效等价类(如85)和2个无效等价类(如-10和110)

② 按数值划分:如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理,则可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。

③ 按数值集合划分:如果可能的输入数据属于一个值的集合(假定n个),并且程序要对每一个输入值分别处理,这时可确立n个有效等价类和1个无效等价类。

④ 按限制条件划分:在输入条件是一个布尔量的情况下,可确定1个有效等价类和1个无效等价类。

⑤ 按限制规则划分:在规定了输入数据必须遵守的规则的情况下,可确立1个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

⑥ 按处理方式划分:在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

在确立了等价类之后,建立等价类表,列出所有划分出的等价类:

输入条件 有效等价类 无效等价类
...... ...... ......
...... ...... ......

再从划分出的等价类中按以下原则选择测试用例。

① 每一个等价类规定一个唯一的编号。

② 设计一个新的测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类;重复这一步骤,直到所有的有效等价类都被覆盖为止。

③ 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止。

实战(Do)

【例3.2】1个函数包含3个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month、day和year均为整数值,并且满足条件:1≤month≤12,1≤day≤31,1920≤year≤2050。

:该函数的有效等价类为:

M1={月份:1≤月份≤12&月份为整数值}
D1={日期:1≤日期≤31&日期为整数值}
Y1={年:1920≤年份≤2050&年份为整数值}

无效等价类为:

M2={月份:月份<1|月份为非整数值}
M3={月份:月份>12|月份为非整数值}
D2={日期:日期<1|日期为非整数值}
D3={日期:日期>31|日期为非整数值}
Y2={年:年份<1920|年份为非整数值}
Y3={年:年份>2050|年份为非整数值}

写在最后

看完不思考的喵不是一只成熟的测试喵~

在测试工作中,等价类划分法可以在那些场景使用呢?

比如在数据输入(编辑框)的地方,例如用户登录、注册、新建、查询等,该如何使用等价类划分法?

分类:

后端

标签:

软件测试

作者介绍

啊胡
V1