第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的定义 2
1.1.2 软件的特点 2
1.1.3 软件的产生与发展 3
1.2 软件危机 5
1.2.1 软件危机的产生 5
1.2.2 软件危机的表现与原因 5
1.3 软件工程 6
1.3.1 软件工程的定义 6
1.3.2 软件工程的目标 7
1.3.3 软件工程的原则 7
1.4 软件生存周期 8
1.5 软件开发模型 9
1.5.1 瀑布模型 10
1.5.2 快速原型模型 11
1.5.3 增量模型 12
1.5.4 喷泉模型 13
1.5.5 螺旋模型 14
1.6 软件开发工具与软件开发环境 16
1.6.1 软件开发工具 16
1.6.2 软件开发环境 16
1.6.3 软件开发工具简介 18
实例分析 20
本章小结 21
习题1 21
第2章 可行性研究和需求分析 24
2.1 软件的可行性研究 24
2.1.1 可行性研究的任务 24
2.1.2 可行性研究步骤 25
2.1.3 成本/效益分析 27
2.1.4 可行性研究的文档 28
2.2 需求分析 29
2.2.1 需求分析的重要性 29
2.2.2 需求分析的任务 29
2.2.3 需求分析的步骤 30
2.3 系统流程图 31
2.4 数据流图 33
2.4.1 数据流图的基础知识 33
2.4.2 设计数据流图的步骤 35
2.4.3 数据流图的用途 37
2.4.4 需要注意的问题 37
2.5 数据字典 40
2.5.1 数据字典的内容及格式 40
2.5.2 数据字典的用途 42
2.5.3 数据字典的实现 42
实例分析 43
本章小结 45
习题2 45
第3章 概要设计 49
3.1 概要设计的任务 49
3.1.1 概要设计的任务 49
3.1.2 概要设计说明书的主要内容 50
3.2 设计过程 51
3.3 设计原理 52
3.3.1 模块化 52
3.3.2 抽象与逐步求精 53
3.3.3 信息隐蔽 55
3.3.4 模块独立性 55
3.4 描绘软件结构的图形工具 60
3.4.1 软件结构图 60
3.4.2 层次图 63
3.5 启发规则 64
3.6 面向数据流的设计方法 67
3.6.1 变换分析 67
3.6.2 事务分析 69
3.6.3 设计优化 71
实例分析 71
本章小结 77
习题3 77
第4章 详细设计 80
4.1 详细设计的任务与原则 80
4.1.1 详细设计的任务 80
4.1.2 详细设计的原则 81
4.2 结构化程序设计 82
4.2.1 结构化设计技术的概念 82
4.2.2 结构化程序设计的原则 83
4.3 过程设计的工具 83
4.3.1 程序流程图PFC 83
4.3.2 盒图N-S 84
4.3.3 问题分析图PAD 86
4.3.4 过程设计语言PDL 87
4.3.5 判定表 89
4.3.6 判定树 91
4.4 用户界面设计 91
4.4.1 用户界面应具备的特性及设计分析、设计过程 91
4.4.2 用户界面的风格 93
4.4.3 用户界面的基本类型 94
4.4.4 用户界面设计指南 95
4.5 面向数据结构的设计方法 96
4.5.1 Jackson方法简介 96
4.5.2 Jackson方法的设计过程 98
4.5.3 使用Jackson方法应注意的问题 101
实例分析 101
本章小结 103
习题4 103
第5章 面向对象的方法 106
5.1 面向对象方法概述 106
5.1.1 传统软件工程方法存在的问题 106
5.1.2 面向对象方法的优点 107
5.1.3 面向对象方法的基本概念 108
5.1.4 面向对象方法的内容 111
5.1.5 面向对象的开发方法 112
5.2 面向对象分析 113
5.2.1 面向对象分析的基本过程及原则 114
5.2.2 确定对象 117
5.2.3 确定结构 118
5.2.4 确立主题 119
5.2.5 确定属性 119
5.2.6 确定服务和消息 120
5.3 面向对象设计 120
5.3.1 面向对象设计的准则 121
5.3.2 面向对象设计的内容 122
5.3.3 人机交互子系统的设计 123
5.3.4 问题域子系统的设计 124
5.3.5 任务管理子系统的设计 125
5.3.6 数据管理子系统的设计 126
5.4 面向对象实现 127
5.4.1 面向对象编程 127
5.4.2 面向对象测试 128
实例分析 130
本章小结 133
习题5 135
第6章 统一建模语言UML 138
6.1 UML概述 138
6.1.1 UML的产生和发展 138
6.1.2 UML的组成 139
6.1.3 UML的主要特点 140
6.1.4 UML的应用 140
6.2 通用模型元素 141
6.2.1 模型元素 141
6.2.2 约束 142
6.2.3 依赖关系 142
6.2.4 细化 143
6.2.5 注释 143
6.3 UML的静态建模机制 144
6.3.1 用例图 144
6.3.2 类图和对象图 147
6.3.3 包 152
6.3.4 构件图 153
6.3.5 配置图 154
6.4 UML的动态建模机制 155
6.4.1 消息 155
6.4.2 顺序图 156
6.4.3 协作图 157
6.4.4 状态图 157
6.4.5 活动图 159
6.5 UML软件开发过程 162
实例分析 164
本章小结 168
习题6 169
第7章 程序编码 172
7.1 编码 172
7.2 程序设计风格 173
7.3 编码风格中应注意的几个问题 175
实例分析 182
本章小结 184
习题7 184
第8章 软件测试 187
8.1 软件测试基础 187
8.1.1 软件测试的目的 187
8.1.2 软件测试的特点和原则 188
8.1.3 软件测试的基本步骤 189
8.1.4 静态分析与动态测试 189
8.2 白盒测试技术 190
8.2.1 逻辑覆盖 190
8.2.2 基本路径测试 194
8.2.3 循环测试 196
8.2.4 白盒测试法的步骤 197
8.3 黑盒测试技术 197
8.3.1 等价分类法 198
8.3.2 边界值分析法 200
8.3.3 错误推测法 201
8.3.4 因果图法 201
8.3.5 综合策略 204
8.4 软件测试过程 205
8.4.1 单元测试 205
8.4.2 集成测试 207
8.4.3 确认测试 208
8.4.4 系统测试 209
8.5 调试 210
8.5.1 调试的目的 210
8.5.2 调试方法 210
8.5.3 调试原则 211
实例分析 212
本章小结 215
习题8 215
第9章 软件维护 218
9.1 软件维护的基本概念 218
9.1.1 软件维护的定义 218
9.1.2 软件维护的分类及策略 219
9.2 软件维护的特点 220
9.3 软件维护过程 222
9.3.1 维护组织 222
9.3.2 维护工作的流程 223
9.3.3 维护技术 224
9.4 提高可维护性的方法 224
9.5 软件再工程 227
实例分析 229
本章小结 231
习题9 232
第10章 软件项目管理 234
10.1 软件项目管理概述 234
10.2 进度计划 236
10.2.1 进度安排的方法 237
10.2.2 制定开发进度计划 238
10.3 成本估算 239
10.3.1 软件开发成本估计方法 239
10.3.2 成本估算模型 240
10.4 人员组织 241
10.5 质量保证 243
10.6 能力成熟度模型 245
10.6.1 CMM概述 245
10.6.2 CMM的5个级别划分 245
10.6.3 关键过程域 247
10.6.4 应用软件过程评估 248
实例分析 248
本章小结 249
习题10 250
第11章 综合应用 252
11.1 “图书馆管理信息系统”的立项背景 252
11.2 可行性研究 253
11.2.1 现有系统存在的问题 253
11.2.2 新系统的功能 254
11.2.3 软件开发环境 254
11.2.4 可行性分析 255
11.3 需求分析 256
11.3.1 需求分析概述 256
11.3.2 组织结构调查 256
11.3.3 系统用户分析 257
11.3.4 UML用例图建模 257
11.3.5 数据流图 258
11.3.6 数据字典 260
11.3.7 IPO图 264
11.3.8 用户其他需求 264
11.4 概要设计 265
11.4.1 系统结构设计 265
11.4.2 数据库设计 266
11.5 详细设计 272
11.5.1 登录模块详细设计 272
11.5.2 读者管理子系统详细设计 273
11.6 系统实现 279
11.6.1 登录窗体 279
11.6.2 读者管理 280
11.7 系统测试 283
11.7.1 功能测试 283
11.7.2 系统测试 285
11.7.3 测试结论 285
本章小结 285
习题11 286
第12章 软件工程课程设计指导 288
12.1 软件工程课程设计目的 288
12.2 软件工程课程设计要求 289
12.3 课程设计实施步骤 289
12.4 课程设计指导 289
12.4.1 课程设计内容 290
12.4.2 实验安排 291
12.5 课程设计题目 295
附录:软件开发文档指南 298