前言 软件体系结构是计算机科学重要的研究领域,越来越多的研究人员关注如何快速、低成本地构建合理、可靠的软件系统,尤其是应用于大型、复杂性场景的软件系统,如航空航天、国防等领域的智能化软件系统。本书是软件体系结构领域的入门书籍,将对其基础理论、工程领域、当前的研究动态和实践方法进行介绍。通过本书的学习,读者可以了解软件体系结构的基本概念,例如软件体系结构的必要性,软件体系结构的形式化语言描述方法,软件体系结构风格在实践中的应用和软件体系结构在软件系统开发过程中的应用。 本书第4版因通俗易懂的讲解方式受到读者的欢迎。第5版在保持第4版原有特色的基础上,充分借鉴了作者在科研、研究生教学实践过程中的经验,以及读者的反馈意见、最新的研究成果等,对内容做了进一步修订,更系统地阐述了软件体系结构一些经典的理论和最新的进展,并试图让读者领悟到软件体系结构的本质。 1. 修订情况 软件体系结构研究领域发展迅速,伴随众多会议的举行和期刊的出版,每年都会产生众多的优秀研究成果。与本书第4版相比,第5版在吸收大量领域前沿成果后,在各个章节都做了必要的补充和拓展,具体更新情况如下: (1) 结合软件体系结构发展前沿,增加了新的软件体系结构风格和案例。第2章中添加了新的体系结构风格汇总表,着重讲解了重要的网格计算风格以及对应的网格计算实例。同时,第2章最后的附录添加了图像/视频注解平台项目案例。新案例与前两个案例侧重点不同,主要从设计的角度详细描述平台设计工程中遇到的问题,以及对应的解决方法,更有助于读者领悟软件体系结构风格选择的本质。 (2) 对某些章节进行了重新组织和有选择性的侧重。第1章对软件危机的介绍进行淡化和删除,侧重从开发和设计的角度阐述软件体系结构的演变。第7章对章节结构和叙述方式进行了重新组织,让读者能以更加自然的方式了解柔性体系结构。 (3) 对各个章节的某些案例、工具和方法进行了更新,目的为让读者接触最前沿的技术、方法和工具。第1章新增对软件体系结构领域的一些新方向的介绍,例如最新的函数式编程等。第3章将UML介绍更新到2.5.1版,形式化描述语言新增体系结构分析与设计语言(AADL)、基于XML面向方面的软件体系结构描述语言(AOADL)和SysADL。第4章新增选择软件体系结构风格的PASA方法,PASA可以在拥有完备的需求文档的情况下通过固定的算法推算出最适合当前系统的软件体系结构风格。第5章新增SysADL Studio工具的使用和介绍。第6章对评估的质量属性以及必要性进行了拓展补充,并填补了基于度量和预测的评估方法的空白,新增了经典的基于贝叶斯信念网络的软件体系评估方法的详细介绍。 (4) 通过观察软件体系结构新的发展趋势,更新了第8章对软件体系结构前景的预测,具体包括数字和图表的更新、软件产品线的实例补充、新增产品线的过程模型、新增电子商务体系结构作为商业领域体系结构的例子以及增加集群计算作为第六大计算的软件平台体系结构介绍。研究挑战与机遇也进行了大量补充。 (5) 对各章节的图标、文献等进行更新,修复一些文字错误等。 2. 学习指导 本书主要组织方式如下:  基础理论: 第1~4章。  理论工具: 第5章。  研究部分: 第6~8章。 除了第5章之外,各章都有相对独立性,读者可以按照章节顺序进行学习,也可以自选感兴趣的章节跳跃式学习。第5章作为第1~4章的理论工具,需要配合相应的知识点一起学习。此外,读者也能通过参考文献对一些问题找到更详细、更深入的描述和解释。 第1章: 软件体系结构的起源和发展。本章对软件体系结构的产生与演化进行概述。读者可以了解软件体系结构的必要性、发展历史和一般性定义,是进一步深入阅读后续章节的基础。 第2章: 软件体系结构风格和模式。本章是软件体系结构的重点,通过寻找和发现软件开发中的共性,总结规律并利用这些抽象出的体系结构设计风格帮助设计性能更加良好,更加易于拓展的软件系统。读者需要熟练掌握和理解列举的风格,包括它们的优缺点和经典范例。为了让读者具备将体系结构风格运用到实际项目中的能力,本章最后提供几个源自真实项目的案例。每个案例在确保叙述清晰的情况下将无关紧要的细枝末节进行删减,着重强调了体系结构风格在项目设计中的运用。本章建议读者融会贯通和知行合一。 第3章: 软件体系结构描述。如何描述软件体系结构是软件体系结构领域的核心问题。它是表述软件设计、在涉众间进行有效沟通以及根据需求进行软件行为校验的基础。本章将重点放在体系结构的具有数学基础的形式化描述上。 第4章: 软件体系结构级别的设计策略。本章介绍了基于形式化的体系结构设计,目的是给读者提供一种形式化、流程化的软件体系结构层面的设计方法。本章包含的工具和方法论在恰当使用的前提下可以快速让读者在体系结构层面对项目有一个评估和认识,并帮助开发者寻找合适的体系结构设计。 第5章: 软件体系结构集成开发环境。本章主要介绍了两种软件体系结构的集成开发环境,其中详尽地阐述了该环境的使用原理、内部机制。本章中的工具与前面章节提及的理论配套,可以帮助读者更好地理论联系实践。 第6章: 软件体系结构评估。在软件体系结构的初步设计完成之后,涉众需要评估设计的好坏,判断是否能为项目的成功开发奠定基础,是否能够满足预期的需求,而不是因为设计缺陷而失败。本章以基于场景的评估方法为主,介绍和比较目前被广泛使用的软件体系结构评估方法。因为大部分评估方法缺乏形式化基础,更多的要依靠参与者的经验和能力。 第7章: 柔性软件体系结构。柔性软件体系结构是当前研究的热点之一,与传统软件相比,柔性软件体系结构在动态的环境中有极其重要的优势,这也是独立成章的原因。本章介绍了什么是柔性软件体系结构,为什么使用柔性软件体系结构,怎么具体使用柔性软件体系结构。介绍的过程中注重理论结合实际,把复杂的理论用浅显的例子进行说明和解释。 第8章: 软件体系结构的前景。本章着重介绍未来软件体系结构的发展,如何对其他领域产生影响。 3. 本书特色 (1) 本书在第2章后添加了3个真实的案例展示软件体系结构的设计思路。很多学习过软件工程或设计模式等设计类书籍的读者会感觉到学习这些理论知识后,难以在实践时运用。本书通过3个去粗取精后的真实案例,详细地展示了软件体系结构风格选择到运用的完整过程。希望通过此方式,让读者在实例中思考和学习。 (2) 本书作为软件体系结构的入门书籍,兼顾了知识的广度、深度和新度。软件领域发展日新月异,新的理论成果层出不穷,本书在重要的知识点上详细讲述,辅以实例;对具有发展前景的新成果进行概述并且辅以参考文献。由于本书具有翔实的内容,因此适用于各类读者学习,包括但不限于开发人员、软件设计人员和软件项目管理人员。 (3) 本书各个章节具有相对独立性,但是章节内具有良好的组织。不同读者可以在自行选择自己感兴趣的章节进行学习的同时,能对各个知识点透彻地理解。同时,相对独立性降低了不同类型读者的学习成本。 4. 致谢 非常感谢清华大学软件体系结构课题组出色的工作,特别是熊昆研究员、姜流研究员和马成学者。他们对本书写作的专注、协作精神和勤奋是本书撰写过程中的不竭动力。 在本书编写过程中,得到许多人的帮助和支持。感谢第4版编写组的李旭研究员、王卫红教授;感谢第3版编写组的陈旭博士、李志鹏博士、叶文文博士,以及课题组的王斌旭、徐涛、李经纬;感谢邢建宽博士、郑翔高级工程师、董金春教授/研究员在本书第2版撰写过程中的出色研究工作,同时也感谢在第1版和第2版撰写过程中做出过大量工作的王娟高级工程师和曹辉博士。 软件体系结构课题组2020年12月