第07章 测试用例和设计方法一

第07章 测试用例和设计方法一

一、测试用例概述
1、测试用例的定义
1)测试用例就是:
(1)设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的预期结果;
(2)若程序在这种情况下不能正常运行,且这种问题会重复发生,则表示软件测试人员已经测出软件有缺陷,此时必须将问题标示出来,并通知软件开发人员。软件开发人员接获通知后,将这个问题修改完成于下一个测试版本内;
(3)软件测试工程师取得新的测试版本后,必须利用同一个用例来测试这个问题,确保该问题已修复完成。
2)有效性:测试用例是测试人员测试过程中的重要参考依据。
3)可重用性:良好的测试用例具有重复使用的功能,使得测试过程事半功倍,提高测试效率。(软件版本更新时,原来的测试用例大多可以直接用)
4)易组织性:即使是小的项目,也坑你会有几千甚至更多的测试用例,测试用例可能在数月甚至在几年的测试过程中被创建和使用。
5)可评估性:从测试的项目管理角度来说,测试用例的通过率是检验代码质量的保证。
6)可管理性:测试用例也可以作为检验测试人员进度、工作量以及跟踪/管理测试人员工作效率的标准。
2、测试用例应该包含的内容
1)标识符:由测试设计过程说明和测试程序说明引用的唯一标识符。
2)测试项:描述被测试的详细特性、代码模块等,应该比测试设计说明所列的特性更加具体。还要指出引用的产品说明书或测试用例所依据的其他设计文档。
3)输入说明:该说明列举执行测试用例的所有输入内容或条件。
4)输出说明:描述进行测试用例预期的结果。
5)环境要求:执行测试用例必要的硬件、软件、测试工具、人员等。
6)特殊要求:描述执行测试必须的特殊要求。
7)用例之间的依赖性:若一个测试用例依赖于其他用例,或受其他用例的影响,就应在此处注明。

二、测试用例模板和实战
1、测试用例模板
excel表格

测试用例编号 测试项 依赖用例 测试步骤 输入数据 预期结果 编制人 编制时间 测试结果 测试人 测试时间 备注

1)标识符(用例编号):一般编号规则:TestCase_项目名称_模块名称_功能名称_0001
2)测试项:测试用例的测试目的。一般情况下用一句话或一个短语表明目的。如:使用谷歌浏览器打开百度首页;在QQ登录界面输入正确的用户名和密码可以登录成功。(表明你的测试模块、测试对象、方式、事件。)(A:人名 B:人名 C:时间 D:地点 E:事件)
3)依赖用例:一般在功能流程上,下游的功能测试依赖于上游的功能测试的用例。如:登录QQ之前要注册QQ号;增加了一个数据的测试用例,将会被删除该数据的测试用例依赖。
4)测试步骤:用最朴实的语言写出软件测试的操作步骤,且要尽量详细。如:在用户名文本框输入:XXX;在省份下拉列表选择:北京,城市下拉列表选择:北京。
5)输入(测试)数据:单独整合测试数据,必须和测试步骤中的数据保持一致。
6)预期结果:准确、对象的准确性、内容的准确性。原则上每一个操作,都要有一个结果。但一般只在重要的步骤后,设定预期结果。一般和测试目的密切相关,测试目的决定了测试步骤和预期结果。如:页面跳转到XXX;程序弹出对话框,提示用户名或密码错误,请重新输入。
7)测试结果:要求在测试执行完成后添加,没有执行保持为空。结果只有两个:通过/失败;pass/failed,和预期结果一致为通过,否则为失败。
8)测试人:测试的执行人,可和设计者相同或不同。
9)备注:为了测试用例正常执行而做的特殊准备。如:专门制造网络不畅情况下,软件错误提示。
2、用例编写实战
1)见excel文件:第07章测试用例模板.xlsx

三、用例编写注意
1、用例编写注意
1)不要设计“穷举测试用例”;
2)在详细测试用例和有效测试时间中找到平衡点;
3)好的测试用例应该多关注“反向测试问题”;
4)测试用例库应该不断更新和维护;
5)测试用例可以复用,但要注意数据有效性与环境变化;
6)测试用例是设计出来的,不是写出来的;
7)多去学习经验丰富的测试工程师所设计的测试用例;
8)针对不同的需求类型和测试对象,灵活采用不同的测试用例设计方法。

