白盒测试习题 - 图文 下载本文

习题01

0401 逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语旬覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True或者False),正确的选择是( )。 语句段:

if(A&&(B||C)) x=1;

else x=0; 用例表:

A B C A&&(B||C)

A. ①TRUE ②FALSE ③TRUE B. ①TRUE ②FALSE ③FALSE C. ①FALSE ②FALSE ③TRUE D. ①TRUE ②TRUE ③FALSE

输入数据 条件 预期结果

T T x=1 A=TRUE,B=TRUE,C=TRUE

A=F,B=F,C=F F T x=0

0402 针对以下程序段,对于(A,B,C)的取值,以下( )测试用例能够满足语句覆盖的要求。 IF((A+10)=2 OR (B-20)<3) THEN C=0 IF((A+30)>10 AND (C-30)<0) THEN B=30 A. (2,30,1) B.(-20,0,30) C. (-30,20,30) D. (2,20,3)

输入数据 条件 预期结果

T T A=-8,B=20,C=30 C=0,B=30 T T A=-20,B=0,C=30 C=0,B=30 0403 为以下程序段,设计足够的测试用例满足语句覆盖 。

if (x>8&&y>5) {

if(x>16||y>10) s1; }

用例1 TRUE ①true TRUE ③true 用例2 FALSE FALSE ②true FALSE else {

if (x>0||y>0) s2;

else s3; 输入数据 x=17,y=11 x=7,y=4 x=-7,y=4 条件 T T T F F T F F F 预期结果 S1 S2 S3

0404 针对下列程序段,需要( )个测试用例才可以满足语句覆盖的要求。 switch ( value ) {

case 0: other = 30; break; case 1: other = 50; break; case 2: other = 300;

case 3: other = other / value; break; default: other = other * value; }

A.2 B.3 C.4 D.5 输入数据 Value=0 Value=1 Value=3 Value=4 0405 对下面的个人所得税程序中,满足语句覆盖测试用例的是( ) 。 if (income < 800) tarrate = 0

else if (income <= 1500) tarrate = 0.05

else if (income < 2000) tarrate = 0.08 else tarrate = 0.1 A.income = (800, 1500, 2000, 2001) B.income = (800, 801, 1999, 2000) C.income = (799, 1499, 2000, 2001) D.income = (799, 1500, 1999, 2000) 输入数据 Income=799 Income=1500 Income=1999 Income=2000

0406 阅读下列流程图:

条件 TFFF FTFF FFTF FFFT 预期结果 tarrate = 0 tarrate =0.05 tarrate =0.08 tarrate =0.1 条件 T F F F F T F F F F T F F F F T 预期结果 other=30 other=50 other=100 other= other/4

当用判定覆盖法进行测试时,至少需要设计 ( ) 个测试用例。 A.2 B.4 C.6 D.8 输入数据 x=0,y=0,d=0 X=0,y=2, x=2,y=0 x=1,y=2 0407

条件 FT FF TT TF 预期结果 d=0 d=d/2 d=d/2 d=d/(1*2)

数据输入 b=0,a=0 b=0,a=-2 b=1,a=1 b=1,a=-2 b=0,a=0 b=0,a=-2

条件 TT TF FTT FTF FFT FFF 预期结果 result=0 result=-1 result=-1 result=1 result=1 result=-1 0408 针对下列C语言程序段,对于(MaxNum,Type),至少需要( )个测试用例能够满足判定覆盖的要求。

while(MaxNum-->0) {

if(10==Type) x=y*2; else

if(100==Type) x=y+10; else

x=y-20; }

A. 5 B.4 C.3 D.2 数据输入 type=10 type=100 type!=10&&type!=100 条件 TFF FTF FFT 预期结果 x=y*2 x=y+10 x=y-20

0409 为以下程序段,设计足够的测试用例满足判定覆盖 。 if (x>8&&y>5) {

if(x>16||y>10) s1; }

else {

if (x>0||y>0) s2;

else s3; 输入数据 x=17,y=11 x=7,y=4 x=-7,y=4 条件 T T T F F T F F F 预期结果 S1 S2 S3

0410 针对程序段:IF((X>10) AND (Y<20))

THEN W=W/A , 对于(X,Y)的取值,以下( )组测 试用例能够满足判定覆盖的要求。

A. (30,15) (40,10) B. (3,0) (30,30) C. (5,25) (10,20) D. (20,10) (1,100) 输入数据 x=11,y=19 x=9,y=21 条件 T F 预期结果 w=w/a 无 0411 假设 A, B 为布尔变量,对于逻辑表达式(A&&B||C),需要( )个测试用例才能完成判定覆盖(DC) 。

A.2 B.3 C.4 D.5 输入数据 A=T,B=T,C=T A=T,B=F,C=T A=T,B=F,C=F 条件 预期结果 T F F 0412 针对下列程序段,需要( )个测试用例可以满足分支覆盖的要求。 int IsLeap(int year) { if ( year % 4 == 0 ) {

if ( year % 100 == 0 ) {

if ( year % 400 == 0 ) leap = 1;

else leap = 0; } else leap = 1; } else leap = 0;

return leap; } A. 3 B.4 C.6 D.7 输入数据 year=400 year=100 year=16 year=6 条件 TTT TTF TFF FFF 预期结果 leap=1 leap=0 leap=1 leap=0 0413 针对以下 C 语言程序段,假设 sta[10]= -1,对于 x 的取值,需要( )个测试用例能够满足分支覆盖的要求。 int MathMine(int x) { int m=0; int i;

for(i=x-1;i<=x+1;i++) {

if(i<0) continue; if(i >31) break;

if(sta[i]==-1) m++; }

return m; }

A.3 B.4 C.5 D.6

输入数据 x=0 x=33 x=11 条件 预期结果 0 0 1 0414 以下代码由C语言书写,在输入三个整数后,能够输出最大数和最小数。 int main(void) { int a,b,c,max,min;

printf(“input three number: ”); scanf(“%d%d%d”,&a,&b,&c);

if(a>b) /*判断1*/ { max=a; min=b; } else

{ max=b; min=a; } if(max

else if(min>c) /*判断3*/ min=c;

printf(“max=%d\\nmin=%d\\n ”,max,min); return 0; }

问题1:请画出该程序的控制流图,并分析该控制流图中有多少(4)条线性独立路径(V(G)的值)。

问题2:为了用分支(判定)覆盖方法测试该程序,需要设计测试用例,使其能对该程序中的每个判断语句的各种分支情况全部进行过测试。对两组输入数据(1) a=3,b=5,c=7; (2) a=4,b=6,c=5,请分别写出程序中各个判断语句的执行结果(以T表示真,以F表示假),填入答题纸的相应栏中。

问题3:上述两组测试数据是否实现该程序的分支 (判定)覆盖?如果能,请说明理由。如果不能,请再增设一组输入数据,使其能实现分支(判定)覆盖。

0415 针对以下程序段,对于(A,B)的取值,以下 ( )测试用例能够满足条件覆盖的要求。

IF((A-10)=20 OR (B+20)>10) THEN C=0 IF((A-30)<10 AND (B-30)<0) THEN B=30 ① A=50 B=-10 ② A=40 B=40 ③ A=30 B=-10 ④ A=30 B=30

A. ①② B. ③④ C. ①④ D. ②④ 输入数据 A=41,B=-11 A=30,B=30 条件 FFFT TTTF 预期结果 NO C=0,B=30

0416 对下面的个人所得税程序中,满足条件覆盖测试用例的是( )。 if (income < 800) tarrate = 0

else if (income <= 1500) tarrate = 0.05

else if (income < 2000) tarrate = 0.08 else tarrate = 0.1 A.income = (799, 1500, 1999, 2001) B.income = (799, 1501, 2000, 2001) C.income = (800, 1500, 2000, 2001) D.income = (800, 1499, 2000, 2001) 数据输入 income=799 income=1500 income=1999 income=2001

0417 针对程序段:

if((x>10) && (y<20)) w=10/x; else w=10*y; if((x==0) || (y>0)) w=20-x;

else w=20+y;

对于(X,Y)的取值,请设计最少的测试用例能够满足条件覆盖的要求。 输入数据 x=0,y=20 x=20,y=0 条件 FFTT TTFF FT TF 预期结果 W=20 W=20 条件 TFFF FTFF FFTF FFFT 预期结果 tarrate=0 tarrate=0.05 tarrate=0.08 tarrate=0.1

0418为以下所示的程序段设计一组测试用例,要求满足条件覆盖,并画出相应的程序流程图。

void DoWork (int x,int y,int z) { int k=0,j=0;

if ( (x>3)&&(z<10) ) { k=x*y-1;

j=sqrt(k); //语句块1

} if ( (x==4)||(y>5) ) {

j=x*y+10; } //语句块2 j=j%3; //语句块3 } 数据输入 x=1,y=5,z=9 x=4,y=6,z=11 x=5,y=4,z=11 条件 TFF FTF FFT 预期结果 j=2 j=34 j=j%3 0419 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。程序如下,请按要求设计测试用例。 要求:1、画出控制流图; 2、分析复杂性;

3、设计满足条件覆盖的测试用例。 4、给出基本路径并设计测试用例; #include”stdio.h” main() 1 { char c;

int letters=0,space=0,digit=0,other=0;

2 printf(“请输入一行字符:\\n”); while((c=getchar())!=’\\n’)

11 { 3 F Tif(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’)

4 5 letters++; TF else if(c==’ ’)

7 F space++; 6 T else if(c>=’0’&&c<=’9’)

9 digit++;

8 else

10 other++ }

printf(“其中:字母数=%d,空格数=%d ,数字数=%d ,其它字符数 =%d\\n”,letters,space,digit,other); }

0420 逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之一。以下代码由 C 语言书写,请按要求回答问题。 void cal( int n )

{ int g, s, b, q;

if ( ( n > 1000 ) && ( n < 2000 ) ) { g = n % 10;

s = n % 100 / 10; b = n / 100 % 10; q = n / 1000;

if( ( q + g ) == ( s + b ) )

{ printf(\ } } printf(\ return ; }

? 问题 1:请找出程序中所有的逻辑判断语句。 ? 问题 2:请分析并给出分别满足 100%DC(判定覆盖)和 100%CC(条件覆盖)时所需的

逻辑条件。

问题 3:假设 n 的取值范围是 0 < n < 3000,请用逻辑覆盖法为 n 的取值设计测试用例,使用例集满足基本路径覆盖标准。

条件覆盖CC

数据输入 N=1212 N=20 N=1333 N=3000 判定覆盖DC

条件 TTT F TTF TF 条件 TT TF F 预期结果 1212 WU WU WU 预期结果 1212 数据输入 N=1212 N=1333 N=3000 WU WU 0421 针对以下程序段,对于(A,B)的取值,以下 ( )测试用例能够满足判定/条件覆盖的要求。

IF((A-10)=20 OR (B+20)>10) THEN C=0 IF((A-30)<10 AND (B-30)<0) THEN B=30 ① A=50 B=-10 ② A=40 B=40 ③ A=30 B=-10 ④ A=30 B=30

A. ①② B. ③④ C. ①④ D. ②④ 输入数据 A=41,B=-11 条件 FFFT 预期结果 NO TTTF C=0,B=30 A=30,B=30

0422 对下面的个人所得税程序中,满足判定/条件覆盖测试用例的是( )。 if (income < 800) tarrate = 0

else if (income <= 1500) tarrate = 0.05

else if (income < 2000) tarrate = 0.08 else tarrate = 0.1 A.income = (799, 1500, 1999, 2001) B.income = (799, 1501, 2000, 2001) C.income = (800, 1500, 2000, 2001) D.income = (800, 1499, 2000, 2001) 数据输入 income=799 income=1500 income=1999 income=2001 条件 TFFF FTFF FFTF FFFT 预期结果 tarrate=0 tarrate=0.05 tarrate=0.08 tarrate=0.1 0423 针对程序段:

if((x>10) && (y<20)) w=10/x;

else w=10*y; if((x==0) || (y>0)) w=20-x;

else w=20+y;

对于(X,Y)的取值,请设计最少的测试用例能够满足判定/条件覆盖的要求。 输入数据 x=0,y=20 x=20,y=0 0424为以下所示的程序段设计一组测试用例,要求满足判定/条件覆盖,并画出相应的程序流程图。

void DoWork (int x,int y,int z) { int k=0,j=0; 1 if ( (x>3)&&(z<10) ) { k=x*y-1;

F T2 j=sqrt(k); //语句块1

} F 4 3 T if ( (x==4)||(y>5) ) F T { T 5 6 7 j=x*y+10;

} //语句块2 j=j%3; //语句块3 8 } 数据输入 x=1,y=5,z=9 x=4,y=6,z=11 x=5,y=4,z=11

0425 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。程序如下,请按要求设计测试用例。 要求:1、画出控制流图; 2、分析复杂性;

3、设计满足判定/条件覆盖的测试用例。 4、给出基本路径并设计测试用例; #include”stdio.h” else if(c==’ ’) main() space++; { char c; else if(c>=’0’&&c<=’9’) int letters=0,space=0,digit=0,other=0; digit++;

else printf(“请输入一行字符:\\n”);

while((c=getchar())!=’\\n’) other++; { } if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’) letters++; printf(“其中:字母数=%d,空格数=%d ,数字数=%d ,其它字符数

条件 TFF FTF FFT 预期结果 j=2 j=34 j=j%3 条件 FFTT TTFF FT TF 预期结果 W=20 W=20 =%d\\n”,letters,space,digit,other);

1 2 11 T4 T6 3 F 5 F 7 T8 10F 9 }

0426 逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之一。以下代码由 C 语言书写,请按要求回答问题。 void cal( int n )

{ int g, s, b, q;

if ( ( n > 1000 ) && ( n < 2000 ) ) { g = n % 10;

s = n % 100 / 10; b = n / 100 % 10; q = n / 1000;

if( ( q + g ) == ( s + b ) )

{ printf(\ } } printf(\ return ; }

? 问题 1:请找出程序中所有的逻辑判断语句。

? 问题 2:请分析并给出分别满足 100%DCC(判定/条件覆盖)时所需的逻辑条件。 ? 问题 3:假设 n 的取值范围是 0 < n < 3000,请用逻辑覆盖法为 n 的取值设计测

试用例,使用例集满足基本路径覆盖标准。 数据输入 N=1212 N=20 N=1333 N=3000 条件 TTT F TTF TF TT F TF F 预期结果 1212 WU WU WU

0427 针对以下程序段,对于(A,B,C)的取值,设计最少的测试用例满足判定/条件覆盖的要求。

if((a-10)==0 || (b+20)<0) c=0;

if((a+30)>10 && (c-30)<0) b=30;

A=10 A>-20 B<-20 C<30 数据输入 A=10,B=-30,C=24 A=-30,B=20,C=40

0428 对于逻辑表达式((a&&b)||c),需要(8 )个测试用例才能完成条件组合覆盖。 A.5 B.6 C.7 D.8

0429 针对以下程序段,对于(A,B)的取值,设计最少测试用例能够满足条件组合覆盖的要求。 IF((A-10)=20 OR (B+20)>10) THEN C=0 IF((A-30)<10 AND (B-30)<0) THEN B=30 0430 针对程序段:

if((x>10) && (y<20)) w=10/x;

else w=10*y; if((x==0) || (y>0)) w=20-x;

else w=20+y;

对于(x,y)的取值,请设计最少的测试用例能够满足条件组合覆盖的要求。 0431 多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足______级别的。 A.语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖

B.判定覆盖、条件覆盖;条件判定组合覆盖、修正条件判定覆盖 C.语句覆盖、判定覆盖、条件判定组合覆盖、修正条件判定覆盖 D.路径覆盖、判定覆盖、条件覆盖、条件判定组合覆盖

0432 关于白盒测试的测试用例设计方法叙述,正确的是( ) 。

A.完成 SC(语句判定)所需的测试用例数目一定多于完成 DC(逻辑判定)所需的测试用例数目

B.达到 100%CC(条件判定)要求就一定能够满足 100%SC 的要求

C.达到 100%CDC(条件判定组合覆盖)要求就一定能够满足 100%CC 的要求 D.任何情况下,都可以达到 100%路径覆盖的要求

0433 针对逻辑覆盖( )叙述是不正确的。

条件 TTTT FFFF TT FF 预期结果 C=0,B=30 NO A. 达到100%DC要求就一定能够满足100%SC的要求 B. 达到100%CC要求就一定能够满足100%SC的要求 C. 达到100%CDC要求就一定能够满足100%CC的要求 D. 达到100íC要求就一定能够满足100ü的要求

0434 以下控制流程图的环路复杂性V(G) 等于( )。

A. 5

B. 6 C. 9 D.12

0435 在程序控制流图中,有8条边,6各节点,则控制流程图的环路复杂性V(G)等于( )。 A. 2

0436 做0414的第1问;0419的第1,2,4问;0420的第3问。

0437 基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执行一次。以下代码由C+ +语言书写,请按要求回答问题。 void ReadPara(CString temp) {

if(temp= =">=") M_oper.SetCurSel(0); else {

if(temp= =">") m_oper.SetCurSel(1); else {

if(temp= ="= =") m_oper.SetCurSel(2); else {

if(temp= ="<=") m_oper.SetCurSel(3); else {

if(temp="<") m_oper.SetCurSel(4);

else m_oper.SetCurSel(5);

B. 4 C. 6 D. 8

}

}

}

}

return; }

【问题1】

请画出以上代码的控制流图。 【问题2】

请计算上述控制流图的环路复杂度V(G)。 6

【问题3】

请使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。 0438 以下代码由C语言书写,能根据指定的年、月计算当月所含天数。 int GetMaxDay( int year, int month ) { int maxday = 0;

if ( month >= 1 && month <= 12 ) { if ( month == 2 ) {

if ( year % 4 == 0 ) {

if ( year % 100 == 0 ) {

if ( year % 400 == 0 ) maxday = 29;

else maxday = 28; }

else maxday = 29; } else maxday = 28; } else {

if ( month == 4 || month == 6 || month == 9 || month == 11 ) maxday = 30;

else maxday = 31; } } return maxday;

}

? 问题1:请画出以上代码的控制流图。

? 问题2:请计算上述控制流图的环路复杂度V(G)。7

? 问题3:假设year的取值范围1000

month设计测试用例(写出year取值、month取值、maxday预期结果),使之满足基本路径覆盖要求。

0439 逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由 C 语言编写的程序,按要求回答问题。 getit( int m) { int i, k; k=sqrt( m);

for(i=2;i<=k;i++)

if(m%i==0) break; if(i>=k+1)

printf( \ else

printf(\ }

? 问题 1:请找出程序中所有的逻辑判断子语句。

? 问题 2:请将满足 100 % DC(判定覆盖)所需的逻辑条件填入下表。

? 问题 3:请画出上述程序的控制流图,并计算其控制流图的环路复杂度 V (G)。假设

函数 getit 的参数 m 取值范围是 150<m<160,请使用基本路径测试法设计测试用例,将参数 m 的取值填入下表,使之满足基本路径覆盖要求。

?

0440 使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。 int IsLeap(int year) { if (year % 4 == 0) {

if (year % 100 == 0) { if ( year % 400 == 0) leap = 1; else

leap = 0; } else

leap = 1; } else

leap = 0; return leap; }

【问题1】

请画出以上代码的控制流图 【问题2】

请计算上述控制流图的圈复杂度V(G) (独立线性路径数) 【问题3】

假设输入的取值范围是1000 < year < 2001,请使用基本路径测试法为变量year设计测试用例,使其满足基本路径覆盖的要求。