1.1 计算机软件的“虫灾” 1
第1章 绪论 1
1.2 软件可靠性发展史 3
第2章 软件质量及可靠性的基本概念 6
2.1 软件及软件工程 6
2.1.1 软件的定义 6
2.1.2 软件工程 7
2.1.3 产品生存期 7
2.1.4 软件生存期 8
2.2 软件的质量 9
2.2.1 产品的质量 9
2.2.2 软件的质量要素 10
2.2.3 软件的质量属性 11
2.3 软件可靠性的基本概念 13
2.3.1 软件可靠性的定义 13
2.2.4 McCall三层次质量度量模型 13
2.3.2 软件可靠性的基本数学关系 15
2.3.3 软件可靠性工程 17
2.3.4 软件的安全性、可用性和健壮性 18
2.3.5 硬件和软件的可靠性特征 19
2.4 软件错误、软件故障及软件失效 20
2.4.1 有关术语的定义 20
2.4.2 软件错误发生的原因 22
2.4.3 Goel软件错误的分类方法 24
2.4.4 Thayer软件错误的分类方法 25
2.5 软件可靠性模型的概念 26
2.5.1 可靠性结构模型和可靠性预计模型 26
2.5.2 可靠性模型的作用 26
2.5.3 软件开发中可靠性模型应用案例 27
2.5.4 软件可靠性预计模型的类型 29
2.5.5 软件可靠性预计模型的正确使用 30
3.1.1 设计过程分析 32
第3章 软件的可靠性设计 32
3.1 基本策略 32
3.1.2 可靠性设计的四种类型 33
3.1.3 Myers设计原则 34
3.1.4 科学的工作方法 34
3.2 需求分析 35
3.2.1 任务及方法 35
3.2.2 制定指标 37
3.3 概要设计和详细设计 39
3.3.1 系统的层次结构 39
3.3.2 模块化 40
3.3.3 变换型和事务型系统结构 41
3.3.4 详细设计的图形工具 43
3.3.5 结构化程序设计 45
3.4 查错和改错设计 45
3.4.1 被动式错误检测 46
3.4.3 改错设计 49
3.4.2 主动式错误检测 49
3.5 容错设计 50
3.5.1 N文本法 50
3.5.2 恢复块法 52
3.5.3 接收检测设计 53
3.6 案例分析:阿丽亚娜5型火箭软件设计的反思 55
第4章 软件测试 57
4.1 软件测试的基本原则 57
4.1.1 软件测试技术分类 57
4.1.2 渐进测试策略 58
4.1.3 VOCAL测试策略 59
4.1.4 综合测试方法 60
4.1.5 案例设计策略 62
4.1.6 Myers测试经验汇集 64
4.2 静态测试 65
4.2.1 代码(桌面)检查 66
4.2.2 走查 67
4.2.3 形式化分析 68
4.3 结构测试 68
4.3.1 覆盖要求 68
4.3.2 程序路径数 69
4.3.3 测试案例选择 76
4.4 功能测试 76
4.4.1 测试案例选择 76
4.4.2 随机输入测试 78
4.4.3 验收标准 78
4.5 软件排错 80
4.5.1 错误定位 80
4.5.2 改正错误 81
4.5.3 排错技术 81
4.6 软件测试技术评价及现状 82
4.6.1 对测试技术的评价 82
4.6.2 利用测试评价软件开发技术 83
4.6.3 软件测试面临的问题 84
第5章 软件可靠性预计模型 86
5.1 JELINSKI-MORANDA模型 86
5.1.1 基本假设 86
5.1.2 基本公式 86
5.1.3 参数的最大似然估计 87
5.1.4 参数的最小二乘估计 89
5.1.5 模型的极限条件 90
5.1.6 FC型J-M模型 91
5.1.7 应用案例 92
5.2 几何递减模型 93
5.2.1 基本假设 93
5.2.2 基本公式 93
5.2.3 参数的最大似然估计 93
5.2.4 参数的最小二乘估计 94
5.2.6 模型的极限条件 95
5.2.5 FC型几何递减模型 95
5.3 S-W模型 96
5.3.1 基本假设 96
5.3.2 基本公式 97
5.3.3 参数的最大似然估计 97
5.3.4 参数的最小二乘估计 98
5.3.5 FC型S-W模型 98
5.3 6 模型的极限条件 99
5.4 SHOOMAN模型 99
5.4.1 基本假设 99
5.4.2 基本公式 100
5.4.3 参数的矩估计 100
5.4.4 参数的最大似然估计 100
5.5 MUSA执行时间模型 101
5.5.1 基本假设 101
5.5.2 基本公式 102
5.5.3 模型的参数估计及极限条件 103
5.5.4 资源耗用模型 105
5.5.5 应用案例 106
5.6 G-O非齐次Poisson过程模型 106
5.6.1 基本假设 106
5.6.2 基本公式 107
5.6.3 参数的最大似然估计 108
5.6.4 参数的最小二乘估计 109
5.6.5 假设检验 110
5.6.6 软件的最优交付时间 111
5.6.7 三参数G-O模型 112
5.6.8 应用案例 115
5.7 Littlewood贝叶斯排错模型 115
5.7.1 基本假设 115
5.7.2 基本公式 116
5.7.4 参数的最小二乘估计 117
5.7.3 参数的最大似然估计 117
5.8 Nelson模型 118
5.9 错误植入模型 121
5.9.1 基本公式及点估计 121
5.9.2 区间估计 122
5.9.3 模型与时间变量 124
5.10 非线性回归预计法 125
5.10.1 指数函数模型 125
5.10.2 Weibull函数模型 127
第6章 软件与硬-软件复合系统结构模型 130
6.1 系统结构分解 130
6.2 串行系统结构模型 132
6.3 并行系统结构模型 133
6.3.1 串联配置系统 133
6.3.3 k/n配置系统 134
6.3.2 并联配置系统 134
6.3.4 共同原因失效 135
6.3.5 时间基准 136
6.3.6 应用案例 138
6.4 分布式系统及冗余系统 142
6.4.1 分布式系统简化分析法 142
6.4.2 备用冗余系统 143
6.5 硬-软件复合系统结构预计方法 144
6.5.1 预计目的 144
6.5.2 预计途径 144
6.5.3 软件模块固有可靠性特征的预计方法 145
6.5.4 开发特征 146
6.5.5 模块可靠性预计 147
6.5.6 软件系统的可靠性 149
6.5.7 应用案例 150
7.1.2 软件系统的安全性工作 152
7.1.1 软件系统安全性工作的意义 152
7.1 概述 152
第7章 软件系统安全性分析 152
7.1.3 软件安全性分析所需的信息 153
7.2 软件系统安全性分析项目 153
7.3 软件安全性设计准则 155
7.3.1 安全设计 156
7.3.2 程序运行 156
7.3.3 软件安全关键单元 157
7.3.4 接口设计 157
7.3.5 操作员接口 158
7.3.6 软件安全关键单元的识别 158
7.3.7 编码 158
7.3.8 测试 159
7.4 软件失效模式、效应及危害度分析法 159
7.4.1 Reifer关于SFMEA的论述 159
7.4.2 SFMEA的新进展 161
7.4.3 软件FMEA中的失效模式、影响及严重性分类方法 162
7.5 嵌入式软件的FMEA分析法 167
7.5.1 计算机控制系统的结构和特征 167
7.5.2 嵌入式计算机控制系统的特征 167
7.5.3 嵌入式计算机软件的可靠性特征 169
7.5.4 嵌入式软件的软硬件综合FMEA分析方法 170
7.5.5 嵌入式测速装置软硬件综合FMEA分析(案例之一) 170
7.5.6 粮食自动装载传输系统(案例之二) 172
7.6 软件故障树分析法 174
7.6.1 故障树的逻辑关系 174
7.6.2 危险分析 175
7.6.3 构造故障树 176
7.6.4 故障树分析实例 179
7.6.5 软件故障树分析法的用途 181
7.7 软件潜藏分析法 182
7.7.1 硬件潜藏回路分析方法简介 182
7.7.2 软件网络树的构造 184
7.7.3 拓扑识别 185
7.7.4 线索表的应用 186
7.8 软件的Petri网分析法 187
7.8.1 Petri网的基本理论 187
7.8.2 时间Petri网的安全性分析方法 189
第8章 程序的复杂性与可靠性分配 191
8.1 概述 191
8.2 Halstead复杂性度量 192
8.3 Thayer复杂性度量 195
8.3.1 逻辑复杂性 196
8.3.2 接口复杂性 196
8.3.5 可读性 197
8.3.7 复杂性与软件错误的关系 197
8.3.6 分程序的复杂性 197
8.3.4 输入输出复杂性 197
8.3.3 计算复杂性 197
8.4 图论复杂性度量 201
8.4.1 图的性质 201
8.4.2 程序流图与McCabe复杂性度量 203
8.4.3 节点复杂性 203
8.5 软件的可靠性分配 205
8.5.1 可靠性分配的目的和要求 205
8.5.2 软件可靠性分配的基本关系式 206
8.5.3 复杂性系数计算方法 207
第9章 软件维护 209
9.1 软件维护的基本概念 209
9.1.1 生存期层面上的软件维护 209
9.1.2 技术层面上的软件维护 209
9.1.3 软件的可维护性 209
9.1.4 软件可维护性与硬件维修性的区别 209
9.1.6 软件维护分类 210
9.1.5 软件维护的重要意义 210
9.2 软件维护的实施 211
9.2.1 软件维护工作内容 211
9.2.2 影响软件维护工作的因素 211
9.3 逆向工程和再工程 212
9.3.1 逆向工程 212
9.3.2 再工程 213
9.3.3 逆向工程和再工程在软件维护中的作用 213
9.4 软件维护的忧患 213
9.4.1 传统难题 213
9.4.2 新的挑战 214
第10章 软件的质量保证 216
10.1 ISO 9000系列标准对软件质量管理和质量保证的要求 216
10.1.1 ISO 9000系列标准简介 216
10.1.2 ISO 9000-3的主要内容 217
10.2 国军标GJB-439对软件质量保证的要求 218
10.1.3 2000版ISO 9000族标准与软件的质量保证 218
10.2.1 管理 219
10.2.2 文档 219
10.2.3 评审与审查 220
10.2.4 其他条款 220
10.3 软件能力成熟度模型 221
10.3.1 软件过程完善程度的框架 221
10.3.2 关键过程 222
10.3.3 CSCMM模型 223
10.4 国外软件质量保证的经验和案例 225
10.4.1 Whited关于软件保证的实践 225
10.4.3 日立公司软件质量评估系统 235
10.4.2 Knight关于软件质量保证机构的见解和经验 239
10.4.4 结果及讨论 239
附表1 正态分布分位数表 241
附表2 检验的临界值(Dn,g)表 242
附表3 错误植入模型区间估计表 244