一、等价类划分法(常用)
1、应用场合(能测什么情况)
在程序中,有输入数据的地方,可以使用等价类划分法测试,将大量数据划分成若干范围,挑选少量代表数据进行测试。(避免穷举,尽量抽样测试)
2、等价类划分法的测试思想
将大量数据划分成若干范围(等价类),再从每个范围中挑选少量代表数据进行测试。这样就可以实现从无限的数据中挑选有限数据进行测试,避免穷举,提高测试效率。
3、两个概念:有效等价类 和无效等价类
有效等价类:对程序来说,正确的、合理的输入数据集合。--验证功能是否正确实现--正向测试
无效等价类:对程序来说,错误的,不合理的输入数据集合。 --验证健壮性(异常处理能力如何)--反向测试
4、测试步骤(如何测?)
案例:两位整数加法计算器
需求:第一个数和第二个数的输入数据都要求是:-99--99之间的整数(大于等于-99并且小于等于99的整数),不能为空。
步骤1:分析需求,初步划分等价类。
依据:需求。
信息:
(1)不能为空
(2)数据类型:整数
(3)范围:-99--99之间
分析结果:
有效等价类:-99--99之间的整数
无效等价类:为空、非整数、>99的整数、<-99的整数
步骤2:细化等价类
依据:不再是需求,而是数据存储的类型或格式。
(1)细化1:非整数
小数、字母、特殊字符、中文字符
(2)细化2:-99--99之间的整数(有效)
细化为:-99--(-1)之间的整数
0--99之间的整数
原因(了解):由于整数类型在存储时应用“补码”,但是正负整数的补码算法不同,所以正、负整数要分别测试。
提示:无效数据由于通常不需存储,所以一般没有必要分成正、负整数分别测试,但是如果测试者不放心,纠结,那么分别测也无妨。(当成补充测试了)
步骤3:将分析的等价类填入《等价类表》--记录测试点
步骤4:编写测试用例。
要求:每个等价类范围至少要挑选一个代表数据进行测试。(要求每个等价类范围都被覆盖,并且每个等价类范围可以挑选多个代表数据测试,不是只能挑1个)
测试方案(思路):每个控件单独测--这个方案比较适合初学者(简单),后续会有优化。
首先--先测第一个数(有效、无效),此时第二个数填入正确数据
接下来:再测第二个数,此时第一个数填入正确数据
总结:等价类划分法案例:
问题1:无效数据的组合情况没有测试
(1)多个控件无效数据组合的情况
例如:两个文本框都为空
(2)一个控件多种无效数据组合的情况
例如:120.44元 (超范围+小数+中文 多种无效数据组合)
通常会在最后,适当的对无效数据组合情况进行补充测试。(例如:不放心的,用户常错误操作的,开发之前出过错的,如果时间允许还可以随机挑选组合情况)
问题2:有效数据的测试用例存在冗余(重复)--优化
问题3:如果补充测试发现bug如何解决?
要审核后提bug,将用例补充到用例集。(用例集是可维护的,逐渐优化。)
二、边界值法
一、说明:在程序开发时,数据的边界是非常容易出错的,所以使用边界值法对容易出错的边界进行重点补充测试。边界值法通常被作为等价类划分法的有力补充。
二、边界值法的应用场合
程序中有数据输入的地方,可以使用边界值法,边界值法常常与等价类划分法一起使用,从而形成一套较为完善的测试方案。
提示:等价类划分法经常与边界值法一起使用,但是也有例外情况,
例如: 性别 有效:男、女
无效:男、女以外的其他字符
此时,只需要等价类划分,不需要边界值法补充
三、如何划分边界
1、边界值(最大值-max、最小值-min):
就是有效等价类和无效等价类的分界点。
2、次边界值(4个)
就是边界值相邻两边的点。
有效最小次边界--min+
无效最小次边界--min-
有效最大次边界--max-
无效最大次边界--max+
扩展:边界值的常见面试题
Q1:如果测试时间紧张,应优先测试哪些边界值点?
如果测试时间紧张应优先测试最小值(min)和最大值(max)
提示:如果题目中提到优先(或重点)测试“健壮性”,指的是两个无效次边界(min-,max+)
Q2:是不是所有数据的边界值,在需求文档中都是开始就确定好的?
不是所有数据的边界值在需求中开始就能确定好,有的边界可以开始就确定,也有的数据边界需要在设计、研发过程中逐渐确定。
Q3:用边界值法分析以下数据
(1)年龄:18-60岁
min:18
max:60
min+:19
max-:59
min-:17
max+:61
(2)地址:1-30个字符
min:1个
max:30个
min+:2个
max-:29个
min-:0个(为空)
max+:31个
-------------------------------------------------------------
三、因果图或判定表(决策表)法
一、应用场合
界面中有多个控件,不同控件之间存在组合或限制关系,不同的输入组合会对应不同的输出结果。为了理清输入和输出结果之间的对应关系,可以使用因果图或判定表法。
注意:因果图或判定表法适合测试组合数量较少的情况。
二、因果图
1、因果图法
因(原因):输入条件
果(结果):输出结果
因果图法:就是用画图的方式表示输入条件(因)和输出结果(果)之间的关系。
2、因果图中的图形符号
逻辑结果:真(1或true ),假(0,或false)
(1)基本图形符号(因--果之间的关系)
1)恒等(相等)--1个输入条件
如果a=1,那么 b=1
如果a=0,那么 b=0
2)与 (至少要两个输入条件)
含义:全1为1,有0为0
3)或(至少要两个输入条件)
含义:全0为0,有1为1
4)非(一个输入条件)--取反(相反)
如果a=1,那么b=0;
如果a=0,那么b=1。
(2)限制图像符号(要么因之间,要么果之间)
1)互斥(E-exclude)
含义:如果选只能选择1个,可以不选。
:单选按钮
2)唯一(O-only)
含义:只能选1个(不能不选,不能多选)--有且只有一个
唯一和互斥的区别:互斥可以不选,而唯一必须要选1个。
3)包含(I-include)--多选
含义:至少选择1个(可以多选,不能不选)
4)要求(R-require)
含义:如果a=1,那么要求b必须=1;
如果a=0,那么b的值无所谓(1或0都可以)
5)屏蔽(M-masked)
含义:如果a=1,那么b必须=0
如果a=0,那么b的值可以是1也可以是0.
二、测试步骤
案例:一卡通充值模拟系统
步骤:1、分析需求,列出输入条件(因)
投币:50元、100元
充值金额:50元、100元
2、列出输出结果(果)
1)充值成功
2)退卡
3)找零
4)给出错误提示
3、分析输入条件中存在哪些组合和限制情况。
组合:按投币50
投币100
充值50
充值100
投50+充50
投50+充100
投100+充50
投100+充100
限制:投50+投100
充50+充100
4、 分析每组组合对应的输出结果,画因果图或填判定表记录。
真:1或true 假:0或false
例1:投50元+充50元
分析后的输出结果:
充值成功+退卡
例2:投币50元
分析后的输出结果:
错误提示+退卡+找零
总结:
判定表的缺点:判定表很容易表示控件之间的组合情况,但是并不容易实现对限制关系(例如:互斥、唯一等)的表示。
解决方法:在判定表外添加备注,通过文字描述来说明输入条件之间的限制关系。
5、编写测试用例
每1列代表一种组合情况(测试点)。
总结:因果图判定表
1、因果图/判定表法通常用来测试控件之间的组合情况,常会涉及到的控件有单选按钮,复选框,下拉列表(选项较少),按钮等。
2、因果图/判定表法常常用来测试组合数量较少的情况,如果组合数量较多,要考虑到测试效率问题,就适合选择正交排列法。
3、判定(决策)表的特点:
(1)判定表的输入条件顺序无关紧要;
(2)输出结果的顺序也是无关紧要的;
(3)先测哪个组合后测哪个组合无关紧要;
(4)每个组合都是相互独立的,所以先测哪个组合后测哪个组合无关紧要;
4、判定表(决策表)的组成(了解)
四、正交排列法
一、正交表
L:Line 行
n:行数--正交表的行数(不需要测试人员计算,算好的拿来用即可)
m:代表每列的最大取值。
k:代表正交表的列数。
例:L4(23)
L8(4×24)
二、正交排列法
1、应用场合
界面中有多个控件,每个控件有不同取值,不同控件取值之间存在组合关系,但是组合数量较大(成百上千),此时不应测试所有组合,而应使用正交排列法,挑选最优、最少的组合进行测试。(正交排列法借助正交表筛选最优、最少的组合测试,是一种非常优化的测试方法)
问题:判定表法和正交排列法的异同?
(1)判定表法和正交排列法都可以测试控件之间的组合情况。
(2)判定表法比较适合测试组合数量较少的情况。(测试覆盖全面,但是效率较低)
(3)正交排列法比较适合测试组合数量较多的情况。(测试效率高,挑选最优、最少的组合测试)
(4)(了解)正交排列法测试时只需考虑组合情况,而判定表法要考虑组合和限制情况。
2、正交排列法的测试步骤
步骤:1、分析需求,列出参与组合的控件和控件的取值。(准备工作)
列在Excel中
步骤 :2、 挑选合适的正交表
挑选正交表的过程,其实就是确定m值和k值的过程。
m值:测试时,m值由每个控件的取值个数决定。
m=3
k值:测试时,k值由参与组合的控件个数决定。
k=4
所以:要挑选的正交表是:3的4次幂
步骤3: 应用正交表(映射)
1) 控件名称--正交表的因子(正交表列标题)替换
2) 控件取值--正交表对应列的状态(每列的数值:1,2,3)替换
Excel的查找和替换功能:Ctrl+h
步骤4:编写测试用例
每行是一种组合情况,编写用例测试。
3、正交表小结
(1)正交表挑选最优、最少的组合进行测试。但是没有测试所有组合,存在遗漏bug的风险,所以如果时间允许,应该适当进行补充测试。(提示:不要再减少组合,已经是最少了,再减少会导致覆盖不全,测试不均匀)
(2)正交表的局限
1)正交表的个数有限(9个),有时没有正合适的正交表。
2)正交表要求控件的取值个数相同,但是实际应用中,很多时候控件的取值个数不同。
(3)正交表的特征(平均/均匀)--了解
1)每列的数值出现次数均等
2)任意两列,同一行会形成有序数对,有序数对出现的次数均等。
三、正交表的强化--如果没有合适的正交表,如何解决?
1、k值不合适
解决:挑选k值最接近的,并且大一点的,用不到的列可以删除。
2、m值不合适
m值:代表每个控件的取值个数,但是每个控件的取值不同,m值该如何确定??
(1)方式1:少数服从多数
m:谁多听谁的
例如:m=3的控件有2个,个数最多,最终m=3。
(2)方式2:最大值
m:谁的m值最大听谁的
例如:m=4 ,最大,最终m=4
建议:使用最大值方案
1)最大值方案不需要修改表结构。操作更简单。
2)相对来说最大值方案测试质量更好。
方法总结:
1)如果有用不到的列,可以删除。
2)首先将能替换的尽量替换。
3)有多出的测试机会(空),应“尽量均匀”的分配给该列的取值。
4)最后检查是否有完全相同的行,如果有要做出处理(删、改)
5)提示:最优先选择正合适的正交表,如果没有正好合适的,再想其他方法解决。
补充:正交排列法的常见应用有:属性设置(例如:字符属性设置、打印属性设置等)还有兼容性测试等。
- 测试大纲(提纲)法
一、应用场合
程序中有多个窗口,每个窗口中有不同操作,不同窗口操作之间存在关系,为了理清窗口之间的关系,可以使用测试大纲法。测试大纲法经常用来测试:窗口之间的跳转关系,软件的安装或删除程序,或者用来理清需求之间的层级关系等。
二、测试步骤
步骤1:分析需求,列出大纲。
列大纲:将窗口和窗口中的操作一一列出。注意:按照窗口出现的顺序列(按窗口层级关系列)
例:
主窗口
选择专卖店类型
地图
帮助
上一页
主菜单
注意:列大纲的方式多种多样,写文字,画图等都可以。
步骤2:根据大纲,分析窗口之间的关系,编写测试用例
说明:1、测试顺序,一般由易到难
例如:帮助→地图→专卖店
2、每条用例要测到“叶子节点”(最后一级)结束
3、如果在当前的测试路线中(跳转路线),没有未测测试点(所有的测试点都在之前的用例中覆盖过),那么该测试用例可以省略,时间允许可以补充测试。
4、在测试列表框或下拉列表控件时,一般会至少测试3项:第1项(最小值),中间某项(有效等价类的代表数据),最后1项(最大值)
应用了等价类划分+边界值的测试方法
提示:通常测试3项,但是特殊情况可能会测试超过3项。
例1:月份
最大值(12月)、最小值(1月)、
大月(12月或1月)、小月(4月)、闰月(2月)
如果有为空的情况还需要分析
三、上机练习
被测程序:snagit软件的“安装程序”
测试准备:如果计算机中已经安装了snagit软件,需要卸载掉,再去测试安装程序。
1、软件安装程序测试的特点:
(1)软件的安装程序,虽然窗口较多,但是窗口之间的关系较为简单,主要就是“上一页”和“下一页”。
(2)软件的安装程序用例通常写在word文档中即可,可以简洁的将窗口功能点的测试过程(用例)写在文档中。
第9讲 场景法(重点)
一、应用场合
1、场景法是最常用的测试方法之一,通常用来测试软件的业务流程或业务逻辑。
2、场景法是基于“软件业务”的测试方法。
(1)测试者对于所测软件的业务要非常熟悉。(越熟悉,场景覆盖越全,遗漏bug越少)
(2)测试者设计用例时也是要根据软件的业务流程和逻辑去设计。
3、场景法测试中,测试者将自己想象成最终用户,模拟用户使用软件的各种情景,主要模拟两类情景:
(1)软件业务正确实现的场景。--验证功能是否正确实现--正向测试
(2)软件业务出现错误操作的场景。--验证软件的健壮性(异常处理能力)--反向测试
补充:场景法的应用思路
在拿到软件的测试任务时,通常会先使用场景法将软件的整体业务流程,逻辑进行测试,当核心业务,流程没有问题后,再使用等价类,边界值,判定表等方法对细节展开全面测试。(先整体后细节)
例:冒烟测试
二、场景法测试的两个层面
1、业务层面(更为重要):
要求测试者对所测软件的业务熟悉,甚至能成为该行业,业务方面的“专家”。
2、技术层面:
(1)基本流
也叫有效流或正确流,模拟正确的业务实现过程。
(2)备选流
也叫无效流或错误流,模拟错误的业务实现情景。
三、测试步骤
说明:业务越复杂,越陌生,场景法的测试难度越大。
案例:ATM取款功能
步骤1:熟悉需求,整理业务,列出基本流和备选流。
基本流( 取款成功的过程):
插有效银行卡,验证通过→输入正确密码→选择取款功能→选择有效的取款金额→出钞,更新余额,提示,打印凭条
备选流(取款失败的各种情景):
(1) 插入无效卡,验证失败
(2) 密码输入错误(3次以下)
(3) 密码输入错误(3次)--锁卡,吞卡
(4)账户余额不足
(5)超出当次取款上限(5000)
(6)超出当日取款上限(20000)
(7)ATM机余额不足
说明:以上无效场景并不全面,仅是列出了比较常见的无效场景。(例如:取款金额要是100的倍数,卡资金冻结等都没有列出)
步骤2:生成场景,填写《场景表》
步骤3:根据场景,编写测试用例
说明:场景和用例不一定是1:1
有可能一个场景需要编写多条用例测试
也有可能1条用例可以测试多个场景
四、上机练习
练习1:五子棋游戏
步骤:1、分析需求(规则,被测系统),整理业务,列出基本流、备选流
1、玩家先(玩家黑棋)--考虑禁手
玩家胜
玩家负
和棋
禁手位(避开; 没有避开-判负)
2、电脑先(电脑黑棋)
电脑胜
电脑负
和棋
禁手位--电脑作为黑棋,必须避开,否则就是bug(禁手算法漏洞)
步骤2:生成场景,填写场景表
步骤3:游戏测试中,有些场景无法编写常规用例,所以经常以场景描述做为用例测试执行,测试执行后,保留证迹和实际结果描述。
截取证迹注意事项:
(1)如果有消息提示弹出,应调整位置,避免遮挡有效信息。
(2)不要只截取局部界面,应尽量截取整个界面。能够提供更多有效信息
六、 场景法
一、场景法上机练习2
1、被测系统:美萍酒店管理系统
功能模块:系统设置-房间设置 -房间类型删除功能模块
2 、 测试准备
(1)安装被测系统
(2)测试数据准备
3、测试设计
步骤1:分析需求,整理业务,列出基本流、备选流
需求:删除房间类型与房态和服务生两个因素有关
(1)需求分析:
单独分析房态:
能删:房间类型中所有房间都没有人住
不能删:房间类型中如果有房间有人住就不能删(哪怕有1间房有人住也不能删)
单独分析服务生:
能删:没有分配服务生
不能删:分配有服务生的类型
(2)整理业务:综合房态和服务生两个因素
能删:
没人住+没分配服务生
不能删:
没人住+有服务生
有人住+没服务生
有人住+有服务生
补充:没人住--可供、停用、清理
有人住--占用、长包房、预订
步骤2:生成场景,填场景表
步骤3:根据场景,编写测试用例