转:测试用例的几种常见设计方法

2024-08-30 07:58

本文主要是介绍转:测试用例的几种常见设计方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://www.51testing.com/html/30/n-3719130.html

测试用例常见的设计方法有:等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。

  一.等价类划分法

  顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。

  例如,我们要测试一个用户名是否合法,用户名的定义为:8位数字组成的字符。

  我们可以先划分子集:空用户名,1-7位数字,8位数字,9位或以上数字,非数字。

  然后从每个子集选出若干个有代表性的值:

  空用户名:“”      (无效等价类实例,指对于软件规格说明而言,没有意义的、不合理的输入)

  1-7位数字:"234"       (无效等价类实例)

  8位数字:"00000000"    (有效等价类实例,能检验程序是否实现了规格说明中所规定的功能和性能)

  9位或以上数字:"1234567890"    (无效等价类实例)

  非数字:"abc&!!!"                (无效等价类实例)

  他们5个,就是用等价类划分选出的测试用例。实际上,对于1-7位数字的子集来说,选“234”和“11111”没有本质的区别。

  等价类的划分,最关键的是子集的划分。实际上,非数字还可以继续划分子集:字母,特殊字符。

  究竟要划分到何种程度才合适呢?我请教过做测试的朋友,他的意见是,看你有多少资源和时间,还有,看是否值得。

  对此,我表示赞同,毕竟无论你怎么测试,总会有未发现的缺陷存在,所以,先解决容易被发现的问题再说。

  二.边界值分析法

  长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值,例如,对于在区间min,max的值,测试用例可以记为min,min+,max,max-。

  例如,假定 X 为整数,10≤X≤100,那么 X 在测试中应该取的边界值为:10,11,99,100。

  注:上面只是说边界值,如果是完整的测试,除了边界值外,还需要一个正常值,即12-98之间的任意值。

  三.错误推测法

  错误推测法是指:在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。

  这种方法没有固定的形式,依靠的是经验和直觉,很多时候,我们都会不知不觉的使用到。

  四.判定表法

  又称为策略表,基于策略表的测试,是功能测试中最严密的测试方法。该方法适合于逻辑判断复杂的场景,通过穷举条件获得结果,对结果再进行优化合并,会得到一个判断清晰的策略表。

  例如,某公司的对客户分类标准如下:

  顾客每次订货额在 1000元以上(含1000元),信誉好的,订单设“优先”标志;

  信誉不好,但是老客户的,订单设“优先”标志;

  信誉不好,但是新客户的,订单设“正常”标志;

  每次订货额在 1000元以下,订单设“正常”标志。

  绘制的决策表如下:

  此表分两大行,两大列,分别用不同的颜色区别。

  浅蓝:列出所有条件(或称为输入)

  浅灰:列出所有结果(或称为输出,行动或决策)

  浅黄:穷举所有条件的组合

  浅绿:根据每一列的条件,判断出结果

  因为穷举了所有条件,所以可以说这个判断是100%正确的。下一步是对这个表进行合并优化。

   例如,从编号为1,2的列可以看出,顾客订单>=1000,信誉好,不管是新顾客还是老顾客,都设为优先,于是上面的表合并整理后,得到下表

  这样,我们就可以得到更清晰的逻辑判断,也可以更好的协助我们编写测试用例。而决策表,对于开发人员来说一样有用。

  从上面的表格,我们就可以写出更简洁的判断语句。

  五.正交实验法

  用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例。

  其中,上面所说的特殊表格就是正交表,是按照一定规则生成的表。

  虽然说是特殊的表格,实际表现形式跟一般的表格没有什么区别,正交表的主要特征是,“均匀分布,整齐划一”,正是因为“均匀”的,所以才能以少数代替全部。

  例如:

  某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询。

  按照传统的方式,我们将会穷举所有的组合,来编写测试用例,组合个数是2*2*2=8。

  排列组合参见下表

  当组合条件不多的时候,穷举暂时没问题,但是,一旦条件多了,组合个数就会以指数形式增长。

  这个时候,就要用到正交表了,通过选出有代表性的测试实例,达到以少数代替全面的效果。

  正交表如何设计呢,这个问题实际很复杂,涉及到组合统计的数学知识,有的正交表甚至到目前为止,还未得出算法。

  我们只能通过已知的模型套上去。

  例如,Dr. Genichi Taguchi 设计的正交表

  https://www.york.ac.uk/depts/maths/tables/orthogonal.htm

  Technical Support ( support.sas.com ) com 提供的

  http://support.sas.com/techsup/technote/ts723_Designs.txt

  首先,我们来看看基本的概念。

  因素:被测的元素称为因素,例如上面的性别,班级,成绩,均为因素,因素的个数我们记为k,此处k=3

  水平:因素的可能值,称为水平。例如班级的可能值为1或2。水平的个数我们记为m,此处正好每个因素的水平都是2,此处m=2。

  那么正交表的行数n的计算公式为,n=k*(m-1)+1,此处为n=3*(2-1)+1=4。即共有4行。

  我们通常用L表示这个正交表,完整的表示为Ln(mk)

  如果每个因素的水平数相等,我们称之为单一水平正交表,例如本例子就是,L4(23)

  各列水平数不完全相同的正交表称为混合水平正交表。如L8(4124),表示有一个因素的水平为4,有4个因素的水平为2。

  按照这个表达式,我们可以去套用已知的正交表。例如本例子是L4(23),从上面提供的两个链接均可以查到例子,虽然表达方式略有不同,但实际是一样的,我们从http://support.sas.com/techsup/technote/ts723_Designs.txt 查到,其正交表的格式为:

  23     n=4

  000

  011

  101

  110

  此处0,1是对可能值的编号,例如,我们可以将(0,1)分别映射为(女,男)(1班,2班)(及格,不及格)

  按照上面的格式,

  000:女  1班  及格

  011:女  2班  不及格

  101:男  1班  不及格

  110:男  2班  及格

  这就是我们所得到的正交表。

  六.总结

  功能测试方法还有很多,例如因果图法,状态转换测试法等,他们都略为复杂,像正交实验法一样,有各自的一套东西,不过本质都是通过画图,让我们更好的思考,最后转化成判定表。

  实际上常用的是前面五种方法,包括:等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。

这篇关于转:测试用例的几种常见设计方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120236

相关文章

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据