第1章 软件工程引论 1
1.1 软件及软件危机 1
1.1.1 软件及其特性 1
1.1.2 软件危机 3
1.2 软件工程 4
1.2.1 软件工程的形成与发展 4
1.2.2 软件工程的基本概念 5
1.3 软件工程的基本原则 8
1.4 本章小结 9
本章练习题 10
第2章 软件生命周期及开发模型 11
2.1 软件过程概述 11
2.1.1 软件生命周期 11
2.1.2 生命周期各阶段的任务 12
2.2 传统的软件过程模型 13
2.2.1 瀑布模型 14
2.2.2 原型模型 15
2.2.3 螺旋模型 17
2.3 面向对象的软件过程模型 19
2.3.1 软件统一开发过程 19
2.3.2 构件复用模型 21
2.4 敏捷软件开发过程模型 21
2.5 本章小结 24
本章练习题 24
第3章 结构化需求分析 25
3.1 需求工程概述 25
3.1.1 软件需求 25
3.1.2 需求工程 27
3.1.3 需求分析的过程 28
3.1.4 需求规格说明 29
3.1.5 需求验证 30
3.1.6 需求变更控制 31
3.2 需求获取 32
3.2.1 需求获取的内容 32
3.2.2 需求获取的方法 34
3.3 结构化分析方法概述 35
3.3.1 结构化分析思想 35
3.3.2 结构化分析方法 36
3.4 数据流程图 37
3.4.1 数据流程图的基本成分 37
3.4.2 数据流程图的绘制 38
3.4.3 数据流程图的特征与用途 40
3.5 数据字典 42
3.5.1 数据字典的定义与用途 42
3.5.2 数据字典的定义方法 43
3.5.3 加工逻辑的描述方法 45
3.6 应用举例 47
3.6.1 结构化分析过程 47
3.6.2 编写需求规格说明书 51
3.7 本章小结 53
本章练习题 54
第4章 结构化软件设计 55
4.1 软件设计的基本概念 55
4.1.1 概要设计的任务 56
4.1.2 概要设计的过程 56
4.2 软件的体系结构 57
4.2.1 现代体系结构模型的基本概念 57
4.2.2 常见的体系结构风格 58
4.2.3 软件体系结构建模 60
4.3 软件结构设计 61
4.3.1 模块化概念 61
4.3.2 模块的独立性 62
4.3.3 结构化设计建模 66
4.3.4 软件设计准则 69
4.4 面向数据流程的设计方法 71
4.4.1 基本概念 71
4.4.2 变换流分析与设计 72
4.4.3 事务流分析与设计 74
4.4.4 混合流分析与设计 75
4.5 面向数据结构的设计方法 76
4.5.1 Jackson(JSD)方法 76
4.5.2 Warnier(LCP)方法 80
4.6 数据设计 81
4.6.1 数据结构设计 81
4.6.2 文件设计 82
4.6.3 数据库设计 83
4.7 软件详细设计 86
4.7.1 结构化程序设计 86
4.7.2 详细设计工具 86
4.7.3 接口设计 88
4.8 应用举例 90
4.8.1 软件结构化设计过程 90
4.8.2 概要设计文档写作范例 96
4.9 本章小结 98
本章练习题 98
第5章 面向对象的需求分析 100
5.1 面向对象方法学概述 100
5.1.1 面向对象技术的由来 100
5.1.2 面向对象方法概述 101
5.1.3 面向对象建模 101
5.2 面向对象的基本概念 102
5.2.1 类和对象 102
5.2.2 封装、继承和多态性 103
5.2.3 面向对象的分析概述 105
5.3 用况模型 106
5.3.1 执行者 106
5.3.2 用例 107
5.3.3 用例之间的关系 108
5.3.4 用况建模 109
5.4 对象(概念)模型 112
5.4.1 类图 112
5.4.2 识别类与对象 113
5.4.3 识别属性 114
5.4.4 识别操作 115
5.4.5 识别关联 115
5.4.6 建立静态(对象、概念)模型 119
5.5 动态模型 120
5.5.1 消息类型 121
5.5.2 状态图 121
5.5.3 交互模型 125
5.5.4 活动图 128
5.5.5 建立动态模型 129
5.6 本章小结 134
本章练习题 135
第6章 面向对象的软件设计 136
6.1 面向对象软件设计概述 136
6.1.1 面向对象设计准则 136
6.1.2 面向对象设计的过程 138
6.2 系统设计 139
6.2.1 逻辑体系架构设计 139
6.2.2 物理体系架构建模 142
6.2.3 基于构件的建模 144
6.3 详细设计 146
6.3.1 系统详细设计 146
6.3.2 应用举例 150
6.4 面向对象软件实现 155
6.4.1 程序设计语言 156
6.4.2 程序设计风格 159
6.4.3 面向对象软件测试 161
6.5 本章小结 164
本章练习题 165
第7章 软件测试技术 166
7.1 软件测试概述 166
7.1.1 软件测试目的 166
7.1.2 软件测试原则 167
7.1.3 测试步骤 168
7.2 软件测试技术 168
7.2.1 测试用例设计 168
7.2.2 黑盒测试方法 169
7.2.3 白盒测试方法 174
7.3 软件调试技术 176
7.3.1 软件调试过程 176
7.3.2 软件调试策略 177
7.4 系统测试 178
7.4.1 单元测试 178
7.4.2 集成测试 180
7.4.3 确认测试 181
7.4.4 系统测试 182
7.5 本章小结 184
本章练习题 184
第8章 软件维护技术 185
8.1 软件维护概述 185
8.1.1 维护阶段的任务与特点 185
8.1.2 软件的可维护性 186
8.2 软件维护类型 187
8.2.1 改正性维护 187
8.2.2 完善性维护 187
8.2.3 适应性维护 188
8.2.4 预防性维护 188
8.3 软件维护技术 188
8.3.1 软件维护过程 188
8.3.2 提高软件的可维护性 191
8.4 软件维护困难 192
8.4.1 维护费用 192
8.4.2 软件维护的副作用 193
8.5 本章小结 194
本章练习题 194
第9章 软件质量与质量保证 195
9.1 软件质量的概念 195
9.1.1 软件质量定义 195
9.1.2 影响软件质量的因素 196
9.2 软件质量的度量 197
9.2.1 软件度量 197
9.2.2 软件度量的分类 198
9.2.3 软件度量过程 199
9.3 软件质量保证 200
9.3.1 质量保证策略 200
9.3.2 质量保证内容 201
9.3.3 质量保证措施 202
9.3.4 软件质量控制 202
9.4 软件配置管理 204
9.4.1 软件配置项 204
9.4.2 软件配置管理过程 205
9.5 软件能力成熟度模型简介 207
9.5.1 CMM的结构 207
9.5.2 软件过程能力成熟度等级 208
9.5.3 关键过程域 208
9.5.4 关键实践 210
9.6 本章小结 210
本章练习题 211
第10章 软件工程标准与文档 212
10.1 软件工程标准 212
10.1.1 软件工程标准 212
10.1.2 软件工程国家标准 214
10.2 软件文档与编写要求 214
10.2.1 软件文档的含义 214
10.2.2 软件文档的种类 216
10.2.3 软件文档的编写方法 216
10.3 软件文档的主要内容及写作指南 217
10.3.1 可行性研究报告 217
10.3.2 项目开发计划 219
10.3.3 软件需求规格说明书 220
10.3.4 概要设计说明书 220
10.3.5 详细设计说明书 221
10.3.6 程序维护手册 222
10.3.7 用户手册 223
10.4 本章小结 224
本章练习题 225
第11章 软件项目管理 226
11.1 软件项目管理概述 226
11.1.1 项目的概念与特征 226
11.1.2 项目管理的概念 227
11.1.3 项目管理的知识体系 228
11.2 软件项目的时间管理 229
11.2.1 项目的工作分解结构 229
11.2.2 进度安排 233
11.2.3 进度跟踪与控制 236
11.3 软件项目的成本管理 237
11.3.1 软件成本估算过程 237
11.3.2 软件成本估算方法 237
11.3.3 成本预算 244
11.3.4 项目成本控制 245
11.4 软件项目的团队管理 247
11.4.1 项目人力资源概述 247
11.4.2 项目团队建设 248
11.5 软件项目的风险管理 250
11.5.1 软件风险 250
11.5.2 风险识别 250
11.5.3 风险分析 251
11.5.4 风险评价 252
11.5.5 风险的缓解、监控和管理 252
11.6 本章小结 253
本章练习题 254
第12章 软件开发工具与环境 255
12.1 软件开发环境 255
12.1.1 按解决的问题分类 255
12.1.2 按开发环境的演化趋向分类 256
12.2 计算机辅助软件工程 257
12.3 软件开发工具 259
12.3.1 软件开发工具分类 259
12.3.2 常见工具简介 260
12.4 本章小结 263
本章练习题 263
第13章 软件工程课程设计 264
13.1 课程设计目的与要求 264
13.1.1 课程设计目的 264
13.1.2 课程设计内容及要求 265
13.1.3 课程设计题目举例 265
13.2 课程设计步骤安排 266
13.3 课程设计指导 267
13.3.1 实验1——建立课程设计环境与数据库设计 267
13.3.2 实验2——需求分析 268
13.3.3 实验3——软件设计 269
13.3.4 实验4——软件实现 269
13.4 案例分析 270
13.4.1 嵌入式软件系统应用实例 270
13.4.2 网络兼职招聘系统开发案例 282
参考文献 292