第1部分 工程基础 3
第1章 软件工程概述 3
1.1 软件 3
1.1.1 软件特点 3
1.1.2 软件分类 5
1.2 软件产业化发展 7
1.2.1 软件程序设计时代 7
1.2.2 软件程序系统时代 8
1.2.3 软件工程时代 8
1.3 软件危机 9
1.3.1 软件危机现象 9
1.3.2 软件危机原因分析 10
1.4 软件工程 11
1.4.1 工程技术 12
1.4.2 工程管理 14
1.4.3 工程目标 15
1.5 主流工程方法学 16
1.5.1 结构化方法学 16
1.5.2 面向对象方法学 17
1.6 常用软件工具 19
1.6.1 Visio 19
1.6.2 PowerDesigner 19
1.6.3 Rational Rose 20
小结 21
习题 22
第2章 软件工程过程模式 24
2.1 软件生存周期 24
2.1.1 软件定义期 24
2.1.2 软件开发期 26
2.1.3 软件运行与维护期 27
2.2 瀑布模式 27
2.2.1 瀑布模式的特点 27
2.2.2 瀑布模式中的信息反馈 28
2.2.3 瀑布模式的作用 29
2.3 原型进化模式 29
2.3.1 软件原型 29
2.3.2 原型进化过程 30
2.4 增量模式 31
2.4.1 增量开发过程 31
2.4.2 增量模式的优越性 32
2.5 螺旋模式 32
2.6 迭代模式 33
2.7 组件复用模式 34
小结 35
习题 36
第3章 软件项目管理 37
3.1 软件研发团队 37
3.1.1 软件研发机构 37
3.1.2 软件项目小组 38
3.1.3 项目小组管理机制 39
3.2 软件项目计划 41
3.2.1 任务分配 41
3.2.2 进度计划 42
3.2.3 项目计划书 44
3.3 软件项目成本估算 45
3.3.1 软件成本估算策略 45
3.3.2 代码行成本估算 45
3.3.3 功能点成本估算 47
3.3.4 软件过程成本估算 49
3.4 软件项目风险 51
3.4.1 风险类别 51
3.4.2 风险识别 52
3.4.3 风险评估 53
3.4.4 风险防范 54
3.5 项目文档管理 55
3.5.1 文档概念 55
3.5.2 文档分类 56
3.5.3 软件文档与软件生命周期之间的关系 56
3.5.4 文档的使用者 57
3.5.5 文档编码 58
3.5.6 文档格式 58
3.6 项目配置管理 60
3.6.1 软件配置概念 60
3.6.2 配置规划 61
3.6.3 软件变更控制 62
3.6.4 软件版本控制 63
3.7 项目质量管理 63
3.7.1 质量标准 63
3.7.2 质量计划 64
3.7.3 质量保证 65
3.7.4 质量指标 66
3.8 软件企业能力成熟度模型(CMM) 66
3.8.1 能力成熟度等级 67
3.8.2 软件过程进化 67
3.8.3 个人软件过程(PSP) 68
3.8.4 团队软件过程(TSP) 68
小结 70
习题 71
第4章 基于计算机的系统工程 73
4.1 计算机系统特征 73
4.2 计算机体系结构 74
4.2.1 中央主机结构 74
4.2.2 客户机/服务器结构 74
4.2.3 浏览器/服务器结构 75
4.3 系统前期分析 76
4.3.1 分析过程 76
4.3.2 系统结构建模 78
4.3.3 系统工作流建模 78
4.4 项目可行性分析 80
4.4.1 评估内容 81
4.4.2 评估报告 82
小结 83
习题 84
第2部分 工程任务 87
第5章 软件需求分析 87
5.1 需求分析任务 87
5.1.1 分析内容 87
5.1.2 分析过程 88
5.1.3 任务承担者 88
5.2 获取用户需求 89
5.2.1 识别用户 89
5.2.2 从调查中收集用户需求 91
5.2.3 建立需求规约 93
5.3 建立需求模型 94
5.3.1 业务域模型 95
5.3.2 业务流模型 95
5.4 定义与验证软件规格 96
5.4.1 软件规格定义 96
5.4.2 软件需求验证 97
5.4.3 通过原型验证用户需求 97
5.4.4 通过评审验证产品规格 98
5.5 需求规格说明书 98
小结 99
习题 100
第6章 软件概要设计 101
6.1 概要设计任务 101
6.1.1 基本任务 101
6.1.2 设计过程 102
6.2 系统构架设计 103
6.2.1 软件系统支持环境 103
6.2.2 软件系统体系结构 104
6.3 数据结构设计 108
6.3.1 动态程序数据 108
6.3.2 静态存储数据 108
6.4 程序结构设计 109
6.4.1 程序模块 109
6.4.2 模块独立性 111
6.4.3 结构化程序结构 115
6.4.4 面向对象程序结构 116
6.5 概要设计说明书 117
小结 118
习题 119
第7章 程序算法设计与编码 120
7.1 程序结构化流程控制 120
7.2 程序算法设计工具 121
7.2.1 程序流程图 121
7.2.2 N-S图 122
7.2.3 PAD图 123
7.2.4 PDL语言 123
7.3 程序算法复杂度评估 124
7.3.1 程序算法复杂度 124
7.3.2 McCabe方法 125
7.4 程序编码 126
7.4.1 编程语言 127
7.4.2 编程规范 128
7.4.3 程序运行效率 131
小结 131
习题 132
第8章 软件测试 133
8.1 测试目的、计划与方法 133
8.1.1 测试目的 133
8.1.2 测试计划 133
8.1.3 测试方法 134
8.2 测试任务 135
8.2.1 单元测试 135
8.2.2 集成测试 137
8.2.3 确认测试 139
8.3 测试用例 140
8.3.1 白盒测试用例设计 140
8.3.2 黑盒测试用例设计 143
8.4 面向对象程序测试 144
8.4.1 面向对象单元测试 144
8.4.2 面向对象集成测试 145
8.4.3 面向对象确认测试 145
8.5 程序调试 145
8.5.1 诊断方法 146
8.5.2 调试策略 146
8.6 测试工具 147
8.6.1 测试数据生成程序 147
8.6.2 动态分析程序 148
8.6.3 静态分析程序 148
小结 148
习题 149
第9章 软件维护与再工程 151
9.1 软件维护分类 151
9.2 软件可维护性 152
9.2.1 软件可维护性评估 152
9.2.2 如何提高软件的可维护性 153
9.3 软件维护实施 153
9.3.1 维护机构 153
9.3.2 维护过程 154
9.4 软件再工程 156
9.4.1 逆向工程 156
9.4.2 重构工程 157
9.4.3 正向工程 157
小结 158
习题 158
第3部分 工程方法 161
第10章 结构化分析建模 161
10.1 结构化分析 161
10.2 功能层级图 162
10.3 数据流图与功能建模 162
10.3.1 数据流图(DFD) 163
10.3.2 数据流细化 164
10.3.3 功能建模 165
10.3.4 数据字典 166
10.4 状态转换图与行为建模 169
小结 171
习题 172
第11章 结构化设计建模 174
11.1 结构化建模语言 174
11.1.1 程序结构图 174
11.1.2 HIPO图 175
11.1.3 框架伪码 176
11.2 基于数据流的程序结构映射 177
11.2.1 变换流映射 177
11.2.2 事务流映射 179
11.2.3 混合流映射 180
11.3 程序结构优化 181
11.4 设计举例 184
小结 189
习题 190
第12章 面向对象分析建模 192
12.1 面向对象工程方法 192
12.1.1 面向对象工程建模方法 192
12.1.2 UML建模语言 193
12.2 用例建模 196
12.2.1 图形元素 196
12.2.2 参与者关系 197
12.2.3 用例关系 198
12.2.4 用例建模举例 199
12.3 活动建模 201
12.3.1 图形元素 201
12.3.2 业务级活动建模 202
12.3.3 用例级活动建模 202
12.4 类分析建模 203
12.4.1 实体类 203
12.4.2 实体类关系 205
12.4.3 类分析建模举例 207
小结 208
习题 208
第13章 面向对象设计建模 211
13.1 面向对象设计方法 211
13.1.1 面向对象设计特点 211
13.1.2 基于UML的设计建模 212
13.2 逻辑结构设计 214
13.2.1 确定系统构架 214
13.2.2 设计类体 215
13.2.3 抽象类、接口及其用途 219
13.2.4 程序逻辑结构 221
13.3 动态过程设计 227
13.3.1 协作图 227
13.3.2 时序图 229
13.3.3 状态图 229
13.4 物理装配与部署 232
13.4.1 程序构件图 232
13.4.2 系统部署图 233
小结 235
习题 236
第14章 数据库分析与设计 238
14.1 数据库体系结构 238
14.1.1 基本体系结构 238
14.1.2 基于数据库服务器的数据库系统 240
14.1.3 数据库分布应用 241
14.1.4 SQL语言 241
14.2 数据库分析建模 242
14.2.1 模型元素 242
14.2.2 传统实体关系建模方法 243
14.2.3 基于工具实体关系建模方法 243
14.2.4 实体关系建模举例 245
14.3 数据库存储设计 247
14.3.1 数据存储结构 247
14.3.2 数据表结构映射举例 249
14.3.3 数据完整性 250
14.3.4 数据表结构优化 251
14.3.5 通过触发器创建数据约束规则 252
14.4 数据库访问设计 253
14.4.1 数据视图 253
14.4.2 存储过程 253
14.4.3 数据事务 253
小结 254
习题 255
第15章 用户界面设计 256
15.1 界面设计特点 256
15.1.1 可视化 256
15.1.2 面向用户 257
15.1.3 用例驱动 257
15.1.4 原型进化 257
15.2 界面类型 258
15.2.1 窗体 258
15.2.2 Web页 260
15.3 界面功能 261
15.3.1 信息表示 261
15.3.2 系统交互 262
15.3.3 联机支持 262
15.4 界面设计方法 263
15.4.1 单界面行为建模 263
15.4.2 多界面导航设计 264
15.4.3 界面交互性设计 265
小结 267
习题 268
第16章 非主流工程方法 269
16.1 敏捷工程方法 269
16.1.1 敏捷价值观 269
16.1.2 敏捷工程法则 270
16.1.3 敏捷过程特点 270
16.1.4 敏捷设计原则 271
16.1.5 极限编程(XF) 272
16.1.6 自适应软件开发(ASD) 273
16.1.7 动态系统开发方法(DSDM) 273
16.2 净室工程方法 274
16.2.1 工程策略 274
16.2.2 盒结构建模 275
16.2.3 程序正确性验证 278
16.3 Jackson程序设计方法 278
16.3.1 设计步骤 279
16.3.2 设计举例 280
16.4 Z语言形式化规格说明 283
16.4.1 Z语言特点 283
16.4.2 Z语言应用举例 284
小结 285
习题 287
第17章 面向对象工程案例 288
17.1 系统分析 288
17.1.1 基本需求说明 288
17.1.2 功能用例分析 289
17.1.3 任务活动分析 290
17.2 系统设计 291
17.2.1 系统构架设计 291
17.2.2 类结构设计 291
17.2.3 对象交互设计 293
17.2.4 棋局对垒界面设计 296
17.2.5 系统构件设计 298
17.3 程序框架清单 298
17.3.1 客户端程序 298
17.3.2 服务器程序 303
参考文献 305