什么是软件体系结构呢? Bass、Clements 和 Kazman[Bas03]对于这个难懂的概念给出了如下定义。

程序或计算系统的软件体系结构是指系统的一个或者多个结构,它包括软件构件、构件的外部可见属性以及它们之间的相互关系。

        体系结构并非可运行的软件。确切地说,它是一种表达,使你能够:(1)对设计在满足既定需求方面的有效性进行分析;(2)在设计变更相对容易的阶段,考虑体系结构可能的选择方案;(3)降低与软件构建相关的风险。

       该定义强调了“软件构件”在任意体系结构表示中的作用。在体系结构设计环境中,软件构件可能会像程序模块或者面向对象的类那样简单,但也可能扩充到包含数据库和能够完成客户与服务器网络配置的“中间件”。构件的属性是理解构件之间如何相互作用的必要特征。在体系结构层次上,不会详细说明内部属性(如算法的细节)。构件之间的关系可以像从一个模块对另一个模块进行过程调用那样简单,也可以像数据库访问协议那样复杂。

        软件工程界(如[Kaz03])的一些成员对导出软件体系结构(称为“体系结构设计”)和导出软件设计这两种行为作了区分。正如之前版本的一位评论者指出:“体系结构”和“设计”这两个术语之间有明显的不同。设计是体系结构的一个实例,类似于对象是类的实例一样。例如,考虑“客户-服务器”体系结构,我们可以使用 Java平台(Java EE)或者 Microsoft 平台(.NET 框架),选择基于该体系结构的多种不同的实现方式设计一个网络中心软件系统。即使是同一个体系结构,也可能会产生多种基于该体系结构的设计。因此,不能把“体系结构”和“设计”混为一谈。