APP下载

面向测试的构件系统模型及测试用例生成方法

2014-08-04曹真曹旻

计算机工程与应用 2014年22期
关键词:测试用例调用消息

曹真,曹旻

上海大学计算机工程与科学学院,上海 200072

面向测试的构件系统模型及测试用例生成方法

曹真,曹旻

上海大学计算机工程与科学学院,上海 200072

1 引言

随着软件系统规模的不断增长,构件系统的理论日益成熟,基于构件的软件开发逐渐成为软件开发的重要方法,也成为解决软件危机的重要途径之一。在构件技术中,构件描述模型和构件系统集成测试技术是保证基于构件的软件系统质量的关键技术之一。构件描述模型是对构件功能、性质的模型抽象,关于构件描述的研究已经有很多,但依然没有统一的构件描述模型标准,而在已经出现的构件描述模型中,大多数模型更多关心的是构件的使用信息,如:构件版本、使用环境、接口信息等,很少包含有为构件系统测试服务的相关描述,导致构件系统开发完毕后在完成集成测试阶段的功能测试和边界测试等工作时,往往需要对系统逆向建立测试模型,再在测试模型的基础上通过模型测试技术进一步生成测试用例,导致了对构件系统的多次建模,增加了软件开发的成本。通常情况下,集成测试的功能测试和边界测试的测试模型建立需要构件间的交互信息作为基础,如果可以在构件描述模型中就加入这些信息,在构件系统搭建时对这些信息进行完善,则在系统搭建完毕后就可自动产生相关测试模型,进一步产生测试用例。省去了构件系统搭建完成后为了测试再手工为系统建立测试模型这一步骤,极大程度地提高了构件系统的开发效率,缩短了开发构件系统软件的周期。同时构件描述模型中的交互信息,可以在构建系统搭建过程中验证构件行为的正确性,进一步保证软件质量。

基于上述思想,本文提出一种改进的构件描述模型,称为面向测试的构件模型(Test-oriented Component System Model,TCSM)。与传统模型不同,TCSM模型着重关心构件的交互关系和行为约束等动态描述,这些动态描述为构件系统集成测试提供了大量可用信息。在此模型的描述体系基础上,提出一种在构件系统搭建时把该描述模型转换成测试模型的方法,该测试模型以UML协作图模型为基础,在语义上进行了一定拓展,实现了构件系统从描述模型到测试模型的自动转换。提出了一种自动生成测试用例的算法。实验表明,所产生的测试用例符合系统的实际使用场景,可以较完整地覆盖到构件系统的各个使用路径和交互行为。

2 相关工作

关于构件描述模型,在学术界和产业界已经有很多研究和发展,如早期提出的3C模型、REBOOT模型等。但3C、REBOOT等模型的抽象层次较高,是一种模板性质的描述,在具体构件使用时对构件的描述就显得不完备[1]。企业界和一些组织对构件模型进行了进一步研究并提出了各自的描述方法。OMG组织提出了CORBA模型[2],Sun公司提出了基于java的构件模型,即JAVABeans和EJB[3],Microsoft也有自己的COM模型[4]。上述模型较为清楚地描述了构件的特性和功能,但对构件系统的依赖关系、运行层次以及交互约束等动态描述尚有欠缺。为进一步描述构件的动态行为等信息,Wright、SOFA等构件模型一定程度上提供了构件行为层次上的描述,Wright运用CSP并对其进行一定的扩充,来描述构件接口的交互行为[5];SOFA使用了类正则(Regular-Like)表达式来描述构件在各个端口上的行为[6];文献[7]提出了一种描述构件间依赖关系的模型。但这些动态描述方法并没有专门从测试角度来考虑构件模型中应该包含的信息,也没有具体提出一种直接产生测试用例的方法,所以面向测试的构件描述模型需要进一步的研究和完善。本文提出的构件描述模型在包含构件必要的基本信息的同时,在模型中添加了大量动态信息描述,以便于良好地记录和体现构件的动态性与交互性。同时以测试为驱动,进一步考虑测试时所关心的信息要素和特点,优化模型中的动态信息内容,使其能直接为构件系统测试所使用。

