1.1 软件工程的基本概念、特点、分类 1
1.1.1 软件的概念、特点 1
第1章 软件工程概述 1
1.1.2 软件的分类 2
1.1.3 软件工程概述 4
1.2 软件发展和软件危机 6
1.2.1 软件的发展 6
1.2.2 软件危机过程 7
1.3 软件模型 10
1.4 软件工程的基本目标 14
习题1 15
1.5 小结 15
第2章 软件需求分析 16
2.1 需求分析的任务 16
2.1.1 基本原理 16
2.1.2 需求的层次 16
2.1.3 需求的开发与管理 17
2.2 需求获取的技术 19
2.2.1 需求分析人员的组成 19
2.2.2 需求的类型 19
2.3.1 需求说明的目的 20
2.3.2 需求说明的方法 20
2.3 需求规格说明书 20
2.2.3 获取需求的途径 20
2.3.3 数据流图 21
2.3.4 数据词典和加工说明 22
2.3.5 需求规格说明书格式 23
2.4 需求分析的过程 23
2.4.1 抽取现实问题的本质 23
2.4.2 改进和优化 24
2.4.3 需求分析的验证 25
2.5 结构化需求分析方法 26
2.5.1 画分层数据流图 26
2.5.2 确定数据定义和加工策略 28
2.5.3 需求分析的复审 29
2.6 原型化需求分析方法 30
2.7 小结 30
习题2 31
第3章 软件设计原理 33
3.1 软件设计的任务 33
3.1.1 基本原理 33
3.1.2 实际工作的误区 34
3.2 软件设计的步骤 34
3.2.1 两种设计思路 34
3.2.2 概要设计 35
3.2.3 详细设计 35
3.3.1 模块化 36
3.2.4 设计复审 36
3.3 软件设计的模块化思想 36
3.3.2 分解 38
3.3.3 信息隐藏和局部化 38
3.3.4 模块独立性(modular independence) 38
3.4 软件设计的原则 46
3.4.1 提高模块独立性 46
3.4.2 调整模块的大小 47
3.4.3 适当的模块深度、宽度、扇出和扇入 47
3.4.4 模块的作用范围应在控制范围之内 48
习题3 49
3.5 小结 49
3.4.5 简化模块接口的复杂程度 49
第4章 软件设计方法 51
4.1 软件设计常用工具 51
4.1.1 概要设计工具 51
4.1.2 详细设计工具 53
4.2 结构化软件设计方法 55
4.2.1 概念 56
4.2.2 变换分析 58
4.2.3 事务分析 60
4.2.4 设计的后处理 61
4.3.2 表示数据结构的Jackson图 62
4.3.1 面向数据结构的设计 62
4.3 Jackson设计方法 62
4.3.3 表示程序结构的Jackson图 65
4.3.4 Jackson伪代码 65
4.4.5 Jackson设计方法步骤 66
4.4 面向对象软件设计方法概述 67
4.4.1 什么是面向对象的软件设计方法 67
4.4.2 面向对象分析OOA 67
4.4.3 面向对象设计OOD 68
4.5 小结 68
习题 4 68
5.1 程序设计语言分类 70
第5章 编码设计 70
5.2 程序设计语言的特点 71
5.3 编码的目的 73
5.4 写程序的风格 74
5.5 程序设计方法论 77
5.6 面向对象编程概念 77
5.7 面向对象编程语言 81
5.8 小结 86
习题5 86
第6章 面向对象技术 87
6.1 面向对象的概念 87
6.1.1 面向对象方法概述 87
6.1.2 面向对象的软件工程 88
6.1.3 面向对象的基本概念 90
6.2 对象的本质及表示 97
6.3 面向对象软件的开发过程 99
6.3.1 应用生存期 99
6.3.2 类生存期 100
6.3.3 面向对象软件的开发过程 104
6.3.4 系统体系结构 105
6.4 面向对象软件项目的管理 106
6.5 统一建模语言UML简介(一) 108
6.5.1 发展历史 108
6.5.2 UML简介 109
6.5.3 UML视图简介 110
6.5.4 视图 111
6.5.5 UML类、构件、部署和协作图中的图标 112
6.5.6 扩展组件 112
6.5.7 各种视图间的关系 113
6.6 小结 114
习题6 114
第7章 面向对象分析 115
7.1 面向对象分析(OOA)基本内容 115
7.1.1 OOA的基本原则和任务 116
7.1.2 常用的OOA方法 116
7.1.3 OOA概述 118
7.2.1 论域分析介绍 119
7.2 论域分析 119
7.2.2 论域分析过程 122
7.3 系统分析过程 123
7.3.1 使用实例 123
7.3.2 类—责任—协作者建模 125
7.3.3 定义结构和层次 127
7.3.4 定义主题和子系统 128
7.4 OOA的Yourdon方法 130
7.4.1 面向对象分析的考虑 130
7.4.2 标识类和对象 131
7.4.3 细化类和对象 133
7.4.4 标识属性 134
7.4.5 标识服务 136
7.4.6 标识结构 138
7.4.7 标识主题 139
7.5 统一建模语言UML简介(二) 140
7.5.1 静态视图 140
7.5.2 用例图 141
7.5.3 交互视图 142
7.5.4 状态图 144
7.5.5 活动视图 145
7.5.6 物理视图 146
习题7 148
7.6 小结 148
7.5.7 模型管理视图 148
第8章 面向对象设计 150
8.1 面向对象设计(OOD)概述 150
8.1.1 高层设计 150
8.1.2 类设计的目标和方针 153
8.1.3 通过复用设计类 154
8.1.4 类设计方法 156
8.1.5 类设计的例子 158
8.2 系统设计过程 162
8.2.1 划分分析模型 162
8.2.3 任务管理构件 163
8.2.2 并发性和子系统分配 163
8.2.4 数据管理构件 164
8.2.5 资源管理构件 164
8.2.6 人机界面构件 164
8.2.7 子系统间通信 164
8.3 OOD的Yourdon方法 165
8.3.1 问题论域部分(PDC,Problem Domain Component)的设计 166
8.3.2 用户界面部分的设计 168
8.3.3 任务管理部分的设计 170
8.3.4 数据管理部分的设计 171
8.3.5 程序设计语言的影响 172
8.4 Booch的方法 172
8.4.2 Booch方法的基本的模型 173
8.4.1 Booch方法的设计过程 173
8.5 统一建模语言UML简介(三) 177
8.5.1 项目概述 178
8.5.2 静态分析和设计 178
8.5.3 持久对象设计 180
8.5.4 动态对象设计 181
8.5.5 通用界面设计 183
8.5.6 体系结构设计 186
8.6 小结 189
习题8 189
9.1.1 软件测试目标 190
9.1 软件测试概述 190
第9章 软件测试 190
9.1.2 软件测试原则 191
9.1.3 软件测试方法 192
9.1.4 软件测试与软件开发各阶段的关系 192
9.1.5 测试信息流 193
9.1.6 错误分类 193
9.2 软件测试过程与策略 195
9.2.1 单元测试 195
9.2.2 集成测试 197
9.2.3 确认测试 199
9.3 设计测试方案 201
9.2.4 平行运行 201
9.3.1 逻辑覆盖 202
9.3.2 等价划分 206
9.3.3 边界值分析 208
9.3.4 错误推测 209
9.3.5 实用测试策略 210
9.4 对OOA和OOD模型的测试 213
9.4.1 扩大测试的视角 213
9.4.2 测试OOA和OOD模型 214
9.5 面向对象的测试策略 215
9.5.3 在OO语境中的有效性测试 216
9.6 OO软件的测试用例设计 216
9.5.2 在OO语境中的集成测试 216
9.5.1 在OO语境中的单元测试 216
9.6.1 OO概念的测试用例设计的含义 217
9.6.2 传统测试用例设计方法的可用性 217
9.6.3 基于故障的测试 217
9.6.4 OO编程对测试的影响 218
9.6.5 测试用例和类层次 219
9.6.6 基于场景的测试设计 219
9.6.7 测试表层结构和深层结构 220
9.7 其他专门环境要求的测试 221
9.7.1 GUI测试 221
9.7.2 测试文档和帮助设施 222
9.7.3 实时系统测试 223
9.8 小结 223
习题9 224
第10章 软件的技术度量 226
10.1 软件质量 226
10.1.1 McCall的质量因素 227
10.1.2 FURPS 229
10.2 软件技术度量框架 230
10.2.1 技术度量的挑战 230
10.2.2 测度原则 230
10.3.1 基于功能的度量 231
10.3 分析模型的度量 231
10.2.3 有效软件度量的属性 231
10.3.2 “撞击值”度量 233
10.3.3 规约质量的度量 234
10.4 设计模型的度量 235
10.4.1 高层设计度量 235
10.4.2 构件级设计度量 237
10.4.3 界面设计度量 239
10.4.4 源代码度量 239
10.4.5 对测试的度量 241
10.4.6 对维护的度量 242
10.6.1 局部化 243
10.6 度量特征 243
10.6.2 封装 243
10.5.1 面向对象度量的目的 243
10.5.2 区别性的特征 243
10.5 面向对象度量概述 243
10.6.3 信息隐蔽 244
10.6.4 继承 244
10.6.5 抽象 244
10.7 对OO设计模型的度量 244
10.8 对类设计的度量 244
10.8.1 CK度量套件 245
10.8.2 Lorenz和Kidd建议的度量 246
10.9 对操作的度量 247
10.10 对面向对象测试的度量 248
10.11 对面向对象项目的度量 248
10.12 小结 249
习题10 249
第11章 软件维护 251
11.1 系统的变化 251
11.1.1 系统的类型 252
11.1.2 系统生命周期中的变化 253
11.1.3 系统的生命范围 254
11.1.4 开发时间和维护时间 254
11.2.1 决定软件可维护性的因素 256
11.2 软件的可维护性 256
11.2.2 文档 257
11.2.3 可维护性复审 258
11.2.4 提高可维护性的方法 258
11.3 软件维护的任务及过程 260
11.3.1 维护机构 260
11.3.2 编写报告 261
11.3.3 维护流程 261
11.3.4 记录保存 263
11.3.5 评价 264
11.4.2 修改数据的副作用 265
11.4.1 修改代码的副作用 265
11.4 软件维护的副作用 265
11.4.3 修改文档的副作用 266
11.5 反推工程和再生工程 266
11.6 预防性维护 267
11.7 小结 267
习题11 268
第12章 软件质量保证 269
12.1 软件质量概述 269
12.1.1 软件质量的定义 269
12.1.2 软件质量评价 270
12.1.3 软件开发中的质量控制 270
12.2 软件质量保证 271
12.2.1 SQA计划 272
12.2.2 软件质量代价 273
12.2.3 软件工程与软件质量保证 274
12.3 软件质量度量模型 275
12.3.1 有关定义 275
12.3.2 质量度量模型 275
12.3.3 3种度量模型的比较 277
12.4 软件可靠性 278
12.4.1 基本概念 279
12.4.2 影响软件可靠性的原因 279
12.4.3 软件可靠性模型 280
12.4.4 软件可靠性工程 282
12.5 质量体系的建立和实施 282
12.5.1 ISO9000标准的产生 282
12.5.2 ISO9000系列标准的内容 283
12.5.3 ISO9000:2000版的特点 284
12.6 CMM:软件能力成熟度模型 285
12.6.1 CMM的发展 285
12.6.2 基本概念 286
12.6.3 SW-CMM的用途 287
12.6.4 CMM的五个等级 287
12.6.5 CMM的内部结构 290
12.6.6 软件过程改进 292
12.7 程序正确性证明 294
12.8 小结 294
习题12 295
第13章 软件项目管理与计划 296
13.1 项目管理的概念 296
13.1.1 项目管理过程 296
13.1.2 项目管理的范围 297
13.2 软件过程和项目的度量 297
13.2.1 测度、度量和指标 298
13.2.2 过程和项目领域中的度量 298
13.2.3 软件度量 301
13.2.4 调和不同的度量方法 305
13.2.5 软件质量的度量 305
13.2.6 在软件过程中集成度量 306
13.3 可行性研究 307
13.3.1 可行性研究的任务及过程 307
13.3.2 技术可行性研究 307
13.3.3 经济可行性研究 309
13.3.4 运行可行性研究 311
13.4 软件项目估算 312
13.4.1 对估算的考虑 312
13.4.2 项目计划目标 312
13.4.4 资源 313
13.4.3 软件的范围 313
13.4.5 分解技术 315
13.5 软件开发成本估算 317
13.5.1 软件开发成本估算方法 317
13.5.2 专家判定技术 318
13.5.3 软件开发成本估算的早期经验模型 319
13.6 软件风险管理 321
13.6.1 风险识别 321
13.6.2 风险估计 323
13.6.3 风险评价 324
13.6.4 风险驾驭和监控 325
13.7.1 软件开发小组人数与软件生产率 326
13.7 进度安排 326
13.7.2 任务的确定与并行性 327
13.7.3 制定开发进度计划 327
13.7.4 项目的追踪和控制 329
13.8 软件项目的组织与计划 329
13.8.1 软件项目管理的特点 329
13.8.2 制定计划 330
13.8.3 软件项目组织的建立 331
13.8.4 人员配备 332
13.9 小结 333
习题13 333
14.1.1 客户/服务器系统的结构 335
第14章 软件工程新技术概述 335
14.1 客户/服务器软件工程 335
14.1.2 对C/S系统的软件工程 338
14.1.3 分析建模问题 338
14.1.4 对C/S系统的设计 338
14.1.5 测试问题 341
14.2 构件接口技术 343
14.2.1 概述 343
14.2.2 EJB/J2EE技术 344
14.2.3 COM+技术 352
14.2.4 CORBA 362
14.3 软件复用 373
14.3.1 管理问题 374
14.3.2 复用过程 376
14.3.3 领域工程 378
14.3.4 建造可复用构件 381
14.3.5 分类和检索构件 383
14.3.6 软件复用经济学 386
14.3.7 复用实例研究 387
14.4 小结 389
习题14 390
附录1 391
附录2 407
参考文献 425