软件架构设计

软件架构设计
作 者: 温昱
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 软件工程
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  温昱,资深咨询顾问,CSAI特聘高级顾问,软件架构专家,软件架构思想的传播者和积极推动者。十年系统规划、架构设计和研发管理经验,在金融、航空、多媒体、网络管理、中间件平台等领域负责和参与多个大型系统的规划、设计、开发与管理。在《程序员》杂志、IBM DeveloperWorks等媒体发表了《图论思想与UML应用》、《敏捷设计从理论到实践》、《随需而变的RUP》等文章数十篇。译著有《应用框架的设计与实现——NET平台》等。松耦合空间(www.ou-he.com)网站创办人。

内容简介

本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念、阐述了切实可行的软件架构设计方法、提供了可操作性极强的完整的架构设计过程。另外,本书从思维方式的突破、面向对象设计、UML建模、过程与管理等关键过渡环节,为广大程序员的成长提供了切中肯綮的指导。本书可作为计算机软件专业本科生、研究生和软件工程硕士的软件架构设计教材,也可作为软件开发高级培训、软件开发管理培训的培训教材,更是第一线高级开发人员和开发管理人员的必备参考书。

图书目录

第一部分 软件架构概念与思想篇. 1

第1章 解析软件架构概念 3

1.1 软件架构概念的分类 3

1.1.1 组成派 4

1.1.2 决策派 5

1.2 软件架构概念大观

1.2.1 Booch. Rumbaugh和Jacobson的定义 5

1.2.2 Woods的观点 6

1.2.3 Garlan和Shaw的定义 6

1.2.4 Perry和Wolf的定义 6

1.2.5 Boehm的定义 6

1.2.6 IEEE的定义 6

1.2.7 Bass的定义 6

1.3 软件架构关注分割与交互 7

1.4 软件架构是一系列有层次性的决策 8

1.5 PM Tool案例:领会软件架构概念 10

1.5.1 案例故事 10

1.5.2 软件架构概念的体现 12

1.5.3 重要结论 14

1.6 总结与强调 14

第2章 子系统. 框架与架构 15

2.1 子系统和框架在架构设计中的地位 16

2.1.1 关注点分离之道 16

2.1.2 子系统和框架在架构设计中的地位 17

2.2 子系统与软件架构 19

2.2.1 不同粒度的软件单元 20

2.2.2 子系统也有架构 21

2.2.3 子系统不同,28架构不同 21

2.2.4 不同实践者眼中的粒度 23

2.3 框架与软件架构 23

2.3.1 框架的概念 23

2.3.2 架构和框架的区别 24

2.3.3 架构和框架的联系 25

2.3.4 框架也有架构 26

2.4 超越概念:立足实践理解架构 26

2.4.1 理解架构 26

2.4.2 回到实践 28

2.5 专题:框架技术 29

2.5.1 框架vs.类库 29

2.5.2 框架的分类 30

2.5.3 框架的开发过程 32

2.5.4 如何实现框架中的扩展点 33

2.6 总结与强调 36

第3章 软件架构的作用 37

3.1 充分发挥软件架构的作用 37

3.2 软件架构对新产品开发的作用 38

3.3 软件架构对软件产品线开发的作用 40

3.4 软件架构对软件维护的作用 42

3.5 软件架构重构 42

3.6 总结与强调 43

第二部分 软件架构设计方法与过程篇 45

第4章 软件架构视图 47

4.1 呼唤软件架构视图 47

4.1.1 办公室里的争论 48

4.1.2 呼唤软件架构视图 48

4.2 软件架构为谁而设计 49

4.2.1 为用户而设计 49

4.2.2 为客户而设计 50

4.2.3 为开发人员而设计 50

4.2.4 为管理人员而设计 51

4.2.5 总结 51

4.3 引入软件架构视图 52

4.3.1 生活中的“视图”运用 53

4.3.2 什么是软件架构视图 54

4.3.3 多组涉众,65多个视图 54

4.4 实践指南:逻辑架构与物理架构 55

4.4.1 逻辑架构 56

4.4.2 物理架构 57

4.4.3 从逻辑架构和物理架构到设计实现 58

4.5 设备调试系统案例:领会逻辑架构和物理架构 59

4.5.1 设备调试系统案例简介 59

4.5.2 逻辑架构设计 59

4.5.3 物理架构设计 61

4.6 总结与强调 62

第5章 架构设计的5视图法 63

5.1 架构设计的5视图法 64

5.2 实践中的5视图方法 66

5.3 办公室里的争论:回顾与落实 67

5.4 案例:再谈设备调试系统 67

5.4.1 根据需求决定引入哪些架构视图 68

5.4.2 开发架构设计 68

