第1章 概述 1
1.1 软件及软件危机 1
1.1.1 软件 1
1.1.2 软件危机 4
1.2 软件工程的概念 6
1.2.1 软件工程的定义 6
1.2.2 软件工程的目标和原则 7
1.2.3 软件工程的基本原理分析 9
1.3 软件生命周期 11
1.3.1 软件生命周期的概念 11
1.3.2 软件生命周期的阶段划分 11
1.4 软件过程模型 12
1.4.1 瀑布模型 13
1.4.2 快速原型模型 14
1.4.3 增量模型 15
1.4.4 螺旋模型 16
1.4.5 喷泉模型 17
1.4.6 智能模型 18
1.4.7 构件组装模型 19
1.4.8 统一过程模型 20
第2章 可行性研究与软件项目开发计划 23
2.1 可行性研究 23
2.1.1 可行性研究的目的和意义 23
2.1.2 可行性研究的任务 24
2.1.3 可行性研究的步骤 25
2.1.4 系统流程图 26
2.1.5 可行性研究的文档 28
2.2 软件项目开发计划 30
第3章 软件需求分析 33
3.1 需求分析概述 33
3.1.1 需求分析的任务 33
3.1.2 需求分析的原则 35
3.1.3 需求开发过程 35
3.2 获取需求的方法 37
3.3 结构化分析方法 39
3.3.1 结构化分析概述 39
3.3.2 数据流图 41
3.3.3 数据字典 45
3.3.4 加工逻辑说明 46
3.4 快速原型分析方法 49
3.4.1 原型化方法的基本思想 49
3.4.2 构造原型的方法与工具 49
3.4.3 快速原型的开发过程分析 50
3.5 需求规格说明与评审 52
3.5.1 需求规格说明的主要内容 52
3.5.2 需求评审 55
3.6 需求管理 55
3.6.1 需求管理概述 55
3.6.2 需求变更 57
3.6.3 需求追踪 63
第4章 软件设计原理与方法研究 65
4.1 软件设计的概念与原则 65
4.1.1 模块化 65
4.1.2 抽象与逐步求精 66
4.1.3 信息隐藏 67
4.1.4 模块独立性 67
4.2 软件概要设计 72
4.2.1 概要设计的过程 72
4.2.2 概要设计的准则 73
4.2.3 概要设计评审 76
4.3 软件体系结构设计 77
4.3.1 软件体系结构的概念 77
4.3.2 软件体系结构的重要性 77
4.3.3 软件体系结构风格 78
4.4 软件详细设计 84
4.4.1 详细设计的任务 84
4.4.2 详细设计的原则 84
4.4.3 详细设计的工具 85
4.5 结构化设计方法 89
4.5.1 数据流的类型 89
4.5.2 变换分析方法 90
4.5.3 事务分析方法 92
4.5.4 混合型分析方法 93
4.6 面向数据结构的设计方法 94
4.6.1 Jackson方法 95
4.6.2 Warnier方法 100
第5章 软件实现探析 103
5.1 软件实现概述 103
5.1.1 软件实现的目标 103
5.1.2 软件实现的策略 103
5.2 程序设计语言 104
5.2.1 程序设计语言的分类 104
5.2.2 程序设计语言的选择 107
5.3 编码风格 109
5.3.1 源程序文档化 109
5.3.2 数据说明 111
5.3.3 语句构造 111
5.3.4 输入/输出 113
5.3.5 错误处理 114
5.4 程序效率 114
5.4.1 代码效率 115
5.4.2 存储效率 115
5.4.3 输入/输出效率 115
5.5 程序的复杂性度量 116
5.5.1 代码行度量法 116
5.5.2 McCabe度量法 117
5.5.3 Halstead软件科学 118
第6章 面向对象的分析、设计与实现 121
6.1 面向对象方法学概述 121
6.1.1 面向对象的基本概念 121
6.1.2 面向对象方法学的特点 126
6.1.3 面向对象的软件工程 129
6.2 面向对象的分析 130
6.2.1 面向对象分析的概念 130
6.2.2 面向对象分析的特点 132
6.2.3 面向对象分析的过程与原则 133
6.2.4 面向对象分析的模型 138
6.2.5 面向对象分析实例 140
6.3 面向对象的设计 146
6.3.1 面向对象设计的概念 146
6.3.2 面向对象设计的准则 149
6.3.3 面向对象设计的方法 151
6.3.4 问题域子系统设计 155
6.3.5 人机交互子系统设计 157
6.3.6 任务管理子系统设计 158
6.3.7 数据管理子系统设计 159
6.4 面向对象的实现 161
6.4.1 常见的面向对象设计语言 161
6.4.2 面向对象设计语言的选择 163
6.4.3 面向对象程序设计风格 165
6.4.4 面向对象软件实现过程 166
6.5 统一建模语言UML 168
6.5.1 UML的内容 168
6.5.2 UML的表示方法 172
第7章 软件测试与维护 177
7.1 软件测试概述 177
7.1.1 软件测试的定义 177
7.1.2 软件测试的特性 178
7.1.3 软件测试的原则 179
7.2 软件测试的方法 181
7.2.1 白金测试 182
7.2.2 黑盒测试 189
7.3 软件测试的策略 195
7.3.1 单元测试 195
7.3.2 集成测试 199
7.3.3 确认测试 203
7.3.4 系统测试 205
7.3.5 验收测试 208
7.4 软件调试 210
7.4.1 软件调试的过程 210
7.4.2 软件调试的方法 211
7.4.3 软件调试的原则 214
7.5 面向对象的测试 215
7.5.1 面向对象的单元测试 215
7.5.2 面向对象的集成测试 216
7.5.3 面向对象的确认与系统测试 217
7.6 软件维护研究 217
7.6.1 软件维护概述 217
7.6.2 软件维护的过程 220
7.6.3 软件可维护性分析 223
7.6.4 软件再工程 231
第8章 软件复用与构件技术 235
8.1 软件复用概述 235
8.1.1 软件复用的概念 235
8.1.2 软件复用的级别 235
8.1.3 软件复用的意义 237
8.1.4 软件复用的实施过程 238
8.2 可复用构件与构件工程 239
8.2.1 可复用构件 239
8.2.2 基于构件的软件工程 241
8.3 领域工程 242
8.3.1 领域的概念 242
8.3.2 领域工程与应用工程 243
8.3.3 领域工程的实施过程 245
8.3.4 领域工程的实施原则 249
8.4 基于构件的软件开发 250
8.4.1 基于构件的软件开发特点 250
8.4.2 构件系统的体系结构 252
8.4.3 构造可复用构件 254
8.4.4 组装应用系统 257
8.4.5 软件构件技术的技术规范 259
第9章 软件质量与质量保证技术 263
9.1 软件质量概述 263
9.1.1 软件质量的定义 263
9.1.2 软件质量的特性 264
9.1.3 影响软件质量的因素 266
9.1.4 常见的软件质量模型 268
9.2 软件质量保证 270
9.2.1 软件质量保证概述 270
9.2.2 软件质量保证的目标 271
9.2.3 软件质量保证的内容 271
9.2.4 软件质量保证的过程 273
9.2.5 软件质量保证的措施 274
9.3 软件质量度量与评价 276
9.3.1 软件质量度量的概念 276
9.3.2 软件质量度量的分类 276
9.3.3 软件质量度量的标度 279
9.3.4 软件质量度量的准则 281
9.3.5 软件质量度量的方法 284
9.3.6 软件质量的评价 285
9.4 软件评审 286
9.4.1 软件评审概述 286
9.4.2 评审的内容 287
9.4.3 评审会议 289
9.4.4 评审报告和记录保存 290
9.4.5 评审指南 290
9.5 软件过程能力成熟度模型CMM 291
9.5.1 CMM的发展史及用途 291
9.5.2 CMM的基本概念 293
9.5.3 CMM的等级分析 295
9.5.4 CMM的内部结构 298
9.5.5 CMM实施的人员构成和组织机构的划分 301
第10章 软件工程项目管理研究 304
10.1 软件项目管理概述 304
10.1.1 软件项目的定义与分类 304
10.1.2 软件项目管理的主要活动 306
10.1.3 软件项目管理的基本特征 308
10.1.4 软件项目失控的原因分析 309
10.2 软件项目进度计划与管理 312
10.2.1 项目进度计划的指导原则 312
10.2.2 编制软件项目进度计划 313
10.2.3 进度计划图 317
10.2.4 软件项目进度控制 320
10.2.5 软件项目进度更新 324
10.3 软件项目成本管理 326
10.3.1 软件项目成本管理概述 326
10.3.2 软件项目资源计划 328
10.3.3 软件项目成本估算 330
10.3.4 软件项目成本预算 337
10.3.5 软件项目成本控制 340
10.4 软件项目风险管理 343
10.4.1 软件项目风险管理概述 343
10.4.2 软件项目风险识别 346
10.4.3 软件项目风险分析 351
10.4.4 软件项目风险应对 355
10.4.5 软件项目风险监控 358
10.5 软件项目团队建设与管理 361
10.5.1 软件项目团队建设 361
10.5.2 软件项目的沟通管理 364
10.5.3 软件项目的冲突管理 368
第11章 软件开发工具与开发环境探析 372
11.1 软件开发工具 372
11.1.1 软件开发工具的分类 372
11.1.2 软件开发工具的功能 375
11.1.3 软件开发工具的评价 376
11.2 软件开发环境 377
11.2.1 软件开发环境的分类 377
11.2.2 软件开发环境的特性与结构 379
11.2.3 软件开发工具与开发环境的关系 380
11.2.4 常用的软件开发环境 381
11.3 计算机辅助软件工程 394
11.3.1 CASE概述 394
11.3.2 集成化CASE开发环境 398
11.3.3 常见的CASE工具 402
11.3.4 CASE工具的评价与选择 405
参考文献 408