第5章 测试技术案例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
保险金案例实践——黑盒测试
测试分析 这是针对单个功能函数级别的测试 没有明显的业务流程,直接选择边界值、等价类、决策表方法, 而不宜选择场景测试。 输入条件:投保人的年龄和投保人驾照上的当前分数,且存在 相互关联 输出条件: 保险费 是否吊销驾照 年龄系数 安全驾驶折扣 应选用边界值测试和基于决策表的测试方法来设计测试用例 系统输入与输出很不相似,但输出完全依赖输入计算得到
22
int insuranceMoney=-1;
23
if(score>0&&score<13){
24
int[] setting=calcSetting(age);
25
if(setting!=SETTINGS[0]){
26
int safeDrivingDiscount=0;
27
int ageCoefficient=setting[0];
4
保险金案例实践——黑盒测试
案例说明:保险金案例主要是为投保人计算其需要购买的车险, 一年度内的保险金计算公式为:
保险金 = 基本保险费率 × 年龄系数 – 安全驾驶折扣
基本保险费率为1000元/年 年龄系数和安全驾驶折扣见表 投保人必须是年满16岁,且不足80岁的人 投保人驾照上的分数初始为12分,每当违反交通规则时,将以整数
10
保险金案例实践——黑盒测试
边界值测试 3、测试用例: 根据单缺陷假设,可得到边界值测试用例的数
量为18×(6-1)+13 ×(6-1)=155个.
11
保险金案例实践——黑盒测试
边界值测试 完整的测试用例
12
保险金案例实践——黑盒测试
下表为年龄的一个测试数据25和分数的一 个测试数据9为例的测试用例设计
5
{8,5,200},{15,7,250}}
6 public static int[] calcSetting(int age){
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
33
}
34
}
35
return insuranceMoney;
36 }
37 }
38 }
24
保险金案例实践(白盒测试)
对calcSetting()方法的测试
• 代码走读 • 对判断的测试 • 对路径的测试 • 对变量的测试
25
保险金案例实践(白盒测试)
calcSetting()方法的判断节点有五个,可采用逻辑覆盖法 (判断覆盖、条件覆盖等),观察可知判断节点都是围 绕age展开的,因此,可以采取条件覆盖指标来设计测 试用例。
简单判定条件
ID
年 龄
{系数,门限分 数,安全驾驶
折扣}
age<1 6
age>=8 0
age <25
age< 35
age< 45
age< 60
BX-CX-001 15 {0,0,0}
T
F
FF
F
F
BX-CX-002 20 {28,11,50}
F
F
TF
F
F
BX-CX-003 30 {18,9,100}
F
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
11
20 }
13
15 14
16
18
20
29
6
71
72
8
9
1
1
0
1
13 12
6 public static int[] calcSetting(int age){
17
保险金案例实践——黑盒测试
基于整体输入域的等价类测试:若就整体输入域来进行等价 类划分时,则将整体输入域由一个年龄和分数构成的二元组 <年龄,分数>,其最大的有效等价类为NF={<年龄,分数 >|16≤年龄<80,且0<分数≤12}。
18
保险金案例实践——黑盒测试
测试小结
包含的功能点很单一,不涉及业务流程,但包含复 杂的输入/输出计算关系,需要针对输入域和输出 域进行关键数据的覆盖测试
观察代码规模和代码设计的质量对测试的难度 和工作量造成的影响
本章暂不涉及测试的实施,即如何将测试用例 转化为可执行的测试脚本
20
保险金案例实践(白盒测试)
被测代码说明 Java语言开发 创建了一个InsuranceCalculator类,主要包含 两个已知取值的属性 BASIC_ PREMIUM_RATE和 SETTINGS , 以 及 两 个 方 法 calcSetting() 和 calcInsurance(),重点在于方法(即函数)的测 试
23
1 package com.acmengnan.softwaretesting;
2 public class InstanceCalculator{
3 private static final int BASIC_PREMLUM_RATE=1000;
4 private static final int[] SETTINGS={{0,0,0},{28,11,,50},{18,9,100},{10,7,150},
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
13
12
14
15
16
18
20
28
6
7 9
8 10 12
这是一个仍然需要改进的流图
6 public static int[] calcSetting(int age){
7
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
8
保险金案例实践——黑盒测试
边界值测试 1、边界点
年龄(6个):16, 25, 35, 45, 60, 80; 分数(6个):0, 5, 7, 9, 11, 12
9
保险金案例实践——黑盒测试
F
FT
F
F
BX-CX-004 40 {10,7,150}
F
F
FF
T
F
BX-CX-005 52 {8,5,200}
F
F
FF
F
T
BX-CX-006 70 {15,7,250}
F
F
FF
F
F
BX-CX-007 80 {0,0,0}
F
T
FF
F
F
27
6
7 8
10
独立路径测试
9
11
6 public static int[] calcSetting(int age){
P有a的th条1:件6节7点1 )72 9 11 13 15 18 20(经过所
7
1
Path 2:6 71 8 20(在条件节点7执行分支8)
Path 3:6 72 8 20(在条件节点7执行分支8)
Path 4:6 行分支10)
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
15 14
16
18
结点71代表age<16
20
结点72代表age>=80
30
保险金案例实践(白盒测试)
对路径的测试
由于前面的流图中有6个分支结点,所以其环 6 路复杂度为7
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
边界值测试 2、测试数据
年龄 (18个):15, 16, 17, 24, 25, 26, 34, 35, 36, 44, 45, 46, 59, 60, 61, 79, 80, 81;
分数 (13个):-1, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
28
int scoreThreadshold=setting[1];
29
if(score>scoreThreadshold){
30
safeDrivingDiscount=setting[2];
31
}
32
insuranceMoney=(int)(BASIC_PREMLUM_RATE/10*ageCoefficient)-safeDrivingDiscount;
21
保险金案例实践(白盒测试)
测试分析 代码的实质是面向过程的设计 仍从白盒测试的角度来测试calcSetting()
和calcInsurance()
22
保险金案例实践(白盒测试)
测试工作包括 静态测试。阅读calcSetting()和 calcInsurance()方法的源代码,检查是否存在 明显缺陷,以及结构是否存在修改或优化的必 要 采用适当的覆盖指标(如判断覆盖、路径覆盖等 ),设计测试用例,执行动态白盒测试 选择重要的变量进行静态数据流的检查,补充 必要的测试
13
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
14
保险金案例实践——黑盒测试
基于决策表的测试 等价划分
15
保险金案例实践——黑盒测试
基于决策表的测试 决策表
16
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
为单位扣掉1分或若干分 如果投保人驾照上的当前分数高于门限分数(见表),则投保时可给
予其安全驾驶折扣,否则不给予其安全折扣,即其安全折扣为0. 如果投保人驾照上的当前分数被扣至达到甚至低于零分,则该投保
人的驾照被吊销 根据保险金的计算方式计算某投保人在一年度内应缴纳的保险金。
5
保险金案例实践——黑盒测试
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
ຫໍສະໝຸດ Baidu
21 public static int calcInsurance(int age,int score){
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
软件测试技术
第五章 测试技术案例
主要内容
5.1保险金案例实践——黑盒测试 5.2保险金案例实践——白盒测试
2
教学目标
1.理解黑盒测试在保险金案例实践的综合应用 2.理解白盒测试在保险金案例实践的综合应用
3
保险金案例实践——黑盒测试
内容提要 围绕一个案例展开黑盒测试实践,保险金案例是 函数级别的案例 采用多种黑盒测试方法设计测试用例,观察不同 规模的系统对测试方法的运用、测试工作量将产 生怎样的影响 本章不涉及测试的实施,即如何将测试用例转化 为可执行的测试脚本
7 if(age<16||age>=80) 9 else if(age<25) 11 else if(age<35) 13 else if(age<45) 15 else if(age<60) 共6个条件
26
保险金案例实践(白盒测试)
满足条件覆盖的测试用例
输 入
预期输出
该案例的测试用例设计以测试数据的选择为主,测 试重点在于如何选择典型数据来测试所有情况下的 计算,难点是如何高效地设计测试用例,达到测试 的完备和无冗余
该案例的测试应尽量考虑以自动化测试为主,可基 于单元测试工具辅助完成测试脚本开发
1199
保险金案例实践(白盒测试)
内容提要
围绕保险金案例和人寿保险金案例是两个相似 的函数级别案例
保险金案例实践——黑盒测试
测试分析 这是针对单个功能函数级别的测试 没有明显的业务流程,直接选择边界值、等价类、决策表方法, 而不宜选择场景测试。 输入条件:投保人的年龄和投保人驾照上的当前分数,且存在 相互关联 输出条件: 保险费 是否吊销驾照 年龄系数 安全驾驶折扣 应选用边界值测试和基于决策表的测试方法来设计测试用例 系统输入与输出很不相似,但输出完全依赖输入计算得到
22
int insuranceMoney=-1;
23
if(score>0&&score<13){
24
int[] setting=calcSetting(age);
25
if(setting!=SETTINGS[0]){
26
int safeDrivingDiscount=0;
27
int ageCoefficient=setting[0];
4
保险金案例实践——黑盒测试
案例说明:保险金案例主要是为投保人计算其需要购买的车险, 一年度内的保险金计算公式为:
保险金 = 基本保险费率 × 年龄系数 – 安全驾驶折扣
基本保险费率为1000元/年 年龄系数和安全驾驶折扣见表 投保人必须是年满16岁,且不足80岁的人 投保人驾照上的分数初始为12分,每当违反交通规则时,将以整数
10
保险金案例实践——黑盒测试
边界值测试 3、测试用例: 根据单缺陷假设,可得到边界值测试用例的数
量为18×(6-1)+13 ×(6-1)=155个.
11
保险金案例实践——黑盒测试
边界值测试 完整的测试用例
12
保险金案例实践——黑盒测试
下表为年龄的一个测试数据25和分数的一 个测试数据9为例的测试用例设计
5
{8,5,200},{15,7,250}}
6 public static int[] calcSetting(int age){
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
33
}
34
}
35
return insuranceMoney;
36 }
37 }
38 }
24
保险金案例实践(白盒测试)
对calcSetting()方法的测试
• 代码走读 • 对判断的测试 • 对路径的测试 • 对变量的测试
25
保险金案例实践(白盒测试)
calcSetting()方法的判断节点有五个,可采用逻辑覆盖法 (判断覆盖、条件覆盖等),观察可知判断节点都是围 绕age展开的,因此,可以采取条件覆盖指标来设计测 试用例。
简单判定条件
ID
年 龄
{系数,门限分 数,安全驾驶
折扣}
age<1 6
age>=8 0
age <25
age< 35
age< 45
age< 60
BX-CX-001 15 {0,0,0}
T
F
FF
F
F
BX-CX-002 20 {28,11,50}
F
F
TF
F
F
BX-CX-003 30 {18,9,100}
F
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
11
20 }
13
15 14
16
18
20
29
6
71
72
8
9
1
1
0
1
13 12
6 public static int[] calcSetting(int age){
17
保险金案例实践——黑盒测试
基于整体输入域的等价类测试:若就整体输入域来进行等价 类划分时,则将整体输入域由一个年龄和分数构成的二元组 <年龄,分数>,其最大的有效等价类为NF={<年龄,分数 >|16≤年龄<80,且0<分数≤12}。
18
保险金案例实践——黑盒测试
测试小结
包含的功能点很单一,不涉及业务流程,但包含复 杂的输入/输出计算关系,需要针对输入域和输出 域进行关键数据的覆盖测试
观察代码规模和代码设计的质量对测试的难度 和工作量造成的影响
本章暂不涉及测试的实施,即如何将测试用例 转化为可执行的测试脚本
20
保险金案例实践(白盒测试)
被测代码说明 Java语言开发 创建了一个InsuranceCalculator类,主要包含 两个已知取值的属性 BASIC_ PREMIUM_RATE和 SETTINGS , 以 及 两 个 方 法 calcSetting() 和 calcInsurance(),重点在于方法(即函数)的测 试
23
1 package com.acmengnan.softwaretesting;
2 public class InstanceCalculator{
3 private static final int BASIC_PREMLUM_RATE=1000;
4 private static final int[] SETTINGS={{0,0,0},{28,11,,50},{18,9,100},{10,7,150},
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
13
12
14
15
16
18
20
28
6
7 9
8 10 12
这是一个仍然需要改进的流图
6 public static int[] calcSetting(int age){
7
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
8
保险金案例实践——黑盒测试
边界值测试 1、边界点
年龄(6个):16, 25, 35, 45, 60, 80; 分数(6个):0, 5, 7, 9, 11, 12
9
保险金案例实践——黑盒测试
F
FT
F
F
BX-CX-004 40 {10,7,150}
F
F
FF
T
F
BX-CX-005 52 {8,5,200}
F
F
FF
F
T
BX-CX-006 70 {15,7,250}
F
F
FF
F
F
BX-CX-007 80 {0,0,0}
F
T
FF
F
F
27
6
7 8
10
独立路径测试
9
11
6 public static int[] calcSetting(int age){
P有a的th条1:件6节7点1 )72 9 11 13 15 18 20(经过所
7
1
Path 2:6 71 8 20(在条件节点7执行分支8)
Path 3:6 72 8 20(在条件节点7执行分支8)
Path 4:6 行分支10)
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
15 14
16
18
结点71代表age<16
20
结点72代表age>=80
30
保险金案例实践(白盒测试)
对路径的测试
由于前面的流图中有6个分支结点,所以其环 6 路复杂度为7
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
边界值测试 2、测试数据
年龄 (18个):15, 16, 17, 24, 25, 26, 34, 35, 36, 44, 45, 46, 59, 60, 61, 79, 80, 81;
分数 (13个):-1, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
28
int scoreThreadshold=setting[1];
29
if(score>scoreThreadshold){
30
safeDrivingDiscount=setting[2];
31
}
32
insuranceMoney=(int)(BASIC_PREMLUM_RATE/10*ageCoefficient)-safeDrivingDiscount;
21
保险金案例实践(白盒测试)
测试分析 代码的实质是面向过程的设计 仍从白盒测试的角度来测试calcSetting()
和calcInsurance()
22
保险金案例实践(白盒测试)
测试工作包括 静态测试。阅读calcSetting()和 calcInsurance()方法的源代码,检查是否存在 明显缺陷,以及结构是否存在修改或优化的必 要 采用适当的覆盖指标(如判断覆盖、路径覆盖等 ),设计测试用例,执行动态白盒测试 选择重要的变量进行静态数据流的检查,补充 必要的测试
13
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
14
保险金案例实践——黑盒测试
基于决策表的测试 等价划分
15
保险金案例实践——黑盒测试
基于决策表的测试 决策表
16
保险金案例实践——黑盒测试
测试用例设计
边界值测试 基于决策表的测试 基于整体输入域的等价类测试
为单位扣掉1分或若干分 如果投保人驾照上的当前分数高于门限分数(见表),则投保时可给
予其安全驾驶折扣,否则不给予其安全折扣,即其安全折扣为0. 如果投保人驾照上的当前分数被扣至达到甚至低于零分,则该投保
人的驾照被吊销 根据保险金的计算方式计算某投保人在一年度内应缴纳的保险金。
5
保险金案例实践——黑盒测试
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
15
}else if(age<60){
16
return SETTINGS[4];
17
}else {
18
return SETTINGS[5];
19
}
20 }
ຫໍສະໝຸດ Baidu
21 public static int calcInsurance(int age,int score){
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
7
if(age<16||age>=80){
8
return SETTINGS[0];
9
}else if(age<25){
10
return SETTINGS[1];
11
}else if(age<35){
12
return SETTINGS[2];
13
}else if(age<45){
14
return SETTINGS[3];
软件测试技术
第五章 测试技术案例
主要内容
5.1保险金案例实践——黑盒测试 5.2保险金案例实践——白盒测试
2
教学目标
1.理解黑盒测试在保险金案例实践的综合应用 2.理解白盒测试在保险金案例实践的综合应用
3
保险金案例实践——黑盒测试
内容提要 围绕一个案例展开黑盒测试实践,保险金案例是 函数级别的案例 采用多种黑盒测试方法设计测试用例,观察不同 规模的系统对测试方法的运用、测试工作量将产 生怎样的影响 本章不涉及测试的实施,即如何将测试用例转化 为可执行的测试脚本
7 if(age<16||age>=80) 9 else if(age<25) 11 else if(age<35) 13 else if(age<45) 15 else if(age<60) 共6个条件
26
保险金案例实践(白盒测试)
满足条件覆盖的测试用例
输 入
预期输出
该案例的测试用例设计以测试数据的选择为主,测 试重点在于如何选择典型数据来测试所有情况下的 计算,难点是如何高效地设计测试用例,达到测试 的完备和无冗余
该案例的测试应尽量考虑以自动化测试为主,可基 于单元测试工具辅助完成测试脚本开发
1199
保险金案例实践(白盒测试)
内容提要
围绕保险金案例和人寿保险金案例是两个相似 的函数级别案例