第1章 软件工程概述 1
1.1 软件发展概述 1
1.1.1 软件 1
1.1.2 软件危机 2
1.2 软件工程 3
1.2.1 软件工程概念 3
1.2.2 软件工程研究目标 4
1.2.3 软件工程原则 5
1.2.4 软件工程基本原理 5
1.3 软件生存周期 6
1.3.1 问题定义阶段 6
1.3.2 需求分析 7
1.3.3 软件设计 8
1.3.4 程序编码 9
1.3.5 软件测试 9
1.3.6 运行维护 9
1.4 软件过程 9
1.4.1 软件过程的概念 10
1.4.2 软件过程基本活动 11
1.4.3 软件过程标准 11
1.4.4 软件过程周期 12
1.5 软件过程模型 13
1.5.1 瀑布模型 15
1.5.2 增量模型 16
1.5.3 进化式开发模型 17
1.5.4 特殊的过程模型 19
1.5.5 统一过程模型 20
1.6 软件工程方法 21
1.7 软件工程所面临的主要问题 24
本章小结 25
思考题 25
第2章 系统工程 26
2.1 系统概述 26
2.1.1 系统的定义 26
2.1.2 系统的特性 27
2.1.3 系统总体特性 30
2.1.4 系统建模 30
2.1.5 本书案例:开放实验室管理系统 31
2.2 系统工程过程 32
2.2.1 系统需求定义 33
2.2.2 系统设计 33
2.2.3 子系统开发 34
2.2.4 系统整合 35
2.2.5 系统安装 35
2.2.6 系统操作 35
2.2.7 系统进化 35
2.2.8 系统退役 36
2.2.9 系统获得 36
2.3 基于计算机的系统工程 37
2.3.1 硬件工程 37
2.3.2 软件工程 38
2.3.3 人机工程 38
本章小结 39
思考题 39
第3章 软件需求工程 40
3.1 概述 40
3.2 需求分析任务 42
3.3 软件需求分析类型 44
3.3.1 软件需求基本分类 44
3.3.2 用户需求 46
3.3.3 系统需求 47
3.4 软件需求分析原则 47
3.5 需求分析方法 48
3.5.1 结构化分析方法 48
3.5.2 面向对象分析方法 54
3.5.3 结构化语言描述 55
3.6 软件需求工程管理 56
3.6.1 定义需求 56
3.6.2 需求确认 57
3.6.3 建立需求状态 57
3.6.4 需求评审 57
3.6.5 需求变更控制 59
3.7 软件需求文档 60
本章小结 62
思考题 62
第4章 面向对象分析 64
4.1 面向对象方法概述 64
4.1.1 什么是面向对象 64
4.1.2 面向对象的基本概念 66
4.2 UML概述 68
4.2.1 UML的组成 68
4.2.2 UML中的模型元素 69
4.2.3 UML中的图 71
4.2.4 UML中的视图 74
4.3 面向对象分析过程 75
4.3.1 面向对象分析概述 75
4.3.2 用例建模 76
4.3.3 类建模 78
4.3.4 行为建模 81
4.4 面向对象分析方法举例 83
4.4.1 案例描述 83
4.4.2 案例分析 85
4.5 面向对象分析阶段的CASE工具 89
4.5.1 UML建模工具 89
4.5.2 图稿绘制工具 90
4.6 面向对象分析阶段面临的挑战 90
本章小结 90
思考题 91
第5章 软件设计 92
5.1 软件体系结构概述 92
5.1.1 软件体系结构的概念以及研究内容和范畴 92
5.1.2 体系结构风格、设计模式和框架的概念 94
5.2 软件体系结构的设计原则和风格 94
5.2.1 设计原则 94
5.2.2 软件体系结构风格 96
5.3 典型体系结构介绍 98
5.3.1 TAFIM体系结构 98
5.3.2 DOD体系结构 99
5.3.3 TOGAF体系结构 101
5.4 设计过程 101
5.4.1 概要设计 102
5.4.2 详细设计 104
5.4.3 设计测试 109
5.5 面向行为的设计 110
5.5.1 数据流分析 110
5.5.2 事务分析 114
5.6 面向数据的设计 116
5.6.1 Jackson表示法 116
5.6.2 Jackson方法的设计步骤 117
5.7 设计阶段的度量 119
5.8 面向对象设计 120
本章小结 120
思考题 120
第6章 面向对象设计 124
6.1 面向对象设计概述 124
6.2 系统架构设计 126
6.2.1 系统高层结构设计 126
6.2.2 确定设计元素 128
6.2.3 人机交互设计 130
6.3 系统元素设计 135
6.3.1 子系统设计 135
6.3.2 分包设计 135
6.3.3 类/对象设计 136
6.4 面向对象设计优化 140
6.4.1 确定优先级 140
6.4.2 提高效率的几项技术 140
6.5 软件复用 142
6.5.1 复用概述 142
6.5.2 开发可复用构件库 143
6.5.3 建立可复用构件库 144
6.6 面向对象设计示例 146
6.6.1 系统上下文和用例模型 146
6.6.2 体系结构的设计 147
6.6.3 对象识别 148
6.6.4 设计模型 149
6.6.5 对象接口描述 149
本章小结 151
思考题 151
第7章 软件实现 153
7.1 软件开发语言的选择 153
7.1.1 程序设计语言的特性及其选择依据 153
7.1.2 程序设计风格 154
7.1.3 目前常用程序设计语言对比 155
7.2 面向对象的软件实现 160
7.2.1 概述 160
7.2.2 面向对象软件实现过程 161
7.2.3 “开放实验室管理系统”的实现 165
7.3 软件开发中的注意事项 175
7.3.1 项目设计 175
7.3.2 设计变化和需求变化 176
7.3.3 代码编写 176
本章小结 178
思考题 178
第8章 软件测试 179
8.1 软件测试概述 179
8.1.1 软件测试定义 179
8.1.2 软件测试目的 180
8.1.3 软件测试分类 181
8.1.4 软件测试原则 181
8.2 软件测试方法和技术 182
8.2.1 概述 182
8.2.2 黑盒测试 183
8.2.3 白盒测试 191
8.2.4 黑盒测试与白盒测试比较 193
8.3 软件测试过程、策略和文档 195
8.3.1 软件测试过程 195
8.3.2 软件测试策略 200
8.3.3 软件测试文档 200
8.3.4 软件测试结束的标志 200
8.4 测试用例的设计 201
8.4.1 测试用例概述 201
8.4.2 测试用例设计原则 201
8.4.3 编制测试用例 203
8.4.4 测试用例的作用 204
8.5 软件测试工具分类及选择 205
8.5.1 黑盒测试工具 205
8.5.2 白盒测试工具 205
8.5.3 其他测试工具 205
8.5.4 测试工具的选择 206
本章小结 206
思考题 207
第9章 软件维护 208
9.1 软件维护的定义、内容和特点 208
9.1.1 软件维护的定义 208
9.1.2 软件维护的内容 209
9.1.3 软件维护的特点 209
9.2 软件维护的过程 210
9.2.1 建立维护组织 210
9.2.2 维护过程 211
9.2.3 保管维护记录 212
9.2.4 维护评价 213
9.2.5 维护技术 213
9.3 软件的可维护性 214
9.3.1 软件维护性的问题 214
9.3.2 决定软件可维护性的因素 215
9.3.3 提高可维护性的方法 216
9.4 软件再工程 217
9.4.1 再工程的概念 218
9.4.2 再分析 219
9.4.3 再编码 219
9.4.4 再测试 219
9.4.5 实用的复用策略 219
本章小结 220
思考题 221
第10章 软件质量管理 222
10.1 软件质量 222
10.1.1 软件质量的定义 222
10.1.2 软件质量的内容 223
10.1.3 软件质量因素 224
10.2 软件质量管理 225
10.2.1 质量管理概念 225
10.2.2 软件质量方针 226
10.2.3 软件质量计划 226
10.3 软件质量控制与保证 227
10.3.1 软件质量控制概述 228
10.3.2 软件质量控制工具 228
10.3.3 软件质量保证的原则和计划 230
10.3.4 软件质量保证的内容和措施 232
10.3.5 软件技术评审 232
10.3.6 软件质量标准 234
10.4 软件质量度量 235
10.4.1 软件质量度量的概念 236
10.4.2 软件质量度量的分类 236
10.4.3 软件质量度量模型 236
10.4.4 软件质量度量方法 240
10.4.5 软件复杂性度量 240
10.4.6 软件可靠性度量 242
10.5 案例描述 243
10.5.1 角色和职责 243
10.5.2 策划活动 243
10.5.3 审计活动 244
10.5.4 不符合问题处理 247
10.5.5 通报SQA活动结果 247
10.5.6 资源 247
本章小结 247
思考题 248
第11章 软件过程改进 249
11.1 软件过程 249
11.1.1 过程 249
11.1.2 软件过程的概念 249
11.1.3 软件过程的分类和组成 250
11.2 软件过程改进概述 251
11.2.1 过程改进 251
11.2.2 过程改进的两种模式 252
11.2.3 过程改进的原则和步骤 252
11.3 软件过程度量 253
11.3.1 过程度量的概念 253
11.3.2 过程度量的原则 254
11.3.3 过程度量的内容 254
11.3.4 过程度量的流程 254
11.4 能力成熟度模型CMM 255
11.4.1 软件机构的过程成熟度 255
11.4.2 CMM分级结构及主要特征 255
11.4.3 CMM的主要内容 257
11.4.4 CMM的内部结构 258
11.4.5 CMM的应用 259
11.5 能力成熟度模型集成CMMI 259
11.5.1 CMMI模型的表示 260
11.5.2 CMMI模型的应用 261
11.6 个体软件过程 262
11.7 团队软件过程 262
11.8 案例描述 264
11.8.1 需求管理 264
11.8.2 软件项目策划 266
11.8.3 软件项目跟踪与监督 267
本章小结 267
思考题 268
第12章 软件配置管理 269
12.1 概述 269
12.1.1 软件配置管理的概念 269
12.1.2 软件配置管理的内容 270
12.1.3 软件配置管理的职责及任务 272
12.2 软件配置 274
12.2.1 软件配置项 274
12.2.2 配置标识 275
12.3 基线技术 276
12.3.1 基线分类 276
12.3.2 基线管理 277
12.4 版本控制 277
12.5 修改控制 278
12.6 配置审核 279
12.7 配置状态报告 281
12.8 配置管理的CASE工具 281
12.9 案例描述 283
12.9.1 建立软件三库 283
12.9.2 配置控制流程 284
12.9.3 配置状态报告和配置审核 284
本章小结 285
思考题 285
附录 “开放实验室管理系统”案例 286
参考文献 304