1
 软件工程
1.6.2.1 4.2.1 软件体系结构概述

4.2.1 软件体系结构概述

1.软件体系结构的定义

虽然软件体系结构已经在软件工程领域中有着广泛的应用,但迄今为止还没有一个被大家所公认的定义。许多专家、学者从不同角度对软件体系结构进行了刻画,较为典型的定义有以下几种。

(1)Dewayne Perry和A1ex Wo1f认为,软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组合、连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。

(2)Mary Shaw和David Garlan认为,软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。软件体系结构问题包括总体组织和全局控制、通信协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案间进行选择等。软件体系结构处理算法与数据结构之上关于整体系统结构设计和描述方面的一些问题,如总体组织和全局控制、通信协议、同步与数据存取,给设计元素分配待定功能,设计元素的组织、规模和性能,在各设计方案间进行选择等。

(3)Kruchten认为,软件体系结构有4个角度,它们从不同方面对系统进行描述:概念角度描述了系统的主要构件及它们之间的关系;模块角度包含了功能分解与层次结构;运行角度描述了一个系统的动态结构;代码角度描述了各种代码和库函数在开发环境中的组织。

(4)Hayes Roth认为,软件体系结构是一个抽象的系统规范,主要包括用其行为来描述的功能构件和构件之间的相互连接、接口和关系。

(5)David Garlan和Dewne Perry于1995年在《IEEE软件工程学报》上采用了如下的定义:软件体系结构是一个程序/系统各构件的结构、它们之间的相互关系及进行设计的原则和随时间进化的指导方针。

(6)Barry Boehm和他的学生提出,一个软件体系结构包括一个软件和系统构件、互联及约束的集合;一个系统需求说明的集合;一个基本原理用于说明这一构件,互联和约束能够满足系统需求。

(7)1997年,Bass、Ctements和Kazman在《使用软件体系结构》一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。其中,“软件外部的可见特性”是指软件构件提供的服务、性能、特性、错误处理、共享资源使用等。

总之,软件体系结构的研究正在发展,软件体系结构的定义也必然随之完善。在以后的表述中,如果不特别指出,我们将使用软件体系结构的下列定义:

软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。

2.主要的和经典的体系结构风格

1)C2风格

C2风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。

C2风格是最常用的一种软件体系结构风格。从C2风格的组织规则和结构图可以得出,C2风格具有以下特点:

(1)系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;

(2)所有构件之间的通信是通过以连接件为中介的异步消息交换机制来实现的;

(3)构件相对独立,构件之间依赖性较小。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相关性假设。

2)管道/过滤器风格

在管道/过滤器风格的软件体系结构中,每个构件都有一组输入/输出,构件读取输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体,它不能与其他的过滤器共享数据,而且不知道它上游和下游的标识。一个管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。

3)数据抽象和面向对象风格

抽象数据类型概念对软件系统有着重要作用,目前软件界已普遍转向使用面向对象系统。这种风格建立在数据抽象和面向对象的基础上,数据的表示方法及其相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种称为管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。

4)基于事件的隐式调用风格

基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发时,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程调用。

5)层次系统风格

层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。这样的系统中,构件在一些层上实现了虚拟机(在另一些层次系统中层是部分不透明的)。

6)仓库风格

在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储器上执行,仓库与外构件间的相互作用在系统中会有大的变化。