2.编写测试用例的方法
==7种==
测试常用的方法:code review +代码静态分析、CI/CD
CI--持续集成--开发成员经常集成它们的工作,尽快发现集成错误
CD--持续部署--将集成后的代码部署到更贴近真实运行的环境
2.1 测试用例的描述:
用例编号 用例标题 功能模块名称 前置条件 输入数据 操作步骤 预期结果
优先级 执行结果 编写人 执行人 其他补充项
2.2 测试用例设计方法
(1)基于需求:依据需求来写测试点
难点:读出需求之外的测试点(需求非常的了解)
需求学习方法:、
- 多学习、分析需求
- 测试经验
- 项目组人员多沟通
(2)等价类--分类
思想:解决无穷输入
目的:减少测试用例条目
概念:无穷输入进行N个归类,从第一个类中提取一个数据进行测试,只要这个数据测试通过,我们就任务它所在的这一类的数据全部测试通过
有效等价类:根据需求说明书,和需求一致,有意义的输入数据构成的集合
无效等价类:和需求不一致,不满足需求的集合
(3)边界值:--黑盒测试方法
测试用例来自等价类的边界,是等价类的一种补充方法,与它基本成对出现
场景:输入和输出
强调:输入和输出的“边界值”
取值:开区间和闭区间
开区间--向外取值,闭区间--向内取值
【1,50】---0,1,50,51
(1,50】--1,2,50,51
(4)因果图--条件和结果的关系--最后转为判定表
场景:输入(原因)和输出(结果)之间的关系
概念:输入(原因)和输出(结果)之间的关系,输出依赖输入(多个) 因果图需要掌握的基本知识 基础概念:
恒等、与、或、非
恒等
如果原因为真,那么结果必定为真。
与
只有两个原因都为真,那么结果为真
或
2个原因有一个为真时,结果为真
非
原因为假,结果才为真
因果图设计测试用例的步骤:
- 列出所有输入
- 列出所有输出
- 理出输入和输出之间的关系
- 画因果图
- 画判定表,列数是输出的输入次方
- 从表里提出测试用例
因果法设计测试用例可以帮助测试人员理清输入和输出的关系,但是对于比较复杂的输入和输出,会耗费大量时间
(5)正交排列法:--减少用例数目,对因果图的改进
原理:正交表,正交实验(抽样)
目的:减少测试用例的条数
两条性质:
-
任何一列中出现的数字个数一样\
-
任何两列中有序对出现的次数一样
L=N(TC)--L:正交表
N:行数实验次数
T:水平数(变量的可取值个数)
C:因素数(变量的个数),列
N=C*(T-1)+1
步骤:
-变量提取出来
-提出水平
- 找出正交表(多个)
-取值---映射到表中
-表中每一行就是一条测试用例
-特殊的测试数据表中没有的添加进来
(6)场景法:业务流程(一个业务流程不一定是一个场景)
业务流程:把孤立的功能点串起来
注册--登录--写邮件--发邮件
业务流程是场景法的典型用法
(7)错误推测法(猜测)
非凭空想象,是有来源的,三大来源:
-
对某项目测试时间长
-
用户反馈
-
从故障库中整理bug,梳理产品以往哪些地方容易出现问题
例如:输入框要求字符类型--字符型
输入非字符型:是等价类中的无效等价类,同时它也是错误推测法
## 2.3 测试用例的评审:
- 分为项目组评审
- 用户评审:可以是最终用户也可以是程序员
- 同行评审
- 白盒:要查看代码
## 2.4黑盒测试设计测试用例方法包括:
等价类划分、边界值分析、因果图、场景法、正交实验设计法、判定表、驱动分析法、错误推测法、功能图分析法,**依据**是用户需求规格说明书、详细涉及说明书
## 2.5白盒测试设计测试用例方法包括:
语句覆盖、判断覆盖、条件覆盖、路径覆盖、条件组合覆盖,依据是代码结构和逻辑
六种覆盖标准发现错误的能力由弱到强的变化:
-语句覆盖,每条语句至少执行一次。 -判断覆盖,每个判断的每个分支至少执行一次。 -条件覆盖,每个判断的每个条件应取到的各种可能的值。 -判断/条件覆盖,同时满足判断覆盖条件覆盖。 -条件组合覆盖,每个判定中各条件的每一种组合至少出现一次。 -路径覆盖,使程序中每一条可能的路径至少执行一次。
1.语句覆盖:
设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。只需设计一个测试用例:a=2,b=1,c=6;即达到了语句覆盖。
【优点】 :可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
【缺点】 :由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。
2.判定覆盖: 设计若干测试用例,运行被测程序,使得程序中每个分支的取真值和取假值至少一次,即判断真假值均曾被满足。a=2,b=1 ,c=6(M,Q分支全为真)和a=-2,b=-1 ,c=-3(M,Q分支全为假)这两组测试用例可覆盖所有判定的真假分支。
【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。
3.条件覆盖:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。
判断M表达式:设条件 a>0 取真 记为 T1 ;假F1
条件 b>0 取真 记为 T2 ;假F2
判断Q表达式:设条件 a>1 取真 记为 T3 ;假F3
条件 c>1 取真 记为 T4 ;假F4
我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4
【优点】:增加了对条件判定情况的测试,增加了测试路径。
【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
4.判定-条件覆盖:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。
测试用例要满足如下条件:1.所有条件可能至少执行一次取值;2.所有判断的可能结果至少执行一次。
【优点】 :能同时满足判定、条件两种覆盖标准。
【缺点】 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。
5. 条件组合覆盖:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次。
【优点】 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。
【缺点】 :线性地增加了测试用例的数量。
6.路径覆盖:设计所有的测试用例,来覆盖程序中的所有可能的执行路径 。
【优点】 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
【缺点】 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。
从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计 。