软件测试实习0706-面向对象测试
2016-07-07 14:23
337 查看
面向对象测试的概述
面向对象是一种软件开发的思想,在整个软件生命周期都要遵循这种思想,根据软件生命周期的各个阶段,可以将面向对象测试分为以下几种:面向对象分析的测试OOA test
面向对象设计的测试OOD test
面向对象编码的测试 OOP test
其中面向对象编码测试又分为单元测试和集成测试
面向对象分析和设计的测试主要是检查验证系统需求说明书,概要设计等需求设计文档,主要采用静态分析的方法,分析系统的架构是否合理,各个类的设计是否合理,有无多余或者缺少的类,以及每一个类中的属性和方法设计是否合理,有无多余或者缺少的属性和方法等。
面向对象程序的单元测试
传统的面向过程的语言如C语言是对函数的测试,而面向对象程序的单元测试主要是对基类和派生类的测试。在一个类中封装了对象的属性和方法,那么对类的测试必然包括对属性的测试和方法的测试,对于方法的测试完全可以采用传统的白盒测试技术,如边界值、逻辑驱动测试、循环语句测试等。但是更多的时候是把类作为一个整体,将其属性和方法结合起来测试以及不同类之间的关联测试
下面结合实例来讲解一下面向对象单元测试的大概步骤
Shape类,rectangle类,square类和circle类。其中shape类为基类,rectangle类,square类都继承自shape类,square类继承自rectangle类/*形状类,实现该形状周长和面积的计算*/
public abstract class Shape
{
public abstract double perimeter();//计算周长,抽象方法
public abstract double area();//计算面积,抽象方法
}
Shape类为抽象类,定义了两个抽象方法。就只是提供一个方法名,而不包含任何实现代码,需要在子类中重写。包含抽象方法的类称为抽象类。
/*矩形类,实现矩形周长和面积的计算*/ public class Rectangle extends Shape { int a; int b; public Rectangle(int x, int y) { a = x; b = y; } public double perimeter() { return 2*(a+b); } public double area() { return a*b; } }
Rectangle 类定义了两个私有成员变量,分别表示长和宽,重写覆盖了基类shape的求周长和面积的方法
/*正方形类,实现正方形周长和面积的方法*/ public class square extends rectangle { public square(int x, int y) { super(x,y); } public double perimeter() { return 4*a; } public double area() { return a*a; } }
Square类定义了一个私有成员变量表示边长,重写覆盖了父类rectangle的求周长和面积的方法。
/*圆形类,实现圆形周长和面积的计算*/ public class circle extends shape { private int r; public circle(int x) { r = x; } public double perimeter() { return 2*3.14*r; } public double area() { return 3.14*r*r; } }
Circle类定义了一个私有成员变量表示半径,重写了覆盖父类shape的求周长和面积的方法
分析完以上四个类之后,就来分步骤对他们进行测试
1.划分类的优先级
在单元测试阶段,如果时间允许的话,可以不测试所有的类,但是一定要测试上层的关键类。可以将系统中所有的类按照复杂程度和使用的频率划分一下优先级,比如一个类的功能相对来说比较复杂,或者该类是一个基类,被其他很多类继承或者调用,那么就一定要优先测试这种类。
假设一个系统中一共有四个类。类A~D。其中B和C都继承自A类,类D和类A是平行的,但是类D调用类A中的属性或是方法。那么就先测试类A
可见,shape类是所有类的基类,被其他类所继承,理论上来说应该优先测试,但是在该程序中shape类是一个抽象类,其中的方法没有具体的实现细节,所以只需要检查shape的成员变量和方法设计是否合理即可,重点应该放在rectangle和circle类上面
2.对被测试的方法进行静态分析
静态分析的重点是:
检查类的结构是否合理
Public private protect关键字设置是否合理,一般成员变量设置为私有成员变量,不允许其他类访问,构造函数设置为公有public
检查类中的成员变量和方法设计是否合理,有无缺少或者多余的情况。
检查程序是否符合相应的编码规范
3.对被测试类设计测试用例
在静态分析结束之后,就可以对该程序设计测试用例。在这些类中,计算参数都是通过构造函数获得的,只需要修改构造函数的参数即可。比如在rectangle类中,可以构造一下测试用例(1,1),(1.2,3.4),(a,b),(,)
4.构造测试驱动程序
设计完测试用例后,还需要构造测试驱动程序,也叫测试驱动框架。进行动态测试。Mian函数就是一种测试驱动程序,比如要测试rectangle类,可以在rectangle类中添加如下代码
public class Rectangle extends Shape { int a; int b; public Rectangle(int x, int y) { a = x; b = y; } public double perimeter() { return 2*(a+b); } public double area() { return a*b; } public static void main(String []args) { Rectangle rect1 = new Rectangle(1,1); Rectangle rect2 = new Rectangle(1.2,3.4); Rectangle rect3 = new Rectangle(a,b); Rectangle rect4 = new Rectangle(,); System.out.println(rect1.perimeter()); System.out.println(rect1.area()); System.out.println(rect2.perimeter()); System.out.println(rect2.area()); System.out.println(rect3.perimeter()); System.out.println(rect3.area()); System.out.println(rect4.perimeter()); System.out.println(rect4.area()); } }
直接编译不通过
相关文章推荐
- 贪吃的九头龙
- [serverless]Lambda服务初探
- IOS中键盘隐藏几种方式
- selenium 定制启动 chrome 的选项
- mssql批量插入三种方法
- 多点触控与单点触控
- error : Call requires API level 11 (current min is 8)
- Spring中的<context:annotation-config/>配置
- 微信公众平台开发(58)自定义菜单
- STL学习之find系列函数
- python 在mongo 中建立索引
- iOS 后台定位审核被拒
- 堡垒机维护手册
- 解决 an app id with identifier is not available. please enter a different string
- 有一定弹性的ListView
- git学习笔记
- HDU1048 The Hardest Problem Ever
- 如何从零开始开发一款嵌入式产品(20年的嵌入式经验)
- centos7 docker redis
- xfs磁盘(文件)碎片查看和整理