Ⅰ 开篇 3
1 三部曲范式 3
1.1 软件工程的描绘 3
1.1.1 “旧的”描绘 3
1.1.2 我们的观点:什么是软件工程 5
1.2 软件工程三部曲 6
1.2.1 领域与论域 6
1.2.2 领域工程 7
1.2.3 需求工程 18
1.2.4 软件 20
1.2.5 软件设计 20
1.2.6 讨论 24
1.3 开发的时期、阶段与步骤 25
1.3.1 软件开发的时期 25
1.3.2 开发的阶段与步骤 25
1.3.3 领域开发 27
1.3.4 需求开发 29
1.3.5 计算系统设计 31
1.3.6 讨论:时期、阶段与步骤 32
1.4 三部曲过程模型——首次考虑 33
1.4.1 过程模型的概念 33
1.4.2 三部曲过程模型 34
1.5 第1章的结论 34
1.5.1 概要 34
1.5.2 稍后将会介绍什么 34
1.6 文献评注 34
1.7 练习 35
1.7.1 一系列的软件开发 35
1.7.2 前言的注解 39
1.7.3 练习 39
2 文档 41
2.1 文档编制就是全部 41
2.2 文档部分的种类 41
2.2.1 概述 41
2.2.2 什么是描述 42
2.3 可交付物 43
2.4 信息文档部分 44
2.4.1 姓名、位置和日期 44
2.4.2 合作者 44
2.4.3 当前情况、需要、想法和概念 45
2.4.4 范围、区间、纲要 47
2.4.5 假设和依赖 49
2.4.6 隐含/派生目标 49
2.4.7 标准 50
2.4.8 合同和设计概要 51
2.4.9 日志 52
2.4.10 信息文档编制的讨论 53
2.5 描述文档部分 53
2.5.1 粗略描述 55
2.5.2 术语 57
2.5.3 叙述 59
2.5.4 形式叙述 61
2.5.5 描述性文档编制讨论 63
2.6 分析文档部分 63
2.6.1 概念形成 64
2.6.2 确认 65
2.6.3 验证、模型检查、测试 65
2.6.4 理论形成 66
2.6.5 分析文档编制的讨论 66
2.7 讨论 66
2.7.1 概述 66
2.7.2 章节总结 66
2.8 练习 68
2.8.1 序言 68
2.8.2 练习 68
Ⅱ 概念框架 73
3 方法和方法论 73
3.1 方法 73
3.2 方法学 74
3.3 方法构成 74
3.3.1 原则 74
3.3.2 分析 74
3.3.3 构造(或合成) 75
3.3.4 技术 75
3.3.5 工具 75
3.4 开发原则、技术和工具 75
3.4.1 一些元原则 76
3.4.2 一些原则、技术和工具 76
3.5 讨论 80
3.6 练习 80
4 模型和建模 81
4.1 介绍性、场景设定论述 81
4.1.1 模型和“可能世界” 81
4.1.2 规约的模型 82
4.1.3 建模 82
4.1.4 论域 82
4.2 模型属性 82
4.2.1 类比、分析、形象模型 83
4.2.2 描述和规定模型 85
4.2.3 外延和内涵模型 87
4.3 模型的角色 89
4.4 建模原则 89
4.5 讨论 89
4.6 练习 90
Ⅲ 描述:理论和实践 93
5 现象和概念 93
5.1 前言 93
5.2 现象和概念 93
5.2.1 物理上显然的现象 93
5.2.2 思维构想的概念 94
5.2.3 现象和概念的类别 94
5.2.4 具体和抽象概念 94
5.2.5 描述的类别 95
5.2.6 什么是描述 95
5.3 实体 96
5.3.1 原子实体 96
5.3.2 复合实体 96
5.3.3 子实体 97
5.3.4 值、部分整体关系、属性 97
5.3.5 实体的部分整体关系 97
5.3.6 部分整体关系和属性 98
5.3.7 面向模型的部分整体关系 98
5.3.8 面向模型的属性——题外话 98
5.3.9 实体性质 99
5.3.10 现实的示例和我们的类型系统 99
5.3.11 类型系统 105
5.3.12 类型约束 105
5.3.13 总结:原则、技术和工具 106
5.4 函数 106
5.4.1 函数基调 107
5.4.2 函数定义 108
5.4.3 算法 109
5.5 事件和行为 111
5.5.1 状态、动作、事件和行为 111
5.5.2 同步和通信 112
5.5.3 进程 113
5.5.4 迹 114
5.5.5 进程定义语言 115
5.6 建模现象和概念的选择 115
5.6.1 定性特性 115
5.6.2 定量特性 115
5.6.3 原则、技术和工具 117
5.7 讨论 118
5.7.1 实体、函数、事件和行为 118
5.7.2 密集和问题框架 119
5.8 文献评注 119
5.9 练习 119
5.9.1 序言 119
5.9.2 练习 119
6 关于下定义和关于定义 120
6.1 定义的语用 122
6.1.1 现象、人工制品和概念 122
6.1.2 什么是定义 122
6.1.3 所定义的概念的特性 123
6.1.4 数学定义 123
6.1.5 物理世界定义 123
6.1.6 形式定义 124
6.2 各种各样的哲学定义 124
6.2.1 艺术的六种刻画 124
6.2.2 讨论 125
6.2.3 可能的反对 126
6.3 预备性讨论 126
6.4 形式定义的句法 126
6.4.1 识别和复制 127
6.4.2 唯一性和标识 128
6.4.3 本体论术语 129
6.5 形式定义的语义 129
6.6 讨论 129
6.6.1 概述 129
6.6.2 原则、技术和工具 130
6.7 练习 130
7 Jackson的描述原则 133
7.1 现象、事实和个体 133
7.2 指示 133
7.2.1 一些观察 135
7.2.2 形式化 136
7.2.3 观测器函数和标识 137
7.2.4 数学和计算实体 138
7.2.5 讨论:指示 141
7.3 显式定义 142
7.3.1 定义:“狭窄之桥” 142
7.3.2 抽象、非现实概念的定义 143
7.3.3 要定义多少? 143
7.3.4 讨论:定义 144
7.4 可驳斥断言 144
7.4.1 指示和定义断言 144
7.4.2 分析 145
7.4.3 “悬垂”断言 146
7.4.4 讨论:可驳斥断言 146
7.5 讨论:描述原则 147
7.6 文献评注 147
7.7 练习 147
7.7.1 序言 147
7.7.2 练习 147
Ⅳ 领域工程 151
8 领域工程概述 151
8.1 前言 151
8.2 回顾:为什么有领域工程 151
8.3 部分和章节的概述 152
8.4 领域参与者及其观点 152
8.5 领域获取和确认 153
8.6 领域分析和概念形成 153
8.7 领域刻面 154
8.8 领域开发的辅助阶段 154
8.9 领域模型文档 154
8.9.1 要谈问题的预览 154
8.9.2 领域模型文档内容 155
8.10 这一部分的其他结构 155
8.11 文献评注 156
8.12 练习 156
9 领域参与者 158
9.1 前言 158
9.2 参与者 158
9.2.1 一般应用参与者 158
9.2.2 软件开发参与者 159
9.2.3 列出参与者的目的 160
9.3 参与者观点 160
9.3.1 一般应用的观点 160
9.3.2 软件开发的观点 163
9.4 讨论:参与者及其观点 163
9.4.1 概述 163
9.4.2 原则、技术和工具 164
9.5 练习 164
9.5.1 序言 164
9.5.2 练习 164
9.5.3 尾言 165
10 领域属性 166
10.1 前言 166
10.2 连续、离散和混沌 166
10.2.1 时间 167
10.2.2 连续 167
10.2.3 离散 168
10.2.4 混沌 174
10.2.5 讨论 175
10.3 静态和动态 175
10.3.1 静态现象和概念 176
10.3.2 动态现象和概念 178
10.4 可触知性和不可触知性 192
10.4.1 人可触知的现象 192
10.4.2 其他物理上可触知的现象 195
10.4.3 不可触知的现象 195
10.4.4 讨论 195
10.5 一、二、……维 196
10.5.1 零维 196
10.5.2 一维 196
10.5.3 多维性 197
10.5.4 讨论 198
10.6 讨论 198
10.7 文献评注 199
10.8 练习 199
10.8.1 序言 199
10.8.2 练习 199
11 领域刻面 200
11.1 前言 200
11.1.1 分而治之 201
11.1.2 分离原则的讨论 201
11.1.3 章节结构 201
11.2 领域易化器:企业过程 202
11.2.1 企业过程 202
11.2.2 总体原则 204
11.2.3 非形式和形式示例 205
11.2.4 讨论 208
11.2.5 总结 209
11.2.6 提示 209
11.3 领域内在 209
11.3.1 总体原则 209
11.3.2 概念上和实际的内在 213
11.3.3 方法论上的结果 214
11.3.4 讨论 214
11.3.5 完全本质的内在 215
11.3.6 提醒 215
11.4 领域支持技术 215
11.4.1 整体原则 215
11.4.2 方法论上的结果 218
11.4.3 讨论 219
11.4.4 提醒 219
11.5 领域管理和组织 219
11.5.1 整体原则 219
11.5.2 概念分析,Ⅰ 220
11.5.3 方法论上的结果,Ⅰ+Ⅱ 221
11.5.4 概念分析,Ⅱ 221
11.5.5 方法论上的结果,Ⅲ 223
11.5.6 讨论 223
11.5.7 提醒 223
11.6 领域规则和规定 224
11.6.1 整体原则 224
11.6.2 方法论上的结果 225
11.6.3 规则和规定语言 227
11.6.4 原则和技术 227
11.6.5 提示 227
11.7 领域脚本 228
11.7.1 脚本描述 228
11.7.2 方法论上的结果 247
11.7.3 提醒+更多 247
11.8 领域的人类行为 247
11.8.1 整体原则 248
11.8.2 方法论上的结果 251
11.8.3 人类行为和知识工程 253
11.8.4 讨论 253
11.8.5 提醒 253
11.9 其他的领域刻面 253
11.10 领域模型复合 254
11.10.1 核对领域刻面描述 254
11.10.2 技术问题 255
11.11 练习 255
11.11.1 序言 255
11.11.2 练习 255
12 领域获取 257
12.1 前言 257
12.1.1 领域事实 257
12.1.2 领域事实引出 257
12.1.3 记录领域事实 258
12.1.4 索引领域描述的略述 259
12.2 获取过程 259
12.2.1 参与者联络 260
12.2.2 引出研究 260
12.2.3 引出会谈 261
12.2.4 引出问卷 261
12.2.5 引出报告 263
12.3 讨论 264
12.3.1 概念和过程回顾 264
12.3.2 过程迭代 264
12.3.3 描绘:获取和分析 264
12.3.4 原则、技术和工具 264
12.4 练习 265
12.4.1 序言 265
12.4.2 练习 265
13 领域分析和概念形成 266
13.1 前言 266
13.2 概念形成 266
13.2.1 简单抽象概念 266
13.2.2 突破性被抽象概念 268
13.3 一致性、冲突和完备性 268
13.3.1 不一致性 269
13.3.2 冲突 269
13.3.3 不完备性 269
13.3.4 宽松和非确定性 270
13.4 从分析到合成 270
13.5 讨论 270
13.5.1 概述 270
13.5.2 原则、技术和工具 270
13.6 文献评注 271
13.7 练习 271
13.7.1 序言 271
13.7.2 练习 271
14 领域验证和确认 273
14.1 前言 273
14.2 领域验证 274
14.2.1 非形式推理 274
14.2.2 测试 274
14.2.3 形式证明 275
14.2.4 模型检查 275
14.3 领域确认 275
14.3.1 领域确认文档 275
14.3.2 领域确认过程 276
14.3.3 领域开发迭代 276
14.4 讨论 276
14.4.1 概述 276
14.4.2 原则、技术和工具 276
14.5 练习 277
14.5.1 序言 277
14.5.2 练习 277
15 领域理论 278
15.1 前言 278
15.2 什么是领域理论 278
15.3 领域理论的陈述示例 279
15.4 可能的领域理论 280
15.5 我们如何建立一个理论 281
15.6 领域理论的目的 281
15.7 总结性原则、技术和工具 282
15.8 文献评注 282
15.9 练习 282
15.9.1 序言 282
15.9.2 练习 282
16 领域工程过程模型 285
16.1 前言 285
16.2 领域开发回顾 285
16.3 领域文档回顾 286
16.4 讨论 287
Ⅴ 需求工程 291
17 需求工程综述 291
17.1 前言 293
17.1.1 “需求”的进一步刻画 294
17.1.2 “机器” 294
17.2 为什么需要需求,为了什么 294
17.2.1 为什么需要需求 295
17.2.2 需求是为了什么 295
17.2.3 “实现”是指什么 295
17.3 开始需求开发 295
17.3.1 最初的信息文档 295
17.3.2 需求发现 296
17.3.3 实际的规定性文档编制 297
17.3.4 计划需求开发 298
17.4 关于领域、需求和机器 298
17.5 概述:需求工程的阶段 300
17.6 需求文档 300
17.6.1 将来事情的预览 300
17.6.2 需求文档的内容 300
17.6.3 需求文档的注释 301
17.7 本部分剩下内容的结构 302
17.8 文献评注 302
17.9 练习 302
17.9.1 序言 302
17.9.2 练习 302
18 需求参与者 304
18.1 前言 304
18.2 常规应用的参与者 304
18.3 COTS软件开发商的参与者 305
18.3.1 概述 305
18.3.2 “公司知识” 305
18.3.3 领域特定的需求分类 305
18.3.4 通常的COTS软件相关者的观点 305
18.4 讨论 306
18.4.1 概述 306
18.4.2 原则、技术和工具 306
18.5 练习 306
18.5.1 序言 306
18.5.2 练习 307
19 需求刻面 308
19.1 前言 308
19.2 粗略描述和术语表 309
19.2.1 初始需求建模 309
19.2.2 粗略描述的需求 309
19.2.3 需求术语 314
19.2.4 系统叙述 318
19.3 企业过程再工程需求 318
19.3.1 Michael Hammer关于BPR的概念 319
19.3.2 什么是BPR需求 320
19.3.3 BPR操作概述 320
19.3.4 BPR和需求文档 320
19.3.5 内在回顾和替换 321
19.3.6 支持技术回顾和替换 321
19.3.7 管理和组织再工程 322
19.3.8 规则和规定再工程 322
19.3.9 人类行为再工程 323
19.3.10 脚本再工程 323
19.3.11 讨论:企业过程再工程 323
19.4 领域需求 324
19.4.1 领域到需求的操作 324
19.4.2 领域需求和需求文档 324
19.4.3 领域示例 325
19.4.4 领域投影 326
19.4.5 领域确定 330
19.4.6 领域实例化 333
19.4.7 领域扩展 334
19.4.8 领域需求拟合 336
19.4.9 讨论:领域需求 339
19.5 接口需求 339
19.5.1 共享现象和概念标识 339
19.5.2 接口需求刻面 340
19.5.3 接口需求和需求文档 340
19.5.4 共享数据初始化 341
19.5.5 共享数据刷新 341
19.5.6 计算数据和控制接口需求 342
19.5.7 人机对话 342
19.5.8 人机生理接口 343
19.5.9 机机对话 349
19.5.10 讨论:接口需求 350
19.6 机器需求 351
19.6.1 机器需求刻面 351
19.6.2 机器需求和需求文档 351
19.6.3 性能需求 352
19.6.4 可信性需求 354
19.6.5 故障树分析 357
19.6.6 维护需求 370
19.6.7 平台需求 371
19.6.8 文档编制需求 372
19.6.9 讨论:机器需求 372
19.7 需求模型复合 373
19.7.1 概述 373
19.7.2 合并需求刻面规定 373
19.8 讨论:需求刻面 373
19.8.1 概述 373
19.8.2 原则、技术和工具 373
19.9 文献评注 373
19.10 练习 374
19.10.1 序言 374
19.10.2 练习 374
20 需求获取 376
20.1 需求获取和领域模型 376
20.2 基于领域模型的需求获取 377
20.2.1 领域需求获取、预览 377
20.2.2 其余的需求获取、概览 377
20.2.3 其他问题 378
20.3 概念概述 378
20.3.1 需求 378
20.3.2 需求的引出 378
20.3.3 记录需求 378
20.3.4 索引需求规定描述 380
20.4 获取过程 380
20.4.1 参与者联络 381
20.4.2 引出研究 381
20.4.3 引出会谈 381
20.4.4 引出调查问卷 381
20.4.5 引出报告 384
20.5 讨论 385
20.5.1 概念和过程回顾 385
20.5.2 过程迭代 385
20.5.3 描述:获取和分析 385
20.5.4 原则、技术和工具 385
20.6 练习 386
20.6.1 序言 386
20.6.2 练习 386
21 需求分析和概念形成 387
21.1 前言 387
21.2 概念形成 388
21.3 一致性、冲突和完备性 388
21.3.1 不一致性 389
21.3.2 冲突 389
21.3.3 不完备性 389
21.3.4 宽松性和非确定性 389
21.4 从分析到合成 390
21.5 讨论 390
21.5.1 概述 390
21.5.2 原则、技术和工具 390
21.6 文献评注 391
21.7 练习 391
21.7.1 序言 391
21.7.2 练习 391
22 需求的验证和确认 392
22.1 前言 392
22.2 需求验证 393
22.2.1 非形式推理 393
22.2.2 测试 393
22.2.3 形式证明 394
22.2.4 模型检查 394
22.3 需求确认 394
22.3.1 需求确认文档 394
22.3.2 需求确认过程 395
22.3.3 需求开发迭代 395
22.4 讨论 395
22.4.1 简介 395
22.4.2 原则、技术和工具 395
22.5 文献评注 396
22.6 练习 396
22.6.1 序言 396
22.6.2 练习 396
23 需求的可满足性和可行性 397
23.1 前言 397
23.2 满足性研究 397
23.2.1 正确的(检验过的)需求文档 398
23.2.2 无二义性的需求文档 398
23.2.3 完备的需求文档 398
23.2.4 一致的需求文档 398
23.2.5 稳定的需求文档 398
23.2.6 可验证的需求文档 398
23.2.7 可修改的需求文档 398
23.2.8 可追溯的需求文档 399
23.2.9 忠实的需求文档 399
23.2.10 可满足性的讨论 399
23.3 技术可行性研究 399
23.3.1 企业过程再工程的可行性 399
23.3.2 硬件的可行性 399
23.3.3 软件的可行性 400
23.3.4 技术可行性讨论 400
23.4 经济可行性研究 400
23.4.1 可行的开发费用 400
23.4.2 可行的折旧费用 400
23.4.3 收益大于投入? 400
23.4.4 关于经济可行性的讨论 400
23.5 顺从于隐含/派生目标 401
23.5.1 隐含/派生目标的审阅 401
23.5.2 隐含/派生目标的讨论 401
23.6 讨论 401
23.6.1 概述 401
23.6.2 原则、技术和工具 401
23.7 练习 402
23.7.1 序言 402
23.7.2 练习 402
24 需求工程过程模型 403
24.1 前言 403
24.2 需求开发的回顾 403
24.3 回顾需求文档 404
24.4 重复的内容列表 404
24.5 讨论 405
Ⅵ 计算系统设计 409
25 硬件/软件协同设计 409
25.1 前言——关于体系结构 409
25.2 硬件构件和模块 409
25.3 软件构件和模块 410
25.4 硬件/软件协同设计 410
25.5 体系结构的逐步改进 410
25.6 讨论 411
25.7 原则、技术和工具 411
26 软件体系结构设计 412
26.1 前言 412
26.2 初始的领域需求体系结构 412
26.3 初始机器需求体系结构 414
26.4 一些机器需求的分析 416
26.4.1 性能 416
26.4.2 可用性 416
26.4.3 可存取性 416
26.4.4 适应可维护性 417
26.5 设计决策的优先 417
26.6 相应的设计 417
26.6.1 关于性能的设计决策 417
26.6.2 可用性的设计决策 418
26.6.3 关于可存取性的设计决策 419
26.6.4 关于适应性的设计决策 421
26.7 讨论 421
26.7.1 概述 421
26.7.2 原则和技术 422
26.8 文献评注 422
26.9 练习 423
26.9.1 序言 423
26.9.2 练习 423
27 构件设计的范例分析 424
27.1 概述性前言 424
27.1.1 系统复杂性 424
27.1.2 建议的解决办法 425
27.1.3 逐步开发 425
27.1.4 逐阶段迭代 425
27.2 示例概述 425
27.3 方法论概述 426
27.3.1 原则 426
27.3.2 技术 427
27.4 步骤0:文件和页 428
27.4.1 “快照” 428
27.4.2 抽象的形式模型 428
27.4.3 抽象和具体的基本动作 429
27.4.4 具体动作 431
27.5 步骤1:编目、磁盘和存储器 431
27.5.1 编目目录 431
27.5.2 抽象 434
27.5.3 动作 435
27.5.4 适当性和充分性 437
27.5.5 正确性 437
27.6 步骤2:磁盘 439
27.6.1 数据精化 439
27.6.2 磁盘类型 439
27.6.3 FS0、FS1、FS2类型 440
27.6.4 磁盘类型不变式 440
27.6.5 磁盘类型抽象 441
27.6.6 适当性、充分性、操作和正确性 441
27.7 步骤3:高速缓存 441
27.7.1 技术考虑 441
27.7.2 高速缓存的目录和页访问 441
27.7.3 不变性 443
27.7.4 抽象 443
27.7.5 动作 444
27.7.6 适当性、充分性和正确性 445
27.8 步骤4:存储崩溃 445
27.8.1 存储和磁盘 445
27.8.2 具体语义类型 445
27.8.3 不变性 446
27.8.4 一致的存储和磁盘 446
27.8.5 抽象 448
27.8.6 垃圾收集 448
27.8.7 新动作 449
27.8.8 一些以前的命令 449
27.9 步骤5:扁平化存储和磁盘 450
27.9.1 “扁平”存储和磁盘 450
27.9.2 “其他” 451
27.10 步骤6:磁盘空间管理 451
27.10.1 问题 451
27.10.2 “其他” 452
27.11 讨论 452
27.11.1 概述 452
27.11.2 原则和技术 452
27.12 文献评注 453
27.13 练习 453
27.13.1 序言 453
27.13.2 练习 453
28 特定领域的体系结构 455
28.1 前言 455
28.1.1 概述 455
28.1.2 一些定义 455
28.1.3 关于体系结构 456
28.1.4 问题框架 456
28.1.5 章节结构 457
28.2 翻译器体系结构 457
28.2.1 翻译器领域 457
28.2.2 翻译器需求 458
28.2.3 翻译器设计 459
28.2.4 翻译器开发的过程图 461
28.3 信息储存库体系结构 464
28.3.1 信息储存库领域 465
28.3.2 信息储存库需求 467
28.3.3 信息储存库设计 468
28.4 客户端/服务器体系结构 477
28.4.1 客户端/服务器领域/需求模型 477
28.4.2 一些元RSL/CSP结构 480
28.4.3 单客户端、单服务器模型 482
28.4.4 多客户端、多服务器模型 485
28.4.5 客户端/服务器事件管理器模型 486
28.4.6 讨论 493
28.5 工件体系结构 494
28.5.1 工件领域 494
28.5.2 工件需求 494
28.5.3 工件系统设计 497
28.6 反应系统体系结构 497
28.6.1 反应系统领域 497
28.6.2 反应系统控制需求 499
28.6.3 反应系统控制设计 500
28.6.4 反应系统设计的讨论 500
28.7 连接框架 501
28.7.1 连接领域 501
28.7.2 连接需求 502
28.7.3 连接系统设计 504
28.8 讨论 504
28.8.1 概述 504
28.8.2 原则、技术和工具 504
28.9 练习 505
28.9.1 序言 505
28.9.2 练习 505
29 其他:编码及其全部! 508
29.1 从形式规约到程序设计 508
29.1.1 从规约到程序 508
29.1.2 从抽象类型到数据结构 509
29.1.3 从应用式到命令式程序 509
29.1.4 翻译到并发程序 509
29.1.5 从RSL到SML、Java、C#和其他语言 509
29.2 程序设计之美 509
艺术、规范、工艺、科学、逻辑、实践 509
29.3 程序设计实践 510
29.3.1 结构化程序设计 510
29.3.2 极限程序设计 510
29.3.3 面向对象和UML程序设计 511
29.3.4 主程序员的程序设计 511
29.4 构建信任的软件开发 511
29.4.1 什么时候验证、模型检查和测试 512
29.4.2 演示→框架→原型→系统 513
29.5 验证、模型检查和测试 515
29.5.1 验证 516
29.5.2 模型检查 517
29.5.3 测试 518
29.5.4 讨论 520
29.6 讨论 520
29.7 练习 520
29.7.1 序言 520
29.7.2 练习 520
30 计算系统设计过程模型 521
30.1 前言 521
30.2 软件设计的回顾 521
30.2.1 过程模型 521
30.2.2 讨论 523
30.3 软件设计文档回顾 523
30.4 讨论 525
Ⅶ 结束语 529
31 三部曲开发过程模型 529
31.1 时期过程模型 529
31.2 时期文档编制目录 531
31.3 结论 533
32 尾章 537
32.1 非形式和形式软件工程 537
32.1.1 非形式软件工程 537
32.1.2 形式软件工程 537
32.1.3 结论 538
32.2 形式方法的神话和戒律 538
32.2.1 头七个神话 538
32.2.2 其他的七个神话 539
32.2.3 十个形式方法戒律 540
32.3 FAQ(Frequently Asked Questions):常见问题 541
32.3.1 概述 541
32.3.2 领域 542
32.3.3 需求 543
32.4 研究和工具开发 543
32.4.1 演化的原则、技术和工具 543
32.4.2 巨大的挑战 544
32.5 应用领域 545
32.5.1 其他领域 546
32.5.2 示例 546
32.6 结束语 547
32.6.1 程序设计、工程和管理 547
32.6.2 目前的软件工程综合体系 547
32.6.3 目前的软件工程术语 548
32.6.4 软件工程的全新视角 548
Ⅷ 附录 551
A RSL入门 551
A.1 类型 551
A.1.1 类型表达式 551
A.1.2 类型定义 552
A.2 RSL谓词演算 554
A.2.1 命题表达式 554
A.2.2 简单谓词表达式 554
A.2.3 量化表达式 554
A.3 具体RSL类型 555
A.3.1 集合枚举 555
A.3.2 笛卡尔枚举 555
A.3.3 列表枚举 555
A.3.4 映射枚举 556
A.3.5 集合操作 557
A.3.6 笛卡尔操作 558
A.3.7 列表操作 559
A.3.8 映射操作 561
A.4 λ演算和函数 563
A.4.1 λ演算句法 563
A.4.2 自由和约束变量 563
A.4.3 代入 563
A.4.4 α重命名和β归约 564
A.4.5 函数基调 564
A.4.6 函数定义 564
A.5 其他的应用式表达式 565
A.5.1 let表达式 565
A.5.2 条件 566
A.5.3 操作符/操作数表达式 567
A.6 命令式结构 567
A.6.1 变量和赋值 567
A.6.2 语句序列和skip 568
A.6.3 命令式条件 568
A.6.4 迭代条件式 568
A.6.5 迭代序列化 568
A.7 进程结构 568
A.7.1 进程通道 568
A.7.2 进程复合 569
A.7.3 输入/输出事件 569
A.7.4 进程定义 569
A.8 简单RSL规约 570
B 术语表 571
参考文献 573