第一篇 面向过程的软件工程 2
第1章 概论 2
1.1 软件 2
1.1.1 软件的定义及特点 2
1.1.2 软件的发展历程 3
1.1.3 软件的分类 3
1.1.4 软件的应用领域 4
1.2 软件危机 5
1.2.1 软件危机的定义 5
1.2.2 软件危机产生的原因 6
1.2.3 软件危机解决的途径 6
1.3 软件工程 7
1.3.1 软件工程的定义和研究对象 7
1.3.2 软件工程的基本原理 7
1.3.3 软件工程的基本目标 8
1.3.4 软件工程的基本原则 8
1.4 软件生存周期 9
1.5 软件开发过程模型 10
1.6 软件开发方法及工具 18
1.6.1 软件的开发方法 18
1.6.2 软件的开发工具 20
1.7 软件工程的最新发展动向 20
1.8 典型例题详解 21
小结 23
习题1 24
第2章 分析阶段 26
2.1 问题定义 26
2.2 可行性研究 26
2.2.1 可行性研究的任务 26
2.2.2 可行性研究的基本内容 27
2.2.3 可行性研究的步骤 27
2.3 系统流程图 29
2.3.1 系统流程图的符号 29
2.3.2 系统流程图举例 30
2.3.3 分层 30
2.4 软件计划的制订 31
2.4.1 确定软件计划 31
2.4.2 复审软件计划 32
2.4.3 开发方案的选择 32
2.5 成本/效益分析 33
2.5.1 成本估算 33
2.5.2 成本/效益分析的方法 36
2.6 需求分析 37
2.6.1 需求分析的概念 37
2.6.2 需求分析的层次 37
2.6.3 需求分析的目标和任务 38
2.6.4 需求分析的原则 38
2.6.5 需求分析的过程及方法 39
2.6.6 应用域 40
2.6.7 业务模型的建立 40
2.6.8 需求规格说明书 42
2.6.9 评审 42
2.7 传统的软件建模 44
2.7.1 分析建模 44
2.7.2 数据模型 44
2.7.3 功能模型 46
2.7.4 行为模型 46
2.7.5 数据字典 46
2.7.6 分析实例 47
2.8 典型例题详解 50
2.9 实验——音乐点播管理系统需求分析 52
小结 55
习题2 56
第3章 总体设计 58
3.1 总体设计的任务及过程 58
3.1.1 总体设计的任务 58
3.1.2 总体设计的过程 58
3.2 总体设计的原理 59
3.2.1 软件结构和过程 59
3.2.2 模块设计 60
3.2.3 结构设计 65
3.3 总体设计准则 67
3.4 总体设计的常用方法及工具 68
3.4.1 面向数据流的设计方法 68
3.4.2 总体设计中的工具 71
3.4.3 总体设计说明书编写规范 73
3.5 模块结构设计 73
3.6 数据存储设计 73
3.7 模型—视图—控制器框架 74
3.7.1 MVC模式 74
3.7.2 MVC中的模型类、视图类和控制类 74
3.7.3 MVC的实现 75
3.8 软件体系结构 75
3.8.1 软件体系结构的兴起 75
3.8.2 软件体系结构的概念 76
3.8.3 软件体系结构的现状 77
3.8.4 软件体系结构的描述方法 79
3.9 软件体系结构与操作系统 82
3.9.1 分层结构 82
3.9.2 微内核结构 83
3.10 典型例题详解 85
3.11 实验——音乐点播管理系统总体设计 88
小结 91
习题3 91
第4章 详细设计 94
4.1 详细设计的任务 94
4.2 详细设计的原则 95
4.3 详细设计的方法及工具 95
4.3.1 详细设计的方法 95
4.3.2 详细设计的工具 96
4.3.3 详细设计工具的选择 103
4.4 详细设计规格说明及复审 103
4.4.1 详细设计说明 103
4.4.2 详细设计复审 103
4.5 面向数据结构的设计方法 104
4.5.1 Jackson程序设计方法 104
4.5.2 Warnier程序设计方法 105
4.6 基于组件的设计方法 105
4.7 界面设计 106
4.7.1 用户界面设计 106
4.7.2 字符界面设计 107
4.7.3 菜单设计 108
4.7.4 对话框设计 109
4.7.5 多窗口界面设计 109
4.8 典型例题详解 110
4.9 实验——音乐点播管理系统详细设计 113
小结 114
习题4 114
第5章 编码及测试 116
5.1 程序设计语言 116
5.1.1 程序设计语言的发展及分类 116
5.1.2 程序设计语言的选择标准 118
5.2 程序设计风格 119
5.2.1 源程序文档化 120
5.2.2 数据说明 120
5.2.3 表达式和语句结构 121
5.2.4 输入和输出 121
5.3 程序效率 122
5.3.1 代码效率 122
5.3.2 存储器效率 123
5.3.3 输入/输出效率 123
5.4 编程安全 123
5.4.1 冗余程序设计 123
5.4.2 防错程序设计 124
5.5 结构化程序设计方法 124
5.6 程序的复杂性及度量 126
5.6.1 代码行度量法 126
5.6.2 McCabe度量法 126
5.6.3 Halstead度量法 128
5.7 软件测试 129
5.7.1 软件测试的意义 129
5.7.2 软件测试的基本概念 129
5.7.3 软件测试的目的、任务、原则和研究对象 130
5.7.4 软件测试的发展历史及趋势 132
5.7.5 软件测试的需求规格说明 133
5.7.6 软件测试的设计说明 134
5.8 软件测试的方法 135
5.8.1 静态测试和动态测试 135
5.8.2 黑盒测试法和白盒测试法 136
5.9 软件测试的步骤 141
5.9.1 单元测试 141
5.9.2 集成测试 144
5.9.3 确认测试 148
5.9.4 系统测试 148
5.9.5 验收测试 152
5.10 调试 154
5.10.1 调试过程 154
5.10.2 调试途径 155
5.11 测试设计和管理 156
5.11.1 错误曲线 156
5.11.2 测试用例设计 157
5.12 软件测试工具 165
5.12.1 自动软件测试的优点 165
5.12.2 测试工具分类 165
5.12.3 自动测试的相关问题 167
5.13 典型例题详解 168
5.14 实验——音乐点播管理系统测试 172
小结 174
习题5 175
第6章 软件维护及软件再工程 178
6.1 软件维护 178
6.1.1 软件维护的定义 178
6.1.2 软件维护的分类 178
6.1.3 软件维护的成本 180
6.1.4 软件维护的特点 181
6.2 软件维护过程 182
6.3 软件的可维护性 185
6.3.1 影响软件可维护性的因素 185
6.3.2 软件可维护性度量 187
6.3.3 提高软件可维护性的方法 187
6.4 逆向工程和再工程 189
6.4.1 预防性维护 189
6.4.2 软件的逆向工程和再工程 189
6.4.3 软件再工程过程 190
6.4.4 软件再工程的方法 190
6.5 典型例题详解 191
小结 191
习题6 192
第二篇 面向对象的软件工程 195
第7章 面向对象方法学 195
7.1 面向对象方法学概述 195
7.1.1 面向对象方法学的要点 196
7.1.2 面向对象方法学的优点 197
7.2 面向对象方法学的基本概念 199
7.2.1 对象 199
7.2.2 其他概念 201
7.3 面向对象建模 203
7.4 对象模型 204
7.4.1 类图的基本符号 204
7.4.2 表示关系的符号 205
7.5 动态模型 209
7.6 功能模型 210
7.6.1 用例图 210
7.6.2 用例建模 212
7.7 三种模型之间的关系 212
7.8 典型例题详解 213
7.9 实验——音乐点播管理系统面向对象方法学 214
小结 217
习题7 217
第8章 面向对象分析 219
8.1 面向对象分析建模过程 219
8.1.1 概述 219
8.1.2 3个子模型与5个层次 220
8.2 需求陈述 221
8.2.1 书写要点 221
8.2.2 例子 221
8.3 建立对象模型 222
8.3.1 确定类与对象 222
8.3.2 确定关联 224
8.3.3 划分主题 226
8.3.4 确定属性 227
8.3.5 识别继承关系 228
8.3.6 反复修改 229
8.4 建立动态模型 231
8.4.1 编写脚本 231
8.4.2 设想用户界面 232
8.4.3 绘制事件跟踪图 232
8.4.4 绘制状态图 233
8.4.5 审查动态模型 234
8.5 建立功能模型 235
8.5.1 绘制基本系统模型图 236
8.5.2 绘制功能级数据流图 236
8.5.3 描述处理框功能 237
8.6 定义服务 237
8.7 典型例题详解 238
8.8 实验——音乐点播管理系统面向对象分析 240
小结 245
习题8 246
第9章 面向对象设计 248
9.1 面向对象设计的准则 248
9.2 启发规则 250
9.3 软件重用 251
9.3.1 概述 251
9.3.2 类构件 252
9.3.3 软件重用的效益 254
9.4 划分子系统 254
9.4.1 子系统之间的两种交互方式 255
9.4.2 组织系统的两种方案 255
9.4.3 设计系统的拓扑结构 256
9.5 设计子系统 256
9.5.1 设计问题域子系统 256
9.5.2 设计人机交互子系统 258
9.5.3 设计任务管理子系统 260
9.5.4 设计数据管理子系统 261
9.6 设计类中的服务 263
9.6.1 确定类中应有的服务 264
9.6.2 设计实现服务的方法 264
9.7 设计关联 265
9.7.1 关联的遍历 265
9.7.2 关联对象的实现 266
9.8 设计优化 266
9.8.1 确定优先级 266
9.8.2 提高效率的技术 266
9.8.3 调整继承关系 267
9.9 设计模式 269
9.9.1 相关概念 269
9.9.2 描述设计模式 270
9.9.3 23种设计模式 271
9.10 典型例题详解 272
9.11 实验——音乐点播管理系统面向对象设计 273
小结 275
习题9 275
第10章 面向对象实现 277
10.1 面向对象语言 277
10.1.1 面向对象语言的优点 277
10.1.2 面向对象语言的技术特点 278
10.1.3 面向对象语言的选择原则 280
10.2 面向对象程序设计风格 281
10.2.1 提高可重用性 281
10.2.2 提高可扩充性 282
10.2.3 提高稳健性 282
10.3 测试策略 283
10.3.1 面向对象测试模型 283
10.3.2 面向对象分析的测试 283
10.3.3 面向对象设计的测试 283
10.3.4 面向对象编程的测试 283
10.3.5 面向对象的单元测试 284
10.3.6 面向对象的集成测试 284
10.3.7 面向对象的系统测试 284
10.4 设计测试用例 285
10.4.1 设计类测试用例 285
10.4.2 测试类间测试用例 286
10.5 典型例题详解 287
10.6 实验——音乐点播管理系统面向对象实现 287
小结 288
习题10 288
第三篇 软件工程管理及开发实例 291
第11章 软件工程标准化和软件文档 291
11.1 软件工程标准化 291
11.1.1 软件工程标准化的概念 291
11.1.2 软件工程标准化的类型及意义 291
11.2 软件工程标准的制定与推行 293
11.3 软件工程标准的层次和体系框架 294
11.3.1 软件工程标准的层次 294
11.3.2 中国的软件工程标准化工作 295
11.4 ISO 9000国际标准简介 296
11.5 软件文档 298
11.5.1 软件文档的作用和分类 298
11.5.2 软件文档编制的质量要求 301
11.5.3 软件文档的管理和维护 302
11.6 典型例题详解 303
小结 305
习题11 305
第12章 软件工程质量 308
12.1 软件质量概述 308
12.1.1 软件质量的定义 308
12.1.2 软件质量的特性 309
12.2 软件质量的度量模型 310
12.2.1 软件度量和软件质量的度量 310
12.2.2 软件质量的度量模型 313
12.3 软件质量保证 315
12.3.1 软件质量保证的概念 315
12.3.2 软件质量保证的主要任务 316
12.3.3 软件质量保证的策略 316
12.4 技术评审 317
12.5 软件质量管理体系 319
12.5.1 软件产品质量管理的特点 319
12.5.2 软件质量管理的指导思想 320
12.5.3 软件质量管理体系 321
12.6 典型例题详解 325
小结 325
习题12 326
第13章 软件工程项目管理 328
13.1 软件项目管理 328
13.1.1 软件项目管理的特点 328
13.1.2 软件项目管理的主要职能 328
13.1.3 软件项目管理的主要内容 329
13.1.4 软件项目管理活动 329
13.2 基于CASE技术的开发工具简介 332
13.3 成本估算 333
13.4 计划和组织 334
13.4.1 项目计划的制订 334
13.4.2 项目组人员组织与管理 335
13.5 进度计划与控制 337
13.5.1 制订开发进度计划 337
13.5.2 Gantt图与时间管理 338
13.5.3 工程网络与关键路径 338
13.5.4 项目进度跟踪与控制 340
13.6 风险管理 342
13.6.1 风险识别与分类 342
13.6.2 风险评估与分析 344
13.6.3 风险策划与管理 345
13.6.4 风险规避与监控 346
13.7 配置管理 347
13.7.1 软件配置 347
13.7.2 软件配置管理的任务 347
13.7.3 软件配置管理的过程 349
13.8 项目管理认证体系IPMP与PMP 352
13.8.1 IPMP概况 352
13.8.2 PMP简介 352
13.9 典型例题详解 353
13.10 软件工程项目管理实验 354
小结 359
习题13 359
第14章 简单的人事管理系统设计与开发 361
14.1 项目论证和计划 361
14.1.1 系统调查 361
14.1.2 新系统的总体功能需求和性能要求 361
14.1.3 系统开发的框架 362
14.2 可行性分析 362
14.3 需求分析 363
14.3.1 数据流分析 363
14.3.2 系统流程图 364
14.3.3 数据字典 365
14.3.4 系统用例图 366
14.4 总体设计 366
14.4.1 功能模块图 366
14.4.2 层次方框图 367
14.4.3 IPO图 367
14.4.4 工作流程图 367
14.4.5 系统数据库设计 368
14.5 详细设计 369
14.6 系统实现 371
14.7 测试与维护 372
14.7.1 测试用例与测试结果 372
14.7.2 系统维护 373
小结 375
习题14 375
附录一 可行性研究报告 377
附录二 需求规格说明书 380
附录三 总体设计说明书 382
附录四 详细设计说明书 385
附录五 软件测试的需求规格说明书 387
附录六 软件维护手册 390
附录七 UML的模型及图示表示 392
参考文献 398