第一部分 软件工程化基础 3
第1章 绪论 3
1.1软件无处不在 3
1.2计算机器的发展 3
1.2.1手动计算装置 3
1.2.2自动计算装置 4
1.2.3图灵理论计算机 5
1.2.4 电子计算机的大规模生产和应用 5
1.3软件艺术、工程与产业 6
1.3.1从程序到软件 6
1.3.2程序设计艺术 7
1.3.3软件工程侧面 7
1.3.4软件产业化 9
1.4软件工程历程 10
1.5本书的组织 11
参考文献 12
第2章 基于计算机的系统 13
2.1基于计算机的系统组成和特征 13
2.1.1系统的组成 13
2.1.2系统故障 14
2.1.3硬件的连续性 15
2.1.4软件的离散性 16
2.1.5人的特征与管理 16
2.1.6固件与嵌入式系统 17
2.2硬件特征和系统建造理念 18
2.2.1硬件的故障特征 18
2.2.2硬件系统的全生命周期设计 18
2.2.3硬件生产质量的统计学控制 19
2.3软件故障和建造理念 20
2.3.1软件故障表现和分类 20
2.3.2程序正确性证明 21
2.3.3测试的充分性问题 21
2.3.4代码复用 22
2.3.5部件组装 22
2.4使用者的错误与避免 24
2.4.1操作员的错误 24
2.4.2入的信息处理模型 24
2.4.3操作错误的避免 25
2.5本章小结 26
参考文献 26
第3章 软件开发过程 28
3.1程序开发基本过程 28
3.1.1一个简单的程序开发例子 28
3.1.2程序开发库和复用 29
3.2从程序开发到软件工程化过程 30
3.2.1软件开发的活动 30
3.2.2大型软件开发的管理 31
3.3中间产品驱动的过程 34
3.3.1中间产品驱动的过程 34
3.3.2中间产品的意义 35
3.4瀑布式还是迭代式 35
3.4.1增量式模型 36
3.4.2渐进式模型 37
3.4.3螺旋式模型 38
3.5软件产品的开发过程 41
3.5.1策略和原则的建立 41
3.5.2定义产品和开发过程 42
3.5.3开发产品与装箱 43
3.5.4与黑客方法的差别 44
3.5.5方法的优点 44
3.6计算机辅助与模型驱动的软件工程 45
3.6.1计算机辅助软件工程与工具 45
3.6.2模型驱动的软件工程 46
3.7本章小结 47
参考文献 48
第4章 软件质量 49
4.1软件质量定义 49
4.1.1程序的类型划分 49
4.1.2质量定义 51
4.2质量观点 51
4.2.1 Garvin的质量分类 51
4.2.2 Braa的质量侧面观点 53
4.2.3项目经理们的质量看法 55
4.3软件质量模型的归纳 55
4.4 ISO) 9126的质量定义 56
4.4.1软件产品质量模型 56
4.4.2产品质量属性分解 57
4.4.3部件和服务项的质量评价 61
4.5软件过程质量 61
4.6本章小结 61
参考文献 62
第5章 系统可信赖性 63
5.1可信赖性概念 63
5.1.1可信赖性的起因 63
5.1.2可信赖性的定义 64
5.1.3可信赖性的属性 64
5.2可信赖性方法和技术 65
5.2.1开发可信赖系统的基本方法 65
5.2.2可信赖性的属性讨论 66
5.3可靠性和可用性 67
5.4安全性原则 68
5.4.1 ALARP安全原则 68
5.4.2软件安全证据考虑 70
5.4.3基于开发过程的证据 70
5.5密安性原则 70
5.5.1软件密安性的威胁 70
5.5.2密安性的误区 71
5.5.3密安性的公开原则 72
5.5.4系统密安性的模型 72
5.5.5产品的密安性需求与认证 75
5.6生存性 76
5.7本章小结 77
参考文献 77
第6章 软件销售与采购 79
6.1软件类型 79
6.1.1现货软件 79
6.1.2可复用软件 80
6.1.3按合同开发的软件 80
6.1.4开源软件 80
6.1.5软件类型与质量 80
6.2软件产品销售模式 81
6.2.1软件产品销售行为 81
6.2.2最终用户协议 82
6.2.3点击同意协议 82
6.2.4二次开发的皇税协议 83
6.2.5开源协议 84
6.2.6 GNU、BSD、MIT协议 84
6.2.7免许可证软件 85
6.2.8国际间的软件版权 85
6.3软件项目采购模式 86
6.3.1软件采购和外包形式 86
6.3.2软件采购过程 87
6.3.3软件采购的主要问题 90
6.4 OTS的采购和使用 91
6.4.1一般问题 91
6.4.2安全性考虑 92
6.4.3密安性考虑 93
6.5本章小结 94
参考文献 94
第7章 软件运维与服务过程 96
7.1引言 96
7.2软件移交与验收过程 97
7.3软件支持过程 98
7.3.1软件维护与传统产品维护 98
7.3.2 Lehman定律 99
7.3.3维护成本 100
7.4软件支持过程与活动 100
7.4.1软件修改过程 100
7.4.2软件支持活动 102
7.5软件支持方式与能力 103
7.5.1软件支持方式与基本要求 103
7.5.2针对软件可使用性的支持 104
7.5.3针对运行能力的支持 105
7.6独立的软件支持 105
7.6.1软件支持的原则 106
7.6.2系统部署前后的支持工作 106
7.6.3采购对支持工作的要求 106
7.7本章小结 108
参考文献 108
第二部分 各阶段的工程化 113
第8章 需求工程 113
8.1引言 113
8.2需求类型 114
8.2.1需求分类 114
8.2.2需求分析目标和维度 115
8.2.3需求内涵 117
8.3需求分析过程 117
8.4需求文档的编写 119
8.4.1需求文档的结构化 119
8.4.2需求描述的语言 123
8.4.3需求进一步量化 124
8.5需求文档的质量度量 125
8.6需求管理 131
8.6.1需求管理的起因 131
8.6.2需求的跟踪 132
8.6.3需求变更管理 133
8.7本章小结 134
参考文献 135
第9章 建模与图示化表达 136
9.1图示化与自然语言 136
9.1.1图的作用 136
9.1.2自然语言和文字的构造原则 136
9.2传统的图示化建模 137
9.2.1系统周境图示化表达 137
9.2.2数据流图表达 138
9.2.3功能结构图表达 139
9.2.4实体-关系图表达 139
9.2.5事务定义与性能分析 142
9.3用户角色表达 144
9.3.1用例图 144
9.3.2泳道图 145
9.4静态图模型 145
9.4.1部署图 145
9.4.2对象和类图 146
9.4.3类之间的关联 147
9.5活动的建模 149
9.5.1活动的表达 149
9.5.2泳道与活动的结合 150
9.6交互的图示化模型 151
9.6.1消息序列图 151
9.6.2通信图 153
9.6.3交互概要图 153
9.6.4时序图 153
9.7状态机模型 155
9.7.1 Mealy机 155
9.7.2 Moore机 155
9.7.3 UML中的状态机图示化表达 156
9.8可信赖性分析与建模 157
9.8.1可信赖性分析框架和过程 157
9.8.2可信赖性需求分析的例子 159
9.9本章小结 162
参考文献 162
第10章 体系结构设计 164
10.1从系统分解到体系结构设计 164
10.2体系结构的必要性和定义 165
10.2.1为何要讨论体系结构 165
10.2.2体系结构定义 166
10.2.3体系结构的重要性 166
10.3体系结构设计过程 167
10.3.1体系结构视角 167
10.3.2设计过程 167
10.4分析体系结构需求 169
10.4.1识别体系结构需求 169
10.4.2体系结构需求的例子 170
10.4.3体系结构需求的排序 171
10.5体系结构设计方法 171
10.5.1分割法 171
10.5.2抽象法 172
10.5.3压缩法 172
10.5.4规范组合法 173
10.5.5复制法 173
10.5.6资源共享法 173
10.5.7设计方法对质量的影响 174
10.6体系结构设计文档 174
10.7体系结构的评价 175
10.7.1场景描述方法 175
10.7.2原型评价法 177
10.7.3效用树法 178
10.7.4评价过程 179
10.8本章小结 182
参考文献 182
第11章 体系结构模式与应用 184
11.1体系结构的分级 184
11.1.1概念级体系结构 184
11.1.2模块级体系结构 185
11.1.3运行级体系结构 186
11.1.4代码级体系结构 187
11.1.5体系结构之间的关系 188
11.2体系结构描述语言 189
11.2.1 ADL的基本要求 189
11.2.2 AADL 190
11.2.3用UML描述各级体系结构 190
11.3常见的体系结构模式 193
11.3.1分层视角 193
11.3.2数据流动视角 194
11.3.3数据集中视角 196
11.3.4调用视角 197
11.3.5消息传递视角 199
11.3.6分布式与交互视角 201
11.4应用软件框架及使用 206
11.4.1软件框架的类型 207
11.4.2 Web应用框架——一个广泛应用的例子 207
11.4.3采用框架的应用系统开发过程 208
11.5生产线的软件体系结构 208
11.5.1软件生产线的概念 208
11.5.2软件生产线如何工作 209
11.5.3为软件生产线建立体系结构 210
11.6本章小结 210
参考文献 211
第12章 代码工程 212
12.1代码的运行错误 212
12.1.1运行错误分类 212
12.1.2高级语言的错误与运行错误 212
12.2可执行代码的质量分析 213
12.2.1可执行代码的产生过程 213
12.2.2代码编辑器与质量 214
12.2.3代码版本控制 215
12.2.4 Build工具的使用 215
12.3代码工程质量 216
12.3.1代码质量模型 216
12.3.2结构化编程 217
12.3.3代码的复杂度度量 217
12.3.4面向对象语言的度量 221
12.3.5度量元的使用 222
12.4可靠安全编程 222
12.4.1可靠安全的编程原则 222
12.4.2安全编程语言 225
12.5密安性编程 226
12.5.1密安软件开发规则 226
12.5.2 25个顶级危险 227
12.6代码移植与复用 228
12.6.1系统软件的移植 229
12.6.2应用软件的移植 229
12.6.3数据的移植 229
12.6.4代码的复用 230
12.7代码审查 231
12.7.1代码审查方式 231
12.7.2代码质量检查单 231
12.7.3面向对象代码检查单 233
12.8本章小结 234
参考文献 234
第13章 软件测试理论与技术 236
13.1测试目的 236
13.1.1测试的任务与目标 236
13.1.2软件错误类型 237
13.2基于控制流的测试 237
13.2.1完全路径测试的现实性 237
13.2.2语句覆盖准则 238
13.2.3分支覆盖准则 239
13.2.4简化的路径覆盖准则 239
13.2.5圈复杂数覆盖准则 240
13.2.6多条件覆盖准则 240
13.2.7修改后的条件判断覆盖 241
13.2.8 LC SAJ覆盖准则 243
13.3基于数据流的测试 244
13.4变异测试技术 246
13.5测试准则的强弱比较 247
13.6基于需求规范的测试 248
13.6.1黑箱测试模型 248
13.6.2黑箱测试的优缺点 250
13.6.3对需求条款的测试覆盖准则 250
13.7测试充分性的评判 251
13.7.1基于代码的测试评判 251
13.7.2非基于代码的测试评判 252
13.8本章小结 253
参考文献 253
第14章 软件测试工程 255
14.1测试工程化 255
14.1.1测试的生命周期 255
14.1.2测试方式与方法 256
14.1.3测试工程的原则 257
14.1.4测试过程 258
14.2各测试阶段的工作 259
14.2.1单元测试 259
14.2.2集成测试 259
14.2.3系统测试 261
14.2.4验收测试 261
14.2.5试运行 262
14.2.6产品发布前的测试 262
14.3测试用例设计方法 262
14.3.1随机方法 263
14.3.2判定表方法 263
14.3.3等价类划分 264
14.3.4边界值方法 265
14.3.5因果图方法 266
14.4面向对象程序的测试 268
14.4.1面向对象程序测试面临的问题 268
14.4.2传统测试方法对面向对象测试的适用性 269
14.4.3面向对象程序测试方法 269
14.4.4类内的MtSS的方法 270
14.4.5对象类之间的MtSS的方法 271
14.4.6对象之间的MgSS方法 271
14.4.7从交互图获得MtSS和MgSS 272
14.4.8面向对象测试的充分性 273
14.5不可测试软件的测试 274
14.5.1数值求解问题 275
14.5.2“四舍五入”问题 275
14.5.3规划类问题 277
14.6何时停止测试 277
14.6.1错误种子法 277
14.6.2错误种子测试的信任度 278
14.6.3覆盖率与测试信任度 279
14.6.4能力基线与测试信任度 279
14.7可信赖性测试和评价 280
14.7.1可恢复性测试 280
14.7.2密安性测试 280
14.7.3压力测试 281
14.7.4性能测试 281
14.7.5可信赖性评价 281
14.8本章小结 282
参考文献 282
第三部分 过程管理与改进 287
第15章 软件缺陷预测与预防 287
15.1基于代码的缺陷预测 287
15.1.1基于代码行和复杂性的预测 287
15.1.2模块规模对缺陷的影响 288
15.1.3基于复杂度和修改情况的预测 288
15.1.4基于功能点的缺陷预测 288
15.1.5多变量的预测 290
15.2 BBN预测方法 290
15.2.1无回路有向图的条件概率计算 290
15.2.2建立软件开发活动的有向图 291
15.2.3细化子网图 292
15.2.4建立各结点的概率表 293
15.2.5实际效果 294
15.3基于过程能力的缺陷预测 294
15.3.1缺陷的产生与消除过程预测 294
15.3.2基于CMMI等级的能力的预测 296
15.4代码修改历史与缺陷 297
15.4.1代码搅动与缺陷预测 297
15.4.2突发修改的缺陷预测 298
15.5缺陷预防 299
15.6本章小结 301
参考文献 301
第16章质量管理与控制 303
16.1软件质量的来源 303
16.2软件质量的过程分解 304
16.2.1过程质量分解 304
16.2.2基于V模型的过程质量分解 307
16.2.3过程的标准化 308
16.3质量保证体系 309
16.3.1质量审查的计划性 309
16.3.2建立和运用SQA制度 310
16.3.3软件工厂中的SQA 311
16.4独立的质量管理 312
16.4.1 IV&V机制 312
16.4.2再问软件质量和可信法律证据 314
16.5质量统计技术 314
16.5.1质量成本 314
16.5.2缺陷来源和传播 316
16.5.3质量统计方法 317
16.6质量控制 318
16.6.1质量漂移与宽泛现象 318
16.6.2质量漂移的控制 319
16.6.3质量宽泛的控制 320
16.6.4质量控制能力基线及其应用 321
16.7本章小结 321
参考文献 321
第17章 项目组织与管理 323
17.1软件生产力 323
17.2软件生产率 324
17.2.1基本生产率定义 324
17.2.2生产率能力基线 325
17.2.3软件工程环境与生产率 325
17.2.4软件产品特征与生产率 326
17.3项目组织方式 327
17.3.1程序员与生产率 328
17.3.2首席程序员的组织方式 329
17.3.3矩阵式的组织方式 330
17.3.4基于开源软件的生产 330
17.4项目计划的制定 331
17.4.1项目策划过程 331
17.4.2 WBS分解 332
17.5产品规模估算 332
17.5.1基于LOC的估算 332
17.5.2基于FP的估算 332
17.5.3基于用例的估算 333
17.5.4经验估计模型 336
17.5.5 COCOMO估算方法 336
17.5.6简单的进度估算 338
17.5.7 Putnam方程 338
17.6进度和资源规划 339
17.6.1规模、工期、工作量与生产率的关系 339
17.6.2资源考虑 340
17.6.3任务和资源规划 340
17.6.4建立开发计划 341
17.7项目执行与跟踪 343
17.7.1进度跟踪 343
17.7.2进度跟踪的准确性 343
17.7.3挣值分析计算 344
17.8本章小结 345
参考文献 345
第18章 敏捷开发方法 347
18.1敏捷方法起因 347
18.2敏捷方法 348
18.2.1 XP方法 348
18.2.2 Scrum方法 349
18.2.3特征驱动的开发 351
18.2.4动力系统开发方法 352
18.2.5自适应软件开发 353
18.3开发过程的选取——水晶格家族 354
18.4 RUP过程 356
18.4.1 RUP过程的交替与迭代 356
18.4.2 RUP的项目生命周期 356
18.4.3 RUP的项目开发过程 357
18.4.4 RUP的支持过程 358
18.5开发方法的比较 358
18.5.1敏捷方法与传统方法对比 358
18.5.2对软件生命周期的支持 359
18.5.3敏捷方法的过程改进 360
18.5.4让敏捷方法融入CMMI 361
18.6本章小结 363
参考文献 363
第19章 软件配置管理 365
19.1软件配置管理的目的 365
19.2配置管理的内容 366
19.2.1项目开发过程中的配置项 366
19.2.2配置管理的基本内容 367
19.2.3 SCM的流程 368
19.2.4配置管理中的角色 369
19.3配置管理系统 370
19.3.1配置管理系统功能 370
19.3.2配置管理工具的发展 371
19.4对修改的管理 372
19.4.1版本修改的状态 372
19.4.2修改请求单 372
19.4.3修改的类型 373
19.4.4修改的跟踪 373
19.5版本管理 374
19.5.1版本的概念 374
19.5.2版本编号 375
19.5.3产品的建造过程 375
19.5.4具有外购部件的建造 376
19.6配置管理工作的度量 377
19.7本章小结 378
参考文献 378
第20章 过程改进与能力成熟度 380
20.1过程及其特征 380
20.1.1自然过程与社会过程 380
20.1.2过程的特征 380
20.2过程控制与改进简史 382
20.2.1统计质量控制的起源 382
20.2.2 Deming、Juran与日本工业的质量革命 383
20.2.3 Juran质量改进三步曲 384
20.2.4 Crosby的质量成熟度网格 385
20.3软件成熟度模型 386
20.3.1软件能力的分级模型 386
20.3.2 SW-CMM各等级的关键域 388
20.3.3 SW-CMM对过程特征的解释 389
20.3.4关键过程域的目标与模型应用 390
20.4集成的能力成熟度模型 391
20.4.1集成的成熟度模型原因 391
20.4.2 CMMI模型的发展历程 391
20.4.3 CMMI for Development的关键过程域 392
20.4.4过程改进的效果 393
20.5采购能力成熟度 394
20.5.1采购能力要求 394
20.5.2 采购能力成熟度模型 395
20.6服务能力成熟度 396
20.6.1服务质量 396
20.6.2 IT服务质量差距模型 397
20.6.3 CMMI-SVC模型 398
20.7 成熟度模型的对比 400
20.8本章小结 402
参考文献 402
第四部分 任务与安全关键行业软件工程化 407
第21章 国防系统软件开发过程 407
21.1总体与质量要求 407
21.1.1“爱国者”导弹拦截失败 407
21.1.2国防(装备)系统的特征 408
21.2 生命周期 408
21.3软件开发过程 410
21.3.1文档驱动的软件开发 410
21.3.2 过程各阶段的要求 412
21.4软件缺陷分类与处理 413
21.4.1缺陷的严重程度分类 413
21.4.2错误类型 414
21.5中间产品的质量评价 415
21.5.1文档模板及其作用 415
21.5.2中间产品质量评价的一般准则 415
21.5.3质量评价的附加准则 416
21.5.4系统分析和设计阶段的产品质量评价 417
21.5.5软件需求分析阶段的产品质量评价 418
21.5.6概要设计阶段的质量评价 418
21.5.7详细设计阶段的质量评价 419
21.5.8编码和单元测试阶段的质量评价 420
21.5.9 CSC集成和测试阶段的质量评价 420
21.5.10 CSCI集成和测试阶段的质量评价 421
21.6独立的工程质量活动 421
21.6.1 SQA的一般要求 422
21.6.2验收审查、安装和检验 422
21.6.3对子承包商的评价和管理 422
21.6.4对已有软件项的评价 423
21.6.5纠错体系 423
21.6.6开发过程的质量证据 423
21.6.7缺陷预防体系 424
21.7向支持阶段的转移 425
21.7.1转移过程 426
21.7.2部署使用和维护 426
21.8国防软件开发标准的演变 427
21.8.1美国国防工业界的标准演变 427
21.8.2中国国防工业界的标准情况 429
21.8.3德国的V模型及其演变 430
21.9本章小结 433
参考文献 433
第22章 航天空间领域软件过程 434
22.1阿丽安娜的教训 434
22.1.1阿丽安娜501的软件故障 434
22.1.2故障原因 435
22.1.3软件过程增强 436
22.2航天任务软件质量特征 437
22.2.1航天任务的要求 437
22.2.2软件质量和可信赖性 438
22.3软件与系统安全性 439
22.3.1安全关键软件定义 439
22.3.2软件用于控制灾难 439
22.3.3灾害的风险等级与控制方法 439
22.3.4将系统风险转换为软件风险 441
22.3.5安全活动的工作量 442
22.4欧洲空间局的软件开发过程 443
22.4.1软件开发文件族谱 443
22.4.2基本阶段、活动和里程碑 444
22.4.3软件生命周期 445
22.4.4原型的使用和抛弃 446
22.4.5需求变更处理 447
22.5中国载人航天的软件工程化 447
22.5.1载人航天软件特点与工程化要求 447
22.5.2软件工程化运动及思想转变 448
22.5.3软件开发过程模型 449
22.5.4文档编制要求与剪裁 450
22.5.5配置管理与质量保证体系建立 451
22.5.6独立验证与确认 452
22.5.7整体工程能力的提高 453
22.6本章小结 453
参考文献 453
第23章 民用航空领域软件过程 455
23.1引言 455
23.2总体要求 455
23.2.1民用航空的“故障-安全”设计理念 455
23.2.2航空系统灾难等级 456
23.2.3民用航空中的安全关键软件 457
23.2.4认证机制 458
23.3机载系统与设备软件的开发 459
23.3.1从系统到软件安全评估要求 459
23.3.2软件生命周期 460
23.3.3软件开发过程 461
23.3.4其他过程及各过程的关系 464
23.3.5认证的联络过程 466
23.3.6商业软件的认证 467
23.3.7基于RTOS的应用软件开发 468
23.4地面支持系统软件的开发 471
23.4.1地面支持系统的风险分析 471
23.4.2地面支持系统的安全等级 472
23.4.3 DO-278的基本要求 472
23.4.4 COTS的使用 473
23.5韩航801航班灾难 474
23.5.1 MSAW问题分析 474
23.5.2应吸取的教训——软件配置管理 475
23.5.3事后预防措施 476
23.6民航软件的新挑战 476
23.7本章小结 477
参考文献 477
第24章 铁路与机动车软件 480
24.1铁路系统的安全要求 480
24.1.1总体要求 480
24.1.2系统安全完整性等级 480
24.2铁路领域软件开发 481
24.2.1铁路安全软件原则与措施 481
24.2.2高安全应对措施——开发过程的标准化 481
24.2.3安全完整性等级划分 482
24.2.4软件生命周期与开发过程 483
24.2.5人员的职责和要求 484
24.3软件开发过程要求 485
24.3.1安全等级对文档的要求 485
24.3.2开发过程中的技术方法要求 486
24.3.3全面评估要求 487
24.4对应用数据配置的系统的增强 488
24.4.1工作过程与生命周期 488
24.4.2工作要求 489
24.4.3数据准备的增强 489
24.4.4软件开发过程的增强 489
24.5 “7.23”铁路重大事故 490
24.5.1事故调查 490
24.5.2事故性质与原因 490
24.5.3软件和硬件设计问题 490
24.5.4工程过程管理问题 491
24.5.5事故防范和整改措施建议 492
24.6机动车领域的软件安全 492
24.6.1总体要求 492
24.6.2汽车软件的特定需求 493
24.6.3软件给研发生产模式带来的改变 493
24.7机动车领域的软件开发 494
24.7.1软件生命周期与开发过程 494
24.7.2驾驶员行为因素分析 496
24.7.3安全完整性等级的分析 497
24.7.4各安全完整性等级对开发方法的要求 498
24.7.5软件质量策划 500
24.8机动车对软件工程的挑战 500
24.8.1能力与过程改进挑战 500
24.8.2软件体系结构创新 501
24.8.3开发和维护过程挑战 501
24.8.4成本控制挑战 502
24.9本章小结 502
参考文献 503
第五部分 网络、信息、开放、开源与复杂巨系统工程化 507
第25章 网络工程与软件工程 507
25.1电信网络的软件工程化 507
25.1.1电信网络的软件工程特征 507
25.1.2软件工程环境 508
25.1.3 SDL工程应用 509
25.1.4 CHILL语言 510
25.2包交换的网络工程 511
25.2.1电路交换、消息交换和包交换技术对比 511
25.2.2包交换通信的基本方法 513
25.2.3包交换网的要素和工程问题 514
25.3包结构设计例子——IPv4 515
25.3.1包结构的设计 515
25.3.2包的“存储-转发”过程 517
25.4互联网的工程化 518
25.4.1网络互联的需求 519
25.4.2网络互联的设计模型 519
25.4.3 DoD网络互联协议族设计 520
25.4.4工程验证与推广过程 521
25.4.5互联网工程中的软件工程 522
25.5互联网体系结构及其进化 523
25.5.1互联网的问题 523
25.5.2体系结构进化 525
25.5.3覆盖层模式的定义 525
25.5.4覆盖层模式应用 526
25.6网络进化等对软件工作者的挑战 528
25.6.1网络融合的挑战 528
25.6.2互联网的发展与管理权 529
25.7本章小结 530
参考文献 530
第26章 信息系统软件工程化 532
26.1信息系统危机 532
26.2信息系统质量 533
26.2.1信息系统质量分解 533
26.2.2信息系统质量模型 534
26.3信息系统生命周期与建设过程 535
26.3.1信息系统生命周期 535
26.3.2信息系统的建设过程 536
26.3.3过程中的角色和任务 537
26.4信息系统性能模型的建立 539
26.4.1影响信息系统性能的因素 539
26.4.2测试环境与真实环境差异分析 539
26.4.3真实使用场景分析 540
26.4.4性能模型的建立 542
26.4.5性能模型确认过程 542
26.5性能评估的例子 543
26.5.1基本功能和性能模型 543
26.5.2单个业务追踪——T1 544
26.5.3单个业务追踪压力测试——T2 545
26.5.4多用户压力测试——T3 546
26.5.5确认和问题分析 546
26.6性能能力库的建立和使用 548
26.6.1性能分析报告 549
26.6.2建立和使用性能库 551
26.7信息系统失败案例——伦敦救护车服务系统 553
26.7.1系统简述 553
26.7.2系统失败原因分析 553
26.8信息系统安全 555
26.8.1不安全的来源 555
26.8.2“瑞士奶酪”原理用于信息安全 556
26.9本章小结 559
参考文献 559
第27章 开放与开源工程 561
27.1软件价值链 561
27.1.1软件产品与服务 561
27.1.2价值链条 561
27.1.3竞争与合作 562
27.2产业联盟 563
27.2.1软件联盟的优势 563
27.2.2联盟的组织形式 563
27.2.3产业联盟的例子 564
27.3虚拟组织 565
27.4开源工程 566
27.4.1闭源、自由与开源 566
27.4.2 F/OSS项目组织 568
27.4.3 F/OSS过程 569
27.4.4 F/OSS的文化 570
27.4.5 F/OSS的进化 571
27.5 F/OSS的质量保证 572
27.5.1与闭源项目的质量管理对比 572
27.5.2质量管理 573
27.5.3可信性观点 574
27.5.4质量控制 575
27.6政府与开源 576
27.6.1开源与开放的优势 576
27.6.2开源与开放的维护策略 576
27.6.3政府和产业联盟的作用 577
27.7全球化软件工程 578
27.7.1 GSE的基本形式——离岸与外包 578
27.7.2全球化软件开发过程 579
27.7.3 CMMI与全球软件化开发 581
27.8本章小结 581
参考文献 581
第28章 软件复杂巨系统的工程化 584
28.1复杂巨系统 584
28.1.1系统分类 584
28.1.2复杂巨系统定义 585
28.1.3简单集成与创新集成 585
28.2多系统的系统(SoS) 586
28.2.1 SoS定义 586
28.2.2 SoS的例子:电信运营系统 586
28.2.3 SoS的特征 587
28.2.4 SoS的工程模型 587
28.2.5增量承诺模型(ICM) 590
28.3 SIS与超大规模SIS 592
28.3.1 SIS的定义 592
28.3.2 SIS的应用场景 593
28.3.3 SIS的工程化挑战 593
28.3.4超大规模SIS 594
28.4软件复杂巨系统的工程化 595
28.4.1软件复杂巨系统 595
28.4.2一些国家的工程化举措 596
28.4.3工程方法的不足 597
28.5重新定义软件工程 598
28.5.1 IT生态系统 598
28.5.2软件工程的内涵随时间而变 599
参考文献 600
附录A缩略语表 603