第一部分 绪论 3
第1章 需求工程导论 3
1.1 软件生产中的需求问题 3
1.1.1 需求问题是当前软件开发面临的主要问题 3
1.1.2 软件的模拟特性 6
1.1.3 需求问题具体原因分析 9
1.2 需求工程 11
1.2.1 需求工程简介 12
1.2.2 需求工程与系统工程 13
1.2.3 需求工程的重要性 14
1.2.4 需求工程的复杂性 16
1.3 需求工程师 17
引用文献 20
第2章 需求基础 23
2.1 需求的定义 23
2.2 满足需求就是解决问题 23
2.2.1 问题与需求 23
2.2.2 问题解决的两个方面——问题域与解系统 24
2.2.3 问题解决的基础——模拟与共享现象 26
2.2.4 问题解决的方法——直接与间接 27
2.2.5 问题解决方案——需求规格说明 28
2.2.6 问题解决的困难性 28
2.3 需求和问题都有层次性 28
2.3.1 战略问题与业务需求 29
2.3.2 任务问题与用户需求 30
2.3.3 系统行为问题与系统级需求 31
2.3.4 需求开发要遵从层次性 33
2.4 需求的分类与表述 33
2.4.1 需求的分类 33
2.4.2 功能需求 35
2.4.3 性能需求 36
2.4.4 质量属性 36
2.4.5 对外接口 41
2.4.6 约束 43
2.4.7 其他需求 44
2.5 优秀需求的特性 44
引用文献 49
第3章 需求工程过程 52
3.1 概述 52
3.2 需求工程活动 54
3.2.1 需求获取 54
3.2.2 需求分析 56
3.2.2 需求规格说明 58
3.2.4 需求验证 58
3.2.5 需求管理 59
3.3 需求开发过程是迭代和并发的 60
3.4 实践方法的应用 62
3.4.1 细节知识的实践性 62
3.4.2 重要的实践方法 63
3.5 需求开发过程实例 65
3.6 需求开发过程与软件工程过程的相互影响 70
引用文献 71
第二部分 需求获 75
第4章 需求获取概述 75
4.1 引言 75
4.2 需求获取中的常见困难 75
4.2.1 用户和开发人员的背景不同,立场不同 75
4.2.2 普通用户缺乏概括性、综合性的表述能力 76
4.2.3 用户存在认知困境 76
4.2.4 用户越俎代庖 77
4.2.5 缺乏用户参与 78
4.3 需求获取活动 79
4.4 获取信息的内容 80
4.5 获取信息的来源 81
4.6 获取信息的方法 81
4.7 获取信息的过程 82
4.7.1 注意事项 82
4.7.2 防止遗漏需求 83
4.7.3 结束获取 83
4.8 获取信息的成果 84
4.9 实践中的需求获取 84
4.9.1 项目目标 84
4.9.2 项目范围 85
4.9.3 用户参与 86
4.9.4 交流问题 89
4.9.5 获取方法的使用 90
引用文献 92
第5章 确定项目的前景与范围 95
5.1 引言 95
5.2 问题分析 96
5.2.1 获取问题 96
5.2.2 明确问题 97
5.2.3 发现业务需求 99
5.2.4 定义问题解决方案及系统特性 100
5.3 目标分析 105
5.3.1 “目标”概念——面向目标的需求工程方法 105
5.3.2 目标模型 106
5.3.3 目标分析过程 113
5.4 非功能需求分析 118
5.4.1 为什么需要非功能需求分析 118
5.4.2 非功能需求分析的困难 118
5.4.3 使用面向目标的方法分析非功能需求 119
5.5 业务过程分析 121
5.5.1 活动图 122
5.5.2 使用活动图进行业务过程分析 132
5.6 定义系统边界 134
5.7 前景与范围文档 135
5.7.1 业务需求 136
5.7.2 项目前景 137
5.7.3 项目范围 139
5.7.4 项目环境 140
引用文献 142
第6章 涉众分析与硬数据采样 145
6.1 什么是涉众 145
6.2 涉众分析 145
6.2.1 如何进行涉众分析 145
6.2.2 涉众分析过程 147
6.3 涉众识别 148
6.3.1 发现所有的关键涉众类别 148
6.3.2 识别涉众的方法 150
6.4 涉众描述 152
6.4.1 描述哪些内容 152
6.4.2 描述示例 154
6.5 涉众评估 156
6.5.1 优先级评估 156
6.5.2 风险评估 158
6.5.3 共赢分析 158
6.6 涉众代表选择 160
6.6.1 涉众采样 160
6.6.2 用户替代源 161
6.7 涉众参与策略制定 162
6.7.1 制定涉众参与的基本策略 162
6.7.2 敏捷方法——用户参与 163
6.8 使用目标模型进行涉众分析 164
6.8.1 使用主体依赖模型描述涉众互动 164
6.8.2 基于目标模型描述及评估涉众 165
6.9 硬数据及硬数据采样 166
6.9.1 硬数据 166
6.9.2 硬数据采样 167
引用文献 168
第7章 基于用例/场景模型展开用户需求获取 171
7.1 用户需求获取活动的展开 171
7.1.1 展开用户需求获取活动时的注意事项 171
7.1.2 用户需求获取活动的主线索——用例/场景模型 172
7.2 用例/场景 172
7.2.1 什么是用例/场景 172
7.2.2 用例/场景的组织特点 174
7.2.3 用例/场景的层次性 177
7.2.4 基于用例/场景进行软件开发 179
7.3 用例/场景模型 180
7.3.1 场景的定位 180
7.3.2 用例的定位 185
7.3.3 用例图 186
7.4 以用例/场景模型为主线索开展用户需求获取 189
7.4.1 依据系统用例图、目标模型建立初始用例/场景模型 190
7.4.2 根据用例/场景模型指导需求获取,完善层次结构 190
7.4.3 使用用例/场景组织获取内容 190
7.4.4 用新组织或修正的用例/场景完善用例/场景模型 192
7.4.5 依据用例/场景模型组织需求分析模型 192
7.4.6 分析用例/场景发现仍需获取的需求内容 193
7.5 用例文档 194
引用文献 196
第8章 需求获取方法之面谈 198
8.1 概述 198
8.2 准备面谈 198
8.2.1 准备工作 198
8.2.2 问题类型 199
8.2.3 问题准备 202
8.3 主持面谈 204
8.3.1 面谈开始阶段 204
8.3.2 面谈主体阶段 204
8.3.3 面谈结束阶段 206
8.3.4 记录面谈 206
8.4 整理面谈报告 207
8.5 面谈的类别 208
8.6 面谈的优点和局限性 209
8.7 群体面谈 210
8.7.1 概述 210
8.7.2 计划面谈 211
8.7.3 主持面谈 212
8.7.4 分析结果 213
8.8 和面谈相关的其他需求获取方法 213
8.8.1 调查问卷 213
8.8.2 头脑风暴 214
引用文献 216
第9章 需求获取方法之原型 218
9.1 原型及原型法概述 218
9.1.1 不确定性 218
9.1.2 原型及原型法 218
9.1.3 原型的用途 219
9.1.4 软件工程对原型及原型法的应用 220
9.2 使用原型法进行需求获取 220
9.2.1 基本过程 220
9.2.2 确定原型需求 221
9.2.3 原型开发 222
9.2.4 原型评估 222
9.2.5 原型修正 223
9.3 抛弃需求原型 224
9.3.1 抛弃式原型与演化式原型 224
9.3.2 坚决抛弃抛弃式原型 225
9.4 控制原型成本 225
9.4.1 依据抛弃式特征控制原型成本 225
9.4.2 控制水平原型的成本 226
9.4.3 使用尽量简单的介质降低原型成本 227
9.5 善用故事板原型 228
9.5.1 原型的表现 228
9.5.2 故事板原型 229
9.5.3 故事板原型构建 231
9.6 原型方法的风险 231
引用文献 232
第10章 需求获取方法之观察与文档审查 234
10.1 观察 234
10.1.1 概述 234
10.1.2 观察方法的适用情况 235
10.1.3 采样观察 237
10.1.4 民族志 239
10.2 文档审查 242
10.2.1 需求重用 242
10.2.2 文档分析 243
10.2.3 需求剥离 244
引用文献 245
第三部分 需求分析 249
第11章 需求分析概述 249
11.1 需求分析的根本任务 249
11.1.1 建立分析模型 250
11.1.2 创建解决方案 256
11.2 需求分析技术 259
11.2.1 模型、表示法、技术、方法和工具 259
11.2.2 常用的需求分析技术 260
11.2.3 需求分析技术的综合运用 262
11.3 需求分析方法 270
11.3.1 传统分析 270
11.3.2 结构化分析 271
11.3.3 信息工程 272
11.3.4 面向对象分析 273
11.4 前期需求阶段的建模与分析 274
11.4.1 前期需求阶段和后期需求阶段 274
11.4.2 面向问题域的分析 275
11.4.3 领域分析 277
11.4.4 企业建模 278
11.5 需求分析的活动 279
11.5.1 需求分析阶段的重要活动 279
11.5.2 需求细化 280
11.5.3 确定需求优先级 283
11.5.4 需求协商 285
11.6 实践中的需求分析 286
11.6.1 需求分析技术的使用 286
11.6.2 非功能需求的建模 287
11.6.3 确定需求优先级 287
11.6.4 新技术方法的需要 288
引用文献 288
第12章 过程建模 292
12.1 概述 292
12.2 数据流图 293
12.2.1 基本元素 293
12.2.2 规则 296
12.2.3 分层结构 298
12.2.4 层次结构的建立 300
12.3 逻辑说明——微规格说明 304
12.4 数据说明——数据字典 309
12.5 数据流图的验证 311
12.6 数据流图创建实例 311
12.7 模块结构图 318
12.7.1 功能分解图 318
12.7.2 过程依赖图 320
第13章 数据建模 321
13.1 概述 321
13.2 实体关系图 322
13.2.1 实体 323
13.2.2 属性 325
13.2.3 关系 327
13.3 实体关系图的创建 329
13.3.1 依据充分描述信息的实体关系图创建 329
13.3.2 依据硬数据表单的实体关系图创建 332
13.3.3 复杂情况下的实体关系图创建 335
13.4 实体关系图与过程模型的联系 337
第14章 面向对象建模 338
14.1 概述 338
14.2 UML与面向对象分析 338
14.2.1 UML的需求分析模型 338
14.2.2 基于UML的面向对象建模思路 339
14.3 对象模型 341
14.3.1 对象 341
14.3.2 对象之间的关系 343
14.3.3 类 343
14.3.4 类之间的关系 345
14.3.5 分析对象模型——领域模型 348
14.4 建立领域模型 349
14.4.1 识别候选对象与类 350
14.4.2 确定概念类 353
14.4.3 建立类之间的关联 356
14.4.4 添加类的重要属性 357
14.4.5 领域模型的分析作用 358
14.5 行为模型——交互图 359
14.5.1 概述 359
14.5.2 顺序图 359
14.5.3 通信图 362
14.5.4 系统顺序图 363
14.6 建立交互图 364
14.6.1 建立典型场景的系统顺序图 364
14.6.2 建立用例(多场景)系统顺序图 365
14.6.3 建立详细顺序图 366
14.6.4 交互图的分析作用 368
14.7 行为模型——状态图 368
14.7.1 状态图的发展历程 368
14.7.2 有限状态机 368
14.7.3 David Harel的发展 371
14.7.4 UML的状态图 374
14.8 建立状态图 376
14.8.1 基于状态转移矩阵建立状态图 376
14.8.2 状态图的分析作用 378
14.9 对象约束语言 378
14.9.1 概述 378
14.9.2 对象约束语言的构成 379
14.9.3 对象约束语言的应用 380
14.10 使用对象约束语言建立契约说明 382
14.11 基于CRC卡面向对象分析方法 384
14.11.1 CRC卡 384
14.11.2 基于CRC卡的职责驱动方法 385
引用文献 387
第四部分 需求的规格化与验证 391
第15章 需求规格说明 391
15.1 引言 391
15.2 需求规格说明文档 392
15.2.1 编写需求规格说明文档的原因 392
15.2.2 需求规格说明文档的类型 392
15.2.3 需求规格说明文档的读者 394
15.2.4 需求规格说明文档的描述手段 395
15.3 模板的选择与裁剪 397
15.3.1 模板的选择和使用 397
15.3.2 软件需求规格说明模板 400
15.4 需求规格说明文档的写作 405
15.4.1 写作的指导原则 405
15.4.2 常见的写作技巧 407
15.5 优秀需求规格说明文档的特性 409
15.6 实践中的需求规格说明 410
15.6.1 需求规格说明文档的编写和使用 411
15.6.2 需求规格说明文档的质量 411
15.6.3 模板和示例的使用 412
15.6.4 需求规格说明文档的描述语言 412
引用文献 413
第16章 需求验证 416
16.1 验证与确认 416
16.1.1 软件工程中的系统验证 416
16.1.2 需求验证活动 417
16.2 需求验证的方法 418
16.2.1 需求评审 418
16.2.2 原型与模拟 422
16.2.3 开发测试用例 423
16.2.4 用户手册编制 423
16.2.5 利用跟踪关系 424
16.2.6 自动化分析 424
16.3 问题的修正 425
16.4 实践中的需求验证 425
引用文献 426
第五部分 需求管理及工程管理 431
第17章 需求管理 431
17.1 需求管理概述 431
17.2 维护需求基线 432
17.2.1 需求基线 432
17.2.2 需求基线的内容 433
17.2.3 需求基线的维护 433
17.3 实现需求跟踪 435
17.3.1 需求跟踪 435
17.3.2 需求跟踪的用途 436
17.3.3 需求跟踪的内容 437
17.3.4 需求跟踪的实现方法 438
17.3.5 需求跟踪过程的建立 439
17.3.6 需求依赖 439
17.4 控制变更 440
17.4.1 需求变化 440
17.4.2 变更控制过程 441
17.4.3 变更控制中的注意事项 443
17.5 实践中的需求管理 445
17.5.1 需求的变更 445
17.5.2 需求跟踪信息 445
17.5.3 需求管理工具 446
引用文献 446
第18章 需求工程的过程管理 449
18.1 引言 449
18.2 需求工程过程的环境依赖性 450
18.3 需求工程过程的建立 451
18.3.1 建立过程框架 451
18.3.2 选择工作组件 454
18.3.3 应用实践方法 454
18.4 需求工程过程的改进 455
18.4.1 过程的评价 455
18.4.2 过程的改进 456
引用文献 459
第19章 需求工程中的项目管理 462
19.1 引言 462
19.2 资源支持 463
19.3 需求工程的生命周期规划 464
19.4 团队管理 466
19.4.1 组建需求团队 466
19.4.2 维持需求团队内部的有效沟通 467
19.5 需求风险管理 468
19.5.1 风险管理概述 468
19.5.2 风险管理过程 468
19.5.3 常见的需求风险 469
引用文献 470
习题 472
附录1 IEEE SRS模板 494
附录2重要的需求工程实践方法 500
引用文献 504