第1章 概述 1
1.1 软件工程的产生 2
1.1.1 软件工程的发展史 2
1.1.2 软件危机 5
1.2 软件工程学 6
1.2.1 什么是软件 6
1.2.2 什么是软件工程 10
1.2.3 软件工程学的内容 10
1.2.4 软件过程 14
1.2.5 软件工程的基本原理 14
1.3 软件生存周期 15
1.3.1 软件生存周期的概念 15
1.3.2 软件生存周期各阶段的任务 16
1.4 软件开发模型 17
1.4.1 瀑布模型 17
1.4.2 快速原型模型 18
1.4.3 增量模型 20
1.4.4 喷泉模型 21
1.4.5 螺旋模型 22
1.4.6 统一过程 24
本章小结 25
习题1 26
第2章 软件计划 29
2.1 软件问题定义及可行性研究 30
2.1.1 软件问题定义 30
2.1.2 可行性研究 31
2.1.3 制订项目开发计划 32
2.2 需求分析 33
2.2.1 需求分析方法 34
2.2.2 需求分析步骤 36
2.3 需求分析图形工具 41
2.3.1 实体—关系图 41
2.3.2 数据流图 43
2.3.3 状态转换图 48
2.3.4 层次图 50
2.3.5 Warnier图 51
2.3.6 IPO图 51
2.4 数据字典 52
2.4.1 数据字典的内容 52
2.4.2 数据字典使用的符号 53
2.4.3 数据字典与图形工具 55
2.5 软件计划阶段文档 55
2.5.1 软件计划阶段文档的编写步骤 55
2.5.2 软件计划实例 56
本章小结 62
习题2 62
第3章 结构化设计 65
3.1 软件设计步骤 66
3.1.1 概要设计的一般步骤 66
3.1.2 详细设计的基本任务 69
3.2 软件结构设计 70
3.2.1 软件结构设计的基本原理 70
3.2.2 模块化 72
3.2.3 模块独立性 74
3.2.4 模块设计启发规则 78
3.3 软件结构设计的图形工具 79
3.3.1 层次图和HIPO图 79
3.3.2 结构图 80
3.4 面向数据流的设计方法 82
3.4.1 变换型 83
3.4.2 事务型 83
3.5 过程设计工具 84
3.5.1 流程图 85
3.5.2 盒图(N-S图) 89
3.5.3 问题分析图(PAD图) 91
3.5.4 判定表 93
3.5.5 判定树 94
3.5.6 过程设计语言(PDL) 95
3.6 用户界面设计 95
3.6.1 用户界面设计问题 95
3.6.2 用户界面设计过程和设计标准 97
3.6.3 用户界面设计指南 97
3.7 数据代码设计 99
3.7.1 代码的功能和性质 99
3.7.2 代码的设计原则 100
3.7.3 代码的种类 100
3.7.4 代码的设计方法 103
3.8 面向数据结构的设计方法 104
3.9 软件设计文档 108
3.9.1 概要设计说明书 108
3.9.2 数据库设计说明书 110
3.9.3 详细设计说明书 110
3.9.4 操作手册编写提示 111
本章小结 113
习题3 113
第4章 软件编码和软件测试 117
4.1 结构化程序设计 118
4.1.1 程序设计语言的选择 118
4.1.2 程序设计风格 120
4.2 软件测试目标 122
4.3 软件测试方法 123
4.3.1 静态分析与动态测试 123
4.3.2 黑盒法与白盒法 124
4.4 软件测试步骤 124
4.4.1 模块测试 125
4.4.2 集成测试 125
4.4.3 程序审查会和人工运行 126
4.4.4 确认测试 127
4.4.5 平行运行 128
4.5 设计软件测试方案 128
4.5.1 等价类划分法 129
4.5.2 边界值分析法 129
4.5.3 错误推测法 130
4.5.4 逻辑覆盖法 130
4.5.5 程序环形复杂程度的度量 134
4.5.6 因果图法 137
4.5.7 用基本路径覆盖法设计测试用例 140
4.6 软件测试原则和策略 143
4.6.1 软件测试原则 143
4.6.2 实用测试策略 144
4.7 软件调试、验证与确认 144
4.7.1 软件调试方法和技术 144
4.7.2 软件验证 145
4.7.3 软件确认 146
4.8 软件测试文档 147
本章小结 148
习题4 148
第5章 软件维护和软件重用 153
5.1 软件维护 154
5.1.1 软件维护的种类 154
5.1.2 软件维护的特点 155
5.1.3 软件维护过程 157
5.1.4 提高软件的可维护性 161
5.2 软件重用和再工程 164
5.2.1 软件的重用 164
5.2.2 软件重用过程模型 165
5.2.3 开发可重用的软件构件 167
5.2.4 软件逆向工程 169
5.2.5 软件再工程 170
本章小结 171
习题5 172
第6章 面向对象方法学与UML 175
6.1 面向对象方法概述 176
6.1.1 面向对象方法的要素和优点 177
6.1.2 面向对象方法的概念 179
6.2 UML概述 182
6.2.1 UML的发展 182
6.2.2 UML的内容 182
6.3 UML图 185
6.3.1 用例图 185
6.3.2 类图和包 187
6.3.3 对象图 192
6.3.4 状态图 193
6.3.5 顺序图 194
6.3.6 活动图 195
6.3.7 协作图 196
6.3.8 构件图 197
6.3.9 部署图 198
6.4 UML的应用 199
6.4.1 UML模型 200
6.4.2 UML视图 201
6.4.3 UML使用准则 203
6.4.4 UML的扩展机制 204
6.4.5 UML的应用领域 205
本章小结 206
习题6 206
第7章 面向对象软件设计与实现 209
7.1 面向对象分析 210
7.1.1 面向对象分析过程 210
7.1.2 面向对象分析原则 211
7.1.3 建立对象模型 212
7.1.4 建立动态模型 220
7.1.5 建立功能模型 224
7.2 软件架构设计和对象设计 226
7.2.1 软件架构设计 226
7.2.2 软件架构风格 228
7.2.3 移动互联系统的软件架构 234
7.2.4 对象设计 236
7.2.5 面向对象设计的准则和启发式规则 237
7.3 面向对象系统的实现 238
7.3.1 选择程序设计语言 238
7.3.2 面向对象程序设计风格 239
7.3.3 面向对象实现的人员分工 241
7.4 面向对象系统的测试 242
7.4.1 面向对象测试策略 242
7.4.2 面向对象的测试步骤 244
7.5 面向对象方法实例 249
7.5.1 面向对象分析实例 249
7.5.2 面向对象设计实例 255
本章小结 262
习题7 262
第8章 Web软件工程 265
8.1 Web软件的特性 266
8.2 Web的层次结构 268
8.2.1 二层C/S结构 268
8.2.2 三层C/S结构 270
8.2.3 四层C/S结构 272
8.2.4 B/S结构 273
8.3 客户端层可用的技术 274
8.3.1 基本HTML 275
8.3.2 脚本语言 275
8.3.3 Applet 276
8.3.4 AJAX 277
8.4 Web服务器层使用的技术 278
8.4.1 Servlet 278
8.4 2 JSP 280
8.5 Web软件设计模式 281
8.5.1 观察者模式 281
8.5.2 组合模式 283
8.5.3 工厂方法模式和策略模式 284
8.5.4 模型—视图—控制器模式 285
8.5.5 装饰者模式 287
8.6 WebApp设计 288
8.6.1 WebApp的特点及应用类型 288
8.6.2 WebApp的需求工程 289
8.6.3 WebApp需求分析 293
8.6.4 WebApp设计过程 296
8.6.5 WebApp体系结构设计 300
8.6.6 导航设计 303
8.7 WebApp测试 304
8.7.1 测试过程概述 305
8.7.2 内容测试 305
8.7.3 界面测试 306
8.7.4 导航测试 307
8.7.5 配置测试 308
8.7.6 安全性测试 308
8.7.7 性能测试 309
本章小结 310
习题8 311
第9章 移动互联网与软件工程 313
9.1 移动互联网简介 314
9.2 移动互联网应用技术 319
9.2.1 移动互联网的参考模型 320
9.2.2 移动互联终端技术 320
9.2.3 网络接入技术 323
9.2.4 移动应用服务技术 324
9.2.5 移动互联网的三要素 326
9.3 移动互联网应用安全技术 327
本章小结 329
习题9 329
第10章 软件工程管理 331
10.1 软件工程管理概述 332
10.2 软件规模估算 333
10.2.1 软件开发成本估算方法 333
10.2.2 代码行技术 334
10.2.3 功能点技术 335
10.2.4 COCOMO2模型 337
10.3 进度计划 338
10.3.1 Gantt图 339
10.3.2 工程网络技术 340
10.4 人员组织 343
10.5 软件配置管理 346
10.6 软件质量保证 349
10.6.1 软件质量的特性 349
10.6.2 软件质量保证措施 350
10.7 软件开发风险管理 351
10.7.1 软件开发风险标识 351
10.7.2 软件开发风险估算 354
10.7.3 软件开发风险管理 356
10.8 软件工程标准与软件文档 358
10.8.1 软件工程标准 358
10.8.2 软件文档的编写 360
本章小结 361
习题10 362
第11章 软件工程技术的发展 365
11.1 敏捷开发与极限编程技术 366
11.1.1 敏捷开发的含义 366
11.1.2 极限编程 368
11.2 净室软件工程 370
11.2.1 净室软件工程的概念 370
11.2.2 净室软件工程技术 371
11.3 面向服务的架构技术 373
11.3.1 面向服务架构的产生 373
11.3.2 面向服务架构的概念 375
11.3.3 基于SOA架构的软件开发方法 376
11.4 云计算与软件开发 377
11.4.1 云计算概述 377
11.4.2 云计算的关键技术 379
11.4.3 云计算平台与软件开发 381
11.4.4 云计算与物联网 382
11.5 网构软件 383
11.5.1 网构软件的概念 384
11.5.2 网构软件模型特点 385
11.5.3 网构软件开发方法 386
本章小结 388
习题11 388
第12章 实例——网上商品竞拍系统 389
12.1 问题定义和可行性研究 390
12.1.1 问题定义 390
12.1.2 可行性研究 390
12.2 需求分析和概要设计 391
12.2.1 系统角色的功能设计 391
12.2.2 数据库设计 393
12.2.3 系统结构设计 395
12.2.4 网络结构设计方案 396
12.2.5 网络设计方案 397
12.3 模块设计 397
12.3.1 注册登录模块设计 397
12.3.2 用户信息管理模块设计 399
12.3.3 拍卖商品管理模块设计 400
12.3.4 拍卖业务管理模块设计 400
12.4 软件测试 401
本章小结 403
习题12 403
附录部分习题参考答案 405
参考文献 423