第15次课-面向对象的测试

面向对象的软件测试

1、面向对象测试的概述

  • 面向对象软件测试的目标与传统测试一样

即用尽可能低的测试成本和尽可能少的测试用例,发现尽可能多 的软件缺陷。

  • 变化

面向对象=对象+类+继承+通信(Coad和Yourdon定义) 新特点:封装、继承、多态

  • 这些变化带来了产生新错误的可能,带来了测试的变化:

    1)基本功能模块

    系统的基本构造单元不再是传统的功能模块,而是类和对象。在 测试过程中,不能仅检查输入数据产生的输出结果是否与预期结 果相吻合,还要考虑对象的状态变化,方法间的相互影响等。

    2)系统的功能实现

    系统的功能体现在对象间的协作上,而不再是简单的过程调用。

    3)封装对测试的影响

    封装使对象的内部状态隐蔽,如果类中未提供足够的存取函数来 表明对象的实现方式和内部状态,则类的信息隐蔽机制将给测试 带来困难。

    4)继承对测试的影响

    若一个类得到了充分的测试,当其被子类继承后,继承的方法在 子类的环境中的行为特征需要重新测试。

    5)多态对测试的影响

    多态依赖于不规则的类层次的动态绑定,可能产生非预期的结果。

1.2开发阶段的面向对象的软件测试有

面向对象分析的测试(OOA Test)

面向对象设计的测试(OOD Test)

面向对象编程的测试(OOP Test)

面向对象单元测试(OO Unit Test)

面向对象集成测试(OO Integrate Test)

面向对象系统测试(OO System Test)

OOA Test和OOD Test :是对分析结果和设计结果的测试, 主要是对分析设计产生的文本进行,是软件开发前期的关 键性测试。

OOP Test:主要针对编程风格和代码实现进行测试,其主要的 测试内容在面向对象单元测试和面向对象集成测试中体现。

面向对象单元测试:是对程序内部具体单一的功能模块的测试, 主要就是对类和类成员函数的测试

面向对象集成测试:主要对系统内部的相互服务进行测试,如 成员函数间的相互作用,类间的消息传递等。 面向对象集成测试不但要基于面向对象单元测试,更要参见 OOD或OOD Test结果。

面向对象系统测试:主要以用户需求为测试标准,也要借鉴 OOA或OOA Test结果。

2、开发前期的面向对象测试

2.1 面向对象分析(OOA)的测试

根据Coad和Yourdon方法所提出的OOA实现步骤,对 OOA阶段的测试划分为以下五个方面:

1)对认定的类的测试

2)对认定的结构的测试

3)对认定的主题的测试

4)对定义的属性和实例关联的测试

5)对定义的服务和消息关联的测试

2.2 面向对象设计(OOD)的测试

2.3 面向对象编程(OOP)的测试

• 3、开发后期的面向对象测试

3.1 面向对象的单元测试

传统的单元测试主要关注模块的算法;而面向对象软件的类测试主 要是测试封装在类中的操作以及类的状态行为。 为此需要分两步走:

1) 测试与对象相关联的单个操作。 它们是一些函数或程序,传 统的白盒测试和黑盒测试方法都可以使用。 单独地看类的成员函数,与过程性程序中的函数或过程没有本质 的区别,几乎所有传统的单元测试中使用的方法,都可在面向对 象的单元测试中使用。

2) 测试单个对象类。 黑盒测试的原理不变,但等价划分的概念 要扩展以适合操作序列的情况。

  1. 对象操作的测试

    1)在面向对象程序中,对象的操作(成员函数)通常都很小,功能 单一,函数间调用频繁,易出现一些不宜发现的错误。

    在设计测试用例时,应对以函数返回值作为条件判断,字符 串操作等情况特别注意。

    2)面向对象编程的特性使得对成员函数的测试,又不完全等同 于传统的函数或过程测试。尤其是继承特性和多态特性,Brian Marick 提出了两点:

    (1)继承的成员函数可能需要重新测试

    (2)对父类的测试用例不能照搬到子类

  2. 对象类测试

    在测试对象时,完全的覆盖测试应当包括: • 隔离对象中所有操作,进行独立测试。

    测试对象中所有属性的设置和访问。

    测试对象的所有可能的状态转换。所有可能引起状态改变的事件 都要模拟到。

设计操作的测试用例时的要点:

设计对象类功能测试时的要点:

3.2 面向对象的集成测试

• 传统的集成测试,有两种方式通过集成完成的功能模 块进行测:自顶向下集成、自底向上集成

• 当开发面向对象系统时,集成的层次并不明显。而当 一组对象类通过组合行为提供一组服务时,则需将它 们一起测试,这就是簇测试。此时不存在自底向上和 自顶向下的集成。

对象集成测试又称交互测试,目的是确保对象的消息传递能够正确 进行。

• 面向对象系统的集成测试有 3 种可用的方法:

1)类层次测试

这种测试着眼于系统结构,首先测试几乎不使用服务器类的独立 类,再测试那些使用了独立类的下一层次的(依赖)类。这样一 层一层地持续下去,直到整个系统构造完成。

2)基于线程的测试

它把为响应某一系统输入或事件所需的一组对象类组装在一起。 每一条线程将分别测试和组装。因为面向对象系统通常是事件驱 动的,因此这是一个特别合适的测试形式。

集成测试只关注于系统的结构和内部的相互作用。面 向对象的集成测试可以分成两步进行:先进行静态测 试,再进行动态测试。

3.3 面向对象的确认测试

与传统的确认测试一样,面向对象软件的有效性集中在用户可见 的动作(事件驱动与过程)和用户可识别的系统输出(结果), 通过测试检验软件是否满足用户的需求。

在面向对象的确认测试中,通常采用传统的黑盒测试方法,以证 明软件功能和需求的一致性。

3.4 面向对象的系统测试

系统测试应尽量搭建与用户实际使用环境相同的测试平台,应该保 证被测系统的完整性,对临时没有的系统设备部件,也应有相应的 模拟手段

系统测试时,应该参考OOA分析的结果,对应描述的对象、属性和各 种服务,检测软件是否能够完全再现问题空间

系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是 对软件开发设计的再确认

它与传统的系统测试一样, 可套用传统的系统测试方法