1 软件体系结构定义
软件体系结构尚处于在发展期,对于其定义,目前学术界尚未形成统一意见,不同学者有不同看法。以下介绍几个具有代表性的定义: Garlan & Shaw模型
[19]: SA={components, connectors, constrains}。 构件(component)可以是一组代码,如程序的模块;也可以是一个独立的程序,如数据库的SQL服务器。连接器(connector)表示构件之间的相互作用。它可以是过程调用、管道、远程过程调用等。一个软件体系结构还包括某些限制(constrain)。该模型视角是程序设计语言,构件主要是代码模块。 Boehm模型
[17]: SA={components, connections, constraints, stakeholders’ needs, rationale}。 软件体系结构包含系统构件、连接件、约束的集合;反应不同人员需求的集合;以及能够展示由构件、连接件和约束所定义的系统在实现时如何满足系统不同人员需求的原理的集合。 Vestal模型: SA={component, idioms/styles, common patterns of interaction}。 软件由构件(component)组成,构件之间通过通用的互操作模式相连。体系结构风格(style)描述了一种通用的设计模式,可满足特定系列的应用需求。 IEEE 610.12-1990
[20]中的定义: Architecture={component, connector, environment, principle}。体系结构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。 比较上述各种体系结构的定义,可以发现,尽管各种定义都从不同的角度关注软件体系结构,研究对象各有侧重,但其核心内容都是软件系统的结构。并且都涵盖了一些实体:构件、构件之间的交互关系、构件和连接件构成的拓扑结构、设计原理与指导方针。同时,这些实体应该满足一定的限制,遵循一定的设计规则,能够在一定的环境下进行演化。以这些实体为基础,软件休系结构能够从一个较高的层次上反映组成系统的构件、构件之间的交互,以及构件与构件交互所形成的拓扑结构。而且,软件体系结构应能为体系系统开发中的重要设计决策,提供不同角度的视图,便于不同角色人员之间的交流。
2 体系结构风格及其定义
软件体系结构风格
[2]是指不同系统所拥有的共同的结构组织模式和语义特性。 一种体系结构风格决定了部件、连接件和一组如何将它们结合在一起的约束限制, 包括拓扑限制(如无循环等)、执行语义限制(如过滤器不能共享等)。 实质上, 一种体系结构风格决定了一种体系结构的框架。软件体系结构风格的定义如下: 软件体系结构风格可由一个三元组SAS = { components, connectors, design criteria}来表示, 其中 (1) components 是组件的集合, 它们提供了一个系统所需的基本功能和操作, 构成了一个系统的基本框架; (2) connectors 是连接件的集合, 表示两个以上组件之间的交互方式, 定义了组件交互的规则并且也给出了一些实现的机制, 如协议(连接的交互特性)、数据模式(通信过程中交换的数据类型) ; (3) design criteria (设计准则) 包括了组件和连接件的使用、选择及它们之间的互连及约束限制等。 可见, 上述对软件体系结构风格的定义与软件体系结构的定义极为相似,因此, 本文认为, 体系结构风格是软件体系结构在更高层次上的抽象, 或者说, 软件体系结构是一种或多种体系结构风格的实例。 经典的架构风格
[6]主要有数据流系统、数据抽象和面向对象系统、分层系统和数据中心系统四大类。 新型架构风格
[4]主要有正交体系结构、三层C/S结构、B/S结构和异构结构风格以及公共对象请求代理体系结构等等。 考察上述体系结构风格, 可以发现, 体系结构风格是基于不同的视角或层次抽象出来的, 不同风格之间常常具有交叉现象。 例如,主程序和子程序、面向对象几乎是目前一切软件构件、连接件设计和实现的基础;分层系统的层次结构风格几乎是一切复杂系统的基本结构方法;事件系统是一种受操作系统管理控制的部件连接方式;仓库是部件的设计结构;管道/过滤器、客户/服务器、解释器等则是特殊的系统结构方法。也就是说, 对于同一种软件体系结构, 从不同的视角和层次可能抽象出不同的体系结构风格。 从“风格”的自然语言语义上看, 体系结构风格应该是一些对软件构成具有整体性、普遍性、一般性的结构和结构关系的方法。在软件设计中, 遵循这些方法的构成原则, 有利于软件的开发和维护。
3 软件体系结构的作用
软件体系结构在软件开发和维护中发挥着重要作用。在软件开发中,软件工程对软件体系结构设计支持的需求越来越迫切。 第一,通过认识和理解体系结构可以使系统的高层次关系得到全面表达和深刻理解。 第二,获得正确的体系结构常常是软件系统设计成功的关键,否则可能导致灾难性的结果。 第三,全面深入地理解软件体系结构,才可以使设计者在复杂的问题面前做出正确的抉择。 第四,系统体系结构对于复杂系统的高层次性能的分析是至关重要的。 第五,熟练掌握体系结构的概念和描述,可以使软件设计者之间、设计者和用户之间快速方便地交流知识、经验和新设计思想。 第六,在体系结构的全局思想指导下的任何系统维护、扩充和升级,不会因修改和扩充而破坏整体的完整和一致性。 对于维护,以严谨的方式为系统结构提供的设计文档,在软件维护阶段表现出明显的优越性。维护中的大量时间都花费在对现存代码的理解上。如果原始的设计结构能够得到清楚和明确的表达,特别是高层次的表达,可大大减少软件维护相关开销。所以,维持好设计者关于系统结构的原始意图,对于维护者在维护中始终保持系统的完整性是十分重要的。 综上所述,软件体系结构是整个软件设计成功的基础和关键所在,它的作用在软件生命周期的各个阶段表现如下: (1) 在项目规划阶段,粗略的体系结构是进行项目可行性、工程复杂性、工程进展、投资规模、风险预测等的重要根据。 (2) 在项目需求分析阶段,需要从需求出发建立更深入的体系结构描述。这时的体系结构,是开发商和客户之间进行需求交互的表达形式,也是交互所产生的结果。通过它,可以准确地表达用户的需求,以及设计对应需求的解决方法,并考察总结系统的各项性能。 (3) 在项目设计阶段,需要从实现的角度对体系结构进行更深入的分解和描述。 (4) 在项目实施阶段,体系结构的层次和构件是建立开发人员的组织和分工、协调开发人员关系的依据。 (5) 在项目的评估阶段,体系结构是性能测试和评价的依据。 (6) 在项目维护升级阶段,对软件的任何扩充和修改都需要在体系结构的指导下进行,以维持整体设计的合理性和正确性以及性能的可分析性,并为维护升级的复杂性和代价分析提供依据。
4 正交软件体系结构风格
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解,软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。一个优秀的软件,首先要选择合适的软件体系结构风格,可以更好地促进对设计的复用。软件体系结构风格的不变部分使不同的系统可以大粒度地共享同一个实现代码。只要系统是使用常用的、规范的方法来组织,就可使别的设计者很容易地理解系统的体系结构。 正交软件体系结构由组织层 (Layer)和线索(Thread)的构件构成。层是由一组具有相同抽象级别的构件构成。线索是子系统的特例,它是由完成不同层次功能的构件组成(通过相互调用来关联),每一条线索完成整个系统中相对独立的一部分功能。每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。 如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。从以上定义,我们可以看出,正交软件体系结构是一种以垂直线索构件族为基础的层次化结构,其基本思想是把应用系统的结构按功能的正交相关性,垂直分割为若干个线索(子系统),线索又分为几个层次,每个线索由多个具有不同层次功能和不同抽象级别的构件构成,各线索的相同层次的构件具有相同的抽象级别。正交结构有一个公共的最上层,由它来触发各条线索运行,还有一个公共的最低层,它包含了所有线索要使用的数据。对于大型复杂软件系统,每一条线索(子系统)又可以按类似的方法划分为若干条子线索(更低一级的子系统),其子线索还可划分为更低一级的子线索。最终,形成多级正交结构。 因此,可以把正交软件体系结构的主要特征归纳为: (l) 由完成不同功能的n(n>l)个线索(子系统)组成; (2) 系统具有m(m>l)个不同抽象级别的层; (3) 线索之间是相互独立的(正交的); (4) 系统有一个公共驱动层(一般为最高层)和公共数据结构(一般为最低层)。
图 2-1 正交软件体系结构框架图
如图2-1所示为正交软件体系结构框架图,涵括了5个层次,其中ABDFK组成了一条线索,ACEJK也是一条线索。因为B、C同处于第二层,不能互相调用;同理H、J同处于第四层,也不能互相调用。通常,第五层为物理数据库连接构件或设备构件,为整个系统所共用。软件在进化过程中,对系统的需求会不断发生变化,对于常用的软件体系结构,往往需同步对系统构架进行修改;而正交软件体系结构中,由于线索的正交性,每一个需求变动仅影响某一条线索,而不会涉及到其他线索。这样,就把软件需求的变动局部化了,产生的影响也被限制在一定范围内,因此具有易于构建、便于开发与维护等优势。,主要体现在: (l) 结构清晰、易于理解。正交软件体系结构的形式有利于理解。线索功能相互独立,不进行互相调用,结构简单、清晰。构件在结构图中的位置显示了它所实现的抽象级别和功能。 (2) 易修改、可维护性强。线索之间的相互独立性使得对一个线索的修改不会影响到其他线索。因此,当软件需求发生变化时,可以将新需求分解为独立的自需求,然后以线索和其中的构件为主要对象分别对各自需求进行处理,便于软件维护。 (3) 可移植性强、重用粒度大。正交结构可以为一个领域内的所有应用程序所共享,这些软件有着相同或类似的层次和线索,可以实现体系结构级的重用。 (4) 结构容易调整。系统功能的增加或减少,只需相应的增删线索组件族,而不影响整个正交体系结构,因此能方便的实现结构调整。