等价类划分法

news2024/10/6 8:40:52

等价类划分法

测试一个两位数的加法计算器

测试需求: 测试两个参数的值相加后的结果是否正确

  • 其中:输入的数值在-99到99之间,大于99或小于-99的输入应被拒绝,并显示错误信息

    • image-20230311183804703
  • 根据测试需求,我们开始测试

  • 分别给第一个参数和第二个参数输入表中的值,得到的测试结果如表所示:

image-20230311181412823

很明显,如果我们对第一个参数的值分别取从-99到99的199个数,第二个参数也是如此。我们不可能对两位数相加的所有情况进行穷举测试。

如果不能进行穷举测试我们将面临以下问题

这个时候,

  • 等价类划分的方法是把程序的输入域划分成若干个部分

  • 然后每个部分中选取少数代表性数据当做测试用例

  • 每一类的代表性测试数据在测试中的作用等价于这一类中的其他值

  • 也就是说,如果某一类中的一个例子中发现了错误,这一等价类中的其他例子也能发现同样的错误

  • 反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误

等价类划分原则

  • 如果输入条件规定了取值的范围或值的个数,则可以确定一个有效等价类和两个无效等价类(三个阶段)
  • 如果一个输入条件说明了一个必须成立的情况,则可划分一个有效等价类和一个无效等价类(bool型的条件)
  • 如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则每一种值划分一个有效等价类,并划分一个无效等价类地铁在进站的时候,一个人直接放心,两个人进展,一个人进展,一个人等待。
  • 如果我们确知,已划分的某等价类中的各元素在程序中的处理方式是不同的,则因据此等价类进一步划分成更小的等价类
  • 在确立了等价类之后,建立等价类表,列出所有划分出的等价类

基于等价类划分的用例设计

  • 明确测试对象,非测试对象保证正确
  • 为每个等价类规定一个唯一的编号
  • 设计一个新的测试用例,使其能够尽可能多的覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖
  • 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。

等价类划分实战

  • 根据测试需求可以划分成三个等价类
    • 一个有效数据的等价类,两个无效数据等价类
    • 有效数据等价类就是:由那些对程序的规格说明有意义的,合理的输入数据所构成的集合
    • 无效数据等价类就是:那些对程序的规格说明不合理的或者无意义的输入数据所构成的集合

image-20230311182811342

  • 建立等价类表

    • 在实际工作中,我们通常在确立了等价类以后,把程序所有的等价类建立等价类表,以便在编写测试用例的时候有所依据

image-20230311182910386

  • 确定测试用例

    image-20230311183123618

  • 细化等价类划分

    • 在测试“-99<=数值<=99”的这个等价类区间的时候
    • 我们会发现如10+40,-20+30和-30+(-30)这类的正数相加,正数负数相加,负数相加也是不同的等价区间
    • 因此我们可以使用更多的等价类划分
  • 根据以上等价类划分的结果,得出下表的等价类表

image-20230311183450708

  • 完善测试用例

    • 根据上面划分的四个等价类,我们至少需要有5个测试用例

image-20230311183627920

等价类划分的特点

主要就是画圈。要基于这个原则,把所有可能的输入作为一连串的输入。

我们会发现无效等价类还有可细分的空间,因为我们默认无效等价类只有数字,如果填上ABC,如果填上中文汉字呢?

所以,无效等价类还要进一步拆分,如果是数字、特殊字符、中文,你又要做如何判断?所以更细节的拆分如下,这需要大家课下考虑

  • 测试相同的内容
  • 如果等价类的一个测试能够捕获一个缺陷,那么选择该等价类的其他测试也能捕获该缺陷
  • 如果等价类中的一个测试不能捕获缺陷,那么选择该等价类中的其他测试也不会捕获缺陷
  • 如果正确的划分等价类,可以大大降低测试用例的数量,测试会准确有效
  • 如果错误的将两个不同的等价类当做一个等价类,那就回遗漏一种测试情况
  • 相反的,把同一个等价类看作了两个不同的等价类,那么测试就会是冗余的

等价类划分要注意的问题

  • 不但要考虑有效等价类,也要考虑无效等价类
  • 仔细划分,审查划分
  • 过于粗略可能会漏掉软件缺陷

等价类用例设计联系

测试需求:余额宝体现到银行卡增加新规则:快速到账(2小时)日限额1w元

超过1万元只能选择普通到账

image-20230311190937888

分析过程

  • 设计用例

  • image-20230311191021536

  • 细致分析需求,日限额1w,所以要区分两个场景

  • image-20230311191219467

经典等价类划分面试题

  • 问题:根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例
  • 一个程序读入三个整数,把这三个数值看做一个三角形的三条边的长度值
  • 这个程序要打印出信息,说明这个三角形是不等边的,是等要的还等边的两边之和大于第三边(这是隐含条件的)

