没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记116(2005)145-156www.elsevier.com/locate/entcs基于契约的Web服务Reiko Heckel1帕德博恩大学计算机科学、电气工程和数学学院沃伯格海峡10033098帕德博恩,德国马克·罗曼2帕德博恩大学计算机科学、电气工程和数学学院沃伯格海峡10033098帕德博恩,德国摘要Web服务是由服务提供者和请求者连接在一起组成的。为了确保互操作性,请求者除了数据类型和操作签名之外,这还需要服务规范包括口头信息,例如指定(所需或所提供)操作的前置和后置条件的合同。在本文中,我们提出了可视化的合同图转换规则,融合良好基于UML的数据模型和签名概念。规则的操作性解释对于在单元测试中模拟所需组件的行为可能是有用关键词:Web服务,契约式设计,图转换1电子邮件地址:reiko@uni-paderborn.de2电子邮件地址:mlohmann@uni-paderborn.de1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.02.073146R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)1451介绍现代分布式应用程序是根据面向服务的架构(SOA)构建的,SOA是Web服务[3]或Jini [17]等平台的基础概念模型。如图1所示(cf.[3]),面向服务的体系结构涉及三种不同的参与者:服务提供者、服务请求者和注册服务。服务提供者将某些软件功能作为服务公开给其客户端。这样的服务可以,例如,是一个基于SOAP的Web服务,用于在Internet上进行电子商务协作。为了允许客户端访问服务,提供者必须发布服务的描述。 由于服务提供者和服务请求者通常事先并不知道对方,因此服务描述通过特殊的注册中心服务发布。在这些注册服务注册并分类服务描述之后,它们可以提供服务描述来响应服务请求者发出的查询。一旦服务请求者在注册中心找到了合适的服务描述,它就可以绑定到所提供的服务并使用它。这种面向服务的体系结构通常是高度动态的,因为服务只是松散耦合的,客户端通常在运行时绑定到服务Fig. 1. 面向服务的体系结构实现这种开放、动态体系结构愿景的机制依赖于两个假设。(i) 提供的服务在功能上是正确的。 他们的描述。(ii) 将描述与需求匹配对于建立提供者和请求者的互操作性是足够的。第一个假设是显而易见的。它对各种系统都是必需的,可以通过单元测试来建立。 第二个假设来自这样一个事实,即松散耦合的分布式系统不能在集成中进行测试。相反,规范必须包含足够的信息R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145147一旦建立了匹配,请求者和提供者就可以成功地一起工作。面向对象开发中解决类似问题的方法是契约式设计[12],其中断言用于指定组件与其客户端之间的关系,作为正式协议,表达各方的权利和义务。契约用运算的前置和后置条件以及不变量来表示,可以从非常抽象的规范(给定两个正整数,结果永远不会为零)到完整的规范(计算两个整数的和)。这种灵活性允许提供关于所需行为的适当数量的信息。在本文中,我们将讨论如何使用契约式设计来描述Web服务这包括根据描述测试Web服务的问题本文组织如下:在第2节中,我们更详细地描述了合同设计在第3节中,我们将这一概念应用于Web服务,并介绍了一个可视化的合同图转换规则。第4节讨论了使用合同进行测试,第5节总结了本文。2契约式设计契约式设计是一种面向对象的设计技术,与建立法律契约有一些相似之处[12]:将类与其客户端之间的关系视为正式协议,表达各方通过在代码级对类声明和响应的精确定义,我们可以在源代码中添加规范,并在大型软件系统中获得显著的信任度[12]。契约式设计也可以在组件级使用。作为使用契约式设计的开发人员,您可以将组件契约指定为组件或接口的一部分。然后,合约描述了组件对客户端的期望以及客户端可以对它的期望。通常,组件的合约是从服务器的角度编写的“合同规定了双方必须做什么,而与如何完成无关。合约通常由断言和相关概念定义。断言是涉及软件的一些实体的布尔表达式,并且声明这些实体在软件执行的某些阶段可能满足的属性。典型的断言可能表示某个整数具有正值,或者某个引用不是无效的。在运行时,148R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145您可以在系统执行期间评估这些断言。在一个有效的软件系统中,所有断言的值都为真。换句话说,如果任何断言评估为false,我们认为软件系统根据其规范无效或损坏在契约式设计中,我们识别了三种不同类型的断言[2]:先决条件:先决条件指定在操作可以执行之前必须保持的条件。因此,它们在方法执行之前被计算。前置条件涉及系统状态和传递到方法中的参数。后置条件:相反,后置条件指定在操作完成后必须保持的条件。因此,后置条件在方法完成后进行评估。不变量:不变量指定了一个条件,该条件必须在客户端可以调用对象方法的任何时候保持不变量被定义为类定义的一部分。 在实践中,不变量在计算之前和之后的任何时间都被计算。任何类实例上的方法都会执行。不变量的违反可以指示客户端或软件组件中的错误3Web服务的契约式设计在下文中,我们描述了Web服务所需的契约式设计概念的不同层次此外,我们引入的概念,提供和所需的合同,以允许使用契约设计的供应商以及请求方。3.1DbC for Web Services的规范级别Web服务是通过标准化的XML消息传递机制可通过网络访问的组件。Web服务的愿景是,它们使用互联网将应用程序相互连接,以交换数据并以新的方式组合数据[7]。为了告知服务请求者其权利和义务,合同必须从服务提供者转移到服务请求者。因此,使用Web服务的契约式设计,我们面临着超越经典实现级别的契约的不同表示。此外,在Web服务的开发过程中,我们在三个不同的级别上面临合约的表示:实现级:这里,合约由实现语言的布尔表达式组成,使用所有功能特性(访问字段,方法调用,基本类型和操作)以及一些特定的操作符来引用前置条件(例如pre)和后置条件(例如post)。R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145149当前的Web服务在大多数情况下基于面向对象的编程语言。这些编程语言中的大多数只支持语法契约,但有些语言,例如Ei Jesel [11],固有地将行为契约与前置条件,后置条件和不变量结合起来。然而,有不同的方法来扩展现有的语言与行为契约,如iContract [10],JML[5],或JContract [15]的Java。JContract的一个例子如下所示:/***@pre((b!= null)\&\&(a!= null)\&\&(c!=null))* @post\$result.getBill()!= null*/public Order orderBook(Book b,DeliveryAddress a,信用卡c){...退货单;...}XML级:Web服务是使用基于XML的协议在Internet上使用的组件例如,Web服务描述语言(WSDL)[6服务请求者可以阅读此描述,以访问服务提供者提供的接口(见图2)。但是,WSDL不能提供操作的行为信息。带操作合同的扩展将解决这个问题。图二、接口描述到请求者代理的传输150R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145模型级别:前两个级别的主要缺点是它们很难为人类读写。一个可视化的合同,使文档和开发人员之间的沟通将是可取的。在下文中,我们将专注于合约的模型级规范来解释我们的想法。我们的目标是从模型级规范中自动导出实现级和模型级的契约。然后,开发人员只需在模型级别上创建和推理合约。3.2基于模型的合同具体Web服务的模型至少应该具有以下部分。• 操作界面,包括其操作;• 服务的外部可见数据的模型,即,与客户端通信所需的所有数据类型;• 描述服务执行的操作的合同。为了描述一个接口,我们使用UML接口[13],如图所示3 .第三章。图3.第三章。一个简单的网上商店界面我们使用类图来建模问题域的数据模型。这些类图描述了特定领域(例如业务领域或技术领域)的提供者和请求者感兴趣的数据结构。这使请求者和提供者能够共享一种公共语言,以确保它们使用相同的关键字来描述相同的概念。图4提供了用于图书销售的域的小数据模型。它提供了基本的术语,并以UML类图的形式描述在这个域中,订单由DeliveryAddress、订购的Book和Bill组成。泛化关系表明CreditCard和BankTransfer是基本概念PaymentMethod的特殊化。这意味着,账单可以通过信用卡或银行转账支付服务提供者现在可以通过合同表示,他的服务能够处理通过信用卡支付的图书订单因此,我们开发了一种技术,它使用图形转换规则的机制,以促进一个直观的可视化制定合同。在我们介绍技术细节之前,让我们看一下图1中的服务提供者的示例规则。五、该规则表示Web服务需要订购一本书的数据、购买者的个人数据和他的信用卡,并将为R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145151见图4。 图书销售的数据模型(省略属性)为该客户创建的指定账簿和账单(通过信用卡支付)。我们可以看到服务的行为正如我们从其名称中直观预期的那样。利用图变换的机制,可以方便地描述该领域中的各种不同的服务一个人可能例如。制定服务说明,向现有订单添加项目或删除项目,或者在没有任何付款信息的情况下取消预订。图5中的图转换规则到JContract的简单转换在第2节中显示。形式上,一个图转换规则由两个图(左侧和右侧)组成,在我们的例子中,这两个图是通过使用UML对象图可视化的。每个图都是在类图上键入的。技术细节参见[16,1基本的直觉是,每个只出现在规则右侧的对象都是新创建的,而每个只出现在规则左侧的对象都是被删除的两边都存在的物体不受规则约束。如果只有一个类型的对象存在,它可以保持匿名,如果一个类型的不同对象之间的区别如果需要与标准UML概念更接近的相似性,也可以在UML协作图表[9]。图五、 描述操作orderBook行为的合约3.3所需和提供的合同面向服务的体系结构是高度动态和灵活的。服务请求者可以在运行时或开发时动态地替换服务提供者。这种灵活的架构需要新的机制来确保,152R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145服务请求者和服务提供者可以一起工作。在这个帐户上,我们使用图转换规则:一个描述的一个操作的服务,并制定一个请求。服务提供者通过所提供的契约来详细描述其所请求的接口,而服务请求者通过所需的契约来详细描述其所需的接口。从提供者的角度来看,规则的左手边规定了他提供服务的先决条件,即必须存在的情况或服务执行任务必须提供的信息。规则的右边描述了后置条件,也就是说,它表征了Web服务成功执行之后的情况。从请求者的角度来看,规则的左侧表示他愿意提供给服务的信息,而规则的右侧表示他希望通过使用服务来实现的情况。从请求者的角度来看,这样的规则可以在图6中找到。此规则表示客户端能够提供有关书籍的信息,信用卡和他的送货地址,并且正在寻找能够基于这些信息为他构建订单的供应商。这意味着他正在寻找一个图书销售商,直观地说,图5中的provider规则应该是这个请求的合适候选者,因为在这个规则中,创建完成之后注意,图6中的规则是服务请求者订购一本书的最小需求。与图5中的契约不同,账单不是后置条件的一部分,因为请求者主要对订购一本书感兴趣(从请求者的角度来看,为它付费是一种不受欢迎的方面)。为了允许改变服务提供者,我们在[8]标准中定义了服务提供者图六、描述操作orderBook行为的服务请求者的必需契约总而言之,Web服务提供由所提供的契约详细描述的接口,并且可以自行使用其他服务。由于后者只在运行时才知道,因此在设计时,所有必需接口的行为规范都被创建,其中包含操作契约(图11)。7)。R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145153见图7。由提供的和要求的合同4测试Web服务合同契约式设计是指定操作行为的一种正式方式。在实现级别使用契约式设计是一种将规范信息纳入代码本身的方法。但是,我们仍然需要根据其规范测试实现。问题是如何使用契约式设计来支持测试,即,创建、选择和执行测试用例。在本文中,我们感兴趣的功能测试,即,合同中的黑盒测试 这些测试确保交付的产品符合其规格[4]。考虑到这个目标,使用所提供的契约来创建测试用例(样本输入数据)和测试预言机(输出的一致性检查)是有意义的。然而,正如在介绍中所讨论的,开放分布式应用程序将我们的范围限制在单元测试上。实际上,传统的集成测试在Web服务领域是困难的,因为它必须连接不同的服务以确定它们是否可互操作。这是一个问题,因为(i)被测试的Web服务调用的Web服务在设计时可能是未知的,(ii)仅出于测试目的调用它们可能是不可能的或昂贵的。例如,预订假期的Web服务可能需要预订机票、酒店等其他服务。实际上,每个测试用例预订所有设施很快就会超过测试预算。因此,我们需要模拟所需的服务。我们建议使用所需的合同来驱动这个模拟。4.1从提供的合约创建测试套件出于测试目的,我们必须使用输入参数的组合来执行Web服务,以证明服务与其提供的契约的一致性测试驱动程序将不同的测试用例或测试套件应用于Web154R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145服务使用其提供的接口(参见图8)。在本文中,测试用例指定了Web服务接口操作的输入值测试套件是测试用例的集合,通常与测试目标相关[2]。在我们的例子中,一个测试套件可以是一个测试用例的集合,用来测试Web服务的一个接口所执行的使用契约式设计如上所述,前置条件指定在方法可以执行之前必须保持的条件。因此,它们描述了操作调用允许的参数。我们考虑使用Parasoft [14]的Jtest工具来实现这一目的,而不是手动生成测试用例。Jtest是一个基于Java的单元测试工具。它的目的是在组件集成到环境中之前支持组件的测试。Jtest与JContract一起工作,JContract的实现级契约被分析以派生测试用例和预言机。因此,Jtest支持自动化单元级功能测试。图8.第八条。用于测试Web服务的契约式设计4.2组件模拟所需合同由于上面提到的原因,测试应该限制在单个Web服务上。为了模拟被测服务所需的服务行为,我们建议使用相应的必需契约。其思想是,契约描述不同Web服务之间的交互。测试驱动程序可以使用这些契约来模拟被测试的Web服务调用的Web服务(参见图1)。8)。每次Web服务在R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145155test使用测试驱动程序被调用的所需接口,并通过将合约应用于客户端服务提供的输入数据来创建返回值这意味着合约被赋予了操作语义。这样的操作解释对于基于逻辑的描述来说并不明显在这个意义上,所需的服务是由一个类型化的图转换系统模拟的,该系统将所有所需的契约作为规则,并在服务的类图上处理对象图。5总结在本文中,我们提出了一些想法,通过使用契约式设计将行为信息添加到Web服务的规范中来实现Web服务的测试。作为一个重要的新方面,我们引入了提供和需要的契约。提供的契约描述了Web服务所需的行为,而请求的契约描述了Web服务所需的行为。我们使用图转换规则来描述模型级别的合同。这允许通过在测试用例执行期间完成所需的契约来模拟所需的Web服务最后,我们列出了该方法的开放问题(希望其中一些问题可以通过建立在其他人的工作基础上来解决• 必须定义一种基于XML的合同语言,并将其集成到现有的标准(如WSDL)中。• 基于UML的契约符号必须使用图转换规则的概念来固定必须找到或调整CASE工具来支持这些模型的编辑。• 需要将基于UML的契约映射到JContract(或其他实现级别的契约语言),以及基于XML的契约语言。基于这种映射,我们希望推导出可以通过图转换规则来表达的一般合同语义。此外,这些映射必须得到工具的支持• 必须提供用于所需服务的模拟引擎,例如,通过将图形转换工具(如AGG或Fujaba)包装引用[1] 巴雷西湖和R.Heckel,《图形转换导论:软件工程视角》,A。Corradini,H. Ehrig,H.- J.Kreowski和G. Rozenberg,编辑,第一届国际图变换会议论文集(ICGT 2002),讲义156R. Heckel,M.Lohmann/Electronic Notes in Theoretical Computer Science 116(2005)145计算机科学2505(2002),pp。402http://www.upb.de/cs/ag-engels/ag_engl/[2] 宾 德 河 五 、 “Testing Object-Oriented Systems: Models, Patterns, and Tools,” ObjectTechnology Series, Addison Wesley,[3] Booth , D. , H. Haas , F. McCabe , E. 纽 卡 默 岛 M. 钱 皮 恩 角 Ferris 和 D. Orchard ,http://www.w3.org/TR/[4] Carmichael,A.和D.Haywood,[5] Cheon , Y.和 G. T. Leavens, A runtime assertion checker for the Java ModelingLanguage ( JML ) , in : H. R.Arabnia 和 Y. Mun, editors , Proceedings of theInternational Conference onSoftware Engineering Research and Practice (SERP '02 ),LasVegas, Nevada , USA , June24-27 , 2002( 2002 ) , pp.322ftp://ftp.cs.iastate.edu/pub/techreports/TR02-05/TR.pdf。[6] 钦尼奇,R.,M.古金,J. - J.莫罗和S.维拉瓦拉纳,“www.w3.org/TR/wsdl12/。[7] Fensel,D.和C.Bussler,Web服务建模框架wsmf,技术报告,Vrije Universiteit Amsterdam(VU)(2002),http://www.csd.uch.gr/~hy565/Papers/wsmf.pdf。[8] 豪斯曼,J.H.,R. Heckel和M. Lohmann,Towards automatic selection of web servicesusing graph transformation rules,in:R. Tolksdorf和R. Eckstein,editors,BerlinerXMLTage(2003),pp. 286 http://www.upb.de/cs/ag-engels/Papers/2003/-291,www.example.comBXMT-AutomaticSelectionOfWS.pdf。[9] 黑克尔河和S.Sauer,通过状态转换加强uml协作图,在:H。Hussmann,editor,FundamentalApproaches to Software Engineering,4th International Conference,FASE 2001,heldas Part of the Joint European Conferences on Theory and Practice of Software,ETAPS2001,Genova,Italy,April 2-6,2001,Proceedings,LNCS2029(2001),pp.109-123[10] 克莱默河,iContract-295-307[11] 迈耶湾,[12] 迈耶湾,URLhttp://www.prenhall.com/allbooks/ptr_0136291554.html[13] 对象管理组,UML规范版本1.4(2001),http://www.celigent。com/omg/umlrtf/.[14] Parasoft,http://www.parasoft.com/。[15] Parasoft,http://www.parasoft.com/.[16] 罗森伯格,G.,编辑,[17] Sun Microsystems,wwws.sun.com/software/jini/whitepapers/architecture.pdf。
下载后可阅读完整内容,剩余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直接复制
信息提交成功