目 录
第1章 软件工程基础 1
1.1 软件 1
1.1.1 软件的概念 1
1.1.2 软件的特性 2
1.1.3 软件的演化 4
1.2 软件危机 6
1.2.1 软件危机介绍 6
1.2.2 产生软件危机的原因 8
1.2.3 消除软件危机的途径 8
1.3 软件工程 9
1.3.1 软件工程的定义 9
1.3.2 软件工程的基本原理 10
1.3.3 软件工程通用原则 13
1.3.4 软件工程的基本原则 15
1.3.5 软件工程开发活动 15
1.3.6 软件过程管理活动 17
1.3.7 软件过程改进活动 17
1.4 软件过程 20
1.4.1 软件过程概述 20
1.4.2 普适性活动 21
1.4.3 软件生命周期 22
1.5 传统过程模型 27
1.5.1 迭代和增量 28
1.5.2 瀑布模型 30
1.5.3 快速原型模型 32
1.5.4 螺旋模型 34
1.6 RUP 36
1.6.1 核心工作流 37
1.6.2 阶段 38
1.6.3 最佳实践 40
1.6.4 RUP的十大要素 41
1.6.5 RUP的裁剪 43
1.7 敏捷开发 43
1.7.1 敏捷开发知识体系 44
1.7.2 敏捷宣言 46
1.7.3 Scrum 47
1.7.4 极限编程 53
1.8 软件工程工具 56
1.8.1 CASE 56
1.8.2 软件版本 57
1.9 软件工程师的职业道德 58
1.10 习题 58
第2章 UML 63
2.1 UML简介 63
2.2 UML的历史 66
2.3 UML的结构 66
2.4 UML的事物 67
2.5 UML的关系 69
2.5.1 一般-特殊 69
2.5.2 关联 71
2.5.3 整体-部分 73
2.5.4 依赖 74
2.5.5 实现 75
2.5.6 案例 76
2.6 UML的图 77
2.6.1 用例图 77
2.6.2 类图 81
2.6.3 组件图 82
2.6.4 部署图 83
2.6.5 包图 83
2.6.6 序列图 85
2.6.7 通信图 88
2.6.8 状态机图 88
2.6.9 活动图 89
2.7 UML建模工具 92
2.8 案例 94
2.8.1 业务建模 95
2.8.2 需求 100
2.8.3 分析 109
2.8.4 设计 110
2.8.5 小结 113
2.9 习题 114
第3章 软件项目管理 117
3.1 项目管理知识体系 117
3.1.1 项目生命周期 118
3.1.2 项目管理过程组 119
3.1.3 知识领域 120
3.2 风险管理 121
3.3 团队管理 127
3.3.1 团队组织方式 127
3.3.2 建设团队 131
3.3.3 管理团队 132
3.4 估算成本 132
3.5 范围管理 138
3.6 质量管理 140
3.7 习题 141
第4章 需求调研 145
4.1 理解需求 145
4.1.1 软件需求 145
4.1.2 需求开发过程 149
4.2 需求调研方法 150
4.2.1 文档研究 150
4.2.2 问卷调查 151
4.2.3 面谈 152
4.2.4 观察 153
4.2.5 需求专题研讨会 155
4.2.6 观察业务流程和操作 156
4.3 案例分析 156
4.4 习题 167
第5章 需求建模 169
5.1 系统用例图 169
5.1.1 系统边界 169
5.1.2 系统参与者 170
5.1.3 系统用例 172
5.2 系统用例规约 179
5.2.1 系统用例规约形式 180
5.2.2 用例编号 181
5.2.3 前置条件和后置条件 181
5.2.4 书写路径步骤的注意事项 182
5.2.5 字段列表 183
5.2.6 非功能需求及设计约束 183
5.3 跟踪与变更需求 184
5.3.1 需求跟踪 184
5.3.2 需求变更 184
5.4 案例分析 185
5.4.1 从需求调研中提取系统用例 185
5.4.2 书写系统用例规约 186
5.4.3 “58同城”注册系统用例规约 187
5.5 习题 189
第6章 分析 191
6.1 发现对象 191
6.1.1 从系统用例规约中发现对象 191
6.1.2 对象的筛选 192
6.1.3 案例分析一:BusyBee手游的“开始游戏”系统用例 193
6.1.4 案例分析二:“58同城”注册系统用例 195
6.2 对象分类 198
6.2.1 案例分析 199
6.2.2 领域类图 199
6.3 定义类的属性 200
6.3.1 识别属性 200
6.3.2 案例分析 201
6.4 确定类之间的关系 201
6.5 定义类的方法 203
6.5.1 BCE模式 203
6.5.2 设计方法 204
6.5.3 案例分析一:“玩家→开始游戏”用例 204
6.5.4 案例分析二:“58同城”网站“顾客→注册”用例 206
6.6 习题 208
第7章 设计 211
7.1 软件架构设计 212
7.1.1 软件架构视图 212
7.1.2 软件架构风格 213
7.1.3 常用的架构模式 214
7.2 系统架构设计 216
7.2.1 BCE模式转换为MVC模式 216
7.2.2 BCE模式转换为分层架构模式 219
7.2.3 案例分析一:BusyBee手游游戏模块 221
7.2.4 案例分析二:“58同城”顾客模块 222
7.3 类设计 224
7.3.1 内聚和耦合 224
7.3.2 设计属性 226
7.3.3 设计方法 228
7.3.4 案例分析一:BusyBee手游游戏模块 228
7.3.5 案例分析二:“58同城”顾客模块 230
7.4 设计模式 236
7.4.1 面向对象设计原则 236
7.4.2 设计模式概述 237
7.4.3 简单工厂模式 238
7.4.4 工厂方法模式 240
7.4.5 中介者模式 241
7.4.6 观察者模式 243
7.5 数据库设计 245
7.5.1 逻辑模型设计 245
7.5.2 物理模型设计 246
7.5.3 SQL脚本生成 247
7.6 界面设计 248
7.7 习题 251
第8章 实现和测试 253
8.1 软件实现 253
8.1.1 编程语言 253
8.1.2 实现类图到代码的转换 254
8.1.3 序列图与代码的对应 258
8.1.4 程序设计风格 259
8.1.5 案例分析一:BusyBee手游游戏模块 265
8.1.6 案例分析二:“58同城”顾客模块 268
8.2 软件测试 270
8.2.1 软件测试的基本概念 270
8.2.2 测试方法概述 274
8.2.3 白盒测试用例设计 274
8.2.4 黑盒测试用例设计 282
8.2.5 程序的静态测试 293
8.2.6 面向对象测试 295
8.3 习题 300
第9章 软件维护 303
9.1 软件维护的概念 303
9.1.1 软件维护的定义 303
9.1.2 影响软件维护工作量的因素 304
9.1.3 软件维护的策略 305
9.2 软件维护活动 305
9.2.1 软件维护申请报告 306
9.2.2 软件维护的过程 306
9.3 程序修改的步骤及副作用 307
9.3.1 分析和理解程序 307
9.3.2 修改程序 308
9.3.3 修改程序的副作用及控制 309
9.3.4 重新验证程序 310
9.4 提高软件的可维护性 311
9.4.1 结构化维护与非结构化维护 311
9.4.2 提高软件可维护性的技术途径 312
9.5 习题 313
参考文献 314