第3讲 白盒测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代码示例
int a, b; double c; if (a>0 && b>0) c=c/a; if (a>1 || c>1) c=c+1; c=b+c;
程序流程图
1 M 3 N 5 P 4 J 2 K
1பைடு நூலகம்语句覆盖
p
基本思想
p 设计若干测试用例,运行被测程序 p 使程序中的每个可执行语句至少被执行一次
覆盖路径 P1(1-2-4) P3(1-3-4) P3(1-3-4) P4(1-3-5)
覆盖组合 1,5 2,6 3,7 4,8
覆盖了所有组合,但覆盖路径有限,1-2-5 没被覆盖
6 路径测试
p
设计所有的测试用例,来覆盖程序中的所有可能的 执行路径
覆盖路径 P1(1-2-4) P2(1-2-5) P3(1-3-4) P3(1-3-4) P4(1-3-5) 覆盖条件 T1,T2,T3,T4 T1,T2,F3,F4 T1,F2,T3,F4 F1,T2,F3,T4 F1,F2,F3,F4 覆盖组合 1,5 1,8 2,6 3,7 4,8
+c)>(a+b+c))
n 测试发现的错误
n n n
布尔操作符 布尔变量 布尔括弧
– 关系操作符 – 算术表达式
条件测试
分支测试 组合条件C, 测试C为 true和 false分支、以及每个条件 例如 C = (a>b) AND (c<d) 测试:
C TRUE, FALSE True AND True
7 基本路径测试
1. 依据代码绘制流程图 2. 确定流程图的圈复杂度
(cyclomatic complexity )
3. 确定线性独立路径的基本集 合( basis set ) 4. 设计测试用例覆盖每条基 本路径
示例代码
Procedure: process records 1. Do While records remain 2. Read record; 3. If record field 1 = 0 Then 4. store in buffer; 5. increment counter; 6. Else If record field 2 = 0 Then 7. reset counter; 8. Else store in file; 9. End If 10. End If 11. End Do End
回顾
n 至少满足以下5个规则之一才称为软件缺陷:
n
软件未实现产品说明书要求的功能 软件出现了产品说明书指明不应出现的错误 软件实现了产品说明书未提到的功能 软件未实现产品说明书虽未明确提及但应该实现的 目标 软件难以理解、不易使用、运行缓慢或者从测试员 的角度看最终用户会认为不好
n
n
分支测试 (示例)
void summ(int maxint, int n){ int result=0, i=0; if (n<0) n=-n; while (i<n && result<=maxint){ i++; result=result+i; } if(result<=maxint) cout<<result<<endl; else cout<<"超限"<<endl; }
但没有覆盖判定(decision) 条件覆盖不等于判定覆盖
yesresult<=maxint no
cout exit
cout
4 判定条件覆盖
p
是判定和条件覆盖设计方法的交集 p 设计足够的测试用例 p 使得判断条件中的所有条件可能取值至少执行 一次,同时,所有判断的可能结果至少执行一次
p
如果是顺序结构,就是让测试从头执行到尾
p
如果有分支、条件和循环
p 需要相应的方法,执行足够的测试覆盖全部语句
2 判定覆盖
p
基本思想
p 设计若干用例,运行被测程序 p 使得程序中每个判断的取真分支和取假分支至
少经历一次
p
判定覆盖也被称为分支覆盖
p 一个判定往往代表着程序的一个分支
条件测试 (示例)
start
( i = result = 0 ) :
n< 0 no yes n=-n
maxint N -1 1
i<N
result<=maxint
true
false true
i++; result=result+i; (i<n) && (result<=maxint) no yes
1 0 false 测试了所有条件
测试用例 取值条件 具体取值 条件 T1,T2, a>0,b>0, T3,T4 a>1,c>1 F1,F2, F3,F4 a<=0, b<=0, a<=1, c<=1 判定条件 M=.T. N=.T. M=.F. N=.F. 通过路径 P1(1-2-4)
输入:a=2,b=1,c=6 输出:a=2,b=1,c=5 输入:a=-1,b=-2,c=-3 输出:a=-1,b=-2,c=-5
V(G)
➨ V(G) = 区域数量(由节点、连线包围的区域,包括图形外部区域) ➨ V(G) = 连线数量 - 节点数量 + 2 ➨ V(G) = 简单可预测节点数量 + 1
流程图复杂度-例子
1
Region 1 Region 4
6 2,3 4,5
Region 2
7
Region 3 8
9 10
测试用例 输入:a=2,b=1,c=6 输出:a=2,b=1,c=5 输入:a=1,b=1,c=-3 输出:a=1,b=1,c=-2 输入:a=2,b=-1,c=-2 输出:a=2,b=-1,c=-2 输入:a=-1,b=2,c=3 输出:a=-1,b=2,c=6 输入:a=-1,b=-2,c=-3 输出:a=-1,b=-2,c=-5
黑盒子和白盒子!
客户需求
结构测试 逻辑驱动测试
输出
输入
事件驱动
功能测试 数据驱动测试
白盒测试的方法
1 语句覆盖 2 判定覆盖 3 条件覆盖 4 判定条件覆盖 5 条件组合覆盖 6 路径覆盖 7 基本路径测试法
白盒测试方法
n 逻辑覆盖 n 以程序的内部逻辑结构为基础 n 分为语句覆盖、判定覆盖、判定-条件覆盖、条件 组合覆盖等 n 基本路径测试 n 在程序控制流程的基础上,分析控制构造的环路 复杂性,导出基本可执行路径集合,从而设计测 试用例
分支测试 (示例)
start n< N <0 0 no result=0 yes i=0
测试覆盖全部语句:
n=-n;
maxint n 10 -1 -1 0
(n>=0)
i++; result=result+I; (i<n) && (result<=maxint) no yes yes
但没有覆盖所有分支;
则覆盖全部分支
result<=maxint no
cout exit
cout
3 条件覆盖
p
基本思想
p 设计若干测试用例,执行被测程序以后 p 使每个判断中每个条件的可能取值至少满足一次
(i<N) and (result<=maxint)
i<N
True False True False
result<=maxint
V(G)=4
11
确定线性独立的路径集合
• 独立路径
• 至少引入一系列新的处理语句或条件的任何路径 • 基本集 • 由独立路径构成的集合 • 由基本集导出的测试用例,保证每行代码语句 至少被执行一次 • 基本集不一定唯一
示例
(2)
测试用例 输入:a=2,b=1,c=6 输出:a=2,b=1,c=5 输入:a=2,b=-1,c=-2 输出:a=2,b=-1,c=-2 输入:a=-1,b=2,c=3 输出:a=-1,b=2,c=6 输入:a=-1,b=-2,c=-3 输出:a=-1,b=-2,c=-5
覆盖条件 T1,T2,T3, T4 T1,F2,T3, F4 F1,T2,F3, T4 F1,F2,F3, F4
T. And F., F. And T., F. And F.
a>b TRUE, FALSE c<d TRUE, FALSE
域测试
n 表达式 E1 rel-op E2, 测试 E1 ≧ ≦ = < > ≠ E2
n n n
如果E1 和 E2 正确,发现rel-op的错误 发现E1 或 E2的错误,全面分析它们的不同 如果某表达式含有n个变量,则 需要进行2n 测试
result<=maxint no
cout exit
cout
分支测试 (示例)
start n< N <0 0 no result=0 yes i=0 n=-n;
用例采取:
maxint N 10 0 3 -1
i++; result=result+I; (i<n) && (result<=maxint) no yes yes
条件测试
目标: 保证测试到每个逻辑条件取值为 true 和 false 简单条件:
(a rel-op b) where rel-op={<, ≤, =, ≠, ≥, >} (和 NOT连用), 即 a≤b; NOT(a≤b) (c<d)
组合条件: 由 AND, OR连接的多个简单条件,即(a>b) AND 关系表达式: (E1 rel-op E2) 其中 E1 和 E2 是算术表达式,即((a*b
Document)
3. 软件规格说明书 - Specifications 4. 技术设计文档 – Technical Design Docs 5. 测试文档 Test Documents 6. 在线帮助 - Online help 7. 产品发布注释 - Release Notes / Read Me 8. 产品软件包 - Release packages
目标/特性
软件测试方法和技术
第2版
第2讲 白盒测试
陈君
f1chencq@gmail.com
方法论和具体方法!
p 在测试中有许多对立统一体 p 白盒测试和黑盒测试 p 静态测试和动态测试 p 自动化测试和手工测试 p 软件测试的方法论来源于软件工程的方法论 p 有面向对象的开发方法,就有面向对象的测试方法 p 有敏捷方法,就有和敏捷方法对应的测试方法
示例 – 流程图
1 2 3 6 8 9 11 10 7 4 5
V(G) = 4
基本路径测试:流程图简化
1
2,3 6 4,5
8
7
9 10
11
流程图的圈复杂度
圈复杂度(Cyclomatic complexity) 代码逻辑复杂度的度量,提供了被测代码的路径数 复杂度越高,出错的概率越大
modules
回顾
软件测试是由“验证(Verification)”和“有效性确 认(Validation)”活动构成的整体
n 验证
n 是检验软件是否已正确地实现了产品规
格书所定义的系统功能和特性
n 有效性确认
n 是确认所开发的软件是否满足用户真正
需求的活动。
回顾
1. 客户需求 - Customer Requirements 2. 市场需求文档 - MRD (Marketing Requirement
n
n
回顾
在真正的程序测试之前,通过审查、评审会可以发现更多的缺陷。 规格说明书的缺陷会在需求分析审查、设计、编码、测试等过程中会 逐步发现,而不能在需求分析一个阶段发现
回顾
测试阶段或层次
验收测试 系统测试 集成测试 单元测试 功能测试 强壮性测试 性能测试 适用性测试 安全性测试 可靠性测试 方法 白盒测试 黑盒测试
P4(1-3-5)
3.1.5 条件组合测试
p
基本思想 p 设计足够的测试用例 p 使得判断中每个条件的所有可能至少出现一次, 并且每个判断本身的判定结果也至少出现一次。 与条件覆盖的差别 p 不是简单地要求每个条件都出现“真”与“假” 两种结果 p 要求让这些结果的所有可能组合都至少出现一次
p
示例
(1)
组合编号 覆盖条件取值 1 2 3 4 5 6 7 8 T1,T2 T1,F2 F1,T2 F1,F2 T3,T4 T3,F4 F3,T4 F3,F4
判 定 条 件 取 判定-条件组合 值 M=.T. a>0,b>0,M取真 M=.F. a>0,b<=0,M取假 M=.F. a<=0,b>0,M取假 M=.F. a<=0,b<=0,M取假 N=.T. a>1,c>1,N取真 N=.T. a>1,c<=1,N取真 N=.T. a<=1,c>1,N取真 N=.F. a<=1,c<=1,N取假