第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的发展 1
1.1.2 软件的定义 3
1.1.3 软件的特点 3
1.1.4 软件的分类 4
1.2 软件工程的内容与方法 6
1.2.1 软件危机与软件工程的定义 7
1.2.2 软件工程的基本内容与目标 9
1.2.3 软件的基本开发方法 9
1.2.4 软件工程的基本原则 10
1.3 软件生存周期与软件开发模型 11
1.3.1 软件生存周期 11
1.3.2 软件开发模型 12
1.4 软件工具与环境 20
1.4.1 软件工具概述 21
1.4.2 软件开发工具的功能 21
1.4.3 软件开发工具的特性 22
1.4.4 软件开发工具的分类 24
1.4.5 软件开发环境 25
1.5 软件工程学的知识体系 27
小结 28
习题1 28
第2章 软件项目可行性研究 29
2.1 软件项目可行性研究的任务 29
2.2 软件项目可行性研究的步骤 30
2.3 软件项目可行性研究的要素 31
2.3.1 经济可行性 32
2.3.2 技术可行性 32
2.3.3 社会环境可行性 32
2.4 系统流程图 33
2.5 成本效益分析 34
2.5.1 成本估计 34
2.5.2 费用估计 36
2.5.3 度量效益的方法 37
小结 38
习题2 38
第3章 软件需求工程 39
3.1 软件需求工程概述 39
3.1.1 软件需求分类 40
3.1.2 需求规格说明 41
3.1.3 需求工程概念 42
3.1.4 需求工程过程 42
3.2 需求获取方法 43
3.3 需求分析的任务与原则 45
3.3.1 需求分析的任务 45
3.3.2 需求分析的原则 46
3.4 需求建模方法 47
3.4.1 结构化的需求建模方法 47
3.4.2 数据流图 49
3.4.3 数据字典 57
3.5 图形工具 61
3.5.1 层次方框图 61
3.5.2 Warnier图 62
3.5.3 IPO图 62
3.6 需求验证 63
3.6.1 目的与任务 63
3.6.2 内容与方法 63
3.6.3 需求评审 64
3.7 需求管理 65
3.7.1 需求管理的目标 65
3.7.2 需求管理的原则 66
3.7.3 需求开发的管理 66
3.7.4 需求管理活动 68
小结 69
习题3 69
第4章 软件项目概要设计 71
4.1 软件体系结构 71
4.1.1 概述 71
4.1.2 系统构成 73
4.1.3 控制模型 77
4.1.4 模块化分解 80
4.1.5 领域相关的体系结构 82
4.2 概要设计的任务与过程 84
4.2.1 概要设计的任务 84
4.2.2 概要设计的过程 84
4.3 软件设计的概念与原则 86
4.3.1 模块化与模块独立性 86
4.3.2 抽象 91
4.3.3 结构设计原则 93
4.3.4 软件复用 95
4.3.5 设计模式 98
4.4 面向数据流的设计方法 99
4.4.1 基本概念 100
4.4.2 系统结构图的组成 101
4.4.3 变换分析 102
4.4.4 事务分析 106
4.4.5 设计优化 108
4.5 面向数据结构的设计方法 108
4.5.1 Jackson系统开发方法 108
4.5.2 Warnier方法 117
4.6 概要设计文档评审 118
小结 119
习题4 119
第5章 软件项目详细设计 120
5.1 详细设计的任务与原则 120
5.1.1 详细设计的任务 120
5.1.2 详细设计的原则 121
5.2 详细设计的工具 121
5.2.1 程序流程图 121
5.2.2 N-S图 123
5.2.3 PAD图 124
5.2.4 PDL 126
5.2.5 HIPO图 127
5.2.6 详细设计工具的选择 128
5.3 详细设计规格说明与复审 129
5.3.1 详细设计说明书 129
5.3.2 设计复审 130
小结 131
习题5 131
第6章 面向对象分析与设计 132
6.1 面向对象方法 132
6.1.1 面向对象方法概述 133
6.1.2 面向对象的软件工程 134
6.1.3 面向对象的基本概念和特征 138
6.2 面向对象分析 145
6.2.1 面向对象分析过程与原则 145
6.2.2 确定对象与类 149
6.2.3 确定属性 152
6.2.4 定义服务 153
6.2.5 对象间通信 157
6.3 面向对象设计 163
6.3.1 面向对象设计的概念 163
6.3.2 面向对象设计的方法 164
小结 167
习题6 167
第7章 用户界面设计 168
7.1 用户界面的主要特征 168
7.2 设计原则 170
7.3 用户交互 171
7.4 信息表示 173
7.5 帮助系统 175
7.6 界面设计 177
7.7 界面设计评价 178
7.7.1 界面设计评价指标 179
7.7.2 界面设计评价方法 180
小结 180
习题7 181
第8章 软件项目编码 182
8.1 程序设计语言 182
8.1.1 程序设计语言分类 182
8.1.2 程序设计语言的特点 185
8.1.3 程序设计语言的选择 187
8.2 编码风格 189
8.2.1 源程序文档化 189
8.2.2 数据说明 191
8.2.3 语句结构 191
8.2.4 输入输出 194
8.3 程序效率 195
8.3.1 程序效率准则 195
8.3.2 算法对效率的影响 195
8.3.3 影响存储器效率的因素 195
8.3.4 影响输入输出的因素 196
8.4 编程安全 196
8.4.1 冗余程序设计 196
8.4.2 防错程序设计 197
8.5 面向对象程序设计步骤 198
8.6 编码优化 199
小结 200
习题8 200
第9章 软件质量与质量保证 201
9.1 软件质量的定义 201
9.2 影响软件质量的因素 201
9.3 软件质量保证 203
9.3.1 软件质量保证的概念 203
9.3.2 软件质量保证的策略 203
9.3.3 SQA小组的任务 204
9.4 软件质量保证活动 205
9.5 软件评审 206
9.5.1 设计质量的评审内容 206
9.5.2 程序质量的评审内容 211
9.6 软件质量保证的标准 214
9.7 软件质量评价 215
9.7.1 软件质量评价体系 215
9.7.2 软件质量评价标准 217
9.8 软件质量框架 219
9.8.1 高质量软件的特性 219
9.8.2 软件质量框架的组成 219
9.9 软件开发质量的定量描述 221
小结 224
习题9 224
第10章 软件项目测试 225
10.1 概述 225
10.1.1 软件测试技术的发展 225
10.1.2 软件错误与缺陷 226
10.1.3 软件测试的定义 227
10.1.4 软件测试的对象 227
10.1.5 软件测试的目的 228
10.1.6 软件测试的原则 228
10.1.7 软件测试的复杂性 229
10.1.8 软件开发各阶段的测试 229
10.2 软件测试方法 230
10.2.1 静态分析 230
10.2.2 动态测试 231
10.2.3 人工测试与机器测试 232
10.2.4 黑盒测试 234
10.2.5 白盒测试 243
10.2.6 白盒测试与黑盒测试的比较 249
10.3 单元测试与集成测试 251
10.3.1 单元测试 251
10.3.2 集成测试 255
10.3.3 确认测试 261
10.3.4 系统测试 264
10.3.5 终止测试 268
10.4 面向对象测试 270
10.4.1 面向对象测试基础 270
10.4.2 面向对象测试模型 271
10.4.3 类测试 276
10.4.4 面向对象的集成测试 280
10.4.5 面向对象的系统测试 282
10.4.6 面向对象测试与传统测试的比较 283
10.5 测试的设计与实现 284
10.5.1 测试计划 284
10.5.2 测试设计 292
10.5.3 测试执行 298
10.5.4 测试总结 300
小结 301
习题10 302
第11章 软件项目交付与维护 304
11.1 软件发布与部署 304
11.1.1 软件产品发布 304
11.1.2 软件产品实施 305
11.2 软件演化的特征 306
11.2.1 软件演化的动态特征 306
11.2.2 软件体系结构的进化 307
11.3 软件维护 307
11.3.1 软件维护的分类与特点 307
11.3.2 软件维护的步骤 309
11.3.3 软件的可维护性 312
11.3.4 软件维护的副作用 313
11.4 逆向工程和再生工程 314
小结 316
习题11 316
第12章 软件项目管理 317
12.1 软件项目的特点及软件管理功能 317
12.1.1 软件项目的特点 317
12.1.2 软件管理的功能 318
12.1.3 软件项目的工作范围 318
12.2 软硬件资源 319
12.2.1 人力资源 319
12.2.2 硬件 319
12.2.3 软件 320
12.3 人员的计划和组织 320
12.4 成本估计及控制 321
12.4.1 软件开发成本估算方法 321
12.4.2 专家估算法 322
12.4.3 成本估算模型 323
12.5 进度计划 325
12.5.1 软件工作的特殊性 325
12.5.2 各阶段工作量的分配 325
12.5.3 制定开发进度 326
12.6 软件配置管理 327
12.6.1 基线 327
12.6.2 软件配置项 328
12.6.3 软件配置管理过程 330
12.7 软件管理方案 333
12.8 能力成熟度模型 333
12.8.1 软件过程评估的必要性 334
12.8.2 CMM的主要用途 335
12.8.3 CMM的体系结构 336
12.8.4 CMM的等级 338
12.8.5 CMM的内部结构 341
12.8.6 CMM的应用 344
小结 345
习题12 345
第13章 软件建模与UML 347
13.1 模型概述 347
13.2 常用的软件建模模型 348
13.3 需求建模 349
13.4 UML 349
13.4.1 UML概述 350
13.4.2 UML的表示法 355
13.4.3 UML软件开发过程概述 367
13.4.4 Rational Rose概述 370
13.5 形式化方法 372
小结 373
习题13 373
参考文献 374