您好,欢迎访问三七文档
软件测试报告一、问题描述:用Java实现求两整数的加、减、乘、除运算结果,要求两整数的范围都是[0,100]。从键盘输入数m,数n,判断他们的范围,若不在[0,100]范围内,则输出提示语,要求重新输入,并且在做除法运算时,当除数为0时,输出提示语,说明除数不能为0。将两数的范围定在[0,100],以更好的进行边界值分析,等价类测试等黑盒测试方法;为充分体现白盒测试的特点,有些地方故意用了if-else语句,while循环;另外,加、减、乘、除运算分别用了四个函数来计算,这样既可以在主函数中调用,又可以在Junit框架中分别对这四种运算进行测试。二、程序源代码:1.importjava.util.Scanner;2.publicclassComputer{3.privateinta;4.privateintb;5.publicComputer(intx,inty)//构造函数,初始化6.{7.a=x;//注意:Juint中需要输入测试值在0~100范围内8.b=y;9.}10.publicdoubleadd()//加法11.{12.returna+b;13.}14.publicdoubleminus()//减法15.{16.returna-b;17.}18.publicdoublemultiply()//乘法19.{20.returna*b;21.}22.publicdoubledivide()//除法,要求除数不能为0,否则输出提示语23.{24.if(b!=0)25.returna/b;26.else27.System.out.println(除数不能为0!);28.return0;29.}30.publicstaticvoidmain(String[]args)31.{32.Scannerscanner=null;33.scanner=newScanner(System.in);34.System.out.println(请输入0~100的两个m,n整数:);35.System.out.println(请输入第一个数:);36.while(true){//若输入值不在要求范围内,则有循环直到输入正确为止37.intm=scanner.nextInt();38.if(m=0&&m=100)39.{40.System.out.println(请输入第二个数:);41.while(true){42.intn=scanner.nextInt();43.if(n=0&&n=100)44.{45.Computercpt=newComputer(m,n);46.System.out.println(运算结果是:);47.System.out.println(加法:+m+++n+=+cpt.add());48.System.out.println(减法:+m+-+n+=+cpt.minus());49.System.out.println(乘法:+m+*+n+=+cpt.multiply();50.System.out.println(除法:+m+/+n+=+cpt.divide());51.}52.else53.System.out.print(输入n值不在要求区间,请重新输入n:\n);54.}55.}56.else57.System.out.print(输入m值不在要求区间,请重新输入m:\n);58.}59.}60.}三、黑盒测试:1、边界值测试:1.1、边界值分析:输入要求是0~100之间的整数,因此产生了0和100两个边界,边界值分析可产生4*2+1=9个测试用例。可构造(50,0)、(50,1)、(50,50)、(50,99)、(50,100)、(0,50)、(1,50)、(99,50)、(100,50)这9组测试用例。表1边界值分析测试用例用例mn预期输出(+、-、*、/)实际输出(+、-、*、/)150050.0、50.0、0.0、除数不为0!50.0、50.0、0.0、0.0250151.0、49.0、50.0、50.051.0、49.0、50.0、50.035050100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.045099149.0、-49.0、4950.0、0.505109.0、-9.0、2950.0、0.55051550100150.0、-50.0、5000.0、0.5150.0、-50.0、5000.0、0.5605050.0、-50.0、0.0、0.050.0、-50.0、0.0、0.0715051.0、-49.0、50.0、0.0251.0、-49.0、50.0、0.0289950149.0、49.0、4950.0、1.98149.0、49.0、4950.0、1.98910050150.0、50.0、500.0、2.0150.0、50.0、500.0、2.0在该测试时,发现(50,0)这个测试的除法的预期输出和实际输出不一致,是因为代码中return0;当除数n=0时,实际返回的是0.0。publicdoubledivide(){if(b!=0)returna/b;elseSystem.out.println(除数不能为0!);return0;//出现Bug}1.2健壮性测试:健壮性测试可产生6*2+1=13个测试用例,在上面边界值分析测试用例的基础上再添加(50,-1)、(50,101)、(-1,50)、(101,50)这4个测试用例即可。表2健壮性测试用例用例mn预期输出(+、—、*、/)实际输出1050-149.0、51.0、-50.0、-50.0输入n值不在要求区间1150101151.0、-51.0、5050.0、0.495输入n值不在要求区间12-15049.0、-51.0、-50.0、-0.02输入m值不在要求区间1310150151.0、51.0、5050.0、2.02输入m值不在要求区间2、等价类测试:规定了输入值m,n的范围[0,100],则变量的有效等价类:M1={m:0≤m≤100}N1={n:0≤n≤100}变量的无效等价类:M2={m:m≤0}M3={m:m≥100}N2={n:n≤0}N3={n:n≥0}2.1、弱一般等价类测试:该测试可用每个等价类的一个变量实现,可生成1个测试用例。2.2、强一般等价类测试:该测试基于多缺陷假设,需要1*1=1个测试用例。表3强、弱一般等价类测试用例用例mn预期输出(+、—、*、/)实际输出WN1,SN15050100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.02.3、弱健壮等价类测试:该测试基于单缺陷假设,不仅对有效值测试,还考虑了无效值,可生成1+2+2=5个测试用例。表4弱健壮等价类测试用例用例mn预期输出(+、—、*、/)实际输出WR15050100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.0WR250-149.0、51.0、-50.0、-50.0输入n不在要求区间WR350101151.0、-51.0、5050.0、0.495输入n不在要求区间WR4-15049.0、-51.0、-50.0、-0.02输入m不在要求区间WR510150151.0、51.0、5050.0、2.02输入m不在要求区间2.4、强健壮等价类测试:该测试基于多缺陷假设,从所有等价类笛卡尔积的每个元素中获得测试用例,可生成(1+2)*(1+2)=9个测试用例。表5弱健壮等价类测试用例用例mn预期输出(+、—、*、/)实际输出SR1-1-1-2.0、0.0、1.0、1.0输入m值不在要求区间SR2-15049.0、-51.0、-50.0、-0.02输入m值不在要求区间SR3-1101100.0、-102.0、-101.0、0099输入m值不在要求区间SR450-149.0、51.0、-50.0、-50.0输入n值不在要求区间SR55050100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.0SR650101106.0、-51.0、5050.0、0.495输入m值不在要求区间SR7101-1100.0、102.0、-101.0、-101.0输入m值不在要求区间SR810150151.0、51.0、5050.0、20.2输入m值不在要求区间SR9101101202.0、0.0、10201.0、1.0输入m值不在要求区间3、因果图:C1:输入m值在[0,100]内C2:输入n值在[0,100]内e1:输出结果e2:输入m值不在区间e3:输入n值不在区间3.基于决策表的测试:变量的有效等价类:M1={m:0≤m≤100}N1={n:0≤n≤100}变量的无效等价类:M2={m:m≤0}M3={m:m≥100}N2={n:n≤0}N3={n:n≥0}表6基于决策表的测试用例桩1234C1:第一个数在:C2:第二个数在:M1N1M1N2,N3M2,M3N1M2,M3N2,N3A1:正常输出结果:A2:输入m值不在要求区间,重新输入A3:输入n值不在要求区间,重新输入XXXXX二、白盒测试:1.测试覆盖指标:流程图:Ce1me2Ce3afFTbdFFTc1.1、语句覆盖:每个可执行的语句必须至少执行一次,则测试用例:表7语句覆盖测试用例测试用例通过路径条件取值m1=-1,m2=1;n1=101,n2=99a,f,b,d,cF1,T1,F2,T21.2、(判定)分支覆盖:每个判定必须至少获得一次“真”值和“假”值,则测试用例:表8(判定)分支覆盖入口执行语句块1执行语句块5m=0&&m=10执行语句块2执行语句块4n=0&&n=10执行语句块3出口测试用例通过路径条件取值m=1,n=99a,b,cT;Tm1=-1,m2=1,n=99a,f,b,cF1,T1;T2m=1,n1=-1,n2=99a,b,d,cT;F1,T1m1=-1,m2=1;n1=101,n2=99a,f,b,d,cF1,T1;F2,T21.3、条件判定覆盖:每个判定中的每个条件的所有可能值(真/假)至少出现一次并且每个判定本身的结果(真/假)也至少出现一次,则测试用例:表9条件判定覆盖测试用例通过路径条件取值m=1,n=99a,b,cT,T1.4、路径覆盖:测试用例要求覆盖所有可能的路径:表10路径覆盖测试用例通过路径条件取值m1=-1,m2=1;n1=101,n2=99a,f,b,d,cF1,T1,F2,T22.基路径测试:(为简便画图,开始点从主要代码第36行开始,其他无分支节点用省略号表示)(从节点1到节点36)...(从节点43到51)...所以:圈复杂度V(G)=54个独立路径为:P1:1,...,36,37,38...42,43...54,55,58,59,60P2:1,...,36,37,56,57,58,59,601335334454455555565P3:1,...,36,37,38...42,52,53,54,55,58,59,60P4:1,...,36,37,38...42,43...54,42,52,53,54,55,58,59,60P5:1,...,36,37,56,57,58,36,37,56,57,58,59,60三、Junit动态测试:importjunit.framework.TestCase;//引入Junit框架中所有类publicclassComputerTestextendsTestCase{privateComputera;//定义变量privateComputerb;privateComputerc;privateComputerd;publicComputerTest(Stringname){super(name);//构造函数,使用super关键字直接引用父类TestCase的构造函数}protectedvoidsetUp()throwsException{super.setUp();//建立环境,可以进行一些测
本文标题:软件测试文档
链接地址:https://www.777doc.com/doc-5687519 .html