本书系统地介绍软件体系结构的基本原理、方法和实践,全面反映软件体系结构研究和应用的最新进展。既讨论软件体系结构的基本理论知识,又介绍软件体系结构的设计和工业界应用实例,强调理论与实践相结合。
全书共10章,第1章简单介绍软件体系结构的概念、发展和应用现状; 第2章讨论软件体系结构建模,包括视图模型、核心模型、生命周期模型和抽象模型; 第3章介绍软件体系结构的风格和特定领域软件体系结构; 第4章讨论软件体系结构的描述方法,重点介绍软件体系结构描述语言; 第5章介绍动态软件体系结构及其描述方法; 第6章介绍WEB服务体系结构相关知识,以及面向服务的体系结构的基本概念和设计原则; 第7章讨论基于体系结构的软件开发方法,介绍基于体系结构的软件过程; 第8章讨论软件体系结构的分析与测试问题,重点介绍软件体系结构的可靠性风险分析; 第9章讨论软件体系评估方法,重点介绍ATAM和SAAM方法; 第10章介绍软件产品线的原理和方法、框架技术,重点讨论产品线体系结构的设计和演化。
本书可作为计算机软件专业高年级本科生、研究生和软件工程硕士的软件体系结构教材,作为软件工程高级培训、系统分析师和系统架构设计师培训教材,也可作为软件开发人员的参考书。
体系结构一词在英文里就是“建筑”的意思。把软件系统比做一座楼房,从整体上讲,是因为它有基础、主体和装饰,即操作系统之上的基础设施软件,实现计算逻辑的主体应用程序,方便使用的用户界面程序。从细节上看,每一个程序也是有结构的。早期的结构化程序就是以语句组成模块,模块的聚集和嵌套形成层层调用的程序结构,也就是体系结构。结构化程序的程序(表达)结构和(计算的)逻辑结构的一致性及自顶向下的开发方法自然而然地形成了体系结构。由于结构化程序设计时代程序规模不大,通过强调结构化程序设计方法学,自顶向下、逐步求精,并注意模块的耦合性就可以得到相对良好的结构,所以,并未特别深入研究软件体系结构。
随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明就显得越来越重要。对于大规模的复杂软件系统来说,总体的系统结构设计和规格说明比起对计算的算法和数据结构的选择变得明显重要。在此种背景下,人们认识到了软件体系结构的重要性,并认为对软件体系结构的系统进行深入的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径。
对于软件项目的开发来说,具有清晰的软件体系结构是首要的。传统的软件开发过程可以划分为从概念直到具体实现的若干个阶段,包括问题定义、需求分析、软件设计、软件实现及软件测试等。软件体系结构的建立应在需求分析之后,软件设计之前。但在传统的软件工程方法中,需求和设计之间存在一条很难逾越的鸿沟,从而难以有效地将需求转换为相应的设计。软件体系结构就是试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦地过渡的问题。
体系结构在软件开发中为不同的人员提供了共同交流的语言,体现并尝试了系统早期的设计决策,并作为系统设计的抽象,为实现框架和构件的共享和重用、基于体系结构的软件开发提供了有力的支持。鉴于体系结构的重要性,Perry将软件体系结构视为软件开发中第一类重要的设计对象,Barry Boehm也明确指出: “在没有设计出体系结构及其规则时,整个项目不能继续下去,而且体系结构应该看作软件开发中可交付的中间产品”。
软件体系结构是根植于软件工程发展起来的一门新兴学科,目前已经成为软件工程研究和实践的主要领域。专门和广泛的研究软件体系结构是从20世纪90年代才开始的,1993年到1995年,卡耐基梅隆大学的Mary Shaw与David Garlan,贝尔实验室的Perry,南加州大学的Barry Boehm,斯坦福大学的David Luckham等人开始将注意力投向软件体系结构的研究和学科建设。
目前,软件体系结构的领域研究非常活跃,如南加州大学专门成立了软件体系结构研究组,曼彻斯特大学专门成立了软件体系结构研究所。同时,业界许多著名企业的研究中心也将软件体系结构作为重要的研究内容。如由IBM、Nokia和ABB等企业联合一些大学研究嵌入式系统的体系结构项目。国内也有不少机构在从事软件体系结构方面的研究,如北京大学软件工程研究所一直从事基于体系结构软件组装的工业化生产方法与平台的研究,北京邮电大学则研究了电信软件的体系结构,国防科学技术大学推出的CORBA规范实现平台为体系结构研究提供了基础设施所需的中间件技术。许多大学为计算机软件专业硕士和软件工程硕士都开设了软件体系结构课程。
本书共分10章,第1章简单介绍软件体系结构的概念、发展和应用现状; 第2章讨论软件体系结构建模,包括视图模型、核心模型、生命周期模型和抽象模型; 第3章介绍软件体系结构的风格和特定领域软件体系结构; 第4章讨论软件体系结构的描述方法,重点介绍软件体系结构描述语言; 第5章介绍动态软件体系结构及其描述方法; 第6章介绍Web服务体系结构相关知识,以及面向服务的体系结构的基本概念和设计原则; 第7章讨论基于体系结构的软件开发方法,介绍基于体系结构的软件过程; 第8章讨论软件体系结构的分析与测试问题,重点介绍软件体系结构的可靠性风险分析; 第9章讨论软件体系评估方法,重点介绍ATAM和SAAM方法; 第10章介绍软件产品线的原理和方法、框架技术,重点讨论产品线体系结构的设计和演化。第4.6、4.7、5、6、7.7节和第8章由李雄编写,其他章节由张友生编写。
在本书出版之际,我们要特别感谢国内外软件工程和软件体系结构专著、教材和许多高水平论文、报告的作者们(恕不一一列举,名单详见各章中的主要参考文献),他们的作品为本书提供了丰富的营养,使我们受益匪浅。在本书中引用了他们的部分材料,使本书能够尽量反映软件体系结构研究和实践领域的最新进展。
感谢阅读本书第一版的读者,特别要感谢使用本书第一版作为教材的老师,他们为本书的修订和第2版的出版提出了宝贵的意见。
感谢希赛网(http://www.csai.cn)为本书的意见反馈提供了空间和程序,感谢清华大学出版社的帮助。
由于作者水平有限,时间紧迫,加上软件体系结构是一门新兴的学科,本身发展很快,对有些新领域作者尚不熟悉。因此,书中难免有不妥和错误之处,我们诚恳地期望各位专家和读者不吝指教和帮助。对此,我们将深为感激。
2006年9月
第1章软件体系结构概论
1.1从软件危机谈起
1.1.1软件危机的表现
1.1.2软件危机的成因
1.1.3如何克服软件危机
1.2构件与软件重用
1.2.1构件模型及实现
1.2.2构件获取
1.2.3构件管理
1.2.4构件重用
1.2.5软件重用实例
1.3软件体系结构的兴起和发展
1.3.1软件体系结构的定义
1.3.2软件体系结构的意义
1.3.3软件体系结构的发展史
1.4软件体系结构的应用现状
主要参考文献
第2章软件体系结构建模
2.1软件体系结构建模概述
2.2“4+1”视图模型
2.2.1逻辑视图
2.2.2开发视图
2.2.3进程视图
2.2.4物理视图
2.2.5场景
2.3软件体系结构的核心模型
2.4软件体系结构的生命周期模型
2.5软件体系结构抽象模型
2.5.1构件
2.5.2连接件
2.5.3软件体系结构
2.5.4软件体系结构关系
2.5.5软件体系结构范式
主要参考文献
第3章软件体系结构风格
3.1软件体系结构风格概述
3.2经典软件体系结构风格
3.2.1管道和过滤器
3.2.2数据抽象和面向对象组织
3.2.3基于事件的隐式调用
3.2.4分层系统
3.2.5仓库系统及知识库
3.2.6C2风格
3.3客户/服务器风格
3.4三层C/S结构风格
3.4.1三层C/S结构的概念
3.4.2三层C/S结构应用实例
3.4.3三层C/S结构的优点
3.5浏览器/服务器风格
3.6公共对象请求代理体系结构
3.7正交软件体系结构
3.7.1正交软件体系结构的概念
3.7.2正交软件体系结构的实例
3.7.3正交软件体系结构的优点
3.8基于层次消息总线的体系结构风格
3.8.1构件模型
3.8.2构件接口
3.8.3消息总线
3.8.4构件静态结构
3.8.5构件动态行为
3.8.6运行时刻的系统演化
3.9异构结构风格
3.9.1为什么要使用异构结构
3.9.2异构结构的实例
3.9.3异构组合匹配问题
3.10互联系统构成的系统及其体系结构
3.10.1互联系统构成的系统
3.10.2基于SASIS的软件过程
3.10.3应用范围
3.11特定领域软件体系结构
3.11.1DSSA的定义
3.11.2DSSA的基本活动
3.11.3参与DSSA的人员
3.11.4DSSA的建立过程
3.11.5DSSA实例
3.11.6DSSA与体系结构风格的比较
主要参考文献
第4章软件体系结构描述
4.1软件体系结构描述方法
4.2软件体系结构描述框架标准
4.3体系结构描述语言
4.3.1ADL与其他语言的比较
4.3.2ADL的构成要素
4.4典型的软件体系结构描述语言
4.4.1UniCon
4.4.2Wright
4.4.3C2
4.4.4Rapide
4.4.5SADL
4.4.6Aesop
4.4.7ACME
4.5软件体系结构与UML
4.5.1UML简介
4.5.2UML的主要内容
4.5.3直接使用UML建模
4.5.4使用UML扩展机制
4.6可扩展标记语言
4.6.1XML语言简介
4.6.2XML相关技术简介
4.7基于XML的软件体系结构描述语言
4.7.1XADL 2.0
4.7.2XBA
主要参考文献
第5章动态软件体系结构
5.1动态软件体系结构概述
5.2软件体系结构动态模型
5.2.1基于构件的动态系统结构模型
5.2.2πADL动态体系结构
5.3动态体系结构的描述
5.3.1动态体系结构描述语言
5.3.2动态软件体系结构的形式化描述
5.4动态体系结构特征
5.5化学抽象机
主要参考文献
第6章Web服务体系结构
6.1Web服务概述
6.1.1什么是Web服务
6.1.2Web服务的不同描述
6.1.3Web服务的特点
6.2Web服务体系结构模型
6.3Web服务的核心技术
6.3.1作为Web服务基础的XML
6.3.2简单对象访问协议
6.3.3Web服务描述语言
6.3.4统一描述、发现和集成协议
6.4面向服务的软件体系结构
6.4.1面向服务体系结构概念
6.4.2面向服务体系结构的设计原则
6.5Web服务的应用实例
主要参考文献
第7章基于体系结构的软件开发
7.1设计模式
7.1.1设计模式概述
7.1.2设计模式的组成
7.1.3模式和软件体系结构
7.1.4设计模式方法分类
7.2基于体系结构的设计方法
7.2.1有关术语
7.2.2ABSD方法与生命周期
7.2.3ABSD方法的步骤
7.3体系结构的设计与演化
7.3.1设计和演化过程
7.3.2实验原型阶段
7.3.3演化开发阶段
7.4基于体系结构的软件开发模型
7.4.1体系结构需求
7.4.2体系结构设计
7.4.3体系结构文档化
7.4.4体系结构复审
7.4.5体系结构实现
7.4.6体系结构演化
7.5应用开发实例
7.5.1系统简介
7.5.2系统设计与实现
7.5.3系统演化
7.6基于体系结构的软件过程
7.6.1有关概念
7.6.2软件过程网
7.6.3基本结构的表示
7.6.4基于体系结构的软件过程Petri网
7.7软件体系结构演化模型
7.7.1SA静态演化模型
7.7.2SA的动态演化模型
主要参考文献
第8章软件体系结构的分析与测试
8.1体系结构的可靠性建模
8.2软件体系结构的可靠性风险分析
8.2.1软件体系结构风险分析背景
8.2.2软件体系结构风险分析方法
8.3基于体系结构描述的软件测试
8.3.1测试方法
8.3.2实例与实现
主要参考文献
第9章软件体系结构评估
9.1体系结构评估概述
9.2软件体系结构评估的主要方式
9.3ATAM评估方法
9.3.1ATAM评估的步骤
9.3.2ATAM评估的阶段
9.4SAAM评估方法
9.4.1SAAM评估的步骤
9.4.2SAAM评估实例
主要参考文献
第10章软件产品线体系结构
10.1软件产品线的出现和发展
10.1.1软件体系结构的发展
10.1.2软件重用的发展
10.2软件产品线概述
10.2.1软件产品线的基本概念
10.2.2软件产品线的过程模型
10.2.3软件产品线的组织结构
10.2.4软件产品线的建立方式
10.2.5软件产品线的演化
10.3框架和应用框架技术
10.4软件产品线基本活动
10.5软件产品线体系结构的设计
10.5.1产品线体系结构简介
10.5.2产品线体系结构的标准化和定制
10.6软件产品线体系结构的演化
10.6.1背景介绍
10.6.2两代产品的各种发行版本
10.6.3需求和演化的分类
主要参考文献