1. 组合测试用例设计技术
- 指出等价类划分法和边界值分析法通常假设输入变量相互独立,但实际情况中变量间可能存在关联。
- 全面测试:覆盖所有输入变量的所有可能组合,测试用例数量随输入变量的增加而指数增长。
- 全面测试需要对所有输入的各个取值之间的各种组合情形均进行相应的测试。
- 对于软件测试而言,假设被测功能有m个输入,且每个输入有多个离散但有限的取值N1、N2……Nm(其中Ni的值可以不等,1≤i≤m),为了覆盖输入参数的全部取值组合,需要N1*N2…Nm个测试用例。
- 单因素覆盖:确保每个输入变量的所有取值至少被测试一次。
- 正交试验法:通过正交表减少测试用例数量,同时保证各因素各水平的均衡测试。
2. 正交试验法
- 适用于多因素多水平的测试场景,通过选择代表性的测试组合来减少测试用例总数。
- 引入Galois理论,选择适量的、有代表性的测试点。
- 正交表Ln(tc)的使用,例如L4(23)、L8(27)等,用于设计高效的测试用例。
-
序号
x1
x2
x3
x4
1
3
2
3
1
2
3
3
1
2
3
2
1
3
2
4
2
3
2
1
5
2
2
1
3
6
1
3
3
3
7
1
1
1
1
8
3
1
2
3
9
1
2
2
2
3. 两两组合
- 减少测试用例数量,同时确保参数取值两两组合的覆盖。
-
测试用例序号
x1
x2
x3
1
a1
b1
c1
2
a1
b2
c2
3
a2
b1
c2
4
a2
b2
c2
5
a2
b2
c1
6
a3
b2
c1
7
a3
b2
c2
8
a3
b1
c2
-
4. 具有约束关系的组合测试
- 软约束和硬约束在测试设计中的影响,以及如何处理这些约束关系。
5. 场景法
- 模拟用户操作软件时的场景,主要用于测试系统的业务流程。
- 用例场景用来描述用例流经的路径,从开始到结束遍历整条路径上所有的基本流和备选流。
- 基本流:按照正确的业务流程实现的一条操作路径(模拟正确的操作流程)。
- 备选流:导致程序出现错误的操作流程(模拟错误的操作流程)。
- 描述基本流和备选流,设计测试用例以遍历软件系统功能。
- 场景1:基本流
- 场景2:基本流 备选流1
- 场景3:基本流 备选流1 备选流2
- 场景4:基本流 备选流3
- 场景5:基本流 备选流3 备选流1
- 场景6:基本流 备选流3 备选流1 备选流2
- 场景7:基本流 备选流4
- 场景8:基本流 备选流3 备选流4
6. 场景法实例分析
- 以ATM机取款为例,展示了如何使用场景法设计测试用例。
-
步骤编号
基本流
1
插入银行卡:客户将银行卡插入ATM机的读卡器
2
验证银行卡:ATM机从银行卡的芯片中读取账户代码,并检查它是否属于可以接受的银行卡
3
输入密码:ATM机要求客户输入密码
4
验证密码:确定该密码是否正确
5
进入ATM机主界面:ATM机显示各种操作选项
6
取款并选择金额:客户选择“取款”,并选择取款金额
7
ATM机验证:ATM机验证账户余额、当日总取款金额等是否满足要求,验证ATM机内现金是否够用
8
更新账户余额、出钞:验证成功,更新账户余额,输出现金,提示用户收取现金
9
返回操作主界面
实验
一 实验目的:
1、理解组合测试的优缺点;
2、掌握组合测试用例设计技术;
3、掌握场景法测试。
二 实验环境
1、Windows操作系统计算机;
三 实验准备
1、理解黑盒测试的定义;
2、组合测试的不同分类;
3、场景法基本流和备选流的理解。
四 实验内容
(一)现对网上蛋糕商城进行兼容性测试,主要从系统的运行平台、浏览器、代理服务器、网络协议等参数进行测试。各参数信息如表1-1所示:
表1-1 参数信息
操作系统 | 浏览器 | 代理服务器 | 网络协议 |
Windows XP | IE | Squid | Http |
Windows 7 | FireFox | CCProxy | UDP |
Ubuntu | Safari | Nginx | TCP |
(1)根据以上参数信息,要做全面覆盖的话,一共需要多少条测试用例。
要进行全面覆盖测试,需要考虑所有参数的所有可能组合。给定的参数有4个,每个参数有2个值,因此总的测试用例数为 24=1624=16 条。
(2)根据以上参数信息,请写出满足单因素覆盖的测试用例。
编号 | 测试用例 |
编号 | 操作系统 | 浏览器 | 代理服务器 | 网络协议 |
---|---|---|---|---|
T1 | Windows XP | IE | Squid | Http |
T2 | Windows 7 | FireFox | CCProxy | UDP |
T3 | Ubuntu | Safari | Nginx | TCP |
单因素覆盖意味着每个参数的所有值至少在一条测试用例中出现一次。
(3)请使用正交实验法,选择合适的正交表,写出测试用例。
编号 | 测试用例 |
使用正交实验法,我们可以选择合适的正交表来减少测试用例的数量。对于4个参数两水平的情况,我们可以使用L4(2^3)或L16(4^5)等正交表。这里我们选择L4(2^3)正交表,因为它提供了4个测试用例,每个用例代表不同的参数组合。
以下是根据L4(2^3)正交表设计的测试用例示例:
序号 | OS | Browser | Proxy | Protocol |
---|---|---|---|---|
T1 | XP | IE | Squid | Http |
T2 | 7 | FireFox | CCProxy | UDP |
T3 | Ubuntu | Safari | Nginx | TCP |
T4 | XP | FireFox | Nginx | UDP |
说明:
- OS: 操作系统 (Windows XP, Windows 7, Ubuntu)
- Browser: 浏览器 (IE, FireFox, Safari)
- Proxy: 代理服务器 (Squid, CCProxy, Nginx)
- Protocol: 网络协议 (Http, UDP, TCP)
正交表的每一列代表一个参数,每一行代表一个测试用例。在这个L4(2^3)表中,我们有4个测试用例,每个参数的两个水平都被均匀地分布在测试用例中,确保了每个参数的每个水平都与其他参数的每个水平至少组合一次,从而减少了测试用例的总数,同时保持了测试的全面性。
常用正交表
L4(23) 试验号 列号 1 2 3 1 1 1 1 2 1 2 2 3 2 1 2 4 2 2 1 L8(27) 试验号 列号 1 2 3 4 5 6 7 1 1 1 1 1 1 1 1 2 1 1 1 2 2 2 2 3 1 2 2 1 1 2 2 4 1 2 2 2 2 1 1 5 2 1 2 1 2 1 2 6 2 1 2 2 1 2 1 7 2 2 1 1 2 2 1 8 2 2 1 2 1 1 2 L12(211) 试验号 列号 1 2 3 4 5 6 7 8 9 10 11 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2 2 2 2 2 3 1 1 2 2 2 1 1 1 2 2 2 4 1 2 1 2 2 1 2 2 1 1 2 5 1 2 2 1 2 2 1 2 1 2 1 6 1 2 2 2 1 2 2 1 2 1 1 7 2 1 2 2 1 1 2 2 1 2 1 8 2 1 2 1 2 2 2 1 1 1 2 9 2 1 1 2 2 2 1 2 2 1 1 10 2 2 2 1 1 1 1 2 2 1 2 11 2 2 1 2 1 2 1 1 1 2 2 12 2 2 1 1 2 1 2 1 2 2 1 L16(215) 试验号 列号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2 4 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 5 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 6 1 2 2 1 1 2 2 2 2 1 1 2 2 1 1 7 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 8 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 9 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 10 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 11 2 1 2 2 1 2 1 1 2 1 2 2 1 2 1 12 2 1 2 2 1 2 1 2 1 2 1 1 2 1 2 13 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 14 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 15 2 2 1 2 1 1 2 1 2 2 1 2 1 1 2 16 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 L9(34) 试验号 列号 1 2 3 4 1 1 1 1 1 2 1 2 2 2 3 1 3 3 3 4 2 1 2 3 5 2 2 3 1 6 2 3 1 2 7 3 1 3 2 8 3 2 1 3 9 3 3 2 1 L18(37) 试验号 列号 1 2 3 4 5 6 7 1 1 1 1 1 1 1 1 2 1 2 2 2 2 2 2 3 1 3 3 3 3 3 3 4 2 1 1 2 2 3 3 5 2 2 2 3 3 1 1 6 2 3 3 1 1 2 2 7 3 1 2 1 3 2 3 8 3 2 3 2 1 3 1 9 3 3 1 3 2 1 2 10 1 1 3 3 2 2 1 11 1 2 1 1 3 3 2 12 1 3 2 2 1 1 3 13 2 1 2 3 1 3 2 14 2 2 3 1 2 1 3 15 2 3 1 2 3 2 1 16 3 1 3 2 3 1 2 17 3 2 1 3 1 2 3 18 3 3 2 1 2 3 1 L27(313) 试验号 列号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 2 2 3 1 1 1 1 3 3 3 3 3 3 3 3 3 4 1 2 2 2 1 1 1 2 2 2 3 3 3 5 1 2 2 2 2 2 2 3 3 3 1 1 1 6 1 2 2 2 3 3 3 1 1 1 2 2 2 7 1 3 3 3 1 1 1 3 3 3 2 2 2 8 1 3 3 3 2 2 2 1 1 1 3 3 3 9 1 3 3 3 3 3 3 2 2 2 1 1 1 10 2 1 2 3 1 2 3 1 2 3 1 2 3 11 2 1 2 3 2 3 1 2 3 1 2 3 1 12 2 1 2 3 3 1 2 3 1 2 3 1 2 13 2 2 3 1 1 2 3 2 3 1 3 1 2 14 2 2 3 1 2 3 1 3 1 2 1 2 3 15 2 2 3 1 3 1 2 1 2 3 2 3 1 16 2 3 1 2 1 2 3 3 1 2 2 3 1 17 2 3 1 2 2 3 1 1 2 3 3 1 2 18 2 3 1 2 3 1 2 2 3 1 1 2 3 19 3 1 3 2 1 3 2 1 3 2 1 3 2 20 3 1 3 2 2 1 3 2 1 3 2 1 3 21 3 1 3 2 3 2 1 3 2 1 3 2 1 22 3 2 1 3 1 3 2 2 1 3 3 2 1 23 3 2 1 3 2 1 3 3 2 1 1 3 2 24 3 2 1 3 3 2 1 1 3 2 2 1 3 25 3 3 2 1 1 3 2 3 2 1 2 1 3 26 3 3 2 1 2 1 3 1 3 2 3 2 1 27 3 3 2 1 3 2 1 2 1 3 1 3 2 L16(45) 试验号 列号 1 2 3 4 5 1 1 1 1 1 1 2 1 2 2 2 2 3 1 3 3 3 3 4 1 4 4 4 4 5 2 1 2 3 4 6 2 2 1 4 3 7 2 3 4 1 2 8 2 4 3 2 1 9 3 1 3 4 2 10 3 2 4 3 1 11 3 3 1 2 4 12 3 4 2 1 3 13 4 1 4 2 3 14 4 2 3 1 4 15 4 3 2 4 1 16 4 4 1 3 2 L32(49) 试验号 列号 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 2 2 2 2 2 3 1 3 3 3 3 3 3 3 3 4 1 4 4 4 4 4 4 4 4 5 2 1 1 2 2 3 3 4 4 6 2 2 2 1 1 4 4 3 3 7 2 3 3 4 4 1 1 2 2 8 2 4 4 3 3 2 2 1 1 9 3 1 2 3 4 1 2 3 4 10 3 2 1 4 3 2 1 4 3 11 3 3 4 1 2 3 4 1 2 12 3 4 3 2 1 4 3 2 1 13 4 1 2 4 3 3 4 2 1 14 4 2 1 3 4 4 3 1 2 15 4 3 4 2 1 1 2 4 3 16 4 4 3 1 2 2 1 3 4 17 1 1 4 1 4 2 3 2 3 18 1 2 3 2 3 1 4 1 4 19 1 3 2 3 2 4 1 4 1 20 1 4 1 4 1 3 2 3 2 21 2 1 4 2 3 4 1 3 2 22 2 2 3 1 4 3 2 4 1 23 2 3 2 4 1 2 3 1 4 24 2 4 1 3 2 1 4 2 3 25 3 1 3 3 1 2 4 4 2 26 3 2 4 4 2 1 3 3 1 27 3 3 1 1 3 4 2 2 4 28 3 4 2 2 4 3 1 1 3 29 4 1 3 4 2 4 2 1 3 30 4 2 4 3 1 3 1 2 4 31 4 3 1 2 4 2 4 3 1 32 4 4 2 1 3 1 3 4 2
(4)使用PICT工具,写出符合两两组合覆盖标注的测试用例。
编号 | 测试用例 |
两两组合覆盖意味着每对参数的组合至少在一条测试用例中出现一次。以下是符合两两组合覆盖标准的测试用例示例:
编号 | 操作系统 | 浏览器 | 代理服务器 | 网络协议 |
---|---|---|---|---|
T1 | Windows XP | IE | Squid | Http |
T2 | Windows 7 | FireFox | Squid | Http |
T3 | Ubuntu | Safari | Squid | Http |
T4 | Windows XP | IE | CCProxy | UDP |
T5 | Windows 7 | FireFox | CCProxy | UDP |
T6 | Ubuntu | Safari | CCProxy | UDP |
T7 | Windows XP | IE | Nginx | TCP |
T8 | Windows 7 | FireFox | Nginx | TCP |
(二)场景法是黑盒测试中重要的测试用例设计方法。目前多数软件系统都是用事件触发来控制业务流程,事件触发时的情景便形成了场景,场景的不同触发顺序构成用例。场景法通过场景描述业务流程(包括基本流(基本流程)和备选流(分支流程)),设计用例遍历软件系统功能,验证其正确性。
下图为简化的网上蛋糕商城购物过程的基本业务流程,业务的基本流和备选流。
蛋糕商城购物业务流程图
(1)填写表1-1中表述的基本流和备选流,使用场景法设计测试场景。基本流和备选流用对应的字母编号表示。
表1-1 网上蛋糕商城购物的基本流和备选流
业务流 | 编号 | 描述说明 | |
基本流 | A | ||
B | |||
C | |||
D | |||
E | |||
备选流 | F | ||
G | |||
H | |||
I | |||
J |
业务流 | 编号 | 描述说明 |
---|---|---|
基本流 | A | 用户访问商城网站 |
B | 用户选择蛋糕并加入购物车 | |
C | 用户点击购物车进行结算 | |
D | 用户选择支付方式并支付 | |
E | 支付成功后,购物成功 | |
备选流 | F | 商品缺货 |
G | 用户登录时密码不正确 | |
H | 用户登录时账户不存在 | |
I | 用户支付时余额不足 | |
J | 用户发现购物车为空 |
(1)用表1-1中表述的基本流和备选流,使用场景法设计测试场景。基本流和备选流用表1-1中对应的字母编号表示。
场景描述 | 基本流 | 备选流 |
场景描述 | 基本流 | 备选流 |
---|---|---|
场景1: 用户正常购买流程 | A-B-C-D-E | |
场景2: 商品缺货处理 | A-B-F | |
场景3: 用户登录失败 - 密码错误 | A-G | |
场景4: 用户登录失败 - 账户不存在 | A-H | |
场景5: 用户支付失败 - 余额不足 | A-B-C-D-I | |
场景6: 用户发现购物车为空 | A-J |
(2)下表给出了测试用例名称,请将表中的输入条件和预期输出补充完整。
编号 | 用例名称 | 输入条件 | 预期输出 |
1 | |||
2 | |||
3 | |||
4 | |||
5 |
编号 | 用例名称 | 输入条件 | 预期输出 |
---|---|---|---|
1 | 正常购买蛋糕 | 用户正常访问网站,选择蛋糕,支付 | 显示支付成功页面,订单状态更新为已完成 |
2 | 商品缺货提示 | 用户选择缺货蛋糕 | 显示商品缺货提示,建议选择其他商品 |
3 | 登录失败 - 密码错误 | 用户输入错误密码 | 显示密码错误提示,要求重新输入密码 |
4 | 登录失败 - 账户不存在 | 用户输入不存在的账户名 | 显示账户不存在提示,建议注册或找回账户 |
5 | 支付失败 - 余额不足 | 用户账户余额不足,尝试支付 | 显示余额不足提示,要求充值或更换支付方式 |
6 | 购物车为空 | 用户访问购物车,但未添加任何商品 | 显示购物车为空提示,建议继续选购商品 |
五 实验总结
(1)请简述全面组合测试的优缺点。
优点:
- 全面性:全面组合测试能够覆盖所有可能的输入组合,确保了测试的完整性。
- 发现缺陷:由于测试覆盖广泛,它能够揭示软件在各种输入条件下的潜在缺陷。
- 验证边界条件:可以确保边界条件和异常情况得到验证,增加发现边界错误的机会。
- 测试用例可复用:一旦创建,这些测试用例可以在软件的后续版本中重复使用。
缺点:
- 成本高:随着输入参数数量和每个参数取值的增加,测试用例的数量呈指数增长,导致测试成本显著增加。
- 时间消耗:执行大量测试用例需要更多时间,可能会延迟软件发布。
- 效率低下:许多测试用例可能在实际操作中很少出现或根本不出现,导致资源浪费。
- 维护困难:随着测试用例数量的增加,维护和更新测试用例变得更加困难。
(2)面对不同的测试任务,应该如何选择测试方法?
-
理解测试目标:首先明确测试的目的是什么,比如是功能测试、性能测试还是安全测试。
-
评估资源和时间:考虑可用的资源和时间限制,选择能够在预算和时间范围内完成的测试方法。
-
考虑风险和重要性:对于关键功能和高风险区域,可能需要更全面的测试方法,如全面组合测试或正交测试。
-
识别输入参数:分析软件的输入参数及其相互关系,选择适合参数特性的测试方法,如等价类划分、边界值分析或组合测试。
-
利用工具和自动化:使用测试工具和自动化测试可以提高测试效率,特别是在执行大量测试用例时。
-
测试方法的组合:在许多情况下,结合使用多种测试方法(如黑盒测试和白盒测试)可以更有效地发现缺陷。
-
迭代和适应性:根据测试结果和反馈,迭代测试过程并调整测试方法,以适应不断变化的需求和条件。