第1部分 开始 1
第1章 软件工程介绍 1
1.1 引言:软件工程故障 1
1.2 什么是软件工程 3
1.2.1 建模 4
1.2.2 问题求解 5
1.2.3 知识获取 6
1.2.4 基本原理管理 6
1.3 软件工程概念 7
1.3.2 系统和模型 8
1.3.1 参与者和角色 8
1.3.3 工作产品 9
1.3.4 活动、任务和资源 9
1.3.5 目标、需求和约束 9
1.3.6 符号、方法和方法学 10
1.4 软件工程开发活动 10
1.4.1 需求提出 11
1.4.2 分析 11
1.4.3 系统设计 12
1.5.1 交流 13
1.5 软件开发的管理 13
1.4.5 实现 13
1.4.4 对象设计 13
1.5.2 基本原理管理 14
1.5.3 测试 14
1.5.4 软件配置管理 14
1.5.5 项目管理 15
1.5.6 软件生命周期 15
1.6 习题 15
参考文献 16
2.1 介绍 18
第2章 用UML建模 18
2.2 UML概述 19
2.2.1 用例图 19
2.2.2 类图 19
2.2.3 顺序图 20
2.2.4 状态图 21
2.2.5 活动图 22
2.3 建模概念 22
2.3.1 系统、模型和视图 23
2.3.2 概念和现象 24
2.3.3 数据类型、抽象数据类型和实例 26
2.3.4 类、抽象类和对象 27
2.3.5 事件类、事件和消息 28
2.3.6 面向对象的建模 29
2.3.7 证伪和原型化 30
2.4 从更深层次看UML 31
2.4.1 用例图 31
2.4.2 类图 36
2.4.3 顺序图 41
2.4.4 状态图 42
2.4.5 活动图 44
2.4.6 图表组织 46
2.4.7 图表扩展 49
2.5 习题 50
参考文献 50
第3章 项目交流 52
3.1 引言:一个火箭的例子 52
3.2 项目交流纵览 53
3.3 交流模式 55
3.3.1 问题定义 56
3.3.2 客户评审 57
3.3.3 项目评审 58
3.3.4 检查和预排 59
3.3.5 状况检查 59
3.3.6 集体讨论 59
3.3.7 发布 60
3.3.8 事后讨论 60
3.3.9 需求阐明 61
3.3.10 需求变更 62
3.3.11 问题求解 62
3.3.12 讨论 63
3.4 交流机制 64
3.4.1 hallway交谈 65
3.4.2 调查问卷和有组织的访谈 65
3.4.3 会议 66
3.4.4 评审 69
3.4.5 实时异地群件 69
3.4.6 电子邮件 69
3.4.7 新闻组 70
3.4.8 万维网 71
3.4.9 Lotus Notes 71
3.5.1 确定交流需求 73
3.5 项目交流活动 73
3.4.10 讨论 73
3.5.2 建立基础构架 75
3.5.3 组织客户和项目评审 75
3.5.4 每周组织小组会议 76
3.5.5 转变问题回顾 78
3.6 习题 79
参考文献 79
第4章 需求提出 81
4.1 引言:可用性实例 81
第2部分 处理复杂性 81
4.2 需求提出概述 83
4.3 需求提出的概念 84
4.3.1 功能性需求 84
4.3.2 非功能性需求和伪需求 85
4.3.3 描述的层次 86
4.3.4 正确性、完整性、一致性、清晰性和现实性 87
4.3.5 可验证性和可追溯性 88
4.3.6 greenfield工程、再工程、界面工程 89
4.4 需求提出活动 89
4.4.1 确定执行者 90
4.4.2 确定场景 91
4.4.3 确定用例 93
4.4.4 改进用例 94
4.4.5 确定执行者和用例之间的关系 95
4.4.6 确定最初的分析对象 98
4.4.7 确定非功能性需求 100
4.5 管理需求提出 101
4.5.1 从用户提出信息:任务的知识分析 101
4.5.2 与客户协商系统说明:联合应用设计 102
4.5.3 确定需求:可用性测试 104
4.5.4 记者需求的提出 106
4.6 习题 108
参考文献 109
第5章 分析 111
5.1 引言:幻觉 111
5.2 分析概述 112
5.3 分析的概念 113
5.3.1 实体对象、边界对象和控制对象 114
5.3.2 回顾关系重数 114
5.3.3 受限关系 116
5.3.4 归纳 117
5.4.1 标识实体对象 118
5.4 分析活动:从用例到对象 118
5.4.2 标识边界对象 121
5.4.3 标识控制对象 122
5.4.4 对对象之间的交互进行建模:顺序图 123
5.4.5 标识关系 126
5.4.6 标识属性 128
5.4.7 对单个对象的重要行为进行建模 129
5.4.8 对对象间的归纳关系建模 130
5.4.9 检查分析模型 130
5.4.10 分析总结 131
5.5.1 记录分析 133
5.5 管理分析 133
5.5.2 分配责任 134
5.5.3 对分析的交流 135
5.5.4 分析模型的循环 136
5.5.5 客户签字认可 137
5.6 习题 139
参考文献 140
第6章 系统设计 142
6.1 介绍:一个楼层设计的例子 142
6.2 系统设计概况 145
6.3.1 子系统和类 147
6.3 系统设计的概念 147
6.3.2 服务和子系统接口 148
6.3.3 耦合度与相关性 148
6.3.4 分层和分区 151
6.3.5 软件体系结构 155
6.3.6 UML配置图 160
6.4 系统设计活动:从对象到子系统 162
6.4.1 起点:路线设计系统的分析模型 162
6.4.2 确定设计目标 164
6.4.3 确定子系统 167
6.4.4 将子系统映射到处理器和组件 169
6.4.5 定义连续数据的存储 173
6.4.6 定义访问控制 176
6.4.7 设计全局控制流 180
6.4.8 确定边界条件 183
6.4.9 预期变化 185
6.4.10 系统设计综述 187
6.5 系统设计的管理 188
6.5.1 记录系统设计 188
6.5.2 分配任务 190
6.5.3 与系统设计相关的交流 191
6.5.4 系统设计的不断反复 192
6.6 习题 193
参考文献 194
第7章 对象设计 196
7.1 介绍:电影示例 196
7.2 对象设计概况 198
7.3 对象设计概念 201
7.3.1 应用域对象和解决域对象回顾 201
7.3.2 类型、声明和可见性回顾 201
7.3.3 合约:不变量、前提条件和后续条件 202
7.3.4 UML对象约束语言 204
7.4 对象设计活动 205
7.4.1 确定遗漏的属性和操作 209
7.4.2 指定类型、声明和可见性 212
7.4.3 指定约束条件 213
7.4.4 指定异常情况 215
7.4.5 确定并调整类库 216
7.4.6 确定并调整应用程序框架 218
7.4.7 框架的例子:Web对象 219
7.4.8 实现关系 221
7.4.9 提高可复用性 227
7.4.10 消除实现的依赖性 228
7.4.11 回顾访问路径 231
7.4.12 退化对象:将对象转变成属性 232
7.4.13 存储高开销计算的结果 233
7.4.14 推迟离开销计算 233
7.5 对象设计的管理 233
7.5.1 用文档记录对象设计 234
7.5.2 分配职责 239
7.6 习题 240
参考文献 241
第8章 基本原理管理 244
第3部分 管理变化 244
8.1 介绍:火腿的例子 245
8.2 基本原理概况 246
8.3 基本原理概念 248
8.3.1 集中交通管制 248
8.3.2 定义难题(Problem):问题 249
8.3.3 研究求解空间:提议 250
8.3.4 评估求解空间:标准和讨论 251
8.3.5 破解求解空间:解决方案 253
8.3.7 基于问题的模型和系统的例子 255
8.3.6 解决方案的实现:活动项 255
8.4.1 CTC系统设计 258
8.4 基本原理活动:从问题到决策 258
8.4.2 记录会议中的基本原理 259
8.4.3 异步记录基本原理 266
8.4.4 记录讨论变化时的基本原理 268
8.4.5 重组基本原理 271
8.5 管理基本原理 273
8.5.1 建立基本原理文档 273
8.5.2 分配任务 275
8.5.4 问题建模和协商 276
8.5.3 有关基本原理交流的试探法 276
8.5.5 冲突解决策略 277
8.6 习题 278
参考文献 279
第9章 测试 281
9.1 介绍 281
9.2 测试概况 283
9.2.1 质量控制技术 284
9.2.2 错误避免技术 284
9.2.3 检错技术 286
9.2.4 容错技术 288
9.3 测试概念 288
9.3.1 错误(fault)、误差(error)和故障(failure) 289
9.3.2 测试实例 292
9.3.3 测试存根和驱动程序 294
9.3.4 改正 294
9.4 测试活动 295
9.4.1 检查组件 295
9.4.2 单元测试 296
9.4.3 集成测试 303
9.4.4 系统测试 307
9.5 测试的管理 312
9.5.1 规划测试 312
9.5.2 记录测试 313
9.5.3 分配职责 316
9.6 习题 316
参考文献 317
第10章 软件配置管理 319
10.1 介绍:飞机的例子 319
10.2 配置管理概述 321
10.3 配置管理概念 322
10.3.1 配置项和CM聚集 323
10.3.2 版本和配置 324
10.3.3 变化请求 325
10.3.4 宣传版本和发布版本 325
10.3.5 仓库和工作区 326
10.3.6 版本识别方案 326
10.3.7 变化和变化集合 328
10.3.8 配置管理工具 330
10.4 配置管理活动 330
10.4.1 配置项和CM聚集确认 332
10.4.2 宣传版本管理 333
10.4.3 发布版本管理 336
10.4.4 分支管理 337
10.4.5 不同版本管理 341
10.4.6 变化管理 343
10.5 管理配置管理 345
10.5.1 记录配置管理 345
10.5.2 分配配置管理任务 346
10.5.3 计划配置管理活动 346
10.6 习题 347
参考文献 348
11.1 介绍:STS-SIL发射决定 349
第11章 项目管理 349
11.2 项目管理概述 351
11.3 管理的概念 354
11.3.1 小组 355
11.3.2 角色 360
11.3.3 工作产品 362
11.3.4 任务 362
11.3.5 进度表 363
11.4.1 智能办公建筑 366
11.4 项目管理活动 366
11.4.2 项目启动 367
11.4.3 项目监督 378
11.4.4 风险管理 379
11.4.5 项目协议 382
11.4.6 用户验收测试 382
11.4.7 安装 383
11.4.8 事后总结 383
11.5 项目管理模型和活动的管理 383
11.5.1 记录项目管理 383
11.5.2 分配职责 385
11.5.3 交流项目管理 386
11.6 习题 387
参考文献 388
第4部分 尾声 390
第12章 软件生命周期 390
12.1 引言 390
12.2 IEEE1074:开发生命周期过程的标准 393
12.2.1 过程和活动 393
12.2.3 项目管理 394
12.2.2 生命周期建模 394
12.2.4 前期开发 396
12.2.5 开发 397
12.2.6 后期开发 398
12.2.7 整体过程(交叉开发) 399
12.3 评价软件生命周期模型的成熟度 400
12.4 生命周期模型 402
12.4.1 瀑布模型 404
12.4.2 V模型 406
12.4.3 Boehm的螺旋模型 406
12.4.4 锯齿模型 408
12.4.5 鲨齿模型 410
12.4.6 统一软件开发过程 411
12.4.7 基于问题的生命周期模型 413
12.5 管理活动和产品 415
12.5.1 例1:历时4个月在一个地点进行的项目 415
12.5.2 例2:历时8个月在两个地点进行的项目 418
12.6 习题 420
参考文献 421
第5部分 附录 422
附录A 设计模式 422
A.1 抽象Factory:封装平台 422
A.2 Adapter:包装遗留代码 423
A.3 Bridge:允许备选实现 424
A.4 Command:封装控制 425
A.5 Composite:表示递归的层次结构 426
A.6 Facade:封装子系统 427
A.7 Observer:将实体与视图分离 428
A.8 Proxy:封装昂贵的对象 429
A.9 Strategy: 封装算法 430
参考文献 430
附录B 术语表 432
附录C 参考文献 452