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