软件测试文档_第1页
软件测试文档_第2页
软件测试文档_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件测试报告一、问题描述:用 Java 实现求两整数的加、减、乘、除运算结果,要求两整数的范围都是0,100。从键盘输入数m,数n,判断他们的范围,假设不在0,100范围内,那么 输出提示语,要求重新输入, 并且在做除法运算时, 当除数为 0 时,输出提示语, 说明除数不能为 0。将两数的范围定在0,100,以更好的进行边界值分析,等价类测试等黑盒测 试方法;为充分表达白盒测试的特点,有些地方成心用了if-else语句,while循环;另外,加、减、乘、除运算分别用了四个函数来计算,这样既可以在主函数 中调用,又可以在Junit框架中分别对这四种运算进行测试。二、程序源代码:1. import

2、java.util.Sca nner;2.publicclass Computer 3.privateint a;4.privateint b;5.public Computer (int x,int y)/构造函数,初始化6.7.a=x;/注意:Juint中需要输入测试值在0100范围内8.b=y;9.10.publicdouble add()/加法11.12.returna + b;13.14.publicdoubleminu s()/减法15.16.returna- b;17.18.publicdouble multiply()/乘法19.20.returna* b;21.22.publ

3、icdouble divide()/除法,要求除数不能为0,否那么输出提示语23.24.if ( b !=0)25.returna/ b;26.else27.System. out .println("除数不能为0 ! );28.return 0;29.30.public staticvoid main(String args)31.32.Scanner scanner=null ;33.scanner =new Scanner(System.in );34.System.out.println(" 请输入 0100 的两个m,n 整数 :" );35.Syste

4、m.out.println" 请输入第一个数: " ;那么有循环直到输入正确为36.while( true/ 假设输入值不在要求范围内,止37.int m = scanner.nextInt();38.if (m>=0&&m<=100)39.40.System.out .println" 请输入第二个数: " ;41.while ( true )42.int n = scanner.nextInt();43.if (n>=0&&n<=100)44.45.Computer cpt=new Comput

5、er(m,n);46.System.out.println(" 运算结果是: " );47.System.outprintln(" 加法:" +m+"+" +n+ "=" +cpt.add();48.System.outprintln(" 减法:" +m+"-" +n+ "=" +cpt.minus();49.System.outprintln(" 乘 法 :" +m+"*" +n+ "=" +c

6、pt.multiply();50.System.outprintln(" 除法 :" +m+"/" +n+ "=" +cpt.divide();51.52.else, 请重新输入 n : n" ;53.System. out .print " 输入 n 值不在要求区间54.55.56.else57.System.out .print"输入 m值不在要求区间,请重新输入 m: n"58.59.60. 三、黑盒测试:1、边界值测试:、边界值分析:输入要求是0100之间的整数,因此产生了 0和100两

7、个边界,边界值分析可产生 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

8、、2500. 0、1. 045099149. 0、-49. 0、4950. 0、0. 505109. 0、-9. 0、2950. 0、550100150. 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

9、、500. 0、2. 0150. 0、50. 0、500. 0、2. 0在该测试时,发现50,0这个测试的除法的预期输出和实际输出不一致,是因为代码中return 0;当除数n=0时,实际返回的是0.0publicdoubledivide。if (b!=0)returna/ b;elseSystem. out .println( 除数不能为 0!");return 0;/ 出现 Bug健壮性测试:健壮性测试可产生6*2+1=13 个测试用例,在上面边界值分析测试用例的根底上再添加(50,-1)、(50,101)、(-1,50)、(101,50) 这4个测试用例即可。表2健壮性测试用例

10、用例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< 100N1= n:0< n < 100变量的无效等价类:M2=m:m< 0M3=m:m&g

11、t; 100N2= n:n< 0N3= n:n> 0、弱一般等价类测试:该测试可用每个等价类的一个变量实现,可生成 1个测试用例。、强一般等价类测试:该测试基于多缺陷假设,需要1*1=1个测试用例。表3强、弱一般等价类测试用例用例mn预期输出+、一、*、/实际输出WN1 SN15050100. 0、0. 0、2500.0、1.0、弱健壮等价类测试:该测试基于单缺陷假设,不仅对有效值测试,还考虑了无效值,可生成1+2+2=5个测试用例。表4弱健壮等价类测试用例用例mn预期输出+、一、*、/实际输出WR15050100. 0、0. 0、2500.0、1.0、WR250-149. 0、5

12、1. 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不在要求区间、强健壮等价类测试:该测试基于多缺陷假设,从所有等价类笛卡尔积的每个元素中获得测试用 例,可生成1+2* 1+2=9个测试用例。表5弱健壮等价类测试用例用例mn预期输出+、一、*、/实际输出SR1-1-1-2. 0、 0. 0、 1.0 、输入m值不在要求区间SR2-15049. 0、-5

13、1. 0、- 50. 0、- 0. 02输入m值不在要求区间SR3-1101100.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、输入m值不在要求区间SR7101-1100.0、输入m值不在要求区间SR810150151.0、输入m值不在要求区间SR9101101202.0、输入m值不在要求区间3、因果图:C1 :输入 m值在0,100 内 C2 :输入n值在0,100 内el :输出结果e

14、2 :输入m值不在区间e3 :输入n值不在区间3.基于决策表的测试:变量的有效等价类:M仁m: 0 < m< 100N1= n:0< n < 100变量的无效等价类:M2=m:m< 0M3=m:m> 100N2= n:n< 0N3= n:n> 0表6基于决策表的测试用例桩1234C1:第一个数在:M1M1M2 , M3M2 , M3C2 :第二个数在:N1N2 , N3N1N2, N3A1 :正常输出结果:A2 :输入m值不在要求区间,重新输入A3 :输入n值不在要求区间,重新输入XXXXX】、白盒测试:1.测试覆盖指标:流程图:入口F、语句覆盖

15、:每个可执行的语句必须至少执行一次,那么测试用例:表7 语句覆盖测试用例测试用例通过路径条件取值m仁-1,m2=1 ; n1=101 , n2=99a,f,b,d,cF1,T1,F2,T2、判定分支覆盖:每个判定必须至少获得一次“真值和“假值,贝U测试用例:表8判定分支覆盖测试用例通过路径条件取值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,T2、条件判定覆盖:每个判定中的每个条件的所有可能值

16、真/假至少出现一次并且每个判定本身的结果真/假也至少出现一次,贝U测试用例:表9条件判定覆盖测试用例通过路径条件取值m=1, n=99a,b,cT,T、路径覆盖:测试用例要求覆盖所有可能的路径:表10 路径覆盖测试用例通过路径条件取值m仁-1,m2=1 ; n1=101 , n2=99a,f,b,d,cF1,T1,F2,T22.基路径测试:为简便画图,开始点从主要代码第 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,6

17、0P3: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 动态测试:import junit.framework.TestCase; / 引入 Junit 框架中所有类 public class ComputerTest extends TestCase privateComputera; / 定义变量privateComputerb;privateComputerc;priva

18、teComputerd;public ComputerTest (String name) super (name); / 构造函数 , 使用 super 关键字直接引用父类 TestCase 的构造函 数protected void setUp() throws Exception super .setUp(); / 建立环境, 可以进行一些测试数据的初始化,还可以把数据库联接写在此处 ,以减少重复性工作,提高效率a = new Computer(1,99); b = new Computer(101,5);c = new Computer(1,2);d = new Computer(1,0

19、);protected void tearDown() throws Exception super .tearDown();public void testComputer() int x=1;int y=1;assertSame (x,y); /assertSame() public void testAdd() / 加法测 试assertEquals (100.0, a.add();public void testAdd1() assertEquals (106.0,b.add();/输入值超出要求范围,测试失败,因为要求0100范围,所以,在构造Computer。 函数时,要规定变量x

20、,y的范围public voidtestMi nu s() assertEquals (-89,a.minu s();/减法测试/预期值和结果不相等,测试失败public void testMi nus1() assertEquals (-89.0, a .minu s(); public void testMultiply() assertEquals (2.0, c.multiply();public void testMultiply1() Object tx =nulltry assertEquals (2.0, c.multiply();c.multiply()的正常结果是, 所以在

21、此不应抛出异 常fail (" should have thrown an exception ");/ 上面不抛出异常,不执行 fail() catch(Exception e) tx = e;/断言tx不为空,那么一定有异常/因divide() 函数中,当d=0assertNotNull (tx);public void testDivide() assertEquals (0.0, d .divide();时,返回,所以这里测试应该成功,虽然希望得到“被除数不能为0!的情况public void testDivide1() assertEquals (0.5, c.d

22、ivide();public void testEmpty()try c .divide();fail("should have thrown an exception "); catch (RuntimeException Ex) assertTrue (true );/assertTrue(true);截图:(1) 、测试 testAdd1() 时,由于 b=newComputer(101,5); assertEquals (106.0,b.add();输入值范围超出定义范围,测试异常;(2) 、测试testMinus() 时,assertEquals (-89, a.

23、minus(); 预期值和实际值不相同,测试异常;时,断言不为空,抛出异常(3) 、测试 testMultiply()Junit集成测试:在Junit中,Test Case 总是对所有方法进行测试,而 Test Suite 中可 对其中的一局部方法测试,而且一个测试类中还可以包含其他测试类。在TestCase类中声明一个public static Test suite() 方法即可完成多个测试 类的集成。例如,在上例ComputerTest 类中,添加:public static Test Suit()TestSuite suite= suite.addTest( suite.addTest(

24、 return suite;new TestSuite();new ComputerTest(new ComputerTest("testAdd" );"testMultiply1");假设在另一个ComputerTest1类中,要测试ComputerTest 中的所有测试方法,那么应:public class ComputerTest1 exte nds TestCasepublicComputerTest1(Stri ng n ame)Super( name);public static Test Suit()TestSuite suite=new TestSuite();Suite(ComputerTest.class);return suite;四、测试用例设计体会:在这次软件测试过程中,我扮演

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论