第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的发展 1
1.1.2 软件的定义 3
1.1.3 软件的特点 3
1.1.4 软件的分类 5
1.2 软件工程的内容与方法 7
1.2.1 软件危机与软件工程的定义 7
1.2.2 软件工程的基本内容与目标 10
1.2.3 软件的基本开发方法 10
1.2.4 软件工程的基本原则 11
1.3 软件生存周期与软件开发模型 11
1.3.1 软件生存周期 12
1.3.2 软件开发模型 13
1.4 软件工具与环境 21
1.4.1 软件工具概述 21
1.4.2 软件开发工具的功能 22
1.4.3 软件开发工具的特性 23
1.4.4 软件开发工具的分类 24
1.4.5 软件开发环境 25
1.5 软件工程学的知识体系 26
小结 27
习题1 27
第2章 软件项目可行性分析 28
2.1 软件项目可行性分析的任务 28
2.2 软件项目可行性分析的步骤 29
2.3 软件项目可行性分析的要素 30
2.3.1 经济可行性 31
2.3.2 技术可行性 31
2.3.3 社会环境可行性 31
2.4 系统流程图 32
2.5 成本-效益分析 33
2.5.1 成本估计 33
2.5.2 费用估计 35
2.5.3 度量效益的方法 36
小结 37
习题2 37
第3章 软件需求工程 38
3.1 概述 38
3.1.1 软件需求分类 39
3.1.2 需求规格说明 40
3.1.3 需求工程概念 41
3.1.4 需求工程过程 41
3.2 需求获取方法 42
3.3 需求分析的任务与原则 44
3.3.1 需求分析的任务 44
3.3.2 需求分析的原则 45
3.4 需求建模方法 45
3.4.1 需求分析模型 46
3.4.2 结构化需求建模方法 46
3.4.3 数据流图 49
3.4.4 数据字典 55
3.5 需求图形工具 59
3.5.1 层次框图 59
3.5.2 Warnier图 60
3.5.3 IPO图 60
3.6 需求描述 61
3.6.1 需求规格说明文档的作用 61
3.6.2 需求规格说明文档的类型 62
3.7 需求验证 62
3.7.1 目的与任务 63
3.7.2 内容与方法 63
3.7.3 需求评审 64
3.8 需求管理 65
3.8.1 需求管理的目标 65
3.8.2 需求管理的原则 65
3.8.3 需求开发的管理 66
3.8.4 需求管理活动 67
小结 68
习题3 69
第4章 软件项目概要设计 70
4.1 软件体系结构 70
4.1.1 概述 70
4.1.2 系统构成 72
4.1.3 控制模型 77
4.1.4 模块化分解 80
4.1.5 领域相关的体系结构 82
4.2 概要设计任务与过程 84
4.2.1 概要设计任务 84
4.2.2 概要设计过程 84
4.3 软件设计的基本概念 85
4.3.1 模块化与模块独立性 86
4.3.2 抽象 91
4.3.3 结构设计原则 93
4.3.4 软件复用 96
4.3.5 设计模式 98
4.4 面向数据流的设计方法 100
4.4.1 基本概念 100
4.4.2 系统结构图的组成 101
4.4.3 变换分析 103
4.4.4 事务分析 106
4.4.5 设计优化 108
4.5 面向数据结构的设计方法 108
4.5.1 Jackson系统开发方法 108
4.5.2 Warnier方法 117
4.6 概要设计文档评审 118
4.7 设计特征与设计原则 119
小结 119
习题4 119
第5章 软件项目详细设计 121
5.1 详细设计的任务与原则 121
5.1.1 详细设计的任务 121
5.1.2 详细设计的原则 122
5.2 详细设计工具 122
5.2.1 程序流程图 123
5.2.2 N-S图 124
5.2.3 PAD图 125
5.2.4 PDL 127
5.2.5 HIPO图 128
5.2.6 详细设计工具的属性 129
5.3 详细设计规格说明与复审 130
5.3.1 详细设计说明书 130
5.3.2 设计复审 131
5.4 模块文件夹 131
小结 132
习题5 132
第6章 面向对象的分析与设计 133
6.1 面向对象方法 133
6.1.1 面向对象方法概述 134
6.1.2 面向对象软件工程(OOSE) 135
6.1.3 面向对象的基本概念和特征 138
6.2 面向对象的分析 145
6.2.1 面向对象分析过程与原则 145
6.2.2 确定对象与类 149
6.2.3 确定属性 152
6.2.4 定义服务 152
6.2.5 对象间通信 156
6.3 面向对象设计 162
6.3.1 面向对象设计的概念 162
6.3.2 面向对象设计的方法 163
小结 165
习题6 166
第7章 用户界面的设计 167
7.1 用户界面的主要特征 167
7.1.1 用户界面的质量特征 167
7.1.2 用户界面的图形特征 168
7.1.3 用户界面的优点 168
7.2 设计原则 168
7.3 用户交互 170
7.3.1 交互方式 170
7.3.2 交互方式的比较 171
7.4 信息表示 172
7.4.1 用户界面的信息表示方法 172
7.4.2 用户界面信息表示的一些问题 172
7.5 帮助系统 174
7.6 界面设计 175
7.6.1 数据输入界面设计 176
7.6.2 数据显示界面设计 176
7.6.3 控制界面设计 177
7.7 界面设计评价 177
7.7.1 界面设计评价指标 178
7.7.2 界面评价方法 178
小结 179
习题7 179
第8章 软件项目编码 180
8.1 程序设计语言 180
8.1.1 程序设计语言的分类 180
8.1.2 程序设计语言的特点 182
8.1.3 程序设计语言的选择 184
8.2 编码风格 186
8.2.1 源程序文档化 186
8.2.2 数据说明 188
8.2.3 语句结构 188
8.2.4 输入/输出 191
8.3 程序效率 191
8.3.1 程序效率准则 191
8.3.2 算法对效率的影响 192
8.3.3 影响存储器效率的因素 192
8.3.4 影响输入/输出的因素 192
8.4 编程安全 193
8.4.1 冗余程序设计 193
8.4.2 防错程序设计 193
8.5 面向对象程序设计步骤 194
8.6 编码优化 195
8.6.1 优化的内容与原则 195
8.6.2 程序结构优化 196
8.6.3 程序代码优化 196
小结 196
习题8 197
第9章 软件质量与质量保证 198
9.1 软件质量的定义 198
9.2 影响软件质量的因素 199
9.3 软件质量保证 200
9.3.1 软件质量保证概念 200
9.3.2 软件质量保证策略 200
9.3.3 SQA小组的任务 201
9.4 软件质量保证活动 202
9.5 软件评审 202
9.5.1 设计质量的评审内容 203
9.5.2 程序质量的评审内容 207
9.6 软件质量保证的标准 210
9.7 软件质量评价 211
9.7.1 软件质量评价体系 211
9.7.2 软件质量评价标准 213
9.8 软件质量框架 214
9.8.1 高质量软件的特性 214
9.8.2 软件质量框架的组成 214
9.9 软件开发质量的定量描述 216
9.9.1 基本的定量估算 216
9.9.2 软件需求的估算 217
9.9.3 估算验收测试阶段预期发现的缺陷数 217
9.9.4 维护活动设计的度量 218
9.9.5 软件可用性的计算 218
9.9.6 基于植入故障方法的原有故障总数EN估算 218
小结 219
习题9 219
第10章 软件项目测试 220
10.1 概述 220
10.1.1 软件测试技术的发展 220
10.1.2 软件错误与缺陷 221
10.1.3 软件测试的定义 222
10.1.4 软件测试的对象 222
10.1.5 软件测试的目的 222
10.1.6 软件测试的原则 223
10.1.7 软件测试的复杂性 223
10.1.8 软件开发各阶段的测试 224
10.2 软件测试方法 224
10.2.1 静态分析 224
10.2.2 动态测试 226
10.2.3 人工测试与机器测试 227
10.2.4 黑盒测试 228
10.2.5 白盒测试 237
10.2.6 白盒测试和黑盒测试的比较 243
10.3 单元测试与集成测试 244
10.3.1 单元测试 245
10.3.2 集成测试 248
10.3.3 确认测试 253
10.3.4 系统测试 256
10.3.5 终止测试 260
10.4 面向对象测试 261
10.4.1 面向对象测试基础 261
10.4.2 面向对象测试模型 262
10.4.3 类测试 267
10.4.4 面向对象的集成测试 271
10.4.5 面向对象的系统测试 273
10.4.6 面向对象测试与传统测试的比较 274
10.5 测试的设计与实现 274
10.5.1 测试计划 275
10.5.2 测试设计 281
10.5.3 测试执行 287
10.5.4 测试总结 289
小结 290
习题10 290
第11章 软件项目交付与维护 293
11.1 软件发布与部署 293
11.1.1 软件产品发布 293
11.1.2 软件产品实施 294
11.2 软件演化的特征 295
11.2.1 软件演化的动态特征 295
11.2.2 软件体系结构的进化 296
11.3 软件维护 296
11.3.1 软件维护分类与特点 296
11.3.2 软件维护步骤 298
11.3.3 软件的可维护性 301
11.3.4 软件维护的副作用 302
11.4 逆向工程和再生工程 303
小结 304
习题11 304
第12章 软件项目管理 305
12.1 软件项目特点及软件管理功能 305
12.1.1 软件项目的特点 305
12.1.2 软件管理的功能 306
12.1.3 软件项目的工作范围 306
12.2 软件与硬件资源 307
12.2.1 人力资源 307
12.2.2 硬件 307
12.2.3 软件 307
12.3 人员的计划和组织 308
12.4 成本估计及控制 309
12.4.1 软件开发成本估算方法 309
12.4.2 专家估算法 310
12.4.3 成本估算模型 310
12.5 进度计划 313
12.5.1 软件工作的特殊性 313
12.5.2 各阶段工作量的分配 313
12.5.3 制定开发进度 314
12.6 软件配置管理 314
12.6.1 基线 314
12.6.2 软件配置项 315
12.6.3 软件配置管理过程 317
12.7 软件管理方案 319
12.8 能力成熟度模型 320
12.8.1 软件过程评估的必要性 320
12.8.2 CMM的主要用途 322
12.8.3 CMM的体系结构 322
12.8.4 CMM的等级 324
12.8.5 CMM的内部结构 327
12.8.6 CMM的应用 330
小结 331
习题12 331
第13章 软件建模及UML建模语言 332
13.1 模型概述 332
13.1.1 模型的定义 332
13.1.2 模型的分类 332
13.2 常用的软件建模模型 333
13.2.1 业务模型 333
13.2.2 功能模型 333
13.2.3 数据模型 333
13.3 需求建模 334
13.3.1 关联模型 334
13.3.2 行为模型 334
13.3.3 面向对象模型 334
13.3.4 需求数据模型 334
13.4 统一建模语言 334
13.4.1 UML的概述 335
13.4.2 UML的表示法 340
13.4.3 UML软件开发过程概述 351
13.4.4 Rational Rose概述 353
13.5 形式化方法 355
小结 356
习题13 356
参考文献 357