解答

  1. 如果出结果只有两种:能构成三角形和不能构成三角形,那么有效等价类就只有abc均大于0,a+b>C,a+c>b,b+c>a

    然后题中规定输出三种结果“不等边、等腰、等边”所以等价类划分应该以此为依据

  2. 有效等价类和无效类是否需要对应?每个功能点是否必须同时具有有效类和无效类?

    1. 有效类和无效类之间并没有一一对应的关系,可以分开划分。一个功能点会产生多个用例,用例通过不同是设计方法来实现,所以功能点跟等价类并没有对应关系
  3. 是否需要考虑输入数字的先后关系?

    1. 如果是三个不同入参,在设计用例时,对a,b,c分别进行区分
有效等价类无效等价类
输入条件读入三个整数a,b,c1. 整数 2. 三个数 3. 非0 数 4. 正数13. 一边为非整数 14. 两边为非整数 15. 三边为非整数 16. 数字个数小于3 17. 数字个数大于3 18. 一边为0 19. 两边为0 20. 三边为0 21. 一边小于0 22. 两边小于0 23. 三边小于0 24 一边大于100 25. 两边大于100 26. 三边大于100
输出条件构成不等边三角形5. a+b>c 6. a+c>b 7. b+c>a27. a+b<=c 28. b+c<=a 29. c+a<=b
构成等腰三角形8. a=b且满足5 9. b=c且满足7 10. a=c且满足6
构成等边三角形11 a=b=c
不构成三角形12. 不满足5,6,7中的一个

等价类划分测试用例

等价类划分测试用例
测试用例编号等价类条件测试用例预期结果
abcd
11,2,3,4,5,6,7234普通三角形
21,2,3,4,5,6,7,8223等腰三角形
31,2,3,4,5,6,7,9232等腰三角形
41,2,3,4,5,6,7,10322等腰三角形
51,2,3,4,5,6,7,11222等边三角形
61,2,3,4,12123不构成三角形
71,2,3,4,5,6,7,132.134不构成三角形
81,2,3,4,5,6,7,142.12.13不构成三角形
91,2,3,4,5,6,7,152.12.12.1不构成三角形
101,3,4,1623null不构成三角形
111,2,18023抛出异常
121,2,19002抛出异常
131,2,20000抛出异常
141,2,3,21-122抛出异常
151,2,3,22-1-22抛出异常
161,2,3,23-2-2-2抛出异常
171,2,3,4,241119999抛出异常
181,2,172343不构成三角形

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

因果图判定表法

因果图&判定表法 在了解了等价类和边界值比较适宜搭档的测试用例方法之后 接下来我们来了解另外一队就是因果图和判定表 因果图会产生判定表法 因果图法 等价类划分法和边界值分析方法都是着重考虑输入条件而不考虑输入条件的各种组合、输入条件之间的相互制约关系。例…

每天5分钟玩转机器学习算法:逆向概率的问题是什么?贝叶斯公式是如何解决的?

本文重点 前面我们已经知道了贝叶斯公式,以及贝叶斯公式在机器学习中的应用,那么贝叶斯公式究竟解决了一个什么样的问题呢?贝叶斯是为了解决逆向概率的问题。 正向的概率和逆向的概率 正向概率:假设袋子里面有N个白球,有M个黑球,你伸手一摸,那么问题就是你摸出黑球的概…

金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)

MySQL数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里必须有一份 MySQL 八…

snmputilg和snmputil的下载 / Win10下SNMP服务的安装和配置

文章目录1. snmputilg和snmputil的下载2. 在Windows上安装SNMP服务3.在Windows上进行SNMP服务的相关配置4.测试是否配置成功1. snmputilg和snmputil的下载 snmputilg和snmputil的下载 该工具是学习和模拟SNMP协议的十分常用的工具。 2. 在Windows上安装SNMP服务 右键开始图标—…

【JVM篇2】垃圾回收机制

目录 一、GC的作用 申请变量的时机&销毁变量的时机 内存泄漏 垃圾回收的劣势 二、GC的工作过程 回收垃圾的过程 第一阶段&#xff1a;找垃圾/判定垃圾 方案1&#xff1a;基于引用计数(非Java语言) 引用计数方式的缺陷 方案2&#xff1a;可达性分析(基于Java语言) …

蓝桥杯嵌入式ADC与DAC(都不需要中断)

目录 1.原理图 &#xff08;1&#xff09;ADC的原理图 &#xff08;2&#xff09;DAC的原理图 2.STM32CubeMX的配置 &#xff08;1&#xff09;ADC的配置 &#xff08;2&#xff09;DAC配置 3.代码部分 &#xff08;1&#xff09;ADC代码 &#xff08;2&#xff09;DA…

【C语言深度剖析】关键字(全)

文章目录一.存储类型关键字前言补充1&#xff1a;内存思考&#xff1a;补充2&#xff1a;变量与内存的关系补充3&#xff1a;变量的分类补充4&#xff1a;存储类补充5&#xff1a;删除数据是怎么删除的&#xff1f;1.auto2.register3.static4.extern基本用法:基本功能5.typedef…

「计算机组成原理」数据的表示和运算(二)

