1、类测试

  面向对象软件的类测试与传统软件的单元测试相对应,但和传统的单元测试不一样。类包含一组不同的操作,并且某具体操作可能作为一组不同类的一部分存在。同时,一个对象有它自己的状态和依赖于状态的行为,对象操作既与对象的状态有关,但也可能改变对象的状态。所以,类操作时不仅要将操作做为类的一部分,同时要把对象与其状态结合起来,进行对象状态行为的测试。类测试可以分为以下四个部分:

  1)基于服务的测试:测试类中的每一个服务(即方法);

  2)基于对象的测试:因为类是一个抽象定义的、属性和操作的封装体,只有实例化后才能起作用,因此需要对类进行实例化测试,类实例化测试的实现是通过构造函数和析构函数来完成的;

  3)基于状态的测试:考察类的实例在某生命周期各个状态下的情况;

  4)基于响应状态测试:从类和对象的责任出发,以外界向对象发送特定的消息序列来测试对象。

  2、类簇测试

  类簇是一组相互合作的类。类簇测试主要考察一组协同操作的类之间的相互作用。测试重点是类之间的逻辑关系,例如关联、继承、聚合、多台等,检查类之间的相互配合。

  1)关联和聚合关系的测试:将具有关联和聚合关系的类组装在一起,选择其中主动发送消息的类的测试用例为此测试的用例,加载驱动程序运行测试用例,检验类间的传递与响应。

  2)继承关系的测试:D.E.Perry和G.E.Kaiser根据Weyuker的测试充分性公理对该问题进行了讨论,认为子类中继承的方法和重定义的方法必须在子类的环境中重新测试,因为对被继承方法是充分的测试集,对重定义的方法未必是充分的。对继承关系的测试主要是对派生类继承部分的测试,它可重用父类的测试用例,利用回归测试进行,对派生类的非继承部分需要重新设计测试用例进行类测试。

  3)多态/动态绑定的测试:多态/动态绑定显著增加了系统运行中可能的执行路径。由于多态/动态绑定所带来的不确定性,使得涉及多态实例变量的测试用例大幅度增长。多态/动态绑定实例变量的每一种可能取值应至少在测试用例中出现一次。

  从类与类之间的相互关系出发,给出对面向对象软件的类集成测试的两种不同策略。

  1)基于线程的测试:这种测试策略集成对某输入或事件作出回应的相互协作的一组类(即一个线程),分别集成并测试每个线程,同时应用回归测试保证没有产生副作用;

  2)基于使用的测试:这种策略通过测试那些几乎不使用服务器类的类(称为独立类)而开始构造系统,在独立类测试完成后,再增加使用独立类的类(称为依赖类)进行测试,一直到构成完整的系统。

  其测试用例可由多种方案结合生成。如根据类的继承关系图来纵向检查类,同时又根据对象之间方法的相互作用来横行类的关系图。设计测试用例时,不但要设计确认类功能满足的输入,还应该有意识地设计一些被禁止的用例,以便确认类是否有不合法的行为产生。

  3、系统测试

  系统测试是对所有类和主程序构成的整个系统进行的整体测试,以验证软件系统的正确性和性能指标,满足规格说明书和任务书所指定的要求。它与传统的系统测试一样,可套用传统的系统测试方法,两者的区别只在于测试用例的形式有所不同,其测试用例可以从对象-行为模型和作为面向对象分析的一部分的事件流图中导出。

  在面向对象的系统测试中,为了导出测试案例,测试者可以使用分析模型中的使用案例。使用案例能够用于导出测试案例以发现不能满足用户需求的错误。系统测试应尽量搭建与用户实际使用环境相同的测试平台,应保证被测系统的完整性。系统测试不仅是检验软件的整体行为表现,也是对软件开发设计的再确认。