1 测试用例
1.1 测试用例的定义
- 设计一个情况,软件程序在这种情况下,必须能够正常运行并达到程序所设计的预期结果。
- 如果程序在这种情况下不能正常运行,而且这种问题会重复发生,那就表示软件程序人员已经测出软件有缺陷,这时候就必须将问题标识出来,并通知开发人员。软件开发人员接到通知后,将这个问题修改完成于下一个测试版本内。
- 软件测试人员取得新的测试版本后,必须利用同一个用例来测试上述出现的缺陷问题,确保该问题已修改完成。
测试用例模板:
测试用例编号 | 测试项 | 依赖用例 | 测试步骤 | 输入数据 | 预期结果 | 测试结果 | 测试人 | 备注 |
---|
| | | | | | | | |
测试用例说明:
- 用例编号:一般编号规则:TestCase_项目名称_模块名称_功能名称_0001
- 测试项:测试用例的测试目的。一般情况下,用一句话表明目的。(表明测试模块、测试对象、方式、事件)。
- 依赖用例:一般功能流程上,下游的功能测试依赖于上游的功能测试的用例。
- 测试步骤:用最朴实的语言,写出来软件的操作步骤。要尽量详细。
- 测试数据:单独整合测试数据。必须和测试步骤中的数据保持一致。
- 预期结果:对象的准确,内容的准确。原则上每一个操作,都要有一个结果。在重要步骤之后,设定预期结果。一般和测试目的密切相关。
- 测试结果:要求在测试执行完成后添加。没有执行保持为空。测试结果只有两种:通过/失败;Pass/Failed。
- 测试人:测试的执行人。可以和设计者相同或不同。
- 备注:为了测试用例正常执行而做的特殊准备。
测试用例可以分为:功能(Function)、界面(UI)、性能(Performance)、安全(Security)、接口(Interface)
1.2 用例设计和编写的作用
- 有效性:测试用例是测试人员测试过程中的重要参考依据。
- 可复用性:良好的测试用例具有可重复使用的功能,提高测试效率。
- 易组织性:即使是小项目,也可能会有几千甚至更多的测试用例,测试用例可能数月甚至几年的测试过程中被创建和使用。
- 可评估性:从测试的项目管理角度来说,测试用例的通过率是检验代码质量的保证。
- 可管理性:测试用例也可以作为检验测试人员进度、工作量以及跟踪/管理测试人员的工作效率的标准。
2 测试用例编写注意事项
- 不要设计“穷举测试用例”
- 在详细测试用例与有效测试时间中找到平衡点
- 好的测试用例应该多关注“反向测试问题”
- 测试用例库应该不断更新和维护
- 测试用例可以复用,但要注意数据有效性与环境变化
- 测试用例是设计出来的,不是写出来的
- 多去学习经验丰富的测试工程师所设计的测试用例
- 针对不同的需求类型和测试对象,灵活采用不同的测试用例设计方法
3 黑盒测试用例设计方法
3.1 测试数据选择
等价类划分法
- 原理:
- 把程序的输入域划分为若干部分,然后从每个部分中选取少量数 代表性数据作为测试用例
- 每一类的代表性数据在测试中的作用等价于这一类中其他值,如果某一类中的一个数据发现错误,那么这一等价类中的其他例子也能发现同样的错误
- 反之,如果某一类中的一个数据没有发现错误,则这一类中的其他数据也不会发现错误
- 步骤:
(1)确定等价类原则:
- 输入条件给出取值范围或值的个数时,可以确定一个有效等价类和两个无效等价类
- 输入条件给出输入值的集合或规定 “必须如何让”的条件时,可以确定一个有效等价类和一个无效等价类
- 输入条件为布尔量时,可确定一个有效等价类和一个无效等价类
- 规定输入值为一组(若为n个),并且程序要对每一个输入值分别处理时,可确定n个等价有效类和一个无效等价类
- 规定了输入数据必须遵守的规则时,可确定一个等价有效类(符合规则)和若干个无效等价类(从不同角度违反规则)
- 在已知划分的等价类中,各元素在程序中处理方式不同时,应该将该等价类进一步划分为更小的等价类
(2)划分等价类和列出等价类表:
(3)确定测试用例
- 为每个等价类规定一个唯一编号。
- 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例覆盖。 设计一个新的测试用例,使其覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。
以百度注册页面为例进行分析: 用户名:设置后不可更改;中英文均可;最多14个英文或7个汉字; (隐性条件:用户名不可重复;不可为空;)
| 有效等价类 | 数据 | 无效等价类 | 数据 |
---|
| 中文、英文 | yY哈哈 | 数字、特殊符号 | 123456 | | 14个英文 | YyDddd | 英文超过14个 | qwertyuiopasdfgh | | 7个中文 | 羊羊 | 中文超过7个 | 哈哈哈哈哈哈哈哈哈 | | 不能为空 | YYY | 空 | | | 不能重复 | 咩咩羊 | 使用重复数据测试 | |
- 编写测试用例:
边界值分析法
- 原则
- 如果输入条件规定了值的范围,则应取刚达到这个范围的值,以及刚刚超过这个范围边界的值作为测试输入数据。
- 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据
- 分析规格说明,找出其他可能的边界条件。根据规格说明,使用上两条
- 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
- 如果程序中使用了一个内部数据结构,则应该选择这个内部数据结构边界上的值作为测试用例
边界值只是一个特定的数据。例如文本框需要输入6到18位字符。边界值有:1)6个字符;2)18个字符。 次边界:边界附近的值,按照系统规定的单位或者计算方式,一个数据的差异。
举例: 1)6≤x≤12,测试中x的边界值要选取哪几个值进行测试? 5,6,7,11,12,13 2)6<x<12,测试中x的边界值要选取哪几个值进行测试? 6,7,11,12
实战案例
- 一个程序读入3个整数,把这3个数值看作是一个三角形的3条边的长度值。
- 这个程序会给出弹窗提示信息,说明这个三角形是普通的、是等腰的、是直角的、还是等变的,以及相应的错误提示信息。
- 等价类划分
- 测试用例
3.2 测试步骤设计
因果图法
- 因果图法是一种适合于描述对于多种输入条件组合的测试方法;
- 根据输入条件的组合、约束关系和输出调价的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法
- 适合于检查程序输入条件涉及的各种组合情况
- 画图步骤
step1: 根据功能说明书中规定的原因结果之间的关系画出因果图
- 原因和结果的关系
恒等:原因A成立,结果B一定成立 非:原因A成立,结果B一定不成立 或:原因A、B、C三者只要一个成立,结果D一定成立 与:原因A、B、C三者都成立,结果D成立
step2: 根据功能说明在因果图中加上约束条件
假如原因成立用1表示,不成立用0表示,则
- 原因之间的约束:
互斥(exclusive):不同时为1,即A+B+C≤1 包含(include):至少一个为1,即 1≤A+B+C≤3 唯一(only):有且仅有一个为1,即A+B+C=1 要求(request):原因B成立,要求A先成立 - 结果之间的约束:
屏蔽(mask):结果A出现,结果B一定不出现,即A=1,则B=0。例如:提示注册账号成功时,就一定不会收到数据填写错误的提示。
第一步:分析原因和结果; 第二步:画出原因和结果之间的关系; 第三步:根据需求描述原因、结果间的约束;
因果图使用中的局限性: 当原因和结果很多时,他们之间的关系连线就会很多,导致因果图可读性变差。因此常用于局部小功能(原因和结果不多)分析。
第四步:列出所有原因和结果的列表,设计初步的测试用例步骤; C5是一种bug,不能做测试设计。 经分析发现: 1)只选择饮料,没有投币时,软件没有任何结果。 2)只投币,没有选择饮料的时候,软件没有任何结果。 3)不能把软件的缺陷设计成测试用例。
因果图优势在于能够发现设计中存在的不足。
第五步:写测试用例。
判定表法
判定表法是分析和表达多逻辑条件下执行不同操作的情况工具。主要适用于多条件的内容组合与结果分析。它由以下几个内容组成:
- 条件桩(Condition Stub):列出了问题的所有条件。通常认为列出条件的次序无关紧要。
- 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排序顺序没有约束。
- 条件项(Condition Entry):列出针对它所列条件的取值。在所有可能情况下的真(1)假(0)值。
- 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
使用条件: 所有的条件桩在表中的位置和顺序互不影响;所有的动作桩的顺序不会因为条件顺序的变化而产生不同。 实现步骤: 1)识别出 操作条件(原因)和对应的动作(结果); 2)分析条件的条件项(组合数量):如果有n个条件,每个条件有成立和不成立两种情况,那么最后一共会有2n个数量; 3)简化和优化结果,排除一些不可能存在的情况。
判定表使用实例1 需求:订购单的检查
- 如果金额超过500元,又未过期,则发出批准单和提货单;
- 如果金额超过500元,但过期了,则不发批准单;
- 如果金额低于500元,则不论是否过期都发出批准单和提货单,在过期的情况下还需要发出通知单。
第一步:分析条件桩和动作桩、条件项和动作项
条件1 | 条件2 | 动作 |
---|
金额>500 | 未过期 | 发出批准单和提货单 | 金额>500 | 过期 | 不发批准单,发提货单 | 金额≤500 | 未过期 | 发出批准单和提货单 | 金额≤500 | 过期 | 发出批准单、提货单和通知单 |
金额超过500 | 时效过期 | 批准单 | 提货单 | 通知单 |
---|
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
第二步:列出条件桩、动作桩、条件项、动作项 第三步:对判定表进行简化和优化 由上表看出,只要未过期,就会发批准单、提货单。(在测试时间不充足的情况下,可以选择二者中的一个情况测试) 第四步:将判定表中的每一列(条件项和对应的动作项)作为测试用例的数据、操作以及对应的的预期结果
判定表使用实例2 该判定表为某杂志的阅读指南判定,指导读者能够良性阅读。请对该判定表进行优化,将重复内容去掉,并说明原因。 1)合并1,2,3,4。只要疲倦就休息 2)合并7,8.只要疲倦且不感兴趣就跳下一章
场景法
- 原理
- 现在的软件几乎都是用事件触发来控制流程的。测试时,可以生动地描绘出事件触发时地情景,有利于设计测试用例,同时使测试用例更容易理解和执行。
- 基本流:软件功能按照正确的事件流实现的一条正确流程。通常一个业务仅存在一个基本流,且基本流仅有一个起点和终点。(软件功能正确实现的流程)
- 备选流:除了基本流之外的各种支流,包含多种不同的情况。(基本功能流程之外的过程)
- 场景设计:
- 场景1:基本流
- 场景2:基本流 备选流1
- 场景3:基本流 备选流2
- 场景4:基本流 备选流1 备选流2
- ……
- 设计用例的步骤
- 根据说明,描述程序的基本流及各项备选流
- 根据基本流和各项备选流生成不同的场景
- 对每一个场景生成相应的测试用例
- 对生成的所有测试用例重新复审,去掉多余的测试用例
- 测试用例确定后,对每一个测试用例确定测试数据值
案例:ATM机的取款流程 基本流:
插卡
输入密码
选择取款服务
选择取款金额
等待出钞
取出卡片
包含备选流的过程:
Y
N
Y
N
输入密码
选择取款服务
选择取款金额
等待出钞
取出卡片
插卡
判断卡片
输入错误三次
冻结吞卡
正交实验法
-
原理 正交实验法就是利用 排列整齐的表——正交表 来对试验进行整体设计、综合比较、统计分析,实现通过少数的实验次数找到较好的生产条件,以达到最好效果。(由日本统计学家发明) 这种试验设计法是从大量的试验点中挑选适量的具有代表性的点,利用已经造好的表格——正交表来安排试验并进行数据分析的方法。 -
核心概念 1)试验因素(因子)、因素:影响实验结果的量 2)水平:每一个因素的不同取值(状况) 3)正交表特点:每列中不同数字出现的次数相等;任意两列组成的数字对出现的次数相等 -
正交实验法实现步骤 1)分析所有对结果有影响的因素。从多个角度和方式进行分析(不要放过文本框、按钮等需求中提及或者没有提及的) 2)分析每个因素的水平数量。充分利用等价类、边界值(需求中说明和未说明的都要分析) 3)选择正交表。只有特定的因素数和水平数的组合才有对应的正交表。所以在现实中用到的时候,找最贴近的正交表(正交表的因素数和水平数一般要大于实际的因素数和水平数) -
正交实验法表示
- 正交表:一般正交表记为 L n(m k)
- n:试验次数,m:水平数 ,k:因素数
- 仅适用于每一个因素的水平数都相同的正交表
-
实际案例
因素 | 操作方式 | 温度(℃) | 洗涤时间(min) |
---|
| A | 60 | 15 | | B | 80 | 20 | | C | 100 | 25 |
完全排列组合:3 * 3 * 3 = 27 使用正交实验助手:latin、blend,设计正交实验(3水平4因素9次实验) 生成正交实验计划表。每一列中,同一个数字出现的次数相等(3次),任意两列中,同一个数字对出现的次数相等。
功能图法
功能图法又叫状态迁徙图。
- 来源:在遇到有事务流或由于某种条件成立导致状态改变的软件时,如何测试用例的设计就比较麻烦。
- 状态迁徙图法的目标:设计足够多的测试用例达到对系统状态的覆盖、状态-条件组合的覆盖以及状态迁移路径的覆盖。
- 以操作系统的进程调度算法为例:
状态名/序号 | A | B | C | D |
---|
空闲 | 1 | 1 | 1 | 1 | QQ号已输入 | | 2 | | 2 | 密码已输入 | | | 2 | | QQ号、密码已输入 | | | | 3 | QQ主界面 | | | | 4 | 退出 | 2 | 3 | 3 | |
设计用例的时候: 1)A列:从QQ的登录界面,直接点击关闭按钮, QQ登录退出 2)B列:从QQ的登录界面,先输入QQ号(状态变为QQ号已输入);再点击关闭按钮, QQ登录退出 3)C列:从QQ的登录界面,先输入密码(状态变为密码已输入);再点击关闭按钮, QQ登录退出 4)D列:从QQ的登录界面,先输入QQ号(状态变为QQ号已输入);再输入密码(状态变为QQ号、密码已输入),点击登录,状态就会变成QQ主界面
测试用例的设计争取达到:“大道至简,大巧若拙”。越自然越好 。
3.3 其他用例设计方法
测试大纲法
- 一种着眼于需求的方法。
- 为列出各种测试条件,将需求转换为大纲的形式(思维导图、树形结构)。
- 无需用例设计。一般从根节点开始分析,到叶节点为止。这样的一条路径就是一条测试用例。
- 一般用于快速的测试和过程记录。用例一般进行后补。
探索性测试法
- 基于经验和直觉的测试方法。
- 是计划内测试用例设计的补充。
- 探索性测试在执行前也需要设计测试用例。
猴子测试(随意测试)
- 没有测试用例(无意识行为)。
- 测试往往不真实。
- 不能达到一定覆盖率。
- 许多测试都是冗余的。
- 需要使用同样的随机数进行重建测试。
4 用例测试方法综合选择
- 首先进行等价类划分。
- 在任何情况下都必须使用边界子分析方法。
- 如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法和判定表驱动法。
- 对于参数配置类的软件,要用正交实验法选择较少的组合方式达到最佳效果。
- 状态迁徙图可以通过不同时期条件的有效性设计不同的测试数据。
- 对于业务流清晰的系统,可以用场景法贯穿整个测试案例过程。
- 可以用错误推测法追加一些测试用例
- 对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例
以某教育APP为例进行分析
-
启动页,需求如下: 1)读取版本更新信息。匹配当前APP与线上需要更新的APP版本是否一致; 2)读取用户信息。未登录用户,则不用获取。已登录用户,验证是否登录过期。 用例设计方法:采用场景法 设计场景: 1)APP的安装版本比最新版要低。启动就需要进行版本检测,并进行提示。 2)APP安装版本与最新版一样。默认检测过程成功。 3)APP启动检测用户登录状态,如果登录过期或者未登录,启动完成后直接跳转登录界面。 4)APP启动检测用户登录状态,如果登录信息有效,启动完成后直接跳转至首页界面。 -
登录界面,需求如下: 1)手机号:暂时只支持大陆手机; 2)验证码:长度为6位数字; 3)短信验证码文本内容:【正教】456712(正交验证码),30分钟内有效,为确保您账号安全,请勿把验证码告诉他人。感谢您关注正教! 4)登录按钮点击后,出现弹窗提示,显示1s后消失。 用例设计方法:等价类划分法、边界值分析法、因果图法 等价类划分法: 1)手机号的有效性。 2)验证码包含不符合要求的字符。 边界值分析法: 1)手机号超过/不足长度要求。 2)验证码超过/不足长度要求。 3)使用超过有效期的验证码。 4)弹窗提示超过或者不足1s。 因果图法: 1)提交数据时,网络中断,出现网络异常的提示。 2)提交数据时,服务端崩溃或者无法提供正常服务,有服务器报错提示或者等待提示。 3)提交数据时,手机号不符合要求(不存在),有手机号错误提示。 4)提交数据时,验证码输入超时或不是收到的验证码,有验证码错误提示。 -
课程内容页,需求如图所示: 用例设计方法:场景法、等价类划分法、边界值法 场景法,设计场景: 1)老师发布作业,学生提问。该课程今日有作业,有提问内容展示。 2)老师发布作业,学生没有提问。该课程今日有作业,无提问内容展示。 3)老师没有发布作业,学生提问。该课程今日没有作业,有提问内容展示。 4)老师发布没有作业,学生美哟提问。该课程今日没有作业,无提问内容展示。 等价类划分法、边界值法: 1)日期显示是否超出天数:2017年2月是否出现29日 2)日期显示是否重复: 3)日期显示是否前后连续: -
正交实验法较为特殊,一般用于系统设置页面,如下图所示:
|