没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记116(2005)17-30www.elsevier.com/locate/entcs一种基于代理的软件技术3LeonardoMariani1MauroPezz`e2迪斯科米兰大学Bicoccavia Bicocca degliArcimboldi,820126米兰,意大利摘要基于组件的软件系统为测试界提出了新的问题:组件的重用表明了通过重用有关软件组件质量的信息来降低测试成本的可能性。本文讨论了演化软件系统的测试问题,即, 通过修改和/或替换其某些组件获得的系统。 本文提出了一种自动识别系统不同版本之间行为差异的技术,从不一致的行为中推断可能的问题。该方法是基于自动提取的不变量从现场执行。 计算不变量用于监视新组件的行为,并揭示意外的交互。在监视系统执行时生成的事件被呈现给软件工程师,他们可以推断新版本可能存在的问题关键词:基于一致性的软件,测试,重用,不变量1介绍基于数据库的系统(CBS)技术促进了灵活性:系统可以通过添加、删除和更改其1电子邮件地址:mariani@disco.unimib.it2电子邮件地址:pezze@disco.unimib.it3这项工作得到了意大利大学和研究部在COFIN 2001项目1571-0661 © 2004 Elsevier B. V.根据CC BY-NC-ND许可证开放访问。doi:10.1016/j.entcs.2004.02.08918L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)件.添加或修改组件需要测试添加或修改的组件以及依赖于它们的所有组件。修改组件可能会引入难以预测的危险副作用,因此,原则上,我们需要重新测试整个系统。重新测试整个系统可能非常昂贵,有时甚至不可能。测试误差可以通过使用回归测试技术(例如,见[18,8])或相关性分析技术(例如,见[21,20])选择测试子集来减少。运行时验证技术也可以部分替代传统的测试,从而减少测试的复杂性(例如,参见[7])。在本文中,我们提出了一种方法来降低测试成本的CBSs。这种方法被称为行为捕获和测试(BCT),它结合了运行时监控、运行时验证和测试。我们使用运行时监视来收集有关单个执行的数据。然后,收集的数据用于自动导出组件和系统的行为属性。推断的属性用于运行时验证,而单个表达式用作回归测试用例。BCT可用于自动验证在同一系统或其他系统中使用的组件的集成,这在基于组件的开发中是非常常见的情况。2行为捕获和测试BCT方法通过监视CBS的执行来收集组件和交互的行为信息,通过选择显著行为和提取不变量来总结它们的行为,通过验证不变量和执行显著行为来检查变化的兼容性。BCT基于五个主要阶段:• 生成和安装行为记录器。 BCT为每个受监控组件生成并安装两个小型软件模块:刺激记录器和交互记录器,以适当地检测目标系统。• 记录处决激励和交互记录器捕获系统和被监控组件之间的运行时交互。• 提取不变量目标组件的行为被提炼为I/O和交互不变量,它们分别总结了系统请求和组件结果之间的关系,以及组件和系统之间的交互模式。• 过滤行为。对死刑执行的监督产生了太多的问题,其中许多问题并不特别令人感兴趣。BCT选择值得注意的执行的子集作为回归测试用例存储L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)19• 验证不变量和执行测试。BCT使用I/O和交互不变量来验证目标系统在运行时的行为。 BCT 还执行值得注意的行为,作为回归测试用例,用于验证相同组件或系统的值得注意的执行,I/O不变量和交互不变量可以用于在几个有趣的情况下验证CBS的质量(i) 当作为运行系统S的一部分的组件A被添加到新系统S(ii) 当系统S中的新组件B替换组件A(iii) 当作为系统S′的一部分的组件B在系统S中,情况(i)发生在通过添加从已在其他系统中使用的组件库中获取在这种情况下,可以使用在现有系统中使用组件时提取的显著执行和不变量在新系统中。特别是,显著的执行可以用于测试作为新系统一部分的组件,而不变量可以用作神谕来识别预期行为的偏差。不变量可用于生成监视器,以验证组件在不同系统中执行时行为的一致性。只要违反了一个不变式,监视器就会生成一个警告,该警告对应于一个失败,或者对应于组件以前未被利用的行为情况(ii)发生在使用中的组件被较新版本替换时。在这种情况下,针对在旧版本S内执行的“旧”组件A计算的显著执行和不变量值得注意的执行代表了与前一种情况相同的回归测试用例不变量可用于生成监视器,以验证“新”版本B的行为是否不变量的违反可以揭示新版本的失败,或者新版本的正确行为在旧版本中从未见过。当在其他系统中使用的组件替换在感兴趣的系统中使用的组件以添加和/或修改所实现的功能时,发生情况(iii在这种情况下,尽管在不同的执行上下文中,但是为被替换的组件和替换组件计算的显著执行可以用于在新的上下文中测试替换组件。为被替换和替换组件计算的不变量可以被匹配以识别可能的不兼容性,并且可以用于生成替换组件的监视器。20L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)这项工作的主要贡献如下:• 运行时监控、运行时验证和测试的组合,以重用有关组件行为的信息• 使用反射和语法分析来自动识别提供对Java对象状态的非侵入式访问的检查器,从而即使在没有源代码的情况下也支持组件行为的监视器的自动部署• 定义了一种用于“关注”对象的机制• 应用计算的不变量来识别软件系统的不同版本之间的行为差异,从而揭示可能的缺陷和缺陷,• 初步的实验数据表明,所提出的方法的有效性。3运行时监视BCT的前两个阶段(生成行为记录器和记录执行)允许自动监控系统的运行时行为。运行时监控可以通过几种技术来实现,这些技术的特点是不同程度的侵入性和复杂性:通过源代码的插装[22],通过修改运行时支持[23],通过开发内置的监控工具[3],通过包装被测程序通常,组件的源代码在集成时可能不可用,因此CBS必须使用不需要源代码的监视技术。BCT行为记录器依赖于结合机制的适当修改。独立开发的组件在系统启动或运行时绑定。BCT行为记录器在组件绑定时安装,作为系统和组件之间的“过滤器”。图1显示了一个受监控组件的运行时配置。激励记录器捕获传入的请求,将单个行为存储在本地存储库中,并将请求转发到受监视的组件。单个行为包括所需服务的名称、其参数和结果。交互记录器截获从组件到系统的请求,并存储交互模式。L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)21图1.一、被监控组件的运行时配置从组件的角度来看,这种方法不是侵入性的。从系统的观点来看,这种引入性仅限于性能。更改绑定机制的复杂性取决于组件技术:例如,基于XML配置文件的绑定可以很容易地修改;基于服务发现更改动态绑定机制可能很复杂。我们目前正在研究利用应用服务器提供的服务来修改EJB的动态绑定机制的问题。记录器的行为独立于目标组件;因此可以根据组件的接口规范自动生成记录器。记录器实现了目标组件与系统的相同接口记录器的单个方法存储参数并将请求转发到目标组件。4I/O不变量不变量提取阶段产生I/O和交互不变量。I/O不变量捕获参数和返回结果之间的关系;交互操作不变量捕获组件与系统的交互模式。组件的接口可能非常复杂,特别是在面向对象的系统中,它们经常隐藏对象的内部状态。例如,第6节中描述的购物车组件的记录器需要记录图2所示的对象CartItem。捕获参数将记录对象数据类型和对象的引用,这在大多数情况下对于推断有用的不变量是不足够的为了有效地记录复杂的参数,我们开发了一种技术,自动收集状态信息,从一个对象实例,而不需要手动检测。我们的技术,以下简称22L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)图二、CartItem和Category的类关系图,以及CartItem实例的示例适用于用支持内省的范例实现的组件,例如,Java.通常,可以使用不改变状态本身的适当方法来检查对象的状态。这种方法被称为检查员。 对象检查使用内省来检索对象的方法的签名,并从列表中自动选择检查器。执行选定的检查器以在运行时收集状态信息。该方法递归地应用于复杂对象。我们通过将一组语法规则与每个方法的签名相当一个方法满足这些规则之一时,它被归类为检查器。这些规则基于编写代码时通常使用的约定,例如,没有参数的方法,返回值,以及名称以get开头的方法被归类为inspector。规则可以自动应用于对象,而不需要它们的源代码或规范。我们目前正在实验的一组规则在[10]中给出。通过在图2中的示例中应用对象重定向技术,可以自动收集整个状态信息。我们的工具生成的输出如图3所示。我们的初步研究强调了这些规则的有效性:到目前为止,我们从未错误地选择侵入式方法作为检查器。我们目前正在L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)23CartItem.getItemId =“EST-18”CartItem.getProductId =“AV-CB-01”CartItem.getName=“Amazon Parrot”CartItem.getAttribute =“AdultMale”CartItem.getQuantity = 2CartItem.getUnitCost= 480人CartItem.getTotalCost = 960CartItem.getCategory.getName=“BIRDS”CartItem.getCategory.getId =“CTI-03”CartItem.getCategory.getDescription =“此类别包含任何类型的.“图3.第三章。应用于CartItem实例的Object Flattener生成的输出调查规则的完整性,其被测量为可以用非侵入性方法访问的状态的量,但是不被用规则自动选择的检查器由于这种技术既不安全也不完整,我们允许用户使用插件来扩展可以通过定义嵌套对象的递归检查的最大深度和防止检查大型数据结构(如数组)的条件来确定对象检测器,当分析不感兴趣对象检测器收集信息,这些信息可以用不变检测技术来计算I/O不变量。在我们的实验中,我们使用Daikon [4]来自动推断代表组件所提供的服务属性的不变量。 Daikon从一个与服务的标量和结构化参数兼容的大型不变量集开始。通过删除所有被单个行为违反的不变量来修剪初始不变量集,因此剩余的不变量描述了所考虑的参数之间的重要关系。图4显示了为图2所示的参数CartItem自动派生的I/O不变量。size(CartItem.getItemId)= 6个size(CartItem. getProductId)=6min(size(CartItem.getName))= 5个max(size(CartItem.getName))= 35人min(size(CartItem.getCategory.getName))=4max(size(CartItem.getCategory.getName))=15size(CartItem.getCategory.getId)=6CartItem.getQuantity>= 1CartItem.getUnitCost*CartItem.getQuantity= CartItem.getTotalCost见图4。 为CartItem5相互作用不变量交互不变量捕获被监视组件与其他组件的交互。例如,要返回一个更新的目录,24L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)∈L组件Catalog可能需要与提供数据库连接的组件Catalog-DAO我们提取交互不变量作为正则表达式的字母表,其中包含一个符号的每个服务所使用的监控组件。交互模式可以用一个字符串来建模。例如,服务s向组件c1发出请求序列s1,s2向c2发出两次,s3向c3发出请求序列,服务s的执行可以用字符串建模w=c1.s1c2.s2c2.s2c3.s3.正则表达式可以通过多种方式导出[14,1,9],这些方式反映了关于建模系统的不同假设。在提取交互不变量时,我们假设交互模式呈现类似于执行流程的流程。特别是,我们假设两个或多个组件之间的交互可以分解为概念上自包含的请求序列(以下称为“行为模式”)。例如,组件A可以首先访问数据库,然后访问图书馆的服务,最后访问打印服务。这种交互模式可以分解为三种不同的模式,对应于为访问每个服务而交换的请求。因此,我们需要一个语法推理算法,指的是行为模式。记忆是一种宝贵的资源。为了限制内存使用,推理引擎应该限制所检查的行为的存储。最后,行为模式是增量产生的,因此算法必须通过仅使用正样本并且不需要额外的资源来增量地工作现有的算法都不能满足所有的要求,因此我们提出了一种基于不精确推理概念的增量式算法。该算法将正则表达式ER转换为字符串w,该字符串对应于服务s执行的第一个观察到的交互序列。进一步执行相同的服务会产生新的字符串。如果新的字符串wJ属于由服务s的当前正则表达式ER(wJ(ER))生成的语言,则ER不改变。否则,正则表达式ER被扩展为新的表达式ERJ,使得:(i) L(ER)L(ERJ)(ii) wJ∈ L(ERJ)属性(i)保证新表达式捕获到目前为止包含的所有行为,而属性(ii)保证新行为包含在不变式中。我们通过扩展对应于ER的有限状态自动机(FSA)来计算ERJ,以包括新的字符串wJ。在这里,我们举例说明L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)25图五、正则表达式ER的FSA图六、新正则表达式ERJ的FSA基本原则与实例。让我们以FSAAER为例和一个新的字符串wJ=abbdedegcdff。我们首先确定AER识别的wJ的最长前缀:在例子abb中。然后,我们递增地考虑长度为lMAX的子串跟随识别的前缀(lMAX是搜索的子串的长度的最大值),并且我们尝试识别AER的子自动机,该子自动机识别这样的子串之一。在这个例子中,lMAX= 4,我们立即识别出子自动机3, 4,它识别出紧跟着前缀的子串dede然后,我们扩展自动机来识别前缀和已识别的子串。图6中的区域1显示了为识别子串abbdede而添加的新边。然后,我们递增地处理字符串的尾部,直到我们获得一个新的自动机。最后的自动机如图6所示;区域2和3被添加以识别wJ的尾部。该算法产生的正则表达式是一种不精确的近似,但初步实验表明了其有效性.在这里,我们只介绍了算法的基本思想更多的细节可以在[10]中找到6早期验证我们在Sun Java pet store(一个基于EJB技术的在线宠物商店)上验证了BCT。我们实验了两个版本的宠物商店的特点是不同版本的组件购物车,注册26L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)经理和目录。购物车的版本A是原始的Sun实现,它将每个购买的项目的数量设置为1,而不管购物车中存在的数量在版本B购物车中购买的商品数量增加1。注册管理器的版本A要求输入表单的电子邮件地址是有效的,而版本B将电子邮件保留为可选的。Catalog的版本A与服务定位器交互以定位数据库,而版本B直接与数据库交互。我们首先通过运行一组随机生成的测试用例来计算版本A的不变量表6显示了组件购物车的服务add和组件注册管理器的服务perform的I/O不变量,以及组件Catalog的服务getItem的交互不变量。组件服务/I/O不变量购物车Aadd /item.getUnitCost*item.getQuantity=item.getTotalCostadd /item.getQuantity = 1注册管理器A执行/CustomerEvent.getContactInfo.getAddress.getCountry ==相互作用不变量目录AgetItem /ServiceLocator.ServiceLocator.new服务器.getLocalHome(CatalogEJB.create CatalogEJB.getItem+G)表1为修改后的组件计算I/O不变量然后,我们通过将组件购物车、注册管理器和目录替换为版本B来更新版本A,并根据可用的不变量来监控版本B的执行。表6显示了表6的不变量的监控执行结果。这些结果突出了可以通过监控不变量检测到的不同方面:当系统的要求被修改时,当故障产生某些后果时,或者当系统以意外的方式使用时,不变量可能被违反。ECU可以将结果发送给用户,用户可以诊断每个案例,识别故障或需要进行额外测试。L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)27Inv.结果评论投资者1满意版本B不会改变这个不变量的行为投资者2违反版本B不同地处理购物车中的物品数量,满足不同的要求。投资者3违反版本B不需要电子邮件地址来确认订单。投资者4违反不变量表示属性Country的不同用法,从而揭示了版本A的不充分测试。投资者5违反新组件生成表达式(Catalog-DAO.CatalogDAOFactory.getDAOCatalog-DAO.CatalogDAO.getItem),它指示新交互模式的存在。表2在版本B上评估不变量。7相关工作BCT最初结合了许多用于验证基于组件的系统的技术。作者不知道有任何其他工作将类似的技术结合起来实现同一目标,但BTC使用了以前工作提出的想法和技术。BCT与其他研究分享了使用从现场收集的数据来测试和验证软件系统的想法:永久测试,远程测试和现场数据。Pavlopoulou和YoungANTSOrso等人“Gamma从部署的软件中收集现场数据,以支持影响分析和回归测试[13]。与其他方法不同,BCT使用来自现场的数据BCT使用Daikon [4]中实现的不变检测技术来推断I/O不变量。Daikon可以计算标量和结构变量的不变量。BCT提供了一种将Daikon应用于面向对象软件的技术。Ernst等人提出的对象属性的线性化为分析复杂的数据结构提供支持,但需要代码插装[5]。BCTMcCamant和Ernst提出了一种技术,通过使用Daikon计算的不变量来正式证明组件更新的安全性BCT不关注形式验证,而是使用不变量来生成监视器28L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)用于检查观察到的行为与预期行为的兼容性。Nimmer和Ernst通过ESC/Java [2]执行静态验证来增强Daikon动态检测的不变量,以确认工具[12]提出的属性。 BCT在源代码可能不 因此,源代码的静态分析并不总是适用的。Raz等人使用Daikon和统计算法计算的不变量来合成数据馈送系统的行为[16]。这种方法类似于BCT,但它基于分布式设置,其中不变量都在客户端计算和存储。BCT使用具有非常不同视角的不变量:跟踪系统和组件的演化,并用于验证实际实现的正确性Hangal该技术专注于调试问题,并试图最大限度地减少所消耗的资源。不变量的轻量级计算是以有限的推理不变量的表达能力为代价的。BCT在一个优先考虑准确性而不是资源消耗的框架中工作。8结论本文提出了一种新的CBS测试方法--BCT。BCT通过使用领域中的组件来计算不变量,并使用这些不变量自动检查添加的新组件的兼容性,以更新和增强不断发展的系统。BCT技术几乎不需要用户干预,适用于复杂的面向对象的软件,并产生有价值的信息,新老系统之间的差异,可以揭示细微的故障。通过使用不变量检测Java Pet Store的不同版本之间的不匹配所获得的早期实验结果表明,BCT可以检测到广泛的故障。我们计划增加BCT的实验数据,以获得该技术所提供的好处的证据。我们目前正在开发一个工具套件,用于自动应用BCT大型实验软件,从而评估的困难,将BCT应用到工业规模的系统,并澄清有效性,协同作用和互补性的故障检测的交互或I/O不变量。L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)29引用[1] 奇凯洛岛和S. C. Kremer,Inducing grammars from sparse data sets:a survey of algorithmsand results,Journal of Machine Learning Research4(2003),pp. 603-632[2] Detlefs,D.,K. Rustan,M. Leino,G.陈文辉,静态分析,第一届中国计算机科学与工程学术研讨会论文集(1998)。[3] Edwards,S. H、A framework for practical,automated black-box testing of component-basedsoftware,Journal of Software Testing,Verification and Reliability11(2001).[4] Ernst , M. D 、 J. Cockrell , W. G. Griswold 和 D. Notkin , Dynamically discovering likelyprogram invariants to support program evolution , IEEE Transactions on SoftwareEngineering27(2001),pp. 99比123[5] Ernst,M. D、W. G. Griswold,Y. Kataoka和D. Notkin,Dynamically discovering pointer-basedprograminvariants , TechnicalReportUW-CSE-99-11-02 , UniversityofWashington,Seattle,WA(1999).[6] Hangal,S.和M. S. Lam,Tracking down software bugs using automatic anomaly detection,in:第24届软件工程国际会议论文集(2002年),pp。291-301[7] H av elund,K. 和G. R oRisu,合成安全生产监控器,in:J.- P. Katoen和P. Stevens,编者,《系统构造和分析的工具和算法国际会议论文集》,计算机科学讲义2280(2002),pp. 324-356[8] Jones,J.和M. Harrold,Test-suite reduction and priorization for modified condition/decisioncoverage,IEEE Transactions on Software Engineering29(2003),pp.195-209.[9] Lang,K.,B. Pearlmutter和R.普赖斯,阿巴丁戈一个DFA学习竞争和一个新的证据驱动的状态合并算法结果,在:第四届国际语法推理研讨会,1998年。[10] 马里亚尼湖Capturing and synthesizing the behavior of component-based systems,TechnicalReportLTA:2004:01,Uni versita`di Milano Bic occa(2003).[11] McCamant , S. 和 M. D. Ernst , Predicting problems caused by component upgrades , in :Proceedings of the 9th European Software Engineering Conference jointly held with 10th ACMSIGSOFT international symposium on Foundations of Software Engineering(2003),pp. 287[12] Nimmer,J. W.和M. D. Ernst,动态检测程序不变量的静态验证:集成Daikon和ESC/Java,在:RV'01会议记录[13] Orso,A.,T. Apiwattanapong和M. J. Harrold,利用现场数据进行影响分析和回归测试,在:第九届欧洲软件工程会议与第十届ACM SIGSOFT软件工程基础国际研讨会(2003年)联合举行的会议记录中,pp. 128比137[14] 帕 雷 赫 河 和 V.Honavar , Grammar inference , automata induction , and languageacquisition , in : Dale , Moisl and Somers , editors , Handbook of Natural LanguageProcessing,Marcel Dekker,2000.[15] 帕夫洛普卢角和M. 剩余测试覆盖监控,第21届国际软件工程会议(ICSE'99),1999年,第100277-284.[16] Raz,O.,Koopman和M. Shaw,在线数据源中的语义异常检测,在:第24届软件工程国际会议论文集(2002年),pp。302-312[17] 罗德里格斯,M。G.,用于远程导航性测试的自动数据收集代理,IEEE Software19(2002),pp. 78比85[18] Rothermel , G. 和 M. Harrold , A safe , efficient regression test selection technique , ACMTransactions on Software Engineering and Methodology6(1997),pp.173-21030L. 马里亚尼,M。Pezzè/Electronic Notes in Theoretical Computer Science 116(2005)[19] 辛格岛,巴西-地B. Stearns,M. Johnson和企业团队,[20] Sinha,S.,M. Harrold和G. Rothermel,System-dependence-graph-based slicing of programswith arbitrary interprocedural controlprograms,in:ACM,editor,proceedings of the 1999International Conference on Software Engineering,1999,pp. 432-441[21] Sta Escherord,J. A.和A. L. Wolf ,软件系统的架构级依赖分析,International Journal ofSoftware Engineering and Knowledge Engineering11(2001),pp. 431- 451[22] Templer,K.和C. Je Zerkery,A configurable automatic instrumentation tool for ANSI C,in:proceedings of the 13th IEEE International Conference on Automated Software Engineering,1998,pp. 249-258[23] Wolczko,M.,Using a tracing javaTM virtual machine to gather data on the behavior of javaprograms,Technical Report SML 98-0154,Sun Microsystems Laboratories(1999).
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功