软件体系结构(第4版) 9787302511441

配送至
$ $ USD 美元

编辑推荐

本书详细介绍和分析了软件体系结构的理论基础、研究内容、当前的发展状况和实践应用等。通过本书,读者可以了解软件体系结构的研究背景、基本概念、描述方法、设计风格、评估方法、开发工具和柔性软件体系结构等知识。本书采用最近几年的案例、数据、图示以及其他相关材料以反映软件体系结构的新发展。本书可以作为计算机、软件工程以及相关专业的研究生和本科生学习软件体系结构的教材和参考书,对从事软件体系结构研究和软件开发的科研人员也有一定的理论参考价值和实用价值。

目录

目录
第1章软件体系结构的起源和发展1
1.1软件的产生与发展1
1.2软件危机的出现与软件工程的兴起2
1.3软件体系结构的诞生与发展5
1.3.1软件体系结构诞生的背景及意义5
1.3.2软件体系结构概念的形成与发展8
1.4软件体系结构在软件生命周期中的定位12
1.5软件体系结构的研究内容、原理及标准14
1.5.1软件体系结构的研究内容14
1.5.2软件体系结构的设计原理15
1.5.3软件体系结构标准16
1.6软件体系结构的3个层次级别18
1.7小结21
第2章软件体系结构风格和模式23
2.1软件体系结构风格和模式基础23
2.2管道过滤器风格25
2.2.1概述25
2.2.2优缺点26
2.2.3案例27
2.3面向对象风格30
2.3.1概述30
2.3.2优缺点31
2.3.3案例32
2.4事件驱动风格37
2.4.1概述37
2.4.2优缺点39
2.4.3案例402.5分层风格45
2.5.1概述45
2.5.2优缺点46
2.5.3案例47
2.6数据共享风格50
2.6.1概述50
2.6.2优缺点51
2.6.3案例51
2.7解释器风格54
2.7.1概述54
2.7.2优缺点55
2.7.3案例55
2.8反馈控制环风格58
2.8.1概述58
2.8.2优缺点58
2.8.3案例58
2.9云体系结构风格59
2.9.1概述59
2.9.2优缺点62
2.9.3案例62
2.10体系结构风格比较65
2.11异构风格的集成66
2.12小结68
附录2A案例一: SMCSP 项目69
2A.1项目背景69
2A.2功能需求70
2A.3系统设计73
2A.4系统实现74
2A.5案例小结89
附录2B案例二: Recommender项目89
2B.1项目背景89
2B.2功能需求89
2B.3系统设计90
2B.4系统实现92
2B.5案例小结96
第3章软件体系结构描述98
3.1软件体系结构建模概述98
3.1.1软件体系结构建模问题98
3.1.2软件体系结构描述方法99
3.2基于UML的软件体系结构描述100
3.2.1UML概述100
3.2.2UML结构分析101
3.2.3UML的软件体系结构描述105
3.3UML体系结构描述方式案例分析109
3.3.1“4+1”视图模型109
3.3.2教务管理系统的非形式化描述案例111
3.4基于ADL的软件体系结构描述117
3.4.1ADL概述118
3.4.2ADL结构分析121
3.5ADL体系结构描述方式案例分析125
3.5.1构件与连接器描述126
3.5.2配置的描述129
3.6可扩展体系结构语言基础框架FEAL133
3.6.1设计意图133
3.6.2FEAL结构135
3.6.3FEAL映射器136
3.6.4FEAL应用示例136
3.7小结138
第4章软件体系结构级别的设计策略139
4.1软件体系结构设计的重用139
4.2体系结构设计空间与规则140
4.3SADPBA141
4.3.1总览141
4.3.2使用设计空间对设计过程进行拆分142
4.3.3SADPBA的追踪机制144
4.3.4软件体系结构的生命周期模型144
4.3.5实践中的SADPBA145
4.4示例: MEECS151
4.4.1MEECS简介151
4.4.2将SADPBA应用到MEECS152
4.5小结158
第5章软件体系结构集成开发环境159
5.1软件体系结构集成开发环境的作用159
5.1.1软件体系结构集成开发环境的优点159
5.1.2软件体系结构集成开发环境的作用159
5.2体系结构IDE原型162
5.2.1用户界面层163
5.2.2模型层163
5.2.3基础层165
5.2.4体系结构集成开发环境设计策略165
5.3ArchStudio 5系统166
5.3.1ArchStudio 5简介166
5.3.2安装ArchStudio 5169
5.3.3ArchStudio 5概况169
5.3.4ArchStudio 5的使用174
5.4其他开发环境178
5.4.1ArchWare: 体系结构改进开发环境178
5.4.2自适应软件体系结构开发环境178
5.4.3面向UniCore体系结构的集成开发环境180
5.4.4图文法规则制导的软件体系结构开发环境180
5.5小结181
第6章软件体系结构评估183
6.1软件体系结构评估概述183
6.1.1质量属性183
6.1.2评估的必要性185
6.1.3评估方法分类186
6.2质量属性专题研讨会方法189
6.3软件构架分析方法190
6.3.1SAAM的一般步骤190
6.3.2场景生成191
6.3.3体系结构描述191
6.3.4场景的分类和优先级确定192
6.3.5间接场景的单个评估192
6.3.6对场景关联的评估193
6.3.7形成总体评估193
6.4体系结构权衡分析方法194
6.4.1最初的ATAM195
6.4.2改进版ATAM196
6.4.3ATAM的一般过程197
6.4.4体系结构描述及收集与评估有关的信息199
6.4.5以体系结构为中心进行分析201
6.4.6以风险承担者为中心进行分析202
6.4.7提交评估结果203
6.5积极的中间设计审核方法203
6.6体系结构层次上的软件可维护性预测方法204
6.7基于度量的评估方法205
6.8评估方法比较205
6.8.1比较框架206
6.8.2评估方法概览和比较208
6.9小结223
第7章柔性软件体系结构225
7.1什么是柔性软件体系结构225
7.1.1动态软件体系结构225
7.1.2基于行为视角的πADL227
7.1.3基于反射视角的MARMOL232
7.1.4基于协调视角的LIME238
7.1.5柔性软件体系结构243
7.2为什么使用柔性软件体系结构246
7.3怎样使用柔性软件体系结构248
7.3.1Rainbow248
7.3.2MADAM250
7.4小结253
第8章软件体系结构的前景255
8.1国内外软件体系结构应用255
8.1.1全球软件产业状况255
8.1.2软件体系结构在系统中的应用260
8.1.3五大计算的软件体系结构264
8.2软件体系结构研究的不足和展望270
8.3小结272
参考文献273

