前言
软件体系结构是计算机科学领域的重要研究分支之一,越来越多的研究人员关注如何快速、低成本地构建合理、可靠的软件系统,尤其是应用于大型、复杂场景的软件系统,如航空航天、国防等领域的智能化软件系统。而构建大型、复杂应用场景的智能化软件系统较之几十年前的软件开发过程要困难、复杂得多,特别是急剧增长的信息化、智能化社会需求以及大数据、云计算时代的来临,使得相关的软件系统的构建在迎来新的发展机遇的同时也面临着更为严峻的挑战。
在计算机软件设计的早期,软件工程师致力于如何操作计算机,并使其正常地工作,正确地解决问题。数据的组织和算法的实现是当时软件设计的核心过程。随着越来越多的底层工作,如内存管理、网络通信等被自动化或者至少可以用更小的代价来重用,程序员和设计人员通过使用高级编程语言和可以提高生产效率的开发工具,可以将更多的精力放在问题本身而不用再抱着机器代码手册埋头苦干,软件开发变得快捷、容易起来。后来,随着软件危机的出现,如何在最短的时间内低成本地构建高质量的软件系统便成为业界和学术界关注的新焦点。为了解决软件危机,两大主流思想应运而生,一个是形式化方法,另一个便是软件工程的思想。软件工程思想的引入曾经一度极大地缓解了软件危机。在软件工程学科中,软件体系结构是其重要内容之一。但随着当代软件规模、复杂度的增加,软件体系结构的重要性越来越高,其理论思想、方法、工具等有了较为巨大的发展,目前已经成为独立于软件工程之外的一个学科而受到广泛重视。例如,当来自军事、国防、企业等领域的需求问题越来越复杂、软件规模越来越大时,软件的结构也相应地变得越来越复杂,这就使得软件的质量控制也变得更为困难。软件总是有结构的,如何设计、描述、评价这些结构便成为软件开发过程中至关重要的问题,这也正是软件体系结构研究的核心内容。若将软件比作一座建筑,那么建造一个狗窝、一个简易平房以及一座摩天大厦的复杂度大相径庭,相应地,采用的建筑方法、结构、风格、设备等也迥然不同。较之狗窝、简易平房,摩天大厦结构更为复杂,若结构设计不合理,极端情况下可能会造成巨大的灾难性后果。同理,对于大型、复杂的软件系统而言,如果没有一个良好的体系结构,其可能造成的灾难性后果将会极为严重。因此,软件体系结构作为软件开发过程中的重要内容,越来越引起人们的重视,如今已成为一个独立发展的学科而备受关注。我们相信,软件体系结构是处理这些复杂软件系统构建问题的关键。
然而,许多人最近几年才了解软件体系结构这个概念。事实上,软件体系结构有着相当长的历史,早在C或C++语言出现之前,一些计算机科学家就已经注意到软件体系结构的概念以及它对软件开发的影响。20世纪90年代,软件体系结构作为一个新的学科开始蓬勃发展,许多以软件体系结构为主题的团体建立起来,相关的研讨会和学术会议也纷纷召开。同时,有关软件体系结构的文章、书籍和工具的数量激增。今天,软件领域中负责软件设计、分析并处理来自不同涉众的不同关注点和需求关系的职位——软件架构师,已经被普遍认为是软件开发团队的核心。但是值得关注的是,大多数软件架构师并没有专门针对这个领域进行系统的学习、研究或者接受培训。他们中有些人甚至认为软件体系结构与人工智能或者数据挖掘等领域不同,根本就不需要进行科学研究和学术探讨。这种观点出现的原因是软件体系结构还没有可以被广泛接受的定义,也没有理论和实践方法的事实标准。同时,软件体系结构的快速发展和分化也导致了其过多子领域和分支的出现,而这些分化出来的产物既不能很好地普及,相互之间也很难统一。这些都成为学习和研究软件体系结构的困难。
本书在第3版的基础上,充分借鉴了作者在研究生课程教学实践过程中的大量经验、反馈意见及最新的研究成果等,做了进一步内容修订,更为系统地阐述了软件体系结构的一些经典理论和最新进展,并试图让读者领悟到软件体系结构的本质。
1. 目标
本书是软件体系结构领域的入门书籍,将对其基础理论、子领域、当前的研究动态和实践方法进行介绍。通过本书的学习,读者可以了解软件体系结构的基本概念,例如软件体系结构的必要性,软件体系结构的形式化语言描述方法,软件体系结构风格在实践中的广泛应用和认同,软件体系结构在软件系统开发过程中的应用。一些学习案例、数据、插图和其他材料都是最近几年才被发布的,这些材料有利于了解软件体系结构的最新进展。
2. 如何阅读本书
遵循深入浅出的原则,本书分为两大部分。
(1) 基础理论,包括第1~4章。
(2) 研究部分,包括第5~8章。
每章的简要介绍如下:
第1章: 软件体系结构的起源和发展。本章对软件体系结构进行基本介绍。通过本章,读者可以了解到软件体系结构的必要性、发展历史和一般性定义。希望本章的介绍可以使读者对软件体系结构的整体内容有大致的了解,对当前研究的热点和方向有清晰的认识。本章是进一步了解后面各章内容的基础。此外,一些软件体系结构的概念和应用随着当前研究的进展在不断发生变化,本章最后一节将给予说明。
第2章: 软件体系结构风格和模式。本章是全书的重点,对不同的软件体系结构风格进行了划分,在每一个具体的类别中都详细地进行了讲解和介绍。为了使读者对各种风格有比较深入的理解,在介绍理论的基础上格外注重每种风格的案例剖析。希望读者在阅读本章的过程中抓住每种风格的核心问题,把握各种模式的根本要素,把案例视为对理论的实践与提高。在分门别类地介绍常见的风格和模式后,本章继续提供一些案例。每个案例中集合了多种风格和模式。在学术上,这些被称为异构风格构建。事实上,实用的软件通常都要同时采用多种风格,不管这个软件多么简单。本章的目的是将抽象的风格和模式与实际应用结合起来。
第3章: 软件体系结构描述。如何描述软件体系结构是软件体系结构领域的核心问题。它是表述软件设计、在涉众间进行有效沟通以及根据需求进行软件行为校验的基础。本章将重点放在软件体系结构基于数学的形式化描述上。对于在实践中广泛使用的UML,可以参考其他文献和学习资源。
第4章: 软件体系结构级别的设计策略。本章介绍基于形式化的体系结构设计。不同于实践中常用的开发过程(如RUP)中的设计,形式化的体系结构设计策略强调功能空间和结构空间之间的联系和演算关系(空间的概念是对现实过程的抽象)。为了更好地理解本章的内容,需要读者有基本的集合论和自动机理论知识。
第5章: 软件体系结构集成开发环境。本章主要介绍一种软件体系结构的集成开发环境,其中详尽地阐述了该环境的使用原理、内部机制、使用过程中的注意事项以及它是如何辅助人们进行设计、开发、维护软件体系结构的。为了方便阅读和使用,本章详细地介绍了软件的安装过程、使用规范以及使用的其他细节。读者通过本章的学习,可以利用软件来辅助自己设计更为复杂、新颖的软件体系结构。
第6章: 软件体系结构评估。在软件体系结构的初步设计完成之后,任何涉众都有理由搞清楚这个设计是好是坏,是否能够为项目的成功开发奠定基础,是否能够满足预期的需求而不会由于设计缺陷而失败,这就是评估的任务。本章介绍并比较目前被广泛使用的几种评估方法。大部分评估方法缺乏形式化基础,更多地要依赖参与者的经验和能力。因此,本章主要介绍实践中用到的评估方法和技术。
第7章: 柔性软件体系结构。柔性软件体系结构是当前的研究热点之一,与传统软件体系结构相比,柔性软件体系结构在动态的环境中有着极其重要的优势,这也是将这一内容独立成章的原因。本章介绍什么是柔性软件体系结构,为什么使用柔性软件体系结构,如何使用柔性软件体系结构。在介绍的过程中注重理论结合实际,用浅显的例子对复杂的理论进行说明和解释。
第8章: 软件体系结构的前景。本章着重介绍未来软件体系结构的发展及其对其他领域可能产生的影响。希望本章的介绍能够使有志于研究软件体系结构的读者了解软件体系结构研究的方向和目标,了解目前这一领域中主流的研究热点和方向。
考虑到每章的相对独立性,读者可以选择感兴趣的几章来阅读。此外,读者也可以通过参考文献获得关于一些问题的更详细、更深入的描述和解释。
3. 哪些人该阅读本书
软件设计和软件开发相关专业的研究生和本科生能够从本书中获得他们想要的知识。其他对软件体系结构感兴趣的人也可以将此书作为入门书籍。有经验的软件设计从业人员和项目主管也可以阅读本书,因为软件体系结构是他们每天必须接触的工作内容。
本书假设读者具有下面的基本经验(但并不是每个章节都需要):
(1) 使用C++、Java或C#编写程序。
(2) 软件设计(即使仅仅是简单的项目也可以)。
(3) 软件项目管理。
4. 致谢
非常感谢清华大学软件体系结构小组出色的工作,特别是李旭研究员、王卫红教授。他们对本书的专注、协作精神和勤奋是本书撰写过程中的不竭动力。
最近几年,我一直在考虑软件体系结构中的一些问题,并希望能有一个机会把它们写出来。
在本书的编写过程中,作者得到了许多人的帮助和支持。感谢第3版编写组的陈旭博士、李志鹏博士、叶文文博士,以及课题组的王斌旭、徐涛、李经纬;感谢刑建宽博士、郑翔高级工程师、董金春教授/研究员在本书第2版撰写过程中的出色研究工作;同时也感谢在第1版和第2版撰写过程中做了大量工作的王娟高级工程师、曹辉博士。由于第3版的出版在社会上产生了广泛的影响,为本书的出版打下了扎实的基础,在此向以上人士深表感谢。
感谢清华大学出版社对本书出版的大力支持。
覃征2018年5月
