读书笔记_软件测试的艺术_第4章_测试用例的设计

第4章 测试用例的设计

我们推荐的步骤是先使用黑盒测试方法来设计测试用例,然后视情况需要使用白盒测试方法来设计补充的测试用例。

4.1 白盒测试

白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。
逻辑覆盖测试。该测试要求程序中的所有判断都应至少覆盖一次,同时每一条语句或者入口点都被执行一次。
	语句覆盖:
		将程序中的每条语句至少执行一次;
		这条准则有很大的不足,漏洞多。
		
	判定覆盖或分支覆盖:
		每条分支路径都必须至少遍历一次;
    	当程序中包含有多重选择的判断时,判定/分支覆盖准则将所有判断的每个可能结果都至少执行一次,以及将程序或子程序的每个入口点都至少执行一次;
    	是一种比语句覆盖更强的准则,但是有不能发现判断条件处错误的可能。
    
    条件覆盖:
    	将一个判断中的每个条件的所有可能的结果至少执行一次;
    	是一种比判定覆盖更强一些的准则,但是有不能涵盖全部判断结果的可能。
    
    判定/条件覆盖准则:
    	将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口点都至少调用一次;
    	解决了条件覆盖准则不能满足判定覆盖准则左右为难的局面,但是由于有些特定的条件会屏蔽掉其他的条件,如“与”和“或”表达式中某些条件的结果可能会屏蔽掉或阻碍其他条件的判断。
    
    多重条件覆盖准则:
    	将每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次;
    	能够部分解决判定/条件覆盖准则的缺点。

请添加图片描述

4.2 黑盒测试

黑盒测试的目标是找出程序不符合规格说明书的地方。
等价划分
等价类划分。通过定义条件和错误类来帮助减少测试的工作量。这种划分假设某分类的一个代表值能够等价于属于该分类的所有值或者条件。
用等价划分方法设计测试用例主要有两个步骤:
	(1)确定等价类;
		选取每一个输入条件(通常是规格说明中的一个句子或短语)并将其划分为两个或更多的组。
	(2)生成测试用例;其过程如下:
		1.为每个等价类设置一个不同的编号。
		2.编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖(包含进去)。
		3.编写新的用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例所覆盖。
     
     等价划分方法要比随机选取测试用例优越得多,但是忽略掉了某些特定类型的高效测试用例。

边界值分析
边界值分析。测试等价类中每一个分类取边界值时的情况,既要考虑输入等价类,也要考虑输出等价类。
边界值分析方法和等价划分之间的重要区别是,边界值分析考察正处于等价划分边界或在边界附近的状态。
因果图
因果图。通过生成布尔图来诠释测试用例的可能结果,使用该法旨在帮助选择那些有效地测试用例达到比较完整的测试用例设计效果。
边界值分析和等价划分的一个弱点是未对输入条件的组合进行分析。

生成测试用例时采用的过程如下:
	1.将规格说明分解为可执行的片段。这是必须的步骤,因为因果图不善于处理较大的规格说明。
	2.确定规格说明中的因果关系。所谓“因”,是指一个明确的输入条件或输入条件的等价类。所谓“果”,是指一个输出条件或系统转换(输入对程序或系统状态的延续影响)。举例来说,如果某个事务引起文件或数据库记录被修改,那么这种改变就是一个系统转换,而系统反馈的确认信息就是一个输出条件。
	3.分析规格说明的语义内容,并将其转换为连接因果关系的布尔图。这就是所谓的因果图。
	4.给图加上注解符号,说明由于语法或环境的限制而不能联系起来的“因”和“果”。
	5.通过仔细地跟踪图中的状态变化情况,将因果图转换成一个有限项的判定表。表中的每一列代表一个测试用例。
	6.将判定表中的列转换成测试用例。

因果图中的基本符号如图4-5所示。
	设想一下,每个结点的值为0或为1,0代表“不存在”状态,1代表“存在”状态。
	identity函数表示如果a等于1,则b也为1,否则b为0。
	NOT函数表示如果a等于1,则b为0;否则b为1。
	OR函数表示如果a或b或c等于1,则d为1;否则d为0。
	AND函数表示如果a和b都等于1,则c为1;否则c为0。
	后两个函数(OR和AND)允许存在任意数量的输入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8uwMM5O-1666341144456)(软件测试的艺术(原书第3版).assets/image-20221019143127795.png)]

