第1章 软件工程引论 1
1.1 软件工程诞生背景 1
1.1.1 软件的特性 1
目录 1
1.1.2 软件危机 2
1.1.3 软件危机解决途径 4
1.2 软件工程学 5
1.2.1 软件工程化思想 5
1.2.2 软件工程学研究范畴 6
1.3 软件工程方法学基本原理 9
1.3.1 推迟实现 9
1.2.3 软件工程学的发展 9
1.3.2 逐步求精 10
1.3.3 抽象建模 11
1.3.4 质量保证 12
1.4 小结 14
习题1 15
第2章 软件过程 16
2.1 软件过程概述 16
2.1.1 过程、方法和工具 16
2.1.2 软件生存周期 17
2.1.3 软件过程模型 18
2.1.4 软件过程各阶段任务 18
2.2.1 瀑布模型 21
2.2 典型的软件过程模型 21
2.2.2 快速原型模型 22
2.2.3 增量模型 24
2.2.4 螺旋模型 25
2.3 面向对象的软件过程模型 26
2.3.1 面向对象的基本概念 26
2.3.2 软件开发统一过程 30
2.3.3 构件集成模型 31
2.4 小结 32
习题2 32
3.1 需求分析概述 33
3.1.1 需求分析的任务 33
第3章 软件需求分析 33
3.1.2 需求分析过程 35
3.1.3 需求分析的原型技术 37
3.2 非形式化需求分析 37
3.2.1 会谈 38
3.2.2 调查表 39
3.2.3 场景分析 40
3.3 结构化需求分析 40
3.3.1 结构化分析方法 41
3.3.2 结构化分析模型 41
3.3.3 结构化分析步骤 47
3.3.4 结构化分析实例:图书馆系统 49
3.4.1 需求描述的分类 52
3.4 需求分析的描述 52
3.4.2 需求规格说明文档 53
3.5 小结 55
习题3 55
第4章 软件设计 57
4.1 软件设计概述 57
4.1.1 软件设计过程 57
4.1.2 软件模块化设计 59
4.1.3 软件系统结构模型 62
4.1.4 软件设计说明文档 65
4.2 面向数据流分析(DFA)的设计 66
4.2.1 数据流类型 66
4.2.2 数据流分析的设计步骤 67
4.2.3 数据流分析设计技术 68
4.2.4 DFA设计实例:汽车数字化仪表板控制 69
4.3 面向数据的设计 72
4.3.1 Jackson(JSD)方法 73
4.3.2 Warnier(LCP)方法 76
4.4 软件详细设计 77
4.4.1 结构化程序设计 77
4.4.2 详细设计工具 77
4.5 特定应用软件的设计 79
4.5.1 实时系统设计 79
4.5.2 人机界面设计 83
4.6 小结 85
习题4 86
第5章 面向对象的分析与设计 88
5.1 面向对象建模 88
5.1.1 面向对象模型 89
5.1.2 统一建模语言(UML) 90
5.2 面向对象分析(OOA) 93
5.2.1 面向对象分析模型 93
5.2.2 面向对象分析过程 96
5.2.3 OOA实例:图书馆系统 97
5.2.4 OOA实例:电梯控制系统 101
5.3.1 面向对象设计模型 104
5.3 面向对象设计(OOD) 104
5.3.2 面向对象设计过程 105
5.3.3 构件类设计 108
5.3.4 OOD实例:图书馆系统 109
5.3.5 OOD实例:电梯控制系统 112
5.4 小结 114
习题5 115
第6章 软件实现 116
6.1 编程语言选择 116
6.1.1 程序设计语言的发展 117
6.1.2 程序设计语言的特点 118
6.1.3 编程语言的选择 121
6.2 程序设计技术 122
6.2.1 编码风格 123
6.2.2 面向对象程序设计 126
6.2.3 程序设计自动化 127
6.3 软件系统集成 129
6.3.1 软件系统集成方法 130
6.3.2 系统集成过程 132
6.3.3 面向对象的系统集成 133
6.4 小结 133
习题6 134
7.1 软件测试概述 136
7.1.1 软件测试任务 136
第7章 软件测试 136
7.1.2 软件测试原理 137
7.1.3 测试方法分类 139
7.1.4 测试终止标准 141
7.2 软件测试技术 141
7.2.1 测试用例设计 142
7.2.2 黑盒测试方法 142
7.2.3 白盒测试方法 145
7.2.4 自动测试工具 150
7.3 软件调试技术 151
7.3.1 软件调试过程 151
7.3.2 软件调试策略 152
7.4.1 多模块的测试层次 154
7.4 多模块的软件测试 154
7.4.3 集成测试 155
7.4.2 单元测试 155
7.4.4 确认测试 156
7.4.5 系统测试 156
7.5 特定应用软件的测试 156
7.5.1 面向对象软件测试 157
7.5.2 人机界面软件测试 159
7.5.3 分布式软件测试 162
7.5.4 实时软件测试 163
7.6 小结 165
习题7 166
8.1.1 维护阶段的任务 167
第8章 软件维护 167
8.1 软件维护概述 167
8.1.2 软件维护的特点 168
8.1.3 软件可维护性 168
8.2 软件维护类型 169
8.2.1 改正性维护 169
8.2.2 完善性维护 170
8.2.3 适应性维护 170
8.2.4 预防性维护 170
8.3 软件维护技术 171
8.3.1 软件维护过程 171
8.3.2 提高软件可维护性 174
8.3.3 面向对象的软件维护 175
8.4 小结 176
习题8 176
第9章 软件项目管理 177
9.1 软件项目管理范围 177
9.1.1 人员 177
9.1.2 项目和过程 179
9.1.3 软件度量 179
9.1.4 软件项目管理文档 181
9.2 人员组织范式 183
9.2.1 民主分权式 184
9.2.2 控制集权式 185
9.2.3 控制分权式 186
9.3 软件成本估算 187
9.3.1 软件规模度量 187
9.3.2 成本估算分解技术 189
9.3.3 经验估算模型 192
9.3.4 成本估算管理 195
9.4 软件质量保证(SQA) 195
9.4.1 SQA活动 196
9.4.2 软件质量度量 197
9.4.3 软件复审 201
9.4.4 软件认证标准 202
9.5.1 过程度量和过程改进 206
9.5 软件过程管理 206
9.5.2 项目进度安排 208
9.5.3 风险分析 211
9.5.4 软件配置管理(SCM) 213
9.6 小结 215
习题9 216
第10章 软件工程高级课题 218
10.1 软件复用 218
10.1.1 软件复用的基本概念 218
10.1.2 软件复用过程 220
10.1.3 领域工程 221
10.1.4 基于构件的软件开发 224
10.2 新型软件过程模型 225
10.2.1 形式化方法 226
10.2.2 软件再工程 228
10.2.3 客户-服务器软件工程 231
10.3 计算机辅助软件工程(CASE) 234
10.3.1 软件工程环境 234
10.3.2 CASE环境 236
10.3.3 CASE实例:SUITE企业开发环境 239
10.4 小结 243
习题10 244
附录A 缩略词中英文对照表 245
参考文献 247