5.4.3 运行架构设计 69

5.5 总结与强调 71

第6章 从概念性架构到实际架构 73

6.1 概念性架构 73

6.2 实际架构 77

6.3 从概念性架构到实际架构 78

6.4 网络管理系统案例:从分层架构开始 78

6.4.1 构思:概念性架构设计 78

6.4.2 深入:实际架构设计 81

6.5 总结与强调 82

第7章 如何进行成功的架构设计 83

7.1 何谓成功的软件架构设计 83

7.2 探究成功架构设计的关键要素 84

7.2.1 是否遗漏了至关重要的非功能需求 84

7.2.2 能否驯服数量巨大且频繁变化的需求 86

7.2.3 能否从容设计软件架构的不同方面 86

7.2.4 是否及早验证架构方案并做出了调整 87

7.3 制定软件架构设计策略 87

7.3.1 策略一:全面认识需求 88

7.3.2 策略二:关键需求决定架构 89

7.3.3 策略三:多视图探寻架构 89

7.3.4 策略四:尽早验证架构 90

7.4 总结与强调 90

第8章 软件架构要设计到什么程度 93

8.1 软件架构要设计到什么程度 94

8.1.1 分而治之的两种方式 94

8.1.2 架构设计与详细设计 96

8 .1.3 软件架构是团队开发的基础 96

8.1.4 架构设计要进行到什么程度 98

8.2 高来高去式架构设计的症状 98

8.2.1 缺失重要架构视图 99

8.2.2 浅尝辄止. 不够深入 100

8.2.3 名不副实的分层架构 101

8.3 如何克服高来高去症 101

8.4 网络管理系统案例:如何将架构设计落到实处 102

8.4.1 网管产品线的概念性架构 102

8.4.2 识别每一层中的功能模块 102

8.4.3 明确各层之间的交互接口 103

8.4.4 明确各层之间的交互机制 104

8.4.5 案例小结 105

8.5 总结与强调 105

第9章 软件架构设计过程 107

9.1 打造有效的架构设计过程 107

9.1.1 一般的软件过程 107

9.1.2 架构师自己的架构设计过程 109

9.2 软件架构设计过程解析 111

9.2.1 架构设计策略应成为一等公民 111

9.2.2 架构设计过程中的工作产品 112

9.3 总结与强调 114

第10章 需求分析 115

10.1 软件需求基础 116

10.1.1 什么是软件需求 116

10.1.2 需求捕获vs.需求分析vs.系统分析 116

10.1.3 需求捕获及其工作成果 118

10.1.4 需求分析及其工作成果 118

10.1.5 系统分析及其工作成果 119

10.2 需求分析在软件过程中所处的位置 120

10.2.1 概念化阶段所做的工作 120

10.2.2 需求分析所处的位置 122

10.3 架构师必须掌握的需求知识 123

10.3.1 软件需求的类型 123

10.3.2 各类需求对架构设计的不同影响 .. 127

10.3.3 超市系统案例:领会需求类型的不同影响 129

10.3.4 各类需求的“易变更性”不同 130

10.3.5 质量属性需求与需求折衷 132

10.4 PM Tool实战:需求分析 135

10.4.1 上游活动:确定项目愿景 135

10.4.2 第1步:从业务目标到特性列表 135

10.4.3 第2步:从特性列表到用例图 136

10.4.4 第3步:从用例图到用例规约 138

10.4.5 需求启发与需求验证 139

10.4.6 最终成果:《软件需求规格说明书》 140

10.5 总结与强调 141

第11章 专题:用例技术及应用 143

11.1 用例图vs.用例简述vs.用例规约vs.用例实现 143

11.2 储蓄系统案例:需求变化对用例的影响 148

11.3 用例技术应用指南 150

11.4 用例与需求捕获 152

11.5 用例与需求分析 153

11.6 用例与《软件需求规格说明书》 154

11.7 总结与强调 155

第12章 领域建模 157

12.1 领域模型基础知识 157

12.1.1 什么是领域模型 158

12.1.2 领域模型相关的UML图 158

12.2 领域建模在软件过程中所处的位置 159

12.2.1 领域建模的必要性:从需求分析的两个典型困难说起 159

12.2.2 领域建模与需求分析的关系 161

12.2.3 领域建模所处的位置 162

12.3 领域模型对软件架构的重要作用 163

12.3.1 配置管理工具案例:探索复杂问题. 固化领域知识 163

12.3.2 人事管理系统案例:决定功能范围. 影响可扩展性 165

12.3.3 在线拍卖系统案例:提供交流基础. 促进有效沟通 168

12.4 领域模型 vs. 文字说明 170

12.5 PM Tool实战:建立项目管理的领域模型 171

