描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111620709
内容简介
本书是一本全面介绍SA的书,从SA发展历史的过去、现在到可能的未来,从SA的基础理论方法到技术手段,从SA的设计开发实践到质量保障实践,以及从静态SA到动态SA、再到运行态SA,等等。涵盖了SA涉及到的几乎所有必要的知识点。本书包括三个篇章:其中,基础理论篇包含7章内容,详细介绍SA的基础理论方法、技术和手段;工程实践篇包含10章内容,详细介绍SA的开发实践和质量保障实践;未来主题篇包含6章内容,详细介绍SA的*新研究主题、*新业界关注点以及SA未来发展趋势分析等。
目 录
前言
教学建议
上篇 基础理论篇
第1章 软件架构概述 …… 2
1.1 软件架构产生的背景 …… 2
1.2 软件架构的主要思想和特征 …… 3
1.2.1 软件架构的主要思想 …… 3
1.2.2 软件架构的特征 …… 3
1.3 软件架构的发展阶段 …… 4
1.3.1 基础研究阶段(1968—1994) …… 4
1.3.2 概念体系和核心技术形成阶段(1991—2000) …… 6
1.3.3 理论体系完善与发展阶段(1996年至今) …… 7
1.3.4 普及应用阶段(1999年至今) …… 7
1.4 软件架构研究和应用现状 …… 7
1.4.1 软件架构理论和方法研究 …… 8
1.4.2 软件架构的应用研究 …… 11
1.5 本章小结 …… 13
思考题 …… 13
参考文献 …… 14
第2章 软件架构的概念 …… 17
2.1 引言 …… 17
2.2 组成派的主要定义 …… 18
2.3 决策派的主要定义 …… 19
2.4 其他定义 …… 20
2.5 参考定义框架 …… 20
2.6 本章小结 …… 21
思考题 …… 22
参考文献 …… 22
第3章 软件架构模型 …… 23
3.1 引言 …… 23
3.2 软件架构的可视化建模方法 …… 24
3.2.1 基于图形可视化的建模方法 …… 24
3.2.2 基于UML的建模方法 …… 25
3.3 软件架构的形式化建模方法 …… 31
3.3.1 基于形式化规格说明语言的建模方法 …… 32
3.3.2 基于UML的形式化建模方法 …… 36
3.4 其他建模方法 …… 45
3.4.1 文本语言建模方法 …… 45
3.4.2 模型驱动的架构建模方法 …… 47
3.5 软件架构建模方法的发展趋势分析 …… 49
3.5.1 第1层:文本模型 …… 50
3.5.2 第2层:图形可视化模型 …… 50
3.5.3 第3层:UML模型 …… 50
3.5.4 第4层:形式化模型 …… 51
3.5.5 第5层:未来模型 …… 52
3.6 本章小结 …… 52
思考题 …… 53
参考文献 …… 53
第4章 软件架构的风格与模式 …… 59
4.1 软件架构风格的定义 …… 59
4.2 软件架构风格的分类 …… 60
4.3 典型的软件架构风格 …… 60
4.3.1 管道-过滤器风格 …… 60
4.3.2 主程序/子程序风格 …… 62
4.3.3 面向对象风格 …… 64
4.3.4 层次化风格 …… 65
4.3.5 事件驱动风格 …… 67
4.3.6 解释器风格 …… 69
4.3.7 基于规则的系统风格 …… 71
4.3.8 仓库风格 …… 73
4.3.9 黑板系统风格 …… 75
4.3.10 C2风格 …… 77
4.3.11 客户机/服务器风格 …… 79
4.3.12 浏览器/服务器风格 …… 83
4.3.13 平台/插件风格 …… 85
4.3.14 面向Agent风格 …… 87
4.3.15 面向方面架构风格 …… 91
4.3.16 面向服务架构风格 …… 93
4.3.17 正交架构风格 …… 95
4.3.18 异构风格 …… 97
4.3.19 基于层次消息总线的架构风格 …… 99
4.3.20 模型-视图-控制器风格 …… 101
4.4 软件架构模式 …… 103
4.5 本章小结 …… 103
思考题 …… 104
参考文献 …… 104
第5章 软件架构描述语言 …… 107
5.1 引言 …… 107
5.2 ADL的核心设计元素 …… 107
5.2.1 组件 …… 108
5.2.2 连接件 …… 108
5.2.3 架构配置 …… 109
5.3 几种典型的ADL …… 109
5.3.1 Aesop …… 109
5.3.2 C2 SADL …… 110
5.3.3 UniCon …… 114
5.3.4 Wright …… 116
5.3.5 XYZ/ADL …… 117
5.3.6 ACME …… 118
5.3.7 XBA …… 118
5.3.8 ABC/ADL …… 120
5.3.9 MetaH …… 121
5.3.10 Rapide …… 121
5.3.11 Darwin …… 122
5.3.12 xADL 2.0 …… 122
5.4 本章小结 …… 123
思考题 …… 123
参考文献 …… 123
第6章 软件架构与敏捷开发 …… 125
6.1 软件开发的发展简史 …… 125
6.2 敏捷开发 …… 127
6.2.1 敏捷开发的基本理念 …… 127
6.2.2 敏捷开发实践 …… 128
6.3 敏捷开发过程中的软件架构设计 …… 130
6.3.1 需求分析 …… 130
6.3.2 初始设计 …… 130
6.3.3 迭代过程 …… 130
6.3.4 敏捷的设计思想 …… 131
6.4 两类常见的敏捷软件架构设计方法 …… 132
6.4.1 敏捷开发初始阶段设计 …… 133
6.4.2 敏捷开发迭代过程中的设计 …… 134
6.5 本章小结 …… 136
思考题 …… 137
参考文献 …… 137
中篇 工程实践篇
第7章 架构驱动的软件开发 …… 140
7.1 架构驱动的软件开发简介 …… 140
7.2 架构需求获取 …… 140
7.3 架构设计、文档化和评估 …… 144
7.3.1 架构设计、文档化和评估是一个迭代过程 …… 144
7.3.2 什么是架构的结构 …… 147
7.3.3 从架构需求出发的评估 …… 148
7.3.4 寻找ATAM中的“权衡点”和“敏感点” …… 149
7.4 架构的实现与维护 …… 151
7.4.1 架构的实现 …… 151
7.4.2 架构的维护 …… 152
7.5 本章小结 …… 152
思考题 …… 152
参考文献 …… 153
第8章 软件架构设计和实现 …… 154
8.1 从需求分析到架构设计 …… 154
8.1.1 软件架构对需求的影响 …… 155
8.1.2 基于软件需求的软件架构设计 …… 156
8.1.3 需求与架构的协同演化 …… 163
8.2 从软件架构到详细设计 …… 163
8.2.1 详细设计对软件架构的影
教学建议
上篇 基础理论篇
第1章 软件架构概述 …… 2
1.1 软件架构产生的背景 …… 2
1.2 软件架构的主要思想和特征 …… 3
1.2.1 软件架构的主要思想 …… 3
1.2.2 软件架构的特征 …… 3
1.3 软件架构的发展阶段 …… 4
1.3.1 基础研究阶段(1968—1994) …… 4
1.3.2 概念体系和核心技术形成阶段(1991—2000) …… 6
1.3.3 理论体系完善与发展阶段(1996年至今) …… 7
1.3.4 普及应用阶段(1999年至今) …… 7
1.4 软件架构研究和应用现状 …… 7
1.4.1 软件架构理论和方法研究 …… 8
1.4.2 软件架构的应用研究 …… 11
1.5 本章小结 …… 13
思考题 …… 13
参考文献 …… 14
第2章 软件架构的概念 …… 17
2.1 引言 …… 17
2.2 组成派的主要定义 …… 18
2.3 决策派的主要定义 …… 19
2.4 其他定义 …… 20
2.5 参考定义框架 …… 20
2.6 本章小结 …… 21
思考题 …… 22
参考文献 …… 22
第3章 软件架构模型 …… 23
3.1 引言 …… 23
3.2 软件架构的可视化建模方法 …… 24
3.2.1 基于图形可视化的建模方法 …… 24
3.2.2 基于UML的建模方法 …… 25
3.3 软件架构的形式化建模方法 …… 31
3.3.1 基于形式化规格说明语言的建模方法 …… 32
3.3.2 基于UML的形式化建模方法 …… 36
3.4 其他建模方法 …… 45
3.4.1 文本语言建模方法 …… 45
3.4.2 模型驱动的架构建模方法 …… 47
3.5 软件架构建模方法的发展趋势分析 …… 49
3.5.1 第1层:文本模型 …… 50
3.5.2 第2层:图形可视化模型 …… 50
3.5.3 第3层:UML模型 …… 50
3.5.4 第4层:形式化模型 …… 51
3.5.5 第5层:未来模型 …… 52
3.6 本章小结 …… 52
思考题 …… 53
参考文献 …… 53
第4章 软件架构的风格与模式 …… 59
4.1 软件架构风格的定义 …… 59
4.2 软件架构风格的分类 …… 60
4.3 典型的软件架构风格 …… 60
4.3.1 管道-过滤器风格 …… 60
4.3.2 主程序/子程序风格 …… 62
4.3.3 面向对象风格 …… 64
4.3.4 层次化风格 …… 65
4.3.5 事件驱动风格 …… 67
4.3.6 解释器风格 …… 69
4.3.7 基于规则的系统风格 …… 71
4.3.8 仓库风格 …… 73
4.3.9 黑板系统风格 …… 75
4.3.10 C2风格 …… 77
4.3.11 客户机/服务器风格 …… 79
4.3.12 浏览器/服务器风格 …… 83
4.3.13 平台/插件风格 …… 85
4.3.14 面向Agent风格 …… 87
4.3.15 面向方面架构风格 …… 91
4.3.16 面向服务架构风格 …… 93
4.3.17 正交架构风格 …… 95
4.3.18 异构风格 …… 97
4.3.19 基于层次消息总线的架构风格 …… 99
4.3.20 模型-视图-控制器风格 …… 101
4.4 软件架构模式 …… 103
4.5 本章小结 …… 103
思考题 …… 104
参考文献 …… 104
第5章 软件架构描述语言 …… 107
5.1 引言 …… 107
5.2 ADL的核心设计元素 …… 107
5.2.1 组件 …… 108
5.2.2 连接件 …… 108
5.2.3 架构配置 …… 109
5.3 几种典型的ADL …… 109
5.3.1 Aesop …… 109
5.3.2 C2 SADL …… 110
5.3.3 UniCon …… 114
5.3.4 Wright …… 116
5.3.5 XYZ/ADL …… 117
5.3.6 ACME …… 118
5.3.7 XBA …… 118
5.3.8 ABC/ADL …… 120
5.3.9 MetaH …… 121
5.3.10 Rapide …… 121
5.3.11 Darwin …… 122
5.3.12 xADL 2.0 …… 122
5.4 本章小结 …… 123
思考题 …… 123
参考文献 …… 123
第6章 软件架构与敏捷开发 …… 125
6.1 软件开发的发展简史 …… 125
6.2 敏捷开发 …… 127
6.2.1 敏捷开发的基本理念 …… 127
6.2.2 敏捷开发实践 …… 128
6.3 敏捷开发过程中的软件架构设计 …… 130
6.3.1 需求分析 …… 130
6.3.2 初始设计 …… 130
6.3.3 迭代过程 …… 130
6.3.4 敏捷的设计思想 …… 131
6.4 两类常见的敏捷软件架构设计方法 …… 132
6.4.1 敏捷开发初始阶段设计 …… 133
6.4.2 敏捷开发迭代过程中的设计 …… 134
6.5 本章小结 …… 136
思考题 …… 137
参考文献 …… 137
中篇 工程实践篇
第7章 架构驱动的软件开发 …… 140
7.1 架构驱动的软件开发简介 …… 140
7.2 架构需求获取 …… 140
7.3 架构设计、文档化和评估 …… 144
7.3.1 架构设计、文档化和评估是一个迭代过程 …… 144
7.3.2 什么是架构的结构 …… 147
7.3.3 从架构需求出发的评估 …… 148
7.3.4 寻找ATAM中的“权衡点”和“敏感点” …… 149
7.4 架构的实现与维护 …… 151
7.4.1 架构的实现 …… 151
7.4.2 架构的维护 …… 152
7.5 本章小结 …… 152
思考题 …… 152
参考文献 …… 153
第8章 软件架构设计和实现 …… 154
8.1 从需求分析到架构设计 …… 154
8.1.1 软件架构对需求的影响 …… 155
8.1.2 基于软件需求的软件架构设计 …… 156
8.1.3 需求与架构的协同演化 …… 163
8.2 从软件架构到详细设计 …… 163
8.2.1 详细设计对软件架构的影
前 言
软件架构(Software Architecture,SA)设计是成熟软件开发过程中的一个重要环节,它不仅是连接用户需求和进一步设计、实现的桥梁,也是软件开发早期阶段质量保证的关键步骤。无数例子告诉我们,那些忽视SA设计质量的企业终的教训总是惨痛的。SA是软件系统的一种整体的高层次结构表示,是系统的骨架和根基,决定了软件系统的健壮性和生命周期长短。“根基不稳,大厦将倾”这句话在软件系统中同样适用。
近几年,在与大型企业的合作过程中笔者更加感觉到SA的重要性,大量的试验已经证明SA不仅与软件产品的质量属性(如安全性、可靠性、可维护性等)有关,还与软件产品的寿命有关。一个设计不够完善的SA存在脆弱性问题,容易招致恶意攻击,严重时会带来安全风险;一个设计不够完善的SA也有可能存在难以维护和扩展的问题,导致升级困难,影响软件产品的寿命,等等。
如你所知,在物理世界中,房屋、桥梁、汽车的架构等都是决定它们质量好坏和生命周期长短的重要因素之一;同样,在软件世界中,SA也是决定软件质量好坏和软件生命周期长短的重要因素之一。好的SA会使得软件自身的性能、可靠性、安全性、可维护性等质量指标能够很好地满足用户的需求,不好的SA会导致所有这些指标或部分指标达不到用户要求。可见,“SA设计非常重要!那么,如何在实践中设计和实现一个好的SA,如何评价某个SA的好与不好,以及如何控制SA的设计和演化过程,以便获得质量更高的SA?这些都是软件利益相关者日常关注的问题。
本书全面介绍了SA,从SA发展的历史、现在到可能的未来,从SA的基础理论方法到技术手段,从SA的设计开发实践到质量保障实践,从静态SA到动态SA再到运行态SA等,涵盖了SA涉及的几乎所有必要的知识点。本书包括三篇:基础理论篇(上篇)包含6章内容,详细介绍了SA的基础理论方法和技术手段;工程实践篇(中篇)包含10章内容,详细介绍了SA的开发实践和质量保障实践;未来主题篇(下篇)包含7章内容,详细介绍了SA的新研究主题、新业界关注点以及SA未来发展趋势等。
本书的读者对象如下:
作为高等学校软件工程、计算机科学技术、网络空间安全等相关学科的入门级教科书,面向高年级本科生和研究生;
作为SA研究人员的参考书,本书讨论的SA度量、仿真、验证、评估等各种质量保障技术,以及解耦、技术债、演化、重构等各种软件架构主题,为相关研究人员提供了很好的启迪和行动指南;
作为软件架构师及其他工程技术人员的工具书,本书针对SA进行全方位介绍,涵盖了与SA相关的几乎所有知识点,为系统地学习和熟练掌握SA提供了所需的各方面知识。
由于本书的定位是软件架构入门级教材,我们将为广大教师和学生提供丰富的教学和学习资源(可从华章网站www.hzbook.com获取),包括课件、思考题解答、案例库、训练题库,以及部分在线的软件架构监控、仿真、度量、验证和重构等原型工具。
参与本书撰写的人员主要是来自东南大学软件工程研究所、计算机科学与工程学院的教师,包括李必信博士、廖力博士、王璐璐博士、周颖博士、孔祥龙博士等,其中李必信博士负责规划全书内容和结构,并参与所有章节的撰写,其他几位老师分别参与部分章节的撰写以及全书的校订和完善工作。软件工程研究所的部分博士后、博士生和硕士生参与了文字校对和画图等工作,他们是李宗花、董瑞志、刘辉辉、王桐、熊壬浩、王丽、宋启威、韩伟娜、李慧丹、谢仁松、杨安奇、杜鹏程、尹强、宋震天、汪小飞、苏晓威、段鹏飞、王家慧、汤立辉、杜成杰、程昕云、张理想、张春光、廖飞龙、许周等。
在本书写作过程中,还得到了来自武汉大学的应时教授和梁鹏教授、大连理工大学的江贺教授、南京大学的郑滔教授、华为公司的吴文胜先生的指导和帮助,在此对他们的辛苦劳动表示衷心的感谢。
限于水平,作者对软件架构的理解和语言表达难免存在不当之处,在此敬请读者批评指正。
近几年,在与大型企业的合作过程中笔者更加感觉到SA的重要性,大量的试验已经证明SA不仅与软件产品的质量属性(如安全性、可靠性、可维护性等)有关,还与软件产品的寿命有关。一个设计不够完善的SA存在脆弱性问题,容易招致恶意攻击,严重时会带来安全风险;一个设计不够完善的SA也有可能存在难以维护和扩展的问题,导致升级困难,影响软件产品的寿命,等等。
如你所知,在物理世界中,房屋、桥梁、汽车的架构等都是决定它们质量好坏和生命周期长短的重要因素之一;同样,在软件世界中,SA也是决定软件质量好坏和软件生命周期长短的重要因素之一。好的SA会使得软件自身的性能、可靠性、安全性、可维护性等质量指标能够很好地满足用户的需求,不好的SA会导致所有这些指标或部分指标达不到用户要求。可见,“SA设计非常重要!那么,如何在实践中设计和实现一个好的SA,如何评价某个SA的好与不好,以及如何控制SA的设计和演化过程,以便获得质量更高的SA?这些都是软件利益相关者日常关注的问题。
本书全面介绍了SA,从SA发展的历史、现在到可能的未来,从SA的基础理论方法到技术手段,从SA的设计开发实践到质量保障实践,从静态SA到动态SA再到运行态SA等,涵盖了SA涉及的几乎所有必要的知识点。本书包括三篇:基础理论篇(上篇)包含6章内容,详细介绍了SA的基础理论方法和技术手段;工程实践篇(中篇)包含10章内容,详细介绍了SA的开发实践和质量保障实践;未来主题篇(下篇)包含7章内容,详细介绍了SA的新研究主题、新业界关注点以及SA未来发展趋势等。
本书的读者对象如下:
作为高等学校软件工程、计算机科学技术、网络空间安全等相关学科的入门级教科书,面向高年级本科生和研究生;
作为SA研究人员的参考书,本书讨论的SA度量、仿真、验证、评估等各种质量保障技术,以及解耦、技术债、演化、重构等各种软件架构主题,为相关研究人员提供了很好的启迪和行动指南;
作为软件架构师及其他工程技术人员的工具书,本书针对SA进行全方位介绍,涵盖了与SA相关的几乎所有知识点,为系统地学习和熟练掌握SA提供了所需的各方面知识。
由于本书的定位是软件架构入门级教材,我们将为广大教师和学生提供丰富的教学和学习资源(可从华章网站www.hzbook.com获取),包括课件、思考题解答、案例库、训练题库,以及部分在线的软件架构监控、仿真、度量、验证和重构等原型工具。
参与本书撰写的人员主要是来自东南大学软件工程研究所、计算机科学与工程学院的教师,包括李必信博士、廖力博士、王璐璐博士、周颖博士、孔祥龙博士等,其中李必信博士负责规划全书内容和结构,并参与所有章节的撰写,其他几位老师分别参与部分章节的撰写以及全书的校订和完善工作。软件工程研究所的部分博士后、博士生和硕士生参与了文字校对和画图等工作,他们是李宗花、董瑞志、刘辉辉、王桐、熊壬浩、王丽、宋启威、韩伟娜、李慧丹、谢仁松、杨安奇、杜鹏程、尹强、宋震天、汪小飞、苏晓威、段鹏飞、王家慧、汤立辉、杜成杰、程昕云、张理想、张春光、廖飞龙、许周等。
在本书写作过程中,还得到了来自武汉大学的应时教授和梁鹏教授、大连理工大学的江贺教授、南京大学的郑滔教授、华为公司的吴文胜先生的指导和帮助,在此对他们的辛苦劳动表示衷心的感谢。
限于水平,作者对软件架构的理解和语言表达难免存在不当之处,在此敬请读者批评指正。
李必信
评论
还没有评论。