在构件系统的模型测试研究方面,文献[8]提出了一种模型驱动的测试用例生成方法,并介绍了其基于JUnit的模型生成和模型测试框架,实现了从系统模型到测试模型的转换,但该框架主要适用于单元测试,缺失对大型构件系统集成测试的支持和优化;文献[9]中介绍了一种以面向对象技术为基础的模型测试技术,实现对系统中的类、接口、结构的方法有针对性地测试,但没有对方法和接口按照类型和关系进一步划分,并为其增加上下文关系对应的语义描述,所以在具体应用时,不能良好地测试大型系统中的逻辑和时序关系;文献[10]提出了一种基于UML时序图场景的模型测试方法,通过对系统UML模型的形式化解析,将UML模型转换为FSM模型,再通过FSM进一步产生测试用例,但UML模型本身的建立需要人工参与,而通过FSM模型产生测试用例的方法在复杂构件系统上应用时,容易产生状态爆炸问题。本文使用了一种基于UML协作图的测试模型,并在语义上对其进行了拓展。UML协作图强调的是调用和被调用的对象之间的组织结构、消息传输和上下文关系,这与基于构件的软件系统内部组成和工作原理极为相似。同时UML具有丰富的语义,并且支持形式化描述,这都有利于对构件系统的行为和逻辑进行进一步描述和验证。

3 面向测试的构件系统模型

本文提出的TCSM主要是用来描述构件提供的接口功能以及接口交互时的依赖与约束,而这些动态特性往往正是测试过程所关心的。Wu[11]和Mariani[12]对构件系统出现的错误进行了系统的分析和分类,认为这些错误的产生大多数来自于构件交互。Wu认为构件测试过程应该考虑以下几个内容:接口,消息,上下文关系,内容依赖关系。但其描述有大量的重复和冗余信息,也没有提出一套从描述产生测试用例的具体方案。

3.1 TCSM体系的定义

TCSM从测试角度出发,除了包含有构件的基本信息以外,还包含了构件的动态信息描述,并将构件动态描述内容分为以下几个方面:构件属性与接口、调用顺序、上下文依赖、输入返回。

构件属性与接口:构件本身具有属性;接口即为构件对外提供的接口函数。

调用类型:构件间相互调用的逻辑顺序类型,包括直接调用,嵌套调用,并行调用,异步调用。

上下文依赖:构件在被调用时受到的上下文关系约束,称为前置条件(执行调用操作前必须满足的约束条件),前置条件包含状态约束和值约束两类约束条件。

输入返回:构件间相互操作时的输入值和返回值。

定义1(TCSM)面向测试的构件系统模型可以表示为一个两元组,TCSM=(SD,DD),其中SD表示模型中的静态描述内容,DD表示模型中的动态描述内容。

定义2(SD)TCSM中的静态描述SD为一个四元组,SD=(BI,CE,AF,OP)。其中BI为构件基本信息,CE为构件使用环境,AF为构件应用领域,OP为构件运行性能。以上每一项也都由一个n元组构成,BI=(BI_name,BI_author,BI_time,BI_version),分别表示构件名称、构件作者、更新时间、版本号等信息,CE=(CE_config,CE_system,CE_platform),分别描述构件使用时的系统配置、操作系统、开发平台,AF=(AF_domain,AF_range,AF_type),代表构件的使用领域、应用范围、功能类型,OP=(OP_Frequency,OP_security,OP_stability,OP_duration},以上集合构成了TCSM的静态描述内容。

该静态描述体系较全面地描述了TCSM中构件的基本信息,与现有模型相比提供了更多的构件基本信息,也为构件系统的自动化测试提供了静态信息来源。

定义3(DD)TCSM的动态描述部分DD由一个四元组组成,DD=(CS,IS,CD,IR),分别代表构件接口信息、调用类型、上下文依赖、输入返回。其中CS为一个二元组,CS=(CS_name,CS_invokeName),CS_name表示构件方法名称,CS_invokeName表示该方法所调用的构件名称;IS的值集合为IS={IS_direct,IS_nest,IS_paiallel,IS_async},IS_direct代表直接调用,IS_nest代表嵌套调用,IS_paiallel代表并行调用,IS_async代表异步调用;CD为一个二元组,CD=(CD_state,CD_value),分别表示前置条件状态约束、前置条件值约束;IR=(IR_input,IR_return)也是一个二元组,其中IR_input表示输入,IR_input取值集合为{input0,input1,…,inputn},其中inputn为IR_input中所含参数,IR_input可以包含0个至n个参数,IR_return表示输出,IR_return可以为某个唯一值或者为空,表示包含1个或者0个返回参数。TCSM的DD结构树如图1所示。

图1 TCSM结构树

TCSM的动态描述与部分已有模型中的动态描述相比,着重关心构件间的交互方式和顺序信息,还增加了相关约束信息。而这些信息在搭建构件系统时也需要描述清楚,将其以构件描述的方式保存在TCSM中,既利于组合构件系统,又可用来生成测试场景,进一步生成测试路径。接下来进一步讨论其具体的实现方法。

