第1章 概述 1
1.1 软件工程的产生 1
1.1.1 软件工程发展史 1
1.1.2 软件危机 2
1.2 软件工程学 4
1.2.1 什么是软件 4
1.2.2 什么是软件工程 4
1.2.3 软件工程学的内容 4
1.2.4 软件过程 7
1.2.5 软件工程基本原理 7
1.3 软件生命周期 7
1.3.1 软件生命周期定义 7
1.3.2 软件生命周期划分阶段的原则 8
1.3.3 软件生命周期各阶段的任务 8
1.4 软件开发模型 9
1.4.1 瀑布模型 9
1.4.2 快速原型模型 11
1.4.3 增量模型 12
1.4.4 喷泉模型 13
1.4.5 螺旋模型 14
1.4.6 统一过程 15
小结 16
习题1 17
第2章 软件计划 19
2.1 软件问题定义及可行性研究 19
2.1.1 软件问题定义 19
2.1.2 可行性研究 20
2.1.3 制定项目开发计划 21
2.2 需求分析的任务 22
2.2.1 确定目标系统的具体要求 22
2.2.2 建立目标系统的逻辑模型 24
2.2.3 软件需求规格说明 24
2.2.4 修正系统开发计划 25
2.2.5 制定初步的系统测试计划 25
2.2.6 编写初步的用户手册 25
2.2.7 编写数据要求说明书 26
2.3 需求分析步骤 26
2.3.1 进行调查研究 27
2.3.2 分析和描述系统的逻辑模型 27
2.3.3 复审 28
2.4 实体-关系图 28
2.4.1 实体 28
2.4.2 属性 29
2.4.3 关系 29
2.5 数据流图 30
2.5.1 数据流图四种基本符号 30
2.5.2 数据流图几种附加符号 31
2.5.3 画数据流图的步骤 32
2.5.4 几点注意事项 32
2.6 状态转换图 35
2.7 数据字典 36
2.7.1 数据字典的内容 36
2.7.2 数据字典使用的符号 37
2.7.3 数据字典与图形工具 38
2.8 需求分析的其他图形工具 38
2.8.1 层次图 39
2.8.2 Warnier图 39
2.8.3 IPO图 40
2.9 软件计划阶段文档编写步骤 40
小结 41
习题2 41
第3章 结构化设计 43
3.1 软件设计步骤 43
3.1.1 概要设计步骤 44
3.1.2 详细设计的基本任务 45
3.2 软件结构设计 46
3.2.1 软件结构设计的基本原理 46
3.2.2 模块化 48
3.2.3 模块独立性 49
3.2.4 模块设计启发规则 53
3.3 软件结构设计的图形工具 54
3.3.1 层次图(或HIPO图) 54
3.3.2 结构图 54
3.4 面向数据流的设计方法 56
3.4.1 变换型 57
3.4.2 事务型 57
3.5 过程设计工具 58
3.5.1 流程图 59
3.5.2 盒图(N-S) 63
3.5.3 PAD图 65
3.5.4 判定表 66
3.5.5 判定树 66
3.5.6 过程设计语言 67
3.6 系统人机界面设计 67
3.6.1 人机界面设计问题 67
3.6.2 人机界面设计过程 69
3.6.3 评估界面设计的标准 69
3.6.4 界面设计指南 69
3.7 数据代码设计 70
3.7.1 代码设计目的 70
3.7.2 代码设计原则 71
3.7.3 代码种类 72
3.7.4 代码设计方法 73
3.8 面向数据结构的设计方法 74
3.9 软件设计文档 77
3.9.1 概要设计说明书 77
3.9.2 数据库设计说明书 78
3.9.3 详细设计说明书 79
3.9.4 操作手册编写提示 80
小结 81
习题3 82
第4章 软件编码和软件测试 84
4.1 结构化程序设计 84
4.1.1 程序设计语言的选择 84
4.1.2 程序设计风格 86
4.2 软件测试目标 88
4.3 软件测试方法 89
4.3.1 静态分析与动态测试 89
4.3.2 黑盒法与白盒法 89
4.4 软件测试步骤 90
4.4.1 模块测试 90
4.4.2 集成测试 90
4.4.3 程序审查会和人工运行 91
4.4.4 确认测试 91
4.4.5 平行运行 92
4.5 设计软件测试方案 93
4.5.1 等价类划分法 93
4.5.2 边界值分析法 93
4.5.3 错误推测法 94
4.5.4 逻辑覆盖法 94
4.5.5 程序环行复杂程度的度量 97
4.5.6 因果图法 99
4.6 软件测试原则和策略 102
4.6.1 软件测试原则 102
4.6.2 实用测试策略 102
4.7 软件调试、验证与确认 103
4.7.1 软件调试 103
4.7.2 软件验证 104
4.7.3 软件确认 104
4.8 软件测试文档 105
小结 105
习题4 106
第5章 软件维护 110
5.1 软件维护的种类、过程和副作用 110
5.1.1 软件维护的种类 110
5.1.2 软件维护的特点 111
5.1.3 软件维护的过程 112
5.1.4 软件维护的副作用 115
5.2 软件的可维护性 116
5.2.1 决定可维护性的因素 116
5.2.2 可维护性的度量 116
5.2.3 如何提高软件的可维护性 117
小结 118
习题5 118
第6章 面向对象方法学与UML 120
6.1 面向对象方法概述 120
6.1.1 面向对象方法学的要素和优点 121
6.1.2 面向对象方法的概念 122
6.2 UML概述 125
6.2.1 UML的发展 125
6.2.2 UML的内容 125
6.3 UML图 127
6.3.1 用例图 127
6.3.2 类图和包 129
6.3.3 对象图 133
6.3.4 状态图 134
6.3.5 顺序图 135
6.3.6 活动图 135
6.3.7 协作图 136
6.3.8 构件图 137
6.3.9 部署图 138
小结 139
习题6 139
第7章 面向对象软件设计及UML应用 141
7.1 面向对象分析 141
7.1.1 面向对象分析过程 141
7.1.2 面向对象分析原则 142
7.2 建立对象模型 143
7.2.1 建立对象模型的基本方法 143
7.2.2 确定对象和类 144
7.2.3 确定类的相互关系 145
7.2.4 划分主题 149
7.3 建立动态模型 150
7.3.1 编写脚本 151
7.3.2 设计用户界面 152
7.3.3 画UML顺序图或活动图 152
7.3.4 画状态转换图 152
7.4 建立功能模型 153
7.5 面向对象设计 155
7.5.1 系统设计 155
7.5.2 对象设计 158
7.5.3 面向对象设计的准则 159
7.5.4 面向对象设计的启发规则 160
7.6 UML的应用 160
7.6.1 UML模型 161
7.6.2 UML视图 162
7.6.3 UML使用准则 164
7.6.4 UML的扩展机制 164
7.6.5 UML的应用领域 165
7.7 面向对象系统的实现 166
7.7.1 选择程序设计语言 166
7.7.2 面向对象程序设计 167
7.7.3 面向对象的测试 168
7.8 RUP统一过程 168
7.8.1 统一过程的开发模式 168
7.8.2 统一过程的特点 169
7.8.3 统一过程的要素 170
7.9 软件重用 170
7.9.1 可重用的软件成分 171
7.9.2 软件重用过程模型 172
7.9.3 开发可重用的软件构件 173
7.9.4 分类和检索软件构件 173
小结 174
习题7 175
第8章 软件工具与软件开发环境 177
8.1 CASE技术 177
8.1.1 CASE的基本组成部分 177
8.1.2 CASE的软件平台 178
8.1.3 CASE的硬件平台 178
8.2 软件工具 178
8.2.1 软件工具的功能 179
8.2.2 软件工具的性能 179
8.2.3 软件工具的分类 180
8.3 软件开发环境 181
8.3.1 软件开发环境的定义 181
8.3.2 软件开发环境的分类 181
8.3.3 软件开发环境的构成和特性 181
8.3.4 集成化环境 182
8.3.5 集成化的层次 182
小结 183
习题8 183
第9章 软件工程管理 184
9.1 软件工程管理概述 184
9.2 软件规模估算 185
9.2.1 软件开发成本估算方法 185
9.2.2 代码行技术 186
9.2.3 功能点技术 187
9.2.4 COCOMO2模型 188
9.3 进度计划 190
9.3.1 Gantt图 190
9.3.2 工程网络技术 191
9.4 人员组织 194
9.5 软件配置管理 196
9.6 软件质量保证 199
9.6.1 软件质量的特性 199
9.6.2 软件质量保证措施 200
9.7 软件工程标准与软件文档 201
9.7.1 软件工程标准 201
9.7.2 软件文档的编写 203
小结 204
习题9 204
第10章 实例——招聘考试成绩管理系统 206
10.1 问题定义 206
10.2 可行性研究 206
10.2.1 技术可行性 206
10.2.2 经济可行性 207
10.3 需求分析 207
10.3.1 考生情况分析 207
10.3.2 成绩输入 207
10.3.3 录用 207
10.3.4 输出需求 208
10.3.5 数据流图和数据字典 208
10.3.6 IPO图 209
10.4 概要设计 209
10.4.1 数据库结构设计 209
10.4.2 系统结构设计 210
10.4.3 设计测试方案 210
10.5 详细设计 211
10.5.1 系统界面设计 211
10.5.2 考前处理 212
10.5.3 输入设计 212
10.5.4 成绩处理 213
10.5.5 录用过程设计 213
10.5.6 输出设计 214
10.5.7 测试用例设计 215
10.6 程序设计提示 216
10.6.1 进入系统时密码设置 216
10.6.2 考前处理 217
10.6.3 成绩输入设计 217
10.6.4 成绩处理 217
10.6.5 录用过程设计 217
10.6.6 初始化程序 217
10.7 软件测试 217
习题10 218
附录A 部分习题答案 219
参考文献 221