没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记260(2010)25-45www.elsevier.com/locate/entcs统一分布式组件Antonio Cansadoa、Ludovic Henrioa、Eric Madelainea和Pablo Valenzuelaba INRIA Sophia-Antipolis、CNRS、I3S、UNSA。2004,Route des Lucioles,BP 93,F-06902 Sophia-Antipolis Cedex,France. 首页.末页@ sophia.inria.frbUniversidaDiego-Portales,Ej'ercito441,Santiago,Chile,pab lo. vaelenzuela@inf. 民主联盟。CL摘要我们提出了一种新的规范语言称为JDC用于分布式组件的设计阶段。在分布式组件中广泛寻求可扩展性需要新的技术来规范它,而这些技术以前还没有得到解决。 我们建议将规范集中在其数据流上;这允许对由数据驱动的同步模型产生的组件间同步进行推理。该语言被赋予了足够的形式,因此它允许一种建设性的方法;它允许生成可以进行模型检查的行为模型,以及生成具有组件控制流程的代码框架。在全球范围内,这种方法的目的是生成具有强有力的w.r.t.保证的组件。他们的行为。关键词:层次组件,分布式异步组件,形式验证,行为规范,模型检查,规范语言。1介绍基于协作的软件开发(CBSD)已经出现,作为一个响应,从行业和学术界处理软件的复杂性和可重用性。其主要思想是清楚地定义组件之间的接口,以便它们可以在多个上下文中组装和组合。不幸的是,软件工程师在组装现成的组件时经常会遇到不小的运行时这是由于组件行为的动态规范不充分(或不存在)而引起的。事实上,只有少数最先进的组件模型实现考虑了动态兼容性。组件模型SOFA [22]和Fractal [8]可以使用“行为协议”[ 22 ]或(对于Fractal)使用我们的pNets形式主义[ 3 ]来指定其他组件模型,如CORBA组件模型[21],只检查接口类型兼容性,以实现绑定。类型由接口描述语言(IDL)定义。1571-0661 © 2009由Elsevier B. V.出版,CC BY-NC-ND许可下开放获取。doi:10.1016/j.entcs.2009.12.03026A. Cansado等人/理论计算机科学电子笔记260(2010)25我们工作的一个主要独创性是,我们的目标是分布式组件系统通过异步方法调用与未来进行通信,具体来说,在网格组件模型(GCM)的框架中。GCM是由欧洲卓越网络CoreGrid定义的一种新型组件模型。GCM是基于分形组件模型,扩展解决网格计算。从分形,GCM继承了一个层次结构与功能和非功能行为之间的关注点强分离。对Fractal的扩展来自这样一个事实,即在网格计算中,组件部署在数千个节点上,因此可伸缩性起着重要作用。即使在文献中有许多规范语言,也没有一种能很好地适应分布式组件的环境。在GCM中,大多数困难来自于指定同步。从实用的角度出发,重点介绍了GCM在Java中的一个在GCM/ProActive [11]中,组件通过异步方法调用与期货进行通信期货充当承诺回报值的占位符同步发生在对future的数据访问时,future可以在远程方法调用中传输到其他组件;最后,程序中的几乎任何对象都可以是future或不是透明的。这种透明的未来减轻了程序员的同步困难,允许分离关注点(源代码可以真正独立于物理基础设施),并在中间件级别提供优化机会。另一方面,指定和/或推断同步变得更加复杂;我们需要为程序员提供帮助。据我们所知,在这方面没有提出任何具体的语言我们在[10]中的方法是将组件的行为作为架构规范的一部分,根据参数化传输系统网络(pNets)[3]定义; pNets是一个强大的模型,它表达了与值传递通信的进程使用pNets,我们展示了如何合成分布式组件的行为;然而,形式主义太低级,无法用作规范语言,并且缺乏高级我们希望在不同的语境中使用这些概念。相关工作本着同样的精神,他们选择简单性而不是表达性,例如“行为协议”使用简单的正则语言来描述组件行为的痕迹。这允许它们检查边界不匹配,但是它们仅考虑数据流的有限抽象。STSLib [18]提供了一个正式的组件框架,它根据符号转换系统(STS)从符号协议中合成组件。就像pNet一样,STS简洁地表示有限系统,然而,STS依赖于抽象数据类型(ADT),它比我们的简单类型更具表达力(见2.3节),但对软件工程师来说不那么直观。两种形式都依赖于(N元)同步向量,但在STS中它们是静态的,而在pNet中它们是动态的;A. Cansado等人/理论计算机科学电子笔记260(2010)2527如[3]中所示,这允许我们以自然的方式来表示重新配置:重新绑定一组接口被视为同步向量的变化。STSLib基于STS协议合成组件;控制器解释STS协议,ADT中的数据用Java实现(并生成)。STS组件中的通信是相当低级的;发送者和接收者必须同意交换消息,尽管没有明确的概念要求或提供的服务。Sensoria [1]是另一个为组件交互提供数学框架的项目。它的目标是面向服务的架构(SOA),如Web服务和SCA(服务组件架构[7])。他们的方法类似于我们的方法更接近于编程模型,表达了组件做了什么,以便稍后推断哪些是交互。贡献我们的工作的独创性是专注于服务调用,并通过期货手段隐式我们将展示数据流和对传输结果的这种方法为程序员提供了一个接近编程模型的高级和强大的抽象。而不是证明遗留代码是安全的,在本文中,我们采取了类似于[14,18]的建设性方法。这个想法是指定系统,证明规范是正确的,然后生成(Java)代码框架,保证符合规范。pNets作为与模型检查器接口的底层形式主义,程序员在pNets之上使用高级规范这种语言被称为Java分布式组件(JDC)。纸结构本文的组织结构如下。第2节讨论了规范语言的基础。然后,第3节说明了如何使用体系结构规范来描述和组合组件。在第4节中,我们定义了组件的黑盒行为,它抽象了组件的内部细节第5节详细说明了用户类型的抽象。最后,第6节解释了如何从我们的规范语言中生成行为模型和代码框架2规范语言分布式组件往往是粗粒度的组合单元,并且通常是在下文中,我们以Java子集的扩展形式提供了一种指定语言,用于指定这些组件。该语言包括架构和行为定义,并被赋予足够的形式和控制流程信息,以便我们能够:28A. Cansado等人/理论计算机科学电子笔记260(2010)25• 一方面检查系统的正确性(6.2节):我们建立了一个可以根据时态公式进行模型检查的可验证模型• 另一方面,生成安全的组件(6.3节):我们生成组件的控制代码,保证遵守规范。我们选择Java类语言有几个原因:(i)它接近工程师的目标专业知识,使用通用语法,如方法调用和数据类;(ii)它允许在代码框架中嵌入部分规范;(iii)它使用与实现中相同的数据库,保证数据库上的操作直接有用而无需修改。2.1分布式组件ProActive [11]是GCM的参考实现,它提供了一种处理网格上分布式组件的最新方法。组件通过异步方法调用进行通信。方法调用在目标组件的队列中创建一个请求,并在调用方端创建一个future作为结果的占位符。这些期货可以在组件之间传输,没有明确的指令处理期货,既不用于创建也不用于访问,但是对期货的访问是合法的。serve(m ett ho d)用于从请求中提取method。主动性保证,一旦知道了未来的承诺价值,此外,用于传输未来值的各种策略被证明不会改变组件的行为。ASP演算[12]给出了ProActive的精确操作语义。这些结果启发我们的规范语言采用期货来解耦组件。在规范语言中使用透明的future带来了与编程语言相同的优点:系统设计者不必怀疑变量是否可能包含future;或者更准确地说,对于有时可能包含future的变量,不需要显式的同步机制。这扩展了规范的可重用性,因为它们可能适合多个上下文,其中值是远程计算的,或者来自本地实例。期货透明性的一个缺点是非确定性;在程序的给定点上,一个变量是否是期货通常是不可静态判定的然而,可以指定额外的同步,以确保在对变量进行同步之后,该变量已知为值,或者具有填充值的未来GCM支持动态重构,但JDC尚未考虑动态重构。在[3]中,我们提出了基于pNet的模型来处理组件的重新配置。我们计划朝这个方向扩展语言。2.2将行为分解为服务组件的功能行为是对控制流、数据流的某些元素以及对数据的访问的抽象。具体来说,对于我们处理的分布式组件,有趣的事件是:A. Cansado等人/理论计算机科学电子笔记260(2010)2529• 远程方法调用,这些表示组件之间的通信。远程调用总是异步的,它在被调用方组件的请求队列中创建一个请求,并在调用方中创建一个未来来处理承诺的结果。远程调用由客户端接口上的调用标识。• future语句,这些表示在计算future值的组件和接收对future的引用的组件之间创建隐式通信通道。通过跟踪远程方法调用的参数和结果中的未来对象,• 数据访问,这些触发组件之间的同步。它们使用静态分析来识别,或在规范中明确给出组件规范的第一部分称为服务策略;它定义了组件如何根据其内部状态选择请求,以及组件自己触发的任何行为。这是组件协议的粗略规范,但是,它为用户提供了如何使用组件的好主意。例如,规范可以指定组件必须以特定顺序服务请求服务的第二部分指定在服务策略中公开的每个请求实际上做什么。这种行为是由一种类似Java的语言定义的,它非常接近我们想要指定的编程模型。在那里,我们包括控制和数据流的抽象,在服务方法中进行的远程方法调用,以及对数据的访问。虽然它需要静态分析来推断行为,但它比标准Java更容易;远程调用很容易通过对组件客户端接口的调用来识别2.3数据库和抽象JDC中使用的数据库是标准的Java类。这样我们的生成工具得到的代码块就可以直接使用了.另一方面,任意的数据库通常有很大的(可能是无限的)域,不能直接进行模型检查。我们所寻求的这种行为属性只需要对这些数据集进行抽象。因此,无论何时需要验证,规范都包括用户类型的抽象,允许导出更简单的规范。抽象在控制流程和同步过程中仅保留数据,但是,它必须保留Cousot抽象解释意义上的行为属性如果抽象是有限的,并构成初始参数域的抽象解释,那么模型是有限的。在[13]之后,我们从程序变量的域的抽象中构建了系统行为的抽象解释;这种构造可以用于有限模型检查,因为它保留了安全性和活性属性。抽象是从用户类型到预定义的一阶数据类型(现在是简单类型简单类型本身作为Java提供30A. Cansado等人/理论计算机科学电子笔记260(2010)25类,并且作为一种特殊情况,可以在JDC程序中使用。 它们是:点(或单例),布尔,枚举类型,整数,整数区间,字符串,简单类型的记录,简单类型的数组在我们的工作中,我们将抽象分解为两个步骤:第一步将具体类型映射到潜在的无限简单类型,使我们能够生成参数化的pNets模型。从pNets,我们可以应用许多不同的证明方法,包括归纳定理证明技术,可以解决一个大家庭的属性。第二步是基于参数域的有限划分,这些参数域依赖于要证明的每一组属性。在这种情况下,抽象产生了有限的pNet,我们可以在其上使用显式状态模型检查器。最后,我们的抽象必须考虑未来。即使变量具有不重要的值,对变量的访问仍然可以触发同步。这使得选择一个好的抽象变得很棘手,一些变量只保留在抽象中,以便发出最终访问它们的信号。换句话说,这些变量有一个抽象域,其中有2个值填充或未填充。3体系结构规范在下一节中,我们将介绍JDC的抽象和具体语法元素每个框定义一段JDC语法,使用:粗体的关键字(例如组件);写在简单引号之间的终结符(例如]); choices with|(例如,expr 1| expr2);零的级联(相应地,一个)或多个带有“”和“+”的表达式(例如expr“,expr+”);以及标识符:3.1定义一个组件组件类型的定义包括其与规定和要求的外部接口,以及其行为的规范。这种行为要么是以一组服务(第4节)的形式由黑盒规范给出,要么是由组件的组合(也称为架构)给出(第3.2节),甚至两者都有。组件中的每个接口都有一个角色(服务器或客户端)、一个类型(大多数IDL中的Java接口)和一个名称。在组件定义的上下文中定义的接口是外部接口,可以绑定到环境。接口决定了组件→组件外部接口界面设计[服务项目][建筑]接口→服务器|客户端接口InterfaceType组件定义组接口黑盒描述内容描述界面角色类型和名称A. Cansado等人/理论计算机科学电子笔记260(2010)2531组件;所提供的服务由服务器接口定义,所需的服务由客户端接口定义。3.2组成成分组件的组成是在体系结构中完成的。它通过组件的子组件、内部接口和绑定来公开组件的子组件被命名和类型化,类型由外部组件定义或内联定义给出。绑定连接组件的内部接口和子组件的外部接口中的两个接口建筑→架构内容子组件子分量集内部接口界面设计组接口绑定捆绑包组结合件子组件→默认类型命名子组件| 组件内联定义联系我们’id对类型绑定→bind绑定一对接口在GCM中,组件的内部接口和外部接口之间的关系是任意的:拦截器可以转换或拦截任何传入的调用。为了简单起见,在本文中,我们假设每对外部-内部接口(具有相同类型和名称,但具有相反角色的接口)都有一个精确的匹配;并且外部(分别为内部)服务器接口被直接转发到相应的内部(或外部)客户端接口。3.3例如CoCoME示例[9]使用GCM / ProActive实现。这是一个销售点系统,其中收银台处理销售。收银台及其硬件控制器被实现为图1和图2所示的组件。1和2.4行为规范在设计一个系统时,设计者希望采用一种自顶向下的方法:在进入其架构之前,首先指定组件的行为因此,我们还建议直接指定接口可接受的行为;这被称为组件的黑盒当然,不同的架构定义可以匹配相同的组件黑盒。在本文中,我们将组件黑盒与其实现(架构)之间的等价性(或前序)保留下来。许多现有的工作可以应用,从所有概念32A. Cansado等人/理论计算机科学电子笔记260(2010)25组件CashDesk {外部接口服务器接口ApplicationIf appIf;客户端接口ScannerIf;//我想...外部接口体系结构内容组件应用程序;组件扫描仪;//我想... 控制器内部接口服务器接口ApplicationIf appIf;//我想... 内部接口绑定bind(this.appIf,application.appIf);//我想...绑定}图二.等价模式Fig. 1. 体系结构规范从进程代数继承的模拟和互模拟。但是,它们必须适应我们的组件模型,例如,以类似于[23]的组件可替代性关系的方式。在GCM中,有两种组件,即原子组件的基元和由其他组件组成的组件的复合。原语是单线程的,并发性是由复合引入的JDC中的并发由Services块中的一组并发服务指定。每个服务都表示一个具有自己的局部变量集的顺序流程。一个顺序流程被分为定义服务的高级协议的服务策略和一组详细描述组件导出的方法行为的服务方法4.1服务政策服务策略定义了如何根据组件的内部状态以及内部触发的任何行为从队列中选择传入请求。它由(非确定性)状态机给出,使用正则表达式表示。动作可以表示反应或主动行为。反应行为定义了选择哪种方法,以及从队列中选择它们的顺序。这表示依赖于组件请求队列中的请求的工作。例如,serveOldest(itf.m1,itf.m2)从队列中选择m1或m2上最早的请求;如果队列中没有任何请求,服务将阻塞,直到其中一个请求到达。然后,请求被送达,A. Cansado等人/理论计算机科学电子笔记260(2010)2533政策→ServeMode| 方法调用反应服务现役| Policy ’;’Policy级联服务模式→|'政策|’Policy| Policy’*’服务最老|服务最年轻选择Kleene闭包请求队列访问器过滤器→|InterfaceName| InterfaceName ’.’methodName此接口该方法| Filter ’,’Filter过滤器列表也就是说,则将控制委托给表示该请求的服务方法。此外,主动行为表示自发行为,即,一些没有被要求而做的工作。在我们的示例中,负责扫描仪的组件在扫描产品时向应用程序组件发送信号。这些信号采用应用程序组件上的方法调用的形式。对于扫描器组件,这种行为是自发的,因为与物理扫描器的交互被抽象掉了。服务策略是唯一被授权访问队列的块。基本上,这确保了为服务策略生成的代码是完整的。组件如何提供服务。此外,状态机足够精确,以确保生成的代码将是GCM/ProActive组件的runActivity()方法,并且没有其他方法将访问组件的请求队列。更多细节在第6.3节中讨论。服务定义的一个例子见图3。我们给出了收银台应用程序的部分行为。它有一个单一的服务(该组件确实是单线程的),并且它主要是响应式的;它以FIFO顺序响应传入的事件。4.2并发行为一个原始组件可以由一个服务指定。这种规范也适用于内部具有子组件管道的复合组件。在这些配置中,两个请求调用被顺序处理然而,单个服务不能表示并发,因为在JDC中没有显式的线程创建。相反,请求的并发性由组件中的多个服务定义每个服务都是一个独立的活动,并行地为请求提供服务,有自己的一组局部变量和提供的服务。这种方法的缺点是不可能直接定义服务之间的干扰。也就是说,我们必须依赖于由独立组件组成的架构定义来表达干扰。其他替代方案会给语言带来更多的复杂性;此外,由于编程模型没有显式的并发性,控制代码的生成会很困难34A. Cansado等人/理论计算机科学电子笔记260(2010)25服务服务{//简单类型的变量BoolexpressMode;publicenumCashState{IDLE,STARTED,PAYING}CashState;//我想... 简单类型和用户类型的其他变量// 用 一 些 RPC 初 始 化 系统 , 然 后 以 FIFO 顺序处理调用政策{init ( ) ;// 本 地 方 法serveOldest(applicationIf)*}//我想... 服务方式}voidapplicationIf.barcodeScanned(Barcode barcode){switch(cashState){caseIDLE:支付方式:break;//ignore信号caseSTARTED:Product产品= cashDeskIf.getProduct(条形码);if(product==null){eventBusIf.productBarcodeNotValid();break;}if(expressMode产品.isFull())&&ERROR(“ExceedNumberOfProducts“);else{products.add(product);runningTotal.add(product.getPurchasePrice());eventBusIf.runningTotalChanged(runningTotal,产品);{\fnSimHei\bord1\shad1\pos(200,288)}图 3.Cash Desk应用程序见图4。 一种收银台应用4.3服务方式服务方法是由组件导出的服务的抽象。它是通过Java语句的子集定义的,其中没有异常处理,也没有并发性。这包括输入参数和方法结果之间的相关数据流,以及与所需服务的通信。服务方法可以访问组件Java被扩展为处理组件接口。服务方法的名称由定义它的服务器接口前缀。客户端接口可以像普通对象一样访问,但它们不能被分配给其他变量。 最后一个要求非常重要,以确保组件之间的所有交互都通过客户端接口实现。图4中描绘了服务方法的示例。这种行为集中在收银台,它可能提供一种快速模式,用于处理有限数量产品的销售。当扫描产品的条形码时,组件会对其内部状态做出相应的它通常的行为是把产品通过调用远程方法调用(getProduct(barcode))来获取信息,将产品添加到产品列表中,并更新有关当前销售的一些信息(runningTotal)。 该规范非常接近Java,特别是产品上的操作是在实际实现中预期的操作。5中文摘要本节展示如何在JDC中定义和使用用户类型的抽象。一个特殊性是,一个类可以定义多个抽象,每个抽象都关注变量的重要行为。这些抽象确保我们能够基于pNet生成行为模型。pNets允许我们与几个验证工具进行交互;目前A. Cansado等人/理论计算机科学电子笔记260(2010)2535一一我们专注于有限状态模型检查器,但使用pNet,我们也可以与无限状态模型检查器和定理证明器进行交互5.1抽象的形式化−→−→−→i−→i一个类是一个元组C=,其中m={m(a):τ}是C的方法;−→a={aj:τj }是方法参数;并且−→f={fk:τk 的领域。C的抽象是一个类C−→−→>,其中每个公共方法A=mA,fAm({aj:τ j}:τ)ofChasoneorrmor eabtractmethdmA(−a→):{τA}with−a→the抽象参数,域是类τi,并且结果是类τ的抽象中的抽象值。为了定义什么是规范中变量域的良好抽象,我们需要确定:• 其中,具体说明是• 这些“感兴趣的变量”的重要值是什么• 程序中的哪些其他变量是“感兴趣的变量”(通过控制流和数据流)对于这些重要变量中的每一个,我们必须以下面的方式附加一个抽象类型:• 对于C的每个公共方法m,提供抽象版本mA,其捕获对类变量的访问、对作为参数传递的变量的访问以及它们的相关结果。• 所关注的混凝土类别的字段被包括作为记录。这些场的域是这样的,它们足够精确,足以保持要证明的这是递归完成的,以便找到其他感兴趣的变量的抽象。5.2使用抽象JDC中的抽象类似于Java类,具有处理非确定性和数据抽象的扩展。 一个重要的概念是,在给定的程序中,我们可能必须对相同具体类型的不同变量使用不同的抽象。这意味着在抽象程序中,我们可能需要不同版本的抽象运算符,这取决于参数的抽象类型例如,如果具体程序有变量x:Int,y:Int,则抽象程序程序可能有x:Sign,y:[0.. 3],我们可能需要定义+运算符,Sign和[0.. 3]。 我们分两个阶段来解决这个问题:我们定义一个抽象类库(这里Sign和interval作为Int的抽象,每个类中都有标准的抽象运算符(例如,+:Sign*Sign -> Sign);这些库可以以通用的方式定义,并且易于重用。然后,对于一个特定的程序,36A. Cansado等人/理论计算机科学电子笔记260(2010)25我们定义从所需库抽象类继承的抽象类,并根据变量的具体抽象和代码中发现的运算符的出现(例如,+:签名 *[0.. 3]->Sign)。抽象→“id”的抽象数据类型抽象现场演示局部变量建筑师抽象构造函数操作员抽象算子现场→’键入变量的类型和名称[抽象为类型]类型的局部映射操作员→类型[抽象为类型混凝土操作人员摘要版抽象中的字段是简单类型的变量,或任何其他提供抽象的用户类型。后者可以通过类型的唯一全局抽象来提供,或者通过有选择地确定类型抽象的内联抽象来提供。操作符是类方法的抽象版本,用于捕获变量的兴趣同一个操作符可能有多个版本,每个版本都同样,这也适用于构造函数。它通常是有用的(或必要的),underspecify什么是表达式的结果,可能是因为结果是一组抽象值。该语言包括两个非确定性运算符;第一个,称为ANY,非确定性返回抽象域的任何元素;第二个,称为ANYELEMENT,非从列表中确定性地选择元素。此外,通常不可能静态地知道变量是引用值还是引用未来。安全的假设是将这种变量视为可能的未来。 在这里,我们利用了一个非未来变量在语义上等价于一个具有填充值的未来变量然而,用户必须记住,规范中的某些一个解决方案可以是通过加强同步来使规范更加精确。一个变量(通过touch())。在同步之后,已知变量是非未来的。touch()在变量上同步,而不描述应用了哪些操作。 这样就可以填入而不改变系统中发生的同步。A. Cansado等人/理论计算机科学电子笔记260(2010)25375.3例如抽象ListProducts_AofListProducts{enumListState{EMPTY,OK,FULL}List Product>产品抽象为ListState;ListProducts()抽象为ListProducts_A(){products=EMPTY;}BoolisFull(){returnn(products==FULL);}Product get()抽象为Product_A get() {switch(products){caseeEMPTY:returnnull;caseOK:if(Bool. intn=nums();返回nProduct_A. return();caseFULL:products=OK;返回nProduct_A. return();} }个文件夹voidadd(Product product)抽象为voidadd(Product_A product){产品publicvoidrun(){caseEMPTY:products=OK;break;caseOK:if(Bool. intn();break;break;breakL:破碎;}} }个文件夹上面的例子说明了数据抽象在控制流程中的使用。卖空不得超过产品的最大数量,但对产品的类型没有限制。因此,产品列表的抽象必须足够精确,以考虑是否已超过最大值,并且可以抽象出产品信息。产品列表的抽象没有计数器。相反,它关注列表可能具有的状态:列表是EMPTY、OK或FULL。这种抽象是不精确的w.r.t.它拥有的产品数量,因此列表上的操作是不确定的。 从EMPTY状态添加产品永远不会达到卖空限制,但是,从OK状态添加产品可能会达到卖空限制(状态变为FULL是不确定的)。注意,上下文保证了当列表为FULL时,我们永远不会调用add()。产品的抽象是这样的,我们能够对变量进行信号访问。这是必要的,因为产品可能是一个未来;事实上,在图4中,产品是一个远程方法调用的返回,因此可以是一个未来。因此,产品被抽象为单例域(产品A),这样访问是通过触摸来传达的。6正在进行的工作这项工作的中期目标是创建具有保证行为的代码。 因此,从检查组件的行为开始,然后为组件生成代码框架是很自然的。6.1发现抽象如果没有工具的支持,定义抽象可能是一种负担。开发这种工具的第一步是确定什么是好的抽象。这当然取决于要证明的属性,但有几个一般性的想法支持抽象的自动化。使用静态分析,属性中使用的变量将指示哪些是38A. Cansado等人/理论计算机科学电子笔记260(2010)25“感兴趣的变量”。这些变量的抽象域是这样的,如果有一个非确定性的选择来确定属性,那么抽象必须被细化。有像Bandera [17]这样的工具采用这种方法。Bandera为变量定义了一系列抽象,并让系统找到仍然拥有属性的最不精确的一个。不过,这项工作必须加以扩展,以考虑到未来。至少需要找到一组变量,这些变量可能包含其任何子领域的未来。这将我们引向必须具有非空抽象域的变量集。此外,这给了我们一个变量对于它的类型所能拥有的最抽象的结构,即一个记录,其中每个变量都有一个非空抽象域的字段(或递归子字段)。6.2行为模型生成构建行为模型需要将JDC规范抽象为只有简单类型的相应规范。这是通过将用户类型的每个变量替换为其抽象来实现的。然后,pNets模型将创建:(i) 对于每个服务,存储其每个局部变量。存储器是一个参数化的标记转换系统(pLTS),它存储变量状态,并导出用于访问变量的操作集和获取这些存储与服务方法和服务策略的所有pLTS同步。(ii) 用于JDC的特定库元素的pLTS,例如请求队列和未来的代理。后者需要对期货交易进行数据流分析(iii) 每个服务策略的pLTS。服务策略是一个状态机,因此转换很简单。反应行为被转换为两个动作,一个与队列同步,另一个触发受影响的服务方法。类似地,每个活动行为都被转换为直接触发方法的动作。(iv) 每个服务方法的pLTS。这需要对抽象规范的伪Java代码进行静态分析。(v) 同步结构(pNet),用于关联这些pLTS。每个组件都由一个pNet建模,该pNet同步pLTS的动作(vi) 一棵pNet树,对组件的架构进行建模。 每个分支都是组件的pNets模型,其分支是其子组件的pNets6.3代码生成根据JDC规范,可以使用组件的控制代码生成GCM/ProActive代码表。Java代码只为顺序组件生成,因此并发组件必须提供一个将行为分解为顺序组件的体系结构。积极A. Cansado等人/理论计算机科学电子笔记260(2010)2539中间件是足够的,因为它支持与一阶未来通信的分布式组件我们的方法基于以下步骤:对于组件的每个体系结构规范,编译器生成一个复合组件。该复合体系结构用GCM ADL(体系结构描述语言)表示复合ADL根据其他子组件的ADL、绑定和接口的IDL定义组件类型及其内容。每个服务表示一个顺序组件,因此它的自然实现是一个原始组件。还创建了一个ADL来定义组件类型,以及对其Java实现的引用。使用控制流程为后者生成代码框架。该代码是JDC黑盒规范的翻译,• JDC中的每个服务方法都是组件的公共方法。我们依赖于GCM强大的函数行为封装,并且每个可能的方法调用和数据使用都出现在黑盒规范中。• 所有的数据类型都被创建,但是这些需要由程序员修改以给出实现细节。• 服务策略在ProActive的runActivity()方法中作为状态机实现该方法规定了组件的初始活动,我们使用它来编排对队列的访问并为请求提供服务7结论我们的目标是安全的结构部件。我们的方法是在规范语言中定义规范是足够正式的,以便生成可以进行模型检查的行为模型更具体地说,我们在这项工作中的贡献是:• 分布式软件组件的高级规范语言,称为JDC,包括架构、行为和数据部分。组件的行为以一组服务的形式给出;服务的细节以类似Java的语言给出,这使得指定控制和数据流变得容易数据部分是最终应用程序数据类的抽象。它必须由开发人员设计为验证和实现问题之间的折衷:足够精确以跟踪控制和数据流的变量域,但足够抽象以允许模型检查。• 一方面是以pNets格式生成分层行为模型的过程,另一方面是以GCM/ADL和Java生成代码框架这项工作建立在GCM的基础上,然而,目前只有一小部分 的解决。我们计划扩展该语言以处理其他有趣的功能,例如组通信和非功能方面(动态重定向)。40A. Cansado等人/理论计算机科学电子笔记260(2010)25配置)。目前,我们没有工具支持JDC语言,除了架构部分的Eclipse编辑器形式的图形版本。尽管如此,我们计划在研讨会召开之前完成完整语言的第一个原型。引用[1] Sensoria网页。http://www.sensoria-ist.eu。[2] S.阿乌马达湖Apvrille,T. Barros,A. Cansado,E. Madelaine和E.萨拉吉亚努使用UML开发分形和GCM组件。在智利计算机科学学会第二十六届国际会议(SCCC2007年美国电气与电子工程师协会。[3] T.巴罗斯河Boulifa,A.坎萨多湖Henrio和E.玛德琳分布式分形组件的行为模型。《电信年鉴》,接受出版,2008年。还有INRIA RR-6491研究报告。[4] T.巴罗斯河Boulifa和E.玛德琳分布式Java对象的参数化模型。在Forte2004.施普林格出版社[5] T. Barros,A. Cansado,E. Madelaine和M.里维拉分布式组件模型检测:Vercors平台。第三届组件系统的形式方面研讨会,布拉格,捷克共和国,2006年9月。ENTCS。[6] F. Baude,D.卡罗梅湖Henrio,and P. Naoumenko.组件控制器的一个可扩展模型及其实现。在CoreGRID网格编程模型研讨会上,网格和P2P系统架构,网格系统,工具和环境,第12-23页,2007年6月。CoreGRID TR-0080技术报告。[7] IBM、IONA、Oracle、SAP AG、IBM Systems和IBM。服务组件体系结构。白皮书,2005年11月。[8] E. Bruneton,T. Coupaye,M. Leclercp,V. Quema,and J. Stefani.一种开放组件模型及其在java中的支持。在第七届国际研讨会上。基于代理的软件工程(CBSE-7),LNCS 3054,2004年5月。[9] A. 坎萨多湾卡罗梅湖Henrio,E.Madelaine,M.Rivera和E.萨拉吉亚努 公共组件建模示例:比较软件组件模型,计算机科学讲义第5153卷,第A章,用于在GCM/ProA中实现的分布式组件的规范语言。 Spri nger,2008. http://agrausch.informatik. 乌尼-克尔。de/CoCoME。[10] A.坎萨多湖Henrio和E.玛德琳面向真实案例的构件模型检验。2006年7月在法国南特举行的第五届分形研讨会上[11]D. Car o m el,C. D e l b'e,A. 我是一个很好的人。 莱顿ProActive:在网格和P2P系统上编程和运行应用程序的过程中,不会产生任何数据。科学技术中的计算方法,12(1):69[12] D.卡罗梅湖Henrio和B. Serpette异步和确定性对象。在第31届ACM SIGPLAN-SIGACT专题讨论会上,编程语言的原则,第123-134页。ACM Press,2004.[13] R. Cleaveland 和 J. Riely 。 基 于 测 试 的 抽 象 值 传 递 系 统 。Int. Conference on Concurrency Theory(CONCUR),volume 836 ofLNCS,pages 417Springer,1994年。[14] A. Coglio和C.共享的一种建设性的正确性方法,以认证Java Card应用程序的生成器为例。IFIP WorkingConference on Verified Software:Tools,Techniques,and Experiments,2005年10月。[15] CoreGRID,编程模型研究所。网格组件模型的基本特征(已评估)。技术报 告 ,2006年。D.PM.04,http://www.coregrid.net/mambo/images/stories/Deliverables/d.pm.04.pdf。[16] P. 库索基于抽象解释的形式化方法和未来的挑战,邀请论文。在R. Wilhelm,编辑,Informatics - 10 Years Back,10 Years Ahead,LNCS2000卷,第138-156页。Springer-Verlag,2001.[17] M. Dwyer,J. Hatterdham,R. Joehanes,S.劳巴赫角Pasareanu,Robby,W. Visser和H.郑用于有限状态验证的工具支持的程序抽象。2001年第23届软件工程国际会议论文集A. Cansado等人/理论计算机科学电子笔记260(2010)2541[18] F. Fernandes和J. - C.罗耶STSLIB项目:基于STS的正式组件模型。在第四届组件软件形式方面国际研讨会(FACSENTCS。[19] H. Garavel,F. Lang,和R.马提斯库2001年CADP概览。欧洲软件科学与技术协会(EASST)通讯,4:13-24,8月。2002年。[20] 对象管理组。UML 2.0对象约束语言
下载后可阅读完整内容,剩余1页未读,立即下载
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)