第1章 软件工程概述 1
1.1 软件的概念 1
1.2 软件的发展与软件危机 2
1.2.1 计算机软件的发展 2
1.2.2 软件危机 4
1.3 软件工程 6
1.3.1 软件工程概述 6
1.3.2 软件生存周期 7
1.3.3 软件生存期模型 8
1.4 软件的开发方法、工具和环境 12
1.4.1 软件开发方法 12
1.4.2 软件的开发工具 14
1.4.3 软件的开发环境 15
1.5 小结 15
1.6 思考与练习 16
第2章 软件可行性研究 18
2.1 可行性研究的任务 18
2.2 可行性研究的过程 18
2.3 可行性研究的工具 20
2.3.1 系统流程图 20
2.3.2 数据流图 22
2.4 成本/效益分析 24
2.4.1 成本估算技术 24
2.4.2 成本/效益分析的方法 25
2.5 小结 27
2.6 思考与练习 27
第3章 软件需求分析 29
3.1 需求分析的任务 29
3.2 需求分析的过程 31
3.3 需求分析的原则 33
3.4 需求分析的方法概述 34
3.5 结构化分析方法 35
3.5.1 结构化分析的过程 35
3.5.2 数据流图的分层 37
3.5.3 数据词典 42
3.5.4 小说明 45
3.5.5 验证软件需求正确性 48
3.6 结构化数据系统开发方法(DSSD) 49
3.6.1 Warnier图 50
3.6.2 DSSD的分析方法 50
3.7 快速原型化分析方法 54
3.7.1 支持原型法的基本事实 54
3.7.2 实现原型的一般途径 55
3.7.3 基于知识的途径 56
3.7.4 快速建造原型法的工具——超高级语言 57
3.7.5 快速原型开发模型 58
3.8 数据库的需求分析 60
3.8.1 ER模型 61
3.8.2 范式 62
3.9 系统动态分析 62
状态迁移图 63
3.10 需求分析的工具 64
3.10.1 层次方框图 64
3.10.2 IPO图 65
3.11 小结 66
3.12 思考与练习 66
第4章 软件概要设计 70
4.1 概要设计的任务和过程 70
4.2 概要设计的基本原理 72
4.2.1 模块与模块独立性(module and module independence) 72
4.2.2 抽象、信息隐蔽与局部化 75
4.3 软件模块化的优化原则 76
4.4 概要设计的方法 80
4.5 小结 84
4.6 思考与练习 84
第5章 软件详细设计 85
5.1 详细设计的目的与任务 85
5.2 结构化程序设计方法 85
5.3 详细设计的工具 87
5.3.1 程序流程图 87
5.3.2 盒图(N-S图) 89
5.3.3 PAD图 91
5.3.4 过程设计语言(PDL) 92
5.3.5 判定表与判定树 94
5.4 Jackson系统设计方法 94
5.4.1 Jackson图 95
5.4.2 Jackson程序设计方法(JSP) 97
5.5 小结 100
5.6 思考与练习 101
第6章 软件编码 102
6.1 程序设计语言的选择 102
6.2 结构化程序设计 108
6.2.1 关于goto语句的讨论 108
6.2.2 结构化程序设计的原则 109
6.2.3 程序设计中的自顶向下和自底向上 111
6.3 程序设计的风格 113
6.4 程序设计效率 116
6.5 程序复杂性度量 116
6.5.1 代码行度量法 116
6.5.2 McCabe度量法 117
6.5.3 Halstead的软件科学 118
6.6 小结 120
6.7 思考与练习 120
第7章 软件测试 123
7.1 软件测试的概述 123
7.1.1 软件测试历史回顾 124
7.1.2 软件测试的目的 124
7.1.3 测试常用术语 126
7.1.4 测试的原则 127
7.1.5 测试环境 128
7.2 软件测试方法 128
7.2.1 白盒测试法 130
7.2.2 黑盒测试法 135
7.2.3 黑盒测试与白盒测试的比较 152
7.3 软件测试步骤 153
7.3.1 单元测试 154
7.3.2 集成测试 157
7.3.3 确认测试 160
7.3.4 系统测试 162
7.3.5 人工测试 163
7.4 软件可靠性 165
7.4.1 软件可靠性 165
7.4.2 估算平均无故障时间的方法 166
7.4.3 程序正确性证明 168
7.5 调试 168
7.5.1 调试技术 169
7.5.2 调试策略 170
7.6 测试文档 171
7.6.1 测试文档 172
7.6.2 制定测试计划时应考虑哪些因素 174
7.6.3 测试文档规范 174
7.6.4 软件生存周期各阶段的测试任务与可交付的文档 175
7.7 软件测试工具 177
7.7.1 白盒测试工具 177
7.7.2 黑盒测试工具 179
7.7.3 制定测试计划的工具 179
7.7.4 测试设计和开发工具 179
7.7.5 常用测试工具简介 180
7.8 小结 183
7.9 思考与练习 184
第8章 软件维护与复用 187
8.1 软件维护的概念 187
8.2 软件维护的特点 188
8.3 软件维护过程 190
8.4 程序的修改和程序修改的副作用 193
8.5 软件可维护性 195
8.6 软件的复用 197
8.7 小结 206
8.8 思考与练习 207
第9章 软件质量保证与项目管理 208
9.1 软件质量的概念 208
9.1.1 软件质量的定义 208
9.1.2 软件质量的特性 208
9.2 软件质量的度量 211
9.2.1 软件质量的度量 211
9.2.2 软件质量的评价 212
9.2.3 软件质量的管理 213
9.2.4 软件质量原则 214
9.3 软件质量的保证 215
9.3.1 软件质量保证 215
9.3.2 软件质量保证活动内容 215
9.3.3 软件质量保证评审 216
9.3.4 软件质量认证 217
9.4 软件的质量设计 217
9.5 软件项目管理 217
9.5.1 软件项目管理的定义 217
9.5.2 软件项目管理的组织模式 218
9.5.3 软件项目管理的基本内容 219
9.6 软件过程成熟度模型 220
9.6.1 软件过程 220
9.6.2 软件过程能力评估的CMM模型 220
9.6.3 关键过程域(Key Process Area) 222
9.6.4 CMM的应用 223
9.7 小结 223
9.8 思考与练习 224
第10章 面向对象的软件设计 225
10.1 面向对象的概念 225
10.1.1 面向对象的方法简介 225
10.1.2 对象 226
10.1.3 类和实例 227
10.1.4 继承 227
10.1.5 面向对象的编程语言特征 228
10.2 面向对象的分析过程 229
10.2.1 面向对象的分析 229
10.2.2 面向对象的分析的任务 229
10.2.3 对象模型技术(OMT,Object Model Technology) 229
10.2.4 面向对象分析的步骤 230
10.3 面向对象的设计(OOD,objected-oriented design) 233
10.3.1 高层设计 234
10.3.2 低层设计(类的设计) 235
10.4 面向对象程序设计的实现 235
10.4.1 类的实现 235
10.4.2 面向对象程序设计的实现 235
10.5 面向对象测试 236
10.5.1 面向对象测试模型(Object-Orient Test Model) 237
10.5.2 面向对象测试存在的主要问题 237
10.6 UML语言基础知识 238
10.6.1 UML语言概述 239
10.6.2 UML的特点分析 240
10.6.3 UML系统设计举例 240
10.7 小结 244
10.8 思考与练习 245