基础篇 2
第1章 概论 2
1.1 软件危机 3
1.1.1 摩尔定律和超越摩尔 3
1.1.2 软件危机的介绍 4
1.1.3 产生软件危机的原因 5
1.1.4 消除软件危机的途径 6
1.2 软件开发工程化 7
1.2.1 软件工程的定义 7
1.2.2 软件开发的发展过程 8
1.2.3 软件工程的基本原理 10
1.3 软件工程产品分类及来源 11
1.3.1 软件工程产品分类 11
1.3.2 软件工程项目来源 12
1.4 软件生命周期 13
1.4.1 软件生命周期的定义 13
1.4.2 软件生命周期的阶段 14
1.5 软件工程方法学 16
1.5.1 软件工程方法学的定义 16
1.5.2 软件工程方法学的类型 16
1.6 软件工程人员的业务素质和职业道德 19
1.6.1 软件工程师的业务素质 20
1.6.2 软件工程师的职业道德规范 20
1.6.3 软件工程师职业实践的准则 21
1.6.4 软件工程师职业实践的国际标准 22
本章小结 23
习题 23
第2章 软件过程与模型 25
2.1 软件过程 25
2.1.1 软件过程的定义 25
2.1.2 软件过程的特点 25
2.1.3 软件过程的分类 26
2.1.4 软件过程的作用 26
2.1.5 软件过程模型化 26
2.2 瀑布模型 26
2.2.1 瀑布模型的基本思想 26
2.2.2 瀑布模型的特点 28
2.2.3 瀑布模型的应用范围 30
2.3 快速原型法 30
2.3.1 快速原型法的基本思想 30
2.3.2 快速模型的特点 31
2.3.3 快速原型法的应用范围 32
2.4 增量模型 32
2.4.1 增量模型的基本思想 32
2.4.2 增量模型的特点 32
2.4.3 增量模型应用范围 33
2.5 螺旋模型 33
2.5.1 螺旋模型的基本思想 33
2.5.2 螺旋模型的特点 35
2.5.3 螺旋模型的应用范围 35
2.6 V模型 35
2.6.1 V模型的基本思想 35
2.6.2 V模型的特点 36
2.6.3 V模型的应用范围 36
2.7 敏捷软件开发 36
2.7.1 敏捷开发的基本思想 36
2.7.2 敏捷开发的特点 37
2.7.3 敏捷开发的应用范围 38
本章小结 38
习题 38
第3章 软件计划与可行性研究 40
3.1 问题定义 40
3.2 软件规模估算 41
3.2.1 软件估算的概念 41
3.2.2 软件估算的方法 41
3.3 可行性研究 43
3.3.1 可行性研究的概念 43
3.3.2 可行性研究的分类 44
3.3.3 可行性研究的步骤 45
3.4 软件项目计划 47
3.4.1 软件范围 47
3.4.2 环境资源 47
3.4.3 制定进度表 48
3.5 系统流程图 48
3.5.1 系统流程图的定义 48
3.5.2 系统流程图的符号表示 48
3.5.3 应用实例 49
3.6 其他补充说明 50
本章小结 51
习题 51
第4章 软件需求分析 53
4.1 软件需求的定义 53
4.2 需求分析的层次内容 54
4.3 需求分析的任务 55
4.3.1 确定项目的范围 55
4.3.2 确定具体需求 56
4.3.3 软件需求文档化 56
4.4 需求获取的方法 57
4.4.1 用户沟通交流法 57
4.4.2 工具分析法 59
4.4.3 模型及语言描述法 61
4.4.4 原型化方法 62
4.5 需求分析的步骤 64
4.6 数据流图 66
4.6.1 数据流图的定义 66
4.6.2 数据流图的符号表示 66
4.6.3 数据流图的绘制方法 67
4.6.4 银行储蓄系统应用实例 68
4.6.5 毕业生就业管理系统应用实例 70
4.7 数据字典 72
4.7.1 数据字典的定义 72
4.7.2 基本符号 72
4.7.3 互联网+电商销售应用实例 73
4.8 实体-联系图 74
4.8.1 实体-联系图的定义 74
4.8.2 实体-联系图的符号表示 75
4.8.3 应用实例 75
4.9 状态转换图 76
4.9.1 状态转换图的定义 76
4.9.2 状态转换图的符号表示 76
4.9.3 人体运动捕捉系统应用实例 77
4.9.4 电话系统行为过程应用实例 77
4.10 UML用例需求模型 78
4.10.1 UML基本概念 78
4.10.2 UML主要内容 78
4.10.3 用例需求功能模型 79
4.11 需求变更管理 81
4.11.1 控制项目范围的扩展 81
4.11.2 变更控制过程 82
4.11.3 变更控制委员会 84
4.11.4 度量变更活动 85
本章小结 85
习题 85
第5章 软件总体设计 87
5.1 软件总体设计阶段的任务 87
5.2 软件总体设计基本思想 88
5.2.1 雪球理论 88
5.2.2 模块化 88
5.2.3 抽象 89
5.2.4 逐步求精 91
5.2.5 信息隐藏和局部化 91
5.2.6 模块独立内聚和耦合 91
5.2.7 软件结构设计的启发式规则 93
5.3 总体设计阶段的工作步骤 96
5.3.1 总体设计阶段组成 96
5.3.2 总体设计步骤 96
5.4 系统设计阶段 97
5.4.1 二维码的食品安全追溯系统问题描述 97
5.4.2 二维码的食品安全追溯系统分析 98
5.4.3 二维码的食品安全追溯系统设计 99
5.5 软件结构设计工具 100
5.5.1 层次图定义及实例 100
5.5.2 结构图定义及实例 101
5.6 面向数据流的设计万法 103
5.6.1 定义 103
5.6.2 数据流图的类型 103
5.6.3 设计步骤 104
5.6.4 汽车数字仪表板实例 107
本章小结 110
习题 110
第6章 人机交互设计 112
6.1 人机交互基本概念 112
6.1.1 人机交互的定义 112
6.1.2 人机交互的研究内容 112
6.2 人机交互感知和认知基础 113
6.2.1 视觉感知 113
6.2.2 颜色模型 116
6.2.3 听觉感知 118
6.2.4 触觉感知 120
6.3 人机交互发展阶段 120
6.4 传统交互设备 121
6.5 可穿戴计算技术与设备 121
6.6 人机界面设计基础 122
6.6.1 人机界面设计的定义 122
6.6.2 理解用户 123
6.7 界面设计原则 125
6.7.1 图形用户界面的主要思想 125
6.7.2 图形用户界面的一般原则 127
6.8 Web界面设计 128
6.8.1 Web界面及相关概念 128
6.8.2 Web界面设计原则 128
6.8.3 Web风格与布局色彩设计 129
6.8.4 Web文本设计 130
本章小结 131
习题 131
第7章 软件详细设计 132
7.1 详细设计阶段的目的和任务 132
7.1.1 详细设计阶段的目的 132
7.1.2 详细设计阶段的任务 132
7.2 结构化程序设计与程序设计风格 133
7.2.1 结构化程序设计 133
7.2.2 程序设计的风格 134
7.3 常用的详细设计表达工具 135
7.3.1 程序流程图 135
7.3.2 盒图 136
7.3.3 PAD图 137
7.3.4 决策树 138
7.3.5 决策表 139
7.3.6 PDL设计语言 140
7.4 程序复杂度的定量计算 141
7.4.1 McCabe方法 141
7.4.2 Halstead万法 142
本章小结 143
习题 143
第8章 软件编码 145
8.1 程序设计语言 145
8.1.1 程序设计语言的定义 145
8.1.2 程序设计语言的特性 145
8.1.3 程序设计语言的分类 146
8.2 程序设计语言的选择 147
8.2.1 程序设计语言选择标准 148
8.2.2 程序设计风格 149
本章小结 150
习题 150
第9章 软件测试 151
9.1 软件测试基础 151
9.1.1 软件测试的定义 151
9.1.2 软件测试的目标 151
9.1.3 软件测试的内容 152
9.1.4 软件测试的心理依据 152
9.1.5 软件测试的发展史 154
9.1.6 软件测试典型案例 155
9.2 软件测试的原理与特点 157
9.2.1 软件测试的原理 157
9.2.2 软件测试的特点 158
9.3 软件测试的基本方法 158
9.3.1 人工测试和机器测试 158
9.3.2 白盒测试、黑盒测试和灰盒测试 159
9.3.3 Alpha测试和Beta测试 159
9.4 软件测试的过程和步骤 160
9.4.1 软件测试的过程 160
9.4.2 软件测试的步骤 160
9.4.3 回归测试 164
9.5 黑盒测试技术 164
9.5.1 黑盒测试方法概述 164
9.5.2 划分等价类 165
9.5.3 边界值分析法 165
9.5.4 错误推测法 166
9.6 白盒测试技术 166
9.6.1 白盒测试的方法 166
9.6.2 白盒测试的优缺点 167
9.7 软件可靠性与可用性 167
9.8 软件压力测试 168
9.9 软件容量测试 169
本章小结 169
习题 170
第10章 软件维护与再工程 171
10.1 软件维护 171
10.1.1 软件维护的定义 171
10.1.2 结构化维护与非结构化维护 172
10.1.3 软件可维护性因素 173
10.1.4 软件文档 174
10.2 软件再工程 175
10.2.1 软件再工程概念 175
10.2.2 软件再工程方法 175
10.3 逆向工程 176
10.4 软件复用 176
10.5 领域工程 178
10.6 构件技术 179
本章小结 181
习题 181
高级篇 184
第11章 软件形式化方法 184
11.1 形式化方法 184
11.1.1 形式化方法的概念 184
11.1.2 形式化方法的分类 185
11.2 Petri网形式化理论 185
11.2.1 Petri网形式化介绍 185
11.2.2 Petri网数学定义 187
11.3 电梯问题Petri网求解 188
11.4 就餐问题Petri网求解 190
本章小结 200
习题 200
第12章 软件设计模式 201
12.1 设计模式概述 201
12.1.1 设计模式的基本概念 201
12.1.2 设计模式要素 201
12.2 设计模式的原则和策略 202
12.3 设计模式的类型 202
12.4 设计模式的优点 204
本章小结 204
习题 204
第13章 极限编程 205
13.1 极限编程基础 205
13.1.1 极限编程的定义 205
13.1.2 极限编程核心价值 206
13.2 极限编程设计原则 206
13.3 极限设计开发环节 208
本章小结 209
习题 209
第14章 大数据与面向服务的软件 210
14.1 大数据基础 210
14.1.1 大数据的定义 210
14.1.2 大数据与云计算 211
14.2 云计算 211
14.2.1 云计算的定义 211
14.2.2 云计算的特点 211
14.2.3 云计算的服务形式 212
14.3 面向服务的SOA架构 213
14.3.1 SOA定义 213
14.3.2 SOA的特点 214
14.4 面向服务的软件工程 214
14.4.1 面向服务计算 214
14.4.2 面向服务的软件工程 215
14.4.3 大数据时代下的软件服务工程 215
本章小结 216
习题 216
第15章 软件项目管理 217
15.1 软件项目管理基础 217
15.1.1 软件管理的定义 217
15.1.2 软件管理的内容 218
15.1.3 组织机构 220
15.1.4 项目管理沟通原则 220
15.2 软件项目风险管理 221
15.2.1 风险管理基础知识 221
15.2.2 软件风险管理 221
15.2.3 软件风险类型 222
15.3 文档管理 223
15.3.1 文档管理概述 223
15.3.2 文档管理控制方法 225
15.4 软件质量管理 226
15.4.1 ISO与ISO 9000标准族 226
15.4.2 ISO 9001质量管理体系 227
15.4.3 CMM与CMMI概述 228
15.4.4 CMM等级概述 229
本章小结 231
习题 231
第16章 合同管理 232
16.1 合同管理的定义 232
16.2 合同管理的要件 233
16.2.1 合同的实质要件 233
16.2.2 合同的形式要件 235
16.3 合同的订立 235
16.4 合同的履行 237
16.4.1 合同未尽事宜的确定 237
16.4.2 合同履行过程中的变动 238
16.5 合同的变更 238
16.6 合同的终止 239
16.7 违约责任 239
16.8 合同管理的其他注意事项 240
本章小结 240
习题 240
案例篇 242
第17章 项目实例——在线订餐系统的实现 242
17.1 项目背景说明 242
17.1.1 项目问题描述 243
17.1.2 目的及意义 243
17.2 开发技术 243
17.2.1 B/S模式 243
17.2.2 JSP技术 244
17.2.3 MySQL数据库 245
17.2.4 MVC模式 245
17.2.5 相似图像搜索算法 246
17.3 可行性分析 246
17.3.1 技术可行性分析 247
17.3.2 经济可行性分析 247
17.3.3 社会可行性分析 247
17.4 需求分析 247
17.4.1 业务需求分析 247
17.4.2 用尸需求分析 248
17.4.3 功能需求分析 248
17.4.4 非功能需求分析 249
17.5 系统概要设计 249
17.5.1 在线订餐系统的架构设计 249
17.5.2 在线订餐系统的功能模块设计 250
17.5.3 在线订餐系统的流程图设计 250
17.5.4 在线订餐系统的数据库设计 252
17.6 系统详细设计 254
17.6.1 用户模块的功能实现 254
17.6.2 餐厅菜品显示模块 266
17.6.3 用户购物车模块 270
17.6.4 以图搜索模块 279
17.6.5 文字搜索模块 284
17.6.6 用户分享模块 286
17.6.7 用户订单模块 286
17.6.8 在线支付模块 292
17.6.9 收藏模块 298
17.6.10 店家模块的功能实现 299
17.6.11 菜品管理模块 309
17.6.12 店家订单管理模块 314
17.7 系统测试 316
附录A 软件工程师职业实践的国际标准 319
附录B 软件工程术语和定义 324
附录C 软件工程缩略语 328
附录D 计算机软件文档编制规范 330
参考文献 385