当前位置:文档之家› 软件体系结构描述语言ADL综述_bycs

软件体系结构描述语言ADL综述_bycs

软件体系结构描述语言ADL综述Advancement of Architecture Description Language (ADL) 引言60年代的软件危机使得人们重新开始重视软件工程的研究。

最初人们选择了“算法+数据结构=程序”的设计模式。

但随着软件系统的规模和复杂性越来越大,传统的设计模式已经不能适应要求。

同时为了保证软件质量,提高软件的可靠性、可重用行和可维护性,软件设计的核心逐渐转向对系统的总体结构即软件体系结构(Software Architecture)的设计和规范。

这类方法主要着眼于软件系统的全局组织形式,在更高层次上把握系统各组件之间的内在联系。

并从全局的,整体的角度去理解和分析整个系统的行为和特性,有助于解决当前开发复杂的大型软件所存在的困难。

研究软件体系结构的首要问题是如何描述软件体系结构。

目前已有很多表现形式和方法表法、模块连接语言、软构件描述法和体系结构描述语言ADL等。

而其中ADL作为形式化的表示软件体系结构的工具呈现出强大的生命力。

它提供了规范化的体系结构描述,同时是对软件体系结构进行求精、验证、演化和分析的前提与基础。

目前已经成为软件体系结构方向的研究热点。

实践工作者将这些ADL应用于实践中,获得了成功。

同时,我们应注意到不同的ADL所支持的抽象能力及其提供的分析能力变化很大,学术领域目前对ADL的定义尚未取得一致。

一、软件体系结构的概述由于对软件体系结构的研究和应用刚刚兴起,许多专家学者从不同的角度和侧面对软件体系结构进行刻画,因此,目前软件体系结构还没有一个标准定义。

这里给出一个目前学术领域广泛接受的定义。

(D.Garlan&M Shaw,1993)软件体系结构是软件设计过程中的一个层次,在计算过程中的算法设计和数据结构之上,处理总体系统结构设计和描述方面的一些问题。

包括总体组织与全局控制结构、通讯协议、同步、数据存取、设计元素的功能分配,物理分布,设计元素的复台,设计方案的选择、评估和实现等。

二、软件体系结构描述语言ADL的概述2.1对ADL的不同理解当前在学术界对ADL 的定义尚未取得一致下面的定义大多来源于自身对某种ADL语言的开发所得到的体会。

尽管它们不免有以偏概全之赚,但还是为我们了解ADL提供了有价值的信息。

(1)在文[1]中,Tracz定义一个ADL包含4“C”:组件(components) ,连接子(connectors),配置(configurations),约束(constraint s)。

(2)根据其UniCon的经历,Shaw 与同事列出了ADI 应该展示的属性如下:1)组件建模的能力,带属性断言、接口、实现;2)连接子建模的能力,带协议、属性断言与实现;3)抽象与封装;4)类型与类型检查;5)适应分析工具的能力(3)在文[2]中,将ADL划分为4个组成部分:组件,连接子,配置、支持工具。

其中,组件、连接子、配置构成了ADL的体系结构描述特性。

而支持工具则为软件体系结构设计者提供必要的帮助。

(4)在文[3]中,Luckham 与Vera在研究Rapide的基础上提出.ADL应该满足以下要求:1)组件抽象;2)通信抽象;3)通信完整性,要求在结果实现中,只有在一个体系结构中相联结的组件可以通信;4)动态体系结构建模的能力 5)分层复合;6)相关性.或者是行为与体系结构间关联(映射)的能力;7)组件建模的能力,带属性断言、接口、实现;8)连接子建模的能力,带协议、属性断言与实现;9)抽象与封装; 10)类型与类型检查;11)适应分析工具的能力。

2.2ADL的定义从上述一小节我们可以看出,学术领域对ADL的理解还存在着分歧。

我们认为:ADL是这样一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了.具体语法与概念框架。

基于底层语义的工具为体系结构的表示、分析、进化、细化、设计过程等提供支持。

其三个基本构成元素是:1)组件——计算或数据存储单元;2)连接子——用于组件问交互建模的体系结构构造块及其支配这些交互的规则{3)体系结构配置——描述体系结构的组件与连接于的连接图。

2.3 ADL应具备的特点2.3.1为了精确描述软件体系结构,ADL首先应有一个形式化理论基础,如Pet“网、状态图、z、 CSP”等。

