等价类划分法测试用例设计举例

article/2025/10/3 5:24:24

一、基本概念
等价类是指程序输入域的子集。
等价类划分(Equivalance Partitioning)测试的思想:将程序的输入域划分为若干个区域(等价类),并在每个等价类中选择一个具有代表性的元素生成测试用例。该方法是常用的黑盒(Blackbox Testing)测试用例(Testcase)设计方法。
一)划分等价类
1.有效等价类与无效等价类
等价类划分可有两种不同的情况:有效等价类和无效等价类。有效等价类是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合,它能检验程序是否可以实现规格说明中所规定的功能需求无效等价类是指对程序的规格说明是不合理的或无意义的输入数据所构成的集合,它能检验程序在不符合规则的数据输入下,是否会有异常;无效等价类至少应有一个,也可能有多个,视具体情况而定。因此,设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。
2.划分等价类的标准
完备测试、避免冗余。这就要求:集合(程序输入域)应划分为互不相交的一组子集,而这些子集的并集是整个集合(整个程序输入域)。
3.等价类的划分原则
(1) 若输入条件规定了取值范围或值的个数的情况下,可划分为一个有效等价类和两个无效等价类;
Eg.设置风控指标,其中权重设置范围在[-1000,1000]
这里写图片描述
(2) 若输入条件为布尔表达式,可划分为一真一假的有效等价类与无效等价类;
Eg.设置产品信息,其中产品份额必填
这里写图片描述
(3) 若规定了输入数据必须要遵循的原则,可划分为一个有效等价类(符合规则)和若干个无效等价类;
Eg.系统的初始资金只可输入数字
这里写图片描述
(4)若只要求输入数据符合某几个原则,这时可能存在多个有效类和若干个无效等价类;
Eg. 交易用户登录密码只可输入数字、字母及部分特殊符号,不能输入单/双引号及汉字
这里写图片描述
注:每个有效等价类所对应的无效等价类的并集是不符合输入原则的数据集合。
(5)若规定了输入数据的一组值(假定n个),且程序对不同输入值做不同处理,则可划分为n个有效等价类(每个允许的输入值为一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。
Eg. 设置资金账户时,必须选择是否检查自成交
这里写图片描述
Eg.输入条件规定学历可为:专科、本科、硕士、博士四种之一
这里写图片描述
(6)在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
二)测试用例设计步骤
(1) 划分等价类后,建立等价类表,并为每一个等价类规定一个唯一的编号;
(2) 设计一个测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步骤,直到所有的有效等价类都被覆盖为止;
(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止。(因为用单个测试用例覆盖无效等价类,是因为某些特定的输入错误会屏蔽或取代其他输入错误检查)

二、习题练习
一)三角形问题的等价测试用例
【问题描述】程序要求:输入三个整数 a 、 b 、 c 分别作为三角形的三边长度,通过程序判定所构成的三角形的类型;当三角形为一般三角形、等腰三角形或等边三角形时,分别作 …处理 。
<问题分析>
(1) 输入值域的显/隐式要求:A 整数、B 三个、C 正数、D 两边之和大于第三边、E 三边均不相等、F 两边相等但不等于第三边、G 三边相等;(D~G由输出值域的等价类隐性确定)
(2) 输出值域的等价类:R1={不构成三角形}、R2={一般三角形}、R3={等腰三角形}、R4={等边三角形};
<问题解答>
(1) 列出等价类表并编号
这里写图片描述
(2) 设计覆盖有效等价类的测试用例
这里写图片描述
(3) 设计覆盖无效等价类的测试用例
这里写图片描述
二)NextDate函数的等价测试用例
【问题描述】NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,则函数的输出为 2006年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件: ①1≤month≤12
②1≤day≤31
③1912≤year≤2050
<问题分析>该函数的主要特点是输入变量之间的逻辑关系比较复杂,具体体现在:输入域的复杂性;闰年规则。如,变量year和变量mouth取不同值时,对应的变量day会有不同的取值范围,或1~30或1~31或1~28或1~29。
<问题解答>
(1)划分法一
(1.1)划分等价类
A. 有效等价类
M1={mouth:1≤mouth≤12}; D1={day:1≤day≤31};Y1={year:1912≤year≤2050}
B. 无效等价类
M2={mouth:mouth<1}、M2={mouth:mouth>12};
D2={day:day<1}、D3={day:day>31};
Y2={year:year<1912}、Y2={year:year>2050};
(1.2) 一般等价类测试
由于有效类的数量等于独立变量的个数,因此只有弱一般等价类测试用例出现,且与强一般等价类测试用例相同。
这里写图片描述
【注】“弱”是指含单缺陷假设(失效极少是由两个或两个以上的缺陷同时引起的),“强”是指含多缺陷假设(失效是由两个或两个以上的缺陷同时引起的);“一般”是指不考虑无效值。弱一般等价类测试用例通过使用一个测试用例中的每个有效等价类(区间)的代表值来实现(常以对称方式来标识这些测试用例,且注意单边假设作用);强一般等价类测试用例通过每个独立变量的有效等价类的笛卡尔积来实现。
(1.3) 健壮等价类测试
(1.3.1) 弱健壮等价类测试
弱健壮等价类测试中的无效测试用例只含一个无效值,其他都是有效值,即含有单缺陷假设。【注:“弱”是指含单缺陷假设,“强”是指含多缺陷假设;“健壮”是指考虑无效值】
这里写图片描述
(1.3.2) 强健壮等价类测试
强健壮等价类测试考虑了更多的无效值情况。强健壮等价类测试中的无效测试用例可以包含多个无效值,即含有多个缺陷假设。NextDate函数有三个变量,故相应地强健壮等价类测试用例可包含一个无效值、两个无效值或三个无效值。【注:“强”是指含多缺陷假设,“强”是指含多缺陷假设;“健壮”是指考虑无效值】
这里写图片描述
(2)划分法二
显然地,在用划分法一测试NextDate函数时,既没有考虑2月份的天数问题,又没有考虑闰年的问题。因此,应作进一步地改善。
(2.1)划分等价类
等价关系的要点是:等价类中的元素要被“同样处理”,即要么都在有效层次上进行,要么都在无效层次上进行。因此,更详细地有效等价类为:
√变量mouth:M1={mouth: mouth有30天}、M2={mouth: mouth有31天,除去12月}、M3={mouth: mouth是2月}、M4={mouth: mouth是12月};
√变量day:D1={day: 1≤day≤28}、D2={day: day=29}、D3={day: day=30}、D4={day: day=31};
√变量day:Y1={year: year是闰年}、Y2={year: year是平年};
(2.2) 一般等价类测试
A. 弱一般等价类测试
考虑到单边假设,机械地以对称方式来选择对应类的有效输入:
这里写图片描述
B. 强一般等价类测试
从弱等价类测试到强等价类测试,不管是一般类还是健壮类,都做要独立性假设,都要以等价类的笛卡尔积表示。
在本问题中,变量mouth等价类数量为4、变量day等价类数量为4、变量year等价类数量为2,故强一般等价类测试用例数量为4*4*2=32。
这里写图片描述
(2.3) 健壮等价类测试
A. 弱健壮等价类测试

     B. 强健壮等价类测试**三)佣金问题的等价测试用例** 

