前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >黑盒测试之等价类划分法

黑盒测试之等价类划分法

原创
作者头像
全栈开发Dream
修改2021-05-27 10:33:45
1.1K0
修改2021-05-27 10:33:45
举报
文章被收录于专栏:全栈开发Dream全栈开发Dream

前言

我们知道黑盒测试里面有很多的测试方法,有等价类划分,边界值分析,错误推测法,随机数,因果图,判定表,正交试验,场景法等等,今天来聊聊等价类划分

一、什么是等价类划分法

太专业的词汇可能不容易理解,那我就用通俗的语言来解释吧。

等价类可以分为有效等价类和无效等价类,就是对程序来说是合法的输入。通俗的来解释呢,就是你去了一家面包店,有效等价类呢就是让你在这家店买面包,无效等价类呢就是让你在面包店买一只鸡回来。显然,面包在面包店是可以买的到的,就是有效的请求,鸡是一般在面包店买不到的(正经的面包店谁卖鸡啊)

含义:

1.有效等价类就是对程序的规格说明有意义的,合理的输入数据所构成的集合,利用有效等价类可

验证程序是否实现了规格说明中的功能和性能。

2.无效等价类是那些对程序的规格说明不合理或者无意义的数据所构成的,为了验证程序做其不应做的事情。

听懂了吗?那就再举例一个简单的程序吧,比如我设计一个程序,要求输入一个整数,然后输出这个整数的两倍的数值。

先分析题目,题目要求是输入的是整数,很显然整数肯定是一个有效的输入,即有效等价类,输入一个整数输出正确的数值

那如果,我输入的是小数、符号、字母呢?

显然,这些都会返回InputMismatchException,输入不匹配异常,即输入的数据类型和设置接受的数据类型不一致。

所以,我可以很简单的划分出等价类,有效等价类为整数,无效等价类为非整数。

好了,简单了解了什么是等价类了,那我们就继续深入学习了

二、等价类划分准则

1.在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

代码语言:txt
复制
比如说身份证就固定了18位数字,手机号码11位等等。(注意这里只是关注长度,选择性忽略其他问题)

2.在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。

代码语言:txt
复制
比如要求输入一个两位数,那就只有[1,2,3,4...,99]这个集合里取有效等价类

3.在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

代码语言:txt
复制
 Boolean值只有两个结果,true和false

4.在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

代码语言:txt
复制
比如要求输入的是一个数组,数组里面必须是0或1,所以0和1就是有效等价类

5.在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

代码语言:txt
复制
比如身份证号码,前6位是地址码,中间8位是出生年月日,后面是三位顺序码加一位校检码。

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

代码语言:txt
复制
比如2里两位数先划分了[1,2,3,4...,99]这个有效等价类,假如我的程序对这个两位数的处理是:
代码语言:txt
复制
奇数就+1,偶数就/2,。所以还需要对这个集合进行奇数和偶数的进一步划分。

三、设计测试用例步骤

1.分析确定等价类

2.建立等价类表,列出所有划分出的等价类

3.根据列出的等价类表,根据三个步骤设计用例

代码语言:txt
复制
1) 为每个等价类规定唯一编号
代码语言:txt
复制
2) 设计新的测试用例,尽可能的去覆盖未被覆盖的有效等价类,重复步骤直到所有有效等价类被覆盖
代码语言:txt
复制
3) 设计新的测试用例,尽可能的去覆盖未被覆盖的无效等价类,重复步骤直到所有无效等价类被覆盖

四、等价类划分法的优劣

优点:考虑到单个输入域的各类情况,避免了盲目或者随机选取数据的不完整性和覆盖的不稳定性,使用简单方便使用,同时可有效控制测试设计的数量,能够减少一定的工作量。

缺点:遇到组合的情况的话,等价类划分法是不足以解决问题的,同时等价类划分基于等价类中的输入都能产生相同的效果,在很多情况下用例选择不当会产生问题(如边界),还需要结合其他的方法来解决问题

五、小结

当出现边界值的时候,仅仅用等价类划分法是无法准确来判断的时候,就需要结合黑盒测试另外一个方法,边界值分析法。

举个简单的例子:A攻击B,B反弹80%的伤害,假设A和B的血量都是1000的时候,先进行一个简单的划分,很明显,A的伤害大于等于1000的时候,就能胜利。但是B也是会反弹伤害的,所以需要进行边界值的判断,判断A的伤害范围达到哪个范围之间,才不会被反伤打死导致平局。这时候就需要结合边界值分析法来辅助测试,通过计算得出当A伤害为1250的时候,会因为B的反伤把自己血量降低为0,那就要对这个值进行边界值分析,判断1250-,1250,1250+的时候,A会不会死亡,这就是需要结合其他方法解决问题的时候。当然还有更深入的讨论,要是A的伤害小于1000的时候,B需要多少的伤害才能将A打死,如果是A也有反伤呢,B能否获得胜利等等

A进攻B的流程图
A进攻B的流程图

所以做测试的时候,只依靠一两种方法是比较难来覆盖掉所有的情况的,经常会结合其他的

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、什么是等价类划分法
  • 二、等价类划分准则
  • 三、设计测试用例步骤
  • 四、等价类划分法的优劣
  • 五、小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档