测试领域中,关于功能测试用例设计的方法,大多为以下几种:1、域测试法(等价类划分法、边界值、输入域测试、输出域测试);2、判定表;3、因果图;4、状态转换/迁移;5、流程分析法(场景法);6、正交分析/实验法;7、异常测试;8、错误推测法;其中等价类和边界值最常用。
一、等价类划分法
它是目前测试设计过程中,使用最普遍的一种方法。使用该方法主要对测试子项进行测试规格分析后得到用例,而不对系统内部处理进行深入了解。
1、基本概念:
(1)等价类:集合中的每个输入条件都是等价,该集合被称为等价类;
(2)有效等价类:针对需求规格或者是测试点,是合理的,有意义的输入;
(3)无效等价类:不合理的,无意义的输入;
2、特点:
(1)只是考虑输入的各种情况呗用例覆盖到,但是没有考虑输入不同条件的组合情况;
(2)适用于各种测试类型—功能、性能、配置、GUI等,这种方法可以应用在单元集成阶段设计用例,在其他的一些测试方法里面也需要用到等价类方法;
3、设计步骤:
(1)确定输入及其范围,类型,长度等;(挖掘隐性的输入及其相关条件)
(2)确定有效等价类和无效等价类:
注:等价类划分的原则:
(2.1)、确定了取值的范围和个数,可以确定一个有效和两个无效等价类;
(2.2)、确定了集合和必须满足的条件,可以确定一个有效和一个无效等价类;
(2.3)、确定了是布尔值,可以确定一个有效和若干个无效等价类;
(2.4)、规定了输入数据一组假定值N个,并且程序对每一个输入值分别处理,可以确立N个有效等价类和一个无效等价类;
(2.5)、确定了必须寸守的原则,可以确立一个有效符合规则和若干个无效等价类从不同角度违反规则;
(2.6)、根据程序处理的方式和情况不同,需要对输入的等价类进行细分;
(3)给有效和无效等价类进行编号;
(4)根据等价类设计用例的原则设计测试用例来覆盖有效等价类和无效等价类:
(4.1)、设计一条用力尽可能为的覆盖有效鞥甲类;
(4.2)、为每个无效等价类设计一条测试用例;
三、边界值测试法
边界值是假定大多数的错误是发生在各种输入条件的边界上,如果边界附件的取值不会导致程序出错,那么其他的取值导致程序错误的可能性也很小。
1、基本概念:
(1)边界值分析使用条件:
1、输入条件明确了一个值的取值范围,或是规定了值的个数;
2、输入条件明确了一个有序集合;
(2)边值点定义:
1、上点:边界上的点,闭区间,上点就在域范围内,开区间,上点就在域范围外;
2、离点:离上点最近的点,闭区间,离点就在域范围外,开区间,离点就在域范围内;
3、内点:域范围内的任意一个点;
2、特点:
(1)边界值是等价类的补充;
(2)通过优先选择不同的等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,需要和等价类划分法结合使用。
3、边界值分析的原则:
(1)如果输入/输出条件规定了取值范围,或是规定了值的个数,应该以该范围的边界内及边界附近的值作为测试用例;
(2)如果输入/输出条件规定了值的个数的取值范围,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据;
(3)如果程序规格说明中踢到的输入或输出是一个有序的集合,应该注意选取有序集合的第一个和最后一个元素作为测试用例;
(4)如果程序中使用了一个内部数据结构,则应该选择这个内部数据结构的边界上的值作为测试用例;
4、边值分析法设计用例的步骤:
(1)分析输入参数的类型:从测试规格中分析得到输入参数类型;
(2)等价类划分(可选):对于输入等价类划分方法进行等价类的划分;
(3)确定边界:运用域测试分析方法确定域范围的边界(上点、离点、内点)
(4)相关性分析(可选):如果存在多个输入域,则需要运用因果图、判定表方法对这些输入域边界值的组合情况进行进一步分析;
(5)形成测试项:选择这些上点、离点与内点或者这些点的组合形成测试项;
(6)设计测试用例覆盖边界点:
1、设计一条用例尽可能多的覆盖边界上的上点/离点、内点;
2、为边界上的无效的上点/离点设计一条用例;
四、输入域测试
在等价类的基础上考虑:
1、极端测试 Extremal Testing;需要选择测试数据覆盖输入域的极端情况。
2、特殊测试 Special Value Testing;根据要计算的功能特性的基础来选择测试数据。这个过程尤其适合于数学计算。
3、中间范围测试 Midrange Testing;选择域内部的数据进行测试。
五、输出域测试
设计思路:
1、类似于等价类,只是从输出的角度分析等价类和边界点;
2、构造相关输入,确保覆盖所有输出的等价类,边界点;
六、判定表
判定表是分析和表达多种输入条件下系统执行不同动作的工具,它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确。
(1)基本概念
1、 条件桩:condition stub
2、 动作桩:action stub
3、 条件项:condition entry
4、 动作项:action entry
规则:可以产生多个用例,先理解成用例;
16个 8个0 8个1
5、 判定表合并规则:
如果表中有两条或多条规则具有相同的动作,并且其条件项之间存在极为相似的关系,我们便可以讲其合并。
过程:找到判定表中输出完全相同的两列,观察他们的输入是否相似,例如只有一个输入不同时,说明不管该输入如何取值,输出都是一样的,也就是说该输入对输出是无影响的,因此可以将这两列合并为一列。
(2)设计步骤:
1、确定输入、输出(确定条件桩、条件项、动作桩和动作项)
2、根据条件桩列出规则(条件的全排列组合)
3、逐列分析条件项组合,填入其动作项
4、根据判定表的合并规则简化判定表:
(1)两个规则可以合并;
(2)多个规则也可以合并;
(3)确保动作桩和动作项相同,然后再去分析条件桩和条件项;
(3)特点:
1、考虑到各种输入的全组合情况;
2、适合输入和输出的逻辑关系比较简单,能够比较容易的确定判定表;
3、合并是存在风险,如果时间允许可以减少合并,简化要结合实际需求;
(4)该工程方法普遍适用于各种类型特性的测试设计
1、优点:
(1)充分考虑了输入条件间的组合,对组合情况覆盖充分;
(2)最终每个用例覆盖多种输入情况,有利于提高测试效率;
(3)设计过程中,对输入条件间的约束关系做了考虑,避免了无效用例,用例的有效性高;
(4)能同时得出每个测试项目的预期输出;
2、缺点:
(1)当被测试特性输入较多时,判定表的规模将会非常庞大;
(2)输入之间的约束条件不能有效区分输入是否确实需要进行组合测试,会造成不需要组合测试的输入做了组合,从而产生用例冗余;
七、因果图法
因果图(Cause-Effect Graphing)提供了一个把规格转化为判定表的系统化方法,从该图中可以产生测试数据。其中,原因是表示输入条件,结果是对输入执行的一系列计算后得到的输出。
因果图方法最终生成的就是判定表。它适合于检查软件输入条件的各种组合情况。
1、 基本概念:
(1) 逻辑符号和约束:
1、输入与输出之间的逻辑关系:
1)恒等关系:当输入项发生,会产生对应输出,当输入项不发生时,不会产生对应输出。
2)非关系:与恒等关系相反;
3)或关系:多个输入条件中,只要有一个发生,则会产生对应输出。
4)与关系:多个输入条件中,只有所有输入项发生时,才会产生对应输出。
2、输入和输入之间的约束:
1)异 Exclusive:所有输入中至多一个输入条件发生;
2)或 Include:所有输入中至少一个输入条件发生;
3)唯一 Only:所有输入中有且只有一个输入条件发生;
4)要求 Requipment:所有输入中只要有一个输入条件发生,则其他输入也会发生;
3、输出之间的约束:强制 Mandatory
2、 设计步骤:
(1) 把大的系统规格划分分解成可以测试的规格片段;
(2) 分析分解后待测的系统规格,找出哪些是原因,哪些是结果;
(3) 画出因果图;
1)根据约束符号在图上进行标识;
2)当输入和输出之间不能够通过简单的逻辑关系得出时,使用中间结果(桥梁作用);
(4) 把因果图转换成判定表;
(5) 简化判定表;
(6) 用判定表中的每一项生成测试用例(如果规则里面有涉及到输入,可以用等价类的方法补充用例);
3、 特性:当输入和输出之间的逻辑关系比较复杂时,需要画出因果图帮助生成判定表。
4、 优点:
1)充分考虑了输入条件间的组合,对组合情况覆盖充分;
2)最终每个用例覆盖多种输入情况,有利于提高测试效率;
3)设计过程中,对输入条件间的约束关系作了考虑,避免了无效用例,用例的有效性高;
4)能同时得出每个测试项目的预期输出。
缺点:
1)当被测试特性输入较多时,判定表的规模将会非常庞大;
2)输入之间的约束条件不能有效区分输入是否确实需要进行组合测试,会造成不需要组合测试的输入做了组合,从而产生冗余。
八、正交实验法
正交实验设计法,是从大量的试验点中挑选出适量的、有代表性的点,应用依据迦罗瓦理论导出的”正交表“,合理的安排实验的一种科学的实验设计方法。
根据正交性从全面实验中挑选出部分有代表性的点进行实验,这些有代表性的点具备了”均匀分散,整齐可比“的特点。正交实验设计是一种基于正交表的、高效率、快速、经济的实验设计方法。
1) 指标:通常把判断实验结果优劣的标准叫做实验的指标;
2) 因子(因素):所有影响实验指标的条件;
3) 因子的状态(水平):影响实验因子的,叫做因子的状态;
包含了多个正交表,比如3因子2状态正交表、7因子2状态正交表等。
1、 设计步骤:
(1) 确定因子和因子状态(提取功能说明),构造因子—状态表
该步骤的目的是要确定哪些输入和输入的取值要进行组合;
(2) 加权筛选,生成因素分析表:
计算各因子和状态的权值,删去一部分权值较小,即重要性较小的因子或状态,使最后生成的测试用例集缩减到允许范围。
(3) 利用正交表构造测试数据集
1、 如果各个因子的状态数是不统一的,几乎不可能出现均匀的情况。必须首先用逻辑命令来组合各因子的状态,作出布尔图;
2、 根据布尔图查找最近的相应阶数的正交表;
3、 依照因果图上根节点到叶子节点的顺序逐步替换正交表上的中间节点,得到最终的正交表;
PS正交实验选取原则:
1)若因子的状态数相同,M因子,N状态,那么:
(1)如果存在M因子、N状态的正交表,则最好选取M因子N状态的正交表;
(2)如果不存在M因子N状态的正交表,则增加/减少因子/状态数,直到找到合适的正交表;
2)若因子的状态数不同,则要确定哪些因子出现较多的相同状态,则选择出现次数多的相同状态作为因子的状态:若状态数相同的因子比较平均,则选择状态数最大的作为因子的状态。
(1)因子的状态数=正交表的状态数;
(2)因子的状态数>正交表的状态数——(合并,分解);
(3)因子的状态数<正交表的状态数——(填写任意值)
(4)利用正交表每行数据构造测试用例
1) 根据实际的系统补充测试用例
2) 参考公式:用例的总数=因子*(状态-1)+1,另外用例个数是状态的整数倍(不适合所有的)。
2、 特点:
1) 考虑任意两个因子的状态的全组合(两两组合),不是考虑所有因子的状态全组合;
2) 考虑到输入的组合情况,但是需要结合实际的项目,删除或者补充用例;
3) 可以大大简化组合的输入,提高测试效率;
4因子3状态
3、缺点:基于数学方法,没有考虑实际情况。
九、状态迁移图法
(1) 许多需求用状态机的方式来描述,状态机的而是主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,可能不可能产生非法的状态转移等。
(2) 通过构造能导致状态迁移的事件来测试状态之间的转换,常用于协议测试;
(3) 用这种方法可以设计逆向的测试用例,如状态和事件的非法组合。
1、 基本概念:
1)状态转换图;
2)状态转换—事件表:——上一个状态——下一个状态——事件;
3)状态树;
4)状态转换路径;
2、 设计用例步骤:
1) 画出状态迁移图;
2) 列出状态——事件表;
3) 从状态转换树推导出测试路径;
4) 根据测试路径编写合法测试用例;
5) 编写非法测试用例;
3、 状态迁移图法主要适用于以下两种情况:
1) 播放器、手机等存在工作状态不断该表的系统;
2) 编辑功能,比如修改字体颜色,修改字体大小等等。
十、流程分析法
也叫场景分析法。有明确业务流程用此方法;
1、 流程分析法设计用例步骤:
1) 根据需求画出业务流程图(流程图的分支和节点);
2) 根据流程图确定测试路径及其优先级:
(1)使用频率高的分支;
(2)该分支功能有问题则会影响其他的分支;
3) 根据优先级确定测试路径;
4) 选取测试数据;
5) 设计测试用例覆盖每一条测试路径(等价类和边界值的方法补充);
2、 特点:
1) 适合系统有分支的情况;
2) 测试路径不能够完全保证程序无错误,所有要在得出测试路径的基础上使用等价类边界值等方法。
3、 场景法:
(1) 概念:1)基本流;2)备选流;3)场景;
(2) 设计步骤:
1) 根据用户场景,描述出基本流和备选流;
2) 确定测试场景;
3) 根据测试场景写测试用例(每个场景根据情况使用等价类边界值进行覆盖);
十一、异常分析法
1、 基本概念:针对系统可能存在的异常操作来设计测试用例;
2、 设计思路:结合系统测试里面的异常测试:
(1) 主动规避错误:1)构造无效输入;2)边界值;压力测试;
(2) 冗余技术:
1)结构冗余:1、对整机备份:静态,动态;2、测试点:强制拔电、 接入新的设备;
2)信息冗余:1、对关键的数据进行备份;2、测试点:构造不完全的事物访问数据库、构造死锁、导致数据库瘫痪,查看备份情况。
3)时间冗余:对于业务处理中,某个故障时间点以后的操作进行备份,一旦系统恢复正常,就将故障时间点以后的操作重新执行一遍。
4)构件冗余:对某个构件进行备份。
3、步骤(依赖于测试者的经验):
1)针对系统罗列可能的故障;
2)针对每种可能故障设计测试用例。
十二、错误猜测法
1、 设计思路:
1) 根据经验和直觉有针对性的检查容易出现错误的情况;
2) 对以往的缺陷进行分析,猜测最有可能出现错误的地方;
2、特点:是测试用例设计的一种补充。