测试用例设计——等价类划分法「建议收藏」

测试用例设计——等价类划分法「建议收藏」一、分析问题如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)+1和(-1)+2之后,是否有必要测试1+3,1+4,1+(-3)和1+(-4)呢?如果不对两位数加法器程序进行穷举测试,我们能否放心的认为其他所有的参数组合都是正确的呢?可想而知,我们不可能输入这么多的组合进行测试。那么,如果不可能输入这些组合进行测试,是否会担心会遗漏测试中会存在bug呢?…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、分析问题
如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)+1和(-1)+2之后,是否有必要测试1+3,1+4 ,1+(-3)和1+(-4)呢?
如果不对两位数加法器程序进行穷举测试,我们能否放心的认为其他所有的参数组合都是正确的呢?
在这里插入图片描述
可想而知,我们不可能输入这么多的组合进行测试。那么,如果不可能输入这些组合进行测试,是否会担心会遗漏测试中会存在bug呢?

等价类是建立在这种思想之上——即我们不可能进行穷举测试,那么我们就必须对输入进行分类。我们知道程序是通过数据结构和算法来实现的,计算机按照算法来运行程序,这种运行是稳定的,不会因为我们的输入而导致计算机处理不稳定,即我们输入某种组合,即使输入成千上万次,也是得到同一结果。输入用同一数据结构表示的数据是稳定的,在某值域范围内,程序处理方法是相同的。如果输入不在同一值域,则不能称为同一类。实践证明,这种假设是成立的,所以等价类划分法也是有效的。

等价类划分法是一种最常用、也是最重要的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。

二、等价类划分
等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据,取得较好的测试结果。

如何划分?——先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干个互不相交的子集。

三、等价类划分步骤
以两位数加法器为例:
1、划分等价类(依据是需求)
有效数据等价类:由那些对程序的需求说明中有意义的、合理的输入数据所构成的集合
无效数据等价类:有那些不合理的或无意义的输入数据所构成的集合
在这里插入图片描述
2、建立等价类表
在这里插入图片描述
3、设计测试用例
在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。
根据已列出的等价类表可确定测试用例,具体过程如下:
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。
在这里插入图片描述
4、进行等价类划分的依据
(1)按照区间划分 在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。
例:程序输入条件为小于100大于10的整数x,则有效等价类为10<x<100,两个无效等价类为x≤10和x≥100。
(2)按照数值划分 在规定了一组输入数据(假设包括 n个 输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定 n 个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。
例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序 中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、 x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。
(3)按照数值集合划分 在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。
例:程序输入条件为取值为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的整数。
(4)按照限制条件或规则划分 在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
例:程序输入条件为以字符‘a’开头、长度为8的字符串,并且字符串不包含‘a’~ ‘z’之外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以‘a’开头的字符串、长度不为8的字符串和包含了‘a’~ ‘z’之外其它字符的字符串。
(5)细分等价类 在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。

四、实例
某工厂2019年公开招工,规定报名者年龄应在16周岁至36周岁之间,出生年月规定日期由6位数字组成,前4位表示年份,后2位表示月份。出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。

1、根据程序要求划分等价类

出生年份:4位整数,值的有效范围是1983-2003
出生月份:2位整数,值的有效范围是1-12

2、建立等价类表
在这里插入图片描述
3、设计测试用例
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180673.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • task scheduler什么意思_女贞子的功效与作用

    task scheduler什么意思_女贞子的功效与作用前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文TaskScheduler的核心任务是提交TaskSet到集群运算并汇报结果。(1)为TaskSet创建和维护一个TaskSetManager,并追踪任务的本地性以及错误信息。(2)遇到Straggle任务时,会放到其他节点进行重试。(3)向DAGScheduler

    2022年10月11日
    10
  • 2021最新最细致的IDEA集成SVN工具的使用 (入门到精通)

    2021最新最细致的IDEA集成SVN工具的使用 (入门到精通)SVN教程1、SVN常见操作发布项目(shareproject)项目组长将本机项目第一次发布到中央仓库中下载项目(检出项目checkout)组员将中央仓库中的项目第一次下载到本地提交(commit)将本地修改的内容同步到服务器中(本地=>服务器)编写完一个小功能之后、每天下班前一定要及时提交更新(update)将服务器中最新的代码同步到本地(服务器=>本地)编写功能之前,每天上班前一定要及时更新2、SVN安装2.1svn服务端

    2022年10月17日
    5
  • java byte数组转json对象

    java byte数组转json对象Stringmessage=newString(“byte数组”);//去掉多余的引号和转义字符Stringsubstring=message.substring(1,message.length()-1).replace(“\\\””,”‘”);//转化为json对象JSONObjectjsonObject=newJSONObject(substring);

    2022年6月21日
    307
  • 官场子弟–熊猫大大

    官场子弟–熊猫大大官场子弟,城府心机,商场得意,情场风流,官运横通,人生几何..   将醉生梦死,将金钱美色的诱惑赤裸裸呈现着,是堕落?还是在诱惑中学会留一点清醒呢?   邪恶是应该的,大胆是必须的,男人吗?花心一点也没有错,打造一个男人的世…

    2022年4月27日
    41
  • rj45管脚定义_rj45接口定义,rj45插座引脚定义

    RJ45是布线系统中信息插座(即通信引出端)连接器的一种,连接器由插头(接头、水晶头)和插座(模块)组成,插头有8个凹槽和8个触点。RJ是RegisteredJack的缩写,意思是“注册的插座”。在FCC(美国联邦通信委员会标准和规章)中RJ是描述公用电信网络的接口,计算机网络的RJ45是标准8位模块化接口的俗称。rj45插座引脚定义:常见的RJ45接口有两类:用于以太网网卡、路由器以太网接口等…

    2022年4月15日
    50
  • ConnectionStrings 连接字符串「建议收藏」

    ConnectionStrings 连接字符串「建议收藏」<connectionStrings><addname=”sqliteContext”connectionString=”DataSource=E:\WHPCodeLiberary\temp\SqlLiteDBs\TestDB.s3db;Version=3;New=True;”providerName=”System.Data.SQLite”/>…

    2022年5月21日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号