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

article/2025/10/3 5:46:07

等价类划分法:

一、方法简介

1.定义

是把所有可能输入的数据,即程序的输入域划分策划国内若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法。

2.划分等价类

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其他值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分有两种不同的情况:有效等价类和无效等价类。

1)有效等价类

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

2)无效等价类

指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能多个。

设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

3.划分等价类的标准

       1) 完备测试、避免冗余

       2) 划分等价类重要的是:集合的划分、划分为互不相交的一组子集,而子集的并是整个集合

       3) 并是整个集合:备性

       4) 子集互不相交:保证一种形式的无冗余性

       5) 同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到“相同的执行路径”。

4.划分等价类的方法

1) 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

clip_image001

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

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

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

例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种的四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。

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

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

5.设计测试用例

在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:

       1)为每一个等价类规定一个唯一的编号;

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

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

二、实战演习

1、三角形问题

1、某程序规定:“输入三个整数a、b、c分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形、等边三角形时,分别做计算。。。”用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)

分析题目中给出和隐含的对输入条件的要求:

(1)整数 (2)三个数(3)非零数(4)正数

(5)两边之和大于第三边(6)等腰 (7)等边

如果a、b、c满足条件(1)~(4),则输出下列四种情况之一:

1)如果不满足条件(5),则程序输出为“非三角形”

2)如果三条边相等即满足条件(7),则程序输出为“等边三角形”

3)如果只有两条边相等,及满足条件(6),则程序输出为“等腰三角形”

4)如果三条边都不相等,则程序输出为“一般三角形”

列出等价类表并编号

clip_image002

覆盖有效等价类的测试用例:

a b c覆盖等价类号码

3 4 5 (1) (7)

4 4 5  (1)(7) (8)

4 5 5 (1) (7) (9)

5 4 5 (1) (7) (10)

4 4 4 (1) (7) (11)

覆盖无效等价类的测试用例:

clip_image003

2NextDate

2、NextDate函数包含三个变量:month、day、year,函数的输出为输入日期后一天的日期。

例如,输入2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month、day、year均为整数值,并且满足下列条件:

1、1<=month<=12

2、1<=day<=31

3、1812<=year<=2012

1)有效等价类为:

M1={月份:1<=月份<=12}

D1={日期:1<=日期<=31}

Y1={年份:1812<=年<=2012}

2)若条件1~3中任何一个条件失效,则NextDate函数都会产生一个输出,指明相应的变量超出取值范围,比如“month的值不在12范围中”。显然还存在这大量的year、month、day的无效组合,NextDate函数将这些组合作为统一的输出:“无效输入日期”。

其无效等价类为:

M2={月份:月份<1}

M3={月份:月份>12}

D2={日期:日期<1}

D3={日期:日期>31}

Y2={年份:年<1812}

Y3={年份:年>2012}

弱一般等价类测试用例

月份

日期

预期输出

6

15

1912

1912年6月16日

强一般等价类测试用例同弱一般等价类测试用例

注:弱有单缺陷假设;健壮考虑了无效值。

(一)弱健壮等价类测试

用例

ID

月份

日期

预期输出

WR1

 

6

15

1912

1912年6月16日

WR2

 

0

1

1912

月份不在1~12中

WR3

 

15

1

1912

月份不在1~12中

WR4

 

1

0

1912

日期不在1~31中

WR5

 

1

32

1912

日期不在1~31中

WR6

 

1

1

1811

年不在1812~2012中

WR7

 

1

1

2013

年不在1812~2012中

(二)强健壮等价类测试

用例

ID

月份

日期

预期输出

SR1

 

15

1

1912

月份不在1~12中

SR2

 

1

32

1912

日期不在1~31中

SR3

 

1

1

1811

年份不在1812~2012中

SR4

 

0

0

1912

两个无效一个有效

SR5

 

0

1

1811

两个无效一个有效

SR6

 

1

0

1811

两个无效一个有效

SR7

 

0

0

1811

三个无效

转自:https://blog.csdn.net/weixin_34138521/article/details/93363609

转载于:https://www.cnblogs.com/zhangwuji/p/7128240.html


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

相关文章

常用测试用例设计方法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…

oracle试题和答案,Oracle面试题及答案

Oracle面试题及答案模块和题目 l基本SQL查询 l运算符与函数 l子查询 l连接查询 建表语句emp.sql PartI(第一天) 01.查询员工表所有数据,并说明使用*的缺点 答&#xff1a; select*fromemp; 使用*的缺点有 a)查询出了不必要的列 b)效率上不如直接指定列名 02.查询职位(JOB)为PRE…

Oracle面试题整理

目录 Oracle面试题整理 1.MySQL和Oracle的区别&#xff1a; 2.Oracle中function和procedure的区别&#xff1f; 3. 比较truncate和delete命令 &#xff1f; 4.oralce中 rowid, rownum的定义 5. 事务的特性&#xff08;ACID&#xff09;是指什么 6. 列举几种表连接方式…

Oracle面试题及答案整理,速速收藏

点击上方SQL数据库开发&#xff0c;关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 好久没有给大家发面试题了&#xff0c;最近收集了一套Oracle的面试题&#xff0c;特地整理出来分享给大家&#xff0c;希望对你有帮助。 1、表&#xff1a;table1(…