《面向对象测试论文:面向对象的类测试技术研究(精品).docx》由会员分享,可在线阅读,更多相关《面向对象测试论文:面向对象的类测试技术研究(精品).docx(5页珍藏版)》请在课桌文档上搜索。
1、面对对象测试论文:面对对象的类测试技术探讨(精品)面对对象测试论文:面对对象的类测试技术探讨技术探讨面对对象测试论文:面对对象的类测试摘要:类是面对对象软件的基本构成单元,类测试是面对对象软件测试的关键。从基于服务的、基于对象动态测试模型的、基于流图的以及基于规约的四个方面论述了类测试的思想和方法。关键词:面对对象;软件测试;类测试1面对对象软件的类测试面对对象软件从宏观上来看是各个类之间的相互作用。在面对对象系统中,系统的基本构造模块是封装了的数据和方法的类和对象,而不再是一个个能完成特定功能的功能模块。每个对象有自己的生存周期,有自己的状态。消息是对象之间相互恳求或协作的途径,是外界运用对
2、象方法及获得对象状态的唯一方式。对象的功能是在消息的触发下,由对象所属类中定义的方法与相关对象的合作共同完成,且在不同状态下对消息的响应可能完全不同。对象中的数据和方法是一个有机的整体,测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合,还要考虑对象的状态。模块测试的概念已不适用于对象的测试类测试将是整个测试过程的一个重要步骤,它与传统测试方法的区分可用图1来表示。面对对象软件的类测试与传统软件的单元测试相对应,但类包含一组不同的操作,并且某特别操作可能作为一组不同类的一部分存在。同时,一个对象有它自己的状态和依靠于状态的行为,对象操作既与对象的状态有关,但也可能变更对象的状态。因此
3、,类测试时不能孤立地测试单个操作,要将操作作为类的一部分;同时要把对象与其状态结合起来,进行对象状态行为的测试类的测试内容分为:(1)基于服务的测试(测试类中的每一个服务);(2)基于状态的测试(考察类的实例在其生命周期各个状态下的状况);基于响应状态的测试(从类和对象的责任动身,以外界向对象发送特定的消息序列的方法来测试对象的各个响应状态)。如图2所示。2类测试技术2.1基于服务的类测试技术基于服务的类测试主要考察封装在类中的一个方法对数据进行的操作,它可以采纳传统的白盒测试方法。为克服软件测试的盲目性和局限性,保证测试的质量,提高软件的牢靠性,下面我们介绍一种类的服务的测试模型及相应的测试
4、策略。BBD通常有两种获得途径。一是采纳逆向工程的方法根据源程序画出流程图,然后构造出BBDo但这终归是在缺少软件开发前期的分析、设计文档或文档不齐全的状况下退而求其次的方法。当源程序不正确时构造出来的BBD就是错误的。另一种途径就是追根溯源,在软件的分析、设计阶段就依据测试的须要构造出相应的BBD0这样就能从根本上解决问题,正确地指导类的服务的测试。2.2 基于层次增量的类测试层次增量测试的基本思想是:首先分别测试父类的各个成员函数,再测试成员函数间的相互作用,把测试用例和执行信息保存在/测试历史中,在测试子类时,依据父类的测试历史修改部分的定义以及实现语言的继承映射来确定子类中的哪些特征应
5、当重测试以及父类的哪些测试用例可以复用。这种依据类间继承关系的层次特性对类进行增量测试的技术是由M.Harrold等人提出的,其特点是复用父类的测试信息来指导子类的测试。每一个子类看作由两部分组成:从父类继承的部分和修改部分,如图3所示,其中符号I为并置运算符。类中的特征被分为6种类型:新特征:子类中新定义的特征;递归特征:在父类中定义、未被子类重定义的继承特征;重定义特征:在父类中定义、又在子类中重定义的特征,重定义特征在子类中屏蔽了同名(同参数表)的父类特征;虚新特征虚特征是指其实现尚不完整、留待子类重定义的特征,虚新特征是指子类中新定义的虚特征;虚递归特征:在父类中定义的虚特征,被子类继
6、承后未重定义的特征;虚重定义特征:在父类中定义的虚特征,在子类中被重定义的特征,重定义特征在子类中屏蔽了同名(同参数表)的父类特征。父类中各个成员函数的测试采纳传统的单元测试技术,可以把传统的基于规约和基于程序的测试技术相结合选择测试集。类中每一个成员函数的测试历史是一个三元组mi(TSi,test),(TPi,test),其中mi为成员函数;TSi为基于规约的测试集;TPi为基于程序的测试集;test标识该测试集是否要(重)运行。同一类中成员函数的相互作用的测试事实上是一种集成测试,如何进行这一测试是依据类图来确定的。在类图中,节点表示类中的一个成员函数或数据成员,有向边表示发送消息。测试数
7、据集的选择也可应用基于规约和基于程序的测试方法。测试历史的形式也是一个三元组mKTIS!,test),TIPitest,其中mi是类图中某一子图的根节点;TlSi是基于规约的集成测试集;TlPi是基于程序的集成测试集;取表示该测试集要全部(重)运行,取表示部分(重)运行,取表示无需(重)运行。一个类的测试历史是各成员函数测试历史的集合和集成测试历史集合的并集。2.3 基于流图的类测试技术把传统的基于流图的测试技术应用于类测试提出了一种构造类流图的框架。在类流图中,节点表示操作,操作A和操作B之间的有向边表示允许某引用类(Client)在调用操作A之后调用操作B,确定节点间是否可以联边的依据是该
8、类的规约。传统程序流图的测试充分性准则可以在类流图中找到对应,如类流图的节点覆盖要求测试时的操作序列应使每个操作至少执行一次,分支覆盖要求测试时的操作序列应覆盖类流图中的每条边至少一次。还可以在类流图上给出类似于数据流的定义性出现!引用性出现、定义-引用对等概念。在类流图中,全部对象的定义性出现和引用性出现依据操作(节点)中是否定义或引用该对象来确定,然后在谓词性引用和限制操作。计算性引用和非限制操作之间建立对应关系,从而可以类似地给出数据流准则中的定义覆盖准则、引用覆盖准则和定义-引用路径覆盖准则等。图4给出堆栈类(类名为Stack,T为栈元类型)的类流图,表1给出每个操作的定义性和引用性运用状况。基于流图的类测试技术把传统的基于规约的测试应用于类测试,完全依靠于类的实现,系统地而不是随机地产生测试用例,且可全部自动化。参考文献EU 龚红仿,孙乐,仝青山,柳湘华.面对对象的类测试方法探讨J.长沙电力学院学报,2006,(8).2李军义,高捷,童小娇.面对对象的类的状态测试技术探讨J.计算机应用探讨,2005,(12).