程序对象名无效

对象名无效  时间:2021-04-25  阅读:()

面向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.
cnhttp://cs.
nju.
edu.
cnReceived2002-09-03;Accepted2002-12-04GuQ,ChenDX,XieL,SunZX.
AJava-orienteddistributedprogramtestingsystem.
JournalofSoftware,2003,14(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的普及和计算机软、硬件技术的发展,分布式程序和应用已成为今后软件开发的主要方向之一.
与集中式的串行程序相比,分布式程序需要考虑与运行环境的合作以及分布单元间的并发问题,这为分布式程序测试工具带来了新的挑战.

保障分布式程序的正确性需要从两方面入手:一是从分布式程序自身出发,侧重并发程序的形式化表示和验证;二是在分布运行环境中监控和记录分布式程序的执行过程,分析程序在各种运行环境中的执行状态和性能.
测试需要结合这两个方面,从形式化表示中获得规约,在运行环境中检测程序实现与规约的一致性.

目前已有的分布式程序测试工具如MAD(monitoringanddebuggingenvironment)[1],PSET(distributedprogramstructureandeventtrace)[2],OrcShot[3],SPIN[4],LTSA[5]等都没有很好地考虑这两方面的结合.
其中MAD,PSET和OrcShot偏重运行环境中的检测,缺乏判断程序正确性的依据;SPIN和LTSA则偏重并发程序的验证,不能确保程序实现与运行环境的有效协作.
本文提出的测试系统JDPT(Java-orienteddistributedprogramtestingsystem)较为有效地解决了这两方面的结合问题.
分布式程序测试分布式程序测试的主要问题分布式程序由多个相互协作的分布单元构成.
这些分布单元相对独立且位于网络中不同的机器上,单元间通过消息传递实现协作.
在网络环境中,支撑分布式程序运行需要一个层次式的协议架构,包括通信平台(如TCP/IP)和支撑系统(如commonobjectrequestbrokerarchitecture,简称CORBA),两者构成分布式程序的运行环境.
基于此,测试分布式程序主要需考虑以下两个方面的问题:(程序自身的问题.
对于多个相对独立的分布单元,需要处理其间的通信、同步以及它们的并发操作.
(分布运行环境的问题.
包括程序与运行环境的合作、网络通信的完整性(通信信息无差错、无重复、不失序)、平台无关性以及异构系统间的互操作性等.
程序测试需要考虑测试的正确性和充分性.
由于并发所导致的不确定性,以同一个测试用例运行同一个分布式程序,多次执行也会产生不同的运行结果.
这时需要不同的测试手段,如以事件序列记录程序的运行过程、采用确定性测试以事件序列作为测试用例等.
并发的多样性导致分布式程序难以得到充分的测试,这时需要定义新的充分性准则,采用新的测试用例选择方法等.

E-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).
上述集合定义可以作为测试时的依据,具体为(设CSET为针对U定义的E-CSPE约束集合):(若,则针对任一可行事件序列s,CSET中总存在与s相关(覆盖或违反)的约束r.
可以认为约束集CSET相对于U的实现是充分的.
(若,则针对CSET中的任一约束r,不存在违反r的可行事件序列.
可以认为U的实现相对于约束集CSET是正确的.
并发程序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(content0)get(GSET[content(1]),PRODUCER=(put(PRODUCER),CONSUMER=(get(CONSUMER),||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类和~类约束.

基于Java语言的测试系统JDPTJDPT的功能和特点基于上述考虑,我们实现了一个针对Java语言的测试系统JDPT.
JDPT的主要功能如下:(以图视的形式展示被测程序的控制结构和执行分布情况;(根据程序的形式化描述推导E-CSPE约束,并判断约束集的一致性;(与支撑系统协作,动态监控程序的分布运行;(利用E-CSPE约束检测收集到的可行事件序列;(计算程序在分布运行环境中运行时的性能指标.
JDPT系统有如下一些特点:(以Java语言为基础;(强调形式化验证与运行监控分析的结合;(以事件序列的形式记录程序在运行环境中的执行过程;(强调对程序中分布特性的测试.
JDPT的构成根据TFDS(testsystemframeworkfordistributedsoftwaresystem)[8]框架,JDPT的系统结构如图1所示.
其中,规约分析、程序装备和选择测试用例模块属于静态部分;程序执行、事件收集和程序验证属于动态部分;图视界面是系统与用户的接口.

(1)规约分析.
包括两个方面.
一方面是描述并分析被测程序的FSP表示,据以推导用于测试的E-CSPE约束.
另一方面是分析被测程序的Java源码,获得程序的控制结构,主要是分布单元间的调用结构;并确定测试代码的装备位置.

测试代码的功能是生成和记录运行事件,主要针对的是Java中的同步语句和通信设施.
例如考虑Java的RMI(remotemethodinvocation)设施:RMI调用需要分两步,对应两段代码结构.
第一步是Bind,用于Client对象(如Producer或Consumer)定位提供方法调用的服务对象(如WareHouse),并在本地创建服务对象的stub,代码结构如下:try{①wareHouse=(WareHouse)Naming.
lookup("//"+serverAddress+"/WareHouseServer");②…/*othercodes*/}catch(Exceptione){③/*coderelatedtoexceptmanipulation*/}这段代码中可以生成3个事件:①Bind开始;②Bind成功;③Bind异常.
定位并创建本地stub以后,第2步是通过它进行RMI方法调用.
RMI调用的代码结构如下:try{④wareHouse.
put(parameters);⑤}catch(Exceptione){⑥/*coderelatedtoexceptmanipulation*/}对应的服务对象类(WareHouse)需要实现被调用的方法,代码结构如下:publicclassWareHouseImplextendsUnicastRemoteObjectserverClassimplementsWareHouse{…publicsynchronizedvoidput(parameters){⑦…/*implementationcode*/⑧return;}…}由WareHouseImpl实现的WareHouse是一个界面类,JavaRMI需要用它来生成stub和skeleton代码.
在上述两个代码段中需要生成5个事件:④本地RMI调用;⑤本地RMI成功返回;⑥RMI异常;⑦服务端RMI接收;⑧服务端RMI结束.
(2)程序装备.
在程序结构和规约分析的基础上,在源程序中装备测试代码.
测试代码的主要目的是收集运行信息,并将这些信息记录成事件.
在JDPT中,事件被定义为六元组(T,S,D,M,I,O(.
各项的含义分别是:(类型(type):事件的类型.
(源对象(source):事件的发起者,由Java的对象名或线程标识表示.
(目标对象(destination):事件针对的目标对象,由Java的对象名或线程标识表示.
(对象方法名(function):指示事件对应的对象方法.
(时间戳(timestamp):事件的发生时间,用于对事件的排序以及性能分析.
(其他(other):与事件有关的其他信息,如产生事件的语句及变量值等.
JDPT为每个对象增加一个public方法:CollectInfo,用于生成事件信息;同时定义监控对象Monitor,其主要的方法是RecordInfo,用于存储事件信息.
装备的代码即由以下两条语句构成:Self.
CollectInfo(…);Monitor.
RecordInfo(…).
(3)选择测试用例.
考虑到用户一般通过Client对象执行分布式程序,JDPT依据Client对象的FSM表示选择测试用例,基于的覆盖准则是变迁覆盖.
当存在多个Client对象时,取针对单个对象的测试用例集的并集.

JDPT还根据E-CSPE约束选择测试用例.
用例的形式一般是事件序列,所达到的目标是使生成的事件序列覆盖或违反某个E-CSPE约束,以满足测试的充分性要求.
(4)程序执行.
有两种执行被测程序的方式:一种是不加干预的正常执行,这种方式对应于不确定性测试,同一测试用例需要执行多次;另一种是在Monitor的监控下干预程序的执行,这种方式对应于确定性测试,测试用例一般是事件序列.
有两种方法用于确定性测试:(在程序的关键位置(如RMI调用、synchronized语句、wait()-notify()函数等)插入交互式或延时语句,以控制程序运行时的竞争条件.
(设定相邻两个事件间的最大发生间隔,超过这一间隔即判定两个事件不具备前后相邻的关系.
(5)事件收集.
Monitor对象负责记录和汇总运行事件,当程序规模较大时将有多个Monitor实例在运行,此时需要指定一个Monitor为TestCenter负责汇总来自各Monitor的事件.
事件汇总有两种方式:一种是即时的,所有事件一旦记录下来立即传递给TestCenter,这可能会导致通信拥塞和瓶颈,干扰被测程序的运行;另一种是延迟的,事件先由各Monitor记录在本地的缓冲区或文件中,再按一定的周期或者应TestCenter的请求将本地事件序列提交给TestCenter.
由于通信延迟等原因,TestCenter在汇总事件时需要为事件排序.
可以采用时间戳定义逻辑时间为事件排序,通过这种方法,有因果关系的事件(如send和对应的receive)可以得到准确的排序,但无此关系的事件其前后顺序就可能是随机的.
另一种方案是使用绝对时间,它的好处是可以得到惟一排序,并为性能分析提供了依据;缺点是各台机器的本地时间难以保证完全同步.

(6)程序验证.
在JDPT中,程序验证包含两个方面,一个是检测程序运行的正确性,另一个是分析程序在运行环境中执行的性能指标.
检测程序的正确性需要分两个阶段:一个是就运行事件本身检查是否出现了异常事件并检查事件间的匹配情况;二是根据E-CSPE约束判定事件序列的有效性.
判定方法如下:(CSET为E-CSPE约束集,F为测试产生的事件序列集,s为一事件序列)(,说明当前产生的事件序列集没有错误;(,说明当前产生的事件序列集针对CSET充分.
分析程序的性能时主要是计算各种性能指标,如各分布单元的执行时间、通信时间和等待时间.
发现程序运行中的瓶颈,包括资源瓶颈、通信瓶颈等.
(7)图视界面.
图视界面是用户使用JDPT的接口.
主要完成的功能包括:通过菜单界面调用其他模块;提供编辑界面,用于源程序编写、程序形式化描述以及E-CSPE约束的定义等;以视图的形式反馈程序的测试结果,包括规约分析产生的控制流图以及程序验证时的事件序列图(trace图)等.

测试实例图2显示了应用JDPT测试生产者-消费者问题的测试过程.
如图2所示,测试一个程序分为两条线:一条是从程序实现出发,考虑结构分析、测试代码装备以及运行监控和事件收集;另一条是从程序形式化描述出发,根据FSP表示推导E-CSPE约束,再以E-CSPE约束检测事件序列集的有效性.
通过这种方式,JDPT系统较好地实现了形式化验证与运行监控分析的有机结合.

相关工作比较保证分布式程序的正确性可以从两方面入手:一方面是将分布式程序视为并发程序,偏重于并发程序的形式化验证;另一方面是考虑程序实现,强调分布式程序运行过程的监控、记录和分析.
形式化验证主要是通过代数演算和逻辑推理证明程序并发过程的正确性,包括安全属性和进展属性,不考虑程序的具体实现和运行环境.
以SPIN系统[4]为例,SPIN的目的是证明进程间交互(interaction)的正确性.
其中进程被定义为一个自动机,它以顺序、确定的方式运行.
进程间交互有3种方式:会合元语(rendezvousprimitives)、缓冲信道(bufferedchannel)通信和共享变量(sharedvariables)访问.
多进程异步交互(asynchronousinterleavingproductofautomata)构成系统行为,这个系统行为也被描述为自动机.
SPIN包含两种描述语言:用于描述程序规约要求的时序逻辑LTL(standardlineartemporallogic)和描述设计选择(designchoices,即程序形式化描述)的语言PROMELA(processmetalanguage).
程序正确性验证即要证明两种描述在逻辑上的一致性.
验证时涉及3个基本实体:进程,包括有限个数的状态和谓词条件下的变迁;变量,有限个数的取值;缓冲信道,有限的缓冲容量.

运行监控分析则将实现的分布式程序置于运行环境中执行,记录并控制其运行过程,对记录信息进行正确性和性能分析,然后把运行过程以图视的形式显示给用户.
以MAD(monitoringanddebuggingenvironment)系统为例,MAD的主要目的是探测程序中的错误.
它把程序错误分成两类:只影响一个进程的局部错误以及影响多个进程的全局错误.
局部错误可以由串行程序测试工具检测出来,MAD不予考虑.
对于全局错误的检测,由于滚雪球效应(stampedeeffect),MAD强调竞争条件(racecondition)的探察.
涉及竞争条件的事件被称为"raceconditioncandidates",这类事件的发生顺序是不确定的.
MAD包含3个基本工具:EMU(eventmonitoringutility),功能是装备测试代码,在程序运行时收集和记录运行事件并存入文件中;ATEMPT,功能是分析运行事件信息,检查通信中的错误,计算性能指标包括通信时间、执行时间和监控耗时,显示和操纵运行进程的trace图;PARASIT,功能是以事件序列(重排"raceconditioncandidates"的顺序)为输入确定性地执行被测程序.
只考虑形式化验证不能保证程序实现与运行环境的有效协作;只考虑运行监控和分析又缺乏对程序行为的正确性约束.
JDPT实现了两者间的一个桥接:形式化验证可以保证程序形式化描述的正确性,据之推导的E-CSPE约束又可反映规约的要求,进而有效地检测程序实现行为与规约行为的一致性.

舍利云30元/月起;美国CERA云服务器,原生ip,低至28元/月起

目前舍利云服务器的主要特色是适合seo和建站,性价比方面非常不错,舍利云的产品以BGP线路速度优质稳定而著称,对于产品的线路和带宽有着极其严格的讲究,这主要表现在其对母鸡的超售有严格的管控,与此同时舍利云也尽心尽力为用户提供完美服务。目前,香港cn2云服务器,5M/10M带宽,价格低至30元/月,可试用1天;;美国cera云服务器,原生ip,低至28元/月起。一、香港CN2云服务器香港CN2精品线...

LayerStack$10.04/月(可选中国香港、日本、新加坡和洛杉矶)高性能AMD EPYC (霄龙)云服务器,

LayerStack(成立于2017年),当前正在9折促销旗下的云服务器,LayerStack的云服务器采用第 3 代 AMD EPYC™ (霄龙) 处理器,DDR4内存和企业级 PCIe Gen 4 NVMe SSD。数据中心可选中国香港、日本、新加坡和洛杉矶!其中中国香港、日本和新加坡分为国际线路和CN2线路,如果选择CN2线路,价格每月要+3.2美元,付款支持paypal,支付宝,信用卡等!...

CloudCone:洛杉矶MC机房KVM月付1.99美元起,支持支付宝/PayPal

CloudCone是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,譬如常规VPS、大硬盘VPS等等,数据中心在洛杉矶MC机房。商家2021年Flash Sale活动继续,最低每月1.99美元,支持7天退款到账户,支持使用PayPal或者支付宝付款,先充值后下单的方式。下面列出几款VPS主机配置信息。CPU:1core内存:768MB...

对象名无效为你推荐
checkmy本行支付宝wordpress模板wordpress的模版怎么用googleprGoogle PR的值是6.这个是什么意思?asp.net空间谁知道免费的ASP空间cisco2960cisco 2960 和3560支付宝账户是什么什么是企业支付宝账户支付宝账户是什么支付宝账户是什么?重庆网站制作重庆网站制作,哪家专业,价格最优?360arp防火墙在哪360ARP防火墙哪里下载?
qq域名邮箱 域名升级访问中 金万维动态域名 美国主机代购 permitrootlogin sub-process 国外免费空间 免费网站申请 空间技术网 东莞服务器 申请免费空间和域名 华为云盘 lick 我的世界服务器ip asp空间 七十九刀 贵州电信 crontab 电脑显示屏不亮但是主机已开机 kosspp 更多