首页 > 其他分享 >八.用例设计方法--等价类、边界值、因果图、判定表法

八.用例设计方法--等价类、边界值、因果图、判定表法

时间:2022-09-03 14:46:07浏览次数:56  
标签:-- 边界值 等价 表法 测试用例 判定 条件 输入

八大测试用例设计方法:等价类、边界值、因果图、判定表法、正交试验法、状态图、场景法、测试大纲法;

最常用的:等价类、边界值、场景法;

 (一)等价类

1.等价类划分方法是把所有可能的输入数据即输入域划分成若干部分(子集),然后从每个子集中选取具有代表性的数据作为测试用例;

(1)等价类中的各个元素具有相同的属性,测试某等价类的代表值就等效于对这一类其他值的测试;

(2)(被划分集合)各个等价类之间不会存在相同的元素,它们的并集是被划分集合的全集;

2.测试思想

(1)在进行测试用例设计时,以具有相同的预期结果为等价划分原则,将系统的被测试域划分为不同的等价类集合,从中选出代表作为测试用例,以期达到尽可能完备同时又可避免冗余的测试。

(2)被测试域可能是输入域、输出域、输入或输出域的部分或任何其它值得测试的范围

3.分类

(1)有效等价类:对程序的规格说明来说是合理的、有效的、有意义输入数据的集合。*利用有效等价类可检验程序是否实现了规格中的功能和性能;

(2)无效等价类:对软件规格说明而言是无意义的、不合理的输入数据构成的集合。*利用无效等价类可鉴别程序异常处理的情况,是否有不符合规格说明的地方;

4.设计测试用例--划分等价类

