书籍详情
软件工程基础(第3版)
作者:胡思康 著
出版社:清华大学出版社
出版时间:2019-02-01
ISBN:9787302518297
定价:¥49.00
购买这本书可以去
内容简介
软件工程是利用工程化的原理和方法指导计算机软件系统开发、测试和维护的学科,具有知识面广、实践性强、不断发展等特点。本书系统介绍软件工程的基本概念、原理、方法与技术,全书共11章,可分为四部分:第一部分为第1章,简要介绍软件工程的发展与过程模型;第二部分包括第2~6章,以瀑布模型为基础,以结构化方法为主线,介绍软件工程各阶段的任务、过程、方法、工具与测试技术;第三部分包括第7~10章,以瀑布模型为基础,以面向对象方法为主线,介绍统一建模语言UML、面向对象分析与过程、面向对象设计与建模、软件测试、软件维护等;第四部分为第11章,介绍软件项目管理与CMM。
作者简介
胡思康,北京理工大学计算机学院教师,博士。研究方向为自然语言理解、Web数据挖掘、软件需求、面向对象技术等领域。主讲本科生和留学生“面向对象技术”“软件工程基础”“软件工程综合训练”课程10多年。前两门课程前后衔接,在课程讲解过程中,秉承理“论指导实践、实践融入理论”的教学理念,为学生从“程序员”迈入“软件工程师”夯实基础。后两门课是对软件工程由课堂走入实践的贯通学习。
目录
第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.2.3 软件工程的实施原则 8
1.2.4 软件工程的基本原理 9 1.3 软件与软件过程 10 1.3.1 软件的概念 11
1.3.2 软件的分类 12
1.3.3 软件生命周期 13
1.4 软件过程模型 16
1.4.1 瀑布模型 16
1.4.2 原型模型 17
1.4.3 增量模型 18
1.4.4 螺旋模型 19
1.4.5 喷泉模型 20
1.4.6 敏捷过程模型 21
1.4.7 渐进交付迭代模型 23
1.4.8 微软解决框架过程模型 24
1.4.9 软件过程模型的比较 26
1.5 软件开发方法 26
1.5.1 结构化开发方法 27
1.5.2 面向对象开发方法 27
1.6 案例描述 28
1.6.1 简历信息自动获取和查询系统 28
1.6.2 试卷自动生成系统 29
1.7 本章小结 30
习题 31
第2章 软件需求工程 /?33
2.1 软件需求的基本概念 33
2.1.1 需求分析的任务 33
2.1.2 需求分析的原则 34
2.1.3 需求分析的内容 35
2.2 可行性分析 36
2.2.1 可行性分析的内容 36
2.2.2 系统流程图 38
2.3 需求工程的过程 39
2.3.1 需求工程中的参与人员 39
2.3.2 需求工程中的活动 40
2.3.3 需求工程的管理 41
2.4 需求获取技术 42
2.5 结构化需求分析和建模 45
2.5.1 结构化需求分析概述 45
2.5.2 面向数据的数据建模 45
2.5.3 面向数据流的功能建模 47
2.5.4 面向状态转换的行为建模 51
2.6 数据字典 54
2.6.1 数据字典的编写要求 54
2.6.2 数据字典的定义 55
2.7 案例——简历自动获取和查询系统的需求建模 56
2.7.1 数据建模——E-R图描述 56
2.7.2 功能建模——数据流图 57
2.7.3 行为建模——状态转换图 59
2.7.4 加工逻辑——PDL语言的描述 59
2.7.5 数据字典 59
2.8 需求评审 61
2.8.1 软件需求规格说明 61
2.8.2 需求评审标准及需求验证 64
2.8.3 需求变更管理 66
2.9 本章小结 67
习题 67
第3章 软件设计基础 /?70
3.1 软件设计概述 70
3.1.1 软件设计与软件需求 70
3.1.2 软件设计的任务 71
3.1.3 软件设计的原则 73
3.2 软件体系结构设计 74
3.2.1 体系结构设计概述 74
3.2.2 以数据为中心的数据仓库模型 74
3.2.3 客户端/服务器模式的分布式结构 75
3.2.4 层次模型 77
3.2.5 MVC模型 78
3.3 模块化设计 80
3.3.1 软件模块化与分解 80
3.3.2 抽象 81
3.3.3 信息隐藏 81
3.3.4 模块独立性 82
3.3.5 启发式规则 85
3.4 界面设计 88
3.4.1 界面设计的任务 88
3.4.2 界面设计的原则 89
3.4.3 界面设计的特性 90
3.5 软件设计评审 91
3.5.1 软件设计规格说明 91
3.5.2 软件设计评审标准 94
3.5.3 软件设计验证 96
3.6 本章小结 97
习题 98
第4章 结构化设计方法 /?99
4.1 结构化设计方法概述 99
4.2 面向数据流的设计方法 100
4.2.1 层次图和结构图 100
4.2.2 变换分析法 102
4.2.3 事务分析法 106
4.2.4 混合分析法 107
4.3 案例——简历自动获取和查询系统的数据流设计方法 108
4.3.1 用变换分析法进行设计 108
4.3.2 用事务分析法进行设计 109
4.3.3 两种方法的比较 111
4.4 结构化详细设计的工具 111
4.4.1 程序流程图 111
4.4.2 盒图 113
4.4.3 问题分析图 114
4.4.4 判定树 115
4.4.5 判定表 116
4.4.6 详细设计工具的比较 116
4.5 本章小结 117
习题 118
第5章 软件实现 /?120
5.1 程序设计语言 120
5.1.1 程序设计语言的分类 120
5.1.2 程序设计语言的特性 121
5.1.3 选择程序设计语言 122
5.2 程序设计风格 124
5.2.1 程序编排和组织的准则 124
5.2.2 程序设计的效率 128
5.3 代码重用 130
5.4 代码评审 131
5.5 本章小结 135
习题 135
第6章 软件测试 /?138
6.1 软件测试基础 138
6.1.1 软件测试概念 138
6.1.2 软件测试过程模型 139
6.1.3 软件测试原则 141
6.1.4 软件测试在软件开发各阶段的工作流程 143
6.1.5 软件测试信息流 145
6.1.6 软件测试技术分类 145
6.2 白盒测试 147
6.2.1 逻辑覆盖 147
6.2.2 循环测试 150
6.2.3 路径测试 152
6.3 黑盒测试 156
6.3.1 等价类划分 156
6.3.2 边界值分析 158
6.3.3 错误推测法 158
6.3.4 因果图法 159
6.4 白盒测试和黑盒测试的比较 161
6.4.1 应用角度的不同 161
6.4.2 白盒测试的优点与不足 162
6.4.3 黑盒测试的优点与不足 162
6.5 软件测试策略 162
6.5.1 单元测试 162
6.5.2 集成测试 165
6.5.3 确认测试 169
6.5.4 系统测试 170
6.6 调试 172
6.6.1 软件调试过程 172
6.6.2 软件调试方法 173
6.7 软件测试报告 174
6.7.1 软件测试说明 174
6.7.2 软件测试报告 176
6.8 本章小结 177
习题 177
第7章 统一建模语言UML /?180
7.1 UML的发展 180
7.1.1 UML的产生 180
7.1.2 UML的构成 181
7.1.3 UML的特点 182
7.2 面向对象的基本概念 182
7.3 UML视图 188
7.4 UML的图和模型元素 189
7.4.1 用例图 189
7.4.2 类图 191
7.4.3 包图 192
7.4.4 状态图 193
7.4.5 活动图 193
7.4.6 顺序图 195
7.4.7 协作图 196
7.4.8 构件图 197
7.4.9 配置图 198
7.5 UML的关系 198
7.5.1 关联关系 199
7.5.2 泛化关系 202
7.5.3 依赖关系 205
7.5.4 实现关系 206
7.6 UML的通用机制 206
7.6.1 修饰 206
7.6.2 注释 207
7.6.3 规格说明 207
7.6.4 扩展机制 207
7.7 基于UML的软件过程 209
7.8 本章小结 211
习题 211
第8章 面向对象分析 /?213
8.1 面向对象分析概述 213
8.1.1 传统软件过程中的不足 213
8.1.2 面向对象的特点 214
8.1.3 面向对象分析的基本过程 215
8.1.4 面向对象分析的3类模型 215
8.1.5 静态模型的5个层次 216
8.2 建立功能模型(用例模型) 217
8.2.1 识别参与者 218
8.2.2 识别用例 218
8.2.3 识别用例间关系 220
8.2.4 用例描述文档 221
8.3 建立静态模型(对象模型) 222
8.3.1 识别类与对象 222
8.3.2 划分主题 224
8.3.3 确定结构 225
8.3.4 确定属性 226
8.3.5 确定服务 226
8.3.6 类图描述文档 227
8.3.7 包图描述文档 228
8.4 建立动态模型 229
8.4.1 建立顺序图及其描述文档 229
8.4.2 建立状态图及其描述文档 231
8.4.3 建立协作图及其描述文档 232
8.4.4 建立活动图及其描述文档 233
8.5 “会议中心系统”的面向对象分析案例研究 234
8.5.1 建立功能模型——用例分析 235
8.5.2 建立静态模型——5层结构 235
8.5.3 建立动态模型——交互行为 238
8.6 本章小结 239
习题 240
第9章 面向对象设计 /?241
9.1 面向对象设计概述 241
9.1.1 面向对象分析与设计的关系 241
9.1.2 面向对象设计原则 242
9.2 精化类及类间关系 243
9.2.1 设计类的属性 243
9.2.2 设计类的方法 244
9.2.3 设计类间泛化关系 244
9.2.4 设计关联类 247
9.3 数据设计 247
9.3.1 基于关系数据库的数据设计 247
9.3.2 基于其他方式的数据设计 250
9.4 人机交互设计 250
9.5 建立实现模型 251
9.5.1 构件图及其描述文档 252
9.5.2 配置图及其描述文档 253
9.6 设计模式简介 255
9.6.1 概述 255
9.6.2 Singleton模式 256
9.6.3 Abstract Factory模式 257
9.6.4 Mediator模式 258
9.6.5 Adapter模式 261
9.6.6 Iterator模式 263
9.6.7 State模式 266
9.7 面向对象的测试 268
9.7.1 面向对象测试概述 268
9.7.2 面向对象的单元测试 269
9.7.3 基于过程的面向对象单元测试 273
9.8 本章小结 273
习题 274
第10章 软件维护 /?277
10.1 软件维护概述 277
10.1.1 软件维护的任务 277
10.1.2 软件维护的特点 278
10.1.3 软件维护的分类 278
10.2 软件维护过程 279
10.2.1 软件维护方式 280
10.2.2 软件维护管理的基本内容 281
10.2.3 维护中存在的问题 285
10.2.4 维护活动记录 286
10.3 软件的可维护性 287
10.3.1 可维护性因素 287
10.3.2 提高软件的可维护性 288
10.4 逆向工程 290
10.5 软件维护评审 292
10.5.1 软件维护规格说明文档 292
10.5.2 软件维护评审 295
10.6 本章小结 296
习题 297
第11章 软件项目管理 /?299
11.1 软件项目管理概述 299
11.1.1 软件项目管理的特点和内容 299
11.1.2 软件项目管理目标 300
11.1.3 软件项目管理的4P观点 301
11.2 软件项目规模度量 302
11.2.1 代码行技术 303
11.2.2 功能点计算 304
11.2.3 代码行与功能点间的转换 307
11.3 软件项目估算 308
11.3.1 代码行和功能点的其他估算模型 308
11.3.2 专家估算模型 308
11.3.3 Putnam模型 309
11.3.4 COCOMO模型 309
11.3.5 项目估算模型的小结 312
11.4 项目进度管理 312
11.4.1 项目进度控制 312
11.4.2 甘特图 313
11.4.3 工程网络图 314
11.5 项目风险管理 316
11.5.1 软件风险概念 316
11.5.2 风险管理过程 317
11.6 项目质量管理 320
11.6.1 软件质量因素 320
11.6.2 软件质量保证活动 324
11.6.3 软件质量保证计划 325
11.7 软件配置管理 327
11.7.1 软件配置项 327
11.7.2 配置管理过程 328
11.7.3 软件配置管理计划 331
11.8 项目人员组织管理 332
11.8.1 团队组织 332
11.8.2 团队组织方式 333
11.9 软件能力成熟度模型 335
11.9.1 基本概念 335
11.9.2 软件能力成熟度模型等级 336
11.9.3 关键过程域 337
11.10 本章小结 338
习题 339
参考文献 /?341
1.1.2 软件危机出现的原因 3
1.1.3 软件工程的发展 4
1.2 软件工程的概念 5
1.2.1 软件工程的定义 5
1.2.2 软件工程的目标 6
1.2.3 软件工程的实施原则 8
1.2.4 软件工程的基本原理 9 1.3 软件与软件过程 10 1.3.1 软件的概念 11
1.3.2 软件的分类 12
1.3.3 软件生命周期 13
1.4 软件过程模型 16
1.4.1 瀑布模型 16
1.4.2 原型模型 17
1.4.3 增量模型 18
1.4.4 螺旋模型 19
1.4.5 喷泉模型 20
1.4.6 敏捷过程模型 21
1.4.7 渐进交付迭代模型 23
1.4.8 微软解决框架过程模型 24
1.4.9 软件过程模型的比较 26
1.5 软件开发方法 26
1.5.1 结构化开发方法 27
1.5.2 面向对象开发方法 27
1.6 案例描述 28
1.6.1 简历信息自动获取和查询系统 28
1.6.2 试卷自动生成系统 29
1.7 本章小结 30
习题 31
第2章 软件需求工程 /?33
2.1 软件需求的基本概念 33
2.1.1 需求分析的任务 33
2.1.2 需求分析的原则 34
2.1.3 需求分析的内容 35
2.2 可行性分析 36
2.2.1 可行性分析的内容 36
2.2.2 系统流程图 38
2.3 需求工程的过程 39
2.3.1 需求工程中的参与人员 39
2.3.2 需求工程中的活动 40
2.3.3 需求工程的管理 41
2.4 需求获取技术 42
2.5 结构化需求分析和建模 45
2.5.1 结构化需求分析概述 45
2.5.2 面向数据的数据建模 45
2.5.3 面向数据流的功能建模 47
2.5.4 面向状态转换的行为建模 51
2.6 数据字典 54
2.6.1 数据字典的编写要求 54
2.6.2 数据字典的定义 55
2.7 案例——简历自动获取和查询系统的需求建模 56
2.7.1 数据建模——E-R图描述 56
2.7.2 功能建模——数据流图 57
2.7.3 行为建模——状态转换图 59
2.7.4 加工逻辑——PDL语言的描述 59
2.7.5 数据字典 59
2.8 需求评审 61
2.8.1 软件需求规格说明 61
2.8.2 需求评审标准及需求验证 64
2.8.3 需求变更管理 66
2.9 本章小结 67
习题 67
第3章 软件设计基础 /?70
3.1 软件设计概述 70
3.1.1 软件设计与软件需求 70
3.1.2 软件设计的任务 71
3.1.3 软件设计的原则 73
3.2 软件体系结构设计 74
3.2.1 体系结构设计概述 74
3.2.2 以数据为中心的数据仓库模型 74
3.2.3 客户端/服务器模式的分布式结构 75
3.2.4 层次模型 77
3.2.5 MVC模型 78
3.3 模块化设计 80
3.3.1 软件模块化与分解 80
3.3.2 抽象 81
3.3.3 信息隐藏 81
3.3.4 模块独立性 82
3.3.5 启发式规则 85
3.4 界面设计 88
3.4.1 界面设计的任务 88
3.4.2 界面设计的原则 89
3.4.3 界面设计的特性 90
3.5 软件设计评审 91
3.5.1 软件设计规格说明 91
3.5.2 软件设计评审标准 94
3.5.3 软件设计验证 96
3.6 本章小结 97
习题 98
第4章 结构化设计方法 /?99
4.1 结构化设计方法概述 99
4.2 面向数据流的设计方法 100
4.2.1 层次图和结构图 100
4.2.2 变换分析法 102
4.2.3 事务分析法 106
4.2.4 混合分析法 107
4.3 案例——简历自动获取和查询系统的数据流设计方法 108
4.3.1 用变换分析法进行设计 108
4.3.2 用事务分析法进行设计 109
4.3.3 两种方法的比较 111
4.4 结构化详细设计的工具 111
4.4.1 程序流程图 111
4.4.2 盒图 113
4.4.3 问题分析图 114
4.4.4 判定树 115
4.4.5 判定表 116
4.4.6 详细设计工具的比较 116
4.5 本章小结 117
习题 118
第5章 软件实现 /?120
5.1 程序设计语言 120
5.1.1 程序设计语言的分类 120
5.1.2 程序设计语言的特性 121
5.1.3 选择程序设计语言 122
5.2 程序设计风格 124
5.2.1 程序编排和组织的准则 124
5.2.2 程序设计的效率 128
5.3 代码重用 130
5.4 代码评审 131
5.5 本章小结 135
习题 135
第6章 软件测试 /?138
6.1 软件测试基础 138
6.1.1 软件测试概念 138
6.1.2 软件测试过程模型 139
6.1.3 软件测试原则 141
6.1.4 软件测试在软件开发各阶段的工作流程 143
6.1.5 软件测试信息流 145
6.1.6 软件测试技术分类 145
6.2 白盒测试 147
6.2.1 逻辑覆盖 147
6.2.2 循环测试 150
6.2.3 路径测试 152
6.3 黑盒测试 156
6.3.1 等价类划分 156
6.3.2 边界值分析 158
6.3.3 错误推测法 158
6.3.4 因果图法 159
6.4 白盒测试和黑盒测试的比较 161
6.4.1 应用角度的不同 161
6.4.2 白盒测试的优点与不足 162
6.4.3 黑盒测试的优点与不足 162
6.5 软件测试策略 162
6.5.1 单元测试 162
6.5.2 集成测试 165
6.5.3 确认测试 169
6.5.4 系统测试 170
6.6 调试 172
6.6.1 软件调试过程 172
6.6.2 软件调试方法 173
6.7 软件测试报告 174
6.7.1 软件测试说明 174
6.7.2 软件测试报告 176
6.8 本章小结 177
习题 177
第7章 统一建模语言UML /?180
7.1 UML的发展 180
7.1.1 UML的产生 180
7.1.2 UML的构成 181
7.1.3 UML的特点 182
7.2 面向对象的基本概念 182
7.3 UML视图 188
7.4 UML的图和模型元素 189
7.4.1 用例图 189
7.4.2 类图 191
7.4.3 包图 192
7.4.4 状态图 193
7.4.5 活动图 193
7.4.6 顺序图 195
7.4.7 协作图 196
7.4.8 构件图 197
7.4.9 配置图 198
7.5 UML的关系 198
7.5.1 关联关系 199
7.5.2 泛化关系 202
7.5.3 依赖关系 205
7.5.4 实现关系 206
7.6 UML的通用机制 206
7.6.1 修饰 206
7.6.2 注释 207
7.6.3 规格说明 207
7.6.4 扩展机制 207
7.7 基于UML的软件过程 209
7.8 本章小结 211
习题 211
第8章 面向对象分析 /?213
8.1 面向对象分析概述 213
8.1.1 传统软件过程中的不足 213
8.1.2 面向对象的特点 214
8.1.3 面向对象分析的基本过程 215
8.1.4 面向对象分析的3类模型 215
8.1.5 静态模型的5个层次 216
8.2 建立功能模型(用例模型) 217
8.2.1 识别参与者 218
8.2.2 识别用例 218
8.2.3 识别用例间关系 220
8.2.4 用例描述文档 221
8.3 建立静态模型(对象模型) 222
8.3.1 识别类与对象 222
8.3.2 划分主题 224
8.3.3 确定结构 225
8.3.4 确定属性 226
8.3.5 确定服务 226
8.3.6 类图描述文档 227
8.3.7 包图描述文档 228
8.4 建立动态模型 229
8.4.1 建立顺序图及其描述文档 229
8.4.2 建立状态图及其描述文档 231
8.4.3 建立协作图及其描述文档 232
8.4.4 建立活动图及其描述文档 233
8.5 “会议中心系统”的面向对象分析案例研究 234
8.5.1 建立功能模型——用例分析 235
8.5.2 建立静态模型——5层结构 235
8.5.3 建立动态模型——交互行为 238
8.6 本章小结 239
习题 240
第9章 面向对象设计 /?241
9.1 面向对象设计概述 241
9.1.1 面向对象分析与设计的关系 241
9.1.2 面向对象设计原则 242
9.2 精化类及类间关系 243
9.2.1 设计类的属性 243
9.2.2 设计类的方法 244
9.2.3 设计类间泛化关系 244
9.2.4 设计关联类 247
9.3 数据设计 247
9.3.1 基于关系数据库的数据设计 247
9.3.2 基于其他方式的数据设计 250
9.4 人机交互设计 250
9.5 建立实现模型 251
9.5.1 构件图及其描述文档 252
9.5.2 配置图及其描述文档 253
9.6 设计模式简介 255
9.6.1 概述 255
9.6.2 Singleton模式 256
9.6.3 Abstract Factory模式 257
9.6.4 Mediator模式 258
9.6.5 Adapter模式 261
9.6.6 Iterator模式 263
9.6.7 State模式 266
9.7 面向对象的测试 268
9.7.1 面向对象测试概述 268
9.7.2 面向对象的单元测试 269
9.7.3 基于过程的面向对象单元测试 273
9.8 本章小结 273
习题 274
第10章 软件维护 /?277
10.1 软件维护概述 277
10.1.1 软件维护的任务 277
10.1.2 软件维护的特点 278
10.1.3 软件维护的分类 278
10.2 软件维护过程 279
10.2.1 软件维护方式 280
10.2.2 软件维护管理的基本内容 281
10.2.3 维护中存在的问题 285
10.2.4 维护活动记录 286
10.3 软件的可维护性 287
10.3.1 可维护性因素 287
10.3.2 提高软件的可维护性 288
10.4 逆向工程 290
10.5 软件维护评审 292
10.5.1 软件维护规格说明文档 292
10.5.2 软件维护评审 295
10.6 本章小结 296
习题 297
第11章 软件项目管理 /?299
11.1 软件项目管理概述 299
11.1.1 软件项目管理的特点和内容 299
11.1.2 软件项目管理目标 300
11.1.3 软件项目管理的4P观点 301
11.2 软件项目规模度量 302
11.2.1 代码行技术 303
11.2.2 功能点计算 304
11.2.3 代码行与功能点间的转换 307
11.3 软件项目估算 308
11.3.1 代码行和功能点的其他估算模型 308
11.3.2 专家估算模型 308
11.3.3 Putnam模型 309
11.3.4 COCOMO模型 309
11.3.5 项目估算模型的小结 312
11.4 项目进度管理 312
11.4.1 项目进度控制 312
11.4.2 甘特图 313
11.4.3 工程网络图 314
11.5 项目风险管理 316
11.5.1 软件风险概念 316
11.5.2 风险管理过程 317
11.6 项目质量管理 320
11.6.1 软件质量因素 320
11.6.2 软件质量保证活动 324
11.6.3 软件质量保证计划 325
11.7 软件配置管理 327
11.7.1 软件配置项 327
11.7.2 配置管理过程 328
11.7.3 软件配置管理计划 331
11.8 项目人员组织管理 332
11.8.1 团队组织 332
11.8.2 团队组织方式 333
11.9 软件能力成熟度模型 335
11.9.1 基本概念 335
11.9.2 软件能力成熟度模型等级 336
11.9.3 关键过程域 337
11.10 本章小结 338
习题 339
参考文献 /?341
猜您喜欢