测试用例设计
- 用于冒烟测试的用例为最高优先级
- 把基本路径以及各模块主功能的测试标注为高优先级别
- 把你所有错误和边界值或确认测试标注为中优先级别
随机测试存在的问题
不知道是否较全面的测试了所有功能
测试的覆盖率无法衡量
对新版本的重复测试很难实施
无法对测试质量进行有效评估
无法形成有效的知识积累
测试用例的概念
• 测试用例是指为实施测试而向被测试系统提供的输入数据,操作或者各种环境设置以及期望结果的一个特定集合。(简单来说,测试用例就是解决要测什么,怎么测和如何衡量的问题)
测试用例的属性
1.用例ID
2.用例名称
3.测试目的
4.测试级别 -----冒烟测试
5.参考信息
6.前提条件 ----预置条件
7.测试步骤
8.预期结果
测试用例的特征
最有可能抓住错误的
不是重复的、多余的
既不是太简单
也不是太复杂
用例设计原则
• 1.测试用例对需求覆盖的完整性 -----------需求覆盖100%,是对测试质量的保证
• 2.测试用例的有效性 ----新的版本(功能调整升级)要针对需求重新编写用例
• 3.测试用例的可理解性
• 4.测试用例的清晰性
• 5.测试用例的可维护性
测试用例优先级的划分能提高测试效率,降低风险
- 用于冒烟测试的用例为最高优先级 -------发现百分之八十的问题
- 把基本路径以及各模块主功能的测试标注为高优先级别
- 把你所有错误和边界值或确认测试标注为中优先级别
- 把可用性测试,兼容性测试等标注为低优先级别
- 将功能测试用例分为严重和不严重两类,对于不严重的功能测试用例降级
为低优先级用例
测试用例设计方法
等价类----黑盒测试用例设计方法
定义
把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例就可以用少量代表性的测试数据取得较好的结果。设计时一定要考虑两种等价类,不仅能接受合理的数据,也能经受意外
有效等价
对于程序的规格来说是合理的,有意义的输入数据构成的集合,利用有效等价可检验程序是否实现了规格说明中所规定的功能和性能
无效等价
对于程序的规格来说是不合理的,无意义的输入数据构成的集合。对于具体的问题,无效等价至少有一个,也可能有多个
划分等价类的标准
完备测试,避免冗余
集合的划分,划分为互不相交的子集
并不是整个集合;完备性
子集互不相交,保证一种形式的无冗余性
同一类标识一个测试用例,同一等价类中,往往处理相同,相同处理映射到“相同的执行路径”
划分等价类的方法
1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个等价有效类;两个等价无效类
如:输入值是学生成绩,范围是0~100
2)在输入条件规定输入值的集合,或规定了必须如何的条件下,可确立一个有效等价类和一个无效等价类(输入的为布尔量)
3)在规定输入数据的一组值(假定n个)并且程序对这四组四个值作为有效等价类和一个等效无价类(在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将等价类划分为更小的等价)
4)在规定了输入数据必须遵守规则的情况下,可确定一个有效,n个无效(从不同角度违背规则)
设计测试用例
在确立等价类后,可建立等价类表,列出所有划分的等价类输入条件:有效等价类,无效等价类,然后从划分出的等价类中按三个原则计算
为每一个等价类规定唯一的编号
设计一个测试用例,尽可能多的覆盖等价有效类重复这一步,直至覆盖完全
设计一个测试用例,覆盖一个等价无效类重复这一步,直至都被覆盖为止
案例
设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2049年
12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试
用例,来测试程序的"日期检查功能"。–用边界值设置无效类
边界值测试----黑盒测试
定义:是对输入或输出的边界值进行测试的一种黑盒测试方法
长期的测试工作经验说明“错误隐藏在角落,问题聚焦在边界上”
原则:
- 如果输入/输出条件规定了值得范围,则应去刚刚到达这个范围的边界值(有效边界值),以及刚刚超过这个范围的值作为输入数据(无效边界值)。
- 如果输入/输出条件规定了值的个数,则用最大个数,最小个数(有效边界值),比最小个数少1,比最大个数多1(无效边界值)的数作为测试数据。
- 如果程序的规格说明书给出了输入域或输出域是有序集合,则应选取集合的第一个元素和集合的最后一个元素作为测试用例。
- 如果程序中使用了一个内部数据结构,则应该选择这个内部数据结构的值作为测试用例
判定表驱动分析方法
定义:
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。
判定表的优点
能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。
在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。
由四个部分组成
条件桩–输入 列出了问题得所有条件。通常认为列出的条件的次序无关紧要
动作桩–输出 列出了问题规定可能采取的操作。这些操作的排列顺序没有约束
条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。
动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。----输入和输出之间的关系
二分法
规则
任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则
化简
就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。
例子
判定表的建立步骤:(根据软件规格说明)
1)确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有2n种规则。
2)列出所有的条件桩和动作桩。
3)填入条件项。(排列组合)
4)填入动作项。等到初始判定表
5)简化.合并相似规则(相同动作)
正交表
用正交表设计测试用例的步骤
(1) 有哪些因素(输入/条件,因子)
(2) 每个因素有哪几个水平(变量的取值,状态)
(3) 选择一个合适的正交表
(4) 把变量的值映射到表中
(5) 把每一行的各因素水平的组合做为一个测试用例
(6) 加上你认为可疑且没有在表中出现的组合
如何选择正交表
- 考虑因素(变量)的个数
- 考虑因素水平(变量的取值)的个数
- 考虑正交表的行数
- 取行数最少的一个
?常用正交表对照图.doc
如果没有合适的表,可以找状态一样,因子大一些的表来用。比如5因子2状态,可以选择7因子2状态的表来用。
功能图(状态迁移)
一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序,静态说明描述了输入条件与输出条件之间的对应关系功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相
应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输
入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法。(功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中 的内容.逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法.该方法要求测试人员对程序的逻辑结构
有清楚的了解.由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖.下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的.)
1.功能图
从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例. 若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.
2.测试用例生成方法为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。
3.测试用例生成规则
4.从功能图生成测试用例的过程
1)生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。
2)测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。
3)测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
5.测试用例的合成算法:采用条件构造树
案例------即冒烟测试 把主要流程走一遍
- 有一机票订购系统,该系统可以使顾客通过电话进行机票的订购等工作。具体方法如下:
(1) 当顾客向航空公司打电话预订机票,只要顾客提供了自己的出发地和目的地,以及希望乘坐的航班日期和时间,航空公司就能为顾客做好订票记录,并在系统中保存订票信息。此时,顾客的订票信息就处于“完成”状态。
(2) 根据不同的付费规则,顾客可以在飞机起飞前的1小时之前支付机票费用,一旦支付了机票费用,顾客的订票信息状态就会改变为“已付款”。
(3) 当顾客拿到了一张打印机票后,订票信息的状态变为“己出票”。
(4) 当顾客把机票交给验票员并登上飞机,订票信息的状态变为“己使用”。
(5) 在登上飞机之前的任何时间顾客都可以取消自己的订票信息。如果已经支付了机票的费用,则应该能够得到退款。
场景法(流程图)
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流
基本流,是经过用例的最简单的路径
备选流,可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中;也可能起源于另一个备选流,或者终止用例而不再重新加入到某个流
错误推测方法
方法简介
- 定义:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
- 错误推测方法的基本思想:
- 例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。
- 例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:
I. 程序是否把空格作为回答
II. 在回答记录中混有标准答案记录
III. 除了标题记录外,还有一些的记录最后一个字符即不是2也不是3
IV. 有两个学生的学号相同
V. 试题数是负数。 - 再如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:
I. 输入的线性表为空表;
II. 表中只含有一个元素;
III. 输入表中所有元素已排好序;
IV. 输入表已按逆序排好;
V. 输入表中部分或全部元素相同。
因果图方法
方法简介
定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
2.因果图法产生的背景:等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。
如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。
3.因果图介绍
- 4种符号分别表示了规格说明中向4种因果关系
因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。 - Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。
- 因果图概念
- 关系
①恒等:若ci是1,则ei也是1;否则ei为0。
②非:若ci是1,则ei是0;否则ei是1。
③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。(有一个条件成立,结果就成立)
④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。(所有条件都成立,结果才成立) - 约束
输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。
A.输入条件的约束有以下4类:
① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。(a和b的条件不能同时成立)
② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
③ O约束(唯一);a和b必须有一个,且仅有1个为1。(a和b有且仅有一个成立)
④R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
B.输出条件约束类型
输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
- 采用因果图法设计测试用例的步骤:
1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。
3)由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
4)把因果图转换为判定表。
5)把判定表的每一列拿出来作为依据,设计测试用例。
1、点赞。防止以后找不到,想看的时候,在自己主页就能找到了,很方便;
2、关注我。让我们成为长期关系,下一个视频会分享更多的硬核干货;
3、本文章学习资源,均可以免费分享。
。这样的好内容,里面还有近百篇。 谢谢你的支持!
目前测试平台项目研发已经完成并且在Github开源,有兴趣的朋友可以去Github下载
https://github.com/ooqitech/ATP
不要只做收藏从未停止,行动从未开始的人,很多事情,做着做着就无师自通了。如果在做的过程中还能稍微加点思考,稍微看一些别人的经验和做法,成长会更快,效果也会更好!加油吧,测试人!路就在脚下,成功就在明天!
一个用心码了这么多文字的人,往往渴望得到大家的认可。如果你觉得这篇文章对你有帮助,双击屏幕,给我点个赞呀!