待更新……


http://chatgpt.dhexx.cn/article/yEaiPR6W.shtml

相关文章

等价类划分测试用例设计方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类 等价类是指某个输入域的子集合。在该子集合…

编写测试用例方法之等价类划分法

今天我们再来介绍另外一个编写测试用例的方法&#xff1a;等价类划分法&#xff0c;这个方法是最常用的写用例的方法。话不多说&#xff0c;开始整干货&#xff0c;首先&#xff0c;全图镇楼。 之前我们是如何测试一个商品的呢&#xff1f;产品就是要有它的测试点。测试点之前也…

等价类划分法设计测试用例

等价类划分法&#xff1a; 一、方法简介 1.定义 是把所有可能输入的数据&#xff0c;即程序的输入域划分策划国内若干部分&#xff08;子集&#xff09;&#xff0c;然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法…

常用测试用例设计方法5-错误推算法

一&#xff0c;错误推算法的定义 基于测试人员的经验和直觉推测推测程序中所有可能存在的各种错误&#xff0c;有针对性的设计测试用例的方法。 二&#xff0c;错误推算法的基本思想 基于测试人员的经验和直觉推测推测程序中所有可能存在的各种错误&#xff0c;有针对性的设计…

测试用例设计--等价类的几个例子

等价类的设计思路: 根据输入条件,确定等价类,包括有效等价类和无效等价类,建立等价类列表为每个等价类规定一个唯一的编号设计一个测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类被覆盖完为止设计一个测试用例,使其尽可能多的覆盖…

理解:守护线程---理解

定义&#xff1a;守护线程--也称“服务线程”&#xff0c;在没有用户线程可服务时会自动离开。 优先级&#xff1a;守护线程的优先级比较低&#xff0c;用于为系统中的其它对象和线程提供服务。 设置&#xff1a;通过setDaemon(true)来设置线程为“守护线程”&#xff1b;将一…

并发编程线程基础知识:守护线程

