第1章 软件工程概论1
1.1 软件的概念1
1.1.1 软件发展历程1
1.1.2 软件的定义2
1.1.3 软件的特点3
1.1.4 软件的分类3
1.2 软件危机5
1.2.1 软件危机的定义5
1.2.2 产生软件危机的原因5
1.2.3 软件危机的表现形式5
1.2.4 解决软件危机的途径6
1.3 软件工程的产生和发展6
1.3.1 软件工程的定义及目标6
1.3.2 软件工程的研究内容8
1.3.3 软件工程的基本原理9
1.4 软件过程和软件生存周期10
1.4.1 软件过程10
1.4.2 软件生存周期11
1.5 软件过程模型13
1.5.1 瀑布模型13
1.5.2 快速原型模型15
1.5.3 螺旋模型16
1.5.4 增量模型18
1.5.5 喷泉模型19
1.5.6 基于构件的开发模型20
1.5.7 统一过程(RUP)模型21
1.5.8 形式化方法模型25 1.6 软件开发方法和软件开发工具25
1.6.1 结构化方法25
1.6.2 面向数据结构的软件开发方法26
1.6.3 面向对象的方法27
1.6.4 问题分析法27
1.6.5 软件开发工具27
1.7 传统的软件工程和面向对象的软件工程28
1.7.1 传统的软件工程28
1.7.2 面向对象的软件工程29
1.8 本章小结30
1.9 习题130
第2章 软件需求工程33
2.1 软件需求工程概述33
2.1.1 需求的概念33
2.1.2 需求工程34
2.2 需求获取37
软件工程--理论与实践目 录 2.2.1 存在问题37
2.2.2 综合需求38
2.2.3 获取方法39
2.2.4 提高获取的效率41
2.2.5 案例: 图书馆管理信息系统44
2.3 需求分析建模45
2.3.1 需求分析的主要工作45
2.3.2 什么是需求分析模型46
2.3.3 建模分类46
2.3.4 分析建模的方法47
2.4 需求规约48
2.4.1 需求规格说明编写方法48
2.4.2 需求规格说明书的主要内容48
2.4.3 需求规格说明模板48
2.4.4 需求文档的编写原则52
2.4.5 案例: “软件工程”课程教学系统52
2.5 需求评审55
2.5.1 评审类型55
2.5.2 评审标准56
2.5.3 如何做好需求评审57
2.6 需求管理59
2.6.1 需求变更控制59
2.6.2 需求跟踪60
2.6.3 需求管理工具62
2.7 本章小结62
2.8 习题263
第3章 结构化分析65
3.1 概述65
3.1.1 结构化分析思想65
3.1.2 结构化分析过程66
3.1.3 结构化模型的描述形式67
3.2 数据流图68
3.2.1 数据流图的基本成分68
3.2.2 数据流图绘制方法70
3.2.3 数据流图绘制实例72
3.3 数据字典77
3.3.1 数据字典的定义与用途77
3.3.2 内容及格式77
3.3.3 数据字典的实现81
3.4 加工逻辑的描述工具82
3.4.1 结构化语言82
3.4.2 判定表84
3.4.3 判定树86
3.5 实体-关系图86
3.5.1 数据对象87
3.5.2 属性87
3.5.3 关系87
3.5.4 实体关系图的实现88
3.6 本章小结89
3.7 习题389
第4章 面向对象的方法及UML建模语言93
4.1 面向对象的方法学概述93
4.1.1 面向对象方法的发展历程93
4.1.2 面向对象方法学的优点94
4.1.3 面向对象方法学的不足96
4.2 面向对象的基本概念97
4.3 面向对象的软件工程100
4.4 面向对象建模102
4.4.1 对象模型104
4.4.2 动态模型109
4.4.3 功能模型110
4.4.4 3种模型之间的关系113
4.5 典型的面向对象开发方法113
4.5.1 Booch方法113
4.5.2 Coad方法114
4.5.3 OMT方法116
4.5.4 OOSE方法117
4.6 UML统一建模语言118
4.6.1 UML语言的发展过程119
4.6.2 UML的定义及主要内容119
4.6.3 UML的主要特点121
4.6.4 UML的应用122
4.6.5 UML的本质和目标122
4.7 UML语言概述123
4.7.1 视图123
4.7.2 UML的模型元素和表示方法124
4.7.3 图124
4.7.4 UML建模过程140
4.8 本章小结141
4.9 习题4141
第5章 面向对象的分析145
5.1 面向对象的分析过程145
5.1.1 面向对象分析的3个模型与5个层次146
5.1.2 需求陈述147
5.2 建立对象模型148
5.2.1 确定类和对象148
5.2.2 确定关联150
5.2.3 确定属性153
5.2.4 划分主题154
5.2.5 识别结构156
5.2.6 优化对象模型156
5.3 建立动态模型158
5.3.1 编写脚本159
5.3.2 设想用户界面160
5.3.3 画事件跟踪图160
5.3.4 画状态图161
5.3.5 优化动态模型163
5.4 建立功能模型165
5.5 面向对象分析实例167
5.6 本章小结172
5.7 习题5172
第6章 软件设计工程175
6.1 软件设计工程概述175
6.1.1 软件设计模型176
6.1.2 设计目标和原则176
6.1.3 软件设计基本方法178
6.1.4 设计文档183
6.2 数据设计189
6.2.1 数据三模式的概念189
6.2.2 数据库设计的原则191
6.2.3 数据仓库193
6.3 体系结构设计194
6.3.1 体系结构设计准则195
6.3.2 体系结构设计可采用的图形工具196
6.4 人机界面设计199
6.4.1 人机界面风格199
6.4.2 人机界面设计原则199
6.4.3 人机界面设计过程200
6.5 详细设计202
6.5.1 详细设计的任务202
6.5.2 详细设计的常用工具203
6.6 本章小结207
6.7 习题6207
第7章 结构化设计211
7.1 概述211
7.1.1 软件设计的任务211
7.1.2 结构化设计与结构化分析的关系212
7.2 面向数据流的设计方法213
7.2.1 设计过程213
7.2.2 数据流分类214
7.2.3 变换分析216
7.2.4 事务分析219
7.2.5 综合分析220
7.3 面向数据结构的设计方法221
7.3.1 Jackson图222
7.3.2 Jackson方法设计步骤224
7.3.3 实例224
7.4 本章小结228
7.5 习题7228
第8章 面向对象的设计与实现231
8.1 面向对象设计准则231
8.2 启发式规则233
8.3 系统设计234
8.3.1 问题域子系统设计236
8.3.2 人机交互子系统设计237
8.3.3 任务管理子系统设计241
8.3.4 数据管理子系统设计243
8.4 服务与关联设计247
8.4.1 设计服务247
8.4.2 设计关联248
8.5 面向对象设计优化250
8.6 面向对象设计实例253
8.7 面向对象系统的实现259
8.7.1 选择程序设计语言259
8.7.2 面向对象程序设计风格262
8.8 本章小结263
8.9 习题8264
第9章 软件实现267
9.1 程序设计语言268
9.1.1 程序设计语言的特性268
9.1.2 程序设计语言的基本机制269
9.1.3 程序设计语言的类型270
9.1.4 程序设计语言的选择271
9.2 程序设计风格272
9.3 本章小结274
9.4 习题9274
第10章 软件测试277
10.1 软件测试概述277
10.1.1 软件测试的目的277
10.1.2 软件测试的原则278
10.1.3 软件测试分类279
10.2 白盒测试280
10.2.1 逻辑覆盖法280
10.2.2 循环覆盖法284
10.2.3 基本路径法286
10.3 黑盒测试288
10.3.1 等价类划分法289
10.3.2 边界值分析法291
10.3.3 因果图法292
10.4 测试过程295
10.4.1 单元测试296
10.4.2 集成测试297
10.4.3 确认测试298
10.4.4 系统测试300
10.4.5 验收测试301
10.5 面向对象测试302
10.5.1 面向对象测试策略302
10.5.2 面向对象测试用例设计310
10.6 自动化测试312
10.6.1 测试自动化的基础312
10.6.2 测试工具选型原则313
10.6.3 自动化测试工具314
10.7 软件调试317
10.7.1 调试过程318
10.7.2 调试技术319
10.8 本章小结320
10.9 习题10320
第11章 软件维护323
11.1 软件维护概述323
11.1.1 软件维护的基本概念323
11.1.2 软件维护的种类323
11.1.3 影响软件维护的工作量的因素324
11.1.4 软件维护策略325
11.1.5 维护的副作用326
11.2 软件维护过程327
11.2.1 建立维护机构327
11.2.2 编写软件维护申请报告328
11.2.3 软件维护工作流程328
11.2.4 软件维护记录及评价329
11.3 软件可维护性330
11.3.1 可维护性定义330
11.3.2 可维护性度量331
11.3.3 提高软件可维护性方法333
11.4 逆向工程和再工程337
11.4.1 软件再工程过程337
11.4.2 软件再工程分析339
11.5 本章小结340
11.6 习题11341
第12章 软件项目管理343
12.1 软件项目管理概述343
12.1.1 软件项目管理的定义343
12.1.2 软件项目管理的过程344
12.1.3 软件项目管理的内容345
12.2 软件项目成本管理345
12.2.1 成本管理345
12.2.2 软件项目成本估算方法346
12.2.3 软件项目成本估算模型347
12.3 软件项目进度管理348
12.3.1 软件项目进度管理内容348
12.3.2 制订项目计划348
12.3.3 项目进度监控349
12.4 软件项目配置管理350
12.4.1 软件配置管理过程 350
12.4.2 软件配置管理职责 351
12.5 软件项目风险管理352
12.5.1 软件项目中的风险种类352
12.5.2 软件项目风险管理354
12.5.3 风险识别354
12.5.4 风险评估355
12.5.5 风险跟踪356
12.5.6 风险处理357
12.6 软件项目质量管理358
12.7 软件项目人员管理359
12.7.1 人员管理工作内容359
12.7.2 项目参与者360
12.7.3 团队建设360
12.8 本章小结361
12.9 习题12361
第13章 软件复用技术365
13.1 概述365
13.1.1 复用的概念365
13.1.2 复用的意义367
13.1.3 如何实现复用368
13.1.4 软件复用技术368
13.1.5 可复用的软件成分369
13.2 软件复用过程370
13.2.1 构件组装模型370
13.2.2 复用模型371
13.2.3 软件复用过程模型372
13.3 软件构件技术 373
13.3.1 软件构件技术产生背景373
13.3.2 软件构件基本概念373
13.3.3 软件构件的基本特征374
13.4 领域工程375
13.4.1 领域划分375
13.4.2 领域分析过程375
13.4.3 领域特征376
13.4.4 结构化建模与结构点377
13.5 开发可复用的软件构件377
13.5.1 为了复用的分析与设计377
13.5.2 可复用构件的设计准则378
13.5.3 基于构件的开发378
13.6 分类和检索软件构件380
13.6.1 描述可复用的构件380
13.6.2 复用环境382
13.7 软件复用的效益382
13.8 本章小结383
13.9 习题13383
第14章 软件工程质量385
14.1 软件质量特性385
14.1.1 软件质量的定义385
14.1.2 软件质量的特性386
14.2 软件质量的度量386
14.2.1 软件度量387
14.2.2 软件度量的作用387
14.2.3 软件度量的分类388
14.2.4 软件度量过程388
14.3 软件质量保证389
14.3.1 质量控制与质量保证390
14.3.2 软件质量保证的内容391
14.3.3 软件质量保证策略392
14.4 技术评审392
14.4.1 准备评审393
14.4.2 举行评审会议393
14.4.3 跟踪与审核394
14.5 软件质量管理体系394
14.5.1 ISO 9000系列标准394
14.5.2 软件质量认证395
14.6 CMM模型395
14.6.1 CMM的结构395
14.6.2 软件过程能力成熟度等级396
14.6.3 关键过程域397
14.6.4 关键实践398
14.7 本章小结399
14.8 习题14399
第15章 软件工程标准化与软件文档401
15.1 软件工程标准化401
15.1.1 软件工程标准化的概念402
15.1.2 软件工程标准化的意义402
15.1.3 软件工程化的类型403
15.1.4 软件工程标准的制定与推行404
15.2 软件组织内的标准化工作405
15.3 软件文档与编写要求406
15.3.1 软件文档的作用和分类406
15.3.2 软件文档的编写方法409
15.3.3 软件基本文档的内容要求409
15.3.4 对档编制的质量要求413
15.3.5 软件文档的管理和维护413
15.4 本章小结414
15.5 习题15414
参考文献416第1章 软件工程概论1
1.1 软件的概念1
1.1.1 软件发展历程1
1.1.2 软件的定义2
1.1.3 软件的特点3
1.1.4 软件的分类3
1.2 软件危机5
1.2.1 软件危机的定义5
1.2.2 产生软件危机的原因5
1.2.3 软件危机的表现形式5
1.2.4 解决软件危机的途径6
1.3 软件工程的产生和发展6
1.3.1 软件工程的定义及目标6
1.3.2 软件工程的研究内容8
1.3.3 软件工程的基本原理9
1.4 软件过程和软件生存周期10
1.4.1 软件过程10
1.4.2 软件生存周期11
1.5 软件过程模型13
1.5.1 瀑布模型13
1.5.2 快速原型模型15
1.5.3 螺旋模型16
1.5.4 增量模型18
1.5.5 喷泉模型19
1.5.6 基于构件的开发模型20
1.5.7 统一过程(RUP)模型21
1.5.8 形式化方法模型25 1.6 软件开发方法和软件开发工具25
1.6.1 结构化方法26
1.6.2 面向数据结构的软件开发方法26
1.6.3 面向对象的方法27
1.6.4 问题分析法27
1.6.5 软件开发工具28
1.7 传统的软件工程和面向对象的软件工程28
1.7.1 传统的软件工程28
1.7.2 面向对象的软件工程29
1.8 本章小结30
1.9 习题131
软件工程--理论与实践目 录 第2章 软件需求工程33
2.1 软件需求工程概述33
2.1.1 需求的概念33
2.1.2 需求工程35
2.2 需求获取37
2.2.1 存在问题37
2.2.2 综合需求38
2.2.3 获取方法39
2.2.4 提高获取的效率41
2.2.5 案例: 图书馆管理信息系统44
2.3 需求分析建模45
2.3.1 需求分析的主要工作45
2.3.2 什么是需求分析模型46
2.3.3 建模分类46
2.3.4 分析建模的方法47
2.4 需求规约48
2.4.1 需求规格说明编写方法48
2.4.2 需求规格说明书的主要内容48
2.4.3 需求规格说明模板48
2.4.4 需求文档的编写原则52
2.4.5 案例: “软件工程”课程教学系统52
2.5 需求评审55
2.5.1 评审类型55
2.5.2 评审标准56
2.5.3 如何做好需求评审58
2.6 需求管理59
2.6.1 需求变更控制59
2.6.2 需求跟踪61
2.6.3 需求管理工具62
2.7 本章小结63
2.8 习题263
第3章 结构化分析66
3.1 概述66
3.1.1 结构化分析思想66
3.1.2 结构化分析过程67
3.1.3 结构化模型的描述形式68
3.2 数据流图69
3.2.1 数据流图的基本成分69
3.2.2 数据流图绘制方法71
3.2.3 数据流图绘制实例73
3.3 数据字典78
3.3.1 数据字典的定义与用途78
3.3.2 内容及格式78
3.3.3 数据字典的实现82
3.4 加工逻辑的描述工具83
3.4.1 结构化语言83
3.4.2 判定表84
3.4.3 判定树86
3.5 实体-关系图87
3.5.1 数据对象87
3.5.2 属性87
3.5.3 关系88
3.5.4 实体关系图的实现88
3.6 本章小结89
3.7 习题389
第4章 面向对象的方法及UML建模语言93
4.1 面向对象的方法学概述93
4.1.1 面向对象方法的发展历程93
4.1.2 面向对象方法学的优点94
4.1.3 面向对象方法学的不足96
4.2 面向对象的基本概念97
4.3 面向对象的软件工程100
4.4 面向对象建模102
4.4.1 对象模型104
4.4.2 动态模型109
4.4.3 功能模型110
4.4.4 3种模型之间的关系113
4.5 典型的面向对象开发方法113
4.5.1 Booch方法113
4.5.2 Coad方法114
4.5.3 OMT方法116
4.5.4 OOSE方法117
4.6 UML统一建模语言118
4.6.1 UML语言的发展过程119
4.6.2 UML的定义及主要内容119
4.6.3 UML的主要特点121
4.6.4 UML的应用122
4.6.5 UML的本质和目标122
4.7 UML语言概述123
4.7.1 视图123
4.7.2 UML的模型元素和表示方法124
4.7.3 图124
4.7.4 UML建模过程139
4.8 本章小结141
4.9 习题4141
第5章 面向对象的分析144
5.1 面向对象的分析过程144
5.1.1 面向对象分析的3个模型与5个层次145
5.1.2 需求陈述146
5.2 建立对象模型147
5.2.1 确定类和对象147
5.2.2 确定关联149
5.2.3 确定属性152
5.2.4 划分主题153
5.2.5 识别结构155
5.2.6 优化对象模型155
5.3 建立动态模型157
5.3.1 编写脚本158
5.3.2 设想用户界面159
5.3.3 画事件跟踪图159
5.3.4 画状态图160
5.3.5 优化动态模型162
5.4 建立功能模型164
5.5 面向对象分析实例166
5.6 本章小结171
5.7 习题5171
第6章 软件设计工程174
6.1 软件设计工程概述174
6.1.1 软件设计模型175
6.1.2 设计目标和原则175
6.1.3 软件设计基本方法177
6.1.4 设计文档182
6.2 数据设计188
6.2.1 数据三模式的概念188
6.2.2 数据库设计的原则190
6.2.3 数据仓库192
6.3 体系结构设计193
6.3.1 体系结构设计准则194
6.3.2 体系结构设计可采用的图形工具195
6.4 人机界面设计198
6.4.1 人机界面风格198
6.4.2 人机界面设计原则198
6.4.3 人机界面设计过程199
6.5 详细设计201
6.5.1 详细设计的任务201
6.5.2 详细设计的常用工具202
6.6 本章小结206
6.7 习题6206
第7章 结构化设计209
7.1 概述209
7.1.1 软件设计的任务209
7.1.2 结构化设计与结构化分析的关系210
7.2 面向数据流的设计方法211
7.2.1 设计过程211
7.2.2 数据流分类212
7.2.3 变换分析214
7.2.4 事务分析217
7.2.5 综合分析218
7.3 面向数据结构的设计方法219
7.3.1 Jackson图220
7.3.2 Jackson方法设计步骤222
7.3.3 实例222
7.4 本章小结226
7.5 习题7226
第8章 面向对象的设计与实现229
8.1 面向对象设计准则229
8.2 启发式规则231
8.3 系统设计232
8.3.1 问题域子系统设计234
8.3.2 人机交互子系统设计235
8.3.3 任务管理子系统设计239
8.3.4 数据管理子系统设计241
8.4 服务与关联设计245
8.4.1 设计服务245
8.4.2 设计关联246
8.5 面向对象设计优化248
8.6 面向对象设计实例251
8.7 面向对象系统的实现257
8.7.1 选择程序设计语言257
8.7.2 面向对象程序设计风格260
8.8 本章小结261
8.9 习题8262
第9章 软件实现264
9.1 程序设计语言265
9.1.1 程序设计语言的特性265
9.1.2 程序设计语言的基本机制266
9.1.3 程序设计语言的类型267
9.1.4 程序设计语言的选择268
9.2 程序设计风格269
9.3 本章小结271
9.4 习题9271
第10章 软件测试273
10.1 软件测试概述273
10.1.1 软件测试的目的273
10.1.2 软件测试的原则274
10.1.3 软件测试分类275
10.2 白盒测试276
10.2.1 逻辑覆盖法276
10.2.2 循环覆盖法280
10.2.3 基本路径法282
10.3 黑盒测试284
10.3.1 等价类划分法285
10.3.2 边界值分析法287
10.3.3 因果图法288
10.4 测试过程292
10.4.1 单元测试292
10.4.2 集成测试293
10.4.3 确认测试295
10.4.4 系统测试296
10.4.5 验收测试297
10.5 面向对象测试298
10.5.1 面向对象测试策略298
10.5.2 面向对象测试用例设计306
10.6 自动化测试308
10.6.1 测试自动化的基础308
10.6.2 测试工具选型原则309
10.6.3 自动化测试工具310
10.7 软件调试313
10.7.1 调试过程314
10.7.2 调试技术315
10.8 本章小结316
10.9 习题10316
第11章 软件维护319
11.1 软件维护概述319
11.1.1 软件维护的基本概念319
11.1.2 软件维护的种类319
11.1.3 影响软件维护的工作量的因素320
11.1.4 软件维护策略321
11.1.5 维护的副作用322
11.2 软件维护过程323
11.2.1 建立维护机构323
11.2.2 编写软件维护申请报告324
11.2.3 软件维护工作流程324
11.2.4 软件维护记录及评价325
11.3 软件可维护性326
11.3.1 可维护性定义326
11.3.2 可维护性度量327
11.3.3 提高软件可维护性方法329
11.4 逆向工程和再工程333
11.4.1 软件再工程过程333
11.4.2 软件再工程分析335
11.5 本章小结336
11.6 习题11337
第12章 软件项目管理338
12.1 软件项目管理概述338
12.1.1 软件项目管理的定义338
12.1.2 软件项目管理的过程339
12.1.3 软件项目管理的内容340
12.2 软件项目成本管理340
12.2.1 成本管理340
12.2.2 软件项目成本估算方法341
12.2.3 软件项目成本估算模型342
12.3 软件项目进度管理343
12.3.1 软件项目进度管理内容343
12.3.2 制订项目计划343
12.3.3 项目进度监控344
12.4 软件项目配置管理345
12.4.1 软件配置管理过程345
12.4.2 软件配置管理职责346
12.5 软件项目风险管理347
12.5.1 软件项目中的风险种类347
12.5.2 软件项目风险管理349
12.5.3 风险识别349
12.5.4 风险评估350
12.5.5 风险跟踪351
12.5.6 风险处理352
12.6 软件项目质量管理353
12.7 软件项目人员管理354
12.7.1 人员管理工作内容354
12.7.2 项目参与者355
12.7.3 团队建设355
12.8 本章小结356
12.9 习题12356
第13章 软件复用技术359
13.1 概述359
13.1.1 复用的概念359
13.1.2 复用的意义361
13.1.3 如何实现复用362
13.1.4 软件复用技术362
13.1.5 可复用的软件成分363
13.2 软件复用过程364
13.2.1 构件组装模型364
13.2.2 复用模型365
13.2.3 软件复用过程模型366
13.3 软件构件技术367
13.3.1 软件构件技术产生背景367
13.3.2 软件构件基本概念367
13.3.3 软件构件的基本特征368
13.4 领域工程369
13.4.1 领域划分369
13.4.2 领域分析过程369
13.4.3 领域特征370
13.4.4 结构化建模与结构点371
13.5 开发可复用的软件构件371
13.5.1 为了复用的分析与设计371
13.5.2 可复用构件的设计准则372
13.5.3 基于构件的开发372
13.6 分类和检索软件构件374
13.6.1 描述可复用的构件374
13.6.2 复用环境376
13.7 软件复用的效益376
13.8 本章小结377
13.9 习题13377
第14章 软件工程质量378
14.1 软件质量特性378
14.1.1 软件质量的定义378
14.1.2 软件质量的特性379
14.2 软件质量的度量379
14.2.1 软件度量380
14.2.2 软件度量的作用380
14.2.3 软件度量的分类381
14.2.4 软件度量过程381
14.3 软件质量保证382
14.3.1 质量控制与质量保证383
14.3.2 软件质量保证的内容384
14.3.3 软件质量保证策略385
14.4 技术评审385
14.4.1 准备评审386
14.4.2 举行评审会议386
14.4.3 跟踪与审核387
14.5 软件质量管理体系387
14.5.1 ISO 9000系列标准387
14.5.2 软件质量认证388
14.6 CMM模型388
14.6.1 CMM的结构388
14.6.2 软件过程能力成熟度等级389
14.6.3 关键过程域390
14.6.4 关键实践391
14.7 本章小结392
14.8 习题14392
第15章 软件工程标准化与软件文档394
15.1 软件工程标准化394
15.1.1 软件工程标准化的概念395
15.1.2 软件工程标准化的意义395
15.1.3 软件工程化的类型396
15.1.4 软件工程标准的制定与推行397
15.2 软件组织内的标准化工作398
15.3 软件文档与编写要求399
15.3.1 软件文档的作用和分类399
15.3.2 软件文档的编写方法402
15.3.3 软件基本文档的内容要求402
15.3.4 对档编制的质量要求406
15.3.5 软件文档的管理和维护406
15.4 本章小结407
15.5 习题15407
参考文献417