XX大学软件质量控制和测试实验(实习)报告实验(实习)名称白盒测试(一)实验(实习)日期2011-12-2得分指导老师系专业班级1姓名学号一、实验目的理解白盒测试的基本方法,掌握语句覆盖、分支覆盖、条件覆盖、路径覆盖等代码覆盖测试策略,并能应用白盒测试技术设计测试用例二、实验内容1.题目一:使用逻辑覆盖测试方法测试以下程序段(必做)voidDoWork(intx,inty,intz){1intk=0,j=0;2if((x3)&&(z10))3{4k=x*y-1;5j=sqrt(k);6}7if((x==4)||(y5))8j=x*y+10;9j=j%3;10}说明:程序段中每行开头的数字(1~10)是对每条语句的编号。(1)画出程序的控制流图(用题中给出的语句编号表示)。(2)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。2.题目二:折半查找(选做)请按要求对下面的java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。publicintbinSearch(intarray[],intkey){intmid,low,high;low=0;high=array.length-1;while(low=high){mid=(low+high)/2;if(key==array[mid])returnmid;elseif(keyarray[mid])high=mid-1;elselow=mid+1}return-1;}(1)试计算此程序段的McCabe复杂性;(2)用基本路径覆盖法给出测试路径;(3)为各测试路径设计测试用例。三、实验步骤题目一:使用逻辑覆盖测试方法测试以下程序段(必做)1、绘制出程序流程图,如图1;图1题目1的程序流程图k=x*y-1;j=sqrt(k);(x==4)or(y5)j=x*y+10;j=j%3;结束开始k=0,j=0;(x3)and(z10)TrueTrueFalseFalse2、绘制控制流图,如图2;图2题目1的控制流图3、设计测试用例:(1)语句覆盖:语句覆盖是设计足够的测试用例使程序中的每一条可执行语句至少执行一次。这题中,两个if语句的判定之后,只要确保使两个判定都为真,那么所有的执行语句就都可以执行了,即可达到语句覆盖的要求。所以设计的测试用例如下:x=4,y=6,z=8。这组测试用例的执行路径是1—2—3—4—5—6—7—8—9—10(2)判定覆盖:判定覆盖要求程序中每个判断的取真分支和取假分支至少经历一次。这题中,有两个判定语句,至少需要设计两组测试用例,才能分别覆盖两个if语句的真分支和假分支。所以设计的测试用例如下:用例1:x=4,y=6,z=8,其执行路径是1—2—3—4—5—6—7—8—9—10;56789101234用例2:x=3,y=5,z=8,其执行路径是1—2—3—6—7—9—10。(3)条件覆盖:条件覆盖要求每个判断中每个条件的可能取值至少要满足一次。这道题目中的条件有四个,分别如下:①x3;②z10;③x==4;④y5;设计用例时要使每个条件分别取真和取假。设计的测试用例如下表。测试用例编号测试数据覆盖条件执行路径1x=3,y=8,z=8①假②真③假④真1-2-3-6-7-8-9-102x=4,y=5,z=13①真②假③真④假1-2-3-6-7-8-9-10(4)判定/条件覆盖:判定/条件覆盖要求判断中每个条件的所有可能至少出现一次,并且每个判断本身的可能判定结果也至少出现一次。题目中的条件有四个,分别如下:①x3;②z10;③x==4;④y5;该程序中的分支有四个。所以设计的测试用例如下表所示:测试用例编号测试数据覆盖条件执行路径1x=4,y=8,z=8①真②真③真④真1-2-3-4-5-6-7-8-9-102x=3,y=5,z=13①假②假③假④假1-2-3-6-7-9-10(5)条件组合覆盖:条件组合覆盖要求每个判定的所有可能条件取值组合至少执行一次。这道题目中共有四个条件分别如下:①x3;②z10;③x==4;④y5;设定x3为真时,记作T1;为假时,即x≤3,记作F1;z10为真时,记作T2;为假时,即z≤10,记作F2;x==4为真时,记作T3;为假时,即x≠4,记作F3;y5为真时,记作T4;为假时,即y≤5,记作F4。条件组合如下表:编号具体条件取值覆盖条件判定取值1x3,z10T1,T2第一个判定:取真分支2x3,z≤10T1,F2第一个判定:取假分支3x≤3,z10F1,T2第一个判定:取假分支4x≤3,z≤10F1,F2第一个判定:取假分支5x==4,y5T3,T4第二个判定:取真分支6x==4,y≤5T3,F4第二个判定:取真分支7x≠4,y5F3,T4第二个判定:取真分支8x≠4,y≤5F3,F4第二个判定:取假分支设计的测试用例如下:测试用例编号测试数据覆盖条件执行路径1x=4,y=8,z=8T1,T2,T3,T41-2-3-4-5-6-7-8-9-102x=4,y=3,z=13T1,F2,T3,F41-2-3-6-7-8-9-103x=2,y=8,z=8F1,T2,F3,T41-2-3-6-7-8-9-104x=2,y=3,z=13F1,F2,F3,F41-2-3-6-7-9-10(6)路径覆盖:路径覆盖要求覆盖程序中所有可能的路径。这道题中可能的执行路径共有4条,所以需要设计4个测试用例:测试用例编号测试数据执行路径1x=4,y=8,z=81-2-3-4-5-6-7-8-9-102x=4,y=3,z=131-2-3-6-7-8-9-103x=6,y=2,z=81-2-3-4-5-6-7-9-104x=2,y=3,z=131-2-3-6-7-9-10题目二:折半查找(选做)请按要求对下面的java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。首先对代码进行编号,以便绘制控制流图。publicintbinSearch(intarray[],intkey){1intmid,low,high;2low=0;3high=array.length-1;4while(low=high){5mid=(low+high)/2;6if(key==array[mid])7returnmid;8elseif(keyarray[mid])9high=mid-1;10else11low=mid+112}13return-1;14}第1步:绘制给出代码段的程序流程图和控制流图;(1)根据程序源代码,绘制出程序的程序流程图,如图3:图3题目2的程序流程图low=mid+1开始low=0high=array.length-1low=highreturn-1mid=(low+high)/2key==array[mid]结束returnmidkeyarray[mid]high=mid-1FalseFalseFalseTrueTrueTrue(2)根据程序流程图,绘制出程序的控制流图,如图4:图4题目2的控制流图1234567891011121314R3R4R1R2第2步:计算程序环路复杂度;程序的环路复杂性即McCabe复杂性度量,简单的定义为控制流图的区域数。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的最少测试用例数。通常环路复杂性可用以下三种方法求得。(1)通过控制流图的边数和节点数计算。设E为控制流图的边数,N为控制流图的节点数,则定义环路复杂性为V(G)=E–N+2;该图中共有16条边,14个节点,因此E=16,N=14,V(G)=E-N+2=16-14+2=4,程序的环路复杂性为4。(2)通过控制流图中判定节点数计算。若设P为控制流图中的判定节点数,则有V(G)=P+1该图中有3个判定节点,因此其环路复杂性为V(G)=P+1=3+1=4,所以该程序的环路复杂性为4。(3)将环路复杂性定义为控制流图中的区域数。该控制流图中有4个区域:R1、R2、R3、R4,因此其环路复杂性为4。第3步:找出独立路径;通过程序的控制流图导出基本路径集,列出程序的独立路径。PATH1:1-2-3-4-13-14PATH2:1-2-3-4-5-6-7-12-4-13-14PATH3:1-2-3-4-5-6-8-9-12-4-13-14PATH4:1-2-3-4-5-6-8-10-11-12-4-13-14第4步:设计测试用例;根据程序结构和程序环路复杂性设计用例输入数据和预期结果,确保基本路径集中的每一条路径的执行。用例编号路径输入数据预期输出1path1:1-2-3-4-13-14array[0]={};key=1-12path2:1-2-3-4-5-6-7-12-4-13-14array[3]={2,4,6};key=413path3:1-2-3-4-5-6-8-9-12-4-13-14array[4]={2,4,6,8};key=204path4:1-2-3-4-5-6-8-10-11-12-4-13-14array[4]={2,4,6,8};key=62四、实验心得1、白盒测试与程序内部结构相关,因此也称为结构测试或逻辑驱动测试。而在进行白盒测试时,测试者必须检查程序的内部结构,从程序的逻辑结构着手,得出测试数据。因此测试者需要了解程序结构的实现细节等知识,才能有效进行测试用例的设计工作。2、白盒测试并不是简单地按照代码设计测试用例,而是需要根据不同的测试需求,结合不同的测试对象,使用合适的方法进行测试。而白盒测试的方法也很多,主要方法有逻辑覆盖测试、基本路径测试等。3、通过这次实验,我了解到绘制程序流程图与控制流图之间的区别,并且能够通过控制流图来用各种方式设计测试用例。