第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 需求分析步骤 27
2.3.1 进行调查研究 27
2.3.2 分析和描述系统的逻辑模型 27
2.3.3 复审 28
2.4 实体-关系图 28
2.4.1 实体 29
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
2.9.1 软件计划阶段文档的编写步骤 40
2.9.2 软件计划实例 41
小结 46
习题2 46
第3章 结构化设计 48
3.1 软件设计步骤 48
3.1.1 概要设计步骤 49
3.1.2 详细设计的基本任务 50
3.2 软件结构设计 51
3.2.1 软件结构设计的基本原理 51
3.2.2 模块化 53
3.2.3 模块独立性 54
3.2.4 模块设计启发规则 58
3.3 软件结构设计的图形工具 59
3.3.1 层次图(或HIPO图) 59
3.3.2 结构图 60
3.4 面向数据流的设计方法 61
3.5 过程设计工具 63
3.5.1 流程图 63
3.5.2 盒图 67
3.5.3 PAD图 69
3.5.4 判定表 70
3.5.5 判定树 71
3.5.6 过程设计语言 71
3.6 系统人机界面设计 72
3.6.1 人机界面设计问题 72
3.6.2 人机界面设计过程 73
3.6.3 评估界面设计的标准 73
3.6.4 界面设计指南 73
3.7 数据代码设计 75
3.7.1 代码设计目的 75
3.7.2 代码设计原则 75
3.7.3 代码种类 76
3.7.4 代码设计方法 78
3.8 面向数据结构的设计方法 78
3.9 软件设计文档 82
3.9.1 概要设计说明书 82
3.9.2 数据库设计说明书 83
3.9.3 详细设计说明书 84
3.9.4 操作手册编写提示 85
小结 86
习题3 86
第4章 软件编码和软件测试 89
4.1 结构化程序设计 89
4.1.1 程序设计语言的选择 89
4.1.2 程序设计风格 91
4.2 软件测试目标 93
4.3 软件测试方法 94
4.3.1 静态分析与动态测试 94
4.3.2 黑盒法与白盒法 94
4.4 软件测试步骤 95
4.4.1 模块测试 95
4.4.2 集成测试 95
4.4.3 程序审查会和人工运行 96
4.4.4 确认测试 97
4.4.5 平行运行 97
4.5 设计软件测试方案 98
4.5.1 等价类划分法 98
4.5.2 边界值分析法 99
4.5.3 错误推测法 99
4.5.4 逻辑覆盖法 99
4.5.5 程序环形复杂度的度量 102
4.5.6 因果图法 105
4.5.7 用基本路径覆盖法设计测试用例 107
4.6 软件测试原则和策略 110
4.6.1 软件测试原则 110
4.6.2 实用测试策略 111
4.7 软件调试、验证与确认 111
4.7.1 软件调试 111
4.7.2 软件验证 112
4.7.3 软件确认 112
4.8 软件测试文档 113
小结 114
习题4 114
第5章 软件维护 118
5.1 软件维护的种类、过程和副作用 118
5.1.1 软件维护的种类 118
5.1.2 软件维护的特点 119
5.1.3 软件维护的过程 120
5.1.4 软件维护的副作用 123
5.2 软件的可维护性 124
5.2.1 决定可维护性的因素 124
5.2.2 可维护性的度量 124
5.2.3 如何提高软件的可维护性 125
小结 126
习题5 126
第6章 面向对象方法学与UML 128
6.1 面向对象方法概述 128
6.1.1 面向对象方法学的要素和优点 129
6.1.2 面向对象方法的概念 130
6.2 UML概述 133
6.2.1 UML的发展 133
6.2.2 UML的内容 133
6.3 UML图 135
6.3.1 用例图 135
6.3.2 类图和包 137
6.3.3 对象图 141
6.3.4 状态图 142
6.3.5 顺序图 143
6.3.6 活动图 144
6.3.7 协作图 144
6.3.8 构件图 145
6.3.9 部署图 145
6.4 UML的应用 147
6.4.1 UML模型 147
6.4.2 UML视图 148
6.4.3 UML使用准则 150
6.4.4 UML的扩展机制 151
6.4.5 UML的应用领域 152
小结 153
习题6 153
第7章 面向对象软件设计与实现 155
7.1 面向对象分析 155
7.1.1 面向对象分析过程 155
7.1.2 面向对象分析原则 156
7.2 建立对象模型 157
7.2.1 建立对象模型的基本方法 157
7.2.2 确定对象和类 158
7.2.3 确定类的相互关系 159
7.2.4 划分主题 163
7.3 建立动态模型 164
7.4 建立功能模型 167
7.5 面向对象设计 169
7.5.1 系统设计 169
7.5.2 对象设计 172
7.5.3 面向对象设计的准则 173
7.5.4 面向对象设计的启发规则 174
7.6 面向对象系统的实现 174
7.6.1 选择程序设计语言 174
7.6.2 面向对象程序设计风格 175
7.6.3 面向对象实现的人员分工 177
7.7 面向对象的测试 177
7.7.1 面向对象测试策略 177
7.7.2 面向对象的测试步骤 179
7.8 面向对象方法实例 183
7.8.1 面向对象分析实例 183
7.8.2 面向对象的设计实例 188
小结 193
习题7 194
第8章 软件工程技术的发展 196
8.1 CASE技术 196
8.2 软件工具 198
8.2.1 软件工具的功能 198
8.2.2 软件工具的性能 199
8.2.3 软件工具的分类 199
8.3 软件开发环境 200
8.4 软件重用 202
8.4.1 可重用的软件成分 202
8.4.2 软件重用过程模型 203
8.4.3 开发可重用的软件构件 204
8.4.4 分类和检索软件构件 205
8.5 RUP 206
8.6 Rational Rose简介 208
8.6.1 Rational Rose界面 210
8.6.2 Rational Rose模型的4个视图 211
8.6.3 Rational Rose的使用 212
8.7 几种软件构件模型比较 213
8.7.1 CORBA 213
8.7.2 COM+/DCOM 214
8.7.3 JavaBean 214
8.7.4 三种构件模型的分析比较 216
8.7.5 软件构架技术 217
小结 218
习题8 218
第9章 软件工程管理 219
9.1 软件工程管理概述 219
9.2 软件规模估算 220
9.2.1 软件开发成本估算方法 220
9.2.2 代码行技术 221
9.2.3 功能点技术 222
9.2.4 COCOMO2模型 223
9.3 进度计划 225
9.3.1 Gantt图 225
9.3.2 工程网络技术 226
9.4 人员组织 228
9.5 软件配置管理 231
9.6 软件质量保证 233
9.6.1 软件质量的特性 233
9.6.2 软件质量保证措施 234
9.7 软件开发风险管理 235
9.7.1 软件开发风险的分类 236
9.7.2 软件开发风险的识别 237
9.7.3 软件开发的风险预测 237
9.7.4 处理软件开发风险的策略 239
9.8 软件工程标准与软件文档 240
9.8.1 软件工程标准 240
9.8.2 软件文档的编写 242
小结 243
习题9 243
第10章 实例——招聘考试成绩管理系统 245
10.1 问题定义 245
10.2 可行性研究 245
10.2.1 技术可行性 245
10.2.2 经济可行性 246
10.3 需求分析 246
10.4 概要设计 248
10.4.1 数据库结构设计 248
10.4.2 系统结构设计 248
10.4.3 设计测试方案 249
10.5 详细设计 250
10.5.1 系统界面设计 250
10.5.2 考前处理 251
10.5.3 输入设计 251
10.5.4 成绩处理 252
10.5.5 录用过程设计 252
10.5.6 输出设计 253
10.5.7 测试用例设计 253
10.6 程序设计提示 255
10.7 软件测试 256
习题10 256
附录A 部分习题解答 258
参考文献 271