文章目录五、奇偶校验码六、算术逻辑单元ALU6.1 电路的基本原理6.2 加法器的设计6.2.1 一位全加器6.2.2 串行加法器6.2.3 串行进位的并行加法器6.2.4 并行进位的并行加法器七、补码加减运算器八、标志位的生成九、定点数的移位运算9.1 算数移位9.2 逻辑移位9.3 循环移位五、奇偶…

Matlab生成sinc信号

Matlab生成sinc信号 在Matlab中生成sinc信号非常容易。首先&#xff0c;我们需要了解什么是sinc波形。 sinc波形是一种理想的信号&#xff0c;它在时域上是一个宽度为无穷的矩形函数&#xff0c;而在频域上则是一个平的频谱。它的公式为&#xff1a; sinc⁡(x)sin⁡(πx)πx\…

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

前言 本篇文章主要是对YOLOv5项目的训练部分train.py。通常这个文件主要是用来读取用户自己的数据集&#xff0c;加载模型并训练。 文章代码逐行手打注释&#xff0c;每个模块都有对应讲解&#xff0c;一文帮你梳理整个代码逻辑&#xff01; 友情提示&#xff1a;全文近5万字…

学习电气自动化PLC编程最基础的十大知识点详解

这篇文章其实是学习PLC自动化过程中必须要理解的基础问题&#xff0c;不管是西门子PLC还是三菱PLC&#xff0c;抑或欧姆龙PLC&#xff0c;以及国产品牌的PLC&#xff0c;这些问题都必须理解透&#xff0c;才能更好的开始自动化编程。不然指令学完了梯形图的逻辑可能还是搞不懂&…

Datatables展示数据(表格合并、日期计算、异步加载数据、分页显示、筛选过滤)

系列文章目录 datatable 自定义筛选按钮的解决方案Echarts实战案例代码(21)&#xff1a;front-endPage的CJJTable前端分页插件ajax分页异步加载数据的解决方案 文章目录系列文章目录前言一、html容器构建1.操作按钮2.表格构建二、时间日期计算三、dataTables属性配置1.调用2.过…

java多线程与线程池-03线程池与阻塞队列

第6章 线程池与阻塞队列 6.1 Queue接口 队列是一种特殊的集合,一般队列都具有先进先出(FIFO)的特性(并不绝对要求)。优先级队列(PriorityQueue)按照元素的比较方法排序,其他队列基本采用自然序排队。 队列Queue接口实现了Collection接口,offer()方法负责把元素插入…

带头双向循环链表及链表总结

1、链表种类大全 1、链表严格来说可能用2*2*28种结构&#xff0c;从是否带头&#xff0c;是否循环&#xff0c;是否双向三个角度区分。 2、无头单向循环链表一般不会在实际运用中直接存储数据&#xff0c;而会作为某些更复杂结构的一个子结构&#xff0c;毕竟它只在头插、头删…

【数据结构之二叉树】——二叉树的概念及结构,特殊的二叉树和二叉树性质

文章目录一、二叉树的概念及结构1.概念2.现实中的二叉树3. 特殊的二叉树&#xff1a;3.二叉树的性质二、二叉树练习题总结一、二叉树的概念及结构 1.概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合: 或者为空由一个根节点加上两棵别称为左子树和右子树的二叉树组成…

线性表的链式表示

文章目录1.单链表1.1单链表的表示1.1.1构建 带头结点的单链表1.2基本操作1.2.1 头插法1.2.2 尾插法1.2.3 按序号查找结点1.2.4 按值查找表结点1.2.5 插入结点操作扩展&#xff1a;前插操作1.2.6 删除结点操作扩展&#xff1a;删除结点*p1.2.7 求表长操作2.双链表2.1 双链表的表…

JVM相关知识

JVM类加载过程类什么时候被加载什么情况下会发生栈内存溢出JVM内存模型常量池回收方法区垃圾回收流程圾收集算法分代收集理论标记-清除算法标记-复制算法标记-整理算法类加载过程 加载–验证–准备–解析–初始化–使用–卸载 ​ 加载&#xff1a;通过全类名获取类的二进制流…

【C++】非类型的模板参数,特化

目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组&#xff0c;数组长度不同&#xff0c;就可以用模板参数传数值而不是传类型 非类型模板…

Docker与微服务实战2022

基础篇(零基小白)1.Docker简介1.1 是什么问题&#xff1a;为什么会有docker出现&#xff1f;您要如何确保应用能够在这些环境中运行和通过质量检测&#xff1f;并且在部署过程中不出现令人头疼的版本、配置问题&#xff0c;也无需重新编写代码和进行故障修复&#xff1f; 答案就…

Android源码分析 - View的触摸事件分发

0. 相关分享 Android源码分析 - InputManagerService与触摸事件 1. 接收Input系统发送来的事件 时序图源&#xff1a;稀土掘金 在注册Window的时候&#xff0c;来到ViewRootImpl&#xff0c;其中不仅发起窗口注册&#xff0c;还开启了输入事件的监听&#xff1a; //ViewRoo…