中图分类号 : TP311 文献标识码 : 文章编号 :
An Approach to Generate Integration Test Cases based on UML Collaboration Diagrams Linzhang Wang, Xuandong Li,Guoliang Zheng (CS Department , Nanjing University, Hankou Road 22 P.O. Box 419, 210093, Nanjing) Abstract: UML collaboration diagrams represent the structure relationship and interactive behavior of the objects involving in a collaboration of the software system, whether they are correctly implemented or not can be validated by integration testing. This paper propose an approach to generate integration test cases based on UML collaboration diagrams, take collaboration diagram as test model, from which we can extract information to generate integration test cases for testing the behavior. Firstly, the method identifies all the scenario paths in the diagram which represent use case realization by traverse the direct successors of each message. Then it selects and traverses each scenario path to get the method call sequence, path condition and parameters. Lastly, it applies category partition method to generate rational combination of input parameters, environmental conditions, as well as the corresponding output and method call sequence, to form a test case for each scenario path, thus we can test the interactive behavior of the software. This method completely base on UML, combine white-box and black-box test method to generate fewer test cases to test the gray-box behavior. In this paper, we apply this approach to an example of constructing sessions between cardholder and the bank through ATM, proving its feasibility and practicability, also propose a corresponding tool framework to facilitate its automation, thus to easily be deployed into the UML –based software development process. Keywords: test cases generation, integration testing, UML collaboration diagram, scenario path 1、引言 面向对象的技术因为能够解决传统程序设计语言的问题,自提出后,一度成为研究热点,事实上采用面向对象技术减少了不少错误的发生,对于提高软件质量起到了很大的作用,但是面向对象技术本身在任何情况下都不会排除软件测试的动机,同时面向对象语言的本质特征,如继承、封装、和多态等,也带来了新的故障风险,并给软件测试提出了新的挑战。[1,2,9] 区别于传统软件的功能分解,面向对象软件是通过合成来构造软件的,因而集成是面向对象软件开发中最重要的工作,面向对象软件构造过程中有的不同层次的集成,包括:从方法到类的集成,类通过继承集成,类通过容器集成,类到组件的集成,组件到应用系统的集成。在面向对象的迭代式增量开发过程中,通过不断的集成产生系统的可执行的版本,但每一个集成的环节都可能引入错误,导致软件中存在缺陷,为了能够发现软件集成中的问题,面向对象软件的集成测试非常重要。[4] 对于传统软件的集成测试,可以根据设计阶段形成的功能分解树,采用自顶向下或自底向上逐步测试用经过测试的单元组装成系统的过程中有无错误。[3]而面向对象软件采用的是通过组合实现系统的功能,没有一个功能分解树可用,所以传统的基于功能分解的集成测试策略不适合面向对象软件。要检验最终实现中各种集成是否与设计的集成一致,则需要对每一个集成层次进行测试,而这里的集成分为结构集成和行为集成,所以面向对象软件的集成测试包含结构集成测试和行为集成测试。结构集成测试主要测试类的继承、类的容器、类的接口、组件的接口中有无错误;行为集成测试主要是类内方法交互、类间方法交互、组件间交互是否被错误地实现。测试工作的核心主要是生成测试用例,在面向对象软件开发过程中系统的规约、设计、代码是生成测试的信息来源,是软件在其生命周期不同阶段的变体,当然规约、设计、代码在每一阶段的测试中都起相应的作用,特别地,系统规约是生成系统测试的测试用例的基础和系统测试的检验依据,软件代码是生成单元测试用例的基础和单元测试的检验依据,系统设计是生成集成测试用例和集成测试的检验依据。系统的设计信息有助于理解系统功能和结构,设计模型包含规约和程序结构的信息,同时也描述了系统的相应功能片断的行为,因此也被称为灰盒。可以结合白盒测试和黑盒测试方法,从设计信息生成集成测试用例,测试设计模型表示的软件系统的灰盒行为。 UML是面向对象系统分析、设计的标准的建模语言,自从在1997年成为建模语言事实上的标准后,就得到学术界的推崇和工业界的支持,使得UML广为使用,基于UML的方法和实用技术的研究成为将来的发展趋势。UML对面向对象软件开发全生命周期的支持也使得软件开发人员优先用它来描述系统。[8]正像集许多优点的面向对象技术不能免除软件测试一样,使用UML进行面向对象软件开发,在提高软件质量的同时,仍然需要测试来确认软件分析、设计、实现的一致性和正确性。同时基于UML开发的软件系统,软件开发的分析、设计阶段工作成果多为各种模型图,系统的可用信息都在这些模型图中,给信息的提取带来了新的问题,从而也给测试带来新的课题。对测试而言,原先的基于规约或者是基于程序的方法都不能直接使用,对基于UML模型的测试,要将问题转换到原来传统测试方法可以处理的问题空间中加以解决,转换工作主要解决信息提取问题,然后用常规测试方法生成测试。面向对象的软件中,对象通过交互来实现行为,UML的交互图[6,7]是描述一组对象间的结构关系和交互行为设计的最佳选择,主要有顺序图和协作图两种,顺序图关注全局的时序,协作图关注协作对象之间的关系,本文主要研究协作图。UML协作图描述了系统的一个协作中参与对象之间如何交互,集成测试正是要验证这些对象是否正确交互,所以我们研究基于UML协作图的集成测试用例生成方法。本文中我们使用UML协作图作为系统功能片断的高级描述,用来作为生成测试的基础,使得在系统设计阶段一开始就可以计划集成测试阶段的测试。在软件开发早期准备软件测试,在软件的系统分析、设计阶段,利用每一阶段的人工制品(artifact)生成软件测试各个阶段所需的测试用例,在代码阶段结束后便可以开始测试工作,而且对分析设计模型进行分析的同时也能发现分析、设计本身的缺陷,以便及时排除,以防缺陷随着软件开发过程的进展而被放大。由于UML在工业界的使用越来越普遍,而相应支持在分析设计阶段基于模型生成测试用例的实用方法和支持工具还不多见。我们希望能够研究出仅从UML分析、设计模型图自动生成测试用例的方法,而且不需要使用者的除UML外其他方面专业的知识,能够实现自动化而不增加用户额外的工作量,这样的测试方法容易被已经使用UML的工业界采用。[8,10] 本文研究如何通过面向对象软件设计阶段的UML协作图选择合适的集成测试用例的方法,第2部分对协作图的语法和语义作了详细的介绍,并回顾了测试模型、协作集成测试模式、协作故障模型等知识;第3部分对基于协作图生成测试用例的方法作了总体介绍,详细描述了从协作图生成测试用例的具体算法和支撑工具框架原型,第4部分是相关工作的介绍,最后是结束语和将来工作的构想。