软件架构概述
软件架构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把架构的不同部分连接起来。软件架构是软件设计过程的一个层次,这一层次超越计算过程中的算法设计和数据库设计。架构问题包括总体组织和全局控制、通信协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案间进行选择等。软件架构处理算法与数据结构之上关于整个系统结构设计和描述方面的一些问题,如全局组织和全局控制结构、关于通信、同步与数据存取的协议,设计构件功能定义,物理分布于合成,设计方案的选择、评估与实现等。
软件架构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。其中,“软件外部的可见性”是指软件构件提供的服务、性能、特性、错误处理、共享资源等。对于复杂系统和大型系统的开发而言,设计好软件架构是保证软件质量的根本措施。具体来说,软件架构具有以下作用:
(1)软件架构是项目干系人进行交流的手段。
(2)软件架构是早期设计决策的体现。
(3)软件架构是可以传递和可复用的模型。
软件架构建模
设计软件架构的首要问题是如何表示软件架构,即如何对软件架构建模。根据建模的侧重点不同,可以将软件架构的模型分为5种,分别是结构模型、框架模型、动态模型、过程模型和功能模型。
(1)结构模型:这是一个最直观、最普遍的建模方法。这种方法以架构的构件、连接件(connector)和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质等。研究结构模型的核心是架构描述语言。
(2)框架模型:框架模型与结构模型类似,但它不太侧重描述结构的细节而更侧重于整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应问题的结构。
(3)动态模型:动态模型是对结构模型和框架模型的补充,研究系统的“大颗粒”的行为性质。例如,描述系统的重新配置或演化。动态可以指系统总体结构额配置、建立或拆除通信通道或计算的过程。这类系统是激励型的。
(4)功能模型:该模型认为架构是由一组功能构件按层次组成,下层向上层提供服务。他可以看作是一种特殊的框架模型。
Kruchten在1995年提出了一个“4+1”的视图模型。“4+1”视图模型从5个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件架构。每个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件架构的全部内容。
(1)逻辑视图(logic view):主要支持系统的功能需求,即系统提供给最终用户的服务。
(2)开发视图(development view):也称为模块视图(module view),主要侧重于软件模块的开发和管理。
(3)进程视图(process view):侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。
(4)物理视图(physical view):主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装、通信等问题。
(5)场景(scenarios):可以看作是那些重要活动的抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要的需求抽象。
软件架构风格
软件架构设计的一个核心问题是能否使用重复的架构模式,即能否达到架构级的软件重用。也就是说,能否在不同的软件系统中,使用同一架构。软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式(idiomatic paradigm)。架构风格定义了一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解,软件架构风格定义了用于描述系统的术语和一组指导构件系统的原则。
通用架构风格分类如下:
(1)数据流风格:批处理序列,管道/过滤器。
(2)调用/返回风格:主程序/子程序,面向对象风格,层次结构。
(3)独立构件风格:进程通信,事件系统。
(4)虚拟机风格:解释器,基于规则的系统。
(5)仓库风格:数据库系统,超文本系统,黑板系统。