- 软件体系结构
- 林荣恒 吴步丹 金芝
- 1532字
- 2025-02-22 09:45:43
1.3 软件体系结构层次
软件体系结构是软件工程的一个分支,主要解决如何架构软件并保障软件质量的一门学科。简单地说,软件工程解决如何工程化开发软件项目,而软件体系结构则是在工程化开发项目之初规划、设计软件的架构,从而引导软件工程朝着正确的方向发展。
软件体系结构虽脱胎于软件工程,但其形成同时借鉴了计算机体系结构和网络体系结构中很多宝贵的思想和方法,最近几年软件体系结构研究已完全独立于软件工程的研究,成为计算机科学的一个新的研究方向和独立学科分支。
正如传统软件工程中的方法,更多关注的是软件的功能如何设计、实现、测试,而软件体系结构则关注软件中的非功能属性如何实现和保障,为了更好地描述软件体系结构,一般可在设计之初将软件系统划分成多个层次。
如图1-2所示,一般软件系统可分为系统、子系统、模块、类等多个层次。为了方便每个层次的建模分析,每个层次定义类似的结构,一般包括组件、组成规则和行为规则,具体说明如下所述。

图1-2 系统、子系统、模块层次图
• 组件:组成的构件,指相关构成的实体。
• 组成规则:组件或系统的构造规则。多个组件以何种方式、关系组成当前层次的系统,组成规则一般静态地描述一个系统的构成。
• 行为规则:系统的语义,组件间交互的规则。行为规则动态地表明了一个系统中各个组件之间如何动态地交互。
针对每层的层次不同,相关的组件、规则具有自身不同的含义。每层可以有自身不同的符号系统、解决方法。因此每个层次可以进行独立设计,层次间可通过预先设计的接口进行传递,下一层是上一层的服务提供,从而简化层次上的设计。
一般来说,系统可以分为多个层次,如表1-1所示。典型的层次包括系统——子系统——模块——类(进程、线程)——数据结构——二进制代码。其中,(系统——子系统——模块——类)层面一般称为体系结构层次。数据结构等则称为编码层次,二进制代码称为可执行代码层次。在各个层面中,均利用组件及组件之间的协作完成相关功能。例如,在体系结构中,系统层面的组件包括各个子系统,子系统之间可以通过调用、管道等进行交互;在模块层面的组件包括各个类、接口,通过类之间的调用等方式进行交互;而在编码层面,各个对象通过方法调用、消息传递等方面进行交互。
表1-1 系统层次对比

• 体系结构层次:通过组件与组件间的协作达到系统功能。本层的组件包含多种类型(如模块、进程、线程等),组件之间的交互通过各种方式完成(调用、管道、共享、同步等)。
• 编码层次:包含算法与数据结构的设计,组件是编程语言的原子如数、字符、指针、线程等,连接的操作符是该语言的算术或数据操作符,组合机制包括记录、数组、过程等。
• 可执行代码层次:解决内存映像、数据组织、调用栈、寄存器分配等问题。组件为硬件所支持的位模式,操作符及组件的组合分布在机器代码中。
作为软件体系结构这个学科,主要关注体系结构层次的相关内容,解决如何构建体系结构、如何分析体系结构、如何评估体系结构等问题。随着软件业的发展,软件规模越来越大,对软件的架构也提出了更多的要求,要求软件构架满足修改性、易用性、性能等多种非功能属性。软件体系结构的发展,产生了一些经典的软件体系结构以及现代软件体系结构,这些软件体系结构是人们在软件实践中取得的经验和教训。
经典的软件体系结构,主要是对传统软件常见的架构进行总结,包含了管道过滤器、调用返回、层次等体系结构形态。经典的软件体系结构产生于软件规模较小的时代,因此诸如管道过滤器等所描述的体系结构的层次较低。随着软件规模的扩大,现代软件体系结构应运而生。诸如P2P、C/S、基于SOA架构等成为了现代软件体系结构的代表。这些体系结构满足了现代软件设计的需求,对当前的软件架构具有一定的现实参考价值。在之后的章节里,本书将对上述软件体系结构进行详述。