1、 软件测试报告一、问题描述:用 Java 实现求两整数的加、减、乘、除运算结果,要求两整数的范围都是0,100。从键盘输入数 m,数 n,判断他们的范围,若不在0,100范围内,则输出提示语,要求重新输入,并且在做除法运算时,当除数为 0 时,输出提示语,说明除数不能为 0。将两数的范围定在0,100,以更好的进行边界值分析,等价类测试等黑盒测试方法;为充分体现白盒测试的特点,有些地方故意用了 if-else 语句,while循环;另外,加、减、乘、除运算分别用了四个函数来计算,这样既可以在主函数中调用,又可以在 Junit 框架中分别对这四种运算进行测试。二、程序源代码:1. import
2、java.util.Scanner;2. public class Computer 3. private int a;4. private int b;5. public Computer (int x,int y) /构造函数,初始化6. 7. a=x; /注意:Juint中需要输入测试值在0100范围内8. b=y;9. 10. public double add() /加法11. 12. return a+b;13. 14. public double minus() /减法15. 16. return a-b;17. 18. public double multiply() /乘法1
3、9. 20. return a*b;21. 22. public double divide() /除法,要求除数不能为0,否则输出提示语23. 24. if(b!=0)25. return a/b;26. else27. System.out.println(“除数不能为 0!“);28. return 0;29. 30. public static void main(String args)31. 32. Scanner scanner = null;33. scanner = new Scanner(System.in);34. System.out.println(“请输入0100的
4、两个m,n 整数:“);35. System.out.println(“请输入第一个数: “);36. while(true) /若输入值不在要求范围内,则有循环直到输入正确为止37. int m = scanner.nextInt();38. if(m=0 /引入Junit框架中所有类public class ComputerTest extends TestCase private Computer a; /定义变量private Computer b;38 5637394043 5242415751 535458596055private Computer c;private Compu
5、ter d;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);protected void t
6、earDown() 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,y的范围public void test
7、Minus() /减法测试assertEquals(-89,a.minus(); /预期值和结果不相等,测试失败public void testMinus1() assertEquals(-89.0,a.minus(); public void testMultiply() assertEquals(2.0,c.multiply();public void testMultiply1() Object tx = null; tryassertEquals(2.0,c.multiply(); /c.multiply()的正常结果是2.0,所以在此不应抛出异常fail(“should have t
8、hrown an exception“); /上面不抛出异常,不执行fail()catch (Exception e) tx = e;assertNotNull(tx); /断言tx 不为空, 则一定有异常public void testDivide() assertEquals(0.0,d.divide(); /因divide() 函数中,当d=0时,返回 0.0,所以这里 测试应该成功,虽然希望得到“被除数不能为0!”的情况public void testDivide1() assertEquals(0.5, c.divide();public void testEmpty()tryc.d
9、ivide();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.minus(); 预期值和实际值不相同,测试异常;(3)、测试testMultiply()时,断言不为空,抛出异常Junit
10、集成测试:在Junit中,Test Case总是对所有方法进行测试,而Test Suite中可对其中的一部分方法测试,而且一个测试类中还可以包含其他测试类。在Test Case类中声明一个public static Test suite()方法即可完成多个测试类的集成。例如,在上例ComputerTest类中,添加:public static Test Suit()TestSuite suite=new TestSuite();suite.addTest(new ComputerTest(“testAdd“);suite.addTest(new ComputerTest(“testMultip
11、ly1“);return suite;若在另一个ComputerTest1 类中,要测试ComputerTest中的所有测试方法,则应:public class ComputerTest1 extends TestCase public ComputerTest1(String name)Super(name);public static Test Suit()TestSuite suite=new TestSuite();suite.addTestSuite(ComputerTest.class);return suite;四、测试用例设计体会:在这次软件测试过程中,我扮演了用户、程序员、测
12、试员三钟角色,为了充分体现黑盒、白盒以及Junit动态测试的特点,我特意设计了一个 0,100之间的整数简单加减乘除运算。对于黑盒测试,在设计测试用例时完全没有考虑程序内部的逻辑结构和内部特性,只纯粹的依据功能和要求来设计测试用例进行测试。测试时使用了多种测试方法,包括边界值测试(边界值分析、健壮性测试、特殊值测试) ,等价类测试(弱一般、强一般、弱健壮、强健壮等价类测试) ,基于决策表的测试等。虽然黑盒测试很容易生成测试用例,但实际上只有一小部分可能的输入被测试到,某些代码得不到测试,不能直接对隐蔽了许多问题的特定程序段进行测试,不易进行充分性测试。比如:在上例中,若输入的数据是2,0,则输
13、出的是0.0 ,很明显这个结果是不正确的。对于白盒测试,在设计测试用例时首先对程序进行分析,从程序的内部结构出发设计测试用例,涉及到程序的控制方法、源语句、编码细节、数据库设计等。设计测试用例时应用了白盒测试中的多种测试方法,其中包括:测试覆盖(语句覆盖、分支覆盖、分支条件覆盖等) 、基路径测试等方法。白盒测试中,对代码的测试比较透彻,但不容易生成测试用例,而且测试工作量很大, 。因为白盒测试是基于代码的基础上,所以对变量的定义、数据的分析、精度的度量都有严格的要求。如:上例中要求输入的值是0,100之间的int型,而输出的结果却要求的是double型。对于Junit,编写了另一段代码来测试要执行的代码,代码中的一个测试类(TestCase)包含了很多测试方法( testXXXX) ,每个测试方法中又有很多测试断言(assertXXXX ) ,在方法中测试预期值是否和实际值一致。总之,在这次测试设计让我对软件测试有了一个深入了解,对于测试方法、测试过程,都有了较好的认识,学会了如何进行黑盒测试、白盒测试、以及一些测试工具(如Junit) 。当然,对于以后企业上的软件测试,还有待很大的提高。