第1章 绪论 1
1.1 软件可靠性工程研究和实践的意义 1
1.2 软件可靠性对系统可靠性的影响 3
1.3 软件可靠性工程的基本问题 5
1.3.1 软件为什么失效 5
1.3.2 如何开发可靠的软件 5
1.3.3 如何检验软件可靠性 6
1.4 软件可靠性工程框架 6
1.4.1 软件可靠性工程过程模型 7
1.4.2 软件可靠性过程活动及其关系 8
1.5 软件可靠性工程进展 11
1.5.1 软件可靠性模型的发展历程 11
1.5.2 软件可靠性工程现状及其进展 13
第2章 软件可靠性工程基础 17
2.1 基本概念 17
2.1.1 软件可靠性 17
2.1.2 软件可靠性工程 19
2.1.3 软件错误、缺陷及故障 20
2.1.4 软件失效 31
2.1.5 时间 32
2.1.6 运行剖面 34
2.2 软件与硬件的区别 35
2.2.1 软件生命周期及其过程与硬件的差别 36
2.2.2 软件和硬件在可靠性方面的异同 36
2.2.3 导致软件和硬件可靠性差别的主要原因 38
2.3 软件可靠性因素 39
2.3.1 运行剖面 40
2.3.2 软件规模 40
2.3.3 软件结构 40
2.3.4 软件可靠性设计 40
2.3.5 软件测试 40
2.3.6 软件工程化管理与软件可靠性工程管理 41
2.3.7 软件开发技术、方法和工具 41
2.3.8 人员 42
2.4 软件失效机理 42
2.5 X-系统失效机理 44
2.5.1 X-系统的失效行为 44
2.5.2 X-系统失效示例 47
第3章 软件可靠性建模 49
3.1 软件可靠性建模的基本思想及基本问题 49
3.1.1 基本思想 49
3.1.2 基本问题 50
3.2 软件可靠性模型特征及评价 51
3.2.1 特征 51
3.2.2 评价 52
3.3 模型分类与模型假设 57
3.3.1 模型分类 57
3.3.2 模型假设 62
3.4 随机过程类模型 64
3.4.1 Markov过程模型 64
3.4.2 非齐次Poission过程模型 69
3.4.3 Musa模型 80
3.4.4 超几何分布模型及参数估计 87
3.5 非随机过程类模型 90
3.5.1 J-M模型参数的Bayes推导 92
3.5.2 Bayes经验Bayes模型 93
3.5.3 Littlewood-Verrall模型 94
3.5.4 Bayes理论应用于J-M模型 96
3.5.5 Nelson模型 100
3.5.6 错误植入模型 103
3.6 基于构件的软件可靠性模型 108
3.6.1 基于构件软件的可靠性分析 109
3.6.2 基于构件软件中的函数 110
3.6.3 基于构件软件的可靠性通用模型—构件概率迁移图 111
3.6.4 通用模型实例化及可靠性估计方法 111
3.6.5 基于构件的软件可靠性分析流程 113
3.7 模型的比较、选择及合并 113
3.7.1 比较、选择准则 113
3.7.2 模型选择 114
3.7.3 模型合并 114
第4章 软件可靠性度量 116
4.1 软件可靠性度量的目的 116
4.2 软件质量度量 117
4.2.1 软件质量 117
4.2.2 软件质量要求 117
4.2.3 软件度量对象 118
4.2.4 软件度量分类 119
4.2.5 不同度量类型之间的关系 123
4.2.6 软件度量标度 123
4.3 软件可靠性度量体系选取准则 126
4.4 软件可靠性的度量过程 127
4.5 软件可靠性度量模型及常用度量 128
4.5.1 软件质量模型 128
4.5.2 软件可靠性度量模型 129
4.5.3 故障、失效分类统计 135
4.5.4 常用软件可靠性度量 135
4.6 产品度量 139
4.6.1 需求分析阶段 139
4.6.2 概要设计阶段 141
4.6.3 详细设计阶段 143
4.6.4 编码实现阶段 144
4.6.5 软件测试阶段 145
4.6.6 验收与交付阶段 146
4.7 软件复杂性度量 147
4.7.1 单元复杂性 147
4.7.2 结构复杂性 153
4.7.3 总体复杂性 155
4.7.4 详细设计简明度的设计结构度量 156
4.8 过程度量 157
4.8.1 需求分析阶段 157
4.8.2 概要设计阶段 157
4.8.3 详细设计阶段 158
4.8.4 实现阶段 158
4.8.5 测试阶段 158
4.8.6 验收与交付阶段 158
第5章 软件可靠性要求的制定与分配 160
5.1 软件可靠性要求 160
5.1.1 定性要求 160
5.1.2 定量要求 161
5.2 软件可靠性分配 165
5.2.1 分配目的 165
5.2.2 分配条件 165
5.2.3 分配原则 166
5.2.4 分配方法 167
5.2.5 软件可靠性分配流程 173
5.2.6 分配方法的比较和选择 174
5.3 软件可靠性预计 175
5.4 软件可靠性分配与预计的关系 175
第6章 软件可靠性设计 176
6.1 概述 176
6.1.1 软件可靠性设计的目的和意义 176
6.1.2 Myers设计原则 176
6.1.3 软件可靠性设计分类 177
6.2 软件可靠性设计过程活动 178
6.2.1 软件设计过程分析 178
6.2.2 软件可靠性工程活动 179
6.2.3 需求获取 179
6.2.4 需求分析 181
6.2.5 软件设计 185
6.3 避错设计 187
6.3.1 软件需求工程 187
6.3.2 软件设计 191
6.3.3 编码实现 197
6.3.4 软件可靠性设计准则 200
6.3.5 实时操作系统的可靠性、安全性设计 212
6.3.6 健壮性设计 217
6.3.7 简化设计 219
6.3.8 重入和并发 219
6.3.9 结构冲突与回溯 224
6.4 查错设计 224
6.4.1 被动式错误检测 224
6.4.2 主动式错误检测 227
6.4.3 软件在线自检 227
6.5 纠错设计 229
6.6 容错设计 230
6.6.1 概念 230
6.6.2 软件容错中的故障表示 231
6.6.3 软件容错的基本活动 233
6.6.4 容错软件的基本结构 235
6.6.5 软件冗余设计 236
第7章 软件可靠性分析 243
7.1 概述 243
7.2 故障树分析 243
7.2.1 故障树分析的目的 244
7.2.2 概念及符号 245
7.2.3 故障树的数学描述 247
7.2.4 软件故障树分析方法 251
7.2.5 软件故障树分析应用 256
7.3 软件失效模式与影响分析 262
7.3.1 失效模式与影响分析 262
7.3.2 FMEA实施步骤 263
7.3.3 软件FMEA 264
7.3.4 嵌入式软件的软硬件综合FMEA分析 272
7.4 软件潜藏分析 272
7.4.1 硬件潜藏回路分析简述 272
7.4.2 软件网络树的构造 273
7.4.3 拓扑识别 275
7.4.4 线索表的应用 276
7.5 Petri网分析 276
7.5.1 Petri网 276
7.5.2 Petri网的基本理论 277
7.5.3 时间Petri网的安全性分析方法 279
7.5.4 反向Petri网 279
7.5.5 Petri网实例 280
第8章 软件可靠性测试 284
8.1 概述 284
8.1.1 概念 284
8.1.2 软件可靠性测试与常规测试的区别 285
8.1.3 软件可靠性测试的必备条件 287
8.2 V模型 287
8.2.1 多V模型 287
8.2.2 多V模型中的可靠性测试活动 288
8.2.3 嵌套多V模型 288
8.3 测试策略与模型选择 289
8.3.1 一种理想化的情况 289
8.3.2 完全随机的测试策略 290
8.3.3 混合测试策略 291
8.3.4 非均匀测试 291
8.3.5 最小测试集的确定方法 291
8.4 测试环境 292
8.4.1 仿真测试环境 293
8.4.2 真实环境 294
8.4.3 可靠性测试环境构建 295
8.5 测试流程 295
8.5.1 运行剖面制定 296
8.5.2 测试方案制定 296
8.5.3 测试准备 297
8.5.4 测试执行 297
8.5.5 测试评估 297
8.6 软件可靠性增长测试 297
8.6.1 软件可靠性增长预计及评估 297
8.6.2 测试程序 301
8.6.3 基于故障树分析的可靠性增长测试 302
8.7 软件可靠性验证测试 305
8.7.1 无失效执行时间验证测试 305
8.7.2 定时可靠性验证测试 305
8.7.3 序贯验证测试 307
8.7.4 验证测试方案 310
8.8 可靠性测试的充分性 310
8.8.1 软件可靠性验证测试充分性准则 310
8.8.2 可靠性增长测试充分性准则 311
第9章 软件可靠性工程管理 312
9.1 软件可靠性工程管理知识领域定义 312
9.2 软件可靠性计划 313
9.2.1 目标 313
9.2.2 要求 313
9.2.3 软件可靠性计划的主要内容 314
9.2.4 软件可靠性工作项目 315
9.2.5 软件生命周期过程不同阶段与可靠性工作项目的关系 316
9.2.6 软件可靠性工作计划 317
9.3 文档管理 318
9.3.1 文档的作用 318
9.3.2 软件规模及其可靠性、安全关键等级 319
9.3.3 文档齐套性 320
9.3.4 软件开发过程文档编制 321
9.3.5 文档剪裁与合并 321
9.4 对分承制方的监督与控制 322
9.5 软件可靠性评审 323
9.5.1 软件评审的分级管理 323
9.5.2 评审中的可靠性要求 323
9.6 软件故障报告、分析和纠正措施系统 324
9.6.1 问题报告 324
9.6.2 软件问题影响分析 325
9.6.3 纠正措施 325
9.7 软件可靠性数据 325
9.7.1 软件可靠性数据的要求与内容 326
9.7.2 软件可靠性数据分类 327
9.7.3 可靠性测试数据的统计特征 328
9.7.4 软件可靠性数据的收集方法和过程 328
9.7.5 数据收集过程的自动实现 330
参考文献 332