《软件体系结构(第3版)》内容简介:随着软件工程的不断发展,软件体系结构逐渐成长起来,成为目前软件开发的重要组成部分和研究热点。软件体系结构的目标是为软件开发者提供统一的、精确的、高度抽象和易于分析的系统信息。《软件体系结构(第3版)》详细介绍和分析了软件体系结构的理论基础、研究内容、当前的发展状况和实践应用。通过《软件体系结构(第3版)》,读者可以了解软件体系结构的研究背景、形式化描述、设计风格、评估方法、开发工具和柔性软件体系结构等内容。《软件体系结构(第3版)》采用最近几年的案例、数据、图示以及其他相关材料以反映软件体系结构的最新发展。《软件体系结构(第3版)》可以作为计算机以及相关专业的研究生和本科生学习软件体系结构的教材和参考书,对从事软件体系结构研究和软件开发的科研人员也有一定的理论参考价值和实用价值。
软件体系结构是软件工程领域重要的研究方向之一,越来越多的研究人员关注如何构建合理可靠的软件体系结构。目前,构建软件比几十年前困难得多。以前,软件工程师们致力于如何操作计算机,并使其正常地工作,正确地解决问题。数据的组织和算法的实现是当时软件设计的核心过程。然而越来越多的底层工作,如内存管理、网络通信等,已经被自动化了,或者至少可以用更小的代价来重用。程序员和设计人员通过使用高级编程语言和可以提高生产效率的开发工具,可以将更多的精力放在问题本身,而不是在机器代码的手册中埋头苦干。然而,一个直接的后果就是来自军事、企业等领域的需求带来的问题更加复杂,并且这个复杂性日甚一日。我们相信软件体系结构是处理这些复杂性的关键。
许多人最近几年才了解软件体系结构这个概念。然而事实上,软件体系结构有着相当长的历史,早在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月
第1章绪论
1.1软件开发简史1
1.1.1编程语言的进化——抽象级别2
1.1.2软件开发的进化——关注点3
1.1.3软件体系结构的起源和发展6
1.2软件体系结构简介8
1.2.1基本术语9
1.2.2理解IEEE 1471—200011
1.2.3软件体系结构中的视图14
1.2.4为什么软件体系结构是必要的24
1.2.5软件生命周期中的软件体系结构定位27
1.2.6云计算与软件体系结构29
小结30
第2章软件体系结构风格和模式32
2.1软件体系结构风格和模式基础32
2.2管道过滤器风格35
2.2.1概述35
2.2.2优缺点36
2.2.3案例37
2.3面向对象风格41
2.3.1概述41
2.3.2优缺点42
2.3.3案例43
2.4事件驱动风格50
2.4.1概述50[1][2][1][2]2.4.2优缺点52
2.4.3案例54
2.5分层风格60
2.5.1概述60
2.5.2优缺点61
2.5.3案例62
2.6数据共享风格67
2.6.1概述67
2.6.2优缺点68
2.6.3案例69
2.7解释器风格72
2.7.1概述72
2.7.2优缺点73
2.7.3案例73
2.8反馈控制环风格77
2.8.1概述77
2.8.2优缺点77
2.8.3案例78
2.9体系结构风格比较78
2.10异构风格的集成80
小结81
第3章软件体系结构风格的应用与分析83
3.1SMCSP简介83
3.1.1项目背景83
3.1.2技术路线85
3.1.3功能设计86
3.2系统实现90
3.2.1模式选择90
3.2.2交互机制95
3.2.3移动协同的实现98
3.2.4基于知识库的设计105
小结109
第4章软件体系结构描述110
4.1软件体系结构建模概述110
4.1.1软件体系结构建模问题110
4.1.2软件体系结构描述方法111
4.2基于UML的软件体系结构描述112
4.2.1UML概述112
4.2.2UML结构分析113
4.2.3UML的软件体系结构描述118
4.3UML体系结构描述方式案例分析123
4.3.1“4+1”视图模型123
4.3.2教务管理系统的非形式化描述案例125
4.4基于ADL的软件体系结构描述132
4.4.1ADL概述134
4.4.2ADL结构分析137
4.4.3CSP——形式化行为描述的语义基础142
4.5ADL体系结构描述方式案例分析155
4.5.1构件与连接器描述156
4.5.2配置的描述160
4.5.3风格描述162
4.6FEAL: 构造ADL的基础平台165
4.6.1设计意图165
4.6.2FEAL结构167
4.6.3FEAL映射器168
4.6.4FEAL应用示例168
小结170
第5章软件体系结构级别的设计策略172
5.1体系结构设计的重用173
5.2体系结构设计空间与规则174
5.3SADPBA175
5.3.1总览175
5.3.2使用设计空间对设计过程进行拆分177
5.3.3SADPBA的追踪机制178
5.3.4软件体系结构的生命周期模型179
5.3.5实践中的SADPBA180
5.4示例: MEECS182
5.4.1MEECS简介182
5.4.2将SADPBA应用到MEECS184
小结192
第6章软件体系结构集成开发环境193
6.1软件体系结构集成开发环境的作用193
6.1.1形式化描述方法的比较193
6.1.2体系结构集成开发环境的作用193
6.2体系结构IDE原型196
6.2.1用户界面层197
6.2.2模型层199
6.2.3基础层201
6.2.4体系结构集成开发环境设计策略 201
6.3ArchStudio 5系统202
6.3.1简介202
6.3.2安装ArchStudio 5205
6.3.3ArchStudio 5概况206
6.3.4ArchStudio 5的使用211
小结216
第7章软件体系结构评估217
7.1软件体系结构评估概述217
7.1.1质量属性217
7.1.2评估的必要性219
7.1.3评估方法分类220
7.2SAAM软件构架分析方法224
7.2.1SAAM的一般步骤225
7.2.2场景生成226
7.2.3体系结构描述227
7.2.4场景的分类和优先级确定227
7.2.5间接场景的单个评估228
7.2.6对场景关联的评估229
7.2.7形成总体评估229
7.3ATAM体系结构权衡分析方法230
7.3.1最初的ATAM231
7.3.2改进版ATAM232
7.3.3ATAM的一般过程234
7.3.4体系结构描述及收集评估有关信息236
7.3.5以体系结构为中心进行分析238
7.3.6以风险承担者为中心进行分析240
7.3.7提供最终评估报告241
7.4评估方法比较241
7.4.1比较框架241
7.4.2评估方法概览和比较245
小结262
第8章柔性软件体系结构264
8.1什么是柔性软件体系结构264
8.1.1动态软件体系结构265
8.1.2柔性软件体系结构286
8.2为什么使用柔性软件体系结构288
8.3怎样使用柔性软件体系结构291
8.3.1Rainbow291
8.3.2MADAM293
小结297
第9章软件体系结构的前景299
9.1现代工业中的软件体系结构299
9.1.1全球软件行业299
9.1.2软件产品线301
9.2软件体系结构在系统中的应用306
9.3当今软件体系结构研究的不足310
9.4软件体系结构的研究展望311
小结312
参考文献313
控制原则描述了如何激发一个构件,或者描述了如何对运行逻辑进行处理。在《软件体系结构艺术:设计方法和技巧》—书中,作者认为控制理论能够被分为两种层次:技术层次和设计层次。在技术层次中,方法调用和方法执行匹配关系在运行时层被描述。这个技术也能够描述中间件如何通过远端的方法和消息序列激发远端的实体。读者需要知道,在C程序语言中,方法调用和方法执行被绑在一起;但是在Smalltalk语言中,方法调用和方法执行并不是紧紧连在一起的。Smalltalk中的客户端对象能够发送信息给另一个对象,于是对应的方法在另一个控制线程中执行了。这就是说,客户端的方法调用可能不会导致同一个线程中的方法执行。在设计层次中,在运行时中的控制原则能够被模拟。在当今,面向对象程序设计语言都有这些特性,例如C#和Java。如事件和消息的概念经常出现在面向对象分析和面向对象设计中,甚至面向对象系统的实现中。在这个层面上,通信模式能够被分成同步、异步和授权三种。同步通信意味着客户构件激发了一个服务器构件,然后等待回应。总体来说,当一个操作被调用时,调用者总是一直等待直到返回值到来。不同构件间的异步通信意味着当客户端构件调用一个服务器端构件时,它不需要等待回应,而是可以在操作执行过程中做其他的事情。最后,客户端会收到结果。如果结果还没有准备好,客户端既可以继续等待结果,或者在检查结果的间隔中做其他的事情。异步通信模式是构建高效率分布式系统的强有力模式,但是代价就是用起来更加复杂,同时也更容易出错。第三个就是授权模式,客户端构件调用服务器构件并且传递了一个地址,服务端的执行结果会被送往这个地址。授权模式与异步通信相似,唯一的区别就是被调用构件不需要等待响应。换句话说,执行结果能够发送给其他客户端构件,或者能够在另一个线程中被处理。
总之,控制原则(又称为激发模型),能够用来比较不同体系结构风格之间的不同。对子系统激发模型的确切比较对于更好地选择、更好地描述合适的体系结构风格,以及更好的设计或者设计体系结构复合风格有很好的帮助。正如本章后面描述的一样,在大部分应用系统中,多体系结构风格复合起来达成某种质量属性。这就是异构体系结构风格的整合概念。
……