第1部分 开始 3
第1章 软件工程导论 3
1.1导言:软件工程的失误 3
1.2什么是软件工程 5
1.2.1建模 6
1.2.2问题求解 7
1.2.3知识获取 8
1.2.4基本原理 8
1.3软件工程概念 9
1.3.1参与者与角色 9
1.3.2系统与模型 10
1.3.3工作产品 11
1.3.4活动、任务与资源 11
1.3.5功能性需求与非功能性需求 12
1.3.6记号、方法和方法学 12
1.4软件工程开发活动 13
1.4.1需求获取 13
1.4.2分析 14
1.4.3系统设计 16
1.4.4对象设计 16
1.4.5实现 16
1.4.6测试 17
1.5管理软件开发 17
1.5.1沟通 17
1.5.2基本原理管理 18
1.5.3软件配置管理 18
1.5.4项目管理 18
1.5.5软件生命周期 19
1.5.6总结 19
1.6竞技场实例分析 19
1.7推荐读物 20
1.8练习 21
第2章 使用UML进行建模 22
2.1导言 22
2.2 UML综述 23
2.2.1用例图 23
2.2.2类图 24
2.2.3交互图 25
2.2.4状态机 25
2.2.5活动图 26
2.3建模活动中的概念 27
2.3.1系统、模型和视点 27
2.3.2数据类型、抽象数据类型和实例 29
2.3.3类、抽象类和对象 29
2.3.4事件类、事件和消息 31
2.3.5面向对象建模过程 31
2.3.6约简表达和原型构造 33
2.4 UML的深入透视 34
2.4.1用例图 34
2.4.2类图 39
2.4.3交互图 47
2.4.4状态机 49
2.4.5活动图 51
2.4.6图的组织 53
2.4.7图的扩展 55
2.5推荐读物 56
2.6练习 56
第3章 项目组织和沟通 58
3.1引言:一个有关火箭的例子 58
3.2项目综述 59
3.3项目管理概念 62
3.3.1项目管理 62
3.3.2角色 65
3.3.3任务和工作产品 67
3.3.4进度表 68
3.4项目沟通中的概念 69
3.4.1计划内沟通 69
3.4.2计划外的沟通 74
3.4.3沟通机制 77
3.5有组织的活动 83
3.5.1加入一个项目团队 83
3.5.2使用沟通基础设施 84
3.5.3参加项目团队情况通气会议 84
3.5.4组织客户和项目总结 86
3.6推荐读物 87
3.7练习 87
第2部分 复杂性处理 91
第4章 需求获取 91
4.1引言:可用性实例 91
4.2对需求获取的总的看法 92
4.3需求获取概念 94
4.3.1功能需求 94
4.3.2非功能性需求 94
4.3.3完全性、一致性、清晰性和正确性 95
4.3.4现实性、确认和可追踪性 96
4.3.5绿地工程、再工程和界面工程 97
4.4需求获取活动 97
4.4.1标识参与者(Actor) 98
4.42标识场景 99
4.4.3标识用例 101
4.4.4求精用例 103
4.4.5标识参与者和用例之间的关系 105
4.4.6标识初始的分析对象 108
4.4.7标识非功能性需求 110
4.5需求获取管理 111
4.5.1与客户协商规格说明:联合应用设计 112
4.5.2追踪性维护 113
4.5.3需求获取的编档 114
4.6 ARENA实例研究 115
4.6.1初始问题陈述 115
4.6.2标识参与者和场景 117
4.6.3标识用例 120
4.6.4求精用例与标识关系 122
4.6.5标识非功能性需求 126
4.6.6应接受的教训 126
4.7推荐读物 127
4.8练习 128
第5章 分析 130
5.1导言:光幻影 130
5.2分析概述 131
5.3分析的概念 132
5.3.1对象模型和动态模型分析 132
5.3.2实体、边界和控制对象 132
5.3.3泛化和特化 134
5.4分析活动:从用例到对象 134
5.4.1标识实体对象 135
5.4.2标识边界对象 137
5.4.3标识控制对象 138
5.4.4使用顺序图将用例映射成对象 139
5.4.5使用CRC卡建模对象之间的交互 142
5.4.6标识关联 143
5.4.7标识聚集 145
5.4.8标识属性 146
5.4.9建模单一对象的状态相关的行为 147
5.4.10建模对象之间的继承关系 148
5.4.11分析模型评审 148
5.4.12分析小结 149
5.5分析管理 150
5.5.1分析文档化 151
5.5.2分配责任 151
5.5.3对分析的沟通 152
5.5.4分析模型的迭代 153
5.5.5客户发出的结束信息 154
5.6 ARENA案例研究 156
5.6.1标识实体对象 156
5.6.2标识边界对象 159
5.6.3标识控制对象 160
5.6.4建模对象之间的交互 161
5.6.5评价和加固分析模型 163
5.6.6应该吸取的教训 165
5.7推荐读物 166
5.8练习 166
第6章 系统设计:分解系统 168
6.1导言:一个地板规划的例子 168
6.2系统设计概述 170
6.3系统设计概念 171
6.3.1子系统与类 171
6.3.2服务与子系统接口 172
6.3.3耦合与内聚 173
6.3.4分层与划分 176
6.3.5体系结构风格 178
6.4系统设计活动:从对象到子系统 184
6.4.1出发点:线路规划系统的分析模型 184
6.4.2标识设计目标 186
6.4.3标识子系统 188
6.5推荐读物 190
6.6练习 190
第7章 系统设计:选择设计目标 192
7.1介绍:一个冗余系统的例子 192
7.2系统设计活动概述 193
7.3概念:UM L部署图 195
7.4系统设计活动:选择设计目标 196
7.4.1将子系统映射到处理器和构件上 196
7.4.2标识并存储持久性数据 197
7.4.3提供访问控制 200
7.4.4设计全局控制流 205
7.4.5标识服务 207
7.4.6标识边界条件 208
7.47评审系统设计 210
7.5管理系统设计 212
7.5.1系统设计编档 212
7.5.2责任分配 213
7.5.3系统设计交流 214
7.5.4系统设计迭代 215
7.6 ARENA案例研究 216
7.6.1标识设计目标 216
7.6.2标识子系统 217
7.6.3将子系统映射到处理器和构件 218
7.6.4标识并存储持久性数据 220
7.6.5提供访问控制 220
7.6.6设计全局控制流 221
7.6.7标识服务 222
7.6.8标识边界条件 224
7.6.9课程小结 226
7.7推荐读物 226
7.8练习 227
第8章 对象设计:复用模式解决方法 228
8.1导言:挫折 228
8.2对象设计总论 230
8.3复用的概念:解对象、继承和设计模式 232
8.3.1应用对象和解对象 232
8.3.2定义继承和实现继承 233
8.33授权 235
8.3.4 Liskov替换准则 235
8.3.5设计模式中的授权和继承 236
8.4复用活动:选择设计模式和构件 238
8.4.1使用Bridge模式封装数据存储 239
8.4.2通过Adapter模式封装遗留构件 240
8.4.3用Strategy模式封装上下文 242
8.4.4使用Abstract Factory模式封装平台 244
8.4.5使用Command模式封装控制流 245
8.4.6用Composite设计模式封装层次 246
8.4.7选择设计模式的启发式准则 248
8.4.8标识和调整应用框架 248
8.5管理复用 252
8.5.1文档编辑复用 253
8.5.2分配责任 254
8.6 ARENA案例分析 254
8.6.1使用Abstract Factory设计模式 255
8.6.2使用Command设计模式 256
8.6.3使用Observer设计模式 257
8.6.4课程回顾 257
8.7推荐读物 258
8.8习题 258
第9章 对象设计:说明接口 260
9.1导言:一个铁路的例子 260
9.2接口规格说明概述 261
9.3接口规格说明概念 262
9.3.1类实现者、类扩展者和类用户 263
9.3.2类型、签名和可见性 264
9.3.3契约:不变式、前置条件和后置条件 265
9.3.4对象约束语言 266
9.3.5 OCL集合:集合、袋以及序列 269
9.3.6 OCL量词:全称量词forAll和存在量词exists 272
9.4接口规格说明活动 272
9.4.1标识遗漏的属性和操作 273
9.4.2说明类型、签名和可见性 274
9.4.3说明前置条件和后置条件 275
9.4.4说明不变式 277
9.4.5继承契约 278
9.5对象设计管理 280
9.5.1对象设计编档 280
9.5.2分配责任 285
9.5.3在需求分析中使用契约 285
9.6 ARENA案例分析 286
9.6.1标识在系列赛风格TournamentStyle和回合Round中遗漏的操作 286
9.6.2定义说明系列赛风格TournamentStyle和回合Round中的契约 288
9.6.3定义说明淘汰赛风格KnockOutStyle和淘汰回合KnockOutRound契约 290
9.6.4课程回顾 291
9.7推荐读物 291
9.8练习 292
第10章 将模型映射到代码 294
10.1导言:一个关于书的例子 294
10.2映射的概述 295
10.3映射的概念 296
10.3.1模型转换 296
10.3.2重构 297
10.3.3正向工程 299
10.3.4逆向工程 300
10.3.5转换原则 300
10.4映射活动 301
10.4.1优化对象设计模型 301
10.4.2将关联映射到集合 304
10.4.3将契约映射到异常 308
10.4.4将对象模型映射到持久存储模式 312
10.5管理实现 317
10.5.1编档过程转换 317
10.5.2指派职责 318
10.6 ARENA案例研究 318
10.6.1竞技场系统ARENA中的统计类Statistics 319
10.6.2将关联映射到集合 320
10.6.3将契约映射到异常 322
10.6.4将对象模型映射到数据库模式 323
10.6.5课程回顾 324
10.7推荐读物 324
10.8练习 325
第11章 测试 327
11.1导言:测试航天飞机 327
11.2测试概述 329
11.3测试概念 332
11.3.1故障、错误状态和失效 333
11.3.2测试用例 335
11.3.3测试桩和测试驱动 337
11.3.4更正 337
11.4测试活动 338
11.4.1构件检查 338
11.4.2可用性测试 339
11.4.3单元测试 340
11.4.4集成测试 348
11.4.5系统测试 352
11.5管理测试 356
11.5.1制定测试计划 356
11.5.2编写测试文档 357
11.5.3分配职责 359
11.5.4回归测试 360
11.5.5使测试自动化 361
11.5.6基于模型的测试 362
11.6推荐读物 364
11.7练习 365
第3部分 变更管理 369
第12章 基本原理管理 369
12.1引言:将火腿切成薄片 369
12.2基本原理概述 370
12.3基本原理概念 372
12.3.1集中式的交通控制 373
12.3.2定义问题:问题 374
12.3.3探索问题空间:提议 375
12.3.4评价求解空间:标准和讨论 376
12.3.5使求解空间崩溃:解决方案 377
12.3.6执行解决方案:活动项 378
12.3.7基于问题的模型和系统实例 379
12.4基本原理的活动:从问题到决策 382
12.4.1 CTC系统设计 382
12.4.2在会议中获取基本原理 383
12.4.3异步获取基本原理 389
12.4.4当讨论变更时获取的基本原理 391
12.4.5重新构造基本原理 393
12.5管理基本原理 395
12.5.1将基本原理文档化 395
12.5.2分配任务 396
12.5.3关于基本原理交流的启发式规则 397
12.5.4问题模型和协商 397
12.5.5冲突解决策略 399
12.6推荐读物 400
12.7练习 400
第13章 配置管理 402
13.1引言:一个飞机的实例 402
13.2配置管理的概要 404
13.3配置管理的概念 405
13.3.1配置项和CM聚集 406
13.3.2版本和配置 406
13.3.3变化请求 407
13.3.4升级和发布 407
13.3.5仓库和工作空间 407
13.3.6版本标识方案 408
13.3.7变化和变化集 409
13.3.8配置管理工具 410
13.4配置管理活动 411
13.4.1配置项和CM聚集标识 413
13.4.2升级管理 414
13.4.3发布版本管理 415
13.4.4分支管理 417
13.4.5不同版本管理 419
13.4.6变更管理 421
13.5对配置管理的管理 422
13.5.1配置管理的文档化 422
13.5.2分配配置管理责任 423
13.5.3计划配置管理活动 424
13.5.4持续集成:测试活动和改进管理 424
13.6推荐读物 426
13.7练习 426
第14章 项目管理 428
14.1介绍:STS-51L发射决定 428
14.2项目管理概述 430
14.3项目管理概念 434
14.3.1任务和活动 434
14.3.2工作产品、工作包和角色 435
14.3.3工作分解结构 436
14.3.4任务模型 436
14.3.5技能矩阵 437
14.3.6组织 438
14.3.7可视组织结构 440
14.3.8组织结构图谱 440
14.3.9软件项目管理计划 441
14.4项目管理活动 443
14.4.1计划项目 444
14.4.2组织项目 448
14.4.3控制项目 451
14.4.4终结项目 455
14.5 Agile项目管理活动 456
14.5.1项目计划:创建产品和冲刺后备 457
14.5.2组织项目 457
14.5.3控制项目:每一天的冲刺和灭火表(burn down charts) 458
14.5.4终止项目:对于冲刺的评论 459
14.6推荐读物 460
14.7练习 460
第15章 软件生命周期 462
15.1导言:玻利尼西亚航行 462
15.2 IEEE 1074:开发软件生命周期过程的标准 465
15.2.1过程与活动 465
15.2.2软件生命周期建模 467
15.2.3项目管理 467
15.2.4前期开发 468
15.2.5开发过程 468
15.2.6后期开发 469
15.2.7整体过程(交叉开发过程) 470
15.3评价软件生命周期模型的成熟度 471
15.4生命周期模型 472
15.4.1以顺序活动为中心的模型 473
15.4.2以迭代活动为中心的模型 475
15.4.3以实体为中心的模型 479
15.5推荐读物 481
15.6练习 481
第16章 方法学:综合考虑各种因素 483
16.1导言:首次攀登乔戈里峰(K2峰) 483
16.2项目环境 486
16.3方法学问题 488
16.3.1需要做多少个计划 488
16.3.2需要在多大程度上考虑复用 489
16.3.3需要建多少种模型 489
16.3.4过程包含多少步骤 490
16.3.5需要多大程度上的控制和监控 491
16.3.6什么时候重定义项目目标 492
16.4方法学领域 492
16.41 Royce方法学 493
16.4.2极限编程(XP) 496
16.4.3 Rugby方法学 500
16.5案例学习 505
16.5.1 XP项目:ATRACT 506
16.5.2局部主客户:FRIEND 508
16.5.3分布式项目:JAMES 513
16.5.4案例学习总结 518
16.6推荐读物 521
16.7练习 521
第4部分 附录 525
附录A设计模式 525
A.1 Abstract Factory:封装平台 525
A.2 Adapter:对遗留代码的包装 526
A.3 Bridge:允许选择性实现 527
A.4 Command:封装控制流 527
A.5 Composite:表示递归的层次结构 528
A.6 Facade:封装子系统 529
A.7 Observer:将实体从视图中分离出来 529
A.8 Proxy:封装开销大的对象 530
A.9 Strategy:封装算法 531
A.10选择设计模式的启发式准则 532
附录B 术语表 533
附录C参考文献 557