第一章 软件工程技术概述 1
1.1 软件的神话 1
1.2 软件工程的产生背景 4
1.3 软件的特点与软件工程的定义 6
1.3.1 软件的特点 6
1.3.2 软件工程的定义 7
1.4 软件的生命周期与软件工程的内容 8
1.5 计算机辅助软件工程 12
1.5.1 基本概念 12
1.5.2 常用工具 13
1.5.3 集成环境 14
1.6 本章小结 14
作业与练习 15
第二章 软件生命周期模型 16
2.1 软件过程与软件模型 16
2.1.1 问题的确认和范围 16
2.1.2 需求分析与描述 17
2.1.3 系统设计 21
2.1.4 实现 22
2.1.5 测试与交付 24
2.1.6 软件维护 25
2.1.7 软件淘汰 26
2.2 软件开发的困难与问题 26
2.3 软件过程模型 28
2.3.1 构造-修复模型 28
2.3.2 瀑布模型 29
2.3.3 快速原型模型 30
2.3.4 增量模型 32
2.3.5 同步-稳定模型 33
2.3.6 螺旋模型 34
2.3.7 面向对象模型 36
2.4 各种模型的比较 37
2.5 本章小结 38
作业与练习 38
实习题一 39
第三章 传统软件工程技术简介 43
3.1 结构化程序的发展 43
3.2 结构化程序的开发流程与特点 44
3.2.1 结构化程序设计的分析与建模 44
3.2.2 结构化程序设计的原则与方法 52
3.2.3 测试 56
3.2.4 软件维护 57
3.3 结构化程序设计与面向对象程序设计的比较 57
3.3.1 结构化程序设计 58
3.3.2 面向对象程序设计 60
3.4 结构化程序的应用 63
3.5 本章小结 64
作业与练习 64
第四章 面向对象技术 65
4.1 对象的概念 65
4.2 面向对象的概念 65
4.2.1 类与对象 66
4.2.2 属性 68
4.2.3 方法、操作、服务与行为 68
4.2.4 消息机制 69
4.3 面向对象程序的特点 69
4.3.1 封装性 70
4.3.2 继承性 70
4.3.3 多态性 72
4.3.4 重用性 75
4.4 面向对象开发的方法 76
4.4.1 Booch方法 77
4.4.2 Coad方法 77
4.4.3 OMT方法 78
4.4.4 VMT方法 78
4.4.5 四种方法的比较 79
4.5 本章小结 79
作业与练习 80
实习题二 81
第五章 UML语言 83
5.1 UML语言 83
5.1.1 UML语言 83
5.1.2 UML的应用领域 84
5.2 UML与面向对象软件的分析与设计 84
5.2.1 建立模型的必要性 84
5.2.2 UML在面向对象软件开发不同阶段的应用 85
5.3 面向对象软件开发中的UML基础 86
5.3.1 用例图和用例描述 86
5.3.2 类图和对象图 90
5.3.3 包图 94
5.3.4 状态图 95
5.3.5 序列图 97
5.3.6 协作图 100
5.3.7 活动图 101
5.4 UML建模工具介绍 103
5.5 本章小结 104
作业与练习 104
第六章 需求分析与描述 106
6.1 软件需求 106
6.1.1 业务需求 107
6.1.2 用户需求 108
6.1.3 功能需求和非功能需求 109
6.1.4 系统需求 110
6.2 需求工程过程 110
6.2.1 需求获取 111
6.2.2 需求分析 111
6.2.3 需求规格说明 112
6.2.4 需求验证 116
6.2.5 需求管理 119
6.3 需求获取技术 121
6.3.1 面谈 122
6.3.2 需求专题讨论会 124
6.3.3 观察用户工作流程 125
6.3.4 原型化方法 125
6.3.5 基于用例的方法 126
6.4 案例分析 126
6.4.1 确定系统参与者 127
6.4.2 确定场景 128
6.4.3 确定用例 128
6.4.4 编写用例描述 129
6.5 本章小结 130
作业与练习 131
实习题三 131
第七章 面向对象分析 132
7.1 基本原理与概念 132
7.2 基本方法与过程 133
7.2.1 OOA原则 133
7.2.2 OOA建模的基本过程 134
7.3 OOA实践1:ATM系统 139
7.4 OOA实践2:电梯控制系统 149
7.5 本章小结 151
作业与练习 152
实习题四 153
第八章 面向对象设计 154
8.1 OOD的基本概念与原理 154
8.2 OOD的方法和基本过程 156
8.2.1 OOD的设计原则 157
8.2.2 系统设计过程 159
8.2.3 对象设计过程 163
8.2.4 设计测试 165
8.2.5 正式设计审查 165
8.3 OOD实践1:ATM系统 166
8.3.1 系统设计 166
8.3.2 对象设计 169
8.4 OOD实践2:电梯控制系统 170
8.4.1 系统设计 170
8.4.2 对象设计 172
8.5 本章小结 176
作业与练习 176
实习题五 177
实习题六 178
第九章 实现与测试 179
9.1 重用性 179
9.1.1 重用的概念 179
9.1.2 对象与重用 180
9.1.3 软件开发各个阶段中的重用 180
9.2 选择编程语言 182
9.2.1 编程语言的类型 182
9.2.2 快速原型语言 183
9.2.3 最终实现语言 183
9.3 好的编程风格与原则 185
9.4 单元测试 188
9.4.1 黑盒测试 189
9.4.2 白盒测试 190
9.4.3 其他测试 192
9.4.4 测试方法的评价与选择 197
9.5 集成测试 198
9.5.1 自顶向下测试 199
9.5.2 自底向上测试 200
9.5.3 三明治测试 200
9.6 产品测试与验收测试 201
9.6.1 产品测试 201
9.6.2 验收测试 201
9.7 面向对象的软件测试 202
9.7.1 面向对象软件测试的单元 202
9.7.2 类测试 203
9.8 软件测试文档 204
9.8.1 软件测试计划 204
9.8.2 软件测试记录 206
9.8.3 软件测试评估分析报告 207
9.9 软件实现与测试的CASE工具 209
9.9.1 关于JUnit 209
9.9.2 关于EMMA 211
9.10 本章小结 212
作业与练习 212
实习题七 213
第十章 软件维护 214
10.1 软件维护的重要性 214
10.1.1 软件维护的种类 214
10.1.2 对软件维护工程师的要求 215
10.2 软件维护的管理 216
10.2.1 错误与缺陷的报告 216
10.2.2 错误与缺陷的划分 217
10.2.3 维护内容的明确 218
10.2.4 维护与终止的选择 218
10.3 面向对象软件的维护 219
10.3.1 维护面向对象软件的优势 219
10.3.2 维护面向对象软件的困难 219
10.4 逆向工程 221
10.5 软件维护的CASE工具 221
10.6 软件维护的发展 222
10.7 本章小结 222
作业与练习 223
实习题八 224
第十一章 软件的标准与软件文档 225
11.1 软件工程标准化 225
11.1.1 软件工程标准化的概念 225
11.1.2 软件工程标准化的意义 226
11.1.3 软件工程标准的分类 226
11.1.4 软件工程标准的制定与推行 227
11.1.5 软件工程标准的层次 227
11.1.6 国外的标准化组织 228
11.1.7 我国的软件工程标准化工作 232
11.2 软件文档 234
11.2.1 软件文档的含义 234
11.2.2 软件文档的作用 235
11.2.3 软件文档的分类 235
11.2.4 常用软件文档 235
11.2.5 软件文档的编写 237
11.2.6 编写的文档数量与其主要内容 244
11.2.7 各级软件应该编写的文档 245
11.2.8 几种常用标准中文档的名称 245
11.2.9 文档的管理与维护 246
11.3 软件质量认证 247
11.3.1 ISO 9000标准概述 248
11.3.2 ISO 9000标准的特点 249
11.3.3 ISO 9000质量认证的一般程序 250
11.3.4 ISO 9000标准的构成 251
11.3.5 2000版ISO 9000标准的质量管理原则 253
11.3.6 2000版ISO 9000系列标准与1994版的主要变化 253
11.4 注释文档工具javadoc 254
11.4.1 javadoc简介 254
11.4.2 javadoc的命令行语法 255
11.4.3 javadoc文档注释方法 258
11.5 本章小结 261
作业与练习 261
实习题九 261
第十二章 软件开发团队 262
12.1 团队的作用与组织 262
12.2 民主团队 263
12.3 首领程序员团队 264
12.4 其他形式的团队 266
12.5 角色与责任的划分 268
12.6 本章小结 270
作业与练习 271
第十三章 软件工程技术发展 272
13.1 软件开发中的形式化方法 272
13.1.1 基本概念 272
13.1.2 有穷状态机 274
13.1.3 Petri网 278
13.1.4 Z语言 281
13.1.5 小结 283
13.2 基于组件的软件工程 283
13.2.1 基于组件的软件开发过程 283
13.2.2 组件的开发流程 284
13.2.3 基于组件的软件工程及其研究 286
13.3 软件能力成熟度模型 286
13.3.1 CMM概述 287
13.3.2 CMM的基本概念 288
13.3.3 CMM的五个级别 288
13.3.4 成熟度提问单 290
13.3.5 利用CMM对软件机构进行成熟度评估 292
13.3.6 关键过程域 292
13.3.7 关键实践 293
13.3.8 基于模型改进的优点与风险 294
13.3.9 CMMI 295
13.4 软件测试技术 296
13.4.1 GUI测试 296
13.4.2 Web测试 299
13.4.3 回归测试 301
13.4.4 软件测试技术展望 304
13.5 面向代理的软件工程技术 304
13.5.1 面向代理的软件技术 304
13.5.2 面向代理的软件工程技术 305
13.6 结束语 307
作业与练习 308
参考文献 309