第1章 软件工程概述 1
1.1 项目导引 1
1.2 项目分析 1
1.3 软件工程的历史 2
1.4 软件工程的基本概念 6
1.5 软件工程的基本原理 6
1.6 软件生命周期 8
1.7 软件开发过程模型 10
1.7.1 瀑布模型 11
1.7.2 原型模型 14
1.7.3 螺旋模型 17
1.7.4 迭代开发与RUP 18
1.8 案例分析 22
1.9 技术拓展 24
1.9.1 敏捷开发技术1——Scrum 25
1.9.2 敏捷开发技术2——XP 27
1.10 本章小结 31
1.11 强化练习 32
第2章 软件工程管理 34
2.1 项目导引 34
2.2 项目分析 34
2.3 软件项目管理概述 35
2.4 项目范围管理 37
2.4.1 项目范围变更控制 37
2.4.2 项目范围变更原因 37
2.4.3 范围变更控制过程 38
2.4.4 实施范围变更管理原则 40
2.4.5 项目范围变更控制 40
2.5 项目成本管理 41
2.5.1 成本管理过程 41
2.5.2 成本管理手段 42
2.6 项目进度管理 45
2.6.1 影响项目进度的因素 45
2.6.2 项目进度控制 46
2.7 项目配置管理 49
2.7.1 配置管理的意义 49
2.7.2 配置管理的实施过程 50
2.7.3 配置控制 53
2.7.4 配置管理报表 56
2.8 项目组织管理 60
2.8.1 民主制程序员组 60
2.8.2 主程序员组 61
2.8.3 现代程序员组 63
2.8.4 软件项目组 64
2.8.5 IT组织管理 66
2.9 项目质量管理 69
2.9.1 软件质量概述 69
2.9.2 软件质量因素 71
2.10 项目风险管理 72
2.10.1 风险的分类 72
2.10.2 风险的识别 72
2.10.3 风险评估 73
2.10.4 风险的驾驭和监控 74
2.11 项目沟通管理 75
2.12 项目集成管理 75
2.13 案例分析 75
2.13.1 角色的映射 75
2.13.2 开发案例中的制品 76
2.13.3 为初始阶段制定计划 77
2.14 知识拓展 78
2.14.1 质量管理资格认证1——ISO9000:2000 78
2.14.2 质量管理资格认证2——CMM 78
2.14.3 质量管理资格认证3——ISO9000-3 80
2.15 本章小结 81
2.16 强化练习 81
第3章 需求确定 83
3.1 项目导引 83
3.2 项目分析 83
3.3 需求阶段的任务和目标 84
3.4 基本概念 84
3.4.1 功能需求 85
3.4.2 非功能性需求 85
3.5 需求获取方法 87
3.5.1 建立联合分析小组 87
3.5.2 客户访谈 87
3.5.3 问卷调查 87
3.5.4 问题分析与确认 87
3.5.5 快速原型法 88
3.6 需求获取过程 90
3.6.1 事件清单和事件表 90
3.6.2 RUP中需求的特点 95
3.6.3 用例模型 97
3.6.4 用例产生的过程 103
3.6.5 补充性规格说明 108
3.7 案例分析 109
3.7.1 背景说明 109
3.7.2 项目说明 110
3.8 知识拓展 112
3.8.1 需求分类的补充 112
3.8.2 需求开发过程 113
3.9 本章小结 115
3.10 强化练习 116
第4章 系统分析 118
4.1 项目导引 118
4.2 项目分析 119
4.3 领域模型 120
4.3.1 什么是领域模型 120
4.3.2 如何构建领域模型 121
4.3.3 何时构建领域模型 126
4.4 健壮性分析 126
4.4.1 健壮图的表示法 127
4.4.2 健壮图的使用规则 128
4.5 顺序图的转换 132
4.5.1 将健壮性分析与顺序图对应 132
4.5.2 为静态类图增加方法 133
4.6 状态的标识 135
4.7 案例分析 136
4.7.1 构建领域模型和状态模型 136
4.7.2 健壮性分析 140
4.7.3 构建动态模型 141
4.8 知识拓展 142
4.8.1 抽取候选类的其他方法 142
4.8.2 领域驱动设计(DDD) 143
4.9 本章小结 143
4.10 强化练习 144
第5章 系统设计 145
5.1 项目导引 145
5.2 项目分析 145
5.3 软件设计的过程 146
5.4 软件体系结构 147
5.4.1 什么是软件体系结构 147
5.4.2 应用程序的分割 147
5.4.3 分离服务 150
5.5 体系结构设计过程 151
5.5.1 制定初步体系结构 152
5.5.2 逻辑结构的划分 153
5.5.3 执行体系结构 155
5.6 用户界面设计 156
5.7 持久化设计 159
5.7.1 设计目标 160
5.7.2 数据库设计步骤 160
5.8 案例分析 163
5.8.1 体系结构的建立 163
5.8.2 数据库的设计 165
5.8.3 界面设计 166
5.9 知识拓展 167
5.9.1 框架模式 167
5.9.2 应用框架 169
5.10 本章小结 170
5.11 强化练习 170
第6章 对象设计 171
6.1 项目导引 171
6.2 项目分析 171
6.3 面向对象的设计原则 172
6.3.1 开闭原则 173
6.3.2 里氏代换原则 175
6.3.3 依赖倒转原则 176
6.3.4 接口隔离原则 178
6.3.5 单一职责原则 179
6.3.6 合成复用原则 180
6.3.7 最小知识原则 182
6.4 设计模式的提出 183
6.4.1 设计模式的四个基本要素 184
6.4.2 设计模式的分类 184
6.5 经典设计模式 185
6.5.1 策略模式(Strategy) 185
6.5.2 单例模式(Singleton) 187
6.5.3 适配器模式(Adapter) 189
6.5.4 工厂方法模式(Factory Method) 190
6.6 设计模式应用的注意事项 192
6.7 案例分析 192
6.8 知识拓展 194
6.9 本章小结 196
6.10 强化练习 196
第7章 软件的实现 197
7.1 项目导引 197
7.2 程序设计语言的选择 197
7.3 编码规范 198
7.3.1 源程序文档化 199
7.3.2 数据说明 201
7.3.3 语句结构 202
7.3.4 输入/输出 203
7.4 编码风格 203
7.4.1 提高可重用性 204
7.4.2 提高可扩充性 205
7.4.3 提高健壮性 205
7.5 软件开发环境 206
7.6 知识拓展 207
7.7 本章小结 208
7.8 强化练习 208
第8章 软件测试 209
8.1 项目导引 209
8.2 项目分析 209
8.2.1 软件测试的目的和原则 210
8.2.2 软件测试与软件开发各阶段的关系 211
8.3 经典测试方法 213
8.4 白盒测试 213
8.4.1 逻辑覆盖 214
8.4.2 基本路径覆盖 216
8.5 黑盒测试 222
8.5.1 等价类划分 223
8.5.2 边界值分析法 225
8.5.3 错误推测法 226
8.5.4 因果图法 227
8.6 测试过程 229
8.6.1 单元测试 230
8.6.2 集成测试 231
8.6.3 功能测试 233
8.6.4 系统测试 233
8.6.5 验收测试 233
8.7 面向对象测试方法 234
8.8 案例分析 234
8.9 知识拓展 237
8.10 本章小结 241
8.11 强化练习 242
第9章 软件维护 243
9.1 项目导引 243
9.2 项目分析 243
9.3 软件维护的种类 244
9.4 软件维护的过程 245
9.5 软件维护的成本 247
9.6 案例分析 248
9.7 知识拓展 249
9.7.1 逆向工程 249
9.7.2 重构 249
9.8 本章小结 250
9.9 强化练习 251
第10章 综合实训——在线宠物商店 252
10.1 项目背景 252
10.2 需求获取 252
10.3 系统分析 253
10.4 系统设计 263
10.5 对象设计 264
10.5.1 域对象的设计 265
10.5.2 用例的健壮分析 266
10.6 代码实现 270
10.7 软件测试 270
附录 面向对象技术概述 275
参考文献 282