(1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

  (例:移动OA注册界面,输入手机号码应该是11位---有效等价类:11位的手机号码 无效等价类:<11和>11);

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

  (例:移动OA注册界面,密码不能是明文显示---不是明文显示    无效等价类:明文显示);

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

  (例:单选的选中与不选中,判断对错的对与错。);

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

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

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

  (例:月收入的税率算法必须符合某些规则---有效等价类:符合规则的税率算法    无效等价类:按照收入范围从不同角度违反规则);

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

  (例:例如:核对日期的有效性,初步有效等价类是1<=Month<=12,1<=Day<=31---可以考虑到2月以及闰年、闰月、长月、短月等,需要进一步细分,当然其中还涉及到了年月日组合的问题);

5.确定测试用例

(1)步骤:

  划分等价类 为每一个有效等价类和无效等价类规定一个唯一的编号;

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

  设计一个测试用例,使其只覆盖一个无效等价类,重复这一步,直到所有无效等价类均被覆盖;

(2)表示法:

使用下面的表格有利于确定测试用例;

 6.等价类方法的补充说明

(1)弱一般等价类:覆盖尚未覆盖的被测变量的有效等价类并且每个被测变量的有效等价类应至少出现一次;

(2)强一般等价类:覆盖所有被测变量有效等价类的组合;

(3)弱健壮等价类:覆盖尚未覆盖的有效等价类,对于无效等价类,每个测试用例只考虑一个被测变量的无效等价类;

(4)强健壮等价类:覆盖所有被测变量的有效等价类和无效等价类的组合;

(二)边界值

1.边界值分析法具有很强的发现程序错误的能力;测试用例来自等价类的边界;

2.任何值得测试的范围的临界点,可分为:

(1)边界值:明确地定义在规格说明书中;

(2)次边界:隐含在软件中必须经过分析才能获得;

3.测试思想(设计应遵循的原则):取边界点附近的值作为测试用例的输入,可参考如下的设计原则

(1)如果输入条件定义了数值区间(a,b),那么测试用例应包括a、b、稍微比a大、稍微比b大、稍微比a小和稍微比b小等几种情况。

  (例:成年人每分钟的心跳60-100之间为正常---有效等价类:60-100  无效等价类:<60 和 >100---边界值测试:59、60、61、99、100、101);

(2)如果输入条件规定了值的个数, 那么最小个数、最大个数、大于和小于最小值、大于和小于最大值都应该被测试。

  (例:一个循环条件为“≤”时,程序却错写成“<”,计数器发生少记数一次);

(3)如果程序的输入域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

  (例:如果变量X的取值范围是a≤X≤b,则X的输入域为[a,b]);

(4)上述原则也适用于输出条件。

(5)如果在程序中的数据结构有指定的边界,那么选择这个数据结构边界上的值作为测试用例。

  (例:数据结构内存边界对齐,每一种原子数据在存储时都有两个属性:它的起始地址约束和它本身的大小, 在windows下,查看type类型的起始地址约束,char是1,short是2,int是4, double是8等等。在linux下,char是1,short是2,其他都是4。);

(6)分析规格说明,找出其它可能的边界条件。

(7)除了遵循前面论述的边界值设计原则,还应考虑测试下面的情况:

  第一个/最后一个, 第一个-1/最后一个+1 开始/结束, 开始-1/结束+1;

  超过/低于, 刚刚超过/刚刚低于;

  空的/满的, 比空的少点/比满的多些;

  最短的/最长的, 稍微短点/稍微长点;

  最慢的/最快的, 稍微慢点/稍微快点;

  最早的/最晚的, 稍微早点/稍微晚点;

  最大的/最小的, 最大的+1/最小的-1;

  最高的/最低的, 最高的+1/最低的-1;

  距离最近的/距离最远的;

4.边界值测试思想讨论:

(1)对于输出变量的边界上同样可以考虑使用边界值测试;

(2)虽然边界值测试是以黑盒测试方法的面貌出现,但是其思想不仅可以用于测试功能,同样可以将边界值测试的思想用于测试代码;

5.从理论上来说,边界值可分为:

(1)仅考虑有效区间单个变量边界值(一般边界值):用在最小值,略高于最小值,正常值,略低于最大值和最大值处取变量的值。如果被测变量个数为n,则测试用例个数为4n+1;

(2)仅考虑有效区间多个变量边界值同时作用(一般最坏情况边界值):用各个变量的最小值,略高于最小值,正常值,略低于最大值和最大值的笛卡尔积集。如果被测变量个数为n,则测试用例个数为5的n次方;

(3)同时考虑有效区间和无效区间单个变量边界值(健壮边界值):除了在最小值,略高于最小值,正常值,略低于最大值和最大值处取变量的值,还要在略超过最大值以及略小于最小值之处值。如果被测变量个数为n,则测试用例个数为6n+1;

(4)同时考虑有效区间和无效区间多个变量边界值同时作用(健壮最坏情况边界值):用各个变量的略小于最小值,最小值,略高于最小值,正常值,略低于最大值,最大值和略超过大值的完全组合。如果被测变量个数为n,则测试用例个数为7的n次方;

6.边界值方法:一般边界值、一般最坏情况边界值、健壮边界值、健壮最坏边界值;

7.边界值测试比较适合运用在有下列含义的变量上:数值、字母、位置、数量、速度、大小;

(三)因果图

1.因果图法的来源

(1)大家熟悉等价类划分法和边界值分析法,都是着重考虑输入条件,但未考虑输入条件之间的联系、相互组合等;

(2)但是,如果考虑输入条件之间的相互组合,会由于组合情况数目相当大,需要大量的测试用例;

(3)因果图法是一种帮助人们系统的选择一组高效率测试用例的方法。

2.因果图法的特点

(1)考虑输入条件间的组合关系;

(2)考虑输出条件对输入条件的信赖关系,即因果关系;

(3)测试用例发现错误效率高;

(4)能检查出功能说明中的某些不一致或遗漏;

(5)因果图法最终生产的就是决策表,它适合于检查程序输入条件和各种组合情况;

3.因果图法的基本步骤

(1)分割功能说明书

  对于规模比较大的程序来说,由于输入条件的组合的太大,所以很难整体上使用一个因果图。我们可以把它分成若干部分,再对每个部分使用因果图。

(2)识别出“原因”和“结果”,并加以编号

  所谓原因,是指输入条件或输入条件的等价类;而结果,是指输出条件或输出条件的等价类。每个原因和结果都对应因果图中的一个节点。当原因或结果成立(或出现)时,相应的节点取值为1,否则为0。

(3)例:有一个饮料自动售货机(受理单价为5角钱)的控制处理软件,它的软件规格说明如下: 若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同时也是按“橙汁”或“啤酒”的按钮,则自动售货机在送出相应的饮料的同时退回5角钱的硬币。

  A.原因: 投入1元硬币 投入5角硬币 按下“橙汁”按钮 按下“啤酒”按钮;

  B.结果: 退还5角钱 送出“橙汁”饮料 送出“啤酒”饮料;

  C.因果图: 

4.根据因果图画出决策表

(1)可以把所有的原因作为输入条件,每一项原因(输入条件)安排为一行,而所有的输入条件的组合一一列出(真值为1,假值为0),对于每一种条件组合安排一列,并把各个条件的组合情况分别添入判定表中对应的每一个单元格中。

(2)上述方法考虑了所有情况的所有组合,在输入条件比较多的情况下,可能会产生过多的条件组合而过于复杂,然而在实际情况下,各条件组合之间可能会存在约束条件,所以很多条件的组合是无效的、多余的。

(3)例:自动售货机的决策表

  A.决策表

  B.为决策表的每一列设计一个测试用例 即为从因果图中导出的判定表中的每一列设计一个测试用例;

5.什么情况下使用因果图法:在一个界面中,有多个控件,控件之间存在一定的组合关系和限制关系,不同的组合会产生不同的输出结果的组合,为了弄清输入组合和输出组合之间的对应关系,使用因果图法;

6.因果图的核心概念

(1)因——原因、输入条件;

(2)果——结果、输出结果;

(3)使用画图的方式,表达输入和输出的对应关系;

7.图像符号

(1)基本图形——表达输入和输出的关系(因-果关系)

  

  恒等:若原因出现,则结果出现;若原因不出现,则结果也不出现。

  非(~):若原因出现,则结果不出现;若原因不出现,结果反而出现。

  或(∨):若几个原因中有1个出现,则结果出现;若几个原因都不出现,则结果不出现。

  与(∧):若几个原因都出现,结果才出现。若其中有1个原因不出现,则结果不出现。

(2)因果图中的约束

在实际问题中输入状态相互之间、输出状态相互之间可能存在某些依赖关系,称为“约束”。

对于输入条件的约束有互斥(E)、唯一(O)、包含(I)、要求(R)四种约束,对于输出条件的约束只有屏蔽(M)约束。

  

  E约束(异):a和b中最多有一个可能为1,即a和b不能同时为1。

  O约束(唯一):a和b必须有一个且仅有一个为1。

    互斥和唯一的区别: 互斥可以全部为0,而唯一不能全部为0;在程序中,互斥关系是启动后没有默认值,而唯一会有一个默认值;

  I 约束(或):a、b、c中至少有一个必须为1,即 a、b、c不能同时为0。

  R约束(要求):a是1时,b必须是1,即a为1时,b不能为0。

  M约束(屏蔽(强制)):若结果a为1,则结果b强制为0。

8.因果图创建测试用例步骤:

(1)分析需求中原因和结果。

(2)将需求中的原因和结果连接成因果图。

(3)把因果图转换成判定表。

(4)把判定表中每一列表示的情况写成测试用例。

9.因果图的优缺点

(1)优点:

  因果图法能够帮助我们按照一定步骤,高效的选择测试用例,设计多个输入条件组合用例;

  因果图分析还能为我们指出,软件规格说明描述中存在的问题;

(2)缺点:

  输入条件与输出结果的因果关系,有时难以从软件需求规格说明书得到;

  即时得到了这些因果关系,也会因为因果关系复杂导致因果图非常庞大,测试用例数目及其庞大;

(四)判定表法

1.判定表法设计测试用例

(1)判定表法就是因果图法的简化,省略画图过程,本质上是一种方法(应用场合、分析过程一致);

(2)判定表驱动法(简称判定表法也称决策表法)是根据描述判定后,导出测试用例的方法;

  在所有的黑盒测试方法中,基于判定表的测试是最为严格、最具有逻辑性的测试方法;

  可以设计处完整的测试用例集合;

2.什么是判定表?

(1)判定表(也称决策表)是用来表示条件和行动的二维表,是分析和表达多逻辑下执行不同操作的情况的工具;

(2)可以清晰的表达条件、决策规则和应该采取行动之间的逻辑关系;

(3)判定表很适合描述不同条件集合下采取行动的若干组合的情况;

3.判定表的组成

(1)将任何一个条件组合的特定取值及相应要执行的动作称为一条规则;

(2)在判定表中贯穿条件项和动作桩的一列就是一条规则

  

  条件桩——列出问题的所有条件;

  条件项——针对条件桩给出的条件列出可能的取值;

  动作桩——列出问题规定的可能采取的操作;

  动作项——指出条件项各组取值下应该采取的动作;

4.判定表的类型:

(1)有限条目判定表--特点:所有条件都是二值条件(真/假);

(2)扩展条目判定表--特点: 条件可以有多个值;

5.判定表的简化

(1)实际使用决策表时,常常先将它简化,简化是以合并相似规则为目标的。

(2)判定表的简化主要包含:规则合并与规则包含

  规则合并:若两条或多条规则的动作项相同,条件项只有一项不同,则可将该项合并,合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。

  规则包含:无关条件项“-”在逻辑上又可包含其他的条件项取值, 具有相同动作的规则还可进一步合并。

  

   A.如图a表示了两个柜子的动作项一致,条件项中的第三条件的取值不同,这表示在第一、第二条件分别取真值和假值时,第三条件不论取何值,都执行同一动作。

    就是说要执行的动作与第三条件的取值无关。这样,我们将这两条规则合并,合并后的第三条件取值用“—”表示,以示与取值无关。

  B.如图b所示,无关条件项“—”在逻辑上又可包含其他的条件项取值,具有相同动作的规则还可进一步合并。

6.判定表的建立步骤

(1)列出所有的条件桩和动作桩

(2)确定规则的个数

(3)填入条件项

(4)填入动作项

(5)简化判定表

(6)例:假设一个中国的航空公司规定:

  中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

  中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

  中国国内的航班的商务仓有食物供应,但是不可以播放电影。

  中国国内的航班的经济仓除非飞行时间大于2小时就有食物供应,但是不可以播放电影。

  请用判定表法设计测试用例:

 

7.判定表法应用条件

(1)判定表技术适用于具有以下特征的应用程序:

   If-then-else逻辑很突出。

  条件和规则的顺序不影响执行哪些操作。

  输入变量之间存在逻辑关系。

  输入与输出之间存在因果关系。

(2)如果使用有限条目判定表规则比较多时,可以转化为扩展条目判定表。

(3)判定表的设计可能需要多次迭代才能得到满意的判定表

8.判定表的优缺点:

  优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。

  缺点:不能表达重复执行的动作,例如循环结构。

9.因果图和判定表的选择

(1)条件和动作关系不明确---先使用因果图;

(2)条件和动作关系明确或需求是以判定表形式给出---判定表;

 

标签:--,边界值,等价,表法,测试用例,判定,条件,输入
From: https://www.cnblogs.com/zhuo-90/p/16652564.html

相关文章

  • Apple macOS 系统自带解压软件 Archive Utility.app All In One
    ApplemacOS系统自带解压软件ArchiveUtility.appAllInOneArchiveUtility.app/System/Library/CoreServices/Applications/ArchiveUtility.app无需安装第三......
  • c#中的Eval的数据绑定
    https://blog.csdn.net/u010032648/article/details/364382271.绑定后台在数据控件上绑定的单个数据:用的是<%#Eval("")%>这种格式2.需要在数据上加一些其他的东西,比......
  • 教程,如何给公众号文章或菜单添加附件?
    给公众号文章或菜单添加附件下载,支持doc、docx、xls、xlsx、ppt、pptx、pdf、txt等文件格式,支持在电脑端微信操作。文章中使用1、将需要上传的文件发送到微信聊天列表。......
  • 第一节:计算机核心基础知识
    一引子:接下来一段时间,我们的目标的是:学会使用Python这门编程语言来编写ATM+购物车程序,那么问题来了:1.1什么是语言?什么是编程语言?为何要有编程语言?语言其实就是人与......
  • 运算符
    1算术运算符:+-*/%(取余,又叫模)++--2赋值运算符=3关系运算符:><>=<===!=instanceof4逻辑运算符&&(与)||(或)!(非)5位运算符:&|^~>><<>>>6条件运算......
  • CVE-2022-22978 Spring-Security 漏洞复现
    1说明在SpringSecurity中使用RegexRequestMatcher且规则中包含带点号的正则表达式时,攻击者可以通过构造恶意数据包绕过身份认证2环境搭建环境搭建地址可以参考如下的......
  • 标识符
    关键字Java的所有组成部分都需要名字。类名、变量名以及方法名都被成为标识符。标识符标识符注意点所有的标识符都应该以字母(A-Z或者a-z)、美元符($)或者下划线(_)开......
  • Elasticsearch 面试题
    Elasticsearch面试题为什么要使用Elasticsearch?系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎......
  • springboot项目打jar包运行出现乱码
    springboot项目打jar包运行出现乱码1、控制台乱码在运行程序之前,执行chcp65001,即可将控制台切换到utg8编码格式,之后在继续运行jar包即可。chcp650012、数据库乱码......
  • Spring 中使用自定义的 ThreadLocal 存储导致的坑
    Spring中有时候我们需要存储一些和Request相关联的变量,例如用户的登陆有关信息等,它的生命周期和Request相同。一个容易想到的实现办法是使用ThreadLocal:pub......