第1章 软件工程综述 1
1.1 什么是软件工程 1
1.2 软件有什么特点 2
1.2.1 软件特点 3
1.2.2 软件分类 4
1.3 为什么会发生软件危机 6
1.4 软件工程技术 8
1.4.1 软件过程 8
1.4.2 工程方法 9
1.4.3 软件工具 9
1.5 软件工程管理 10
1.5.1 项目计划 10
1.5.2 人员组织 10
1.5.3 过程管理 11
1.5.4 产品管理 11
1.5.5 工程目标 11
1.6 主流软件工程方法学 12
1.6.1 结构化方法学 12
1.6.2 面向对象方法学 12
1.7 常用软件工具 15
1.7.1 MicrosoftVisio 15
1.7.2 Sybase PowerDesigner 15
1.7.3 IBM Rational Rose 16
小结 17
习题 18
第2章 软件项目管理 19
2.1 软件研发团队 19
2.1.1 软件研发机构 19
2.1.2 软件项目小组 20
2.1.3 项目小组管理机制 21
2.2 软件项目计划 23
2.2.1 任务分配 23
2.2.2 进度计划 24
2.2.3 项目计划书 26
2.3 软件项目成本估算 26
2.3.1 程序代码行成本估算 27
2.3.2 软件功能点成本估算 28
2.3.3 基于软件过程的成本估算 31
2.4 软件项目风险 32
2.4.1 风险类别 32
2.4.2 风险识别 33
2.4.3 风险评估 34
2.4.4 风险防范 35
2.5 项目文档管理 36
2.5.1 文档概念 36
2.5.2 文档分类 37
2.5.3 软件文档与软件生命周期之间的关系 37
2.5.4 文档的使用者 38
2.5.5 文档编码 39
2.5.6 文档格式 39
2.6 项目配置管理 41
2.6.1 软件配置概念 41
2.6.2 配置规划 41
2.6.3 软件变更控制 43
2.6.4 软件版本控制 43
2.7 项目质量管理 44
2.7.1 质量标准 44
2.7.2 质量计划 45
2.7.3 质量保证 45
2.7.4 质量指标 46
小结 47
习题 48
第3章 软件工程过程模式 50
3.1 软件生存周期 50
3.1.1 软件定义期 50
3.1.2 软件开发期 51
3.1.3 软件运行与维护期 52
3.2 瀑布模式 53
3.2.1 瀑布模式的特点 53
3.2.2 瀑布模式中的信息反馈 54
3.2.3 瀑布模式的作用 55
3.3 原型进化模式 55
3.3.1 软件原型 55
3.3.2 原型进化过程 56
3.4 增量模式 57
3.4.1 增量开发过程 57
3.4.2 增量模式的优越性 57
3.5 螺旋模式 58
3.6 迭代模式 59
3.7 组件复用模式 60
小结 61
习题 62
第4章 计算机系统工程 63
4.1 计算机系统特征 63
4.2 计算机体系结构 64
4.2.1 主机结构 64
4.2.2 客户机/服务器结构 65
4.2.3 浏览器/服务器结构 65
4.3 系统前期分析 66
4.3.1 分析过程 67
4.3.2 系统结构建模 68
4.3.3 系统工作流建模 68
4.4 项目可行性分析 70
4.4.1 评估内容 71
4.4.2 评估报告 72
小结 73
习题 74
第5章 软件需求分析 75
5.1 需求分析任务 75
5.1.1 分析内容 75
5.1.2 分析过程 76
5.1.3 任务承担者 76
5.2 获取用户需求 77
5.2.1 识别用户 77
5.2.2 从调查中收集用户需求 79
5.2.3 建立需求规约 81
5.3 建立需求模型 82
5.3.1 业务域模型 83
5.3.2 业务流模型 83
5.4 定义与验证软件规格 84
5.4.1 软件规格定义 84
5.4.2 软件需求验证 85
5.4.3 通过原型验证用户需求 85
5.4.4 通过评审验证产品规格 86
5.5 需求规格说明书 86
小结 87
习题 88
第6章 软件概要设计 89
6.1 概要设计任务 89
6.1.1 基本任务 89
6.1.2 设计过程 90
6.2 系统构架设计 91
6.2.1 软件系统支持环境 91
6.2.2 软件系统体系结构 92
6.3 数据结构设计 96
6.3.1 动态程序数据 96
6.3.2 静态存储数据 96
6.4 程序结构设计 96
6.4.1 程序模块 97
6.4.2 模块独立性 99
6.4.3 结构化程序结构 103
6.4.4 面向对象程序结构 104
6.5 概要设计说明书 105
小结 107
习题 107
第7章 程序算法设计与编码 109
7.1 程序结构化流程控制 109
7.2 程序算法设计工具 110
7.2.1 程序流程图 110
7.2.2 NS图 110
7.2.3 PAD图 112
7.2.4 PDL语言 113
7.3 程序算法复杂度评估 114
7.3.1 程序算法复杂度 114
7.3.2 MeCabe方法 114
7.4 程序编码 116
7.4.1 编程语言 116
7.4.2 编程规范 118
7.4.3 程序运行效率 120
小结 121
习题 121
第8章 软件测试 123
8.1 测试目的、计划与方法 123
8.1.1 测试目的 123
8.1.2 测试计划 123
8.1.3 测试方法 124
8.2 测试任务 125
8.2.1 单元测试 125
8.2.2 集成测试 127
8.2.3 确认测试 129
8.3 测试用例 130
8.3.1 白盒测试用例设计 130
8.3.2 黑盒测试用例设计 132
8.4 面向对象程序测试 134
8.4.1 面向对象单元测试 134
8.4.2 面向对象集成测试 134
8.4.3 面向对象确认测试 135
8.5 程序调试 135
8.5.1 诊断方法 135
8.5.2 调试策略 136
8.6 测试工具 137
8.6.1 测试数据生成程序 137
8.6.2 动态分析程序 137
8.6.3 静态分析程序 137
小结 137
习题 138
第9章 软件维护与再工程 140
9.1 软件维护分类 140
9.2 软件可维护性 141
9.2.1 软件可维护性评估 141
9.2.2 如何提高软件的可维护性 141
9.3 软件维护实施 142
9.3.1 维护机构 142
9.3.2 维护过程 143
9.4 软件再工程 145
9.4.1 逆向工程 145
9.4.2 重构工程 146
9.4.3 正向工程 146
小结 146
习题 147
第10章 结构化分析建模 148
10.1 结构化分析 148
10.2 功能层级图 149
10.3 数据流图与功能建模 149
10.3.1 数据流图 149
10.3.2 数据流细化 151
10.3.3 功能建模 152
10.3.4 数据字典 154
10.4 状态转换图与行为建模 156
小结 158
习题 159
第11章 结构化设计建模 162
11.1 建模语言 162
11.1.1 程序结构图 162
11.1.2 HIPO图 163
11.1.3 框架伪码 164
11.2 基于数据流的程序结构映射 165
11.2.1 变换流映射 165
11.2.2 事务流映射 167
11.2.3 混合流映射 168
11.3 程序结构优化 170
11.4 设计举例 173
小结 179
习题 179
第12章 面向对象分析建模 181
12.1 面向对象工程方法 181
12.1.1 面向对象工程建模方法 181
12.1.2 UML建模语言 182
12.2 用例建模 185
12.2.1 图形元素 185
12.2.2 参与者关系 186
12.2.3 用例关系 186
12.2.4 用例建模举例 188
12.3 活动建模 190
12.3.1 图形元素 190
12.3.2 业务级活动建模 191
12.3.3 用例级活动建模 192
12.4 类分析建模 193
12.4.1 实体类 193
12.4.2 实体类关系 194
11.4.3 类分析建模举例 197
小结 198
习题 198
第13章 面向对象设计建模 200
13.1 面向对象设计方法 200
13.1.1 面向对象设计特点 200
13.1.2 基于UML的设计建模 202
13.2 逻辑结构设计 203
13.2.1 确定系统构架 203
13.2.2 设计类体 205
13.2.3 抽象类、接口及其用途 209
13.2.4 程序逻辑结构 212
13.3 动态过程设计 217
13.3.1 协作图 217
13.3.2 时序图 219
13.3.3 状态图 221
13.4 物理装配与部署 222
13.4.1 程序构件图 222
13.4.2 系统部署图 224
小结 226
习题 227
第14章 数据库分析与设计 229
14.1 数据库体系结构 229
14.1.1 基本体系结构 229
14.1.2 基于数据库服务器的数据库系统 231
14.1.3 数据库分布应用 232
14.1.4 SQL语言 232
14.2 数据库分析建模 233
14.2.1 实体关系图 233
14.2.2 基于工具的ER建模 234
14.2.3 商品订购数据建模举例 236
14.3 数据库结构设计 237
14.3.1 数据表 237
14.3.2 数据表关联 237
14.3.3 数据索引 238
14.3.4 数据完整性 239
14.3.5 数据表结构优化 240
14.4 数据库访问设计 240
14.4.1 数据视图 240
14.4.2 存储过程 241
14.4.3 数据事务 241
小结 242
习题 242
第15章 非主流工程方法 244
15.1 敏捷工程方法 244
15.1.1 敏捷价值观 244
15.1.2 敏捷工程法则 245
15.1.3 敏捷过程特点 245
15.1.4 敏捷设计原则 246
15.1.5 极限编程 246
15.1.6 自适应软件开发 247
15.1.7 动态系统开发方法 248
15.2 净室工程方法 248
15.2.1 工程策略 249
15.2.2 盒结构建模 249
15.2.3 程序正确性验证 251
15.3 Jackson程序设计方法 253
15.3.1 设计步骤 254
15.3.2 设计举例 255
15.4 Z语言形式化规格说明 258
15.4.1 Z语言特点 258
15.4.2 Z语言应用举例 259
小结 261
习题 262
第16章 “象棋对垒程序系统”工程案例 263
16.1 系统分析 263
16.1.1 基本需求说明 263
16.1.2 功能用例分析 263
16.1.3 任务活动分析 265
16.2 系统设计 266
16.2.1 系统构架设计 266
16.2.2 类结构设计 266
16.2.3 对象交互设计 268
16.2.4 棋局对垒界面设计 272
16.2.5 系统构件设计 273
16.3 程序框架清单 274
16.3.1 客户端程序 274
16.3.2 服务器程序 279
参考文献 281