软件测试-编写测试用例

Posted 斜杠方子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试-编写测试用例相关的知识,希望对你有一定的参考价值。

常见的用例编写方法如下:
一、需求转化法
根据需求转化为基本功能测试点
二、等价类
1、等价类:程序的输入域划分为若干部分,每个部分中选取少数有代表性的数据作为测试用例,每一类的代表性数据在测试中的作用等价于这一类的其它值;从所有可能的输入中努力找出某个小的子集,我们要找的子集是正确的,并且是可能发现最多错误的子集。
精心挑选的用例符合两个特性:
特性一:严格控制测试用例的增加,减少为达到“合理测试”的某些既定目标而必须设计的其它测试用例的数量;
特性二:它覆盖了大部分其它可能的测试用例;
等价类划分有两类不同的情况:有效等价类和无效等价类
尽管等价类测试要比随机测试用例优越的多,但它仍然存在不足。
2、划分等价类六大原则:
  • 输入条件划分了取值范围或者值的个数的情况下,则可以确定一个有效等价类和无效等价类;
  • 输入条件规定了输入值的集合或规定了“必须如何”的条件情况下,则可以确定一个有效等价类和无效等价类;
  • 输入条件是一个布尔值的情况下,则可以确定一个有效等价类和无效等价类;
  • 输入条件在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.
  • 输入条件在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
  • 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类;
3、转化为测试用例
按照输入条件、有效等价类、无效等价类建立等价类列表,列出所有的等价类;
  • 为每一个等价类固定一个编号;
  • 设计一个测试用例,使其覆盖一个或多个有效的等价类;
  • 设计一个或更多的测试用例以覆盖剩余的有效等价类;
以三角形测试为例:输入3个整数做为三角形的三个边,通过程序判定三角形的类型

输入条件:3个整数,a,b,c 条件 有效等价类 编号 无效等价类 编号  
  3个数 a,b,c
1


1、只有一个数;
a/b/c
2、只有两个数
a,b;b,c;a,c;
3、三个以上数
6

7

8
 
  整数 正整数 2
1、有一个为0;
a=0;b=0;c=0;
2、有两个为0;
a=b=0;a=c=0;b=c=0;
3、全为0;
a=b=c=0;
4、一个为负数;
a<0;b<0;c<0;
5、两个为负数;
a/b<0;a/c<0;b/c<0;
6、全为负数;
a/b/c<0;
9

10


11

12

13

14
 
输出条件:一般三角形、等边三角形、等腰三角形
一般三角形

等腰三角形
等边三角形
a+b>c;a+c>b;b+c>a;
a=b;a=c;b=c;
a=b=c;
3

4
5
     
测试用例

a=3,b=4,c=5
a=3,b=3,c=5
a=3,b=5,c=3
a=5,b=3,c=3
a=3,b=3,c=3
覆盖编号1-3
覆盖用例1-4
覆盖用例1-4
覆盖用例1-4
覆盖用例1-3,5
 
a=3/b=4/c=5,其它无值
a/b/c中其二有值,其它无值
a/b/c/d,四个值
a/b/c其一=0
a/b/c其二=0
a/b/c其三=0
a/b/c其一为负
a/b/c其二为负
a/b/c其三为负

覆盖用例6

覆盖用例7

覆盖用例8
覆盖用例9
覆盖用例10
覆盖用例11
覆盖用例12
覆盖用例13
覆盖用例14
 

三、边界值:
所谓边界条件,是指输入和输出等价类中那些恰好处于边界、超过边界、或在边界以下的状态。
与等价类不同:
特征一:边界值分析需要选择一个或多个元素,以便等价类的每一个边界都经过了测试;
特征二:与仅仅关注输入条件不同,还需要考虑结果空间(输出等价类)设计测试用例;
边界条件可能非常微妙,因此把他们确定下来需要煞费心思;
基于边界值分析方法选择测试用例的原则:
  • 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据;
  • 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据;
  • 将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值
  • 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例;
  • 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例;
  • 分析规格说明,找出其它可能的边界条件
