软件测试课件-动态白盒测试(二)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TC4
1,1,1
满足条件
T1T2, T3T4 T1F2, T3F4 F1T2, F3T4 F1F2, F3F4
预测结果
x=3 x=2 x=3 x= 1
实际结果
7-5
覆盖强度分析
7-5
测试举例2
void func(int x, int y, int z) {
int k=0, j=0; if(x>3 && z<10){
7-5
测试原则
原则3:编写软件的组织不应当测试自己编写的程序 由于组织和项目经理总是希望保证进度,降低成本。 定量地衡量软件的可靠性极其困难,即便是合理规划 和实施的测试过程也可能被认为降低了完成进度和成 本目标的可能性,因此编程组织难以客观测试自己的 软件 具有和程序员相似的心理 由客观、独立的第三方进行测试更经济
原则4:应该彻底检查每个测试的执行结果 测试中发现的错误常常被遗漏
7-5
测试原则
原则5:测试用例的编写不仅应当根据有效和预期的输入 情况,而且也应当根据无效和未预料到的输入情况 测试软件时经常会忽略无效和未预料到的情况(使软件 缺乏鲁棒性) 在软件产品中突然暴露出来的许多问题是当程序以某些 新的或未预料到的方式运行时发现的 针对未预料到的和无效的输入情况的测试用例更能发现 问题
TCC1
1,0,3 F1 T2 F3 1 T1 F2 T3 F4 BE
ABE
TCD1 2,0,4 T1 T2 T3 T4 CE
ACE
TCD2 3,1,1 T1 F2 F3 F4 BD
ABD
·判定覆盖和条件覆盖是既不充分也不必要的关系。
7-5
判定/条件覆盖
用例编号 测试用例 满足条件 覆盖分支 通过路径 (a/b/x)
7-5
条件和判定分支
A
a>1 && b==0 Y NB
x=x/a C
a=2 || x>1
Y
x=x+1
ND
E
·框图中菱形框代表 了一条if语句,其中的 每一个子项被称作一 个条件;而Y和N(或 写做T和F)叫做对该 语句的判定分支。
7-5
流图转化
A
a>1 && b==0 Y NB
x=x/a C
a=2 || x>1
TC1
2,0,4 T1 T2 T3 T4 CE
ACE
TC2
1,1,1 F1 F2 F3 F4 BD
ABD
7-5
三种覆盖的关系
Condition
Decision / Condition Decision
7-5
条件组合覆盖
用例编号 测试用例 (a/b/x)
TC1
2,0,4
TC2
2,1,1
TC3
1,0,2
While(MaxNum>0) {
if(Type==10) x=y*2;
elseif(Type==100) x=y+10;
else x=y+20;
MaxNum--; }
7-5
测试原则
原则1:测试用例中一个必需部分是对预期输出或结果的 定义 如果没有定义预期结果,即没有比较标准
原则2:程序员应当避免测试自己编写的程序 心理上,程序员很难对自己建立起来的程序进行破坏 性审查 程序员对规范的错误理解会导致程序错误,同样的误 解导致无法测试这样的错误 调试由程序员本人进行则更有效
软件测试的分类
静态黑盒测试:产品说明书检查 动态黑盒测试:戴上眼罩检测 静态白盒测试:代码检查和评审 动态白盒测试:X光透视检测
Revision
动态白盒测试方法
·语句覆盖(Statement Coverage) ·判定(分支)覆盖(Decision Coverage) ·条件覆盖(Condition Coverage) ·判定/条件覆盖(Decision/ Condition Coverage) ·条件组合覆盖(Multiple Condition Coverage) ·决策路径覆盖(Path Coverage)
While(MaxNum>0) {
if(Type==10) x=y*2;
elseif(Type==100) x=y+10;
else x=y+20;
MaxNum--; }
7-5
测试举例4
·针对右侧C语言程序段, 对于(MaxNum, Type)取值, 至少需要多少个测试用例能 满足判定覆盖的要求?
注:除了if表示分支以外, 循环中也会隐含有分支判定 的内容。
原则10:软件测试是一项极富创造性、极具智力挑战性 的工作 测试软件的创造性很可能超过了开发软件所需的创造 性 发现有效的测试用例是一项创造性的工作
7-5
回归测试:当程序其他部件发生更动后重新执行之前保 留的测试用例
原则8:计划测试工作时不应默许假定不会发现错误 错误的测试定义:测试是证明程序正确运行的过程 正确的测试定义:测试是为发现错误而执行程序的过程
7-5
测试原则
原则9:程序某部分检查出很多错误时要警惕更多错误 残存错误的可能性与已检出错误可能性之间成正比 错误总是倾向于聚集存在,在一个程序中,某些部分 要比其他部分更容易存在错误,为了使测试获得更大 的程序,最好对这些容易存在错误的部分进行额外的 测试
k=0, j=0 a
x>3 && z<10 Y Nb
k=x*y-1 j=sqrt(k)
c
x==4 || y>5 Y j=x*y+10
Nd
e
7-5
测试举例3
t=0 a
N
d
t=1
N
b
x>8 && y>5 Y c
x>0 || y>0
Y
N x>16 || y>10 Y
e
f
g
t=2
t=3
7-5
测试举例4
·针对右侧C语言程序段, 对于(MaxNum, Type)取值, 至少需要多少个测试用例能 满足判定覆盖的要求?
TC1'
3,0,3
CD
x=1
TC2'
2,1,1
BE
x=2
7-5
条件覆盖
条件 满足 不满足
a>1
T1
F1
b=0 T2
F2
a=2 T3
F3
x>1 T4
F4
A a>1 && b==0 Y
NB
x=x/a C
a=2 || x>1 ND
Y
x=x+1
E
7-5
判定覆盖和条件覆盖关系
用例编号 测试用例 满足条件 覆盖分支 通过路径 (a/b/x)
原则6:检查程序是否“未做其应该做的”仅是测试的一 半,测试的另一半是检查程序是否“做了不应该做的” 必须检查程序是否有我们不希望的副作用,这样的程序 仍然是不正确的程序
7-5
测试原则
原则7:应避免测试用例用后即弃,除非软件本身就是一个 一次性的软件
测试用例在测试后就消失了,一旦软件需要重新测试, 就需要重新设计这些测试用例,结果或是再次投入大量 的工作,或草草测试,这样对程序的更改如果导致某个 先前可执行的部分发生故障,这个故障往往不会被发现
Y
x=x+1
ND
E
A
1C
B
2
3E
D
4
7-5
语句覆盖
测试用例
用例编号
覆盖语句 预期结果 实际结果
(a/b/x)
TC1
2,0,4 ①②③④ x = 3
·语句覆盖是最弱的覆盖。
7-5
判定覆盖
测试用例
用例编号
覆盖分支 预期结果 实际结果
(a/b/x)
TC1
2,0,4
CE
x=3
TC2
3,1,1
BD
x=1
用例编号 测试用例 覆盖分支 预期结果 实际结果 (a/b/x)
k=x*y-1; j=sqrt(k); } if(x==4 || y>5) j=x*y+10; }
7-5
测试举例2
k=0, j=0 a
x>3 && z<10 Y Nb
k=x*y-1 j=sqrt(k)
c
x==4 || y>5 Y j=x*y+10
Nd
e
7-5
测试举例2
·语句覆盖 ·判定覆盖 ·条件覆盖 ·判定/条件覆盖 ·条件组合覆盖
7-5
测试举例1
A a>1 && b==0 Y
NB
x=x/a C
a=2 || x>1
Y
x=x+1
ND
E
7-5
语句和路径
A
a>1 && b==0 Y NB
x=x/a C
a=2 || x>1
Y
x=x+1
ND
E
·框图中每一个框代 表了一行代码,称作 一条语句;每一处有 数据可能流过的路线 称作一条路径。