当前位置:文档之家› 面向对象类测试技术研究

面向对象类测试技术研究

面向对象的类测试技术研究
摘要:类是面向对象软件的基本构成单元,类测试是面向对象软件测试的关键。

从基于服务的、基于对象动态测试模型的、基于流图的四个方面论述了类测试的思想和方法。

关键词:面向对象软件测试类类测试
1 面向对象软件的类测试
类的概念是面向对象程序设计的核心概念。

把数据和对象的操作和处理封装在一个程序模块中的方法,可以说是人们积几十年程序设计实践的经验总结。

把程序以类的形式组织成若干模块,使其获得了最佳的结构特性,类的概念的引入使程序设计技术发生了革命性的转变。

从结构程序设计中以函数作为程序的基本模块转变为面向对象程序设计中,以类作为程序的基本模块,这一变化使程序设计技术出现了质的飞跃。

类的概念抓住了程序的本质。

程序的基本元素是数据,而函数是围绕数据进行的处理和操作。

类的使用使得:程序设计本身更有条理了;程序的可读性好了:程序设计的过程真正像是机器部件的组装;程序由多个程序员设计变得方便和自然;由于程序的零部件化,使得程序的可重用性变成切实可行的事情。

正是由于面向对象软件构件的基础是类,所以类的测试显得尤为重要。

类测试是面向对象软件测试的关键。

面向对象软件的类测试与传统软件的单元测试相对应,但和传统的单元测试不一样。

类测试时不仅要将操作作为类的一部分,同时要把对象与其状态结合起
来,进行对象状态行为的测试。

类的测试按顺序分为以下三个部分:(1)基于服务的测试:测试类中的每一个方法;(2)基于状态的测试:考察类的实例在其生命周期各个状态下的情况;(3)基于响应状态的测试:从类和对象的责任出发,以外界向对象发送特定的消息序列的方法来测试对象的各个响应状态。

2 类测试技术
(1)基于服务的类测试技术
基于服务的类测试主要考察封装在类中的一个方法对数据进行
的操作。

它可以采用传统的白盒测试方法,如:控制流测试、数据流测试、循环测试、排错测试、分域测试等。

但由于受面向对象软件测试技术发展水平等方面因素的限制,测试人员在选择测试用例时往往都是根据直觉和经验来进行,给测试带来很大的盲目性;再者由于测试人员的个性及倾向性也使得选择的测试用例仅能测试
出其所熟悉的某一方面的错误,许多隐含的其它错误不能被检测出来,这在无形中降低了软件的可靠性。

为克服软件测试的盲目性和局限性,保证测试的质量,提高软件
的可靠性,kung等人提出的块分支图(block branck diagram),简称bbd)是一种比较好的类的服务的测试模型bbd通常有两种获取途径。

一是采用逆向工程的方法根据源程序画出流程图,然后构造出bbd。

但这毕竟是在缺少软件开发前期的分析、设计文档或文档不齐全的情况下退而求其次的办法。

当源程序不正确时构造出来的bbd就是错误的。

另一种途径就是追根溯源,在软件的分析、设计阶
段就根据测试的需要构造出相应的bbd。

这样就能从根本上解决问题,正确地指导类的服务的测试。

(2)基于层次增量的类测试
层次增量测试的基本思想是:首先分别测试父类的各个成员函数,再测试成员函数间的相互作用,把测试用例和执行信息保存在/测
试历史中,在测试子类时,根据父类的测试历史修改部分的定义以
及实现语言的继承映射来决定子类中的哪些特征应当重测试以及
父类的哪些测试用例可以复用。

这种根据类间继承关系的层次特性对类进行增量测试的技术是
由m. harrold等人提出的,其特点是复用父类的测试信息来指导子类的测试。

每一个子类看作由两部分组成:从父类继承的部分和修改部分。

类中的特征被分为6种类型:新特征:子类中新定义的特征;递归特征:在父类中定义、未被子类重定义的继承特征;重定义特征:在父类中定义、又在子类中重定义的特征,重定义特征在子类中屏蔽了同名(同参数表)的父类特征;虚新特征虚特征是指其实现尚不完整、留待子类重定义的特征,虚新特征是指子类中新定义的虚特征;虚递归特征:在父类中定义的虚特征,被子类继承后未重定义的特征;虚重定义特征:在父类中定义的虚特征,在子类中被重定义的特征,重定义特征在子类中屏蔽了同名(同参数表)的父类特征。

同一类中成员函数的相互作用的测试实际上是一种集成测试,如何进行这一测试是根据类图来确定的。

在类图中,节点表示类中的一个成员函数或数据成员,有向边表示发送消息。

测试数据集的选
择也可应用基于规约和基于程序的测试方法。

测试历史的形式也是一个三元组{m i(ts i,test),(tp i,test)},其中m i是类图中某一子图的根节点;ts i是基于规约的集成测试集;tp i是基于程序的集成测试集;取表示该测试集要全部(重)运行,取表示部分(重)运行,取表示无需(重)运行。

一个类的测试历史是各成员函数测试历史的集合和集成测试历史集合的并集。

(3)基于流图的类测试技术
把传统的基于流图的测试技术应用于类测试,提出了一种构造类流图的框架,在类流图中,节点表示操作,操作a和操作b之间的有向边表示允许某引用类在调用操作a之后调用操作b,确定节点间是否可以联边的依据是该类的规约。

传统程序流图的测试充分性准则可以在类流图中找到对应,如类流图的节点覆盖要求测试时的操作序列应使每个操作至少执行一次,分支覆盖要求测试时的操作序列应覆盖类流图中的每条边至少一次。

3 结束语
从目前的研究现状来看,现有的针对面向对象软件测试的方法还存在许多问题。

第一,类不能直接测试,测试类只能通过类的实例———对象进行,随之而来的一个问题是,对于无法实例化的抽象类如何进行测试。

第二,现有的针对面向对象软件测试的方法都忽略了动态绑定的作用和影响。

面向对象程序设计的继承和动态绑定所带来的多态性对软件测试的影响有些文献中虽然有所论及,但是
不仅缺乏针对这一特点的测试方法,而且还有许多问题有待进一步研究。

第三,测试的充分性问题,充分性准则对软件测试的揭错能力具有重要影响。

对传统语言的软件测试已经存在多种充分性准则,但对面向对象的软件测试,目前尚无普遍接受的充分性准则。

参考文献:
[1]龚红仿,孙乐,仝青山,柳湘华.面向对象的类测试方法研究[j].长沙电力学院学报,2006,(8).
[2]李军义,高捷,童小娇.面向对象的类的状态测试技术研究[j].计算机应用研究,2005,(12).。

相关主题