3.2 TCSM的建立

本文以一个简单的基于构件的Web应用程序:学生选课系统(Student Course Selection System,SCSS)来说明如何建立TCSM描述系统,以及自动生成系统的测试用例。SCSS主要实现了学生网上在线选课的功能,学生在使用SCSS选课前需要先登录系统,登录成功后在选课过程中可以查询相关课程情况,完成选课后系统会发送邮件通知学生选课成功和课程信息。

SCSS包含的主要构件有:学生身份验证构件(Student Authentication)、课程信息查询构件(Course Information Search)和选课系统构件(Course Selection)。Student Authentication构件中包含有redirectToSelectionSys()接口,该接口功能为登录信息验证成功后自动进入选课系统;revalidate()接口,该接口功能为登录信息验证失败后返回登录界面要求用户重新输入登录信息。Course Information Search构件中包含有enterSelectionSys()接口,实现从课程查询页面进入选课系统。Course Selection构件中包含enterSearchSys()接口,实现从选课系统进入课程查询页面;updateDataBase()接口,实现将选课结果更新至数据库;sendMail()接口,将选课成功信息和课程基本信息发送至学生邮箱;redirectToLoginSys()接口,通过该接口可以退出登录并重新返回登录界面。SCSS构件系统构件间的关系模型如图2所示。

图2 SCSS构件间的关系模型

以SCSS中Course Selection构件的enterSearchSys和updateDataBase接口为例,分别为其建立TCSM。学生可以多次从选课系统进入课程信息查询系统然后再返回,所以认为enterSearchSys调用类型为嵌套,调用前的守卫信息为学生登录成功。学生在选课成功后,系统会同时更新数据库信息并给学生发送通知邮件,所以认为updateDataBase的调用类型为并行,守卫条件是选课成功。具体的XML描述如下:

依次为其他构件建立TCSM,受篇幅所限,SCSS的其他XML描述不再罗列,按照上述方法,完成对SCSS的TCSM建模。可见搭建好的TCSM模型中完整地保留了构件间的交互与层次信息,以及相关约束和输入输出信息,为构件系统的集成测试和接下来进一步实现测试模型的自动生产提供了必要信息和基础。

4 测试模型的自动生成

本节讨论从TCSM自动产生测试模型的方法。

定义4(CM)TCSM生成的测试模型CM是一个三元组,CM=(CP,MSG,MV),CP表示模型中所包含的所有构件的集合。MSG是构件间的消息集合MSG= {msgi|MSG},其中每个msgi∈MSG都是一个五元组,msg=(msg_name,msg_sequence,msg_guard,msg_input,msg_return),分别表示消息名称、消息序号、守卫条件、输入、输出。MV:CP×MSG→CP是迁移关系。

4.1 从TCSM自动生成测试模型

从TCSM到测试模型CM的具体转换算法如下:

(1)将TCSM中涉及到的所有构件加入测试模型的构件集合CP。

(2)将TCSM描述中的构件接口名转换为测试模型的消息名称,CS_name→msg_name。

(3)根据TCSM描述中的消息类型IS,以及所调用的目标构件名称CS_invokeName,生成测试模型中的消息序号msg_sequence。最高层次的信息直接用数字表示。如果消息类型为直接调用IS=IS_direct,则在前一消息的序号基础上加1,如前一消息的序号为1.1,则本次调用消息序号为1.2;如果消息类型为嵌套IS= IS_nest,则消息的层次降低,消息的序号层次加1,如上层的消息为1.1,发生嵌套调用后消息的序号变为1.1.1;如果发生并行调用IS=IS_paiallel,则在并行消息的序号上加小写字母,如消息1.1的两条并行消息为1.1a,1.1b;如果消息类型为异步调用IS=IS_async,则增加消息嵌套层次,与嵌套调用类似,同时消息调用的实线变为虚线。

(4)TCSM中的前置条件状态约束CD_state转换为测试模型调用消息的守卫条件msg_guard,在守卫条件满足时发生调用动作;前置条件值约束CD_value转换为测试模型中的分支条件,根据前置条件值的数量,决定测试模型中的分支路径数。如消息的前置条件值分为真和假两种取值,则代表产生两条分支路径,分支以大写字母区分,如两条选择路径可分别表示为1.1A和1.1B。

(5)TCSM中的输入输出,转换为协作图中的消息的输入输出,将IR_input所包含的输入参数转换至msg_input的参数中,将IR_return的返回值转换成msg_return的返回值。

