软件测试白盒黑盒测试解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IF (A>1) AND (B=0) THEN X:= X / A; IF ( A=2 ) OR (X>1) THEN X:=X+1 END;
语句覆盖
从上例可看出,语句覆盖实 际上是很弱的,如果第一个条 件语句中的AND错误地编写成 OR,上面的测试用例是不能发 现这个错误的;
s
a
1
(A>1) and (B=0)
} j=j*3;
// 语句块3
}
设计两个测试用例则可 以满足判定覆盖的要求。
测试用例的输入为:
x=4、y=5、z=5
x=2、y=4、z=5
上面的两个测试用例虽 然能够满足判定覆盖的要求, 但是也不能对判断条件进行 检查,例如把第二个条件y >5错误的写成y<5,、上面 的测试用例同样满足了分支 覆盖。
二、控制流/覆盖测试(Control-flow/Co verage Testing)
⑴ 语句覆盖(Statement Coverage) 语句覆盖是一种衡量测试所覆盖的程序 语句百分比的措施。通过测试应该达到 100%程序语句覆盖的目标。
语句覆盖
? 语句覆盖”是一个比较弱的测试标准,它 的含义是:选择足够的测试用例,使得程 序中每个语句至少都能被执行一次。
满足判 定覆盖
7
课堂练习:按判定覆盖的标准设计测试用例
void DoWork(int x,int y,int z)
{ int k=0,j=0;
if((x>3)&&(z<10))
{
k=x*y-1; // 语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
PROCEDURE Example(A,B:real; X:real ); Begin
IF (A>1) AND (B=0) THEN X:= X / A; IF ( A=2 ) OR (X>1) THEN X:=X+1 END;
s 1
a
(A>1) and (B=0)
F 2
b
(A=2) or (X>1)
入口 a (x>3)&&(z<10) No c b Yes 执行语句块1
if((x>3)&&(z<10))
{
k=x*y-1; //语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
}
j=j*3;
// 语句块3
入口 a (x>3)&&(z<10) No c b Yes 执行语句块 1
(x= =4)||(y>5) No e dYes 执行语句块 2
执行语句块 3
出口
为了测试语句覆盖 率只要设计一个测试 用例就可以把三个执 行语句块中的语句覆 盖了。测试用例输入 为:
x=4、y=5、z=5
程序执行的路径是:
abd
入口 a (x>3)&&(z<10) No c b Yes 执行语句块 1
(x= =4)||(y>5) No e dYes 执行语句块 2
执行语句块 3
出口
语句覆盖
该测试用例虽然覆
盖了可执行语句,但 并不能检查判断逻辑
是否有问题,例如在 第一个判断中把 &&错
误的写成了 ||,则上
面的测试用例仍可以
覆盖所有的执行语句。
?
一般认为“语句
覆盖”是很不充分的
一种标准,是最弱的 逻辑覆盖准则。
入口 a (x>3)&&(z<10) No c b Yes 执行语句块1
(2)判断/分支覆盖
? 判定覆盖只比语句覆盖稍强一些,实际 效果表明,只是判定覆盖,还不能保证 一定能查出在判断的条件中存在的错误。 因此,还需要更强的逻辑覆盖准则去检 验判断内部条件。
PROCEDURE Example(A,B:real; X:real );
Begin
IF (A>1) AND (B=0) THEN X:= X / A;
F 3
d
为使程序中每个语句至少执 行一次,只需设计一个能通 过路径ace的例子就可以了, 例如选择输入数据为:
T 4c
A=2,B=0,X=4
X = X / A 就可达到“语句覆盖”标准
5 T6
e
X=X+1
7
I. A=2, B= 0, X=4 ---- sacbed
PROCEDURE Example(A,B:real; X:real ); Begin
(x= =4)||(y>5) No e dYes 执行语句块2
执行语句块3
出口
(2)判断/分支覆盖
判断/分支覆盖是为了衡量在测试 过程中覆盖了多少个程序中的布尔表达 式。
? 判定覆盖就是设计若干个测试用例,运 行被测程序,使得程序中每个判断的取 真分支和取假分支至少经历一次,即程 序中的每个分支至少执行一次 。判定覆 盖又称为分支覆盖(Branch coverage)。
{ int k=0,j=0;
if((x>3)&&(z<10))
{
k=x*y-1; // 语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
} j=j*3;
// 语句块3
}
void {
}
DoWork(int x,int y,int z)
int k=0,j=0;
s 1
a
(A>1) and (B=0)
F 2Biblioteka Baidu
b
(A=2) or (X>1)
F 3
d
T 4c
? (A>1)and (B=0) 为一 个判定
? A>1 为一个条件
? 每个语句至少执行一次! ? 每个判定的每种可能都至少执
行一次! ? 即每个判定的真假分支都至少
执行一次!
X=X/A
5 T6
e
X=X+1
I: A=3, B=0,X=1: sacbd II: A=2, B=1,X=3: sabed
又如第三个条件语句中X>1误 写成X>0,这个测试用例也不 能暴露它,
此外,沿着路径abd执行时,X 的值应该保持不变,如果这一 方面有错误,上述测试数据也 不能发现它们。
F 2
b
(A=2) or (X>1)
F 3
d
T 4c
X=X/A
5 T6
e
X=X+1
7
课堂练习:按语句覆盖的标准设计测试用例
void DoWork(int x,int y,int z)
IF ( A=2 ) OR (X>1) THEN X:=X+1
END;
对例1的程序,如果设计两个例子,使它们 能通过路径ace和abd,或者通过路径acd和a be,就可达到“判定覆盖”标准,为此,可以 选择输入数据为: ① A=3,B=0,X=1 (沿路径acd执行); ② A=2,B=1,X=3(沿路径abe执行)
语句覆盖
从上例可看出,语句覆盖实 际上是很弱的,如果第一个条 件语句中的AND错误地编写成 OR,上面的测试用例是不能发 现这个错误的;
s
a
1
(A>1) and (B=0)
} j=j*3;
// 语句块3
}
设计两个测试用例则可 以满足判定覆盖的要求。
测试用例的输入为:
x=4、y=5、z=5
x=2、y=4、z=5
上面的两个测试用例虽 然能够满足判定覆盖的要求, 但是也不能对判断条件进行 检查,例如把第二个条件y >5错误的写成y<5,、上面 的测试用例同样满足了分支 覆盖。
二、控制流/覆盖测试(Control-flow/Co verage Testing)
⑴ 语句覆盖(Statement Coverage) 语句覆盖是一种衡量测试所覆盖的程序 语句百分比的措施。通过测试应该达到 100%程序语句覆盖的目标。
语句覆盖
? 语句覆盖”是一个比较弱的测试标准,它 的含义是:选择足够的测试用例,使得程 序中每个语句至少都能被执行一次。
满足判 定覆盖
7
课堂练习:按判定覆盖的标准设计测试用例
void DoWork(int x,int y,int z)
{ int k=0,j=0;
if((x>3)&&(z<10))
{
k=x*y-1; // 语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
PROCEDURE Example(A,B:real; X:real ); Begin
IF (A>1) AND (B=0) THEN X:= X / A; IF ( A=2 ) OR (X>1) THEN X:=X+1 END;
s 1
a
(A>1) and (B=0)
F 2
b
(A=2) or (X>1)
入口 a (x>3)&&(z<10) No c b Yes 执行语句块1
if((x>3)&&(z<10))
{
k=x*y-1; //语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
}
j=j*3;
// 语句块3
入口 a (x>3)&&(z<10) No c b Yes 执行语句块 1
(x= =4)||(y>5) No e dYes 执行语句块 2
执行语句块 3
出口
为了测试语句覆盖 率只要设计一个测试 用例就可以把三个执 行语句块中的语句覆 盖了。测试用例输入 为:
x=4、y=5、z=5
程序执行的路径是:
abd
入口 a (x>3)&&(z<10) No c b Yes 执行语句块 1
(x= =4)||(y>5) No e dYes 执行语句块 2
执行语句块 3
出口
语句覆盖
该测试用例虽然覆
盖了可执行语句,但 并不能检查判断逻辑
是否有问题,例如在 第一个判断中把 &&错
误的写成了 ||,则上
面的测试用例仍可以
覆盖所有的执行语句。
?
一般认为“语句
覆盖”是很不充分的
一种标准,是最弱的 逻辑覆盖准则。
入口 a (x>3)&&(z<10) No c b Yes 执行语句块1
(2)判断/分支覆盖
? 判定覆盖只比语句覆盖稍强一些,实际 效果表明,只是判定覆盖,还不能保证 一定能查出在判断的条件中存在的错误。 因此,还需要更强的逻辑覆盖准则去检 验判断内部条件。
PROCEDURE Example(A,B:real; X:real );
Begin
IF (A>1) AND (B=0) THEN X:= X / A;
F 3
d
为使程序中每个语句至少执 行一次,只需设计一个能通 过路径ace的例子就可以了, 例如选择输入数据为:
T 4c
A=2,B=0,X=4
X = X / A 就可达到“语句覆盖”标准
5 T6
e
X=X+1
7
I. A=2, B= 0, X=4 ---- sacbed
PROCEDURE Example(A,B:real; X:real ); Begin
(x= =4)||(y>5) No e dYes 执行语句块2
执行语句块3
出口
(2)判断/分支覆盖
判断/分支覆盖是为了衡量在测试 过程中覆盖了多少个程序中的布尔表达 式。
? 判定覆盖就是设计若干个测试用例,运 行被测程序,使得程序中每个判断的取 真分支和取假分支至少经历一次,即程 序中的每个分支至少执行一次 。判定覆 盖又称为分支覆盖(Branch coverage)。
{ int k=0,j=0;
if((x>3)&&(z<10))
{
k=x*y-1; // 语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
{
j=x*y+10; // 语句块2
} j=j*3;
// 语句块3
}
void {
}
DoWork(int x,int y,int z)
int k=0,j=0;
s 1
a
(A>1) and (B=0)
F 2Biblioteka Baidu
b
(A=2) or (X>1)
F 3
d
T 4c
? (A>1)and (B=0) 为一 个判定
? A>1 为一个条件
? 每个语句至少执行一次! ? 每个判定的每种可能都至少执
行一次! ? 即每个判定的真假分支都至少
执行一次!
X=X/A
5 T6
e
X=X+1
I: A=3, B=0,X=1: sacbd II: A=2, B=1,X=3: sabed
又如第三个条件语句中X>1误 写成X>0,这个测试用例也不 能暴露它,
此外,沿着路径abd执行时,X 的值应该保持不变,如果这一 方面有错误,上述测试数据也 不能发现它们。
F 2
b
(A=2) or (X>1)
F 3
d
T 4c
X=X/A
5 T6
e
X=X+1
7
课堂练习:按语句覆盖的标准设计测试用例
void DoWork(int x,int y,int z)
IF ( A=2 ) OR (X>1) THEN X:=X+1
END;
对例1的程序,如果设计两个例子,使它们 能通过路径ace和abd,或者通过路径acd和a be,就可达到“判定覆盖”标准,为此,可以 选择输入数据为: ① A=3,B=0,X=1 (沿路径acd执行); ② A=2,B=1,X=3(沿路径abe执行)