第1章 软件工程概述 1
1.1 软件的概念 1
1.1.1 软件的定义 1
1.1.2 软件的发展 2
1.1.3 软件的种类 3
1.1.4 软件产品的特征 4
1.2 软件危机 5
1.2.1 软件危机的含义 5
1.2.2 软件危机的表现 6
1.2.3 产生软件危机的根源 7
1.2.4 解决软件危机的途径 8
1.3 软件工程 10
1.3.1 软件工程的含义 10
1.3.2 软件工程的发展 13
1.3.3 软件工程的原则 15
1.3.4 软件工程的主要目标和环节 16
1.4 软件开发方法学 17
1.4.1 软件开发方法的发展 17
1.4.2 结构化分析与设计方法 18
1.4.3 面向对象分析与设计方法 20
1.5 软件工具与软件工程环境 22
1.5.1 软件工程辅助工具简介 22
1.5.2 软件工程环境 23
第2章 软件过程 26
2.1 软件过程概述 26
2.1.1 什么是软件过程 26
2.1.2 为什么我们需要一个软件过程 27
2.1.3 成熟度等级 27
2.1.4 关键过程领域(KPA) 29
2.2 软件生存周期 33
2.2.1 软件生命周期(SDLC)的六个阶段 34
2.2.2 软件生命周期模型 34
2.3 具体生命周期模型 35
2.3.1 瀑布模型 35
2.3.2 原型模型 36
2.3.3 增量模型 37
2.3.4 螺旋模型 39
2.3.5 构件集成模型 41
2.3.6 并发开发模型 42
2.3.7 第四代技术 43
第3章 软件需求分析 46
3.1 需求分析概述 46
3.1.1 需求分析的任务 46
3.1.2 需求分析的步骤 47
3.1.3 需求获取的常用方法 49
3.2 结构化分析方法 52
3.2.1 结构化分析概述 52
3.2.2 数据流图 52
3.2.3 数据词典 56
3.3 软件需求文档 58
第4章 软件设计概述 61
4.1 软件设计的任务 61
4.2 软件设计的基本概念 62
4.2.1 模块与构件 62
4.2.2 抽象与细化 62
4.2.3 信息隐藏与局部化 62
4.3 模块化设计 63
4.3.1 模块化设计产生的效果 63
4.3.2 模块分割方法 63
4.3.3 模块的独立性 64
4.3.4 模块设计规则 69
4.4 概要设计文档与评审 71
4.5 详细设计 71
4.5.1 详细设计概述 71
4.5.2 详细设计的方法 72
4.5.3 详细设计复审 74
第5章 面向对象的分析 76
5.1 面向对象的分析概述 76
5.1.1 面向对象分析的主要原则 77
5.1.2 面向对象分析产生三种分析模型 78
5.1.3 面向对象分析的主要优点 78
5.1.4 面向对象分析方法的基本步骤 78
5.2 功能模型(用例模型) 78
5.2.1 用例图 79
5.2.2 用例图元素之间的相互关系 81
5.2.3 寻找用例的方法 83
5.3 用例分析 83
5.3.1 用例分析概述 84
5.3.2 用例分析的步骤 84
第6章 面向对象的设计 89
6.1 面向对象的设计概述 89
6.1.1 面向对象的设计模式概念 90
6.1.2 面向对象设计的主要原则 90
6.1.3 设计模式分类 93
6.1.4 怎样才能设计“好的面向对象” 96
6.2 子系统设计 96
6.2.1 子系统设计概述 96
6.2.2 子系统设计的目的 97
6.2.3 子系统设计的步骤 97
6.3 类设计 98
6.3.1 类设计概述 98
6.3.2 类设计的目的 99
6.3.3 类设计的步骤 99
6.4 数据库设计 103
6.4.1 数据库设计概述 103
6.4.2 数据库设计的目的 105
6.4.3 数据库设计的步骤 105
第7章 编码与实现 107
7.1 程序设计语言 107
7.1.1 程序设计语言的发展 108
7.1.2 程序设计语言的分类及特点 112
7.1.3 程序设计语言选择 114
7.2 编码的目标和指导原则 115
7.3 编码的风格 116
7.3.1 程序版式 117
7.3.2 数据说明 118
7.3.3 语句结构 119
7.3.4 输入/输出 120
7.4 编程效率 121
7.5 编程的安全性 122
7.6 面向对象编程技术 123
7.6.1 面向对象编程概述 123
7.6.2 面向对象语言 124
7.6.3 面向对象程序设计风格 126
7.6.4 面向对象实现基本准则 127
7.6.5 面向对象实现工作流程 128
第8章 软件测试 130
8.1 软件测试概述 130
8.1.1 什么是软件测试 131
8.1.2 软件测试的目的 131
8.1.3 软件测试的原则 131
8.1.4 软件测试的方法 132
8.1.5 软件测试的基本过程 133
8.1.6 软件测试的文档 134
8.1.7 软件测试与调试的区别 136
8.1.8 测试团队构成及角色划分 136
8.2 白盒测试 138
8.2.1 什么是白盒测试 139
8.2.2 六种覆盖方法 139
8.2.3 基本路径测试 143
8.2.4 白盒测试工具的选择 145
8.2.5 白盒测试的优缺点 145
8.3 黑盒测试 146
8.3.1 什么是黑盒测试 146
8.3.2 黑盒测试的测试用例设计方法 146
8.3.3 黑盒测试工具的选择 149
8.3.4 黑盒测试的优缺点 149
8.4 软件测试级别 150
8.4.1 单元测试 150
8.4.2 集成测试 154
8.4.3 系统测试 159
8.4.4 回归测试 161
8.4.5 验收测试 164
8.5 测试过程和管理 167
8.5.1 软件测试过程模型介绍 168
8.5.2 测试过程管理理念 170
第9章 软件项目管理 173
9.1 软件项目管理基础 173
9.1.1 软件项目管理的意义 173
9.1.2 软件项目管理的定义及职能 174
9.1.3 软件项目管理的特点 174
9.1.4 软件项目管理的内容 175
9.1.5 提高软件成功的途径 176
9.2 软件项目计划 176
9.2.1 软件项目计划概念 176
9.2.2 软件项目计划内容 177
9.2.3 成本估算 178
9.2.4 进度安排 179
9.2.5 项目报告 181
9.2.6 项目检验 181
9.3 质量管理 182
9.3.1 软件质量保证 182
9.3.2 项目管理评审 184
9.4 项目中的组织 185
9.4.1 项目组织模式 185
9.4.2 人员配备 185
9.5 配置管理 186
9.5.1 基线 187
9.5.2 软件配置项 187
9.5.3 版本控制 188
9.5.4 变更控制及访问控制和同步控制 188
9.5.5 配置审计和状态报告 188
9.6 风险和风险管理 189
9.7 软件工程标准化与软件文档 190
9.7.1 软件工程标准化 190
9.7.2 软件工程标准化的意义 191
9.7.3 软件工程标准的层次 191
9.7.4 文档的作用与分类 192
第10章 软件质量保证 195
10.1 质量的概念 195
10.1.1 什么是质量 196
10.1.2 质量的演变 196
10.1.3 软件质量 197
10.1.4 软件质量的特性 198
10.2 质量框架 200
10.3 软件质量保证 201
10.4 软件质量度量 206
10.4.1 McCall质量度量模型 206
10.4.2 ISO的软件质量评价模型 207
10.4.3 软件质量度量 207
10.5 软件复杂性 208
10.5.1 软件复杂性的基本概念 208
10.5.2 软件复杂性的度量方法 209
10.6 软件可靠性 210
10.6.1 软件可靠性的定义 210
10.6.2 软件可靠性的指标 211
10.6.3 软件可靠性的模型 211
10.7 软件评审 212
10.7.1 设计质量的评审内容 212
10.7.2 程序质量的评审内容 213
10.8 软件容错技术 214
10.8.1 容错技术定义 214
10.8.2 容错的一般方法 215
10.8.3 容错软件的设计过程 216
10.9 软件开发各阶段的软件质量保证目标 216
10.9.1 需求分析 216
10.9.2 设计 216
10.9.3 编码 217
10.9.4 测试 217
10.9.5 维护 217
10.9.6 软件规范文档 217
10.10 质量保证与质量控制的区别 218
10.11 全面质量管理 219
10.11.1 计划—执行—检查—行动(PDCA) 220
10.11.2 质量改进范例 221
10.11.3 软件工程协会(Software Engineering Institute,简称SEI) 221
10.12 案例研究 222
第11章 软件配置管理 224
11.1 软件配置管理 225
11.1.1 基线 225
11.1.2 软件配置项 226
11.2 SCM过程 229
11.3 软件配置中对象的标识 229
11.4 版本控制 231
11.5 变化控制 231
11.6 配置审计 232
11.7 状态报告 233
11.8 SCM标准 233
第12章 软件维护 235
12.1 软件维护概述 235
12.1.1 软件维护和分类 235
12.1.2 软件维护的特点 236
12.1.3 软件维护策略 238
12.2 软件的可维护性 238
12.3 软件维护过程和模型 239
12.3.1 软件维护活动 239
12.3.2 软件维护的副作用 243
12.3.3 软件维护过程模型 244
12.4 软件再工程 246
第13章 软件工程新方法简介 248
13.1 极限编程(Extreme Programming,简称XP)简介 248
13.1.1 极限编程的概念 249
13.1.2 XP的四条基本价值原则 250
13.1.3 XP的实践准则 250
13.1.4 XP的使用及学习 254
13.2 微软解决方案框架(Microsoft Solution Framework,简称MSF)简介 254
13.2.1 MSF的概念 255
13.2.2 MSF的八个基础原理 255
13.2.3 MSF模型 257
13.2.4 MSF准则 260
13.2.5 MSF的使用及学习 262
参考文献 263