第1章 绪论 1
1.1 软件和软件危机 1
1.1.1 软件的定义 1
1.1.2 软件的特征 2
1.1.3 软件危机 2
1.2 软件工程学的范畴 4
1.2.1 软件开发方法学 5
1.2.2 软件工具 5
1.2.3 软件工程环境 6
1.2.4 软件工程管理 6
1.3 软件工程的发展 6
1.3.1 3种编程范型 7
1.3.2 3代软件工程 9
1.4 软件工程的应用 10
1.4.1 在各种规模软件开发中的应用 10
1.4.2 软件工程的成就与发展展望 12
1.5 软件工程的教学:本书导读 13
小结 15
习题 15
上篇 传统软件工程 17
第2章 软件生存周期与软件过程 19
2.1 软件生存周期 19
2.1.1 软件生存周期的主要活动 19
2.1.2 生存周期与软件过程的关系 20
2.2 传统的软件过程 21
2.2.1 瀑布模型 21
2.2.2 快速原型模型 23
2.3 软件演化模型 24
2.3.1 增量模型 24
2.3.2 螺旋模型 25
2.3.3 构件集成模型 27
2.4 形式化方法模型 28
2.4.1 转换模型 28
2.4.2 净室模型 29
2.5 统一过程和敏捷过程 31
2.5.1 统一过程 31
2.5.2 敏捷过程 32
2.5.3 极限编程 33
2.6 软件可行性研究 35
2.6.1 可行性研究的内容与步骤 35
2.6.2 软件风险分析 36
2.6.3 项目实施计划 39
小结 40
习题 40
第3章 结构化分析与设计 41
3.1 概述 41
3.1.1 结构化分析与设计的由来 41
3.1.2 SA模型的组成与描述 43
3.1.3 SD模型的组成与描述 50
3.2 结构化系统分析 51
3.2.1 画分层数据流图 51
3.2.2 确定数据定义与加工策略 54
3.2.3 需求分析的复审 55
3.3 结构化系统设计 55
3.3.1 SD概述 55
3.3.2 SD的步骤:从DFD图到SC图 57
3.3.3 变换映射 58
3.3.4 事务映射 60
3.3.5 优化初始SC图的指导规则 62
3.3.6 教材购销系统的总体结构 63
3.4 模块设计 65
3.4.1 目的与任务 65
3.4.2 模块设计的原则与方法 66
3.4.3 常用的表达工具 68
小结 70
习题 71
中篇 面向对象软件工程 73
第4章 面向对象与UML 75
4.1 面向对象概述 75
4.1.1 对象和类 75
4.1.2 面向对象的基本特征 76
4.1.3 面向对象开发的优点 78
4.2 UML简介 78
4.2.1 UML的组成 79
4.2.2 UML的特点 82
4.2.3 UML的应用 83
4.3 静态建模 83
4.3.1 用例图与用例模型 84
4.3.2 类图和对象图 85
4.3.3 包 92
4.4 动态建模 92
4.4.1 消息 92
4.4.2 状态图 93
4.4.3 时序图和协作图 95
4.4.4 活动图 98
4.5 物理架构建模 99
4.5.1 物理架构 99
4.5.2 构件图和部署图 100
4.6 UML工具 101
4.6.1 Rational Rose 101
4.6.2 StarUML 103
小结 104
习题 104
第5章 需求工程与需求分析 105
5.1 软件需求工程 105
5.1.1 软件需求的定义 105
5.1.2 软件需求的特性 106
5.1.3 需求工程的由来 107
5.2 需求分析与建模 108
5.2.1 需求分析的步骤 108
5.2.2 需求分析是迭代过程 109
5.3 需求获取的常用方法 110
5.3.1 常规的需求获取方法 110
5.3.2 用快速原型法获取需求 111
5.4 需求模型 112
5.4.1 需求模型概述 112
5.4.2 面向对象的需求建模 114
5.5 软件需求描述 123
5.6 需求管理 123
5.6.1 需求管理的内容 124
5.6.2 需求变更控制 125
5.6.3 需求管理工具 128
5.7 需求建模示例 128
5.7.1 问题陈述 129
5.7.2 用例模型 130
5.7.3 补充规约 134
5.7.4 术语表 135
小结 136
习题 136
第6章 面向对象分析 138
6.1 软件分析概述 138
6.1.1 面向对象软件分析 138
6.1.2 面向对象分析模型 140
6.2 面向对象分析建模 141
6.2.1 识别与确定分析类 141
6.2.2 建立对象-行为模型 144
6.2.3 建立对象-关系模型 147
6.3 面向对象分析示例 149
6.3.1 注册 149
6.3.2 维护个人信息 151
6.3.3 维护购物车 153
6.3.4 生成订单 157
6.3.5 管理订单 159
小结 164
习题 164
第7章 面向对象设计 165
7.1 软件设计概述 165
7.1.1 软件设计的概念 165
7.1.2 软件设计的任务 167
7.1.3 模块化设计 167
7.2 面向对象设计建模 173
7.2.1 面向对象设计模型 173
7.2.2 面向对象设计的任务 174
7.2.3 模式的应用 175
7.3 系统架构设计 176
7.3.1 系统高层结构设计 176
7.3.2 确定设计元素 177
7.3.3 任务管理策略 179
7.3.4 分布式实现机制 182
7.3.5 数据存储设计 185
7.3.6 人机交互设计 188
7.4 系统元素设计 189
7.4.1 子系统设计 189
7.4.2 分包设计 192
7.4.3 类/对象设计 195
7.5 面向对象设计示例 204
7.5.1 关联关系的具体化 205
7.5.2 网上购物系统的架构设计 206
7.5.3 网上购物系统的类/对象设计 207
小结 210
习题 211
第8章 编码与测试 212
8.1 编码概述 212
8.1.1 编码的目的 212
8.1.2 编码的风格 213
8.2 编码语言与编码工具 216
8.2.1 编码语言的发展 216
8.2.2 常用的编程语言 218
8.2.3 编码语言的选择 220
8.2.4 编码工具 222
8.3 编码示例 222
8.3.1 注册功能编码实现 222
8.3.2 维护购物车功能编码实现 228
8.4 测试的基本概念 233
8.4.1 目的与任务 233
8.4.2 测试的特性 234
8.4.3 测试的种类 235
8.4.4 测试的文档 235
8.4.5 软件测试过程 236
8.5 黑盒测试和白盒测试 236
8.5.1 黑盒测试 237
8.5.2 白盒测试 240
8.6 测试用例设计 248
8.6.1 黑盒测试用例设计 248
8.6.2 白盒测试用例设计 250
8.7 多模块程序的测试策略 254
8.7.1 测试的层次性 254
8.7.2 单元测试 255
8.7.3 集成测试 256
8.7.4 确认测试 259
8.7.5 系统测试 260
8.7.6 终止测试的标准 260
8.8 面向对象系统的测试 261
8.8.1 OO软件的测试策略 261
8.8.2 OO软件测试用例设计 262
小结 265
习题 265
下篇 软件工程的近期进展、管理与环境 269
第9章 软件维护 271
9.1 软件维护的种类 271
9.2 软件可维护性 272
9.3 软件维护的实施 274
9.4 软件维护的管理 275
9.5 软件配置管理 277
9.6 软件再工程 279
小结 281
习题 282
第10章 软件复用 283
10.1 软件复用的基本概念 283
10.1.1 软件复用的定义 283
10.1.2 软件复用的措施 284
10.1.3 软件复用的粒度 285
10.2 领域工程 286
10.2.1 横向复用和纵向复用 286
10.2.2 实施领域分析 287
10.2.3 开发可复用构件 287
10.2.4 建立可复用构件库 289
10.3 基于构件的软件开发 290
10.3.1 构件集成模型 291
10.3.2 应用系统工程 291
10.4 面向对象与软件复用 292
10.4.1 OO方法对软件复用的支持 292
10.4.2 复用技术对OO方法的支持 293
10.4.3 基于构件软件开发的现状与问题 295
小结 295
习题 296
第11章 软件工程管理 297
11.1 管理的目的与内容 297
11.2 软件估算模型 298
11.2.1 资源估算模型 298
11.2.2 COCOMO模型 300
11.3 软件成本估计 302
11.4 人员的分配与组织 308
11.5 项目进度安排 311
小结 314
习题 315
第12章 软件质量管理 316
12.1 从质量保证到质量认证 316
12.2 质量保证 317
12.2.1 软件的质量属性 317
12.2.2 质量保证的活动内容 318
12.3 软件可靠性 319
12.3.1 可靠性的定义和分级 319
12.3.2 可靠性模型 321
12.3.3 软件容错技术 323
12.4 程序正确性证明 326
12.5 CMM软件能力成熟度模型 328
12.5.1 CMM的基本概念 328
12.5.2 软件能力成熟度等级 329
12.5.3 CMM的应用 330
12.5.4 CMM评估的实施 331
12.5.5 软件过程评估的SPICE国际标准 331
12.6 ISO 9000国际标准 332
12.6.1 ISO 9001和ISO 9000-3 332
12.6.2 ISO 9000标准对软件企业的重要性 333
12.6.3 在软件企业中实施ISO 9000标准 334
12.7 软件度量 334
12.7.1 项目度量 334
12.7.2 过程度量 336
小结 337
习题 338
第13章 软件工程环境 339
13.1 什么是软件工程环境 339
13.1.1 软件开发环境的特点 339
13.1.2 理想环境的模型 341
13.1.3 CASE环境 341
13.2 CASE环境的组成与结构 342
13.2.1 CASE的组成构件 342
13.2.2 CASE的一般结构 343
13.3 CASE环境实例 345
13.3.1 Rational SUITE Enterprise Studio 346
13.3.2 青鸟系统 351
小结 351
习题 352
第14章 软件工程高级课题 353
14.1 Web工程 353
14.1.1 Web工程与软件工程 354
14.1.2 Web开发 354
14.2 基于体系结构的软件开发 358
14.2.1 应用软件的体系结构 359
14.2.2 编程范型对体系结构的影响 360
14.2.3 编程范型对复用粒度的影响 360
14.2.4 软件体系结构技术仍在发展 360
14.3 面向方面的软件开发 361
14.3.1 面向方面编程 361
14.3.2 AOP语言规范 362
14.3.3 AOP与OOP比较 363
14.3.4 面向方面软件开发 364
14.4 形式化的软件开发 364
14.4.1 形式化方法的定义 365
14.4.2 形式化的软件开发 366
小结 368
习题 369
附录 缩略语中英文对照表 370
主要参考文献 372