四、黑盒测试用例设计方法(一)
1、用例设计方法概述
1)测试数据选择
(1)等价划分法
(2)边界值分析法
2)测试步骤设计
(1)因果图法
(2)判定表法
(3)正交实验法
(3)功能图法
(4)场景法
2、等价类划分法
1)引言:做加法器功能测试时,测试了1+1,1+2,1+3和1+4之后,还有必要测试1+5和1+6吗?能否放心地认为它们是正确的?
2)等价类划分法原理
(1)把程序的输入域划分成若*分,然后从每个部分中选取少数代表性数据作为测试用例;
(2)每一类的代表性数据在测试中的作用等价于这一类中的其他值,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。
3)确定等价类的原则(类似于条件)
(1)在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类;(两个无效:大于和小于)
(2)在输入条件规定了输入值的集合或规定了“如何必须”的条件的情况下,可以确立一个有效等价类和一个无效等价类;
(3)在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类;
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价;
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
(6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
4)划分等价类和列出等价类表
(1)有效等价类
(2)无效等价类
5)确定测试用例
(1)为每个等价类规定一个唯一编号;
(2)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复该步,最后使得所有有效等价类均被测试用例所覆盖;
(3)设计一个新的测试用例,使其只覆盖一个无效等价类。重复该步,使所有无效等价类均被覆盖。
6)案例:以百度的注册页面为例
(1)用户名:设置后不可更改;中英文均可;最多14个英文或7个汉字;(用户名不可重复;不可为空;)
(2)将等价类划分组成表格分析

有效等价类 数据 无效等价类 数据
中文、英文混合 晨caicai 数字、特殊符号 123;?、
14英文 Cyixian 英文>14/汉字>7 abcdefghijklmnop
不能为空 C
不能重复 aa 使用重复的数据测试 aa; aa
7汉字 拜拜拜拜版本

3、边界值分析法
1)思考:做加法器功能测试时,测试了1+1,1+2,1+3和1+4之后,还有必要测试1+5和1+6吗?能否放心地认为它们是正确的?
2)边界和核心
(1)边界:有效和无效数据之间的划分界限。
(2)边界的核心:“常在河边走哪有不湿鞋”
3)边界值分析法原理
(1)若输入条件规定了值的范围,则应取刚达到这个范围的边界值,以及刚超越该范围便捷的值作为测试输入数据;
(2)若输入条件规定了值的个数,则用最大个数、最小个数、比最小个数小1、比最大个数大1的数作为测试数据;
(3)分析规格说明,找出其他可能的边界条件。
(4)边界值:只是一个特定的数据。
①例如,文本框需要输入6到18位字符,边界值有:6个字符;18个字符;
②次边界:边界附近的值。按照系统规定的单位或者计算方式,一个单位的差异。如,字符是个,一个字符;人民币最小单位为0.01元;ATM机最小单位是100元,只能为00元的整数倍;
4)思考题
(1)x>=6&&x<=18,请问测试中x的边界值选哪几个测试?5 6 7 17 18 19
(2)x>6&&x<18,请问测试中x的边界值选哪几个测试?6 7 8 16 17 18
(3)文本框输入字符的个数要求是不大于150字,测试时如何选择边界值?
0≤x≤150 空 1 149 150 151
5)边界值选择原则
(1)若输入条件规定了值的范围,则应取刚达到这个范围的边界值,以及刚超越该范围便捷的值作为测试输入数据;
(2)若输入条件规定了值的个数,则用最大个数、最小个数、比最小个数小1、比最大个数大1的数作为测试数据;
(3)根据规格说明的每个输出条件,使用原则(1);
(4)根据规格说明的每个输出条件,使用原则(2);
(5)若程序的规格说明书给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试数据;如民族属性
(6)若程序中使用了一个内部数据结构,则应选择该内部数据结构边界上的值作为测试数据。
(7)分析规格说明,找出其他可能的边界条件。
4、因果图法
1)因果图法原理
(1)因果图法是一种适合描述对于多种输入条件组合的测试方法
(2)根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法;
(3)它适合于检查程序输入条件涉及的各种组合情况。
2)因果图法步骤
(1)第一步:根据功能说明书中规定的原因和结果之间的关系画出因果图。
①原因和结果的关系
(a)恒等:原因a成立,结果b一定成立;反过来不一定
(b)非:原因a成立时,结果b一定不成立;;反过来不一定
(c)或:原因a、b、c三者只要有一个成立,结果d就一定成立;;反过来不一定
(d)与:原因a、b、c都成立时,结果d才成立;;反过来不一定
(2)第二步:根据功能说明在因果图中加上约束条件
①原因之间的约束(原因成立为1,不成立为0)
其中互斥、包含、唯一、要求是对原因的约束,屏蔽是对结果的约束。含义如下:
互斥(exclusive):表示a、b、c不同时为1,即a、b、c至多只有一个1;即a+b+c≤1;
包含(include):表示a、b、c至少有一个1,即a、b、c不同时为0;即1≤a+b+c≤3;
唯一(only):表示a、b、c有且仅有一个为1;即a+b+c=1;
要求(request):表示若a=1,则b必须为1,即不可能a=1且b=0;即原因a成立,要求b一定先成立;(a要求b成立);
②结果之间的约束
屏蔽(mask):表示若a=1,则b必须为0;a结果出现,b结果一定不出现。如:收到注册成功的提示,就一定不会收到数据填写错误的提示;
3)实例
(1)阅读和分析功能说明书;
(2)识别出“原因”和“结果”,并加以编号;
(3)案例1:有一个饮料自动售货机的控制处理软件,处理单价为5角钱,它的软件规格说明如下:
①若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来;
②若投入1元的硬币,同样也是按“橙汁”或“啤酒”的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。
(4)因果图分析步骤
①分析原因和结果:
原因:投5角;投1元;选橙汁;选啤酒;
结果:出橙汁;出啤酒;找零5角;
②找出原因与结果之间的关系
原因(1)(3)“与”得结果(1);
原因(1)(4)“与”得结果(2);
原因(2)(3)“与”得结果(1)(3)
……
③原因之间的约束
原因(1)(2)互斥;原因(3)(4)互斥
④结果之间的约束
结果(1)(2)互相屏蔽
因果图使用的局限性:当原因和结果很多时,他们之间的关系连线就会很多,导致因果图的可读性变差。因此用作原因结果不是很多的局部的小功能分析。
⑤列出所有原因和结果的列表,设计初步的测试用例步骤(1表示条件成立)

