第1章 软件工程概述 1
1.1 软件发展和软件危机 1
1.1.1 软件的定义和发展 1
1.1.2 软件危机过程 2
1.2 软件工程学的范畴 5
1.3 软件开发的生命周期 5
1.4 传统软件工程和面向对象软件工程 7
1.5 软件的特点 10
1.6 软件工程的基本目标 11
小结 12
习题 12
第2章 软件生命周期过程模型 13
2.1 过程及软件生命周期 13
2.2 软件过程模型 14
2.2.1 瀑布模型 15
2.2.2 具有原型化的瀑布模型 17
2.3 演化过程模型 18
2.3.1 原型化模型 18
2.3.2 螺旋模型 19
2.3.3 操作说明模型 20
2.4 增量过程模型 21
2.4.1 RAD模型 21
2.4.2 增量和迭代模型 22
2.5 其他类型的过程模型 23
2.5.1 喷泉模型 23
2.5.2 智能模型 24
2.5.3 V模型 25
2.5.4 变换模型 25
小结 26
习题 26
第3章 需求分析 27
3.1 需求分析的任务 27
.3.1.1 需求定义 27
3.1.2 需求的层次 28
3.1.3 需求的开发与管理 28
3.2 需求获取技术 30
3.2.1 需求分析人员的组成 30
3.2.2 需求的类型 30
3.2.3 获取需求的途径 31
3.3 需求规格说明书 36
3.3.1 需求说明的目的 36
3.3.2 需求说明的方法 36
3.4 需求描述技术 36
3.4.1 结构化技术 36
3.4.2 形式化技术 40
3.5 需求验证 48
小结 49
习题 49
第4章 概要设计 51
4.1 概要设计的概念 51
4.1.1 概要设计的目标和任务 51
4.1.2 概要设计的过程 53
4.1.3 概要设计的工具 53
4.2 模块独立性 55
4.2.1 模块化 55
4.2.2 模块的耦合性 56
4.2.3 模块的内聚性 60
4.3 结构化设计方法 63
4.3.1 概念 63
4.3.2 变换分析 66
4.3.3 事务分析 68
4.3.4 设计的后处理 69
4.4 数据设计 70
4.4.1 数据设计的原则 70
4.4.2 数据结构设计 71
4.4.3 文件设计 71
4.4.4 数据库设计 72
小结 73
习题 73
第5章 详细设计 74
5.1 详细设计的任务 74
5.2 详细设计的方法 75
5.2.1 设计表示法 75
5.2.2 结构化程序设计 77
5.2.3 面向数据结构的设计 80
5.2.4 详细设计文档与复审 85
小结 90
习题 91
第6章 编码与语言选择 92
6.1 编码的目的和任务 92
6.2 编码所使用的语言 93
6.2.1 程序设计语言范型 93
6.2.2 程序设计语言的发展 94
6.2.3 常用的编码语言 96
6.2.4 编码语言的选择 98
6.3 编码的风格 99
小结 103
习题 103
第7章 面向对象方法 104
7.1 面向对象的基本概念 104
7.1.1 对象 104
7.1.2 类与消息 105
7.1.3 类的基本特征 106
7.2 面向对象的开发方法 106
7.2.1 概述 107
7.2.2 面向对象方法的发展历程 107
7.2.3 常用的面向对象分析的方法 108
7.3 面向对象的设计 111
7.3.1 面向对象设计概述 111
7.3.2 底层设计——类的设计 118
7.3.3 OOD的Yourdon的方法 120
7.3.4 Booch的方法 125
7.3.5 系统的设计过程 126
小结 129
习题 129
第8章 统一建模语言 130
8.1 统一建模语言简介 130
8.1.1 发展历史 130
8.1.2 UML简介 131
8.1.3 UML视图简介 132
8.1.4 视图 132
8.1.5 UML类、构件、部署和协作图中的图标 133
8.1.6 扩展组件 134
8.1.7 各种视图间的关系 134
8.2 概念与视图 135
8.2.1 静态视图 135
8.2.2 用例图 136
8.2.3 交互视图 136
8.2.4 状态图 138
8.2.5 活动视图 139
8.2.6 物理视图 140
8.2.7 模型管理视图 142
8.3 UML与Java的对应关系 143
8.3.1 表示结构 143
8.3.2 表示关系 145
8.4 统一建模语言的综合应用 149
8.4.1 项目概述 149
8.4.2 静态分析和设计 150
8.4.3 持久对象设计 151
8.4.4 动态对象设计 152
8.4.5 通用接口设计 154
8.4.6 体系结构设计 157
小结 159
习题 160
第9章 统一软件过程 161
9.1 软件开发过程 161
9.2 迭代和递增 162
9.3 核心工作流 162
9.3.1 需求流 162
9.3.2 分析流 164
9.3.3 设计流 166
9.3.4 实现流 167
9.3.5 测试流 168
9.3.6 交付后维护 170
9.3.7 退役 170
9.4 统一过程的各阶段 171
9.4.1 开始阶段 171
9.4.2 细化阶段 173
9.4.3 构建阶段 173
9.4.4 转换阶段 174
9.5 二维生命周期模型 174
小结 174
习题 174
第10章 软件测试 176
10.1 软件测试概述 176
10.1.1 软件测试的目标 176
10.1.2 软件测试的原则 177
10.1.3 软件测试的方法 178
10.1.4 软件测试与软件开发各阶段的关系 178
10.1.5 测试信息流 179
10.1.6 错误分类 179
10.2 软件测试过程与策略 182
10.2.1 单元测试 182
10.2.2 集成测试 183
10.2.3 确认测试 186
10.2.4 平行运行 187
10.3 设计测试方案 187
10.3.1 逻辑覆盖 188
10.3.2 等价划分 191
10.3.3 边界值分析 194
10.3.4 错误推测 194
10.3.5 实用测试策略 195
10.4 纠错 198
10.5 对OOA和OOD模型的测试 200
10.5.1 扩大测试的视角 201
10.5.2 测试OOA和OOD模型 201
10.6 面向对象的测试策略 203
10.6.1 在OO语境中的单元测试 203
10.6.2 在OO语境中的集成测试 203
10.6.3 在OO语境中的有效性测试 204
10.7 OO软件的测试用例设计 204
10.7.1 OO概念的测试用例设计的含义 204
10.7.2 传统测试用例设计方法的可用性 204
10.7.3 基于故障的测试 205
10.7.4 OO编程对测试的影响 205
10.7.5 测试用例和类层次 206
10.7.6 基于场景的测试设计 206
10.7.7 测试表层结构和深层结构 207
10.8 其他专门环境要求的测试 208
10.8.1 GUI测试 208
10.8.2 测试文档和帮助设施 209
10.8.3 实时系统测试 210
小结 211
习题 211
第11章 软件维护 213
11.1 系统的变化 213
11.1.1 系统的类型 214
11.1.2 系统生命周期中的变化 215
11.1.3 系统的生命范围 216
11.2 软件维护的基本内容和特点 218
11.2.1 软件维护概述 218
11.2.2 软件维护的特点 219
11.2.3 维护中的问题 220
11.3 软件维护的实施 221
11.3.1 软件维护的过程 221
11.3.2 软件维护的技术 224
11.4 软件的可维护性 224
11.4.1 软件可维护性概述 225
11.4.2 软件可维护性度量 225
11.4.3 提高可维护性的方法 225
11.5 软件维护的副作用 226
11.5.1 代码副作用 226
11.5.2 数据副作用 227
11.5.3 文档副作用 227
11.6 软件再工程 227
11.6.1 软件再工程的过程 227
11.6.2 软件再工程的方法 228
小结 228
习题 229
第12章 软件质量及其管理 230
12.1 软件质量的概念及属性 230
12.1.1 软件质量概述 230
12.1.2 软件质量的属性 230
12.2 软件质量保证与控制 231
12.2.1 软件质量保证概述 232
12.2.2 软件质量保证计划 232
12.2.3 软件质量成本 234
12.2.4 软件质量控制 234
12.3 软件质量度量 235
12.3.1 软件质量度量概述 235
12.3.2 质量度量模型 235
12.3.3 三种度量模型的比较 236
12.3.4 软件质量评价 238
12.4 软件可靠性 238
12.4.1 基本概念 238
12.4.2 影响软件可靠性的因素 239
12.4.3 软件可靠性模型 240
12.4.4 软件可靠性工程 242
12.5 CMM:软件能力成熟度模型 242
12.5.1 CMM的发展 242
12.5.2 基本概念 243
12.5.3 SW-CMM的用途 243
12.5.4 CMM的五个等级 244
12.5.5 CMM的内部结构 246
12.5.6 采用CMM的意义 248
小结 249
习题 249
第13章 软件项目管理 250
13.1 项目管理的概念 250
13.1.1 项目管理过程 250
13.1.2 项目管理的范围 251
13.1.3 项目管理中的资源 251
13.2 可行性研究 252
13.2.1 可行性研究的任务和过程 252
13.2.2 技术可行性研究 253
13.2.3 经济可行性研究 254
13.2.4 运行可行性研究 256
13.3 软件项目估算 257
13.3.1 代码行技术 257
13.3.2 功能点技术 257
13.4 软件开发成本估算 260
13.4.1 软件开发成本估算方法 260
13.4.2 专家判定技术 260
13.4.3 软件开发成本估算的早期经验模型 261
13.5 进度安排 264
13.5.1 软件开发小组人数与软件生产率 264
13.5.2 任务的确定与并行性 264
13.5.3 制定开发进度计划 265
13.5.4 项目的追踪和控制 265
13.6 人员组织 266
13.6.1 民主制程序员组 266
13.6.2 主程序员组 267
13.6.3 现代程序员组 268
13.7 软件风险管理 269
13.7.1 风险识别 269
13.7.2 风险估计 271
13.7.3 风险评价 272
13.7.4 风险驾驭和监控 273
13.8 软件配置管理 274
13.8.1 软件配置 274
13.8.2 软件配置管理过程 275
小结 276
习题 276
第14章 CASE环境与工具 278
14.1 工程环境 278
14.1.1 软件开发环境的特点 278
14.1.2 理想环境的模型 280
14.1.3 CASE环境简介 280
14.2 CASE环境的组成与结构 281
14.2.1 CASE的组成构件 281
14.2.2 CASE的一般结构 283
14.3 CASE环境工具与实践 284
14.3.1 CASE软件工程实践 284
14.3.2 常用CASE工具介绍 285
14.4 逐步求精 287
小结 290
习题 290
第15章 软件工程新技术概述 292
15.1 敏捷软件开发过程 292
15.1.1 敏捷的概念 293
15.1.2 敏捷过程的含义 293
15.1.3 敏捷过程模型 295
15.2 设计模式 302
15.2.1 设计模式的基本概念 302
15.2.2 关系环与组合模式 303
15.2.3 工厂模式 306
15.2.4 观察者模式与拉推数据 315
15.3 Web工程简介 320
15.3.1 Web系统和应用特点 320
15.3.2 Web工程的层次 321
15.3.3 Web分析 322
15.3.4 Web设计 323
15.3.5 Web测试 324
15.3.6 Web的项目管理 328
小结 330
习题 330
参考文献 331