因果图中的约束符号如图4-8所示。
原因符号( 异、或、唯一、要求)--------原因与原因之间的关系
	异(E约束,Exclusive):表示其必须总为真,而a和b最多只有一个为1(a与b不能同时为1)(不可能同时为1,但可以同时为0)。
	或(I约束,Inclusive):表示其为真时,a、b、c中至少有一个应为1(a、b、c不能同时为0)。
	唯一(O约束,One and Only):表示a、b中有且仅有一个必须为1。
    要求(R约束,Request):表示如果a为1,b也必须为1(例如,a为1而b为0的情况是不可能的)。

图4-9中结果符号(强制)--------结果与结果之间的关系
	强制(M约束,Masks):表示如果结果a为0,则b强制为0。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JbPomtYk-1666341144457)(软件测试的艺术(原书第3版).assets/image-20221019144139561.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xO6EOpCr-1666341144458)(软件测试的艺术(原书第3版).assets/image-20221019144639858.png)]

下一步骤是建立有限项的判定表。
	采用的过程如下:
	1.选择一个“果”作为当前状态(1)。
	2.对因果图进行回溯,查找导致该“果”为1(根据约束条件)的所有“因”的组合。
	3.在判定表中为每个“因”的组合生成一列。
	4.对于每种“因”的组合,判断所有其他“果”的状态,并放置在每一列中。
	
	在执行第2步时,需要做以下考虑:
		1.当回溯经过一个结果应为1的or结点时,不要同时将该or结点的一个以上的输入设置为1。这就是所谓的路径敏感性(path sensitizing),其目的是避免由于原因之间的屏蔽而漏掉某些错误。
		2.当回溯经过一个结果应为0的and结点时,显然应列举出导致结果为0的所有的输入组合情况。然而,如果碰到的情况是一个输入为0,其他的输入中有一个或更多为1,那么就无须罗列出其他输入可能为1的所有情况。
		3.当回溯经过一个结果应为0的and结点时,仅有一种所有输入皆为0的情况需要列举出来(如果这个and结点位于因果图的中部,其输入来自于其他中间结点,那么所有输入都为0的情况就会非常多)。
	这些复杂的思路在图4-15中总结出来。	

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AoPT3J3R-1666341144459)(软件测试的艺术(原书第3版).assets/image-20221019154524255.png)]

4.3 错误猜测

利用直觉和经验猜测出错的可能类型,然后编写测试用例来暴露这些错误。

4.4 测试策略

一组合理的策略如下:
	1.如果规格说明中包含输入条件组合的情况,应首先使用因果图分析方法。
	2.在任何情况下都应使用边界值分析方法。多数甚至全部条件都可以被整合到因果图分析中。
	3.应为输入和输出确定有效和无效等价类,在必要情况下对上面确认的测试用例进行补充。
	4.使用错误猜测技术增加更多的测试用例。
	5.针对上述测试用例集检查程序的逻辑结构。应使用判定覆盖、条件覆盖、判定/条件覆盖或多重条件覆盖准则(最后的一个最为完整)。如果覆盖准则未能被前四个步骤中确定的测试用例所满足,并且满足准则也并非不可能(由于程序的性质限制,某些条件的组合也许是不可能实现的),那么增加足够数量的测试用例,以使覆盖准则得到满足。

举例

①根据等价划分,新增了一些无效等价类的测试用例
	如输入客户姓名类型为数字,输入手机号为错误格式的手机号,输入手机号为非数字,输入客户id为非数字,输入年龄、累计通时、回收天数、拨打次数、接通次数的起始值大于结束值
	
②根据边界值分析,新增了一些输入边界值的测试用例
	如输入年龄为0,1,2147483647,2147483648,输入累计通时、回收天数、拨打次数、接通次数为0,1,9223372036854775807,9223372036854775808,输入拨打次数为非整数,导出记录为0,1,导出上限值,导出上限值+1,线索下发为0,1,下发上限值,下发上限值+1,批量下发中筛选名单为0,1,筛选上限值,筛选上限值+1
	
③根据边界值分析和错误猜测,新增了一些关于排序功能的测试用例
	如列表为空,列表仅包含一条数据,列表中要排序的值都相同,列表中要排序的值都不同,列表已经排过序,并指出哪条记录可能为第一条数据,哪条记录可能为最后一条数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值