软件测试基础(六)用例设计方法之场景法
场景法主要用于测试软件的业务过程或业务逻辑,是一种基于软件业务和用户行为的测试方法。
1.概念:前几篇讨论的测试方法侧重于数据的选择,不涉及操作步骤,无法对涉及用户操作的动态执行过程进行覆盖测试。当在系统功能层面上进行测试时,不仅设计测试数据的问题,更侧重要的是如何从系统整个业务流程的全部角度对系统进行测试。场景法运用场景对系统的功能点或业务流程进行描述,然后设计测试用例,从而提高了对系统主要功能和业务流程的测试效果。场景法适合测试业务流程清晰的系统或功能。
2.基本流和备选流
- 基本流:采用黑直线表示,是经过用例测试的最简单路径,即无任何差错,程序从开始直接执行到结束的流程,往往是大多是用户最常使用的操作过程,体现了软件的主要功能与流程。通常,一项业务仅存在一个基本流,并且基本流仅有一个起点和一个终点
- 备选流:除基本流之外的各个支流。备选流可能从基本流开始,在某个特定的条件下执行,然后从新加入到基本流中(如备选流1,3);也可以起源于另一个备选流(如备选流2);还可以终止用例而不再加入到基本流中(如备选流2,4),反映了各种异常和错误情况。。
考虑用例从开始到结束所有可能的基本流和备选流的组合,可以确定不同的用例场景。例如,根据上图,可以确定以下用例场景。
- 场景1:基本流
- 场景2:基本流→备选流1
- 场景3:基本流→备选流1→备选流2
- 场景4:基本流→备选流3
- 场景5:基本流→备选流3→备选流1
- 场景6:基本流→备选流3→备选流1→备选流2
- 场景7:基本流→备选流4
- 场景8:基本流→备选流3→备选流4
基本流和备选流的区别:
基本流 | 备选流 | |
测试重要性 | 重要 | 次要 |
数量 | 一个 | 一个或多个 |
初始节点位置 | 系统初始状态 | 基本流或其他备选流 |
终止结点位置 | 系统终止状态 | 基本流或系统终止状态 |
是否构成完整的业务流程 | 是 | 否,仅为业务流程的执行片段 |
能否构成场景 | 能 | 否,需要基本流共同构成场景 |
3.场景法步骤及实例
根据场景法设计测试用例的步骤如下:
(1)根据说明,描述出程序的基本流及各个备选流;
(2)根据基本流和各个备选流生成不同的场景
(3)对每一个场景生成相应测试用例
(4)对生成的所有测试用例重新审查,去掉多余的测试用例。测试用例确定后,对每一个测试用例确定测试数据值
实例:某旅馆住宿系统支持网上预定业务。游客访问网站进行房间预定操作,选择预定日期、合适的房间后,进行在线预定。此时需要使用个人账号登陆系统,待登录成功后,进行定金支付。订金支付成功后,生成房间预订单,完成整个房间的预定流程。系统允许的预定期限为30天,订金为400元。
(1)确定基本流和备选流
类型 | 描述 | 类型 | 描述 |
基本流 | 选择预定日期 | 备选流1 | 预定日期超限 |
选择房间 | 备选流2 | 无空余房间 | |
登陆账户 | 备选流3 | 账户不存在 | |
订金支付 | 备选流4 | 密码错误 | |
产生预定订单 | 备选流5 | 用户账户余额不足 |
(2)根据基本流和备选流生成不同场景
- 场景1(成功预定房间):基本流
- 场景2(预定日期超限):基本流、备选流1
- 场景3(无空余房间):基本流、备选流2
- 场景4(账号不存在):基本流、备选流3
- 场景5(密码错误):基本流、备选流4
- 场景6(用户账号余额不足):基本流、备选流5
(3)用例设计
用例 | 场景/条件 | 预定日期 | 房间 | 账号 | 密码 | 账号余额 | 预期结果 |
1 | 场景1 | V | V | V | V | V | 成功预定,提示预定成功,余额减少 |
2 | 场景2 | I | n/a | n/a | n/a | n/a | 提示“预定日期无效”,重选预定日期 |
3 | 场景3 | V | I | n/a | n/a | n/a | 提示“预定日期房间已满”,重选预定日期 |
4 | 场景4 | V | I | I | n.a | n/a | 提示“账号不存在”,重新输入账号 |
5 | 场景5 | V | V | V | I | n/a | 提示“密码错误”,重新输入密码 |
6 | 场景6 | V | V | V | V | I | 提示“账号余额不足请充值” |
在上表中,无须为条件输入任何实际的数值,这样做的优点是只需要查看各条件的“V”和“I”的设定情况,如果某个条件不具备“I”的取值情况,则说明还未测试该条件无效的情况,提示测试用例还不够充足
(4)确定测试用例数据值(假定UserOne为已注册用户,密码为MyPass;UserTwo是未注册用户)
用例 | 场景/条件 | 预定日期 | 房间 | 账号 | 密码 | 账号余额 | 预期结果 |
1 | 场景1 | 一个有效日期 | 未满 | UserOne | MyPass | 800 | 成功预定 |
2 | 场景2 | 一个超出期限的日期 | n/a | n/a | n/a | n/a | 日期超限 |
3 | 场景3 | 一个有效日期 | 已满 | n/a | n/a | n/a | 无空余房间 |
4 | 场景4 | 一个有效日期 | 未满 | UserTwo | n/a | n/a | 账号错误 |
5 | 场景5 | 一个有效日期 | 未满 | UserTwo | NoPass | n/a | 密码错误 |
6 | 场景6 | 一个有效日期 | 未满 | UserOne | MyPass | 200 | 余额不足 |