您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 面向Java的分布式程序测试系统
Vol.14,No.4©2003JournalofSoftware软件学报1000-9825/2003/14(04)0743面向Java的分布式程序测试系统顾庆+,陈道蓄,谢立,孙钟秀(南京大学计算机软件新技术国家重点实验室,江苏南京210093)AJava-OrientedDistributedProgramTestingSystemGUQing+,CHENDao-Xu,XIELi,SUNZhong-Xiu(StateKeyLaboratoryforNovelSoftwareTechnology,NanjingUniversity,Nanjing210093,China)+Correspondingauthor:Phn:86-25-3592339,Fax:86-25-3300710,E-mail:guq@nju.edu.cn(4):743~749.Abstract:Becausetheprogramisrunninginadistributedway,boththeconcurrentfeaturesandtheruntimeenvironmentsshouldbetakenintoaccountwhentestingadistributedprogram.AJavaorienteddistributedprogramtestsystemisputforwardinthispaper,whichiscalledJDPT(Java-orienteddistributedprogramtestingsystem).JDPTdefineseventsbasedontheruntimeenvironments,recordsexecutionprocessesofthedistributedprogramaseventsequences,anddefineseventsequencingconstraintstocheckthevalidityofthosefeasiblesetofeventsequences.Bythetechnology,theJDPTcaneffectivelyestimatethecorrectnessofconcurrentexecutionsofthetestedprogramwithindistributedenvironments,andcanbeusedtotestJavaprogramsrunninguponmultipleplatforms.Keywords:softwaretesting;distributedprogramtesting;Java;concurrentprogram;eventsequencingconstraints摘要:由于程序的分布运行,测试分布式程序必须同时考虑并发特性和运行环境.介绍了一个面向Java语言的分布式程序测试系统JDPT(Java-orienteddistributedprogramtestingsystem).JDPT基于运行环境定义事件,通过事件序列记录分布式程序的运行过程,并定义事件约束检测可行事件序列集的有效性.通过该技术,JDPT可以有效地判断程序在运行环境中并发执行的正确性,适用于跨平台的Java程序测试.关键词:软件测试;分布式程序测试;Java;并发程序;事件约束中图法分类号:TP311文献标识码:A随着Internet的普及和计算机软、硬件技术的发展,分布式程序和应用已成为今后软件开发的主要方向之一.与集中式的串行程序相比,分布式程序需要考虑与运行环境的合作以及分布单元间的并发问题,这为分布式SupportedbytheKeyScience-TechnologyProjectoftheNational‘NinthFive-Year-Plan’ofChinaunderGrantNo.98-780-01-07-03(国家“九五”重点科技攻关项目);theNationalHigh-TechResearchandDevelopmentProgramPlanofChinaunderGrantNo.2001AA113090(国家高技术研究发展计划(863))第一作者简介:顾庆(1972-),男,江苏常州人,博士,副教授,主要研究领域为分布式语言和系统.744JournalofSoftware软件学报2003,14(4)程序测试工具带来了新的挑战.保障分布式程序的正确性需要从两方面入手:一是从分布式程序自身出发,侧重并发程序的形式化表示和验证;二是在分布运行环境中监控和记录分布式程序的执行过程,分析程序在各种运行环境中的执行状态和性能.测试需要结合这两个方面,从形式化表示中获得规约,在运行环境中检测程序实现与规约的一致性.目前已有的分布式程序测试工具如MAD(monitoringanddebuggingenvironment)[1],PSET(distributedprogramstructureandeventtrace)[2],OrcShot[3],SPIN[4],LTSA[5]等都没有很好地考虑这两方面的结合.其中MAD,PSET和OrcShot偏重运行环境中的检测,缺乏判断程序正确性的依据;SPIN和LTSA则偏重并发程序的验证,不能确保程序实现与运行环境的有效协作.本文提出的测试系统JDPT(Java-orienteddistributedprogramtestingsystem)较为有效地解决了这两方面的结合问题.1分布式程序测试1.1分布式程序测试的主要问题分布式程序由多个相互协作的分布单元构成.这些分布单元相对独立且位于网络中不同的机器上,单元间通过消息传递实现协作.在网络环境中,支撑分布式程序运行需要一个层次式的协议架构,包括通信平台(如TCP/IP)和支撑系统(如commonobjectrequestbrokerarchitecture,简称CORBA),两者构成分布式程序的运行环境.基于此,测试分布式程序主要需考虑以下两个方面的问题:程序自身的问题.对于多个相对独立的分布单元,需要处理其间的通信、同步以及它们的并发操作.分布运行环境的问题.包括程序与运行环境的合作、网络通信的完整性(通信信息无差错、无重复、不失序)、平台无关性以及异构系统间的互操作性等.程序测试需要考虑测试的正确性和充分性.由于并发所导致的不确定性,以同一个测试用例运行同一个分布式程序,多次执行也会产生不同的运行结果.这时需要不同的测试手段,如以事件序列记录程序的运行过程、采用确定性测试以事件序列作为测试用例等.并发的多样性导致分布式程序难以得到充分的测试,这时需要定义新的充分性准则,采用新的测试用例选择方法等.1.2E-CSPE约束E-CSPE(extendedCSPE)[6]是在CSPE(constraintsonsucceedingandproceedingevents)基础上提出的一个事件约束描述规则.E-CSPE约束是指采用E-CSPE描述的事件约束.E-CSPE约束在给定状态谓词下定义前后两个事件间的依赖关系以及这种关系的或然性.E-CSPE约束的基本形式是op[[evt1;evt2]]UC.其中,U是被测程序;evt1和evt2是前后相关的两个运行事件,它们不需要紧密相连;C是一个状态谓词,它决定evt1和evt2之间的依赖关系是否存在;op规定依赖关系的或然性.op有3种取值,对应3类不同的E-CSPE约束,具体如下:a[[evt1;evt2]]UC:(alwaysundercondition),在程序U的运行过程中,若条件C成立,则evt2发生于evt1之后总有效.m[[evt1;evt2]]UC:(mustundercondition),在程序U的运行过程中,若条件C成立,则evt1发生以后evt2必发生.~[[evt1;evt2]]UC:(neverundercondition),在程序U的运行过程中,若条件C成立,则evt2发生于evt1之后总无效.任意给定U的一个可行事件序列s和针对U的一个E-CSPE约束r,s与r之间可定义3种关系:(1)s覆盖r;(2)s违反r;(3)s与r无关.针对约束r,根据上述3种关系可以定义:ConformSet(r,U):所有覆盖r的可行事件序列集合;ViolateSet(r,U):所有违反r的可行事件序列集合;NonsenseSet(r,U):所有与r无关的可行事件序列组成的集合.令Feasible(U)为程序U所有可行事件序列的集合,显然有ConformSet(r,U)∪ViolateSet(r,U)∪NonsenseSet(r,U)=Feasible(U).顾庆等:面向Java的分布式程序测试系统745上述集合定义可以作为测试时的依据,具体为(设CSET为针对U定义的E-CSPE约束集合):若{}),(CSETrUrtNonsenseSe,则针对任一可行事件序列s,CSET中总存在与s相关(覆盖或违反)的约束r.可以认为约束集CSET相对于U的实现是充分的.若{}),(.UrViolateSetCSETr,则针对CSET中的任一约束r,不存在违反r的可行事件序列.可以认为U的实现相对于约束集CSET是正确的.1.3并发程序FSP表示和E-CSPE约束推导FSP(finitestateprocesses)[5]是LTSA(labeledtransitionsystemanalyzer)中采用的一类进程代数记法.它可以描述一个并发程序并验证其行为(behavior)与规约的一致性.FSP的优点是可以较方便地从代数记法转换成对应的Java程序.在FSP中,分布单元被定义为进程(process),进程按递归的形式定义并抽象为动作序列,对应的状态机表示为LTS(labeledtransitionsystem).对于生产者-消费者问题,可以采用FSP表示如下:WAREHOUSE(N)=GSET[0],GSET[content:0..N]=(when(contentN)putGSET[content+1]|when(content0)getGSET[content1]),PRODUCER=(putPRODUCER),CONSUMER=(getCONSUMER),||PRO_CON=(pro[1..3]:PRODUCER||con[1..3]:CONSUMER||{pro[1..3],con[1..3]}::WAREHOUSE(5)).其中由大写字母表示的是进程,小写字母表示的是动作.FSP中的基本操作符是,表示动作间的顺序.其他操作符包括:选择“|”、条件控制“when”、进程前缀“:”、进程共享“::”、并发组合“||”等.在操作符的基础上,FSP提供3种并发控制机制:共享动作、互斥及条件同步.在生产者-消费者的定义中即包括共享动作和条件同步机制.在操作符和并发控制机制的基础上可以做E-CSPE约束的推导[7].例如,共享动作涉及安全性,可据以推导~类和m类约束;互斥和条件同步涉及安全性和进展性,可推导出a类、m类和~类约束.2基于Java语言的测试系统JDPT2.1JDPT的功能和特点基于上述考虑,我们实现了一个针对Java语言的测试系统JDPT.JDPT的主要功能如下:以图视的形式展示被测程序的控制结构和执行分布情况;根据程序的形式化描述推导E-CSPE约束,并判断约束集的一致性;与支撑系统协作,动态监控程序的分布运行;利用E-CSPE约束检测收集到的可行事件序列;计算程序在分布运行环境中运行时的性能指标.JDPT系统有
本文标题:面向Java的分布式程序测试系统
链接地址:https://www.777doc.com/doc-1980702 .html