第1章 软件工程概述 1
1.1 软件与软件危机 1
1.1.1 软件的概念及其特点 1
1.1.2 软件的分类 2
1.1.3 软件开发引发的问题 3
1.1.4 软件危机 4
1.2 软件工程 5
1.3 软件生命周期 7
1.4 软件开发模型 8
1.5 软件开发方法及过程管理 11
1.6 软件开发工具 12
本章小结 13
习题 13
第2章 软件的定义及可行性研究 16
2.1 问题定义 16
2.1.1 问题定义的内容 16
2.1.2 问题定义的方法 17
2.2 可行性研究 17
2.2.1 可行性研究的任务 18
2.2.2 可行性研究的方法和步骤 18
2.2.3 系统流程图 20
2.2.4 经济可行性 21
2.3 可行性研究报告的内容及作用 22
2.3.1 可行性研究报告编制中应注意的问题 22
2.3.2 可行性研究报告在软件开发中的作用 22
2.4 项目开发计划 22
2.5 实例分析 23
2.5.1 “高校图书管理系统”可行性研究报告 23
2.5.2 “高校图书管理系统”项目开发计划 26
本章小结 28
习题 28
第3章 需求分析 30
3.1 需求分析的目标和任务 30
3.2 软件需求的获取方法 31
3.2.1 需求获取的基本原则 32
3.2.2 需求获取的途径和方法 32
3.2.3 需求调研的步骤 33
3.3 需求分析的基本过程 33
3.3.1 问题识别 33
3.3.2 分析与综合 34
3.3.3 编制文档 34
3.3.4 综合评审 35
3.4 结构化需求分析方法 35
3.4.1 面向数据流的结构化分析方法 36
3.4.2 数据流图 36
3.4.3 数据词典 40
3.5 支持需求分析的原型化方法 47
3.5.1 软件原型的分类 47
3.5.2 快速原型开发模型 48
3.6 需求分析的结果及其描述 50
3.6.1 需求分析结果的描述 50
3.6.2 需求分析规格说明书的编写及评审 52
3.7 实例分析:“高校图书管理系统”软件需求分析 52
本章小结 59
习题 60
第4章 软件设计 63
4.1 软件设计的基础知识 63
4.1.1 软件设计概述 63
4.1.2 软件设计的任务和原则 64
4.2 软件设计的基本过程 66
4.2.1 软件设计的基本过程 66
4.2.2 数据设计和文件设计 67
4.3 总体设计 68
4.3.1 体系结构设计 68
4.3.2 模块设计 69
4.3.3 数据结构和数据库设计 77
4.3.4 界面设计 78
4.3.5 面向数据流的设计方法 80
4.4 详细设计 84
4.4.1 详细设计的基本任务 84
4.4.2 详细设计的原则 85
4.4.3 详细设计的表达 85
4.4.4 代码设计 90
4.4.5 设计规格说明的编制及复审 91
4.5 实例分析:“高校图书管理系统”软件设计 91
本章小结 105
习题 105
第5章 面向对象方法概述 109
5.1 面向对象方法的特征 109
5.1.1 面向对象方法概述 109
5.1.2 面向对象方法的形成 111
5.2 面向对象方法的主要概念 111
5.2.1 对象 111
5.2.2 类 112
5.2.3 属性 113
5.2.4 操作和方法 113
5.2.5 封装 114
5.2.6 继承 114
5.2.7 消息 115
5.2.8 多态性 115
5.2.9 重载 116
5.2.10 结构与关系 116
5.3 面向对象分析与面向对象设计 120
5.3.1 面向对象系统分析 120
5.3.2 面向对象系统设计 123
本章小结 124
习题 125
第6章 面向对象建模技术(UML) 127
6.1 UML概述 127
6.1.1 UML定义 127
6.1.2 UML的发展历史 128
6.1.3 UML主要内容 128
6.1.4 UML主要特点 130
6.2 USE CASE图 131
6.2.1 USE CASE图功能 131
6.2.2 系统边界与参与者识别 133
6.2.3 USECASE获取 133
6.2.4 参与者、用例之间的关系 134
6.2.5 USE CASE脚本规约 136
6.3 类与类图 138
6.3.1 类图 138
6.3.2 基本要素 138
6.3.3 类中的关系 139
6.4 交互图 142
6.4.1 系统交互特征 142
6.4.2 顺序图 142
6.4.3 协作图 143
6.5 状态图 144
6.5.1 状态及状态描述 144
6.5.2 状态图构成要素 145
6.6 活动图 146
6.6.1 活动图概念 146
6.6.2 活动图构成要素 147
本章小结 150
习题 150
第7章 编码 152
7.1 编码的目的与要求 152
7.2 程序设计语言 152
7.2.1 程序设计语言的特性 152
7.2.2 程序设计语言的分类 154
7.2.3 程序设计语言的选择 157
7.3 程序设计风格 158
7.3.1 源程序文档化 158
7.3.2 数据说明 162
7.3.3 语句的构造 162
7.3.4 输入与输出 166
7.3.5 效率 167
7.4 程序设计方法 167
7.4.1 结构化程序设计方法 167
7.4.2 面向对象的程序设计 169
本章小结 171
习题 172
第8章 软件测试 175
8.1 软件测试概述 175
8.1.1 软件测试的目标 175
8.1.2 软件测试的原则 176
8.1.3 软件测试的过程和策略 177
8.2 软件测试方法 179
8.2.1 静态测试 179
8.2.2 动态测试 180
8.3 测试用例的设计 181
8.3.1 黑盒技术 181
8.3.2 白盒技术 185
8.3.3 综合测试策略 188
8.3.4 测试实例分析 189
8.4 软件测试步骤 190
8.4.1 单元测试 190
8.4.2 组装测试 193
8.4.3 确认测试 196
8.4.4 系统测试 197
8.5 软件测试工具简介 198
8.6 调试 199
8.6.1 调试的目的和步骤 199
8.6.2 调试技术 200
8.6.3 调试原则 201
8.7 面向对象软件测试简述 202
8.7.1 面向对象的测试模型 202
8.7.2 面向对象的测试策略 203
8.7.3 面向对象软件测试用例设计 204
本章小结 204
习题 205
第9章 软件维护 208
9.1 软件维护的类型与策略 208
9.1.1 软件维护的类型 208
9.1.2 软件维护的策略 208
9.2 软件维护的特点 209
9.3 软件维护过程与组织 211
9.4 软件的可维护性 213
9.4.1 影响软件可维护性的因素 214
9.4.2 提高可维护性的方法 214
9.5 软件维护的副作用 216
9.6 软件逆向工程与再生工程 217
本章小结 218
习题 218
第10章 软件项目管理 220
10.1 软件项目管理概述 220
10.1.1 软件项目的特点 220
10.1.2 软件项目管理的主要职能 220
10.1.3 提高软件成功概率的途径 221
10.2 成本估计 221
10.3 质量管理体系及策略 224
10.3.1 质量管理 224
10.3.2 人员组织的管理 224
10.3.3 进度管理 226
10.3.4 质量保证 228
10.4 项目计划 229
10.4.1 项目计划管理的内容 230
10.4.2 项目报告 231
10.4.3 项目检验 231
本章小结 232
习题 233
第11章 软件设计过程的技术与方法 234
11.1 软件工程方法学 234
11.1.1 软件开发流程与软件工程方法学 234
11.1.2 软件工程基本方法 234
11.1.3 软件对象与方法选择 235
11.2 软件工程的标准化 236
11.2.1 软件工程标准化的意义 236
11.2.2 软件工程标准化的内容 237
11.2.3 软件工程标准的层次 237
11.2.4 我国的软件工程标准化工作 238
11.3 软件文档的类型及作用 238
11.3.1 软件文档在软件开发中的作用 238
11.3.2 软件文档的类型 238
11.3.3 编制软件设计文档应遵循的原则 239
11.4 能力成熟度模型CMM 241
11.4.1 CMM模型简介 241
11.4.2 能力成熟度的等级 242
11.4.3 CMM与ISO9000系列标准 243
11.4.4 应用CMM 244
11.4.5 CMMI简介 246
本章小结 246
习题 247
附录 计算机软件开发文档编写指南 249
参考文献 274