第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 软件工程框架 6
1.2.3 软件生存周期 7
1.3 软件过程 7
1.3.1 软件生存周期过程 8
1.3.2 能力成熟度模型 11
1.3.3 能力成熟度模型集成 13
1.4 软件过程模型 16
1.4.1 瀑布模型 16
1.4.2 演化模型 17
1.4.3 增量模型 18
1.4.4 原型模型 18
1.4.5 螺旋模型 20
1.4.6 喷泉模型 21
1.4.7 基于构件的开发模型 21
1.4.8 形式化方法模型 22
1.5 CASE工具与环境 23
1.5.1 软件工具 23
1.5.2 软件开发环境 25
1.6 小结 26
习题 26
第2章 系统工程 27
2.1 基于计算机的系统 27
2.2 系统工程的任务 28
2.3 可行性分析 29
2.3.1 经济可行性 29
2.3.2 技术可行性 31
2.3.3 法律可行性 31
2.3.4 方案的选择和折衷 31
2.4 小结 32
习题 32
第3章 需求工程 33
3.1 需求工程概述 33
3.2 需求获取 35
3.2.1 软件需求 35
3.2.2 需求获取方法与策略 36
3.3 需求分析、协商与建模 40
3.3.1 需求分析原则 40
3.3.2 信息域 40
3.3.3 需求协商 41
3.3.4 需求建模 41
3.4 需求规约与验证 42
3.4.1 需求规约的原则 42
3.4.2 需求规约 42
3.4.3 需求验证 44
3.5 需求管理 44
3.6 小结 45
习题 45
第4章 设计工程 46
4.1 软件设计工程概述 46
4.2 软件设计原则 48
4.2.1 抽象与逐步求精 49
4.2.2 模块化 49
4.2.3 信息隐藏 50
4.2.4 功能独立 51
4.3 软件体系结构设计 53
4.3.1 体系结构发展过程 53
4.3.2 软件体系结构的风格 54
4.3.3 评估可选的体系结构 56
4.4 部件级设计技术 57
4.4.1 结构化程序设计方法 58
4.4.2 图形表示法 58
4.4.3 判定表 61
4.4.4 设计性语言PDL 62
4.5 设计规约与设计评审 63
4.5.1 设计规约 63
4.5.2 设计评审 64
4.6 小结 65
习题 65
第5章 结构化分析与设计 67
5.1 结构化分析方法概述 67
5.2 数据流图 69
5.2.1 数据流图的图形表示 69
5.2.2 分层数据流图的画法 72
5.3 分层数据流图的审查 76
5.3.1 分层数据流图的一致性和完整性 77
5.3.2 构造分层DFD时需要注意的问题 80
5.3.3 分解的程度 82
5.4 数据字典 82
5.4.1 字典条目的种类及描述符号 82
5.4.2 字典条目 83
5.4.3 字典条目实例 87
5.4.4 数据字典的实现 88
5.5 描述基本加工的小说明 88
5.5.1 结构化语言 89
5.5.2 判定表 90
5.5.3 判定树 91
5.6 结构化设计概述 91
5.6.1 结构图 92
5.6.2 启发式设计策略 94
5.6.3 结构化设计的步骤 96
5.7 数据流图到软件体系结构的映射 97
5.7.1 信息流 97
5.7.2 数据流图映射到结构图的步骤 98
5.7.3 变换分析 98
5.7.4 事务分析 101
5.7.5 分层DFD的映射 102
5.8 初始结构图的改进 104
5.8.1 结构图改进实例 104
5.8.2 结构图改进技巧 106
5.9 小结 108
习题 108
第6章 面向数据结构的分析与设计 110
6.1 JSP方法 110
6.1.1 数据结构与程序结构的表示 110
6.1.2 JSP方法的分析和设计步骤 114
6.2 JSD方法简介 118
6.3 小结 119
习题 119
第7章 面向对象方法基础 120
7.1 面向对象的基本概念 121
7.2 面向对象分析和设计过程 124
7.2.1 面向对象分析过程 124
7.2.2 面向对象设计过程 126
7.2.3 设计模式 128
7.3 UML概述 129
7.3.1 UML发展历史 129
7.3.2 UML简介 130
7.3.3 视图 131
7.3.4 图 133
7.4 小结 136
习题 136
第8章 面向对象建模 137
8.1 用况建模 137
8.1.1 用况建模步骤 137
8.1.2 确定执行者 138
8.1.3 确定用况 139
8.1.4 用况描述 140
8.1.5 用况图中的关系 142
8.1.6 案例说明 143
8.1.7 用况建模实例 144
8.2 静态建模 147
8.2.1 类图和对象图 148
8.2.2 CRC技术 148
8.2.3 类之间的关系 153
8.2.4 静态建模实例 161
8.3 动态建模 163
8.3.1 状态机图 163
8.3.2 活动图 170
8.3.3 顺序图 172
8.3.4 通信图 176
8.3.5 动态建模实例 178
8.4 物理体系结构建模 179
8.4.1 构件图 180
8.4.2 部署图 181
8.5 小结 182
习题 182
第9章 基于构件的软件开发 184
9.1 基于构件的软件开发概述 184
9.1.1 构件 184
9.1.2 基于构件的软件开发过程 187
9.1.3 CBSD对质量、生产率和成本的影响 189
9.2 建造可复用构件 190
9.2.1 对可复用构件的要求 190
9.2.2 创建领域构件的设计框架 191
9.2.3 可变性分析 191
9.2.4 可变性机制 192
9.3 应用系统工程 194
9.3.1 基于CBSD的应用系统分析和设计 194
9.3.2 构件的鉴定、特化和组装 195
9.4 构件的管理 196
9.4.1 构件的分类描述 196
9.4.2 构件库管理系统 197
9.5 小结 198
习题 198
第10章 敏捷软件开发 199
10.1 敏捷软件开发方法概述 199
10.1.1 敏捷宣言 199
10.1.2 精益思想 201
10.1.3 敏捷方法综述 202
10.2 Scrum方法 203
10.2.1 Scrum简介 203
10.2.2 Scrum团队 205
10.2.3 需求管理 205
10.2.4 基于时间盒的迭代 206
10.2.5 回顾会议 209
10.3 极限编程方法 210
10.3.1 极限编程简介 210
10.3.2 价值观和原则 211
10.3.3 实践 212
10.4 看板方法 217
10.4.1 看板方法简介 217
10.4.2 看板方法的规则 218
10.4.3 看板方法和Scrum的比较 219
10.5 小结 220
习题 220
第11章 人机界面设计 221
11.1 人的因素 221
11.1.1 人对感知过程的认识 221
11.1.2 用户的技能和行为方式 222
11.1.3 人体测量学对设计的影响 222
11.2 人机界面风格 224
11.3 人机界面分析与建模 227
11.3.1 人机界面设计过程 227
11.3.2 人机界面设计中涉及的模型 228
11.3.3 任务分析的途径与方法 228
11.4 界面设计活动 229
11.4.1 定义界面对象和动作 229
11.4.2 设计问题 230
11.4.3 黄金原则 231
11.5 实现工具 233
11.6 设计评估 233
11.7 小结 235
习题 235
第12章 程序设计语言和编码 236
12.1 程序设计语言 236
12.1.1 程序设计语言的基本成分 236
12.1.2 程序设计语言的特性 238
12.1.3 程序设计语言的分类 239
12.1.4 程序设计语言的选择 240
12.2 程序设计风格 241
12.2.1 源程序文档化 241
12.2.2 数据说明 244
12.2.3 语句结构 244
12.2.4 输入和输出 246
12.3 小结 246
习题 246
第13章 软件测试 247
13.1 软件测试基础 247
13.1.1 软件测试的目的 247
13.1.2 软件测试的基本原则 248
13.1.3 白盒测试和黑盒测试 249
13.2 白盒测试 249
13.2.1 逻辑覆盖测试 249
13.2.2 逻辑表达式错误敏感的测试 254
13.2.3 基本路径测试 255
13.2.4 数据流测试 257
13.2.5 循环测试 258
13.3 黑盒测试 259
13.3.1 等价类划分 259
13.3.2 边界值分析 262
13.3.3 比较测试 263
13.3.4 错误猜测 263
13.3.5 因果图 263
13.4 测试策略 267
13.4.1 V模型 267
13.4.2 单元测试 268
13.4.3 集成测试 269
13.4.4 确认测试 272
13.4.5 系统测试 273
13.5 面向对象测试 274
13.5.1 面向对象语境对测试的影响 274
13.5.2 面向对象测试策略 275
13.5.3 面向对象测试用例设计 276
13.6 测试完成标准 276
13.7 调试 277
13.7.1 调试过程 277
13.7.2 调试方法 277
13.7.3 纠正错误 278
13.8 小结 279
习题 279
第14章 Web工程 281
14.1 WebApp的属性和类型 281
14.1.1 WebApp的属性 281
14.1.2 WebApp的类型 283
14.2 Web工程过程 284
14.2.1 过程框架 284
14.2.2 改善框架 285
14.2.3 Web工程的最佳实践 285
14.2.4 方法和工具 285
14.3 WebApp建模 286
14.3.1 WebApp需求建模 286
14.3.2 WebApp设计建模 288
14.4 WebApp质量管理 293
14.4.1 WebApp质量维度 293
14.4.2 WebApp的测试 294
14.4.3 WebApp配置管理 295
14.5 小结 296
习题 296
第15章 软件维护与再工程 297
15.1 软件维护 297
15.1.1 软件维护的概念 297
15.1.2 软件维护的过程 300
15.1.3 软件可维护性 302
15.2 再工程技术 305
15.2.1 再工程的概念 305
15.2.2 业务过程再工程 305
15.2.3 软件再工程过程 306
15.2.4 逆向工程 308
15.3 小结 309
习题 309
第16章 软件项目管理 310
16.1 软件项目管理概述 310
16.1.1 软件项目管理的关注点 310
16.1.2 软件项目管理的内容 313
16.2 软件度量 316
16.2.1 面向规模的度量 317
16.2.2 面向功能的度量 318
16.2.3 软件质量模型 321
16.2.4 程序复杂性度量 327
16.2.5 软件可靠性度量 329
16.3 软件项目估算 330
16.3.1 代码行、功能点和工作量估算 330
16.3.2 IBM估算模型 331
16.3.3 CoCoMo模型 332
16.3.4 Putnam模型 334
16.3.5 软件可靠性估算 335
16.4 项目进度管理 336
16.4.1 人员与工作量之间的关系 337
16.4.2 任务的分解与并行 337
16.4.3 任务工作量的确定 338
16.4.4 进度安排 339
16.5 风险管理 344
16.5.1 风险标识 344
16.5.2 风险预测 345
16.5.3 风险评估 345
16.5.4 风险管理和监控 346
16.6 软件项目的组织 348
16.6.1 组织结构的模式 348
16.6.2 程序设计小组的组织形式 348
16.6.3 人员配备 350
16.7 软件质量管理 351
16.7.1 软件质量保证 352
16.7.2 软件评审 353
16.8 软件配置管理 355
16.8.1 软件配置管理的基本概念 355
16.8.2 软件配置管理的主要活动 356
16.9 小结 359
习题 359
词汇索引 361
参考文献 371