Case 1 Case 2 Case 3 Case 4 Case 5 Case 6 Case 7
投币 投5角 1 1
投1元 1 1
按钮 选橙汁 1 1 1
选啤酒 1 1
结果 出橙汁 1 1 1
出啤酒 1 1
找零5角 1 1

A. Case 5是一种bug,不能作为一种测试用例;
B. 因果图的优势在于能够发现设计中的不足;
C. 经分析发现:(非常糟糕的情况)
a) 只选择饮料,没有投币的时候,软件没有任何结果;
b) 只投币,没有选择饮料的时候,软件也没任何结果;
c) 我们不能把软件的缺陷设计成测试用例;
D. 设计测试用例阶段,找产品经理,并在后面增加结果

提示投币
提示选饮料
60s自动退币

(5)见excel文件:第07章因果图用例.xlsx
4)将因果图中的每一个分支用表格列出来
(1)列表中的每一列都将是一条测试用例

1 2 3 4 5 6 7 8
输入 投入1元硬币 1 1 1 1 0 0 0 0 0
投入5角硬币 2 0 0 0 1 1 1 0 0
按下橙汁 3 1 0 0 1 0 0 1 0
按下啤酒 4 0 1 0 0 1 0 0 1
中间节点 已投币 11 1 1 1 1 1 1 0 0
已按钮 12 1 1 0 1 1 0 1 1
输出 退还5角硬币 21 1 1 0 0 0 0 0 0
送出橙汁饮料 22 1 0 0 1 0 0 0 0
送出啤酒饮料 23 0 1 0 0 1 0 0 0

5、判定表驱动法
1)判定表驱动法:是分析和表达多逻辑条件下执行不同操作的情况的工具。

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
建议 重读
继续
跳下一章
休息

2)应用场合:主要适用于多条件的内容组合与结果分析。
3)组成:由条件桩、动作桩、条件项、动作项四部分组成。
(1)条件桩(Condition Stub):列出了问题(需求)的所有条件,通常认为列出的条件的次序无关紧要。
(2)动作桩(Action Stub):列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。
(3)条件项(Condition Entry):列出针对它左列条件的取值(条件的成立与否),在所有可能情况下的真假值。
(4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
4)使用条件
(1)所有的条件桩在表中的位置和顺序互相不影响;
(2)所有动作桩的顺序不会因为条件顺序的变化而产生不同。
5)建立判定表的步骤(PPT)
(1)第一步:确定规则的个数;
(2)假如有n个条件,每个条件有两个取值:0,1,故有2^n中规则
(3)第二步:列出所有的条件桩和动作桩;
(4)填入条件项
(5)填入动作项,制定初始判定表
(6)第三步:简化,合并相似规则或相同动作;
5.1)实现的步骤
(1)识别出操作条件(原因),和对应的动作(结果);
(2)分析条件的条件项(组合数量):若有n个条件,每个条件有两个取值:0(不成立)、1(成立),则最后有2^n个条件项;
(3)简化和优化结果。排除一些不可能存在的情况;
6)判定表使用实例
需求:订购单的检查
若金额超过500元,又未过期,则发出批准单和提货单;
若金额超过500元,但过期了,则不发批准单;
若金额低于500元,则不论是否过期都发出批准单和提货单,在过期的情况下还需要发出通知单。
(1)分析条件和动作

条件1 条件2 动作
金额>500 未过期 发出批准单、提货单
金额>500 过期 不发批准单,发提货单
金额≤500 未过期 发出批准单、提货单
金额≤500 过期 发出批准单、提货单、通知单

