测试用例设计方法
测试用例设计方法:
等价类划分
概念:某个输入域的集合,在这个集合中每个输入条件都是等效的,如果其中一个的输入不能导致问题发生,那么集合中其它输入条件进行测试也不太可能发现错误。
等价类划分主要适用于单个输入条件,输入为数值型的情况,如果输入规定了输入区间,可划分出一个有效等价类,两个无效等价类;如果输入只规定了输入范围,可划分出一个有效等价类,一个无效等价类。
如:输入值是学生成绩,范围0~100 。
边界值分析
概念:边界值分析方法的理论基础是假定大多数的错误是发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其它的取值导致程序错误的可能性也很小。
边界值分析方法也是适用于单个输入条件的情况,输入类型可以数值、字符等,要测试的边界包括上点、下点、离点。
注意:不能光考虑了边界值,正常的取值范围反而忽略
如:输入值是密码:6位数字。
测试项 |
有效等价类 |
边界值 |
密码 |
6位数字 |
5位数字 |
6位数字 |
||
7位数字 |
因果图分析方法(判定表)
概念:因果图法是分析和表达多种输入条件下系统执行不同动作的工具,它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确。
因果图方法考虑输入条件的组合,特别适用于多个输入条件相关有关联又相互约束的情况。因果图方法最终生成的就是判定表。
注意:因果图或判定表法适合测试组合数量较少的情况。如果组合数量多则使用正交实验法。
设计步骤:
1)罗列出输入与输出;
2)根据输入与输出画出因果图;
3)标出约束跟限制;
4)把因果图转化成判定表;
5)根据判定表的每一列设计测试用例。
如:读书的一个功能,假设有以下逻辑。
条件 |
结果 |
如果觉得疲倦并且对书的内容感兴趣,但糊涂的话 |
请停止阅读,休息 |
如果觉得疲倦并且对书的内容感兴趣,不糊涂的话 |
请停止阅读,休息 |
如果觉得疲倦并且对书的内容不感兴趣,但不糊涂的话 |
请停止阅读,休息 |
如果觉得疲倦并且对书的内容不感兴趣,但糊涂的话 |
请停止阅读,休息 |
如果不觉得疲倦并且对书的内容感兴趣,但糊涂的话 |
回到本章重读 |
如果不觉得疲倦并且对书的内容感兴趣,但不糊涂的话 |
继续读下去 |
如果不觉得疲倦并且对书的内容不感兴趣,但糊涂的话 |
跳到下一章去读 |
如果不觉得疲倦并且对书的内容不感兴趣,但不糊涂的话 |
跳到下一章去读 |
转换成判定表(不同的组合都会产生唯一的结果)
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
条件桩 |
是否疲倦 |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
是否感兴趣 |
Y |
Y |
N |
N |
Y |
Y |
N |
N |
|
是否糊涂 |
Y |
N |
Y |
N |
Y |
N |
Y |
N |
|
结果桩 |
重读 |
|
|
|
|
Y |
|
|
|
继续读 |
|
|
|
|
|
Y |
|
|
|
跳到下一章 |
|
|
|
|
|
|
Y |
Y |
|
休息 |
Y |
Y |
Y |
Y |
|
|
|
|
也可对判定表进行简化、合并
|
1 |
2 |
3 |
4 |
5 |
|
条件桩 |
是否疲倦 |
Y |
N |
N |
N |
N |
是否感兴趣 |
N |
Y |
Y |
N |
N |
|
是否糊涂 |
Y |
Y |
N |
Y |
N |
|
结果桩 |
重读 |
|
Y |
|
|
|
继续读 |
|
|
Y |
|
|
|
跳到下一章 |
|
|
|
Y |
Y |
|
休息 |
Y |
|
|
|
|
最后如上图判定表,一列就是一条用例。
正交实验设计方法
概念:正交试验设计(Orthogonal experimental design)是研究多因子、多水平的又一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点。
当输入条件很多时,因果图等设计方法设计出来的用例数往往多的惊人,用正交法可有效减少用例数。
关于正交试验表的两个重要概念:
1、所有参与试验、影响试验结果的条件称为因子。
2、影响试验因子的取值或输入叫做因子的水平。
如何选择正交表:
1)考虑因子的个数
2)考虑水平的个数
3)考虑正交表的行数
4)取行数最少的一个
如:PowerPoint软件打印功能作为例子
打印范围分:全部、当前幻灯片、给定范围共三种情况;
打印内容分:幻灯片、讲义、备注页、大纲视图共四种方式;
打印颜色/灰度分: 颜色、灰度、黑白共三种设置;
打印效果分:幻灯片加框和幻灯片不加框两种方式。
分析:
PowerPoint软件打印功能有4个条件,其中:
条件1有3个取值;
条件2有4个取值;
条件3有3个取值;
条件4有2个取值。
因此实际组合共有3*4*3*2=72种。
但正交表取值使用最大的条件数组合,即4*4*4*4=256,即找正交表4_4的组合,但是发现正交表中没有4_4的选项,那么就选择最接近的选项L16_4_5(条件数为4,状态数为5)使用的时候去掉E列。
下面来选取有效组合:
1) 首先去掉因子5,即E列去掉
2) 因子A只有3个条件,那么去掉13、14、15、16 行
3) 因子B有4个条件,不用改
4) 因子C有3个条件,那么去掉 4、7、10 行
5) 因子D有2个条件,那么去掉3、5、6、9行
6) 剩下1、2、8、11、12 这5个组合
实际72个组合,挑选5个有效组合来测试,大大节省测试时间
最后得出的组合是5个,一行就是一条用例
|
A(打印范围) |
B(打印内容) |
C(打印灰度) |
D(打印效果) |
用例1 |
全部 |
幻灯片 |
颜色 |
加框 |
用例2 |
全部 |
讲义 |
灰度 |
不加框 |
用例3 |
当前幻灯片 |
大纲视图 |
黑白 |
不加框 |
用例4 |
给定范围 |
备注页 |
颜色 |
不加框 |
用例5 |
给定范围 |
大纲视图 |
灰度 |
加框 |
功能图分析法(白盒测试)
功能图方法中 ,要用到逻辑覆盖和路径测试的概念和方法 ,属白盒测试方法中的内容。逻辑覆盖是以程序内部的逻辑结构为基础测试用例设计方法,该方法要求测试人员对程序的逻辑结构有清楚的了解,由于覆盖测试的目标不同,逻辑覆盖可分为:
1)语句覆盖,每条语句至少执行一次。(语句覆盖)
2)判定覆盖,每个判定的每个分支至少执行一次(判定覆盖)。
3)条件覆盖,每个判定的每个条件应取到各种可能的值。(条件覆盖)
4)判定/条件覆盖,同时满足判定覆盖条件覆盖。
5)条件组合覆盖,每个判定中各条件的每一种组合至少出现一次。(条件组合覆盖)
6)路径覆盖,使程序中每一条可能的路径至少执行
如:下面这段代码
语句覆盖:设计一套测试 让被测对象中所有语句得到测试覆盖。一行代码至少执行一次,不需要考虑结果。
判定覆盖:设计一套测试 让被测对象中所有判定得到测试覆盖。if 和else 都是判定,那么if和else至少要执行一次。比语句覆盖更严格。
条件覆盖:设计一套测试 让被测对象中所有条件得到测试覆盖。if里有两个条件,那么这两个条件都被触发到。像第一个if语句(if((x>3)&&(z<10))),如果要进行条件覆盖,则x取值要大于3才能覆盖,如果x的取值不大于3,z<10这个条件就短路了,不会被执行。这种情况就不符合条件覆盖。
判定/条件覆盖:设计一套测试 让被测对象中所有判定/条件都得到测试覆盖。所有的if,再加上if的所有条件值都要被覆盖。
条件组合覆盖:设计一套测试 让被测对象中所有条件组合都得到测试覆盖。这种情况组合是最多的。每个条件的True和False的所有组合需要被触发到。还是以第一个if语句为例(if((x>3)&&(z<10))),如果要进行条件组合覆盖,就有4种情况,T&&T、T&&F、F&&T、F&&F。
路径覆盖:设计一套测试 让被测对象中所有条件得到测试覆盖。第一个if有两个取值,T和F。第二个if也有两个取值,也是T和F,那么路径覆盖就有4种情况,TT、TF、FT、FF。那么要覆盖这4条路径,xyz分别有以下取值:
T T(即((x>3)&&(z<10))为T、((x==4)||(y>5))为T):x=4,y任意,z<10
T F(即((x>3)&&(z<10))为T、((x==4)||(y>5))为F):x>4,y<5,z<10
F T(即((x>3)&&(z<10))为F、((x==4)||(y>5))为T):x=4,y任意,z>=10
F F(即((x>3)&&(z<10))为F、((x==4)||(y>5))为F):x<3,y任意,z任意 或者:x>4,y任意,z>=10
错误推断法
基于经验和直觉推测程序中所有可能存在的各种错误 , 从而有针对性的设计测试用例的方法。测试经验不同,设计出来的测试用例也区别很大。
u 程序中所有可能的错误
u 容易发生错误的特殊情况
u 以前产品测试中曾经发现的错误
需求文档转化法
所见即得的思想:
u 所有的需求文档描述的文字信息,转化为用例。
u 所有的示意图、流程图、状态图等信息,直接转化为测试用例。
u 所有项目需求达成的口头共识,需求确认的邮件沟通信息,直接转换为测试用例。
随机测试
随意测试,不考虑任何测试用例和需求,完全站在一个用户的角度对产品进行使用。
适用场景:
u 所有之前设定的用例已经执行完毕
u 海量的条件组合无法逐一遍历的时候
对象属性分析
主要针对单个元素,比如一个按钮、输入框、链接、滚动条等,用于重要功能或经常使用功能的测试。
u 要测试的对象是什么?按钮、输入框、链接、滚动条?
u 对象的位置:整个系统中的不同位置展现。
u 对象的UI:不同状态下的UI、大小、颜色、文字、对齐、是否可用等
u 对象的操作动作有哪些:操作动作的前置条件、具体操作和操作后正常结果和可能产生的异常结果
u 对象的输入值有哪些:正常的和异常的、边界值
u 对象包含的数据:数据的正确性、数据的一致性
u 其他元素的状态是否会对元素有影响
u 对象的兼容性
u 对象的稳定性和性能
测试用例设计策略:
1、任何都要用边界值法;
2、用等价类划分补充测试用例;
3、根据测试设计人员经验用错误推测法追加测试用例;
4、根据程序逻辑追加逻辑测试用例;
5、根据程序情况,选择使用因果图法(判定表)设计测试用例。
测试用例设计步骤:
1、根据设计规格设计基本的功能测试用例;
2、边界值测试用例;
3、状态转换测试用例;
4、错误推测测试用例;
5、异常测试用例;
6、性能测试用例。
另外还需反复利用各种测试用例设计方法对测试用例进行分解与合并,多多利用发散思维追加测试用例。