第1章 软件工程概述 1
1.1 软件工程的产生 1
1.1.1 计算机软件及其特点 1
目录 1
1.1.2 软件危机 3
1.1.3 软件工程的定义 4
1.2 软件工程的研究对象和基本原理 5
1.2.1 软件工程的研究对象 5
1.2.2 软件工程的基本原理 6
1.3 软件的生存期及常用的开发模型 7
1.3.1 软件的生存期 7
1.3.2 常用的软件开发模型 9
本章小结 12
习题1 14
2.1 问题定义 15
2.1.1 问题定义的基本任务 15
第2章 可行性研究和需求定义 15
2.1.2 问题定义报告 16
2.2 可行性研究 16
2.2.1 可行性研究的内容及过程 17
2.2.2 可行性研究报告 18
2.3 需求定义 19
2.3.1 需求获取的内容 19
2.3.2 需求获取的方法 20
2.3.3 需求规格说明的内容 21
2.3.4 需求规格说明的评审 22
2.3.5 需求规格说明书 23
2.4 典型应用分析 25
本章小结 29
习题2 29
第3章 需求分析 30
3.1 需求分析的目标与原则 30
3.1.2 需求分析的原则 31
3.1.1 需求分析的目标 31
3.2 需求分析的过程及方法 32
3.2.1 需求分析的过程 32
3.2.2 需求分析方法 33
3.3 需求分析的工具 50
3.3.1 SADT 50
3.3.2 PSL/PSA 51
3.4 传统的软件建模 52
3.4.1 软件建模 52
3.4.2 数据模型的建立 53
3.4.3 功能模型、行为模型的建立及数据字典 54
3.5 用例建模 56
3.5.1 用例图 57
3.5.2 参与者及用例的描述 60
3.5.3 用例建模过程 62
3.6.1 面向对象基础 63
3.6 面向对象建模 63
3.6.2 面向对象分析模型 69
3.6.3 对象模型的建立 70
3.6.4 行为模型的建立 72
3.6.5 功能模型的建立 76
3.7 统一建模语言UML 78
3.7.1 UML的基本实体 79
3.7.2 UML的目标及范畴 79
3.7.3 UML图的使用实例 80
3.8 典型应用分析 84
3.8.1 结构化分析示例 84
3.8.2 面向对象分析示例 88
3.8.3 面向问题域的分析示例 91
本章小结 94
习题3 95
4.1.2 系统设计的过程 96
4.1.1 系统设计的任务 96
第4章 系统设计 96
4.1 系统设计的任务和过程 96
4.2 系统设计的基本原则 97
4.2.1 软件设计 97
4.2.2 模块设计 100
4.2.3 结构设计 101
4.3 面向数据流图的设计方法 101
4.3.1 典型的系统结构图 101
4.3.2 变换分析 103
4.3.3 事务分析 105
4.3.4 软件模块结构的改进 106
4.4 面向对象的设计方法 106
4.4.1 面向对象的基本概念和特征 106
4.4.2 面向对象的技术要点 106
4.5.1 设计模式描述 107
4.5.2 设计模式的分类 107
4.5 面向对象软件设计模型 107
4.4.3 面向对象分析模型 107
4.6 模型-视图-控制器框架 108
4.6.1 MVC模式 108
4.6.2 MVC中的模型类、视图类和控制类 109
4.6.3 MVC的实现 110
4.7 系统设计说明书 111
4.8 典型应用分析 112
4.8.1 类设计的目标 112
4.8.2 类设计的方针 112
4.8.3 通过复用设计类 113
4.8.4 计数器类设计的实例 113
本章小结 114
习题4 115
5.1.1 详细设计的任务 116
5.1.2 详细设计的过程 116
第5章 详细设计 116
5.1 详细设计的任务及过程 116
5.1.3 详细设计的原则 117
5.1.4 详细设计工具 117
5.2 结构化设计方法 122
5.2.1 基于数据流的结构化设计方法 122
5.3 Jackson程序设计方法 123
5.3.1 Jackson方法的基本思想 123
5.2.2 面向数据结构的结构化设计方法 123
5.3.2 Jackson方法的设计技术及实例 124
5.4 Warnier程序设计方法 131
5.4.1 Warnier方法的基本思想 131
5.4.2 Warnier方法的设计技术及实例 131
5.5 基于组件的设计方法 135
5.5.1 基于组件的基本思想 135
5.5.2 基于组件的设计技术及实例 136
5.6.1 引言 142
5.6 详细设计说明书 142
5.5.3 应用 142
5.6.2 总体设计概述 143
5.6.3 程序描述 143
本章小结 143
习题5 144
第6章 程序编码 145
6.1 程序设计语言 145
6.1.1 程序设计语言的发展及分类 145
6.1.2 程序设计语言的选择 147
6.2 程序设计风格 148
6.2.1 源程序文档化 148
6.2.2 数据说明 149
6.2.3 表达式和语句 149
6.2.4 输入输出 150
6.3 程序设计方法 150
6.3.1 结构化程序设计方法 150
6.3.2 面向对象的程序设计方法 152
6.4.1 程序的复杂性 154
6.4.2 McCabe度量法 154
6.4 程序的复杂性及度量 154
6.4.3 Halstead方法 155
本章小结 156
习题6 157
第7章 软件测试 158
7.1 软件测试的基本方法 158
7.1.1 静态测试和动态测试 158
7.1.2 白盒测试和黑盒测试 159
7.2.1 单元测试 160
7.2.2 集成测试 160
7.1.3 ALAC测试 160
7.2 软件测试过程 160
7.2.3 确认测试 161
7.2.4 系统测试 162
7.3 软件测试 163
7.3.1 软件测试角色 163
7.3.3 软件测试的需求规格说明 164
7.3.2 软件测试环境 164
7.3.4 软件测试设计说明 170
7.3.5 测试评价 171
7.4 面向对象软件测试 174
7.4.1 面向对象测试模型 174
7.4.2 面向对象分析的测试 174
7.4.3 面向对象设计的测试 175
7.4.4 面向对象编程的测试 175
7.4.5 面向对象的单元测试 176
7.4.6 面向对象的集成测试 176
7.4.7 面向对象的系统测试 176
7.5 典型应用分析 177
本章小结 183
习题7 184
第8章 软件维护 185
8.1 软件维护的基本概念 185
8.1.2 软件维护的分类 186
8.1.1 软件维护的定义 186
8.2 软件维护的特点及过程 187
8.2.1 影响软件维护的因素 187
8.2.2 软件维护的标准化 188
8.2.3 软件维护的特点 189
8.2.4 软件维护过程 190
8.3 软件的可维护性 192
8.3.1 软件可维护性的定义 192
8.3.2 软件可维护性的度量及评估 192
8.3.3 提高软件可维护性的方法 195
本章小结 196
习题8 196
第9章 软件项目计划与管理 197
9.1 成本估计 199
9.1.1 项目成本估计的基本要素与模式 200
9.1.2 软件开发成本估算的常用方法 203
9.1.3 软件成本估算的经验模型 208
9.2 效益分析 213
9.2.1 几种效益度量方法 214
9.2.2 效益分析方法 215
9.3 项目组织与计划 217
9.3.1 项目计划的制定 218
9.3.2 项目组人员配备规则 220
9.3.3 人员组织与管理 222
9.4 进度计划 225
9.4.1 制定开发进度计划 225
9.4.2 甘特图与时间管理 226
9.4.3 工程网络与关键路径 227
9.4.4 项目进度跟踪与控制 229
9.5 风险管理 230
9.5.1 风险识别与分类 231
9.5.2 风险评估与分析 233
9.5.3 风险策划与管理 235
9.5.4 风险规避与监控 237
9.6 软件质量 238
9.6.1 软件质量特性与度量 240
9.6.2 软件质量体系与控制 245
9.6.3 软件质量保证与评审 247
9.6.4 软件配置项及其管理 250
9.7 软件工程标准 253
9.7.1 软件工程标准化及其意义 253
9.7.2 软件工程标准的类型与层次 254
9.7.3 软件质量标准与认证 258
9.7.4 软件文档标准化 260
本章小结 263
习题9 264
第10章 软件过程能力成熟度模型CMM 265
10.1 软件过程与软件过程成熟度 265
10.1.1 软件过程 265
10.1.3 软件过程改进框架 266
10.1.2 软件过程成熟度 266
10.2 CMM简介 267
10.2.1 CMM的发展过程 268
10.2.2 软件过程成熟度的基本概念 268
10.2.3 全面质量管理和CMM 269
10.2.4 基于模型改进的优点与风险 273
10.3 软件过程成熟度框架 275
10.3.1 成熟度的5个级别 275
10.3.2 软件过程的可视性 277
10.3.3 跳越成熟度级别 278
10.4 能力成熟度模型的结构 279
10.4.1 成熟度级别的内部结构 279
10.4.2 关键过程域 280
10.4.3 关键实践 280
10.4.4 共同特性 281
10.5 CMM的应用 281
10.5.1 基于CMM的估价方法 281
10.5.2 软件过程评估及软件能力评价 283
10.5.3 软件过程改进 285
10.5.4 使用CMM 287
10.5.5 CMM实施工具 288
本章小结 290
习题10 291
第11章 软件的可靠性 292
11.1 软件可靠性基本概念 292
11.1.1 软件可靠性定义 292
11.1.2 软件可靠性的主要指标 293
11.1.3 软件生存期与软件寿命 293
11.2 软件可靠性评估 294
11.2.1 软件可靠性模型 294
11.2.2 估算软件中错误的方法 296
11.3 软件可靠性技术 298
11.3.1 算法模型化 298
11.3.2 软件容错技术 299
本章小结 301
习题11 302
第12章 软件工具及环境 303
12.1 软件工具 304
12.1.1 软件工具的作用与功能 304
12.1.2 软件工具的分类 305
12.2 软件开发环境 305
12.2.1 软件开发环境的分类 306
12.2.2 软件开发环境的特点 306
12.3 计算机辅助软件工程(CASE) 307
12.2.3 软件开发环境的组成与结构 307
12.3.1 CASE的概念及现状 308
12.3.2 CASE技术的功能及组成 308
12.3.3 CASE工具分类及特点 309
12.3.4 CASE与软件工程的关系 310
本章小结 311
习题12 311
参考文献 312