(2)写入条件桩、动作桩、条件项、动作项
第07章 测试用例和设计方法一(3)对判定表进行简化和优化
不管金额多少,只要未过期,就会发出批准单和提货单。(在测试时间充足的情况下每一个都要测试)(在测试时间不充足的情况下,可以选二者中的一个进行测试),所以优化后,条件项成为3个;
第07章 测试用例和设计方法一(4)将判定表中条件项和动作项中的每一列作为测试用例的数据和操作,以及对应的预期结果;
(5)见excel文件:第07章判定表实例.xlsx
7)适合使用判定表设计测试用例的条件:
(1)规格说明以判定表的形式给出,或很容易转换成判定表;
(2)条件的排列顺序不影响执行哪些操作;
(3)规则的排列顺序不影响执行哪些操作;
(4)当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则;
(5)如果某一规则要执行多个操作,这些操作的执行顺序无关紧要。
8)测试用例的设计方法:没有哪一种方法是单独使用的。
(1)所有的软件都是因为某种操作(原因)才会导致一定的结果;–考虑必须使用因果图;
(2)所有的软件都有文本框;–考虑必须使用等价类、边界值(使用最多);
(3)其他方法选择性使用。
9)判定表实例题目:该判定表为一个杂志的阅读指南判定,指导读者良性阅读。

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
建议 重读
继续
跳下一章
休息

读完表格后,请对表格进行优化,将重复的内容去掉,并且说明原因。
(1)合并1 2 3 4为一项;在疲倦的情况下,一律休息。
(2)合并7 8为一项;在都不疲倦的情况下,就跳下一章。
第07章 测试用例和设计方法一6、用例设计中存在的问题
1)用例按照测试分类:功能(Function)、界面(UI)、性能(Performance)、安全(Security)、接口(Interface);
2)测试项:必须是确定的结果,只需要表明目的,最好不写目的产生的结果;
3)身份证号业务知识,最后一位是校验码(机密(0-9,I,I,X),身份证号(新版和旧版),数字和X,并没有字母;
4)测试项:一般只写一个测试目的,测试目的必须是明确的,不能一次测试多个点。一个无效等价类只能违反一个需求;
5)依赖用例:一般省略,跨过程和步骤时必须写;用例依赖可以跨模块:A设计员可能依赖B设计的测试用例;
6)测试步骤:表明操作的对象和方式,数据体现出来;
7)测试数据:没有数据时,空着不写;例如要求输入不为空,不输入就不写。(须在测试项中标注某一个内容为空);如果对空格进行测试,建议不将空格放在数据的最前面或者最后面;
8)测试结果:不执行就不填;
9)用例中不必显示正向或反向测试;
10)等价类划分不要出现重复情况(集合的补集);也不要出现缺失的输入部分(集合的并集为所有有效等价类);一次数据测试只能违反一个规则。
11)面试常见问题:
(1)什么是测试用例?
(2)如果软件按照测试用例运行达不到预期结果,怎么办?
(3)开发人员表示缺陷修复了,你认可吗?
答:用同样的测试用例测试,即回归测试。
(4)测试用例真的有必要耗费时间进行设计和编写吗?有用吗?
答:第一次设计和编写虽然耗费时间,但是在之后再去测试和使用过程中,就不用再去重新编写测试用例
(5)时间不够用的情况下,还要进行详细的测试用例设计吗?
(6)测试用例需要经常更新吗?
答:必须,尤其是发现过缺陷的测试用例。“杀虫剂效应”,一个发现过缺陷的测试用例,就相当于杀虫剂,(抗药性),必须使用更强的“杀虫剂”——用新的与之前用例中数据类型相同的测试用例,进行重新测试。
(7)现在有一个文本框,有一个规则:XXXX;请对这个规则进行输入内容的等价类划分?
答:要尽可能详细地划分
7、用例设实战
1)实战案例:一个程序读入3个整数,把这3个数值看作一个三角形的3条边的长度值;这个程序会给出弹窗提示信息,说明这个三角形是普通的、等腰的、直角的、等边的、相应的错误提示信息;
2)三角形判断:
(1)构成三角形:任意两边之和大于第三边
(2)直角:a2+b2=c^2
(3)等腰;存在两边相等
(4)等边;三边都相等
(5)钝角;
(6)锐角:任意两边的平方和大于第三边的平方
3)三边形判断中,边的输入顺序不影响结果;边长作为特殊的数据,所有边长遵循的规则是完全一致的,违反某规则的测试用例只用一条即可;
4)四边形:平行四边形;正方形?长方形?普通四边形?
5)五边形:有无特殊的形状?若有,如何判断?
6)见excel文件:第07章三角形测试用例设计.xlsx