白盒测试用例练习题(1)
- 格式:doc
- 大小:41.28 KB
- 文档页数:3
白盒测试用例练习1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
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;} //语句块2j=j%3; //语句块3}由这个流程图可以看出,该程序模块有4条不同的路径:P1:(a-c-e) P2:(a-c-d)P3:(a-b-e) P4:(a-b-d)将里面的判定条件和过程记录如下:判定条件M={x>3 and z<10}判定条件N={x=4 or y>5}1、语句覆盖2、判定覆盖也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下:3、条件覆盖对于M:x>3取真时T1,取假时F1;z<10取真时T2,取假时F2;对于N:x=4取真时T3,取假时F3;y>5取真时T4,取假时F4。
条件:x>3,z<10,x=4,y>5条件:x<=3,z>=10,x!=4,y<=5根据条件覆盖的基本思路,和这8个条件取值,组合测试用例如表所示:5、组合覆盖条件组合1)x>3,z<10 2)x>3,z>=103) x<=3,z<10 4)x<=3,z>=105)x=4,y>5 6)x=4,y<=56。
1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。
为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。
若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案A:① 语句覆盖② 条件覆盖③ 判定覆盖④ 路径覆盖B~F:① Ⅰ和Ⅱ组② Ⅱ和Ⅲ组③ Ⅲ和Ⅳ组④ Ⅰ和Ⅳ组⑤ Ⅰ、Ⅱ、Ⅲ组⑥ Ⅱ、Ⅲ、Ⅳ组⑦ Ⅰ、Ⅲ、Ⅳ组⑧ Ⅰ、Ⅱ、Ⅳ组解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧2. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到条件覆盖。
( B )int func(int a,b,c){ int k=1;if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,9,-2)、(-4,8,3)3. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定覆盖。
(D )int func(int a,b,c){ int k=1;if ( (a>0) &&(b<0) && (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,-9,-2)、(-4,8,3)4. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定条件覆盖。
例题2:应用白盒测试法的具体步骤:1.按照某种覆盖标准,选择一组需要覆盖的路径;2.确定上述路径所需的输入数据;3.计算与输入数据相应的输出。
下面以工资管理程序为例说明白盒测试方法的运用过程。
(白盒测试方法有6种)工资管理程序BONUS的输入数据是职员表(Employee Table)和部门销售表(Department Table)(图1)。
职员表由姓名(Name)、职务(Job)、部门(Dept.)和工资(Salary)四个属性组成。
部门销售表由部门(Dept)和销售量(Sales)组成。
程序的功能是:“为销售量最大的部门中每一个职工增加200元工资,但是,如果某个职员的原有工资已达15000元,或者他的职务是经理,则只给他增加100元。
如果程序能正常地完成,则输出出错码0;如果两表格中没有任何条目,则输出出错码1;如果没有职员在部门销售表中销售量最大的部门中工作,则输出出错码2;”工资管理程序BONUS的两个表如下:工资管理程序BONUS的源程序:参数表中EMPTAB、DEPTTAB分别是职员表和部门表,ESIZE、DSIZE分别是两个表的长度,ERRCODE是出错码。
这里略去了说明部分和注释。
Procedure Bonus(EMPTAB,DEPTTAB:TABLE; ESIZE,DSIZE,ERRCODE:INTEGER);/*最大销量和出错码初始化*/1. Begin MAXSALES:=0; ERRCODE:=0;/*判断表是否为空,空输出1,并退出程序,否则继续执行*/2. IF (ESIZE<=0) or (DSIZE<=0)3. THEN ERRCODE:=1;4. ELSE/*获得最大销量*/5. For i=1 to DSIZE6. If Sales(i)> MAXSALES7. then MAXSALES = Sales(i);/*找到销量最大的每一个部门,并做进一步处理*/8. For j=1 to DSIZE9. If Sales(j)= MAXSALES10. Then11. Begin Found:=False;/*找销量最大的职员所属部门对应的职员表中的职员并处理*/12. For k:=1 to ESIZE13. If (EMPTAB.DEPT(k)= DEPTTAB. DEPT(J))14. Then15. Begin Found:=True;/*如果该职员工资超过15000或职务是经理则加100工资,否则加200工资*/16. If (SALARY(k)>=15000.0) or (JOB(k)=”M”)17. Then18. SALARY(k):= SALARY(k)+100.0;19. Else20. SALARY(k):= SALARY(k)+200.0;21. End;/*如果找不到对应职员,则输出出错码2,否则出错码默认0*/22. If (!Found ) then ERRORCODE:=2;23. End24. End25. End用白盒测试方法设计测试用例。
白盒测试用例练习题(1)白盒测试用例练习1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
voiddowork(intx,inty,intz){intk=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;}//语句块2j=j%3;//语句块3}k=0j=0aycx>3andz<10k=x*y-1j=sqrt(k)nbx=4eoryy>5j=x*y+10ndj=j%3由这个流程图可以窥见,该程序模块存有4条相同的路径:p1:(a-c-e)p2:(a-c-d)p3:(a-b-e)p4:(a-b-d)将里面的判定条件和过程记录如下:判定条件m={x>3andz<10}判定条件n={x=4ory>5}1、语句覆盖测试用例输出x=4,z=5,y=82、判定覆盖p1和p4可以做为测试用例,其中p1做为挑真的路径,p4做为row的路径。
测试用例输出x=4,z=5,y=8x=2,z=11,y=5输入k=31,j=0k=0,j=0认定m的值域认定n的值域tftf 全面覆盖路径p1(a-c-e)p4(a-b-d)输入k=31,j=0认定m的值域认定n的值域tt全面覆盖路径p1(a-c-e)也可以使测试用例测试路径p2和p3。
适当的两组输出数据如下:测试用例输出x=5,z=5,y=4x=4,z=11,y=63、条件覆盖对于m:x>3挑真时t1,取假时f1;z<10挑真时t2,取假时f2;对于n:x=4挑真时t3,取假时f3;y>5挑真时t4,取假时f4。
条件:x>3,z<10,x=4,y>5条件:x<=3,z>=10,x!=4,y<=5根据条件全面覆盖的基本思路,和这8个条件值域,女团测试用例例如表中右图:测试用例输出x=4,z=5,y=8x=3,z=11,y=5输入k=31,j=0k=0,j=0值域条件具体内容值域条件全面覆盖路径p1(a-c-e)t1,t2,t3,t4x>3,z<10,x=4,y>5输入k=19,j=sqrt(19)%3k=0,j=1认定m的值域认定n的值域tfft全面覆盖路径p2(a-c-d)p3(a-b-e)f1,f2,f3,f4x<=3,z>=10,x!=4,y<=5p4(a-b-d)4、认定/条件全面覆盖测试用例输出x=4,z=5,y=8x=3,z=11,y=5输入k=31,j=0k=0,j=0值域条件具体内容值域条件全面覆盖路径p1(a-c-e)t1,t2,t3,t4x>3,z<10,x=4,y>5f1,f2,f3,f4x<=3,z>=10,x!=4,y<=5p4(a-b-d)5、女团全面覆盖条件组合1)x>3,z<102)x>3,z>=103)x<=3,z<104)x<=3,z>=105)x=4,y>56)x=4,y<=57)x!=4,y>58)x!= 4,y<=5测试用例输出x=4,z=5,y=6x=4,z=10,y=5x=3,z=5,y=6z=3,z=10,y=56、路径全面覆盖测试用例输出x=4,z=5,y=8x=5,z=5,y=4x=4,z=11,y=6x=2,z=11,y=5输出k=31,j=0k=0,j=1k=0,j=0覆盖条件取值覆盖条件组合1,51,82,54,8覆盖路径p1(a-c-e)p2(a-c-d)p3(a-b-e)p4(a-b-d)输出k=23,j=1k=0,j=0k=14j=1k=0,j=2覆盖条件取值t1,t2,t3,t4t1,f2,t3,f4f1,t2,f3,t4f1,f2,f3,f4覆盖条件组合1,52,63,74,8覆盖路径p1(a-c-e)p2(a-c-d)p3(a-b-e)p4(a-b-d)t1,t2,t3,t4t1,f2,t3,t4f1,f2,f3,f4k=19,j=sqrt(19)%3t1,t2,f3,f4。
先看以下代码:/** 白盒测试逻辑覆盖测试范例*/int logicExample(int x, int y){int magic=0;if(x>0 && y>0){magic = x+y+10; // 语句块1}else{magic = x+y-10; // 语句块2}if(magic < 0){magic = 0; // 语句块3}return magic; // 语句块4}解答:一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:做好了上面的准备工作,接下来就开始讲解六个逻辑覆盖标准:一、语句覆盖1、概念:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
在本例中,可执行语句是指语句块1到语句块4中的语句。
2、测试用例:{x=3, y=3}可以执行到语句块1和语句块4,所走的路径:a-b-e-f{x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的路径:a-c-d-f这样,通过两个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。
3、测试的充分性:假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误。
在六种逻辑覆盖标准中,语句覆盖标准是最弱的。
二、判断覆盖(分支覆盖)1、概念:设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
在本例中共有两个判断if(x>0 && y>0)(记为P1)和if(magic < 0)(记为P2)。
2、测试用例:两个判断的取真、假分支都已经被执行过,所以满足了判断覆盖的标准。
要求1:请将下列代码的程序流程图画出来。
要求2:根据案例,请设计出6种白盒测试覆盖的用例。
参考以下代码,要求:(1)画出流程图;(2)请分别设计出满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖及路径覆盖的测试用例。
如,例1:
PROCEDURE M(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0) THEN X:=X/A;
IF (A=2) OR (X>1) THEN X:=X+1;
END.
语句覆盖
A=2,B=0,X=3
分支覆盖
A=3,B=0,X=1 (沿路径acd执行);A=2,B=1,X=3(沿路径abe执行)
条件覆盖
A=2,B=0,X=4 (沿路径ace执行);A=1,B=1,X=1 (沿路径abd执行)。
分支条件覆盖
A=2,B=0,X=4 (沿ace路) A=1,B=1,X=1 (沿abd路径)
条件组合覆盖
①A=2,B=0,X=4
使1)、5)两种情况出现;
②A=2,B=1,X=1
使2)、6)两种情况出现;
③A=1,B=0,X=2
使3)、7)两种情况出现;
④A=1,B=1,X=1
使4)、8)两种情况出现。
湖北科技学院软件测试实验报告int k=0,j=0;if((x>3) && (z<10)){k=x*y-1;j=(int) Math.sqrt(k);}if((x==4)||(y>5))j=x*y+10;j=j%3;}public boolean doWork(int x,int y,int z){return true;}}测试程序:(1)package gy.test2;import junit.framework.*;import org.junit.Test;public class DoWorkTest1 extends TestCase { private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(4, 8, 8));}}(2)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest2 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(4, 3, 13));}}(3)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest3 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(6, 2, 8));}}(4)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest4 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(2, 3, 13));}}2.源程序:package gy.test;public class BinSearch {public int binSearch (int array[],int key) { int mid,low,high;low = 0;high = array.length-1;while (low <= high) {mid = (low+high)/2;if (key == array[mid])return mid;else if (key < array [mid])high = mid -1;elselow = mid+1;}return -1;}}测试程序:(1)package gy.test;import junit.framework.*;public class BinSearchTest1 extends TestCase{ private static BinSearch search= new BinSearch();private int array[] = {};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(-1, search.binSearch(array, 1));}}(2)package gy.test;import junit.framework.*;public class BinSearchTest2 extends TestCase { private static BinSearch search= new BinSearch();private int array[] = {2,4,6};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(1, search.binSearch(array, 4));}}(3)package gy.test;import junit.framework.*;public class BinSearchTest3 extends TestCase{ private static BinSearch search= new BinSearch();private int array[] = {2,4,6,8};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(0, search.binSearch(array, 2));}}(4)package gy.test;import junit.framework.*;public class BinSearchTest4 extends TestCase {private static BinSearch search= new BinSearch();private int array[] = {2,4,6,8};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(2, search.binSearch(array, 6));}}。
白盒测试用例练习
1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
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
}
由这个流程图可以看出,该程序模块有4条不同的路径:
P1:(a-c-e) P2:(a-c-d)
P3:(a-b-e) P4:(a-b-d)
将里面的判定条件和过程记录如下:
判定条件M={x>3 and z<10}
判定条件N={x=4 or y>5}
1、语句覆盖
2、判定覆盖
也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下:
3、条件覆盖
对于M:x>3取真时T1,取假时F1;
z<10取真时T2,取假时F2;
对于N:x=4取真时T3,取假时F3;
y>5取真时T4,取假时F4。
条件:x>3,z<10,x=4,y>5
条件:x<=3,z>=10,x!=4,y<=5
5、组合覆盖
条件组合
1)x>3,z<10 2)x>3,z>=10
3) x<=3,z<10 4)x<=3,z>=10
5)x=4,y>5 6)x=4,y<=5
6。