有了形式化理论基础,才能对所描述的系统进行分析和验证。

如Wright用CSP进行描述、Rapide采用偏序事件集合等。

2.3.2作为一种描述语言,ADL应具有严谨的语法和语义。

描述能力应足够强,至少应能描述的基本构件如组件、连接件及有关配置规范。

同时,为了更好的应用,一种ADL,应有相应的支持工具,支持工具的能力直接反映了该ADL的可使用程度和范围。

2.3.3 描述软件体系结构的一个很重要的目的是为了便于软件开发者的理解和交流,因此,ADL描述应简单易懂,最好有图表辅助理解。

对于同一个体系结构,不同的软件开发者需要从不同的抽象层次上理解,这就要求ADL能描述不同抽象程度的软件体系结构。

2.3.4分析作为软件体系结构求精、验证的基础,是一般ADL不可缺少的一种功能分析有静态分析和动态分析,如Wright基于CSP能对单个组件或连接件进行静态死锁分析、Rapide 基于偏序事件集合(partially ordered event sets)可进行动态分析。

2.3.5其他有关设计ADL应注意的问题,还有可扩展性、演化和重用等。

三、常见ADL的介绍与比较3.1常见ADL的介绍ADL是当前软件开发和设计方法学中一种发展很快的软件体系结构描述方法,目前,已经有几十种常见的AD L。

其中已经开发和使用的常见ADL有Wright、Unieon、C2、Aesop、Rapide、Darwin、SADL等。

这里我们对Unicon、C2 SADL、ACME、XADL四种给出介绍和比较。

