第1章 概论 1
1.1 计算机软件 1
1.1.1 计算机软件的定义 1
1.1.2 计算机软件的特征 2
1.1.3 计算机软件的分类 3
1.1.4 计算机软件的发展历程 4
1.2 软件危机的表现及产生的原因 6
1.2.1 软件危机的表现 6
1.2.2 软件危机产生的原因 8
1.3 软件危机解决之道:软件工程 8
1.3.1 软件工程的定义 9
1.3.2 软件工程的基本原理 10
1.4 软件工程知识体SWEBOK V3.0 12
1.4.1 SWEBOK V3.0的组成 13
1.4.2 SWEBOK指南的特点 16
本章小结 17
习题 17
第2章 软件工程过程模型 18
2.1 软件生命周期 18
2.1.1 软件定义期 18
2.1.2 软件开发期 19
2.1.3 软件运行与维护期 20
2.2 建造-修补模型 20
2.3 瀑布模型 21
2.4 快速原型开发模型 23
2.5 增量模型 24
2.6 极限编程 26
2.7 同步-稳定模型 27
2.8 螺旋模型 28
2.9 面向对象的生命周期模型 30
2.10 Rational统一过程 31
2.11 案例引入 35
本章小结 36
习题 36
第3章 传统软件工程 38
3.1 结构化方法概述 38
3.2 结构化需求分析方法 39
3.2.1 需求分析的重要性 39
3.2.2 需求分析的困难 39
3.2.3 软件需求分析的任务 41
3.2.4 软件需求过程 42
3.2.5 软件需求获取 44
3.2.6 结构化分析方法 46
3.2.7 数据流图 46
3.2.8 数据字典 50
3.2.9 数据加工逻辑说明 54
3.2.10 系统动态分析 57
3.2.11 数据及数据库需求 60
3.2.12 原型化方法 62
3.2.13 软件复用 66
3.2.14 需求文档的编写与审查 68
3.3 结构化设计方法 69
3.3.1 软件设计的概念和原则 69
3.3.2 结构化设计的目标和任务 70
3.3.3 结构化设计基础 73
3.3.4 模块独立性 77
3.3.5 概要设计 82
3.3.6 详细设计 88
本章小结 90
习题 90
第4章 面向对象基础 93
4.1 面向对象概述 93
4.2 面向对象的基本概念 95
4.3 UML基础 100
4.3.1 软件架构的“4+1”视图模型 101
4.3.2 UML2的图形 102
4.4 模式 114
4.4.1 模式概述 114
4.4.2 模式的分类 115
4.4.3 运用模式的意义 116
本章小结 117
习题 117
第5章 可行性分析与项目计划制定 118
5.1 可行性分析的内容 118
5.2 经济可行性 119
5.3 技术可行性 120
5.4 风险分析 121
5.4.1 风险标识 122
5.4.2 风险估算 122
5.4.3 风险评价和管理 124
5.5 方案选择 125
5.6 规模及成本估算 127
5.6.1 软件规模估算 127
5.6.2 软件成本估算 130
5.7 软件项目计划 133
5.7.1 进度安排 133
5.7.2 甘特图 134
5.7.3 项目计划工具 135
本章小结 136
习题 137
第6章 面向对象分析 138
6.1 面向对象分析过程 138
6.2 需求获取 139
6.2.1 项目需求的来源 139
6.2.2 需求获取技术 140
6.3 面向对象的需求分析 145
6.3.1 分析问题定义 146
6.3.2 标识参与者和用例 146
6.3.3 复查参与者和用例 148
6.3.4 建立用例图 150
6.3.5 编写用例描述 151
6.3.6 建立领域模型 153
6.4 需求规格说明与评审 157
6.4.1 需求规格说明书 157
6.4.2 需求评审 159
本章小结 161
习题 161
第7章 面向对象设计 163
7.1 面向对象设计简介 163
7.1.1 面向对象分析与设计之间的关系 163
7.1.2 面向对象设计的内容 164
7.1.3 面向对象设计基本原则 166
7.1.4 GRASP模式 168
7.2 软件体系结构设计 169
7.3 问题域设计 170
7.3.1 完善域模型 171
7.3.2 职责分配 173
7.3.3 业务规则验证 174
7.3.4 状态建模 176
7.3.5 交互建模 177
7.3.6 类的组织 179
7.4 持久化设计 180
7.4.1 问题域模型到关系模型的转换 180
7.4.2 持久化策略 182
7.5 用户界面设计 183
7.5.1 用户界面设计的基本原则 183
7.5.2 用户界面的形式 185
7.5.3 用户界面设计过程 188
7.5.4 用户界面设计内容 188
7.5.5 用户界面接口 191
7.6 任务管理设计 191
本章小结 192
习题 193
第8章 软件编码与测试 194
8.1 软件编码 194
8.1.1 程序设计语言的分类与选择 194
8.1.2 编码规范 197
8.1.3 代码分析 207
8.2 代码复审 212
8.3 软件测试 214
8.3.1 软件测试的概念与原则 214
8.3.2 软件测试的方法与过程 216
8.3.3 软件测试级别 219
8.3.4 软件测试技术 223
8.3.5 面向对象的软件测试 233
8.3.6 软件测试文档 237
8.3.7 软件测试工具 240
本章小结 241
习题 241
第9章 软件维护 242
9.1 软件维护的概念 242
9.2 软件维护的特点 243
9.3 软件维护的过程 245
9.4 软件的可维护性 246
9.5 软件再工程 247
本章小结 250
习题 250
第10章 软件项目管理与质量保证 251
10.1 软件人员组织 251
10.2 软件配置管理 253
10.2.1 软件配置 254
10.2.2 软件配置管理过程 255
10.2.3 配置管理工具 257
10.3 软件质量保证 258
10.3.1 软件质量度量 258
10.3.2 软件质量保证体系 260
10.3.3 软件的可靠性 262
10.4 软件工程标准 262
10.4.1 ISO 9000.3 质量标准 264
10.4.2 IEEE 1058软件项目管理计划标准 264
10.4.3 能力成熟度集成模型CMMI 266
本章小结 269
习题 269
参考文献 270