前言 体系结构(architecture)一词在英文里是“建筑”的意思,软件产业界通常翻译为“架构”。把软件比作一座楼房,从整体上讲,是因为它有基础、主体和装饰,即操作系统之上的基础设施软件、实现计算逻辑的主体应用程序、方便使用的用户界面程序。从细节上看每一个程序也是有结构的。早期的结构化程序就是以语句组成模块,模块的聚集和嵌套形成层层调用的程序结构,也就是体系结构。结构化程序的程序(表达)结构和(计算的)逻辑结构的一致性及自顶向下开发方法自然而然地形成了体系结构。 1. 为什么要学习软件体系结构 由于结构化程序设计时代程序规模不大,通过强调结构化程序设计方法学,自顶向下、逐步求精,并注意模块的耦合性,就可以得到相对良好的结构,所以,并未特别研究软件体系结构。 随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要。对于大规模的复杂软件系统来说,对总体的系统结构设计和规格说明比起对计算的算法和数据结构的选择已经变得明显重要得多。在此种背景下,人们认识到软件体系结构的重要性,并认为对软件体系结构的系统、深入的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径。 对于软件项目的开发来说,一个清晰的软件体系结构是首要的。传统的软件开发过程可以划分为从概念直到实现的若干个阶段,包括问题定义、需求分析、软件设计、软件实现及软件测试等。软件体系结构的建立应位于需求分析之后,软件设计之前。但在传统的软件工程方法中,需求和设计之间存在一条很难逾越的鸿沟,从而很难有效地将需求转换为相应的设计。而软件体系结构就是试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦地过渡的问题。 2. 本书的内容 本书共分13章。 第1章简单介绍软件体系结构的概念、发展和应用现状。 第2章讨论软件体系结构建模,包括“4+1”视图模型、核心模型、生命周期模型和抽象模型。 第3章介绍软件体系结构的风格和特定领域软件体系结构。 第4章讨论软件体系结构的描述方法,重点介绍软件体系结构描述语言。 第5章介绍UML的基础知识,以及如何使用UML及其扩展机制对软件体系结构建模。 第6章介绍XML相关知识,重点讨论基于XML的软件体系结构描述语言。 第7章介绍动态软件体系结构及其描述方法。 第8章讨论基于服务的体系结构的关键技术和实现方法,以及如何构建一个服务,并给出一个应用实例。 第9章讨论富互联网应用体系结构,重点介绍AJAX和Mashup技术。 第10章讨论软件体系结构的分析与测试问题,重点介绍软件体系结构的可靠性风险分析。 第11章讨论软件体系结构评估方法,重点介绍ATAM和SAAM方法。 第12章讨论基于体系结构的软件开发,包括设计模式、中间件技术和基于体系结构的软件过程。 第13章介绍软件产品线的原理和方法、框架技术,重点讨论产品线体系结构的设计和演化。 3. 将本书作为教材 如果将本书作为教材,根据学生的不同层次,教师可以选讲其中一部分内容,下面列出一些建议,供参考。 (1) 本科生:建议将软件体系结构作为选修课程,安排24课时甚至更少的课时,主要讲解软件体系结构的发展和图形化建模,以及目前比较流行的一些体系结构风格和模式。可以不讲的章节包括2.2节、2.3节、2.4节,3.5节、3.6节、3.7节、3.9节、3.10节,第4章,5.10节、5.11节,6.4节,第7章,第10章,第11章,12.3节、12.5节、12.7节、12.8节,第13章。 (2) 硕士研究生:建议将软件体系结构作为选修课程(如果是计算机软件与理论专业的硕士研究生,则建议作为必修课程)。硕士研究生需要掌握软件体系结构的一些基本理论和常用的研究方法,侧重于软件体系结构学术性方面的内容。可以不讲的章节包括第5章、第6章、第8章、第9章、第12章、第13章。 (3) 软件工程硕士:建议将软件体系结构作为必修课程。软件工程硕士更侧重实践性,需要掌握软件体系结构的基本理论、软件体系结构的图形化建模,以及产业界常用的一些体系结构的原理及应用,还需要掌握软件体系结构的发展趋势。可以不讲的章节包括2.2节、2.3节、2.4节,3.6节、3.9节,第4章,5.11节,6.4节,第7章,第10章,12.7节。 (4) 博士研究生:建议将软件体系结构作为选修课程,或采用报告会议的形式,将本书的所有章节(或部分章节)作为专题报告,对计算机软件相关专业的博士研究生进行教学。 4. 诚挚致谢 在本书出版之际,要特别感谢国内外软件工程和软件体系结构专著、教材和许多高水平论文、报告的作者们(恕不一一列举,名单详见各章中的主要参考文献,扫描章末“思考题”下方的二维码可以浏览),他们的作品为本书提供了丰富的营养,使我们受益匪浅。在本书中借鉴了他们的部分材料,使本书能够尽量反映软件体系结构研究和实践领域的最新进展。 感谢阅读本书前两个版本的读者,特别要感谢使用本书作为教材的教师,他们为本书的修订和出版提出了宝贵的意见。 感谢希赛网为本书的意见反馈提供了空间和程序,感谢清华大学出版社的编辑,他们在本书的选题、编辑和定稿方面,给予了很大的帮助。 由于作者水平有限,时间紧迫,加上软件体系结构是一门新兴的学科,本身发展很快,对有些新领域作者尚不熟悉,因此,书中难免有不妥和疏漏之处,诚恳地期望各位专家和读者不吝指教和帮助。对此,我们将深为感激。 2021年1月