技术开发 频道

面向对象软件的测试

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

    传统的面向过程分析是一个功能分解的过程,是把一个系统看成可以分解的功能的集合。这种传统的功能分解分析法的着眼点在于一个系统需要什么样的信息处理方法和过程,以过程的抽象来对待系统的需要。而面向对象分析(OOA)是"把E-R图和语义网络模型,即信息造型中的概念,与面向对象程序设计语言中的重要概念结合在一起而形成的分析方法",最后通常是得到问题空间的图表的形式描述。

    OOA直接映射问题空间,全面的将问题空间中实现功能的现实抽象化。将问题空间中的实例抽象为对象(不同于C++中的对象概念),用对象的结构反映问题空间的复杂实例和复杂关系,用属性和服务表示实例的特性和行为。对一个系统而言,与传统分析方法产生的结果相反,行为是相对稳定的,结构是相对不稳定的,这更充分反映了现实的特性。OOA的结果是为后面阶段类的选定和实现,类层次结构的组织和实现提供平台。因此,OOA对问题空间分析抽象的不完整,最终会影响软件的功能实现,导致软件开发后期大量可避免的修补工作;而一些冗余的对象或结构会影响类的选定、程序的整体结构或增加程序员不必要的工作量。因此,本文对OOA的测试重点在其完整性和冗余性。

    尽管OOA的测试是一个不可分割的系统过程,为叙述的方便,对OOA阶段的测试划分为以下五个方面:
  ☆ 对认定的对象的测试
  ☆ 对认定的结构的测试
  ☆ 对认定的主题的测试
  ☆ 对定义的属性和实例关联的测试
  ☆ 对定义的服务和消息关联的测试  

    1 对认定的对象的测试:

    OOA中认定的对象是对问题空间中的结构,其他系统,设备,被记忆的事件,系统涉及的人员等实际实例的抽象(参见[2])。对它的测试可以从如下方面考虑:

    1.1 认定的对象是否全面,是否问题空间中所有涉及到的实例都反映在认定的抽象对象中。

    1.2 认定的对象是否具有多个属性。只有一个属性的对象通常应看成其他对象的属性,而不是抽象为独立的对象。

    1.3 对认定为同一对象的实例是否有共同的,区别于其他实例的共同属性。

    1.4 对认定为同一对象的实例是否提供或需要相同的服务,如果服务随着不同的实例而变化,认定的对象就需要分解或利用继承性来分类表示。

    1.5 如果系统没有必要始终保持对象代表的实例的信息,提供或者得到关于它的服务,认定的对象也无必要。

    1.6 认定的对象的名称应该尽量准确,适用。

    2 对认定的结构的测试

    在Coad方法中,认定的结构指的是多种对象的组织方式,用来反映问题空间中的复杂实例和复杂关系。认定的结构分为两种:分类结构和组装结构。分类结构体现了问题空间中实例的一般与特殊的关系,组装结构体现了问题空间中实例整体与局部的关系。   2.1 对认定的分类结构的测试可从如下方面着手:

    2.1.1 对于结构中的一种对象,尤其是处于高层的对象,是否在问题空间中含有不同于下一层对象的特殊可能性,即是否能派生出下一层对象。

    2.1.2 对于结构中的一种对象,尤其是处于同一低层的对象,是否能抽象出在现实中有意义的更一般的上层对象。

    2.1.3 对所有认定的对象,是否能在问题空间内向上层抽象出在现实中有意义的对象

    2.1.4 高层的对象的特性是否完全体现下层的共性

    2.1.5 低层的对象是否有高层特性基础上的特殊性

    2.2 对认定的组装结构的测试从如下方面入手:

    2.2.1 整体(对象)和部件(对象)的组装关系是否符合现实的关系。

    2.2.2 整体(对象)的部件(对象)是否在考虑的问题空间中有实际应用。

    2.2.3 整体(对象)中是否遗漏了反映在问题空间中有用的部件(对象)。

    2.2.4 部件(对象)是否能够在问题空间中组装新的有现实意义的整体(对象)。

    3 对认定的主题的测试

    主题是在对象和结构的基础上更高一层的抽象,是为了提供OOA分析结果的可见性,如同文章对各部分内容的概要。对主题层的测试应该考虑以下方面:

    3.1 贯彻George Miller 的"7+2"原则,如果主题个数超过7个,就要求对有较密切属性和服务的主题进行归并。

    3.2 主题所反映的一组对象和结构是否具有相同和相近的属性和服务。

    3.3 认定的主题是否是对象和结构更高层的抽象,是否便于理解OOA结果的概貌(尤其是对非技术人员的OOA 结果读者)。

    3.4 主题间的消息联系(抽象)是否代表了主题所反映的对象和结构之间的所有关联。

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

    属性是用来描述对象或结构所反映的实例的特性。而实例关联是反映实例集合间的映射关系。对属性和实例关联的测试从如下方面考虑:

    4.1 定义的属性是否对相应的对象和分类结构的每个现实实例都适用。

    4.2 定义的属性在现实世界是否与这种实例关系密切。

    4.3 定义的属性在问题空间是否与这种实例关系密切。

    4.4 定义的属性是否能够不依赖于其他属性被独立理解。

    4.5 定义的属性在分类结构中的位置是否恰当,低层对象的共有属性是否在上层对象属性体现。

    4.6 在问题空间中每个对象的属性是否定义完整。

    4.7 定义的实例关联是否符合现实。

    4.8 在问题空间中实例关联是否定义完整,特别需要注意1-多和多-多的实例关联。

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

    定义的服务,就是定义的每一种对象和结构在问题空间所要求的行为。由于问题空中实例间必要的通信,在OOA 中相应需要定义消息关联(详细内容参见[3])。对定义的服务和消息关联的测试从如下方面进行:

    5.1 对象和结构在问题空间的不同状态是否定义了相应的服务。

    5.2 对象或结构所需要的服务是否都定义了相应的消息关联。

    5.3 定义的消息关联所指引的服务提供是否正确。

    5.4 沿着消息关联执行的线程是否合理,是否符合现实过程。

    5.5 定义的服务是否重复,是否定义了能够得到的服务。

0
相关文章