上卷目录
上卷目录 . . . . . . . . . . . . . . . . i-i
上卷导读 . . . . . . . . . . . . . . . 1
实证软件工程 . . . . . . . . . . 1
软件技术成熟过程 . . . . . . . . 2
Redwine–Riddle技术成熟论 2
Gartner技术成熟度曲线 . . 3
软件工程技术框架 . . . . . . . . 4
软件生命期模型 . . . . . . . 4
软件开发
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
. . . . . . . . 5
上卷篇章简介 . . . . . . . . . . 5
尾语 . . . . . . . . . . . . . . . 6
第一篇 软件工程学概论 . . . . . 7
第 1 章 软件概论 . . . . . . . . . . 9
1.1 软件概述 . . . . . . . . . . 10
1.1.1 什么是软件? . . . . . 10
1.1.2 软件分类 . . . . . . . 12
1.1.3 软件的基本特征 . . . 12
1.2 软件复杂性 . . . . . . . . . 13
1.2.1 复杂性与软件 . . . . 14
软件复杂性常识 . . . . 14
软件为什么复杂? . . . 14
Brooks难度论 . . . . 15
复杂度与 “坏”问题 . . 16
1.2.2 复杂性简化理念 . . . 17
1.3 软件频变性 . . . . . . . . . 19
1.3.1 万物皆变 . . . . . . . 19
1.3.2 频变性与软件 . . . . 20
频变性常识 . . . . . . 20
需求全程频变 . . . . . 20
软件为什么频变? . . . 21
变更的影响 . . . . . . 22
1.3.3 频变性应对理念 . . . 22
1.4 软件商品性 . . . . . . . . . 24
1.4.1 商品性常识 . . . . . 24
1.4.2 商品性遵从理念 . . . 25
知识要点回顾 . . . . . . . . . . 26
经典著作推荐 . . . . . . . . . . 27
第 2 章 软件工程概论 . . . . . . . 29
2.1 引言 . . . . . . . . . . . . 30
2.2 软件危机 . . . . . . . . . . 30
2.2.1 什么是软件危机? . . . 30
2.2.2 危机存在的实证 . . . 31
2.2.3 危机存在的原因 . . . 32
2.3 软件工程概述 . . . . . . . . 33
2.3.1 什么是工程? . . . . . 33
2.3.2 什么是软件工程? . . . 34
2.3.3 核心问题 . . . . . . . 35
2.3.4 “魔鬼四角” . . . . . . 36
2.3.5 四大挑战 . . . . . . . 37
挑战一 规模 . . . . . 37
规模改变一切 . . . 37
DeRemer定律 . . 38
挑战二 生产率和质量 . 38
Brooks “银弹”定律 39
Mills生产率定律 . 40
挑战三 可重复性 . . . 41
挑战四 频变性 . . . . 42
其他挑战 . . . . . . . 42
2.3.6 四方满意度 “天平” . . 43
四方关键权益人 . . . . 43
“天平均衡”理念 . . . . 43
��i-ii��
2.4 软件工程学科 . . . . . . . . 44
2.4.1 学科性质 . . . . . . . 44
2.4.2 发展简史 . . . . . . . 45
2.4.3 知识体系 . . . . . . . 48
2.4.4 核心知识体 (SECBOK) 49
五大核心知识形态 . . . 49
核心知识的价值 . . . . 50
知识要点回顾 . . . . . . . . . . 51
扩展阅读 . . . . . . . . . . . . . 52
第 3 章 软件质量概论 . . . . . . . 53
3.1 走近 “质量” . . . . . . . . . 54
3.1.1 什么是质量? . . . . . 54
3.1.2 质量的基本特征 . . . 55
3.2 软件质量概述 . . . . . . . . 55
3.2.1 什么是软件质量? . . . 56
3.2.2 质量标准模型 . . . . 56
3.2.3 高质量软件的特征 . . 58
3.3 论 “质量第一” . . . . . . . . 59
3.3.1 “质量价值”常识 . . . 59
3.3.2 “适度质量”定律 . . . 59
3.3.3 “质量第一”法则 . . . 61
知识要点回顾 . . . . . . . . . . 63
经典著作推荐 . . . . . . . . . . 63
第 4 章 软件工程师概论 . . . . . . 65
4.1 职业简介 . . . . . . . . . . 66
4.1.1 软件工程师概述 . . . 66
范围与分类 . . . . . . 66
五大挑战 . . . . . . . 66
4.1.2 职业路线图 . . . . . 67
4.2 基本素质 . . . . . . . . . . 70
4.3 职业道德和操守 . . . . . . 71
4.4 专业实践 . . . . . . . . . . 72
4.4.1 角色、责任和技能 . . . 72
细分角色 . . . . . . . 72
基本责任 . . . . . . . 73
学者的技能观 . . . . . 73
实践者的技能观 . . . . 74
4.4.2 团队动力学 . . . . . 75
4.4.3 交流技能 . . . . . . . 75
4.5 浅议人性 . . . . . . . . . . 76
4.6 后话 . . . . . . . . . . . . 79
知识要点回顾 . . . . . . . . . . 81
经典著作推荐 . . . . . . . . . . 81
扩展阅读 . . . . . . . . . . . . . 82
第二篇 软件生命期 . . . . . . . 83
第 5 章 软件生命期概论 . . . . . . 85
5.1 软件生命期 . . . . . . . . . 86
5.1.1 什么是生命期? . . . . 86
5.1.2 软件为什么出生? . . . 86
5.1.3 软件为什么死亡? . . . 87
5.2 生命期模型和阶段化 . . . . 88
5.2.1 阶段化生命期常识 . . 88
5.2.2 生命期模型 . . . . . 88
5.2.3 开发 vs.维演 . . . . 89
5.2.4 维护 vs.演化 . . . . 90
知识要点回顾 . . . . . . . . . . 91
经典著作推荐 . . . . . . . . . . 92
第 6 章 软件开发模型概论 . . . . . 93
6.1 软件开发模型 . . . . . . . . 94
6.1.1 主要开发阶段 . . . . 94
需求工程 . . . . . . . 95
软件设计 . . . . . . . 96
软件构造 . . . . . . . 97
质量控制 . . . . . . . 97
阶段成本分配决策 . . . 99
6.1.2 阶段化开发法则 . . . 100
向下信息传递 (DIT)法则 100
向上信息恢复 (UIR)法则 100
6.1.3 开发模型简介 . . . . 101
如何选择开发模型? . . 101
主流开发模型一览 . . . 102
6.2 Royce (瀑布)开发模型 . . . 103
6.2.1 Royce (瀑布)模型 . . 103
6.2.2 “先设计后测试”常识 . 104
6.2.3 小议 “前置大设计” . . 104
6.2.4 模型的实践
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
现 . . . 105
��i-iii��
6.3 原型开发模型 . . . . . . . . 106
6.3.1 软件原型 . . . . . . . 106
什么是原型? . . . . . 106
原型分类 . . . . . . . 106
6.3.2 原型 vs.产品 . . . . 107
6.3.3 原型开发流程 . . . . 108
6.3.4 原型开发核心知识 . . 108
快速原型开发法则 . . . 108
筛选原型需求实践 . . . 109
“原型病”定律 . . . . . 110
6.4 面向 “切面”开发 (AOSD)模型 110
6.4.1 基本概念 . . . . . . . 110
6.4.2 AOSD的动机 . . . . 111
6.4.3 AOSD的 “切面”实现 112
6.4.4 AOSD模型 . . . . . 113
AOSD模型框架 . . . . 113
“切面编织器” . . . . . 114
6.4.5 应用现况与研究趋势 . 115
面向 “切面”的编程 (AOP) 115
从编程到需求和设计 . . 115
从面向对象到面向切面 . 115
知识要点回顾 . . . . . . . . . . 116
经典著作推荐 . . . . . . . . . . 117
第 7 章 增量—迭代型开发模型 . . 119
7.1 增量—迭代开发模型 . . . . 120
7.1.1 增量和迭代模型 . . . 120
7.1.2 增量—迭代开发理念 . 121
7.2 瑞理统一过程 (RUP)模型 . 122
7.2.1 RUP概念与过程 . . . 122
7.2.2 RUP六项实践 . . . . 124
7.3 敏捷
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
. . . . . . . . . . 124
7.3.1 敏捷方法概述 . . . . 124
“敏捷宣言” . . . . . . 124
“敏捷”十二项法则 . . . 126
7.3.2 Scrum方法 . . . . . 127
Scrum角色 . . . . . 128
Scrum流程 . . . . . 128
7.3.3 极限编程 (XP)方法 . . 129
XP五项价值观 . . . . 129
XP通用流程 . . . . . 130
XP十二项实践 . . . . 131
7.3.4 敏捷方法的实践表现 . 132
敏捷模型是主流 . . . . 132
敏捷项目易成功 . . . . 133
敏捷方法效应 . . . . . 133
敏捷项目成本趋势 . . . 134
敏捷项目与团队 . . . . 135
“敏捷”工程师的偏好 . . 136
知识要点回顾 . . . . . . . . . . 137
经典著作推荐 . . . . . . . . . . 137
第 8 章 复用型开发模型 . . . . . . 139
8.1 软件复用概述 . . . . . . . . 140
8.1.1 软件复用 . . . . . . . 140
什么是复用? . . . . . 140
复用效应常识 . . . . . 140
McIlroy复用定律 . . . 141
8.1.2 复用型开发模型 . . . 142
8.2 构件组装开发 (CBSD)模型 143
8.2.1 购买 vs.定制 . . . . 143
8.2.2 CBSD模型框架 . . . 143
8.2.3 复用的制约因素 . . . 144
8.2.4 可复用性增强过程 . . 145
8.2.5 CBSD四法则 . . . . 146
构件组装开发法则 . . . 146
构件复用优先法则 . . . 147
构件组装优先法则 . . . 148
构件可复用法则 . . . . 149
8.3 软件产品线 (SPL)模型 . . . 150
8.3.1 SPL概述 . . . . . . 150
什么是SPL? . . . . . 150
产品线细分维度 . . . . 150
产品线应用现况 . . . . 151
8.3.2 SPL开发模型 . . . . 151
8.3.3 SPL实质: 批量定制 . 152
批量定制理念 . . . . . 153
平台复用效应定律 . . . 154
可变性法则 . . . . . . 154
8.3.4 SPLvs.CBSD . . . 155
8.3.5 SPL成熟度评估 . . . 155
SPL评估四维: BAPO . 155
��i-iv��
SPL评估框架: FEF . . 156
8.3.6 SPL七项最佳实践 . . 157
8.3.7 SPL企业推行法 . . . 157
知识要点回顾 . . . . . . . . . . 158
经典著作推荐 . . . . . . . . . . 159
第 9 章 论软件模型 . . . . . . . . 161
9.1 模型概述 . . . . . . . . . . 162
9.1.1 什么是模型? . . . . . 162
9.1.2 万能模型常识 . . . . 162
9.1.3 模型的基本属性 . . . 163
9.1.4 建模三法则 . . . . . 163
9.2 软件模型 . . . . . . . . . . 164
9.2.1 模型描述与分类 . . . 164
9.2.2 软件建模过程 . . . . 165
9.2.3 模型两面性常识 . . . 165
9.2.4 模型敏感性常识 . . . 166
9.2.5 模型定制理念 . . . . 166
9.2.6 建模工具的应用 . . . 167
9.3 敏捷建模法则与实践 . . . . 168
9.3.1 十三项建模法则 . . . 168
9.3.2 十八项最佳实践 . . . 169
知识要点回顾 . . . . . . . . . . 170
经典著作推荐 . . . . . . . . . . 171
第三篇 需求工程 . . . . . . . . .173
第 10 章 软件需求 . . . . . . . . . 175
10.1 需求的内涵 . . . . . . . . 176
10.1.1 什么是需求? . . . . 176
10.1.2 “做什么” vs. “怎么做” 177
10.2 需求分类 . . . . . . . . . . 178
10.2.1 广义需求分类 . . . . 178
10.2.2 功能与质量需求 . . . 178
10.2.3 FURPS分类法 . . . 179
10.2.4 Kano分类法 . . . . 180
10.2.5 架构需求 . . . . . . 181
10.3 论 “需求不足” . . . . . . . 181
10.3.1 Glass “需求不足”定律 182
10.3.2 调查实证 . . . . . . 182
10.3.3 原因分析 . . . . . . 183
10.3.4 影响分析 . . . . . . 183
10.4 需求三大特征 . . . . . . . 184
10.4.1 需求的变增性 . . . . 184
10.4.2 需求的价值不均性 . . 186
10.4.3 需求的技术钝性 . . . 187
知识要点回顾 . . . . . . . . . . 187
经典著作推荐 . . . . . . . . . . 188
第 11 章 需求工程概论 . . . . . . 189
11.1 需求工程 (RE) . . . . . . . 190
11.1.1 什么是RE? . . . . 190
11.1.2 RE关键地位 . . . . 190
11.1.3 RE三大特征 . . . . 191
11.1.4 “不完美需求”常识 . . 192
11.1.5 适度需求工程理念 . . 193
11.1.6 RE成功因子 . . . . 194
11.2 需求过程 . . . . . . . . . . 194
11.2.1 需求过程框架 . . . . 195
11.2.2 三项基本常识 . . . . 195
过程迭代并行常识 . . . 195
需求边学边做常识 . . . 196
需求创造兼复用常识 . . 196
知识要点回顾 . . . . . . . . . . 197
经典著作推荐 . . . . . . . . . . 198
第 12 章 需求前奏 . . . . . . . . . 199
12.1 需求前奏概述 . . . . . . . 200
12.2 问题定义 . . . . . . . . . . 200
12.2.1 问题定义常识 . . . . 200
12.2.2 渐进式问题定义 . . . 201
12.2.3 问题与解决方案 . . . 201
12.2.4 问题分析过程 . . . . 202
12.2.5 Xerox六步曲 . . . . 202
12.3 项目可行性分析 . . . . . . 203
12.3.1 可行性分析常识 . . . 204
12.3.2 可行性分析对象 . . . 204
12.3.3 可行性分析视角 . . . 205
12.3.4 可行性分析
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
模板 . 206
12.4 愿景定义 . . . . . . . . . . 207
12.4.1 愿景声明常识 . . . . 207
��i-v��
12.4.2 目标定义 . . . . . . 207
三级目标树 . . . . . . 207
SMART实践 . . . . . 208
12.4.3 愿景声明撰写实践 . . 209
12.4.4 愿景声明确认实践 . . 210
12.5 关注点分离 . . . . . . . . 210
12.5.1 概念复述 . . . . . . 210
12.5.2 关注点分离法则 . . . 211
知识要点回顾 . . . . . . . . . . 211
经典著作推荐 . . . . . . . . . . 212
扩展阅读 . . . . . . . . . . . . . 212
第 13 章 需求获取 . . . . . . . . . 213
13.1 需求获取概述 . . . . . . . 214
13.1.1 什么是需求获取? . . 214
13.1.2 需求获取策略 . . . . 215
13.1.3 需求获取方法 . . . . 215
常用获取方法一览 . . . 215
多法并用获取需求 . . . 216
13.2 论 “需求获取不到位” . . . 218
13.2.1 需求的 “6W1H” . . 218
13.2.2 为什么不 “到位” ? . . 218
13.2.3 “不到位”定律 . . . . 219
13.3 用例与需求 . . . . . . . . 220
13.3.1 什么是用例? . . . . 220
13.3.2 用例描述模板 . . . . 220
13.3.3 基于用例获取需求 . . 221
13.4 需求获取六项实践 . . . . . 222
13.4.1 邀请客户高管参与 . . 222
13.4.2 攀附 “贵人” . . . . . 223
13.4.3 帮助用户认清需要 . . 223
13.4.4 控制会议规模 . . . . 224
13.4.5 定义软件环境 . . . . 225
13.4.6 记录需求 “源”信息 . 225
知识要点回顾 . . . . . . . . . . 226
经典著作推荐 . . . . . . . . . . 227
第 14 章 需求分析 . . . . . . . . . 229
14.1 需求分析概述 . . . . . . . 230
14.2 需求分簇 . . . . . . . . . . 230
14.2.1 什么是需求分簇? . . 230
14.2.2 需求分簇过程 . . . . 231
14.2.3 需求分簇依据 . . . . 232
14.2.4 合理需求分簇实践 . . 233
14.3 需求依赖分析 . . . . . . . 234
14.3.1 什么是依赖关系? . . 234
14.3.2 依赖关系分类 . . . . 234
14.3.3 Pareto需求依赖分布 235
14.3.4 基于依赖的变更分析 . 236
14.4 需求优先级定义 (分级) . . 237
14.4.1 需求分级常识 . . . . 237
重要需求优先 . . . . . 237
需求优先级角力 . . . . 238
14.4.2 需求分级方法 . . . . 239
分级法分类 . . . . . . 239
层次分析法 (AHP) . . . 239
14.4.3 多依据分级实践 . . . 241
知识要点回顾 . . . . . . . . . . 242
经典著作推荐 . . . . . . . . . . 243
第 15 章 需求描述 . . . . . . . . . 245
15.1 需求成文常识 . . . . . . . 246
15.2 需求描述语言 . . . . . . . 246
15.2.1 自然语言描述 . . . . 246
默用自然语言 . . . . . 247
自然语言描述的不足 . . 247
15.2.2 形式化语言描述 . . . 248
慎用形式化语言 . . . . 248
辅以自然语言 . . . . . 249
15.3 高质量需求 . . . . . . . . 250
15.3.1 需求项的描述质量 . . 250
需求项的质量属性 . . . 250
需求项编写法则 . . . . 250
15.3.2 需求文档的编写质量 . 251
需求文档的质量属性 . . 251
需求文档编写法则 . . . 251
15.4 IEEE需求规约文档模板 . 252
15.4.1 需求模板总体结构 . . 252
15.4.2 需求模板定制实践 . . 252
15.4.3 引言 (节1) . . . . . 253
15.4.4 总体描述 (节2) . . . 254
15.4.5 详细描述 (节3) . . . 254
��i-vi��
15.4.6 需求编号并分类 . . . 255
15.4.7 需求术语表创建 . . . 255
知识要点回顾 . . . . . . . . . . 255
扩展阅读 . . . . . . . . . . . . . 256
第 16 章 需求确认 . . . . . . . . . 257
16.1 需求确认概述 . . . . . . . 258
16.1.1 什么是需求确认? . . 258
16.1.2 “确认即纠错”常识 . . 259
16.2 面向用户的需求确认 . . . 260
16.2.1 “用户优于专家”定律 260
16.2.2 用户确认需求法则 . . 261
16.3 基于审查的需求确认 . . . 262
16.3.1 什么是需求审查? . . 262
16.3.2 需求会议评审实践 . . 262
16.3.3 需求优先审查实践 . . 263
16.3.4 清单审查实践 . . . . 264
16.4 基于原型的需求确认 . . . 265
16.4.1 Boehm原型定律 . . 265
16.4.2 确认界面需求实践 . . 266
16.5 需求承诺书签订实践 . . . 266
知识要点回顾 . . . . . . . . . . 267
经典著作推荐 . . . . . . . . . . 268
第 17 章 需求管理 . . . . . . . . . 269
17.1 需求管理概述 . . . . . . . 270
17.1.1 什么是需求管理? . . 270
17.1.2 全程需求管理理念 . . 270
17.1.3 需求 “入库”常识 . . 271
17.1.4 主要管理活动 . . . . 272
17.2 需求追溯管理 . . . . . . . 273
17.2.1 什么是需求追溯? . . 273
17.2.2 需求追溯框架 . . . . 274
17.2.3 需求追溯链定义实践 . 275
17.3 需求基线管理 . . . . . . . 276
17.3.1 需求蔓延与基线 . . . 276
什么是需求蔓延? . . . 276
需求蔓延定律 . . . . . 276
什么是需求基线? . . . 276
17.3.2 砍半法 . . . . . . . 277
保守的基线定义 . . . . 277
影响基线定义的因素 . . 277
17.3.3 需求遴选实践 . . . . 278
市场部主导需求遴选 . . 278
基于时限的需求遴选 . . 279
17.4 版本化需求管理 . . . . . . 280
17.4.1 可持续开发理念 . . . 280
17.4.2 需求版本规划实践 . . 281
“看两步走一步” . . . . 281
蔓延需求统一分配 . . . 281
知识要点回顾 . . . . . . . . . . 282
经典著作推荐 . . . . . . . . . . 283
第 18 章 需求工程透析 . . . . . . 285
18.1 浅议需求标准 . . . . . . . 286
18.1.1 标准不普适定律 . . . 286
18.1.2 过程本地化实践 . . . 287
18.2 需求错误与缺陷 . . . . . . 287
18.2.1 基本概念 . . . . . . 287
18.2.2 错误与缺陷分类 . . . 288
Davis三分法 . . . . . 288
Tsumaki–Tamai细分法 289
18.2.3 需求 “缺失” . . . . . 290
什么是需求 “缺失” ? . . 290
Glass需求缺失定律 . . 290
18.2.4 相关三定律 . . . . . 290
需求缺陷与修复成本 . . 290
需求缺陷与软件规模 . . 291
需求完整性与软件规模 . 292
18.3 参与者与需求过程 . . . . . 292
18.3.1 权益人与需求过程 . . 292
“兼听则明”常识 . . . . 293
“保障话语权”法则 . . . 293
18.3.2 用户与需求过程 . . . 294
“用户是上帝”常识 . . . 294
Davis用户反馈定律 . . 294
Chaos用户两面性定律 296
用户分组实践 . . . . . 297
需求冲突协商实践 . . . 298
18.4 需求工程难题与挑战 . . . 299
18.4.1 五大实践难题 . . . . 299
18.4.2 六大研究挑战 . . . . 299
��i-vii��
知识要点回顾 . . . . . . . . . . 300
经典著作推荐 . . . . . . . . . . 301
第 19 章 需求工程师 . . . . . . . . 303
19.1 需求工程师概述 . . . . . . 304
19.1.1 “通才”+ “专才” . . . 304
19.1.2 “通才”型素质和技能 304
19.1.3 “专才型”素质和技能 305
19.1.4 五大角色 . . . . . . 306
19.2 需求团队建设 . . . . . . . 307
19.2.1 精简需求团队实践 . . 307
19.2.2 “聪明的无知人” . . . 308
知识要点回顾 . . . . . . . . . . 309
扩展阅读 . . . . . . . . . . . . . 309
第四篇 软件设计 . . . . . . . . .311
第 20 章 软件设计概论 . . . . . . 313
20.1 设计基础 . . . . . . . . . . 314
20.1.1 什么是设计? . . . . 314
20.1.2 什么是软件设计? . . 315
20.1.3 高质量设计的要求 . . 316
20.2 软件设计五常识 . . . . . . 317
20.2.1 “按需”设计常识 . . . 317
20.2.2 设计技术抉择常识 . . 318
20.2.3 创新设计常识 . . . . 320
20.2.4 “不完美”设计常识 . . 322
20.2.5 质量设计常识 . . . . 322
20.3 设计框架 . . . . . . . . . . 323
20.3.1 五类设计方法 . . . . 323
20.3.2 四大设计层级 . . . . 324
20.3.3 八个设计视图 . . . . 325
20.4 设计模式 . . . . . . . . . . 326
20.4.1 什么是设计模式? . . 327
20.4.2 设计模式分类 . . . . 327
20.4.3 常态设计理念 . . . . 328
知识要点回顾 . . . . . . . . . . 329
经典著作推荐 . . . . . . . . . . 330
第 21 章 架构设计 . . . . . . . . . 331
21.1 软件架构 . . . . . . . . . . 332
21.1.1 架构概述 . . . . . . 332
什么是软件架构? . . . 332
架构分类 . . . . . . . 332
架构 vs.设计 . . . . . 333
21.1.2 架构的重要性 . . . . 334
Jones架构定律 . . . . 334
架构于项目的影响 . . . 335
架构于产品的影响 . . . 336
架构于组织的影响 . . . 336
21.1.3 架构决策 “八问” . . . 337
21.1.4 架构设计七任务 . . . 338
21.2 架构与软件开发 . . . . . . 339
21.2.1 基于架构开发法则 . . 339
21.2.2 架构中心开发流程 . . 339
21.3 架构模型与模板 . . . . . . 341
21.3.1 Kruchten架构模型 341
21.3.2 RW十大交叉视角 . . 342
21.3.3 Zachman通用框架 343
21.3.4 全息架构设计实践 . . 343
21.3.5 Kruchten架构模板 344
21.4 架构风格 . . . . . . . . . . 345
21.4.1 什么是架构风格? . . 345
21.4.2 常用架构风格一览 . . 346
21.5 领域架构 . . . . . . . . . . 348
21.5.1 领域架构的功能 . . . 348
21.5.2 三类领域架构 . . . . 349
21.5.3 领域架构示例 . . . . 350
数据处理领域架构 . . . 350
事务处理领域架构 . . . 350
事件处理领域架构 . . . 351
21.5.4 经典领域架构 . . . . 352
Web浏览器架构 . . . 352
OSI和TCP/IP架构 . . 353
知识要点回顾 . . . . . . . . . . 353
经典著作推荐 . . . . . . . . . . 354
第 22 章 (面向对象)构件设计 . . . 355
22.1 面向对象 (OO)基础 . . . . 356
22.1.1 对象与类 . . . . . . 356
什么是对象? . . . . . 356
什么是OO类? . . . . 357
��i-viii��
OO类的典型特征 . . . 357
22.1.2 OO开发过程 . . . . 358
22.1.3 OO优缺点 . . . . . 359
OO四大优点 . . . . . 359
OO七宗罪 . . . . . . 360
理性对待OO方法 . . . 361
22.2 构件设计概述 . . . . . . . 361
22.2.1 构件和构件设计 . . . 361
22.2.2 OO构件设计 . . . . 362
22.3 构件 (设计)模式 . . . . . . 363
22.3.1 什么是构件模式? . . 363
22.3.2 经典构件模式一览 . . 363
22.4 OO设计法则 . . . . . . . 364
22.4.1 单一职责法则 . . . . 364
22.4.2 开闭法则 . . . . . . 365
22.4.3 Liskov替换法则 . . 366
22.4.4 接口隔离法则 . . . . 367
22.4.5 依赖倒置法则 . . . . 368
22.4.6 其他法则 . . . . . . 369
22.5 构件设计实践 . . . . . . . 370
22.5.1 保持接口的健壮性 . . 370
22.5.2 面向对象设计实践 . . 371
知识要点回顾 . . . . . . . . . . 371
经典著作推荐 . . . . . . . . . . 372
第 23 章 用户界面设计 . . . . . . 375
23.1 用户界面 (UI)概述 . . . . . 376
23.1.1 什么是用户界面? . . 376
23.1.2 用户界面五元素 . . . 376
23.1.3 面向用户的理念 . . . 377
23.1.4 界面的用户评价 . . . 378
三重用户标准 . . . . . 378
用户满意度定律 . . . . 378
23.1.5 界面可用性 . . . . . 380
可用性六要素 . . . . . 380
“可用性之惑” . . . . . 380
可用性度量方法 . . . . 381
多属性的界面可用性度量 382
23.1.6 Krug可用性三法则 . 383
一、一目了然的界面 . . 383
二、不经思考的点击 . . 384
三、精简文字的界面 . . 384
23.2 界面设计框架 . . . . . . . 384
23.2.1 界面设计任务 . . . . 384
23.2.2 界面设计过程 . . . . 385
23.3 界面设计法则与实践 . . . 386
23.3.1 以用户为中心 . . . . 387
“用户中心”法则 . . . . 387
界面支持用户控制 . . . 387
人性化的界面设计 . . . 388
界面鼓励和帮助用户 . . 389
简单而令人愉悦的界面 . 391
23.3.2 人机交互 . . . . . . 392
“最短”交互实践 . . . . 392
“有效”交互实践 . . . . 394
23.3.3 界面一致性 . . . . . 395
界面一致法则 . . . . . 395
界面内部一致实践 . . . 395
界面风格一致实践 . . . 396
界面外部一致实践 . . . 396
共通界面设计实践 . . . 397
23.3.4 个性化界面设计法则 . 397
23.4 三大企业的界面设计 . . . 399
23.4.1 IBM界面设计法则 . 400
23.4.2 谷歌用户体验设计法则 401
23.4.3 微软界面设计 . . . . 402
界面设计三法则 . . . . 402
界面规范化设计十二实践 402
知识要点回顾 . . . . . . . . . . 403
经典著作推荐 . . . . . . . . . . 404
第 24 章 数据库工程和设计 . . . . 407
24.1 数据库基础 . . . . . . . . 408
24.1.1 什么是数据? . . . . 408
24.1.2 数据库 . . . . . . . 409
数据库定义及分类 . . . 409
数据库模式 . . . . . . 409
24.1.3 数据库系统 (DBS) . 410
DBS定义及特征 . . . 410
关系型DBS . . . . . 411
DBS与面向对象设计 . 411
24.1.4 数据完整性 . . . . . 413
��i-ix��
完整性分类 . . . . . . 413
完整性违例 . . . . . . 414
24.1.5 数据库事务 . . . . . 414
24.1.6 数据 “入库”常识 . . 415
24.2 数据库开发 . . . . . . . . 415
24.2.1 数据库工程概述 . . . 415
24.2.2 基于工具的数据库工程 415
24.2.3 数据库演化开发理念 . 416
24.2.4 数据库开发实践 . . . 416
“先约束、后数据” . . . 416
应用层数据准入实践 . . 417
Ambler八项实践 . . . 418
24.3 数据库设计 . . . . . . . . 418
24.3.1 数据库设计流程 . . . 419
24.3.2 Barker七步设计法 . 420
24.3.3 数据驱动设计理念 . . 420
24.3.4 数据库设计法则 . . . 421
保证数据独立性 . . . . 421
控制数据冗余度 . . . . 421
最少用户数据收集 . . . 422
24.3.5 数据库设计五实践 . . 423
24.4 数据库重构 . . . . . . . . 424
24.4.1 重组与重构 . . . . . 424
24.4.2 数据库臭味 . . . . . 425
24.4.3 重构类型 . . . . . . 425
24.4.4 重构流程 . . . . . . 426
24.4.5 重构常态化 . . . . . 426
24.5 数据库安全工程 . . . . . . 427
24.5.1 数据库安全机制 . . . 427
24.5.2 数据安全违例及分类 . 427
24.5.3 数据库访问控制 . . . 428
24.5.4 数据安全保障法则 . . 430
知识要点回顾 . . . . . . . . . . 431
扩展阅读 . . . . . . . . . . . . . 433
第 25 章 软件设计透析 . . . . . . 435
25.1 软件设计与需求工程 . . . 436
25.1.1 SBN双峰螺旋模型 . 436
25.1.2 设计之需求条件定律 . 437
25.1.3 设计需求与需求爆炸 . 437
25.1.4 溯源设计法则 . . . . 438
25.2 设计基本法则 . . . . . . . 439
25.2.1 简单设计 . . . . . . 439
简单设计法则 . . . . . 439
缩控架构范围实践 . . . 440
25.2.2 模块化设计 . . . . . 441
模块化设计法则 . . . . 441
Constantine模块化定律 443
高内聚低耦合设计实践 . 443
25.2.3 层次化设计 . . . . . 445
层次化设计法则 . . . . 445
Simon层次化定律 . . 445
架构层次设计实践 . . . 446
25.2.4 抽象化设计法则 . . . 447
25.2.5 信息隐藏 . . . . . . 448
信息隐藏设计法则 . . . 448
Parnas模块封装定律 . 449
25.3 设计常用法则 . . . . . . . 450
25.3.1 最小规划设计 . . . . 450
两种设计过程模式 . . . 450
最小规划设计法则 . . . 450
25.3.2 适度设计法则 . . . . 451
25.3.3 概念完整性法则 . . . 452
25.3.4 复用优先的设计 . . . 453
复用优先的设计法则 . . 453
面向复用的设计实践 . . 454
25.3.5 面向变更的设计 . . . 455
面向变更的设计法则 . . 456
需求变更预测实践 . . . 457
25.3.6 多维设计法则 . . . . 458
25.3.7 “不重复自己”设计法则 458
25.3.8 自顶向下设计法则 . . 459
25.4 软件设计七挑战 . . . . . . 460
知识要点回顾 . . . . . . . . . . 462
经典著作推荐 . . . . . . . . . . 464
第 26 章 软件设计师 . . . . . . . . 465
26.1 软件设计师概述 . . . . . . 466
26.1.1 “通才”+ “专才” . . . 466
26.1.2 六项职业素质 . . . . 466
26.1.3 五项专业技能 . . . . 467
26.1.4 设计师培养 . . . . . 468
��i-x��
26.2 架构设计师 . . . . . . . . 469
26.2.1 多才的架构师 . . . . 469
26.2.2 自负的架构师 . . . . 470
26.2.3 向建筑师学习 . . . . 471
26.2.4 十二项 “修炼” . . . . 471
26.3 界面设计师 . . . . . . . . 472
26.3.1 四项独特技能 . . . . 473
26.3.2 界面设计师 vs. “美工” 473
26.4 数据库设计师 . . . . . . . 474
26.4.1 两项额外技能 . . . . 474
26.4.2 设计师 vs. “DBA” . 474
26.5 设计师团队建设 . . . . . . 475
26.5.1 多样的设计师团队 . . 475
26.5.2 培养新人的设计师团队 475
知识要点回顾 . . . . . . . . . . 476
扩展阅读 . . . . . . . . . . . . . 477
第五篇 软件构造 . . . . . . . . .479
第 27 章 软件构造概论 . . . . . . 481
27.1 编程概述 . . . . . . . . . . 482
27.1.1 认识编程 . . . . . . 482
什么是软件构造? . . . 482
编程的本质 . . . . . . 482
编程之 “难” . . . . . . 483
27.1.2 编程 “王道”论 . . . . 483
27.2 编程语言 . . . . . . . . . . 484
27.2.1 编程语言简介 . . . . 484
三类编程语言 . . . . . 484
热门编程语言 . . . . . 485
开发 vs.维护语言 . . . 487
27.2.2 编程语言选择 . . . . 488
语言选择三大依据 . . . 488
编程语言选择法则 . . . 489
27.2.3 多语言编程与软件成本 490
语言与成本定律 . . . . 490
多语言编程的必要性 . . 491
27.3 技术债 . . . . . . . . . . . 491
27.3.1 基本概念 . . . . . . 491
什么是技术债? . . . . 491
技术债的类别 . . . . . 492
27.3.2 “尽早还债”法则 . . . 492
27.3.3 偿还策略 . . . . . . 493
27.3.4 代码及早重构实践 . . 494
知识要点回顾 . . . . . . . . . . 495
经典著作推荐 . . . . . . . . . . 496
第 28 章 软件调试 . . . . . . . . . 497
28.1 调试概述 . . . . . . . . . . 498
28.1.1 什么是调试? . . . . 498
28.1.2 调试技术发展史 . . . 499
28.1.3 调试流程 . . . . . . 500
28.1.4 调试途径 . . . . . . 501
28.2 十四项调试法则 . . . . . . 502
28.3 五项调试实践 . . . . . . . 504
28.3.1 编写可调试的代码 . . 504
28.3.2 剖析内存 . . . . . . 505
28.3.3 静态代码排查 . . . . 506
28.3.4 “黄灯”即 “红灯” . . . 507
28.3.5 使用多编译器 . . . . 507
知识要点回顾 . . . . . . . . . . 508
经典著作推荐 . . . . . . . . . . 509
第 29 章 软件构造透析 . . . . . . 511
29.1 编程理念 . . . . . . . . . . 512
29.1.1 人本主义编程 . . . . 512
29.1.2 简洁编程 . . . . . . 513
简洁编程理念 . . . . . 513
代码重写实践 . . . . . 513
写少码实践 . . . . . . 514
29.1.3 质量编程 . . . . . . 515
质量编程理念 . . . . . 515
童子军军规 . . . . . . 516
29.2 编程法则 . . . . . . . . . . 517
29.2.1 代码结构化 . . . . . 517
代码结构化法则 . . . . 517
DMW定律 . . . . . . 518
Dijkstra之Goto有害论 518
29.2.2 “不重复自己”编程 . . 519
29.2.3 Davis编程法则 . . . 519
29.3 编程实践 . . . . . . . . . . 521
29.3.1 字面编程 . . . . . . 521
��i-xi��
29.3.2 慎重编程 . . . . . . 522
29.3.3 结对编程 . . . . . . 522
29.3.4 标准化编程 . . . . . 523
29.3.5 代码审查 . . . . . . 524
29.3.6 Martin编程实践 . . 525
知识要点回顾 . . . . . . . . . . 526
经典著作推荐 . . . . . . . . . . 527
第 30 章 程序员 . .