根据以上准则,可把通过TCSM描述的构件系统自动转换为测试模型,之前学生选课系统(SCSS)根据该算法产生的测试模型图如图3所示。

生成的该测试模型完整地保留了构件系统的关键交互信息,利用这些信息可以准确地反应该构件系统的行为和约束。同时体现了构件间的时序关系,隐含了构件系统的使用场景,根据一定的路径覆盖准则,则可以进一步产生测试用例。

图3 TCSM自动产生的测试模式图

4.2 测试用例的自动生成

根据TCSM自动产生的测试模型,可以进一步自动生成测试用例。

4.2.1 测试覆盖准则

文献[13]提出了一种测试准则,但基于构件系统的自身特点,传统的测试覆盖准则不太适用于构件系统软件测试。文献[14]提出了一种适用于构件系统的模型测试覆盖准则,但对构件系统中并行关系和守卫条件没有提出具体的处理方法。文献[15]提出了一种产生约简测试集的方法,本文通过守卫条件对产生的测试用例进行了进一步优化和约简。

基于构件系统和TCSM的特点,提出下述测试覆盖准则:(1)每个组件之间的每条交互消息至少被覆盖一次;(2)每个有效场景的所有路径必须覆盖一次;(3)测试模型中的并行消息如果其中一条被覆盖,另外一条也必须被覆盖;(4)测试模型中的每条嵌套消息产生的循环路径必须分别被测试0次、1次、2次。

4.2.2 测试用例生成算法

在已经建立测试模型的前提下,测试用例生成的思路是,使用深度优先算法根据消息偏序关系以及消息类型遍历测试模型图,直到到达无后继的消息,从而生成一条测试路径,以此类推,生成所有测试场景。

具体方法如下:(1)将每条消息按照偏序关系以及消息类型找到它的直接后继,建立一张有向图;(2)找到有向图中的环,将环处理成一个节点;(3)按照测试准则用深度优先算法遍历图,产生测试路径;(4)检查路径中不符合消息前置、后置条件约束的路径,标注这些路径以与其他正常测试路径区分。同时根据消息类型检查无效测试路径(如并行消息包含不完整的路径,理论上是系统无法达到的),并去除这些路径;(5)将所有路径组合产生测试场景。测试用例生成算法的伪代码如下:

文献[16]提出了一种较为有代表性的从UML协作图生成测试用例的方法,其首先对系统进行UML人工建模,然后依据对模型的形式化定义和一定的覆盖准则生成测试用例。为了对比通过本文模型转换算法自动生成的测试用例的覆盖度和正确性,用文献[16]中的方法生成本文SCSS中系统的测试用例,作为预期输出。按照消息类型对比二者生成的测试用例,结果如图4所示。

图4 文献[16]与本文测试用例生成结果对比

可见本文自动生成的测验用例覆盖了大部分的预期测试用例输出结果。通过进一步分析和对比,本文提出方法所产生的测试用例符合系统的实际使用场景,可以较完整地覆盖到构件系统的各个使用行为和消息路径,守卫条件的增加也有效地避免了测试用例产生时的路径爆炸问题,提高了所产生的测试用例质量。

5 结束语

本文提出一种新的面向测试的构件系统描述模型TCSM,较完整地描述了构件系统中构件间的交互类型、约束条件、输入输出等消息,有效地包含了构件系统集成中功能测试、边界测试等阶段所需要的关键信息。通过本文提出的模型转换算法自动产生测试模型,减少了通常构件系统在开发完成后为了测试需要逆向人工参与搭建测试模型的步骤,最后根据测试模型自动产生测试用例。该方法从构件行为描述入手,所描述的构件信息紧密结合构件系统的测试需求,进一步实现了构件系统的自动化建模和测试,提高构件系统开发的效率和质量。

未来的工作方向主要为,根据构件间的动态描述信息,预计可以在构件组装时检测到构件系统的逻辑错误和验证系统的安全性,具体的方法和可行性需要进一步研究和测试。

[1]Latour L,Wheeler T,Frakes B.Descriptive and predictive aspects of the 3Cs model:SETA1 working group summary[J].ACM SIGAda Ada Letters,1991,11(3):9-17.

[2]张国明.基于E JB和CORBA的分布式异构系统的集成[D].中国优秀硕士学位论文全文数据库,2009(9).

[3]Monica Pawlan.The J2EE Tutorial[M].[S.l.]:Sun Microsystem Corporation,2000.

[4]Rogesmo D.COM技术内幕[M].北京:清华大学出版社,1993.

[5]Allen R.A formal approach to software architecture[D]. School of Computer Science,Carnegie Mellon University,1997.

