白盒测试()—综合应用实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测试用例:测试输入 = ((-999),0,360),预期结果 = -999 2. 只执行一遍循环体
测试用例:测试输入 = ((180,-999),0,360),预期结果 = 180 3. 连续执行两遍循环体
测试用例:测试输入 = ((10,20,-999),0,360),预期结果 = 15
SWPU
1 9
2 0
2 1
2 4
2223
❖ 环复杂度 ▪ 闭合区域的数目 = 4 ▪ 二值判定节点个数 + 1 =3+1=4 ▪ 边的数目-节点的数目 + 2 = 14-12+2=4
2 5
2 6
2 7
2 9
3
3
0
1
3 2
SWPU
基本路径(方案1)
15-17
1 9
2 0
2 1
2 4
2223
2 5
2 6
2 7
11 b=b+1;
23
12 flag=0;
13 }
SWPU
else {
if (t2=1) then b=b-1; else a=a-2; flag--;
运用白盒测试方法综合实例
❖ 运用白盒测试技术设计下面代码的测试用例书P85
SWPU
SWPU
参考答案
❖ 设计步骤 1. 构造被测代码的控制流图,运用基本路径测试方法设计相关测试 用例 2. 针对代码中的各个逻辑条件,运用分支-条件测试方法设计相关 测试用例 3. 针对代码中的循环,运用循环测试方法设计相关测试用例 4. 合并前三步所得结果 5. 在第四步的基础上,根据被测对象的特点增加相关测试用例
逻辑覆盖
路径分析
循环、条
…
测试
件分支
白盒测试的基本概念
❖什么是白盒测试
▪ 把程序看成装在一 个透明的白盒子里, 程序的结构和处理 过程完全可见,按 照程序的内部逻辑 测试程序,以检查 程序中的每条通路 是否都能按照预先 要求正确工作。
SWPU
白盒测试应用策略
SWPU
❖ (1)在测试中,应尽量先使用工具进行静态结构分 析。
❖ (5)在不同的测试节点,测试的侧重点不同:在单元 测试阶段,以代码检查、逻辑覆盖为主;在集成测试 阶段,需要增加静态结构分析等;在系统测试阶段, 应根据黑盒测试的结果,采取相应的白盒测试。
SWPU
面对对象的白盒测试
❖ 类测试一般有两种主要的方式:功能性测试和结构性 测试,即对应于传统结构化软件的黑盒测试和白盒测 试。
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 4. 如果循环次数为n,执行m( m < n)遍循环体
测试用例:测试输入 = ((0..49,-999),0,360),预期结果 = 24.5 5. 如果循环次数为n,那么执行n -1遍循环体
❖ (2)测试中可采取先静态后动态的组合方式:先进 行静态结构分析、代码检查,再进行覆盖率测试。
❖ (3)利用静态分析的结果作为导引,通过代码检查 和动态测试的方式对静态发现结果进行进一步的确认, 使测试工作更为有效。
白盒测试应用策略
SWPU
❖ (4)覆盖率测试是白盒测试的重点,一般可使用基本 路径测试法达到语句覆盖标准;对于软件的重点模块, 应使用多种覆盖率标准衡量代码的覆盖率。
9
1 0
1
1
1
2
1 3
SWPU
基本路径(方案2)
1
❖ 基本路径和相应的测试用例
2
5. 1->2->3->4->5->6->8->2->10->12->13
3
6. 测试用例:
7. 测试输入 = ((380,-999),0,360),
4
8. 预期结果 = -999
5
6
7
8
9
1 0
1
1Baidu Nhomakorabea
1
2
1 3
SWPU
SWPU
补充测试用例
❖ 考虑到异常输出的出现频率,利用错误猜测再次增加
1. 测试输入 = ((a,-999),0,360),预期结果 = “输入错误” 2. 测试输入 = ((10,-999),a,360),预期结果 = “输入错误” 3. 测试输入 = ((10,-999),0,a),预期结果 = “输入错误”
2 7
2 9
3
3
0
1
3 2
SWPU
环复杂度(方案2)
1
❖ 环复杂度
2
▪ 闭合区域的数目 = 6
3
▪ 二值判定节点个数 + 1
4
=5+1=6
▪ 边的数目-节点的数目 + 2
5
= 17-13+2=6
6
7
8
9
1 0
1
1
1
2
1 3
SWPU
基本路径(方案2)
1 2 3 4 5 6
7
8
❖ 基本路径和相应的测试用例
分支-条件测试
❖ 需测试的逻辑条件
1. Do while (( value[i]!=-999) &&(inputNumber<100)) 2. if ((value[i]>=minimum) && (value[i]<=maximum)) 3. if validNumber > 0
分支-条件测试
❖ 分支和相应的测试用例
以复合条件为节点P79(方案1)
SWPU
15-17
1 9
2 0
2 1
2 4
2223
2 5
2 6
2 7
2 9
3
3
0
1
3 2
以简单条件为节点P80(方案2)
SWPU
①
② ④ ⑤ ⑦ ⑨⑧
⑩
1 3
③ ⑥
1 1 1 2
1 2 3 4 5 6
7
8
9
1 0
1
1
1
2
1 3
SWPU
环复杂度(方案1)
15-17
❖ 对于if语句仅使用分支-条件测试是否可以尽可能多地发现被测代码 的缺陷呢
▪ 可以等于边界点上的测试用例 1. 测试输入 = ((0,-999),0,360),预期结果 = 0 2. 测试输入 = ((360,-999),0,360),预期结果 = 360 ▪ 实际中,还可以采用 1. 走读的方法
SWPU
结果合并
❖ 合并的结果
8. 测试输入 = ((0..98,-999),0,360),预期结果 = 49.0 9. 测试输入 = ((0..99,-999),0,360),预期结果 = 49.5 10. 测试输入 = ((0..100,-999),0,360),预期结果 = 50
SWPU
补充测试用例
SWPU
基本路径(方案1)
15-17
1 9
2 0
2 1
2 4
2223
❖ 基本路径和相应的测试用例
3. 15-17->19->20->21->22-23->25->26->27>19->29->30->32
测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180
2 5
2 6
❖ 结构性测试对类中的方法进行测试,它把类作为一个 单元来进行测试。测试分为两层:第一层考虑类中各 独立方法的代码;第二层考虑方法之间的相互作用。
❖ 对于一个类的测试要保证类在其状态的代表集上能够 正确工作,构造函数的参数选择以及消息序列的选择 都要满足这一准则
SWPU
面对对象的白盒测试
❖ 方法的单独测试
2 9
3
3
0
1
3 2
❖ 基本路径和相应的测试用例
1. 15-17->19->29->31->32 (30-32?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999
2. 15-17->19->20->21->24->19->29->31->32 (30-32?)
测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999
2
1 3
SWPU
基本路径(方案2)
1 2 3 4 5 6
7
8
❖ 基本路径和相应的测试用例
3. 1->2->3->4->5->6->7->9->2->10->11->13 测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180 4. 1->2->3->4->5->8->2->10->12->13 测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999
1. 1->2->10->12->13(10-11?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999
2. 1->2->3->10->11->13 3. 测试用例 4. 测试输入 = ((0..100,-999),0,360), 5. 预期结果 = 50
9
1 0
1
1
1
▪ 结构性测试的第一层是考虑各独立的方法,这可 以与过程的测试采用同样的方法,两者之间最大 的差别在于方法改变了它所在实例的状态,这就 要取得隐藏的状态信息来估算测试的结果,传给 其它对象的消息被忽略,而以桩来代替,并根据 所传的消息返回相应的值,测试数据要求能完全 覆盖类中代码,可以用传统的测试技术来获取。
测试用例:测试输入 = ((0..98,-999),0,360),预期结果 = 49.0 6. 如果循环次数为n,那么执行n遍循环体
测试用例:测试输入 = ((0..99,-999),0,360),预期结果 = 49.5
SWPU
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 7. 测试用例:测试输入 = ((0..100,-999),0,360),预期结果 = 50
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-999),0,360),预期结果 = -999
SWPU
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 1. 直接跳过循环体
SWPU
面对对象的白盒测试
❖ 方法的综合测试
▪ 第二层要考虑一个方法调用本对象类中的其它方 法和从一个类向其它类发送信息的情况。单独测 试一个方法时,只考虑其本身执行的情况,而没 有考虑动作的顺序问题,测试用例中加入了激发 这些调用的信息,以检查它们是否正确运行了。 对于同一类中方法之间的调用,一般只需要极少 甚至不用附加数据,因为方法都是对类进行存取, 故这一类测试的准则是要求遍历类的所有主要状 态。
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-10,-999),0,360),预期结果 = -999 3. 测试输入 = ((380,,-999),0,360),预期结果 = -999
分支-条件测试
❖ 分支和相应的测试用例P89
SWPU
第4章 白盒测试方法
把程序看成装在一个透明的白盒子里,程序的结构和处理 呈现过程完全可见,按照程序的内部逻辑测试程序,以检 查程序中的每条通路是否都能按照预先要求正确工作。
SWPU
1
黑盒测试与白盒测试
2
逻辑覆盖测试
主
要
3
路径分析测试
内
4
分支条件测试、循环测试
容
5
其它测试类型
6
综合测试实例
SWPU 白盒测试的常用方法
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-999),0,360),预期结果 = -999 3. 测试输入 = ((0..100,-999),0,360),预期结果 = 50
分支-条件测试
❖ 分支和相应的测试用例P89
实例设计——实例2
SWPU
运用逻辑覆盖的方法测试程序 程序4-4:
1 If (x>1&& y=1) then 2 z=z*2 3 If (x=3|| z>1) then 4 y++;
运用逻辑覆盖的方法设计测试用例组,如下 表所示。
SWPU
实例设计——实例3
运用路径分析的方法测试程序
程序4-5:
SWPU
结果合并
❖ 合并的结果
1. 测试输入 = ((-999),0,360),预期结果 = -999 2. 测试输入 = ((-10,-999),0,360),预期结果 = -999 3. 测试输入 = ((180,-999),0,360),预期结果 = 180 4. 测试输入 = ((380,-999),0,360),预期结果 = -999 5. 测试输入 = ((0..100,-999),0,360),预期结果 = 49.5 6. 测试输入 = ((10,20,-999),0,360),预期结果 = 15 7. 测试输入 = ((0..49,-999),0,360),预期结果 = 24.5
1 main ()
2{ 3 int flag, t1, t2, a=0, b=0; 14 4 scanf (“%d, %d, %d\n”, 15
&flag, &t1, &t2);
16
5 while (flag>0)
17
6{
18
7 a=a+1;
19
8 if (t1=1)
20
9 then
21
10 {
22
测试用例:测试输入 = ((180,-999),0,360),预期结果 = 180 3. 连续执行两遍循环体
测试用例:测试输入 = ((10,20,-999),0,360),预期结果 = 15
SWPU
1 9
2 0
2 1
2 4
2223
❖ 环复杂度 ▪ 闭合区域的数目 = 4 ▪ 二值判定节点个数 + 1 =3+1=4 ▪ 边的数目-节点的数目 + 2 = 14-12+2=4
2 5
2 6
2 7
2 9
3
3
0
1
3 2
SWPU
基本路径(方案1)
15-17
1 9
2 0
2 1
2 4
2223
2 5
2 6
2 7
11 b=b+1;
23
12 flag=0;
13 }
SWPU
else {
if (t2=1) then b=b-1; else a=a-2; flag--;
运用白盒测试方法综合实例
❖ 运用白盒测试技术设计下面代码的测试用例书P85
SWPU
SWPU
参考答案
❖ 设计步骤 1. 构造被测代码的控制流图,运用基本路径测试方法设计相关测试 用例 2. 针对代码中的各个逻辑条件,运用分支-条件测试方法设计相关 测试用例 3. 针对代码中的循环,运用循环测试方法设计相关测试用例 4. 合并前三步所得结果 5. 在第四步的基础上,根据被测对象的特点增加相关测试用例
逻辑覆盖
路径分析
循环、条
…
测试
件分支
白盒测试的基本概念
❖什么是白盒测试
▪ 把程序看成装在一 个透明的白盒子里, 程序的结构和处理 过程完全可见,按 照程序的内部逻辑 测试程序,以检查 程序中的每条通路 是否都能按照预先 要求正确工作。
SWPU
白盒测试应用策略
SWPU
❖ (1)在测试中,应尽量先使用工具进行静态结构分 析。
❖ (5)在不同的测试节点,测试的侧重点不同:在单元 测试阶段,以代码检查、逻辑覆盖为主;在集成测试 阶段,需要增加静态结构分析等;在系统测试阶段, 应根据黑盒测试的结果,采取相应的白盒测试。
SWPU
面对对象的白盒测试
❖ 类测试一般有两种主要的方式:功能性测试和结构性 测试,即对应于传统结构化软件的黑盒测试和白盒测 试。
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 4. 如果循环次数为n,执行m( m < n)遍循环体
测试用例:测试输入 = ((0..49,-999),0,360),预期结果 = 24.5 5. 如果循环次数为n,那么执行n -1遍循环体
❖ (2)测试中可采取先静态后动态的组合方式:先进 行静态结构分析、代码检查,再进行覆盖率测试。
❖ (3)利用静态分析的结果作为导引,通过代码检查 和动态测试的方式对静态发现结果进行进一步的确认, 使测试工作更为有效。
白盒测试应用策略
SWPU
❖ (4)覆盖率测试是白盒测试的重点,一般可使用基本 路径测试法达到语句覆盖标准;对于软件的重点模块, 应使用多种覆盖率标准衡量代码的覆盖率。
9
1 0
1
1
1
2
1 3
SWPU
基本路径(方案2)
1
❖ 基本路径和相应的测试用例
2
5. 1->2->3->4->5->6->8->2->10->12->13
3
6. 测试用例:
7. 测试输入 = ((380,-999),0,360),
4
8. 预期结果 = -999
5
6
7
8
9
1 0
1
1Baidu Nhomakorabea
1
2
1 3
SWPU
SWPU
补充测试用例
❖ 考虑到异常输出的出现频率,利用错误猜测再次增加
1. 测试输入 = ((a,-999),0,360),预期结果 = “输入错误” 2. 测试输入 = ((10,-999),a,360),预期结果 = “输入错误” 3. 测试输入 = ((10,-999),0,a),预期结果 = “输入错误”
2 7
2 9
3
3
0
1
3 2
SWPU
环复杂度(方案2)
1
❖ 环复杂度
2
▪ 闭合区域的数目 = 6
3
▪ 二值判定节点个数 + 1
4
=5+1=6
▪ 边的数目-节点的数目 + 2
5
= 17-13+2=6
6
7
8
9
1 0
1
1
1
2
1 3
SWPU
基本路径(方案2)
1 2 3 4 5 6
7
8
❖ 基本路径和相应的测试用例
分支-条件测试
❖ 需测试的逻辑条件
1. Do while (( value[i]!=-999) &&(inputNumber<100)) 2. if ((value[i]>=minimum) && (value[i]<=maximum)) 3. if validNumber > 0
分支-条件测试
❖ 分支和相应的测试用例
以复合条件为节点P79(方案1)
SWPU
15-17
1 9
2 0
2 1
2 4
2223
2 5
2 6
2 7
2 9
3
3
0
1
3 2
以简单条件为节点P80(方案2)
SWPU
①
② ④ ⑤ ⑦ ⑨⑧
⑩
1 3
③ ⑥
1 1 1 2
1 2 3 4 5 6
7
8
9
1 0
1
1
1
2
1 3
SWPU
环复杂度(方案1)
15-17
❖ 对于if语句仅使用分支-条件测试是否可以尽可能多地发现被测代码 的缺陷呢
▪ 可以等于边界点上的测试用例 1. 测试输入 = ((0,-999),0,360),预期结果 = 0 2. 测试输入 = ((360,-999),0,360),预期结果 = 360 ▪ 实际中,还可以采用 1. 走读的方法
SWPU
结果合并
❖ 合并的结果
8. 测试输入 = ((0..98,-999),0,360),预期结果 = 49.0 9. 测试输入 = ((0..99,-999),0,360),预期结果 = 49.5 10. 测试输入 = ((0..100,-999),0,360),预期结果 = 50
SWPU
补充测试用例
SWPU
基本路径(方案1)
15-17
1 9
2 0
2 1
2 4
2223
❖ 基本路径和相应的测试用例
3. 15-17->19->20->21->22-23->25->26->27>19->29->30->32
测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180
2 5
2 6
❖ 结构性测试对类中的方法进行测试,它把类作为一个 单元来进行测试。测试分为两层:第一层考虑类中各 独立方法的代码;第二层考虑方法之间的相互作用。
❖ 对于一个类的测试要保证类在其状态的代表集上能够 正确工作,构造函数的参数选择以及消息序列的选择 都要满足这一准则
SWPU
面对对象的白盒测试
❖ 方法的单独测试
2 9
3
3
0
1
3 2
❖ 基本路径和相应的测试用例
1. 15-17->19->29->31->32 (30-32?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999
2. 15-17->19->20->21->24->19->29->31->32 (30-32?)
测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999
2
1 3
SWPU
基本路径(方案2)
1 2 3 4 5 6
7
8
❖ 基本路径和相应的测试用例
3. 1->2->3->4->5->6->7->9->2->10->11->13 测试用例: 测试输入 = ((180,-999),0,360), 预期结果 = 180 4. 1->2->3->4->5->8->2->10->12->13 测试用例: 测试输入 = ((-10,-999),0,360), 预期结果 = -999
1. 1->2->10->12->13(10-11?) 测试用例: 测试输入 = ((-999),0,360) 预期结果 = -999
2. 1->2->3->10->11->13 3. 测试用例 4. 测试输入 = ((0..100,-999),0,360), 5. 预期结果 = 50
9
1 0
1
1
1
▪ 结构性测试的第一层是考虑各独立的方法,这可 以与过程的测试采用同样的方法,两者之间最大 的差别在于方法改变了它所在实例的状态,这就 要取得隐藏的状态信息来估算测试的结果,传给 其它对象的消息被忽略,而以桩来代替,并根据 所传的消息返回相应的值,测试数据要求能完全 覆盖类中代码,可以用传统的测试技术来获取。
测试用例:测试输入 = ((0..98,-999),0,360),预期结果 = 49.0 6. 如果循环次数为n,那么执行n遍循环体
测试用例:测试输入 = ((0..99,-999),0,360),预期结果 = 49.5
SWPU
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 7. 测试用例:测试输入 = ((0..100,-999),0,360),预期结果 = 50
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-999),0,360),预期结果 = -999
SWPU
循环测试
❖ 需测试的循环条件
▪ Do while (( value[i]!=-999) &&(inputNumber<100)) 1. 直接跳过循环体
SWPU
面对对象的白盒测试
❖ 方法的综合测试
▪ 第二层要考虑一个方法调用本对象类中的其它方 法和从一个类向其它类发送信息的情况。单独测 试一个方法时,只考虑其本身执行的情况,而没 有考虑动作的顺序问题,测试用例中加入了激发 这些调用的信息,以检查它们是否正确运行了。 对于同一类中方法之间的调用,一般只需要极少 甚至不用附加数据,因为方法都是对类进行存取, 故这一类测试的准则是要求遍历类的所有主要状 态。
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-10,-999),0,360),预期结果 = -999 3. 测试输入 = ((380,,-999),0,360),预期结果 = -999
分支-条件测试
❖ 分支和相应的测试用例P89
SWPU
第4章 白盒测试方法
把程序看成装在一个透明的白盒子里,程序的结构和处理 呈现过程完全可见,按照程序的内部逻辑测试程序,以检 查程序中的每条通路是否都能按照预先要求正确工作。
SWPU
1
黑盒测试与白盒测试
2
逻辑覆盖测试
主
要
3
路径分析测试
内
4
分支条件测试、循环测试
容
5
其它测试类型
6
综合测试实例
SWPU 白盒测试的常用方法
SWPU
❖ 相应的测试用例 1. 测试输入 = ((180,-999),0,360),预期结果 = 180 2. 测试输入 = ((-999),0,360),预期结果 = -999 3. 测试输入 = ((0..100,-999),0,360),预期结果 = 50
分支-条件测试
❖ 分支和相应的测试用例P89
实例设计——实例2
SWPU
运用逻辑覆盖的方法测试程序 程序4-4:
1 If (x>1&& y=1) then 2 z=z*2 3 If (x=3|| z>1) then 4 y++;
运用逻辑覆盖的方法设计测试用例组,如下 表所示。
SWPU
实例设计——实例3
运用路径分析的方法测试程序
程序4-5:
SWPU
结果合并
❖ 合并的结果
1. 测试输入 = ((-999),0,360),预期结果 = -999 2. 测试输入 = ((-10,-999),0,360),预期结果 = -999 3. 测试输入 = ((180,-999),0,360),预期结果 = 180 4. 测试输入 = ((380,-999),0,360),预期结果 = -999 5. 测试输入 = ((0..100,-999),0,360),预期结果 = 49.5 6. 测试输入 = ((10,20,-999),0,360),预期结果 = 15 7. 测试输入 = ((0..49,-999),0,360),预期结果 = 24.5
1 main ()
2{ 3 int flag, t1, t2, a=0, b=0; 14 4 scanf (“%d, %d, %d\n”, 15
&flag, &t1, &t2);
16
5 while (flag>0)
17
6{
18
7 a=a+1;
19
8 if (t1=1)
20
9 then
21
10 {
22