软件体系结构又被称为软件构件结构SCI(Software Component Infrastructure)或软件架构,是对软件系统整体结构的刻画。软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。软件体系结构是软件工程继过程性模型和面向对象模型之后的最新模型。软件体系结构研究如何应用可复用构件系统快速可靠地对系统进行构造,着重于软件系统自身的整体结构和构件间的互连与通信。软件体系结构是软件在系统级层次上的组成和行为,是设计过程中不可缺少的一个阶段,它对复杂软件的后期设计起到了决定性的作用。
虽然软件体系结构已经在软件工程领域中有着广泛的应用,但迄今为止还没有一个被大家所公认的定义。许多著名的专家学者都从不同角度和不同侧面对软件体系结构进行了刻画说明,其中较为典型的定义有以下几种:
1、Dewayne Perry和Alex Wolf定义
软件体系结构是具有一定形式的结构化元素,即构件的集合。包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。
2、Mary Shaw和David Garlan定义
软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。体系结构问题包括总体组织和全局控制、通讯协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案问进行选择等。软件体系结构处理算法与数据结构之上关于整体系统结构设计和描述方面的一些问题,如全局组织和全局控制结构、关于通讯、同步与数据存取的协议,设计构件功能定义,物理分布与合成,设计方案的选择、评估与实现等。
3、Kruchte定义
软件体系结构有四个角度,它们从不同方面对系统进行描述:概念角度描述系统的主要构件及它们之间的关系;模块角度包含功能分解与层次结构;运行角度描述了一个系统的动态结构;代码角度描述了各种代码和库函数在开发环境中的组织。
4、Hayes Roth定义
软件体系结构是一个抽象的系统规范,主要包括用其行为来描述的功能构件和构件之问的相互连接、接口和关系。
5、David Garlan和Dewne Perry定义
David Garlan和Dewne Perry于1995年在IEEE软件工程学报上又采用如下的定义:软件体系结构是一个程序/系统各构件的结构、它们之间的相互关系以及进行设计的原则和随时间进化的指导方针。
6、Bass,Ctements和Kazman定义
1997年,Bass,Ctements和Kazman在《使用软件体系结构》一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。其中。“软件外部的可见特性”是指软件构件提供的服务、性能、特性、错误处理、共享资源使用等。
软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
软件体系结构作为一个软件系统的高层结构。它的主要特点有:
(1)软件体系结构是一个高次上的抽象,它并不涉及具体的系统结构,比如结构模式是C/S还是B/S,不关心具体的实现。
(2)软件体系结构必须支持系统需求的功能。在设计软件体系结构的时候,考虑系统的动态行为是必须的。
(3)软件体系结构必须遵循系统的特征(系统的非功能需求)。包括考虑现有系统的兼容性、安全性和可靠性.同时还要考虑系统以后的扩展性、伸缩性和复用性。这些需求可能发生冲突,因此,在设计体系结构时,必须考虑在多个可选方案中如何达到某种层次上平衡。
(4)达到体系结构这个层次上后,系统实现的细节都被隐藏。