[6]Plasil F,Visnavsky S.Behavior protocols for software components[J].IEEE Trans on Software Engineering,2002,28(11):1056-1076.

[7]罗舒,邢天扬,曹旻.Web应用开发中构件描述的研究与应用[J].计算机工程与设计,2010,31(18):3989-3992.

[8]刘扬,李亚芬,王普.模型驱动的测试用例自动生成框架[J].计算机工程,2011,37(1):39-44.

[9]谢冰,张晨东.一种基于面向对象测试模型的测试代码生成方法与工具[J].计算机研究与发展,2008,45(Sl):336-340.

[10]黄龙,缪淮扣,王皙,等.基于场景的形式化测试模型生成方法[J].上海大学学报,2011,17(5):595-599.

[11]Wu Y,Pan Dai,Chen Mei Hwa.Techniques for testing component-based software[C]//Proceedings of the Seventh InternationalConferenceonEngineeringofComplex Computer Systems,2001.

[12]Mariani L.A fault taxonomy for component-based software[J].Electr Notes Theor Comput Sci,2003,82(6).

[13]刘攀,缪淮扣,曾红卫,等.确定性有限状态机的最小测试成本迁移覆盖准则[J].软件学报,2011,22(7).

[14]曾红卫,缪淮扣.用模型检验产生安全性质的测试[J].应用科学学报,2011(29):529-536.

[15]田野,曾红卫.用模型检验产生约简测试集[J].计算机工程与应用,2012,48(17):93-98.

[16]曾红卫,周建云.基于UML协作图的测试用例生成方法与实现[J].计算机工程与设计,2007,28(16):3805-3811.

CAO Zhen,CAO Min

College of Computer Engineering and Science,Shanghai University,Shanghai 200072,China

With the extensive application of the component-oriented software development methods,the description and test of the component systems is becoming the key of software quality assurance.For the particularity of the component system complexity and development methods,component systems’integration test using traditional methods often face with many difficulties.This paper presents an improved test-oriented component describe model called TCSM.It focuses on the interactions and behavioral constraints between components in the component systems and provides a wealth of information for the phase of functional test and boundary test in system integration test.An approach to transfer the TCSM to test model,which based on UML collaboration diagram and supports the conversion of one component system from its description model to test model automatically,is also proposed in the paper.Furthermore,an algorithm for generating test cases automatically is realized.TCSM can better describe the interactive behaviors and realize the automatic test of component-based systems.The proposed model can not only reduce plenty of time in the process of system modeling and test, but also improve the efficiency and reliability of the component-based systems.

component system integration testing;component system test model;model conversion;test case generation

随着面向构件的软件开发方法的广泛应用,构件系统的描述和测试成为保证软件质量的关键所在。由于构件系统的复杂性和开发方法的特殊性,用传统方法对构件系统进行集成测试往往面对很多困难。提出了一种改进的面向测试的构件描述模型,称为TCSM,它着重对构件系统中的构件间的交互和约束进行了动态描述,为构件系统集成测试阶段的功能测试和边界测试等提供了大量可用信息。在此基础上,进一步提出一种把TCSM转换成测试模型的方法,以UML协作图模型为原型,实现了构件系统从描述模型到测试模型的自动转换。最后,实现了一种在所产生的测试模型上自动生成测试用例的算法。TCSM更好地描述了构件的交互行为信息,进一步实现了系统的自动化测试,减少了通常需要在构件系统搭建完成后,针对测试对系统手工建立测试模型的工作,提高了构件系统开发的效率和可靠性。

构件系统集成测试;构件系统测试模型;模型转换;测试用例生成

A

TP31

10.3778/j.issn.1002-8331.1212-0362

CAO Zhen,CAO Min.Test-oriented component model and test case generation method.Computer Engineering and Applications,2014,50(22):59-64.

上海市教委创新项目资助(No.12ZZ094)。

曹真(1987—),男,硕士研究生,主要研究领域为软件测试、软件架构;曹旻(1966—),女,博士,副教授,主要研究领域为软件工程、Web应用。E-mail:cz00000@126.com

2012-12-30

2013-04-27

1002-8331(2014)22-0059-06

CNKI网络优先出版:2013-05-24,http://www.cnki.net/kcms/detail/11.2127.TP.20130524.1509.008.html

猜你喜欢

测试用例调用消息
基于SmartUnit的安全通信系统单元测试用例自动生成
一张图看5G消息
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
基于混合遗传算法的回归测试用例集最小化研究
基于系统调用的恶意软件检测技术研究
基于依赖结构的测试用例优先级技术
消息
消息
消息