序言

前言
软件体系结构是计算机科学领域的重要研究分支之一,越来越多的研究人员关注如何快速、低成本地构建合理、可靠的软件系统,尤其是应用于大型、复杂场景的软件系统,如航空航天、国防等领域的智能化软件系统。而构建大型、复杂应用场景的智能化软件系统较之几十年前的软件开发过程要困难、复杂得多,特别是急剧增长的信息化、智能化社会需求以及大数据、云计算时代的来临,使得相关的软件系统的构建在迎来新的发展机遇的同时也面临着更为严峻的挑战。
在计算机软件设计的早期,软件工程师致力于如何操作计算机,并使其正常地工作,正确地解决问题。数据的组织和算法的实现是当时软件设计的核心过程。随着越来越多的底层工作,如内存管理、网络通信等被自动化或者至少可以用更小的代价来重用,程序员和设计人员通过使用高级编程语言和可以提高生产效率的开发工具,可以将更多的精力放在问题本身而不用再抱着机器代码手册埋头苦干,软件开发变得快捷、容易起来。后来,随着软件危机的出现,如何在最短的时间内低成本地构建高质量的软件系统便成为业界和学术界关注的新焦点。为了解决软件危机,两大主流思想应运而生,一个是形式化方法,另一个便是软件工程的思想。软件工程思想的引入曾经一度极大地缓解了软件危机。在软件工程学科中,软件体系结构是其重要内容之一。但随着当代软件规模、复杂度的增加,软件体系结构的重要性越来越高,其理论思想、方法、工具等有了较为巨大的发展,目前已经成为独立于软件工程之外的一个学科而受到广泛重视。例如,当来自军事、国防、企业等领域的需求问题越来越复杂、软件规模越来越大时,软件的结构也相应地变得越来越复杂,这就使得软件的质量控制也变得更为困难。软件总是有结构的,如何设计、描述、评价这些结构便成为软件开发过程中至关重要的问题,这也正是软件体系结构研究的核心内容。若将软件比作一座建筑,那么建造一个狗窝、一个简易平房以及一座摩天大厦的复杂度大相径庭,相应地,采用的建筑方法、结构、风格、设备等也迥然不同。较之狗窝、简易平房,摩天大厦结构更为复杂,若结构设计不合理,极端情况下可能会造成巨大的灾难性后果。同理,对于大型、复杂的软件系统而言,如果没有一个良好的体系结构,其可能造成的灾难性后果将会极为严重。因此,软件体系结构作为软件开发过程中的重要内容,越来越引起人们的重视,如今已成为一个独立发展的学科而备受关注。我们相信,软件体系结构是处理这些复杂软件系统构建问题的关键。
然而,许多人最近几年才了解软件体系结构这个概念。事实上,软件体系结构有着相当长的历史,早在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月

文摘