12.5.1 领域建模实录(1) 171

12.5.2 领域建模实录(2) 174

12.6 总结与强调 176

第13章 确定对软件架构关键的需求 177

13.1 虚拟高峰论坛:穷兵黩武还是择战而斗 177

13.1.1 需求是任何促成设计决策的因素 178

13.1.2 很少有开发者能奢侈地拥有一个稳定的需求集 178

13.1.3 关键性的第一步是缩小范围 178

13.1.4 要择战而斗 178

13.1.5 功能. 质量和商业需求的某个集合塑造了构架 179

13.2 关键需求决定架构 179

13.2.1 实践中的常见问题 179

13.2.2 关键需求决定架构 181

13.3 确定关键需求在软件过程中所处的位置 182

13.3.1 对架构关键的需求vs.需求优先级 182

13.3.2 关键需求对后续活动的影响 183

13.4 什么是对软件架构关键的需求 184

13.4.1 关键的功能需求 184

13.4.2 关键的质量属性需求 185

13.4.3 关键的商业需求 186

13.5 如何确定对软件架构关键的需求 187

13.5.1 全面整理需求 188

13.5.2 分析约束性需求 188

13.5.3 确定关键功能需求 189

13.5.4 确定关键质量属性需求 190

13.6 PM Tool实战:确定关键需求 190

13.7 总结与强调 191

第14章 概念性架构设计 193

14.1 概念性架构设计的步骤 194

14.2 鲁棒性分析 195

14.2.1 分析和设计之间的鸿沟 195

14.2.2 鲁棒图简介 196

14.2.3 从用例到鲁棒图 197

14.3 运用架构模式 198

14.3.1 架构模式简介 198

14.3.2 架构模式的经典分类 199

14.3.3 架构模式的现代分类 200

14.3.4 分层 201

14.3.5 MVC 201

14.3.6 微内核 202

14.3.7 基于元模型的架构 203

14.3.8 管道—过滤器 204

14.4 PM Tool实战:概念性架构设计 204

14.4.1 进行鲁棒性分析 204

14.4.2 引入架构模式 206

14.4.3 质量属性分析 207

14.4.4 设计结果 207

14.5 总结与强调 208

第15章 质量属性分析 209

15.1 质量属性需求基础 210

15.2 质量属性分析的位置 211

15.3 利用“属性—场景—决策”表设计架构决策 211

15.3.1 概述 211

15.3.2 “属性—场景—决策”表方法 212

15.3.3 题外话:《需求文档》如何定义质量属性需求 214

15.4 PM Tool实战:可扩展性设计 214

15.5 总结与强调 215

第16章 细化架构设计 217

16.1 架构细化在软件过程中所处的位置 218

16.1.1 我们走到哪了 218

16.1.2 运用基于5视图方法进行架构细化 219

16.2 设计逻辑架构 220

16.2.1 概述 220

16.2.2 识别通用机制 220

16.3 设计开发架构 223

16.3.1 概述 223

16.3.2 分层和分区 223

16.4 设计数据架构 226

16.4.1 概述 226

16.4.2 如何将OO模型映射为数据模型 227

16.5 设计运行架构 229

16.5.1 概述 229

16.5.2 运用主动类规划并发 230

16.5.3 应用协议的设计 234

16.6 设计物理架构 234

16.6.1 概述 234

16.7 注意满足所有约束性软件需求 235

16.8 PM Tool实战:细化架构设计 236

16.9 总结与强调 239

第17章 实现并验证软件架构 241

17.1 基础知识 242

17.1.1 原型技术及分类 242

17.1.2 验证架构的两种方法 245

17.2 实现并验证软件架构的具体做法 245

17.3 总结与强调 247

第三部分 程序员成长篇 249

第18章 MIME编码类案例: 从面向过程到面向对象 251

18.1 设计目标 251

18.2 MIME编码基础知识 252

18.3 MIME编码类的设计过程 252

18.3.1 面向过程的设计方案 252

18.3.2 转向面向对象设计 254

18.3.3 面向对象设计方案的确定 257

18.3.4 Template Method和Strategy模式的对比 260

第19章 突破OOP思维:继承在OOD中的应用 261

19.1 从一则禅师语录说起 261

19.1.1 见继承是继承——程序员境界 262

19.1.2 见继承不是继承——成长境界 262

19.1.3 见继承只是继承——设计师境界 262

19.2 从OOD层面认识继承 262

19.3 针对接口编程——隔离变化 263

19.3.1 相关理论 263

19.3.2 针对接口编程举例——用于架构设计 263

19.3.3 针对接口编程举例——用于类设计 265

19.4 混入类——更好的重用性 266

19.4.1 相关理论 266

19.4.2 混入类举例 266

