第一部分 软件工程导论 2
第1章 概述 2
1.1 专业化软件开发 3
1.1.1 软件工程 5
1.1.2 软件工程的多样性 6
1.1.3 互联网软件工程 8
1.2 软件工程职业道德 9
1.3 案例研究 11
1.3.1 胰岛素泵控制系统 12
1.3.2 心理健康治疗病人信息系统 13
1.3.3 野外气象站 14
1.3.4 学校数字化学习环境 15
要点 16
阅读推荐 17
网站 17
练习 17
参考文献 18
第2章 软件过程 19
2.1 软件过程模型 20
2.1.1 瀑布模型 21
2.1.2 增量式开发 23
2.1.3 集成与配置 25
2.2 过程活动 26
2.2.1 软件规格说明 26
2.2.2 软件设计和实现 27
2.2.3 软件确认 29
2.2.4 软件演化 30
2.3 应对变化 31
2.3.1 原型 32
2.3.2 增量式交付 33
2.4 过程改进 34
要点 36
阅读推荐 36
网站 37
练习 37
参考文献 37
第3章 敏捷软件开发 39
3.1 敏捷方法 40
3.2 敏捷开发技术 42
3.2.1 用户故事 43
3.2.2 重构 44
3.2.3 测试先行的开发 45
3.2.4 结对编程 46
3.3 敏捷项目管理 47
3.4 敏捷方法的伸缩 50
3.4.1 敏捷方法的实践问题 51
3.4.2 敏捷和计划驱动的方法 52
3.4.3 面向大型系统的敏捷方法 54
3.4.4 面向整个组织的敏捷方法 56
要点 57
阅读推荐 57
网站 58
练习 58
参考文献 58
第4章 需求工程 60
4.1 功能性需求和非功能性需求 62
4.1.1 功能性需求 63
4.1.2 非功能性需求 64
4.2 需求工程过程 66
4.3 需求抽取 67
4.3.1 需求抽取技术 69
4.3.2 故事和场景 71
4.4 需求规格说明 73
4.4.1 自然语言规格说明 74
4.4.2 结构化规格说明 75
4.4.3 用况 76
4.4.4 软件需求文档 77
4.5 需求确认 79
4.6 需求变更 80
4.6.1 需求管理计划 81
4.6.2 需求变更管理 82
要点 83
阅读推荐 83
网站 84
练习 84
参考文献 85
第5章 系统建模 86
5.1 上下文模型 87
5.2 交互模型 89
5.2.1 用况建模 90
5.2.2 顺序图 91
5.3 结构模型 93
5.3.1 类图 93
5.3.2 泛化 95
5.3.3 聚集 95
5.4 行为模型 96
5.4.1 数据驱动的建模 96
5.4.2 事件驱动的建模 97
5.4.3 模型驱动的工程 99
5.5 模型驱动的体系结构 100
要点 102
阅读推荐 103
网站 103
练习 103
参考文献 104
第6章 体系结构设计 105
6.1 体系结构设计决策 107
6.2 体系结构视图 109
6.3 体系结构模式 110
6.3.1 分层体系结构 111
6.3.2 知识库体系结构 112
6.3.3 客户-服务器体系结构 113
6.3.4 管道和过滤器体系结构 115
6.4 应用体系结构 116
6.4.1 事务处理系统 117
6.4.2 信息系统 118
6.4.3 语言处理系统 119
要点 121
阅读推荐 122
网站 122
练习 122
参考文献 123
第7章 设计和实现 125
7.1 使用UML的面向对象设计 126
7.1.1 系统上下文和交互 126
7.1.2 体系结构设计 128
7.1.3 对象类识别 129
7.1.4 设计模型 130
7.1.5 接口规格说明 133
7.2 设计模式 134
7.3 实现问题 136
7.3.1 复用 137
7.3.2 配置管理 138
7.3.3 宿主机-目标机开发 139
7.4 开源开发 141
7.4.1 开源许可证 142
要点 143
阅读推荐 143
网站 144
练习 144
参考文献 145
第8章 软件测试 146
8.1 开发测试 149
8.1.1 单元测试 150
8.1.2 选择单元测试用例 151
8.1.3 构件测试 153
8.1.4 系统测试 155
8.2 测试驱动的开发 157
8.3 发布测试 159
8.3.1 基于需求的测试 159
8.3.2 场景测试 160
8.3.3 性能测试 161
8.4 用户测试 161
要点 163
阅读推荐 164
网站 164
练习 164
参考文献 165
第9章 软件演化 166
9.1 演化过程 168
9.2 遗留系统 170
9.2.1 遗留系统管理 173
9.3 软件维护 176
9.3.1 维护预测 178
9.3.2 软件再工程 179
9.3.3 软件重构 181
要点 182
阅读推荐 182
网站 183
练习 183
参考文献 183
第二部分 系统可依赖性和信息安全 186
第10章 可依赖系统 186
10.1 可依赖性属性 187
10.2 社会技术系统 189
10.2.1 规章与守约 191
10.3 冗余和多样性 192
10.4 可依赖的过程 193
10.5 形式化方法与可依赖性 195
要点 197
阅读推荐 198
网站 198
练习 198
参考文献 199
第11章 可靠性工程 200
11.1 可用性和可靠性 202
11.2 可靠性需求 203
11.2.1 可靠性度量 204
11.2.2 非功能性可靠性需求 205
11.2.3 功能性可靠性规格说明 207
11.3 容错体系结构 207
11.3.1 保护性系统 208
11.3.2 自监控系统体系结构 208
11.3.3 N版本编程 210
11.3.4 软件多样性 211
11.4 可靠性编程 212
11.5 可靠性度量 216
11.5.1 运行概况 218
要点 218
阅读推荐 219
网站 219
练习 219
参考文献 220
第12章 安全工程 221
12.1 安全关键系统 222
12.2 安全需求 224
12.2.1 危险识别 225
12.2.2 危险评估 226
12.2.3 危险分析 227
12.2.4 风险降低 229
12.3 安全工程过程 229
12.3.1 安全保证过程 230
12.3.2 形式化验证 232
12.3.3 模型检测 233
12.3.4 静态程序分析 234
12.4 安全案例 235
12.4.1 结构化论证 237
12.4.2 软件的安全论证 238
要点 240
阅读推荐 241
网站 241
练习 241
参考文献 242
第13章 信息安全工程 244
131信息安全和可依赖性 245
13.2 信息安全和组织 248
13.2.1 信息安全风险评估 249
13.3 信息安全需求 249
13.3.1 滥用案例 252
13.4 信息安全系统设计 253
13.4.1 设计风险评估 254
13.4.2 体系结构设计 257
13.4.3 设计准则 259
13.4.4 信息安全系统编程 263
13.5 信息安全测试和保证 263
要点 265
阅读推荐 265
网站 265
练习 266
参考文献 266
第14章 韧性工程 268
14.1 网络安全 270
14.2 社会技术韧性 273
14.2.1 人为错误 275
14.2.2 运行和管理过程 277
14.3 韧性系统设计 279
要点 284
阅读推荐 284
网站 285
练习 285
参考文献 285
第三部分 高级软件工程 288
第15章 软件复用 288
15.1 复用概览 290
15.2 应用框架 292
15.3 软件产品线 294
15.4 应用系统复用 298
15.4.1 可配置的应用系统 299
15.4.2 集成的应用系统 301
要点 303
阅读推荐 303
网站 304
练习 304
参考文献 305
第16章 基于构件的软件工程 306
16.1 构件和构件模型 307
16.1.1 构件模型 310
16.2 CBSE过程 311
16.2.1 面向复用的CBSE 312
16.2.2 基于复用的CBSE 314
16.3 构件组装 316
要点 321
阅读推荐 321
网站 322
练习 322
参考文献 322
第17章 分布式软件工程 324
17.1 分布式系统 325
17.1.1 交互模型 327
17.1.2 中间件 329
17.2 客户-服务器计算 330
17.3 分布式系统的体系结构模式 331
17.3.1 主从体系结构 332
17.3.2 两层客户-服务器体系结构 332
17.3.3 多层客户-服务器体系结构 334
17.3.4 分布式构件体系结构 335
17.3.5 对等体系结构 338
17.4 软件即服务 340
要点 342
阅读推荐 343
网站 343
练习 343
参考文献 344
第18章 面向服务的软件工程 345
18.1 面向服务的体系结构 348
18.1.1 SOA中的服务构件 349
18.2 RESTful服务 351
18.3 服务工程 354
18.3.1 可选服务识别 354
18.3.2 服务接口设计 356
18.3.3 服务实现和部署 358
18.4 服务组合 359
18.4.1 工作流设计与实现 361
18.4.2 服务组合测试 363
要点 364
阅读推荐 364
网站 365
练习 365
参考文献 366
第19章 系统工程 367
19.1 社会技术系统 370
19.1.1 涌现特性 372
19.1.2 不确定性 373
19.1.3 成功准则 374
19.2 概念设计 375
19.3 系统采购 377
19.4 系统开发 380
19.5 系统运行和演化 383
19.5.1 系统演化 384
要点 385
阅读推荐 385
网站 385
练习 386
参考文献 386
第20章 系统之系统 388
20.1 系统复杂度 390
20.2 系统之系统的分类 393
20.3 还原论和复杂系统 395
20.4 系统之系统工程 397
20.4.1 接口开发 398
20.4.2 集成和部署 399
20.5 系统之系统的体系结构 400
20.5.1 系统之系统的体系结构模式 402
要点 404
阅读推荐 405
网站 405
练习 405
参考文献 406
第21章 实时软件工程 407
21.1 嵌入式系统设计 408
21.1.1 实时系统建模 411
21.1.2 实时编程 413
21.2 实时软件体系结构模式 413
21.2.1 观察和反应模式 414
21.2.2 环境控制模式 415
21.2.3 处理管道模式 417
21.3 时序分析 418
21.4 实时操作系统 421
21.4.1 进程管理 422
要点 423
阅读推荐 424
网站 424
练习 424
参考文献 425
第四部分 软件管理 428
第22章 项目管理 428
22.1 风险管理 430
22.1.1 风险识别 431
22.1.2 风险分析 432
22.1.3 风险计划 433
22.1.4 风险监控 434
22.2 人员管理 435
22.2.1 激励人员 435
22.3 团队协作 437
22.3.1 成员的挑选 439
22.3.2 小组的结构 440
22.3.3 小组的沟通 442
要点 443
阅读推荐 443
网站 443
练习 444
参考文献 444
第23章 项目计划 445
23.1 软件报价 446
23.2 计划驱动的开发 447
23.2.1 项目计划 448
23.2.2 计划过程 449
23.3 项目进度安排 450
23.3.1 进度安排表示方法 451
23.4 敏捷计划 453
23.5 估算技术 455
23.5.1 算法成本建模 456
23.6 COCOMO成本建模 458
23.6.1 应用组合模型 459
23.6.2 早期设计模型 460
23.6.3 复用模型 460
23.6.4 后体系结构模型 462
23.6.5 项目的工期和人员配备 464
要点 464
阅读推荐 465
网站 465
练习 465
参考文献 467
第24章 质量管理 468
24.1 软件质量 469
24.2 软件标准 471
24.2.1 ISO 9001标准框架 473
24.3 评审与审查 475
24.3.1 评审过程 475
24.3.2 程序审查 476
24.4 质量管理与敏捷开发 478
24.5 软件度量 479
24.5.1 产品量度 481
24.5.2 软件构件分析 483
24.5.3 度量歧义 484
24.5.4 软件解析 485
要点 486
阅读推荐 486
网站 487
练习 487
参考文献 487
第25章 配置管理 489
25.1 版本管理 492
25.2 系统构建 495
25.3 变更管理 499
25.4 发布版本管理 503
要点 505
阅读推荐 505
网站 506
练习 506
参考文献 506
术语表 507