- 科学出版社
- 9787030730664
- 1版
- 467030
- 46258963-1
- 16开
- 2023-06
- 计算机类
- 本科
内容简介
本书本着理论联系实际、专业特色突出的原则,从传统方法学和面向对象方法学两个方面介绍软件工程的主要内容,使学生能够掌握计算机软件系统开发和维护的基本原理,提高综合应用所学知识的能力,提高分析问题、解决问题和实际的软件开发能力。全书共12章,系统讲述软件开发、维护和管理的工程化的概念、原理、方法和技术,主要内容包括软件工程的基本概念、可行性研究、需求分析、概要设计、详细设计、实现、维护等软件开发过程、原理、方法、规范以及软件项目管理的基本技术等,并力图通过案例贯穿两种方法学的相应章节。本书涵盖软件工程基础内容的各个方面,可作为计算机科学与技术、软件工程、信息安全等专业的本科生教材,也可供软件信息行业的工程技术人员参考。
目录
第1章 概论1
1.1 软件概述1
1.1.1 软件的定义1
1.1.2 软件的特点1
1.1.3 软件的分类2
1.2 软件危机3
1.2.1 软件发展阶段3
1.2.2 软件危机的背景、表现、原因及解决途径5
1.3 软件工程概述7
1.3.1 软件工程的定义7
1.3.2 软件工程的特点7
1.3.3 软件工程的基本原理8
1.3.4 软件工程的基本目标10
1.4 软件生命周期10
1.4.1 软件定义时期11
1.4.2 软件开发时期11
1.4.3 软件运行维护时期12
习题12
第2章 软件方法学与过程模型13
2.1 软件方法学13
2.1.1 传统方法学13
2.1.2 面向对象方法学13
2.2 软件过程模型14
2.2.1 传统方法学的过程模型14
2.2.2 面向对象方法学的过程模型19
2.2.3 其他过程模型21
习题23
第3章 可行性研究与需求分析25
3.1 可行性研究25
3.1.1 可行性研究的任务25
3.1.2 可行性研究过程26
3.1.3 系统流程图27
3.1.4 成本
效益分析29
3.2 需求分析32
3.2.1 需求分析概述32
3.2.2 需求获取的方法34
3.2.3 需求分析建模36
3.2.4 其他图形工具49
3.2.5 需求分析的过程和需求规格说明书50
3.2.6 验证软件需求51
习题53
第4章 概要设计54
4.1 设计过程54
4.1.1 设想供选择的方案54
4.1.2 选取合理的方案54
4.1.3 推荐最佳方案54
4.1.4 功能分解54
4.1.5 设计软件结构55
4.1.6 设计数据库55
4.1.7 制订测试计划55
4.1.8 书写文档56
4.1.9 审查和复审56
4.2 设计原理56
4.2.1 模块化56
4.2.2 抽象57
4.2.3 逐步求精57
4.2.4 信息隐藏和局部化58
4.2.5 模块独立58
4.3 启发规则61
4.3.1 改进软件结构,提高模块独立性61
4.3.2 模块规模应该适中61
4.3.3 深度、宽度、扇出和扇入都应适当62
4.3.4 模块的作用域应该在控制域之内62
4.3.5 力争降低模块接口的复杂程度62
4.3.6 设计单入口单出口的模块63
4.3.7 模块功能应该可以预测63
4.4 面向数据流的设计方法63
4.4.1 概念63
4.4.2 变换分析65
4.4.3 事务分析67
4.5 案例设计68
习题69
第5章 详细设计70
5.1 详细设计的任务70
5.1.1 确定每个模块的具体算法70
5.1.2 确定每个模块的内部数据结构及数据库的物理结构70
5.1.3 确定模块接口的具体细节70
5.1.4 编写文档,进行复审70
5.2 人机界面设计71
5.2.1 设计问题与设计过程71
5.2.2 人机界面设计指南72
5.3 过程设计的工具与结构程序设计73
5.3.1 过程设计的工具73
5.3.2 结构程序设计78
5.4 面向数据结构的设计方法79
5.5 程序复杂程度的定量度量——McCa
e方法82
习题85
第6章 实现87
6.1 编码87
6.1.1 选择适宜的程序设计语言87
6.1.2 遵循合理的编码风格88
6.2 软件测试基础90
6.2.1 测试的目标90
6.2.2 测试问题和测试准则90
6.2.3 测试方法92
6.2.4 测试步骤93
6.2.5 测试阶段的信息流93
6.3 单元测试94
6.3.1 测试重点94
6.3.2 代码审查95
6.4 集成测试95
6.4.1 非渐增式测试95
6.4.2 渐增式测试96
6.5 验收测试97
6.5.1 验收测试的范围98
6.5.2 Alpha和
eta测试98
6.6 白盒测试技术98
6.6.1 逻辑覆盖98
6.6.2 控制结构测试——基本路径测试101
6.7 黑盒测试技术103
6.7.1 等价划分法103
6.7.2 边界值分析法105
6.7.3 错误推测法105
6.8 调试106
6.8.1 调试过程106
6.8.2 调试途径107
6.9 软件可靠性107
6.9.1 基本概念107
6.9.2 估算平均无故障时间的方法108
习题109
第7章 维护110
7.1 软件维护概述110
7.1.1 软件维护的定义110
7.1.2 软件维护的类型110
7.1.3 软件维护的特点111
7.2 软件的可维护性112
7.2.1 软件可维护性定义112
7.2.2 决定软件可维护性的因素112
7.3 软件维护过程113
7.3.1 维护组织113
7.3.2 维护报告113
7.3.3 维护的事件流114
7.3.4 保存维护记录115
7.3.5 评价维护活动115
7.4 预防性维护115
7.4.1 老程序修改方法115
7.4.2 开发新程序的必要性116
7.5 软件再工程过程116
7.5.1 库存目录分析117
7.5.2 文档重构117
7.5.3 逆向工程117
7.5.4 代码重构117
7.5.5 数据重构118
7.5.6 正向工程118
习题118
第8章 面向对象方法学119
8.1 面向对象方法学概述119
8.1.1 面向对象方法学的要点119
8.1.2 面向对象方法学的优点120
8.2 面向对象的概念122
8.2.1 对象122
8.2.2 其他概念123
8.3 面向对象建模124
8.3.1 对象模型124
8.3.2 动态模型130
8.3.3 功能模型131
8.3.4 三种模型之间的关系131
习题131
第9章 面向对象分析132
9.1 面向对象分析的基本过程132
9.1.1 概述132
9.1.2 三个子模型与五个层次133
9.2 建立功能模型134
9.2.1 需求陈述134
9.2.2 书写要点134
9.2.3 需求陈述示例134
9.2.4 建立用例图135
9.3 建立对象模型140
9.3.1 确定类141
9.3.2 确定关联143
9.3.3 划分主题与确定属性147
9.3.4 识别继承关系148
9.3.5 反复修改149
9.4 建立动态模型150
9.4.1 画顺序图150
9.4.2 画状态图153
9.4.3 审查动态模型154
9.5 定义服务155
9.5.1 常规行为155
9.5.2 从事件导出的操作155
习题155
第10章 面向对象设计157
10.1 基本设计概念157
10.1.1 对象与类的设计157
10.1.2 基于重用的设计159
10.2 类继承与对象组合160
10.2.1 定义160
10.2.2 优缺点161
10.3 可替代性162
10.3.1 定义162
10.3.2 用途163
10.4 迪米特法则163
10.5 依赖倒置164
10.6 面向对象设计模式165
10.6.1 模板方法模式167
10.6.2 工厂方法模式168
10.6.3 策略模式168
10.6.4 装饰器模式169
10.6.5 观察者模式170
10.6.6 复合模式170
10.6.7 访客模式171
习题173
第11章 面向对象实现175
11.1 编程过程175
11.1.1 编程就是解决问题175
11.1.2 极限编程176
11.1.3 结对编程176
11.2 信息系统示例177
11.2.1 按值传递177
11.2.2 指针传递178
11.2.3 引用传递178
11.3 实时系统示例178
11.4 测试面向对象系统179
11.4.1 测试代码179
11.4.2 面向对象测试与传统测试的区别180
习题181
第12章 软件项目管理182
12.1 软件规模估算183
12.1.1 代码行估算技术183
12.1.2 功能点估算技术184
12.2 软件工作量估算187
12.2.1 工作量估算定义187
12.2.2 项目工作量估算方法187
12.2.3 基于工作分解结构的工作量估算191
12.3 软件进度计划191
12.3.1 甘特图191
12.3.2 工程网络192
12.3.3 估算工程进度193
12.4 软件质量管理194
12.4.1 软件质量因素194
12.4.2 软件质量保证方法195
12.5 软件配置管理196
12.5.1 基本概念197
12.5.2 软件配置过程197
12.6 软件项目人员管理199
12.6.1 团队组织199
12.6.2 小组结构的选择202
12.7 软件能力成熟度模型202
12.7.1 基本概念202
12.7.2 CMM成熟度等级203
12.7.3 关键过程域206
习题206
参考文献208
1.1 软件概述1
1.1.1 软件的定义1
1.1.2 软件的特点1
1.1.3 软件的分类2
1.2 软件危机3
1.2.1 软件发展阶段3
1.2.2 软件危机的背景、表现、原因及解决途径5
1.3 软件工程概述7
1.3.1 软件工程的定义7
1.3.2 软件工程的特点7
1.3.3 软件工程的基本原理8
1.3.4 软件工程的基本目标10
1.4 软件生命周期10
1.4.1 软件定义时期11
1.4.2 软件开发时期11
1.4.3 软件运行维护时期12
习题12
第2章 软件方法学与过程模型13
2.1 软件方法学13
2.1.1 传统方法学13
2.1.2 面向对象方法学13
2.2 软件过程模型14
2.2.1 传统方法学的过程模型14
2.2.2 面向对象方法学的过程模型19
2.2.3 其他过程模型21
习题23
第3章 可行性研究与需求分析25
3.1 可行性研究25
3.1.1 可行性研究的任务25
3.1.2 可行性研究过程26
3.1.3 系统流程图27
3.1.4 成本
效益分析29
3.2 需求分析32
3.2.1 需求分析概述32
3.2.2 需求获取的方法34
3.2.3 需求分析建模36
3.2.4 其他图形工具49
3.2.5 需求分析的过程和需求规格说明书50
3.2.6 验证软件需求51
习题53
第4章 概要设计54
4.1 设计过程54
4.1.1 设想供选择的方案54
4.1.2 选取合理的方案54
4.1.3 推荐最佳方案54
4.1.4 功能分解54
4.1.5 设计软件结构55
4.1.6 设计数据库55
4.1.7 制订测试计划55
4.1.8 书写文档56
4.1.9 审查和复审56
4.2 设计原理56
4.2.1 模块化56
4.2.2 抽象57
4.2.3 逐步求精57
4.2.4 信息隐藏和局部化58
4.2.5 模块独立58
4.3 启发规则61
4.3.1 改进软件结构,提高模块独立性61
4.3.2 模块规模应该适中61
4.3.3 深度、宽度、扇出和扇入都应适当62
4.3.4 模块的作用域应该在控制域之内62
4.3.5 力争降低模块接口的复杂程度62
4.3.6 设计单入口单出口的模块63
4.3.7 模块功能应该可以预测63
4.4 面向数据流的设计方法63
4.4.1 概念63
4.4.2 变换分析65
4.4.3 事务分析67
4.5 案例设计68
习题69
第5章 详细设计70
5.1 详细设计的任务70
5.1.1 确定每个模块的具体算法70
5.1.2 确定每个模块的内部数据结构及数据库的物理结构70
5.1.3 确定模块接口的具体细节70
5.1.4 编写文档,进行复审70
5.2 人机界面设计71
5.2.1 设计问题与设计过程71
5.2.2 人机界面设计指南72
5.3 过程设计的工具与结构程序设计73
5.3.1 过程设计的工具73
5.3.2 结构程序设计78
5.4 面向数据结构的设计方法79
5.5 程序复杂程度的定量度量——McCa
e方法82
习题85
第6章 实现87
6.1 编码87
6.1.1 选择适宜的程序设计语言87
6.1.2 遵循合理的编码风格88
6.2 软件测试基础90
6.2.1 测试的目标90
6.2.2 测试问题和测试准则90
6.2.3 测试方法92
6.2.4 测试步骤93
6.2.5 测试阶段的信息流93
6.3 单元测试94
6.3.1 测试重点94
6.3.2 代码审查95
6.4 集成测试95
6.4.1 非渐增式测试95
6.4.2 渐增式测试96
6.5 验收测试97
6.5.1 验收测试的范围98
6.5.2 Alpha和
eta测试98
6.6 白盒测试技术98
6.6.1 逻辑覆盖98
6.6.2 控制结构测试——基本路径测试101
6.7 黑盒测试技术103
6.7.1 等价划分法103
6.7.2 边界值分析法105
6.7.3 错误推测法105
6.8 调试106
6.8.1 调试过程106
6.8.2 调试途径107
6.9 软件可靠性107
6.9.1 基本概念107
6.9.2 估算平均无故障时间的方法108
习题109
第7章 维护110
7.1 软件维护概述110
7.1.1 软件维护的定义110
7.1.2 软件维护的类型110
7.1.3 软件维护的特点111
7.2 软件的可维护性112
7.2.1 软件可维护性定义112
7.2.2 决定软件可维护性的因素112
7.3 软件维护过程113
7.3.1 维护组织113
7.3.2 维护报告113
7.3.3 维护的事件流114
7.3.4 保存维护记录115
7.3.5 评价维护活动115
7.4 预防性维护115
7.4.1 老程序修改方法115
7.4.2 开发新程序的必要性116
7.5 软件再工程过程116
7.5.1 库存目录分析117
7.5.2 文档重构117
7.5.3 逆向工程117
7.5.4 代码重构117
7.5.5 数据重构118
7.5.6 正向工程118
习题118
第8章 面向对象方法学119
8.1 面向对象方法学概述119
8.1.1 面向对象方法学的要点119
8.1.2 面向对象方法学的优点120
8.2 面向对象的概念122
8.2.1 对象122
8.2.2 其他概念123
8.3 面向对象建模124
8.3.1 对象模型124
8.3.2 动态模型130
8.3.3 功能模型131
8.3.4 三种模型之间的关系131
习题131
第9章 面向对象分析132
9.1 面向对象分析的基本过程132
9.1.1 概述132
9.1.2 三个子模型与五个层次133
9.2 建立功能模型134
9.2.1 需求陈述134
9.2.2 书写要点134
9.2.3 需求陈述示例134
9.2.4 建立用例图135
9.3 建立对象模型140
9.3.1 确定类141
9.3.2 确定关联143
9.3.3 划分主题与确定属性147
9.3.4 识别继承关系148
9.3.5 反复修改149
9.4 建立动态模型150
9.4.1 画顺序图150
9.4.2 画状态图153
9.4.3 审查动态模型154
9.5 定义服务155
9.5.1 常规行为155
9.5.2 从事件导出的操作155
习题155
第10章 面向对象设计157
10.1 基本设计概念157
10.1.1 对象与类的设计157
10.1.2 基于重用的设计159
10.2 类继承与对象组合160
10.2.1 定义160
10.2.2 优缺点161
10.3 可替代性162
10.3.1 定义162
10.3.2 用途163
10.4 迪米特法则163
10.5 依赖倒置164
10.6 面向对象设计模式165
10.6.1 模板方法模式167
10.6.2 工厂方法模式168
10.6.3 策略模式168
10.6.4 装饰器模式169
10.6.5 观察者模式170
10.6.6 复合模式170
10.6.7 访客模式171
习题173
第11章 面向对象实现175
11.1 编程过程175
11.1.1 编程就是解决问题175
11.1.2 极限编程176
11.1.3 结对编程176
11.2 信息系统示例177
11.2.1 按值传递177
11.2.2 指针传递178
11.2.3 引用传递178
11.3 实时系统示例178
11.4 测试面向对象系统179
11.4.1 测试代码179
11.4.2 面向对象测试与传统测试的区别180
习题181
第12章 软件项目管理182
12.1 软件规模估算183
12.1.1 代码行估算技术183
12.1.2 功能点估算技术184
12.2 软件工作量估算187
12.2.1 工作量估算定义187
12.2.2 项目工作量估算方法187
12.2.3 基于工作分解结构的工作量估算191
12.3 软件进度计划191
12.3.1 甘特图191
12.3.2 工程网络192
12.3.3 估算工程进度193
12.4 软件质量管理194
12.4.1 软件质量因素194
12.4.2 软件质量保证方法195
12.5 软件配置管理196
12.5.1 基本概念197
12.5.2 软件配置过程197
12.6 软件项目人员管理199
12.6.1 团队组织199
12.6.2 小组结构的选择202
12.7 软件能力成熟度模型202
12.7.1 基本概念202
12.7.2 CMM成熟度等级203
12.7.3 关键过程域206
习题206
参考文献208