19.5 基于角色的设计——使用角色组装协作 267

19.5.1 相关理论 267

19.5.2 基于角色的设计举例 268

第20章 细微见真章:耦合其实并不空洞 269

20.1 顺序耦合性简介 269

20.2 案例研究:顺序耦合性Bug一例 269

20.2.1 项目简介 270

20.2.2 新的需求 270

20.2.3 发现顺序耦合性Bug 271

20.2.4 跟踪调试 271

20.2.5 分析原因 273

20.2.6 解决策略 273

20.2.7 运用重构的“Extra t Method”成例 273

20.2.8 运用重构的“Hide Method”成例 274

20.2.9 运用重构的“Introdu e Parameter Obje t”成例 274

20.2.10 其他改进 274

第21章 敏捷设计:从理论到实践 277

21.1 换个角度考察依赖 278

21.1.1 依赖的概念 278

21.1.2 从会不会造成“实际危害”的角度考察依赖 278

21.2 良性依赖原则 278

21.2.1 依赖是不可避免的 278

21.2.2 重要的是如何务实地应付变化 279

21.3 案例:需求改变引起良性依赖变成恶性依赖 279

21.4 案例:隔离第三方SDK可能造成的冲击 281

21.5 案例:对具体类的良性依赖 283

21.6 总结:如何处理好依赖关系 285

第22章 基于角色的设计:从理论到实践 287

22.1 基于角色的设计理论 288

22.2 基于角色的设计与团队开发 288

22.3 基于角色的设计实践 289

22.4 基于角色的设计案例 291

22.4.1 项目简介 291

22.4.2 通过基于角色的设计组织子系统之间的协作 291

22.4.3 通过基于角色的设计组织同一子系统内不同模块之间的协作 292

22.5 基于角色的设计与面向对象分析 293

第23章 超越设计模式:理解和运用更多模式 295

23.1 关于模式的两个问题 295

23.2 模式的正交分类法 296

23.2.1 正交思维 296

23.2.2 正交思维用于模式分类 297

23.3 专攻性能:性能模式简介 299

23.4 模型驱动开发的方方面面:MDD模式简介 301

23.5 总结:拥抱模式 302

第24章 如此轻松:立足图论学UML 303

24.1 管窥UML中的OO思想 304

24.1.1 一道笔试题的故事 304

24.1.2 UML背后的思想 305

24.2 图的定义与UML应用 306

24.2.1 图的定义 306

24.2.2 图的定义的UML应用——UML的图论观点 307

24.2.3 图的定义的UML应用——关联类语法的理解 308

24.2.4 图的定义的UML应用——说说序列图 309

24.3 有向边与UML应用 310

24.3.1 有向边 310

24.3.2 有向边的UML应用——依赖关系 310

24.3.3 有向边的UML应用——泛化. 实现和关联的依赖思想 312

24.3.4 有向边的UML应用——一个例子 312

24.4 着色顶点与UML应用 313

24.4.1 着色顶点 313

24.4.2 着色顶点的UML应用——通过颜色为图元分类 314

24.4.3 着色顶点的UML应用——UML彩色建模方法介绍 315

24.5 着色边与UML应用 317

24.6 图的同构与UML应用 317

24.6.1 图的同构 317

24.6.2 图的同构的UML应用——UML风格 318

第25章 理解软件过程:解析RUP核心概念 321

25.1 架构师必须了解软件过程 321

25.1.1 架构师的工作职责 321

25.1.2 架构师必须了解软件过程 322

25.2 RUP实践中的常见问题 322

25.3 RUP核心概念解析 323

25.3.1 一图胜千言 323

25.3.2 角色执行活动,357活动生产工件 323

25.3.3 阶段和迭代:提供不同级别的决策时机 324

25.3.4 配置和变更管理支持迭代式的基于基线的开发 326

25.3.5 发布是什么,360发布不是什么 327

第26章 海阔凭鱼跃:通盘理解软件工程 329

26.1 什么是软件工程概念模型 329

26.2 一个精简的软件工程概念模型 329

26.3 一个细化的软件工程概念模型 330

26.3.1 模型概述 331

26.3.2 方法论 331

26.3.3 过程 331

26.3.4 目标 332

26.3.5 项目 332

26.3.6 其他 333

26.4 软件工程概念模型的具体应用 333

26.4.1 搞清楚Agile是过程还是方法论 333

26.4.2 为CMM定位 334

26.4.3 理解RUP定制 335

26.5 总结:软件工程概念模型的启示 335

26.5.1 软件工程,376一门实践的科学 335

26.5.2 软件过程,377合适的才是最好的 336

26.5.3 对个人的启示 336

26.5.4 呼唤高层次人才 336

参考文献 337