例如:三角形问题,假定取值范围为[1,100];
边界值可取值为1,100,0,101
正常情况下,边界值得测试点有4*4*4=64种组合;
四、因果图:
输入条件的组合进行分析。用一个系统的方法选择出高效的测试用例集;
如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)
1)    分析软件规格说明描述中那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
2)    分析软件规格说明描述中的语义,找出原因与结果之间原因与原因之间对应的关系,根据这些关系,画出因果图。
3)    由于语法或环境限制有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况在因果图上用一些记号表明约束或限制条件。
4)    把因果图转换为判定表。
5)    把判定表的每一列拿出来作为依据,设计测试用例。

五、正交实验法
利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的工时与费用,可利用正交实验设计方法进行测试用例的设计
利用正交实验设计测试用例的步骤:
1.     提取功能说明,构造因子--状态表
把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。
2.     加权筛选,生成因素分析表
对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。
3.     利用正交表构造测试数据集
正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。
利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。
六、场景实验法:
每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。下面显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。本示例中,对于每个测试用例,存在一个测试用例ID、条件(或说明)、测试用例中涉及的所有数据元素(作为输入或已经存在于数据库中)以及预期结果。
七、探索性测试
发散思维,进行探索式测试;
八、经验测试
根据测试中出现的问题和经验,编写相关测试用例;
九、设计文档
根据设计文档,编写测试用例;
十、错误推断法:利用直觉和经验猜测出错的可能类型,
十一、判定表驱动法
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具
能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。
判定表通常有四个部分组成:条件桩、动作桩、条件项、动作项;
判定表的建立步骤:(根据软件规格说明)
1)    确定规则的个数.假如有n个条件。每个条件有两个取值(0,1,故有2n种规则。
2)    列出所有的条件桩和动作桩。
3)    填入条件项。
4)    填入动作项。等到初始判定表。
5)    简化.合并相似规则(相同动作)。
判定表的优点和缺点
?  优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。
?  缺点:不能表达重复执行的动作,例如循环结构。
B. Beizer 指出了适合使用判定表设计测试用例的条件:
?  规格说明以判定表形式给出,或很容易转换成判定表。
?  条件的排列顺序不会也不影响执行哪些操作。
?  规则的排列顺序不会也不影响执行哪些操作。
?  每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。
?  如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要
十二、功能图法
1.    功能图介绍
一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序.
静态说明描述了输入条件与输出条件之间的对应关系.对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的.必须用动态说明来补充功能说明.功能图方法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例.
功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法
(功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中 的内容.逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法.该方法要求测试人员对程序的逻辑结构有清楚的了解.由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖.下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的.
2.    测试用例生成方法
从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例. 若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.
3.    测试用例生成规则
为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。
4.    从功能图生成测试用例的过程
1)    生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。
2)    测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。
3)    测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
5.    测试用例的合成算法:采用条件构造树.

测试用例综合设计策略
1.    Myers提出了使用各种测试方法的综合策略
1)    在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。
2)    必要时用等价类划分方法补充一些测试用例
3)    用错误推测法再追加一些测试用例
4)    对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例
5)    如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法
2.    测试用例的设计步骤
1)    构造根据设计规格得出的基本功能测试用例
2)    边界值测试用例
3)    状态转换测试用例
4)    错误猜测测试用例
5)    异常测试用例
6)    性能测试用例
7)    压力测试用例
3.    优化测试用例的方
1)    利用设计测试用例的8种方法不断的对测试用例进行分解与合并
2)    采用遗传算法理论进化测试用例
3)    在测试时利用发散思维构造测试用例




以上是关于软件测试-编写测试用例的主要内容,如果未能解决你的问题,请参考以下文章

测试驱动开发

学习软件测试编写测试用例的基本要求,测试用例设计步骤,轮播图导航栏购物车功能测试

如何根据需求分析文档编写测试用例

测试理论--如何编写一个好的测试用例

测试用例编写规范

TPshop项目-功能测试