第一部分软件工程导论 2
第1章概述 2
1.1专业化软件开发 3
1.1.1软件工程 4
1.1.2软件工程的多样性 6
1.1.3软件工程和Web 7
1.2软件工程人员的职业道德 8
1.3案例研究 10
1.3.1胰岛素泵控制系统 10
1.3.2用于心理健康治疗的患者信息系统 12
1.3.3野外气象站 13
要点 14
进一步阅读材料 14
练习 15
参考书目 15
第2章软件过程 16
2.1软件过程模型 17
2.1.1瀑布模型 17
2.1.2增量式开发 19
2.1.3面向复用的软件工程 20
2.2过程活动 21
2.2.1软件描述 21
2.2.2软件设计和实现 23
2.2.3软件有效性验证 25
2.2.4软件进化 26
2.3应对变更 26
2.3.1原型构造 27
2.3.2增量式交付 28
2.3.3Boehm的螺旋模型 29
2.4Rational统一过程 30
要点 32
进一步阅读材料 33
练习 33
参考书目 34
第3章敏捷软件开发 35
3.1敏捷方法 36
3.2计划驱动开发和敏捷开发 38
3.3极限编程 40
3.3.1极限编程中的测试 42
3.3.2结对编程 44
3.4敏捷项目管理 45
3.5可扩展的敏捷方法 46
要点 48
进一步阅读材料 48
练习 48
参考书目 49
第4章需求工程 51
4.1功能需求和非功能需求 52
4.1.1功能需求 52
4.1.2非功能需求 53
4.2软件需求文档 56
4.3需求描述 58
4.3.1自然语言描述 58
4.3.2结构化描述 59
4.4需求工程过程 61
4.5需求导出和分析 62
4.5.1需求发现 63
4.5.2采访 64
4.5.3脚本 65
4.5.4用例 65
4.5.5深入实际 67
4.6需求有效性验证 68
4.7需求管理 69
4.7.1需求管理规划 70
4.7.2需求变更管理 71
要点 71
进一步阅读材料 72
练习 72
参考书目 73
第5章系统建模 74
5.1上下文模型 75
5.2交互模型 77
5.2.1用例建模 77
5.2.2时序图 78
5.3结构模型 80
5.3.1类图 81
5.3.2泛化 82
5.3.3聚合 83
5.4行为模型 83
5.4.1数据驱动的建模 84
5.4.2事件驱动模型 84
5.5模型驱动工程 87
5.5.1模型驱动体系结构 88
5.5.2可执行UML 89
要点 90
进一步阅读材料 90
练习 90
参考书目 91
第6章体系结构设计 93
6.1体系结构设计决策 95
6.2体系结构视图 96
6.3体系结构模式 97
6.3.1分层体系结构 99
6.3.2容器体系结构 100
6.3.3客户机-服务器体系结构 101
6.3.4管道和过滤器体系结构 102
6.4应用体系结构 103
6.4.1事务处理系统 105
6.4.2信息系统 105
6.4.3语言处理系统 107
要点 108
进一步阅读材料 109
练习 109
参考书目 110
第7章设计与实现 112
7.1利用UML进行面向对象设计 113
7.1.1系统上下文与交互 113
7.1.2体系结构的设计 115
7.1.3对象类识别 116
7.1.4设计模型 117
7.1.5接口描述 120
7.2设计模式 120
7.3实现问题 123
7.3.1复用 123
7.3.2配置管理 124
7.3.3宿主机-目标机开发 124
7.4开源开发 126
要点 128
进一步阅读材料 128
练习 128
参考书目 129
第8章软件测试 131
8.1开发测试 134
8.1.1单元测试 135
8.1.2选择单元测试案例 136
8.1.3组件测试 138
8.1.4系统测试 139
8.2测试驱动开发 141
8.3发布测试 143
8.3.1基于需求的测试 143
8.3.2情景测试 144
8.3.3性能测试 144
8.4用户测试 145
要点 147
进一步阅读材料 147
练习 148
参考书目 148
第9章软件进化 149
9.1进化过程 150
9.2程序进化的动态特性 152
9.3软件维护 154
9.3.1维护预测 156
9.3.2软件再工程 158
9.3.3通过重构进行预防性维护 159
9.4遗留系统管理 160
要点 163
进一步阅读材料 163
练习 164
参考书目 164
第二部分可依赖性和信息安全性 168
第10章社会技术系统 168
10.1复杂系统 169
10.1.1系统总体特性 171
10.1.2系统非确定性 172
10.1.3成功标准 173
10.2系统工程 173
10.3系统采购 174
10.4系统开发 176
10.5系统运行 178
10.5.1人为错误 179
10.5.2系统进化 180
要点 181
进一步阅读材料 181
练习 181
参考书目 182
第11章可依赖性与信息安全性 183
11.1可依赖性特征 184
11.2可用性和可靠性 186
11.3安全性 189
11.4信息安全性 191
要点 192
进一步阅读材料 193
练习 193
参考书目 194
第12章可依赖性与信息安全性描述 195
12.1风险驱动的需求描述 195
12.2安全性描述 197
12.2.1危险识别 197
12.2.2危险评估 198
12.2.3危险分析 199
12.2.4风险降低 201
12.3可靠性描述 202
12.3.1可靠性度量 203
12.3.2非功能性的可靠性需求 204
12.3.3功能可靠性描述 206
12.4信息安全性描述 207
12.5形式化描述 210
要点 212
进一步阅读材料 212
练习 212
参考书目 213
第13章可依赖性工程 215
13.1冗余性和多样性 216
13.2可依赖的过程 217
13.3可依赖的系统体系结构 219
13.3.1保护性系统 220
13.3.2自监控系统体系结构 220
13.3.3N一版本编程 222
13.3.4软件多样性 223
13.4可依赖的编程 224
要点 228
进一步阅读材料 229
练习 229
参考书目 229
第14章信息安全工程 231
14.1信息安全风险管理 233
14.1.1生存期风险评估 234
14.1.2运行风险评估 236
14.2面向信息安全的设计 236
14.2.1体系结构设计 237
14.2.2设计准则 239
14.2.3部署设计 243
14.3系统生存能力 244
要点 246
进一步阅读材料 246
练习 246
参考书目 247
第15章可依赖性与信息安全保证 248
15.1静态分析 249
15.1.1检验和形式化方法 249
15.1.2模型检测 250
15.1.3自动静态分析 251
15.2可靠性测试 253
15.3信息安全性测试 255
15.4过程保证 256
15.5安全性和可依赖性案例 259
15.5.1结构化论证 260
15.5.2结构化的安全性论证 261
要点 264
进一步阅读材料 265
练习 265
参考书目 266
第三部分高级软件工程 270
第16章软件复用 270
16.1复用概览 272
16.2应用框架 273
16.3软件产品线 276
16.4COTS产品的复用 279
16.4.1COTS解决方案系统 280
16.4.2COTS集成系统 282
要点 284
进一步阅读材料 284
练习 285
参考书目 285
第17章基于组件的软件工程 287
17.1组件和组件模型 288
17.2CBSE过程 292
17.2.1面向复用的CBSE 293
17.2.2基于复用的CBSE 294
173.组件合成 296
要点 301
进一步阅读材料 301
练习 301
参考书目 302
第18章分布式软件工程 303
18.1分布式系统的问题 304
18.1.1交互模型 306
18.1.2中间件 307
18.2客户机-服务器计算 308
18.3分布式系统的体系结构模式 309
18.3.1主从体系结构 310
18.3.2两层客户机-服务器结构 310
18.3.3多层客户机-服务器结构 312
18.3.4分布式组件体系结构 313
18.3.5对等体系结构 315
18.4软件作为服务 317
要点 319
进一步阅读材料 320
练习 320
参考书目 321
第19章面向服务的体系结构 322
19.1服务作为可复用的组件 325
19.2服务工程 328
19.2.1可选服务的识别 328
19.2.2服务接口设计 330
19.2.3服务实现和部署 332
19.2.4遗留系统服务 332
19.3使用服务的软件开发 333
19.3.1工作流设计和实现 335
19.3.2服务测试 337
要点 338
进一步阅读材料 338
练习 339
参考书目 339
第20章嵌入式软件 341
20.1嵌入式系统设计 342
20.1.1实时系统建模 345
20.1.2实时编程 346
20.2体系结构模式 347
20.2.1观察和反应 347
20.2.2环境控制 349
20.2.3处理管道 350
20.3时序分析 351
20.4实时操作系统 354
要点 356
进一步阅读材料 356
练习 356
参考书目 357
第21章面向方面的软件工程 359
21.1关注点分离 360
21.2方面、连接点和切入点 363
21.3采用方面的软件工程 365
21.3.1面向关注点的需求工程 366
21.3.2面向方面的设计和编程 368
21.3.3检验和有效性验证 371
要点 372
进一步阅读材料 372
练习 373
参考书目 373
第四部分软件管理 376
第22章项目管理 376
22.1风险管理 377
22.1.1风险识别 378
22.1.2风险分析 379
22.1.3风险规划 380
22.1.4风险监控 381
22.2人员管理 381
22.3团队协作 384
22.3.1成员挑选 386
22.3.2小组的结构 387
22.3.3小组的沟通 388
要点 389
进一步阅读材料 390
练习 390
参考书目 390
第23章项目规划 392
23.1软件报价 393
23.2计划驱动的开发 394
23.2.1项目计划 395
23.2.2规划过程 395
23.3项目进度安排 397
23.4敏捷规划 400
23.5估算技术 402
23.5.1算法成本建模 402
23.5.2COCOMO模型 404
23.5.3项目的工期和人员配备 409
要点 410
进一步阅读材料 410
练习 410
参考书目 411
第24章质量管理 413
24.1软件质量 415
24.2软件标准 416
24.3复查与审查 419
24.3.1复查过程 420
24.3.2程序审查 421
24.4软件度量和量度 422
24.4.1产品量度 425
24.4.2软件组件分析 426
24.4.3度量歧义 427
要点 428
进一步阅读材料 428
练习 429
参考书目 429
第25章配置管理 431
25.1变更管理 433
25.2版本管理 436
25.3系统构建 438
25.4发布版本管理 442
要点 443
进一步阅读材料 444
练习 444
参考书目 444
第26章过程改善 445
26.1过程改善过程 447
26.2过程度量 448
26.3过程分析 450
26.4过程变更 452
26.5CMMI过程改善框架 454
26.5.1分阶段的CMMI模型 456
26.5.2连续CMMI模型 458
要点 458
进一步阅读材料 459
练习 459
参考书目 459
术语表 461