3.1.1 UniconUniCon简介UniCon是由CMU和SEI设计的一个体系结构描述语言.该语言关注软件体系结构的结构化特性,将系统(本身也是一个复合构件)描述为构件和连接子的配置,其中构件表示计算或者数据,而连接子表示构件之间的交互.每个构件的接口都对外提供一些演员(player).构件通过这些演员与外界发生交互.与构件类似,一个连接子的协议对外提供一些角色(role),连接子通过这些角色来调解构件之间的交互.在UniCon建立连接通过演员与角色的关联,最终就可以建立整个系统各个部分之间的配置.最新版本的UniCon不仅支持类似于上例的管道-过滤器系统,还支持使用过程调用和共享数据的模块交互系统,基于RPC调用的分布式系统,根据各种实时要求共享处理器的进程以及基于SQL命令的数据库访问.UniCon的提出是为了达到如下目的:1.解决系统描述和组装的实际问题,为实际工具提供一个原型;2.为各种连接机制提供一个一致的访问方式;3.帮助软件设计师区分不同的构件类型和连接子类型并验证构件和连接子配置的正确性;4.支持图形化和文本化符号以及二者之间的互换;5.兼容现存的用常见的编程语言编写的构件(这些构件并不需要特定于UniCon);6.尽可能的将运行时开销降到最低;以下将具体介绍UniCon中构件和连接子的定义.UniCon中的构件UniCon中的构件定义包括规约部分和实现部分.构件的规约称为构件的接口(interface).接口定义了构件所能进行的计算以及使用构件必须遵循的约束.构件的接口包含三类信息:1.构件类型:构件类型表示构件提供的功能的类型,它限制了该构件所能定义的演员的数量,类型和规约.2.特性:由属性和值组成的二元组,用于指定与构件整体相关的附加信息,例如断言,约束等.3.演员:从构件外部可见的语义单元,构件通过演员与其它构件发生交互. 构件的实现有两种形式:1.原子(primitive)实现:原子实现是一个指向存在于UniCon语言外部的文档链接,该文档包含了相应的构件实现.它可能是某种编程语言的源代码(目前UniCon工具集仅仅支持C语言的源代码),也可以是目标码,或者是包含目标码的Unix档案库文件,或者是二进制可执行文件,shell脚本,数据文件,C 语言的include文件等2.复合(composite)实现:某个UniCon构件的复合实现是对其它已定义的构件和连接子的配置的描述,该实现包含三类信息:1.片段(piece):用于构造某个配置的构件和连接子实例2.配置信息:描述构件和连接子的关联3.抽象信息:描述该构件的接口如何由其复合实现中的构件接口实现.构件实现的语法如下:UniCon中的连接子连接子的定义也包含规约和实现两个部分,其中规约部分通过协议(protocol)进行描述.连接子的协议定义了构件之间允许产生的交互,并确保这些交互能够顺利进行.连接子的协议包含三类信息:1.连接子类型:连接子类型表示连接子所能调解的构件之间的交互类型,它限制了连接子的角色的数量,类型和规约.2.特性:由属性和值组成的二元组,用于指定和连接子整体相关的附加信息,例如断言,约束等(例如和时间和顺序相关的规则)3.角色:从连接子外部可见的语义单元,通过角色连接子对构件的交互进行调解.角色通过与演员发生关联,从而形成系统的连接,它定义了参与连接的演员的需求与责任.连接子的实现是UniCon内置的,即UniCon只支持连接子的原子实现,它本身不提供用户自定义连接子实现的机制.连接子的定义的语法如下(从中也可以看出UniCon目前支持的连接子实现的类型):UniCon是最早的体系结构描述语言之一.从上述介绍可以看出,UniCon强调将系统划分为构件后,用适当的连接子将其组装起来构成一个完整的系统.构件和连接子之间是松耦合关系.UniCon备受诟病的一点是它只支持预定义的连接子,并且不支持复合连接子.为了解决这个问题,相关研究人员在UniCon的基础上对其进行了增强.增强后的UniCon称为UniCon-2.UniCon-2提供了一个比较灵活的类型系统,并且引入了责任(duty)这个概念用于描述演员,角色等与属性的关系.某个系统配置的责任还可以用于描述体系结构风格.由于UniCon-2允许用户引入新类型,为了便于对与新类型相关的约束进行检查,UniCon-2采用了一种开放的编译器结构以便于增加相应的检测方法.3.1.2 C2 SADLC2 SADL是UCI设计的一种基于消息传递的体系结构描述语言,主要用于描述符合C2风格的软件系统的体系结构.C2风格C2风格是一种基于构件和消息的体系结构风格,主要是应用于带有图形用户接口(GUI)的应用系统,但也能用于其它类型的应用.这种风格要求构件之间通过消息交换进行通信.因此每个C2构件和C2连接子都有一个top接口和一个bottom接口,其中top接口定义了该构件所能接收的应答消息和向上发出的请求消息,而bottom接口定义了该构件能够进行应答的请求消息及其向下发出的应答.所有消息都以连接子为桥梁在构件之间进行传递.这种风格的体系结构将系统中的构件用连接子划分为不同层次,.C2风格的体系结构:可视化堆栈(Stack)C2风格的核心在于构件之间的"有限可见性",即处于系统中某个层次的构件只能"看到"上层的构件,而不清楚下层到底是什么构件在与之进行通信.具体表现在如下所述的构件之间的通信规则(即系统的组装规则):1.构件的top接口只可能与某一个连接子的bottom接口相连2.构件的bottom接口只可能与某一个连接子的top接口相连3.与连接子相连的构件或者连接子没有数量限制4.两个连接子相连时,只能是其中一个的bottom接口与另一个的top接口相连C2 SADLC2 SADL目前还只是一个原型语言,其相应的支撑工具还在开发中.该语言包含三个部分:接口定义符号(IDN, interface definition notation):是C2中的构件接口的规约.如下所示是一个堆栈(Stack)构件的C2 IDN.体系结构描述符号(ADN,architecture description notation):是C2体系结构的声明性规约.体系结构构造符号(ACN,architecture construction notation):主要用于表达体系结构的动态变化,例如如果要在运行时删除堆栈的一种可视化表示方式,可以用ACN进行如下描述:C2 SADL中的连接子本质上是一种消息总线,复合这种结构的应用系统往往具有比较良好的灵活性和可扩展性.不过由于C2 SADL还没有针对大型实际系统进行建模和使用,因此对使用该结构所可能导致的性能问题还不是很明确.3.1.3基于XML消息的体系结构描述语言XADL体系结构描述语言XADL的基础是一种基于消息的体系结构模型, 即构件通过端口接收请求消息和发送响应消息构件之间通过端口的连接进行消息交换, 从而组合为复合构件或应用系统因此, 中包含了对构件接口的描述和对系统组合的描述,第1.1节和1.2节分别介绍了这两部分内容, 第1.3节给出了完整的例子.3.1.3.1构件借口描述在XADL中构件通过端口接收和发送消息,端口,分为输入端口和输出端口,分别用来接收请求消息和发送响应消息。

相关主题