什么是守护线程 守护线程–也称“服务线程”&#xff0c;它是后台线程&#xff0c;在没有用户线程可服务时会自动离开。 守护线程优先级 守护线程的优先级比较低&#xff0c;用于为系统中的其它对象和线程提供服务。 如何设置守护线程 通过 setDaemon(true)来设置线程为“…

Java 守护线程的作用 Java 守护线程线程

Java 守护线程的作用 Java 守护线程线程 一、概述 在看java线程相关的内容时&#xff0c;有一个 daemon thread 守护线程的概念&#xff0c;看方法注释内容&#xff0c;大意是&#xff1a;将此线程标记为守护线程或用户线程。当运行的所有线程都是守护线程时&#xff0c;Java虚…

多线程中守护线程的使用

java中线程分为非守护线程(用户线程)和守护线程(后台线程) 一、setDaemon(boolean on) java线程中对于守护线程的使用主要是依靠setDaemon(boolean on)方法 方法作用: 将此线程设置为守护线程 守护线程使用上与普通线程没有区别, 但是在结束上有一点不同, 当一个进程中所有…

python守护线程

启用守护线程 守护线程&#xff0c;又称后台线程&#xff0c;它是在后台运行的&#xff0c;如果所有前台线程都死亡&#xff0c;那么后台线程就会自动死亡。 import threadingdef run(n):for i in range(n):print(threading.current_thread().name " " str(i)) …

多线程-守护线程

守护线程&#xff08;daemon&#xff09;&#xff1a; 线程分为用户线程&#xff08;如main线程&#xff09;和守护线程&#xff1b; 虚拟机必须确保用户线程执行完毕&#xff0c;而不会等待守护线程执行完毕&#xff1b; 守护线程有&#xff1a;记录操作日志的线程、监控内存的…

守护线程是什么?守护线程和非守护线程的区别是?守护线程的作用是?

守护线程是区别于用户线程&#xff0c;用户线程即我们手动创建的线程&#xff0c;而守护线程是程序运行的时候在后台提供一种通用服务的线程。垃圾回收线程就是典型的守护线程。 守护线程和非守护线程的区别是 public static void main(String[] args) throws InterruptedExce…

JAVA多线程——守护线程

在Java中有两类线程&#xff1a;User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的保姆&#xff1a; 只要当前JVM实例中尚存在任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#…

java守护线程 作用_Java中守护线程的总结

在Java中有两类线程&#xff1a;User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的保姆&#xff1a; 只要当前JVM实例中尚存在任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#xf…

【线程】什么是守护线程?

Java提供了两种线程&#xff1a;守护线程和用户线程 守护线程&#xff0c;是指在程序运行时 在后台提供一种通用服务的线程&#xff0c;这种线程并不属于程序中不可或缺的部分。通俗点讲&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的"保姆"。 用户线…

JAVA多线程基础篇--守护线程(Daemon Thread)

1.概述 JAVA中的线程主要分为两类&#xff1a;用户线程&#xff08;User Thread&#xff09;和守护线程(Daemon Thread)。JAVA语言中无论是线程还是线程池&#xff0c;默认都是用户线程&#xff0c;因此用户线程也被称为普通线程。守护线程也被称之为后台线程、服务线程或精灵…

面试官: 谈谈什么是守护线程以及作用 ?

文章首发自微信公众号: 小哈学Java 个人网站: https://www.exception.site/java-concurrency/java-concurrency-daemon-thread 目录 一、什么是守护线程 二、守护线程的作用及应用场景 三、总结 一、什么是守护线程 守护线程相对于正常线程来说&#xff0c;是比较特殊的一…

入门oracleDBA面试题

1.默认情况下管理员创建了一个用户&#xff0c;就会在 /home 下创建一个用户的主目录 2.当用mount进行设备或文件挂载时&#xff0c;需要用的设备名称位于 /dev 位置。 3.列出目录所有目录里的所有文件ls -l 4.Su 可以讲普通用户转换为超级用户&#xff0c;但是需要密码 5.…

oracle面试题答案,Oracle面试题笔试题及参考答案

一套Oracle面试题笔试题及参考答案 Oracle, 笔试, 面试 完成下列操作&#xff0c;写出相应的SQL语句 1.创建表空间neuspace&#xff0c;数据文件命名为neudata.dbf&#xff0c;存放在d:\data 目录下&#xff0c;文件大小为200MB&#xff0c;设为自动增长&#xff0c;增量5MB&am…

一个oracle面试题

某天&#xff0c;群里突然冒出一个道友询问oracle的面试题&#xff0c;特此记录一下 一系列过程&#xff1a; 第一步建表&#xff1a; DROP TABLE serv; DROP TABLE terminal; CREATE TABLE serv(serv_id NUMBER(10),prod_id NUMBER(10),user_type VARCHAR2(30),terminal_na…