实验项目软件测试日期专业班级学生学号一、实验目的掌握熟悉黑盒测试方法、白盒测试方法。二、主要仪器设备微型计算机系统,MSVisio2003软件,IDE环境(如:TC2.0、VC++6.0等)三、实验原理与方法根据提供的程序,选择指定的设计程序进行单元测试:(1)使用等价分类法、边界值分类法或对比分析法进行黑盒测试用例设计;(2)使用逻辑覆盖法和路径覆盖法进行白盒法测试用例设计。四、实验内容与步骤(提示:给出较详的操作设计方案、步骤、纠错、代码)1、主要内容根据所提供的程序模块,设计和构建测试环境,使用黑盒测试方法对程序进行单元测试;编写设计测试方案:设计驱动模块与桩模块、设计测试用例、记录测试过程、编写测试报告。1)、测试方法:①黑盒法:等价类划分法、边界值分类法②白盒法:逻辑覆盖法(选2种)、基本路径覆盖法2)、指定的问题:案例:三角形面积的计算inttri-mj(floata,floatb,floatc,float*f){if(a0||b0||c0)return–2;if(a=0||b=0||c=0)return–1;if(a0&&b0&&c0){if(a==b&&b==c&&a==c){*f=Szsj(a);/*正三角行面积*/return1;}elseif(a+bc&&b+ca&&c+ab){*f=Srsj(a,b,c);/*任意三角行面积*/return2;}else{*f=Lcort(a,b,c);/*判断合理边并返回*/return3;}}elsereturn0}2、测试方案实验四1)测试环境(在Visio中设计测试系统结构与代码,提交文档:“班级_学号_TE.vsd”中)输入测试用例桩模块1Szsj()输出测试结果被测模块驱动模块main()桩模块2Srsj()桩模块3Lcort()测试用例测试结果测试用例正三角形边长正三角形面积任意三角形三边长任意三角形面积不合理三边长边长不合理提示测试结果(1)驱动模块A.内部结构图入口输入三边a==0||b==0||c==0?NNA=B=C?边长不能为0Y输出正边形三角形面积YA+Bc&&b+ca&&a+cb?N输出任意三角形的面积Y不能构成三角形N出口abcdgjfepia0||b0||c0?边长不能为负值hYkB.代码#includestdio.hfloatdata[6][4]={{0,2,3,0},{-1,2,3,0},{1,2,3,0},{6,8,10,24},{4,4,4,6.9}};voidjudge(floata,floatb,floatc){printf(a=%.1f,b=%.1f,c=%.1f\n,a,b,c);float*area=(float*)malloc(sizeof(float));intresult=tri_mj(a,b,c,area);switch(result){case-2:printf(三角形边长不能为负值\n);printf(返回类型%d\n,result);break;case-1:printf(三角形边长不能为0\n);printf(返回类型%d\n,result);break;case0:printf(三角形边长不能为0或负值\n);printf(返回类型%d\n,result);break;case1:printf(正三角形\n);printf(返回类型%d返回面积为%.1f\n,result,*area);break;case2:printf(普通三角形\n);printf(返回类型%d返回面积为%.1f\n,result,*area);break;case3:printf(三角形边长不合理\n);printf(返回类型%d,result);break;}printf(\n\n);}//驱动模块intmain(intargc,char*argv[]){for(inti=0;i5;i++){judge(data[i][0],data[i][1],data[i][2]);}}(2)桩模块A.内部结构图模块调用获取参数(flaota)查询正三角形面积返回结果模块返回模块调用获取参数(floata,floatb,floatc)查询任意三角形面积返回结果模块返回模块调用获取参数(floata,floatb,floatc)判断三角形的合理边返回结果模块返回桩模块Szsj桩模块Srsj桩模块LcortB.代码//正三角行面积桩模块floatSzsj(floata){inti;for(i=0;i5;i++){if((data[i][0]==a)&&(data[i][1]==a)&&(data[i][2]==a)){returndata[i][3];}}}//任意三角行面积桩模块floatSrsj(floata,floatb,floatc){inti;for(i=0;i5;i++){if((data[i][0]==a)&&(data[i][1]==b)&&(data[i][2]==c)){returndata[i][3];}}}//判断合理边并返回桩模块floatLcort(floata,floatb,floatc){inti;for(i=0;i5;i++){if((data[i][0]==a)&&(data[i][1]==b)&&(data[i][2]==c)){returndata[i][3];}}}2)测试用例设计说明:(1)黑盒测试法:等价类划分:是把所有可能的输入数据分成若干部分子集,然后从每一个子集中选取少数具有代表性的数据作为测试用例。边界值划分:对输入或输出的边界值(选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据)进行设计测试用例。(2)白盒测试法:逻辑覆盖法:以程序内部的逻辑结构为基础,确保每个判定分支至少执行一次设计测试用例。基本路径覆盖法:设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。3、实验主要步骤1)系统的启动过程双击桌面上的MicrosoftOfficeVisio2003,启动visio软件。2)环境建造过程(1)双击打开VC++软件,选择“新建”后,新建一个控制台工程文件,工程文件名为Test,并选择存储位置,单击确认。(2)再次选择“新建”后,新建一个C++源程序,程序名设置与工程名相同,单击确认。(3)在源程序窗口中,输入驱动模块、被测模块和桩模块的程序代码。在输入结束后,选择编译并运行程序。3)测试过程(1)编译并运行驱动程序。(2)预先设计的测试用例已经存储在数组中,因此可直接观察运行结果,并记录下来。五、完整的实验结果1、提交:A.测试系统设计:班级_学号_TE.vsdB.测试记录文件:班级_学号_TA.doc2、测试记录1)等价类划分法NO类别用例实际结果备注输入数据理论结果1无效效等价类0,2,3不构成三角形不构成三角形与预期结果相同2有效等价类6,8,10Area=24Area=24与预期结果相同3有效等价类1,2,3边长不合理边长不合理与预期结果不同4有效等价类4,4,4Area=6.9Area=6.9与预期结果相同5无效等价类-1,2,3不构成三角形不构成三角形与预期结果相同2)边界值分类法NO类别用例实际结果备注输入数据理论结果1无效边界值法0,2,3不构成三角形不构成三角形理论与实际结果相同2有效边界值法4,4,4Area=6.9Area=6.9理论与实际结果相同3有效边界值法1,2,3边长不合理边长不合理理论与实际结果相同4有效边界值法6,8,10Area=24Area=24理论与实际结果相同5无效边界值法-1,2,3不构成三角形不构成三角形理论与实际结果相同3)逻辑覆盖法(条件覆盖法、判定覆盖法、)NO方法类别用例用例结果1条件覆盖测试用例1-1,2,3不构成三角形2条件覆盖测试用例20,2,3不构成三角形3条件覆盖测试用例34,4,4Area=6.94条件覆盖测试用例46,8,10Area=245条件覆盖测试用例51,2,3边长不合理4)基本路径覆盖法NO类别用例通过路径结果1路径覆盖A=-1,b=2,c=3abchp不构成三角形2路径覆盖A=0,b=2,c=3abcdip不构成三角形3路径覆盖A=4,b=4,c=4abcdejpArea=6.94路径覆盖A=6,b=8,c=10abcdefkpArea=245路径覆盖A=1,b=2,c=3abcdefgp返回不合理边3、测试记录分析本次测试主要是采用黑盒测试和白盒测试两种方式。在黑盒测试过程中使用的是等价类划分法和边界值划分法,测试的实际结果与理论结果相一致,说明该程序模块通过了黑盒测试。在白盒测试中使用的是逻辑覆盖法中的条件覆盖法和判定覆盖法以及基本路径覆盖法,不管是何种覆盖法,都尽可能的设计各种测试用例以达到覆盖到各种条件、判定、基本路径,最终测试的实际结果和理论结果依旧相同,因此此次对模块进行的单元测试基本完成,没有找到该模块的错误六、实验结果讨论(参阅实验报告有相关要求)1、本次实验,通过掌握了黑盒和白盒测试法,黑盒主要使用等价分类法、边界值分类法或对比分析法进行测试用例;白盒法的主要技术有逻辑覆盖测试和基本路径测试等2、白盒测试是根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确的工作;黑盒测试时根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于软件的确认测试。等价类划分法是根据三角形的种类和不能构成三角形的情况划分而成,而边界值是根据构成三角形的值大小进行划分。3、测试用例设计成功之后,对被测模块进行测试,同时记录下了测试结果,最后是的测试的实际结果与理论结果相比较,并完成最终能够的测试记录分析。实验结果:删除此条语句if(a=0||b=0||c=0)return–1;后出现如下错误结果:删除以下语句if(a=0||b=0||c=0)return–1;if(a0&&b0&&c0)后出现如下错误结果: