【软件体系结构】软件体系结构描述

1. 软件体系结构描述方法

1.1 图形表达工具

对于软件体系结构的描述和表达,一种简洁易懂且使用广泛的方法是采用由矩形框和有向线段组合而成的图形表达工具。

  • 在这种方法中,矩形框代表抽象构件,框内标注的文字为抽象构件的名称,有向线段代表辅助各构件进行通信、控制或关联的连接件

目前,这种图形表达工具在软件设计中占据着主导地位。尽管由于在术语和表达语义上存在着一些不规范和不精确,而使得以矩形框与线段为基础的传统图形表达方法在不同系统和不同文档之间有着许多不一致甚至矛盾,但该方法仍然以其简洁易用的特点在实际的设计和开发工作中被广泛使用,并为工作人员传递了大量重要的体系结构思想。

为了克服传统图形表达方法中所缺乏的语义特征,有关研究人员试图通过增加含有语义的图元素的方式来开发图文法理论。

1.2 模块内连接语言

软件体系结构的第二种描述和表达方法是采用将一种或几种传统程序设计语言的模块连接起来的模块内连接语言(Module Interconnection Language,MIL)。

由于程序设计语言和模块内连接语言具有严格的语义基础,因此它们能支持对较大的软件单元进行描述,诸如定义/使用、扇入/扇出等操作。

例如,Ada语言采用use 实现包的重用,Pascal语言采用过程(函数)模块的交互等。

MIL方式对模块化的程序设计和分段编译等程序设计与开发技术确实发挥了很大的作用。但是这些语言处理和描述的软件设计开发层次过于依赖程序设计语言,因此限制了它们处理和描述比程序设计语言元素更为抽象的高层次软件体系结构元素的能力。

1.3 基于软构件的系统描述语言

基于软构件的系统描述语言将软件系统描述成一种是由许多以特定形式相互作用的特殊软件实体构造组成的组织或系统。

例如,一种多变配置语言就可以用来在一个较高的抽象层次上对系统的体系结构建模,Darwin最初用作设计和构造复杂分布式系统的配置说明语言,因具有动态特性,也可用来描述动态体系结构。

这种表达和描述方式虽然也是较好的一种以构件为单位的软件系统描述方法,但是他们所面向和针对的系统元素仍然是一些层次较低的以程序设计为基础的通信协作软件实体单元,而且这些语言所描述和表达的系统一般而言都是面向特定应用的特殊系统,这些特性使得基于软构件的系统描述仍然不是十分适合软件体系结构的描述和表达。

1.4 软件体系结构描述语言

软件体系结构的第四种描述和表达方法是参照传统程序设计语言的设计和开发经验,重新设计、开发和使用针对软件体系结构特点的专门的软件体系结构描述语言。

由于ADL是在吸收了传统程序设计中的语义严格精确的特点基础上,针对软件体系结构的整体性和抽象性特点,定义和确定适合于软件体系结构表达与描述的有关抽象元素,因此,ADL是当前软件开发和设计方法学中一种发展很快的软件体系结构描述方法,目前,已经有几十种常见的ADL。

2. 软件体系结构描述框架标准

2.1 IEEE P1471

  • IEEE P1471于2000年9月21日通过IEEE-SA标准委员会评审。

  • IEEE P1471适用于软件密集的系统,其目标在于:便于体系结构的表达与交流,并通过体系结构要素及其实践标准化,奠定质量与成本的基础。

  • IEEE P1471详细介绍了一套体系结构描述的概念框架,并给出建立框架的思路。但如何描述以及具体的描述技术等方面缺乏更进一步的指导。

2.2 Rational

  • Rational起草了可重用的软件资产规格说明,专门讨论了体系结构描述的规格说明,提出了一套易于重用的体系结构描述规范。该建议草案已经提交OMG。

  • 基于RUP(Rational United Process)、采用UML模型描述软件的体系结构,认为体系结构描述的关键是定义视点、视图以及建模元素之间的映射关系。

  • 与IEEE P1471相比,该建议标准的体系结构描述方案涉及面比较窄,所注重的层次比较低,因而更具体。由于将体系结构的描述限于UML和RUP,具有一定的局限性,但该建议标准结合了业界已经广泛采用的建模语言和开发过程,因而易于推广,可以有效实现在跨组织之间重用体系结构描述结果。

3. 体系结构描述语言

ADL是这样一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。基于底层语义的工具为体系结构的表示、分析、演化、细化、设计过程等提供支持。其三个基本元素如下:

  • 构件:计算或数据存储单元。

  • 连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则。

  • 体系结构配置:描述体系结构的构件与连接件的连接图。

主要的体系结构描述语言有Aesop、MetaH、C2、Rapide、SADL、Unicon、Wright等,尽管它们都描述软件体系结构,却有不同的特点。

  • Aesop支持体系结构风格的应用;

  • MetaH为设计师提供了关于实时电子控制软件系统的设计指导;

  • C2支持基于消息传递风格的用户面系统的描述;

  • Rapide支持体系结构设计的模拟并提供了分析模拟结果的工具;

  • SADL提供了关于体系结构加细的形式化基础;

  • Unicon支持异构的构件和连接类型并提供了关于本系结构的高层编译器;

  • Wright支持体系结构构件之间交互的说明和分析。

这些ADL强了体系结构不同的侧面,对体系结构的研究和应用起到了重要的作用,但也有负面的影响。每一种ADL都以独立的形式存在,描述语法不同且互不兼容,同时又有许多共同的特征,这使设计人员很难选择一种合适的ADL,若设计特定领域的软件体系结构又需要从头开始描述。

3.1 ADL与其他语言的比较

  • 构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统;

  • 抽象能力:ADL使得软件体系结构中的构件和连接件描述可以只关注它们的抽象特性,而不管其具体的实现细节;

  • 重用能力:ADL使得组成软件系统的构件、连接件甚至是软件体系结构都成为软件系统开发和设计的可重用部件;

  • 组合能力:ADL使得其描述的每一系统元素都有其自己的局部结构,这种描述局部结构的特点使得ADL支持软件系统的动态变化组合;

  • 异构能力:ADL允许多个不同的体系结构描述关联存在;

  • 分析和推理能力:ADL允许对其描述的体系结构进行多种不同的性能和功能上的多种推理分析。

3.2 ADL的构成要素

构件:

  • 构件是一个计算单元或数据存储。也就是说,构件是计算与状态存在的场所。

  • 在体系结构中,一个构件可能小到只有一个过程或大到整个应用程序。它可以要求自己的数据与或执行空间,也可以与其他构件共享这些空间。

  • 作为软件体系结构构造块的构件,其自身也包含多种属性,如接口、类型、语义、约束、演化和非功能属性等。

  • 接口是构件与外部世界的一组交互点。与面向对象方法中的类说明相同,ADL中的构件接口说明了构件提供的服务(消息、操作、变量)。

  • 为了能够充分地推断构件及包含它的体结构,ADL提供了能够说明构件所需的工具。这样,接口就定义了构件能够提出的计算委托及其用途上的约束。

  • 构件作为一个封装的实体,只能通过其接口与外部环境交互。

  • 构件的接口由一组端口组成,每个端口表示了构件和外部环境的交互点。通过不同的端口类型,一个构件可以提供多重接口。一个端口可以非常简单,如过程调用;也可以表示更为复杂的界面,如必须以某种顺序调用的一组过程调用。

  • 构件类型是实现构件重用的手段。构件类型保证了构件能够在体系结构描述中多次实例化,并且每个实例可以对应于构件的不同实现。抽象构件类型也可以参数化,进一步促进重用。

  • 现有的ADL都将构件类型与实例区分开来。由于基于体系结构开发的系统大都是大型、长时间运行的系统,因而系统的演化能力显得格外重要。

  • 构件的演化能力是系统演化的基础。ADL通过构件的子类型及其特性的细化来支持演化过程。目前,只有少数几种ADL部分地支持演化,对演化的支持程度通常依浈于所选择的程序设计语言。其他ADL将构件模型看作静态的。

连接件:

  • 连接件是用来建立构件间的交互以及支配这些交互规则的体系结构构造模块。

  • 与构件不同连,接件可以不与实现系统中的编译单元对应。它们可能以兼容消息路由设备实现(如C2),也可以以共享变量、表入口、缓冲区、对连接器的指令、动态数据结构、内嵌在代码中的过程调用序列、初始化参数、客户服务协议、管道、数据库、应用程序之间的SQL语句等形式出现。

  • 大多数ADL将连接件作为第一类实体,也有ADL不将连接件作为第一类实体。

  • 连接件作为建模软件体系结构的主要实体,同样也有接口。连接件的接口由一组角色组成,连接件的每一个角色定义了该连接件表示的交互参与者;二元连接有两个角色,如消息传递连接件的角色是发送者和接收者;有的连接件有多于两个的角色,如事件广播有一 个事件发布者角色和任意多个事件接收者角色。

  • 连接件的接口是一组它与所连接构件之间的交互点。为了保证体系结构中的构件连接以及它们之间的通信正确,连接件应该导出所期待的服务作为它的接口。它能够推导出软件体系结构的形成情况。

  • 体系结构配置中要求构件端口与连接件角色的显式连接。体系结构级的通信需要用复杂协议来表达。为了抽象这些协议并使之能够重用,ADL应该将连接件构造为类型。

  • 构造连接件特性可以将作为用通信协议定义的类型系统化并独立于实现,或者作为内嵌的、基于它们的实现机制的枚举类型。

  • 为完成对构件接口的有用分析,保证跨体系结构抽象层的细化一致性,强调互联与通信约束等,体系结构描述提供了连接件协议以及变换语法。

  • 为了确保执行计划的交互协议,,建立内部连接件依赖关系,强制用途边界,就必须说明连接件约束。ADL可以通过强制风格不变性来实现约束,或通过接受属性限制给定角色中的服务。

体系结构配置:

  • 体系结构配置或拓扑是描述体系结构的构件与连接件的连接图。

  • 体系结构配置提供信息来确定构件是否正确连接、接口是否匹配、连接件构成的通信是否正确,并说明实现要求行为的组合语义。

体系结构适合于描述大的、生命周期长的系统,利用配置支持系统的变化,使不同技术人员都能理解并熟悉系统。为帮助开发人员在一个较高的抽象层上理解系统,就需要对软件体系结构进行说明

为了使开发者与有关人员之间的交流容易些,ADL必须以简单的、可理解的语法来配置结构化信息。理想的情况是从配置说明中澄清系统结构,即不需研究构件与连接件就能使构建系统的各种参与者理解系统。体系结构配置说明除文本形式外,有些ADL还提供了图形说明形式。文本描述与图形描述可以互换。多视图、多场景的体系结构说明方法在最新的研究中得到了明显的加强。

为了在不同细节层次上描述软件系统,ADL将整个体系结构作为另一个较大系统的单个构件。也就是说,体系结构具有复合或等级复合的特性。另外,体系结构配置支持采用异构构件与连接件。这是因为软件体系结构的目的之一是促进大规模系统的开发,即倾向于使已有的构件与不同粒度的连接件进行连接和组装,这些构件与连接件的设计者、形式模型、开发者、编程语言、操作系统、通信协议可能都不相同。另外一个事实是,大型的、长期运行的系统是在不断增长的。因而,ADL必须支持可能增长的系统的说明与开发。大多数ADL提供了复合特性,所以,任意尺度的配置都可以相对简捷地在足够的抽象高度表示出来。

体系结构设计是整个软件生命周期中关键的一环,一般在需求分析之后,软件设计之前进行。而形式化的、规范化的体系结构描述对于体系结构的设计和理解都是非常重要的。因此,ADL如何能够承上启下是十分重要的问题,一方面是体系结构描述如何向其他文档转移,另一方面是如何利用需求分析成果直接生成系统的体系结构说明。

现有的ADL大多与领域相关,这不利于对不同领域体系结构的说明。针对不同领域的ADL在某些方面大同小异,造成了资源的冗余。有些ADL可以实现构件与连接件的演化,这样的演化大多是通过子类型实现的,但这样的演化能力是有限的,系统级的演化能力才是最终目的。尽管现有的ADL都提供了支持工具集,但将这些ADL与工具应用于实际系统开发中的成功范例有限;支持工具的可用性与有效性较差,严重地阻碍了这些ADL的广泛应用。

4. 典型的软件体系结构描述语言

4.1 UniCon

作为一种体系结构描述语言,UniCon的主要目的在于支持对体系结构的描述,对构件交互模式进行定位和编,并且对需要不同交互模式的构件的打包加以区分。具体地说,UniCon 及其支持工具的主要目的如下。

  1. 提供对大量构件和连接件的统一的访问。

  2. 区分不同类型的构件和连接件,以便对体系结构配置进行检查,

  3. 支持不同的表示方式和不同开发人员的分析工具。

  4. 支持对现有构件的使用。

在UniCon中,通过定义类型、特性列表与用于和连接件相连的交互点来描述构件。连接件也是通过类型、特性列表和交互点来描述。其中,构件的交互点称为端口,连接件的交互点称为角色。系统组合构造通过定义构件的端口和连接件的角色之间的连接来完成。

  • 为了达到目标(1),UniCon提供了一组预先定义的构件和连接件类型,体系结构的开发者可以从中选择合适的构件或连接件。

  • 对于(2),UniCon区分所有类型的构件和连接件的交互点,并对它们的组合方式进行限制。根据这些限制,UniCon工具可以提供对组合失配进行检查,但是这种检查带有局部性,即无法对系统的全局约束进行检查。

  • 目标(3)的重要性已经获得公认,特性列表的方法已经被ACME和USC开发的Architecture Capture Tool采纳。

  • 对于已有构件,通过利用UniCon的术语对其接口重新定义,使得它们可以被UniCon 使用。

4.2 Wright

Wright 支持对构件之间交互的形式化和分析。

连接件通过协议来定义,而协议刻画了与连接件相连的构件的行为。对连接件角色的描述表明了对参与交互的构件的“期望”以及实际的交互进行过程。构件通过其端口和行为来定义,表明了端口之间是如何通过构件的行为而具有相关性的。一旦构件和连接件的实例被声明,系统组合便可以通过构件的端口和连接件的角色之间的连接来完成。

Wright的主要特点为:

  • 对体系结构和抽象行为的精确描述、定义体系结构风格的能力和一组对体系结构描述进行一致性和完整性的检查。

  • 体系结构通过构件、连接件以及它们之间的组合来描述,抽象行为通过构件的行为和连接件的胶水来描述。

在Wright中,对体系结构风格的定义是通过描述能在该风格中使用的构件和连接件以及刻画如何将它们组合成一个系统的一组约束来完成的。因此,Wright能够支持针对某一特定体系结构风格所进行的检查。但是,它不支持针对异构风格组成的系统的检查。

Wright提供的一致性和完整性检査有:端口行为一致性、连接件死锁,角色死锁、端口-角色相容性、风格约束满足、胶水完整性等。

4.3 C2

C2和其提供的设计环境(Argo)支持采用基于时间的风格来描述用户界面系统,并支持使用可替换、可重用的构件开发GUI的体系结构。

其工作的重点在于对构件的重用,以及对运行时体系结构的动态改变以使系统满足某些GUI体系结构方面的特性。

C2中,连接件负责构件之间消息的传递,而构件维持状态、执行操作并通过两个名字分别为top和bottom的端口和其他的构件交换信息。每个接口包含一种可发送的消息和一组可接收的消息。

构件之间的消息要么是请求其他构件执行某个操作的请求消息,要么是通知其他构件自身执行了某个操作或状态发生改变的通知消息。构件之间的消息交换不能直接进行,只能通过连接件来完成。

每个构件接口最多只能和一个连接件相连,而连接件可以和任意数目的构件或连接件相连。请求消息只能向上层传送,通知消息只能向下层传送。

C2要求通知消息的传递只对应于构件内部的操作,和接收消息的构件的需求无关。这种对通知消息的约束保证了底层独立性,即可以在包含不同的底层构件(如不同的窗口系统)的体系结构中重用C2构件。

C2对构件和连接件的实现语言、实现构件的线程控制、构件的部署、连接件使用的通信协议等都不加限制。

4.4 Rapide

Rapide 是一种可执行的ADL,其目的在于通过定义并模拟基于事件的行为对分布式并发系统建模。

它通过事件的偏序(partial order)集合来刻画系统的行为。构件计算由构件接收到的事件触发,并进一步产生事件传送到其他构件,由此触发其他计算。

Rapide模型的执行结果为一个事件的集合,其中的事件满足一定的因果或时序关系。

Rapide由5种子语言构成:

  1. 类型语言:定义接口类型和函数类型,支持通过继承已有的接口来构造新的接口类型。

  2. 模式语言:定义具有因果、独立、时序等关系的事件所构成的事件模式

  3. 可执行语言:包含描述构件行为的控制结构。

  4. 体系结构语言:通过定义同步和通信连接来描述构件之间的事件流。

  5. 约束语言:定义构件行为和体系结构所满足的形式化约束,其中约束为需要的或禁止的偏序集模式。

Rapide的优点在于能够提供多种分析工具。它所支持的分析都基于检测在某个模拟过程中的事件是否违反了某种次序关系。

Rapide允许仅基于接口面定义体系结构,把利用具有特定行为的构件对接口的替换留到开发的下一个阶段。

因此,开发者可以在某个体系结构中使用尚未存在的构件,只要该构件符合特定的接口即可。

4.5 SADL

SADL的工作基于如下假设:

  • 大型软件系统的体系结构是通过一组相关的具有层次化的体系结构来描述的,其中高层是低层的抽象它们具有不同数量和种类的构件和连接件。如果这种层次化和结构缺少正规的描述方法,则求精过程就容易出错。

在SADL中,提出了能够保证正确性和具有可组合性的体系结构求精模式的概念,使用求精模式的实例能够保证每一步求精过程的正确性。

采用该方法能够有效地减少体系结构设计的错误,并且能够广泛地、系统地实现对设计领域的知识和正确性证明的重用。

为了证明两个体系结构在求精意义上的正确性,必须建立它们之间的解释映射。

  • 解释映射包含一个名字映射和一个风格映射。

  • 名字映射建立抽象体系结构中的对象的名字和具体体系结构中的对象的名字之间的关系。

  • 风格映射描述抽象层次中风格的构造是如何使用具体层次风格的构造中的术语来实现的。

  • 风格映射将会比较复杂,但是它只需要定义并证明一次,便能够在任何需要的时候被安全地重用。

4.6 Aesop

Aesop是由美国卡耐基-梅隆大学的Garlan等人创建的一门体系结构描述语言、其目的是建立一个工具包,为领城特定的体系结构快速构建软件体系结构设计环境。

每个环境都支持以下5个方面:

  1. 与风格词汇表相对应的一系列设计元素类型,即特定风格的构件和连接件。

  2. 检查设计元素的成分,满足风格的配置约束。

  3. 优化设计元素的语义描述。

  4. 一个允许外部工具进行分析和操作体系结构描述的接口。

  5. 多个风格特定的体系结构的可视化,以及操作它们的图形编辑工具。

Aesop采用了产生式方法,该方法构建在已有的软件开发环境技术上。Aesop把一个/组风格描述与一个普遍使用的、共享的工具包联系在一起,该工具包称作Fable。

4.7 ACME

ACME也是由美国卡耐基梅隆大学的Garlan等人创建的一门体系结构描述语言,其最初目的是创建一门简单的、具有一般性的ADL,该ADL能用来为体系结构设计工具转换形式和/或为开发新的设计和分析工具提供基础。

因此,严格说来,ACME并不是一种真正意义上的ADL,而是一种体系结构变换语言,它提供了一种在不同ADL的体系结构规范描述之间实现变换的机制。因此,虽然ACME没有支持工具,但却能够使用各种 ADL,提供的支持工具。

ACME提供了描述体系结构的结构特性的方法,此外还提供了一种开放式的语义框架,使得可以在结构特性上标注一些ADL相关的属性。这种方法使得ACME既能表示大多数 ADL都能描述的公共的结构信息,又能使用注解来表示与特定的ADL相关的信息。有了这种公共又灵活的表示方法,再加上ADL之间关于属性的语义转换工具,就能顺利地实现 ADL 之间的变换,从而使ADL之间能够实现分析方法和工具的共享。

ACME支持从4个不同的方面对软件体系结构进行描述,分别是结构、属性、设计约束、类型和风格

结构:

在ACME中定义了7种体系结构实体,分别是构件、连接件、系统、端口、角色、表述(representations)和表述映射(map)

为了支持体系结构的分级描述,ACME允许任何一个构件或连接件由一个或多个更详细的、低级的描述代表,称每个这样的代表为一个表述(representation)

当构件或连接件有一个体系结构表述时,必须由某些方式表明在内部系统表述和所表述的构件或连接件的外部接口之间的通信。表述映射就定义了这种通信。在最简单的情况下表述映射提供了在内部端口和外部端口(对连接件而言,是内部角色和外部角色)之间的关联。

属性:

ACME定义的7类体系结构实体足以定义一个体系结构的组织,对结构的清晰描述有利于系统的文档化。然而,记录一个系统的体系结构的非结构属性取决于系统的特性、所需要的分析种类、可以获得的工具和在描述中所包括的详细程度。

为了为说明辅助信息提供开放性需求,ACME支持使用任意的属性列表对体系结构的结构进行注释。

每个属性有名称、可选类型和值。ACME定义的7类设计元素都可以用属性列表进行注释。属性可用来记录与体系结构相关分析和设计的细节。

设计约束:

设计约束(design constraints)是体系结构描述的关键成分,它们决定体系结构设计是如何演化的。

设计约束可以当作一种特殊的属性,但因为在体系结构中,设计约束起着核心作用,所以,ACME提供了特定的语法来描述设计约束。

ACME使用基于一阶谓词逻辑(First Order Predicate Logic,FOPL)的约束语言来描述设计约束,在体系结构规格说明中,约束被当作谓词。

约束语言包括标准的FOPL集合,同时还包含一些体系结构方面的特殊函数。

类型和风格: 体系结构描述的一个重要能力是能够定义系统的风格或族,风格允许设计师定义领域特定的或应用特定(application-specific)的设计词汇(vocabulary),以及如何使用这些词汇的约束。支持对领域特定的设计经验的打包(package)、特定目的的分析和代码生成工具的使用、设计过程的简化、与体系结构标准一致性的检查等。

在ACME中,定义风格的基本构造块是一个类型系统,类型系统可用来封装循环结构和关系。设计师可定义3种类型,分别是属性类型、结构类型和风格

  • 属性类型

  • 结构类型 结构类型使定义构件、连接件、端口和角色的类型变得可能,每一个这样的类型提供了一个类型名称和一个所需要的子结构、属性和约束的列表。

  • 风格 在ACME中,风格被称为族(family),就好像结构类型代表一组结构元素一样,族代表-组系统。在ACME中,可通过指定3件事情来定义一个族,分别是一组属性和结构元素-组约束,以及默认结构

    • 属性类型和结构类型为族提供了设计词汇;

    • 约束决定了如何使用这些类型的实例;

    • 默认结构描述了必须出现在族中任何系统中的实例的最小集合。

ADL的共同目的都是以构件和连接件的方式描述软件体系结构,不同的只是底层的语法和语义。

目前的ADL基本上都满足必需的语言标准,尤其是重用的重要性。为了更好地使用ADL,通常需要一个配套的开发环境。这类环境通常提供以下工具:创建和浏览设计的图形化编辑器、体系结构一致性检查、代码生成器、模式仓储等。

5. 补充

  • 软件体系结构描述方法和体系结构描述标准是形式化的基础,简要说明有哪些软件体系结构描述方法和描述标准。

    软件体系结构描述方法和描述标准的出现和应用,对于提高软件体系结构的设计质量、规划和管理质量具有重要作用。以下是对软件体系结构描述方法和描述标准的简要说明:

    一、软件体系结构描述方法

    1. 图形表达工具

      • 这种方法采用由矩形框和有向线段组合而成的图形来表达软件体系结构。

      • 矩形框代表抽象构件,即有特定功能和属性的软件单元;有向线段则代表连接件,即辅助各构件进行通信、控制或关联的连接元素。

    2. 模块内连接语言(MIL)

      • 这种语言通过一种或几种传统程序设计语言的模块连接来描述软件体系结构。

      • 程序设计语言和模块内连接语言具有严格的语义基础,能够支持对较大的软件单元进行描述,但由于其处理和描述的层次过于依赖程序设计语言,因此限制了其描述比程序设计语言元素更为抽象的高层次软件体系结构元素的能力。

    3. 基于软构件的系统描述语言

      • 这种方法将软件系统描述为由许多以特定形式相互作用的特殊软件实体(即软构件)构造组成的组织或系统。

      • 它能够在较高的抽象层次上对系统的体系结构进行建模,但所面向和针对的系统元素仍然是一些层次较低的、以程序设计为基础的通信协作软件实体单元,且所描述和表达的系统一般而言都是面向特定应用的特殊系统。

    4. 软件体系结构描述语言(ADL)

      • ADL是在吸收了传统程序设计中的语义严格精确的特点基础上,针对软件体系结构的整体性和抽象性特点,定义和确定适合于软件体系结构表达与描述的有关抽象元素。

      • ADL为软件系统的概念体系结构建模提供了具体语法和概念框架,能够使用较小的独立体系结构元素来建造大型软件系统。

      • ADL的主要元素包括构件(计算或数据存储单元)、连接件(用于构件之间交互建模的体系结构构造块及其支配这些交互的规则)以及体系结构配置。

      • ADL具有强大的构造能力、抽象能力、重用能力、组合能力、异构能力以及分析和推理能力,是当前软件开发和设计方法学中一种发展很快的软件体系结构描述方法。

    二、软件体系结构描述标准

    1. IEEE P1471

      • IEEE P1471适用于软件密集的系统,其目标在于便于体系结构的表达与交流,并通过体系结构要素及其实践标准化,奠定质量与成本的基础。

      • 它详细介绍了一套体系结构描述的概念框架,并给出了建立框架的思路,但在如何描述以及具体的描述技术等方面缺乏更进一步的指导。

    2. Rational建议标准

      • Rational起草了可重用的软件资产规格说明,专门讨论了体系结构描述的规格说明,提出了一套易于重用的体系结构描述规范。

      • 与IEEE P1471相比,该建议标准的体系结构描述方案涉及面比较窄,所注重的层次比较低,因而更具体。

      • 由于将体系结构的描述限于UML(统一建模语言)和RUP(Rational Unified Process,统一软件过程),具有一定的局限性,但该建议标准结合了业界已经广泛采用的建模语言和开发过程,因而易于推广,可以有效实现在跨组织之间重用体系结构描述结果。

    3. ISO/IEC/IEEE 42010

      • ISO/IEC/IEEE 42010是一套国际标准,用于建模和描述系统与软件体系结构的标准。

      • 该标准规定了软件体系结构的描述内容、描述方法和描述格式,能够帮助软件工程师更好地描述和分析软件体系结构。

    4. SEI软件体系结构描述标准

      • 软件工程研究所(SEI)制定了一套软件体系结构描述标准,用于规范软件体系结构的描述和分析。

      • 该标准包括了对软件体系结构视图、视图之间的关系和变化管理等内容的规定,能够帮助软件工程师更加清晰和系统地描述和分析软件体系结构。

    5. TOGAF

      • TOGAF(开放式组织架构框架)是一套用于企业架构设计和管理的标准化方法论。

      • 它包括了对企业和软件系统架构描述的一系列标准和规范,能够帮助软件工程师更好地规划和管理软件体系结构。

    综上所述,软件体系结构描述方法和描述标准是软件工程领域中非常重要的一部分。通过采用合适的软件体系结构描述方法和描述标准,能够帮助软件工程师更好地理解和分析软件系统,提高软件系统的质量和可维护性。

  • 典型的软件体系结构描述语言包括哪些?它们分别需要描述体系结构中的哪些基本元素?

    典型的软件体系结构描述语言(ADL)主要包括Aesop、MetaH、Rapide、C2、SADL、Unicon、Wright等。这些语言在描述软件体系结构时,通常会涵盖以下基本元素:

    一、构件(Component)

    • 定义:构件是包含特定逻辑的计算或数据存储单元,是软件体系结构中的基本构建块。

    • 描述内容:构件通常包括其功能、属性、接口以及与其他构件的交互方式等。

    二、连接件(Connector)

    • 定义:连接件用于建立构件之间交互的规则和机制,是软件体系结构中的通信和协作单元。

    • 描述内容:连接件通常包括其类型(如消息传递、共享内存等)、交互协议、通信方式以及与其他连接件和构件的连接关系等。

    三、体系结构配置(Configuration)

    • 定义:体系结构配置描述了构件与连接件的连接图,即软件体系结构的整体布局和连接方式。

    • 描述内容:体系结构配置通常包括构件和连接件的排列方式、层次结构、依赖关系以及交互路径等。

    以下是对部分典型软件体系结构描述语言的进一步说明:

    • Aesop:由卡耐基梅隆大学创建,旨在快速构建特定领域的软件体系结构设计环境。Aesop支持多种体系结构的应用,并提供了一个工具包来支持这一过程。

    • Rapide:提供了分析模拟结果的工具,并支持体系结构设计的模拟。Rapide能够帮助开发者在设计过程中发现潜在的问题,并进行相应的优化。

    • MetaH:为设计者提供了关于实时电子控制软件系统的设计指导。MetaH特别适用于需要高实时性和可靠性的系统。

    • C2:支持基于消息传递风格的用户界面系统的描述,重点在于对构件的重用。C2提供了一个设计环境(如Argo),使开发者能够方便地重用构件并动态改变运行时体系结构以满足特定的GUI体系结构特性。

    • SADL:提供了体系结构基础的形式化,并定义了求精模式的体系结构概念。SADL能够减少体系结构总体设计的错误率,并系统地、广泛地实现对设计领域知识的正确性重用。

    综上所述,典型的软件体系结构描述语言通过描述构件、连接件和体系结构配置等基本元素,来全面、准确地表达软件体系结构。这些语言在软件工程领域具有重要的应用价值,能够帮助开发者更好地理解和分析软件系统,提高软件系统的质量和可维护性。

  • 任选几种常用的ADL,对同一个简单系统的体系结构或其中一个部分进行描述,并对所做出的ADL描述结果加以对比。

    以下是对几种常用的ADL(软件体系结构描述语言)的描述,以及它们对同一个简单系统的体系结构(或其中一个部分)的描述对比。为了简化说明,我们选择了一个基于C2风格的简单报警系统作为示例。

    一、C2语言描述

    C2是一种基于面向对象的ADL,它使用面向对象的概念来描述软件体系结构。在C2中,系统被看作是由构件和连接件组成的层次网络系统。

    描述

    • 构件:包括报警服务构件(AlarmService)、设备监控构件(DevMonitor)、电压暂降监控构件(SagMonitor)等。

    • 连接件:负责消息的路由和广播,将构件之间的请求和通知消息进行传递。

    • 层次结构:报警服务构件在最顶层,负责触发设备状态监控和电压暂降监测请求;设备监控构件和电压暂降监控构件在下层,负责具体的监控和报警功能。

    特点

    • C2风格的特点是下层向上层请求服务,因此系统C2架构往往是数据接口构件在最顶层,而页面请求构件在最下层。

    • C2支持灵活的构件重组和扩展,方便系统的维护和升级。

    二、Rapide语言描述

    Rapide是一种基于事件驱动的ADL,它使用事件来描述软件体系结构。Rapide的核心概念包括事件、处理器和连接器等。

    描述

    • 事件:如设备状态异常事件、电压暂降事件等。

    • 处理器:对应于各个构件,如设备监控处理器、电压暂降监控处理器等,负责处理相应的事件。

    • 连接器:负责将事件从处理器传递到相应的处理单元。

    特点

    • Rapide支持基于事件的模拟和分析,能够方便地模拟系统的运行过程并发现潜在的问题。

    • Rapide的描述方式直观且易于理解,但可能不如C2那样灵活和可扩展。

    三、SADL语言描述

    SADL是一种基于语义的ADL,它使用语义模型来描述软件体系结构。SADL的语义模型包括概念、关系和属性等。

    描述

    • 概念:如构件、连接件、事件、处理器等。

    • 关系:定义了构件之间的连接关系、事件与处理器之间的触发关系等。

    • 属性:描述了构件的功能、状态、接口等特性。

    特点

    • SADL提供了对软件体系结构的语义级描述,能够更准确地表达系统的功能和行为。

    • SADL的描述方式较为抽象和复杂,可能需要更多的学习和理解成本。

    四、对比与总结

    1. 描述方式

      • C2:基于面向对象的概念,通过构件和连接件来描述系统的层次结构和交互方式。

      • Rapide:基于事件驱动的概念,通过事件和处理器来描述系统的运行过程。

      • SADL:基于语义模型的概念,通过概念、关系和属性来描述系统的功能和行为。

    2. 灵活性

      • C2:支持灵活的构件重组和扩展,方便系统的维护和升级。

      • Rapide:虽然也支持构件的扩展和重组,但可能不如C2那样灵活。

      • SADL:由于描述方式较为抽象和复杂,灵活性相对较低。

    3. 理解成本

      • C2:相对直观且易于理解,但需要一定的面向对象知识。

      • Rapide:描述方式直观且易于理解,适合初学者。

      • SADL:描述方式较为抽象和复杂,可能需要更多的学习和理解成本。

    综上所述,不同的ADL具有不同的特点和适用场景。在选择ADL时,需要根据系统的具体需求和开发者的实际情况进行权衡和选择。对于上述的报警系统示例,C2语言可能更适合描述其层次结构和交互方式;而Rapide语言则更适合模拟系统的运行过程并发现潜在的问题;SADL语言则能够更准确地表达系统的功能和行为,但可能需要更多的学习和理解成本。

  • 对一个软件系统进行考虑,如果要使用ADL对其体系结构进行述,你会选择哪一种?为什么?这样选择的优点和缺点各有哪些?

    在选择使用哪种ADL(软件体系结构描述语言)对一个软件系统的体系结构进行描述时,需要考虑多个因素,包括系统的特性、开发团队的需求、ADL的表达能力、易用性、工具支持等。以下是对几种常见的ADL进行考量后,选择一种ADL的示例分析,以及这样选择的优点和缺点。

    选择的ADL:C2

    选择理由

    1. 面向对象:C2是一种基于面向对象的ADL,它使用类和对象来描述软件体系结构中的构件和连接件。这种描述方式与许多现代软件开发方法(如面向对象编程)相契合,使得开发者能够更容易地理解和应用C2。

    2. 层次结构:C2支持层次结构的描述,这使得系统可以被划分为多个层次,每个层次都有明确的职责和接口。这种结构有助于降低系统的复杂性,提高系统的可维护性和可扩展性。

    3. 灵活性:C2允许开发者根据需要对系统进行灵活的重组和扩展。例如,可以通过添加新的构件或修改现有构件的接口来适应新的需求或技术变化。

    优点

    1. 易于理解和应用:C2的描述方式与面向对象编程相契合,使得开发者能够更容易地理解和应用C2来描述软件系统的体系结构。

    2. 支持层次结构:C2支持层次结构的描述,有助于降低系统的复杂性,提高系统的可维护性和可扩展性。

    3. 灵活性高:C2允许开发者根据需要对系统进行灵活的重组和扩展,适应性强。

    缺点

    1. 学习成本:虽然C2与面向对象编程相契合,但对于不熟悉面向对象概念的开发者来说,可能需要一定的学习成本来掌握C2。

    2. 工具支持:虽然C2是一种广泛使用的ADL,但并非所有开发工具都支持C2。因此,在选择C2时,需要确保有合适的工具支持。

    3. 表达能力限制:虽然C2能够描述软件系统的许多方面,但在某些情况下,它可能无法充分表达系统的所有特性和行为。这可能需要结合其他描述方法或工具来补充C2的不足。

    结论

    在选择使用C2对软件系统的体系结构进行描述时,需要权衡其优点和缺点。C2的面向对象特性、层次结构支持和灵活性使其成为一种强大的描述工具,但学习成本、工具支持和表达能力限制也是需要考虑的因素。因此,在选择ADL时,建议根据系统的特性、开发团队的需求以及ADL的特性和工具支持等因素进行综合考虑。如果C2符合这些要求,那么它可能是一个合适的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向懒羊羊学习的大猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值