第5章软件体系结构集成开发环境〖1〗5.1软件体系结构集成开发环境的作用〖*4/5〗5.1.1软件体系结构集成开发环境的优点第3章提到了使用形式化方法描述软件体系结构,但是仅仅依靠形式化方法,很难适应软件进一步发展的需要。近年来,越来越多的研究者注重在特定领域对体系结构开发工具进行研究,从形式化方法到体系结构集成开发环境的转变是软件体系结构发展的趋势。而为了支持基于体系结构的发展,研究者也更倾向于功能强大的辅助开发工具——软件体系结构集成开发环境。
与形式化描述方法相比,利用软件体系结构集成开发环境研究软件体系结构具有以下几个优点:
(1) 集成开发环境使开发者摆脱了繁杂的语法、语义、标识符号和公式的困扰,可以集中精力设计系统的结构。
(2) 对于规模庞大、结构复杂的软件系统,资源的有效管理和利用极其重要。集成开发环境使用文件系统有效地管理和支配文件和文件夹等资源,用文档支持系统开发和维护,使项目跟踪和控制变成可能,有效地提高了软件生产率,降低了开发和维护成本,保证了软件产品的质量。
(3) 集成开发环境把开发过程中所需的各项功能集合在一起,实现了体系结构分析、设计、建模、验证的自动化,这是形式化方法无法取代的。此外,它还提供了友好的图形用户界面和可视化操作,使开发过程和结果形象化。
上述优点是从开发者的角度阐述的。另一方面,从用户角度出发,集成开发环境交付给用户一个清晰明确、易于理解的软件设计产品。形象化的结果不仅是系统相关人员相互沟通交流的工具和达成共识的基础,也是他们学习和理解软件体系结构的助手。
总之,体系结构集成开发环境的出现适应了软件体系结构的发展。
5.1.2软件体系结构集成开发环境的作用
几乎每种体系结构都有相应的原型支持工具,支持工具根据体系结构的不同而侧重不同应用功能,如UniCon和Aesop等体系结构支持环境、C2的支持环境ArchStudio、支持主动连接件的Tracer工具。另外,还出现了很多支持体系结构的分析工具,如支持静态分析的工具、支持类型检查的工具、支持体系结构层依赖分析的工具、支持体系结构动态特性仿真的工具、体系结构性能仿真的工具等(Sun,2001)。本节将探讨集成开发环境有哪些具体功能。集成开发环境是一个集编辑、编译、运行计算机程序于一体的工具。体系结构集成开发环境基于体系结构形式化描述,从系统框架的角度关注软件开发。体系结构开发工具是体系结构研究和分析的工具,给软件系统提供了形式化和可视化的描述。它不但提供了图形用户界面、文本编辑器、图形编辑器等可视化工具,还集成了编译器、解析器、校验器、仿真器等工具;不但可以针对每个系统元素进行分析,还支持从较高的构件层次分析和设计系统,这样可以有效地支持构件重用。具体来说,体系结构集成开发环境的功能可以分为5类: 辅助体系结构建模,支持层次结构的描述,提供自动验证机制,提供图形和文本操作环境,支持多视图。
1. 辅助体系结构建模
建立体系结构模型是体系结构集成开发环境最重要的功能之一。集成开发环境的出现增加了软件体系结构描述方法的多样性,摒弃了描述能力低的非形式化方法,摆脱了拥有繁杂语法、语义规则的形式化方法。开发者只需经过简单的操作就可以完成以前需耗费大量时间和精力的工作。形式化时期建模是将软件系统分解为相应的组成成分,如构件、连接器等,并用形式化方法严格地描述这些组成成分及它们之间的关系,然后通过推理验证结果是否符合需求,最后提供量化的分析结果。而集成开发环境提供了一套支持自动建模的机制完成体系结构模型分析、设计、建立、验证等过程。用户根据不同的实际需求、应用环境和体系结构等因素选择不同的开发工具。
2. 支持层次结构的描述
随着软件系统规模越来越大,越来越复杂,简单体系结构风格无法表达结构复杂的系统。这时就需要层次结构的支持,因此开发工具也需要提供层次机制。图51描述了一个简单的具有层次结构的客户/服务器系统。
图51层次构件
系统由客户端和服务器两个构件组成,客户端可以向服务器传输信息。服务器是一个包含了3个构件的复杂元素,内部构件相互关联,形成了一个具有独立功能的子系统,子系统通过接口与外界交互。体系结构集成开发环境提供了子类型和子体系结构等机制来实现层次结构。用户还可以根据需要自定义类型,只需将这种类型实例化为具体的子系统即可。类似于构件,连接器也可以通过定义新类型表达更复杂的信息。
ISBN9787302511441
出版社清华大学出版社有限公司
作者覃征
尺寸16