9. 软件可靠性基础知识
1 软件可靠性基本概念
1.1 软件可靠性定义
- 软件可靠性:在规定条件下,软件执行规定功能的能力。
- 特点
- 复杂性:软件内部逻辑复杂。
- 物理退化:硬件失效影响。
- 唯一性:软件唯一,无替代品。
- 版本更新较快。给软件可靠性评估带来较大的难度。
1.2 软件可靠性的定量描述
1.2.1 规定时间
- 定义:自然时间、运行时间、执行时间。
- 公式:。
1.2.2 软件失效概率
- 定义:软件失效的概率。
- 公式:。
1.2.3 可靠度
定义:软件在规定时间内不失效的概率。
1.2.4 失效强度
定义:单位时间内软件系统出现失效的概率。
1.2.5 平均失效时间
定义:系统平均失效前的平均工作时间。
1.2.6 平均恢复前时间
定义:平均恢复到修复成功的时间。
1.2.7 平均故障间隔时间
定义:两次故障间的平均时间。
1.3 可靠性目标
- 定义:软件缺陷对软件运行的影响程度。
- 影响:成本、修复和恢复成本、现有或潜在的业务机会损失。
- 划分:按成本影响和对系统能力的影响。
按照成本影响划分失效严重程度类
- 成本 > 100 万元:1
- 10 万元 < 成本 ≤ 100 万元:2
- 1 万元 < 成本 ≤ 10 万元:3
- 0.1 万元 < 成本 ≤ 1 万元:4
- 成本 < 0.1 万元:5
失效影响系统能力的影响划分失效严重程度类
- 部分操作无响应,但可用其他操作方式替代:1
- 用户重复操作无响应,可恢复:2
- 系统出错停止响应,重要数据可恢复:3
- 系统崩溃,重要数据不可恢复:4
1.4 可靠性测试的意义
- 软件失效可能造成灾难性的后果。
- 软件的失效在整个计算机系统失效中的比例较高
- 相比硬件可靠性技术,软件可靠性技术很不成熟,这就加剧了软件可靠性问题的重要性。
- 与硬件元器件成本急剧下降形成鲜明对比的是,软件费用呈有增无减的势头,而软件可靠性问题是造成费用增长的主要原因之一。
- 软件对生产活动和社会生活的影响越来越大,从而增加了软件可靠性问题在软件工程领域乃至整个计算机工程领域的重要性。
1.5 广义的可靠性测试与狭义的可靠性测试
广义的软件可靠性测试是指为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试。
狭义的软件可靠性测试是指为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。狭义的软件可靠性测试也叫“软件可靠性试验”(Software Reliability Test), 它是面向缺陷的测试。
可靠性测试的目的可归纳为以下 3 个方面。
- 发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷。
- 为软件的使用和维护提供可靠性数据。
- 确认软件是否达到可靠性的定量要求。
2 软件可靠性建模
2.1 影响软件可靠性的因素
- 运行剖面(环境):软件可靠性定义是相对运行环境而言的。
- 软件规模:软件规模越大,可靠性越低。
- 软件内部结构、结构对软件可靠性的影响:内部结构越复杂,软件可靠性越低。
- 开发方法和开发环境:开发方法影响软件可靠性。
- 软件的可靠性投入。
2.2 软件可靠性的建模方法
- 模型假设
- 代表性假设:软件失效独立发生。
- 性能度量。
- 软件可靠性模型的输出量就是性能度量,如失效强度、残留缺陷数等。在软件可靠性模型中性能度量通常以数学表达式给出。
- 参数估计方法
- 估计参数值。
- 数据要求
- 一个软件可靠性模型要求一定的输入数据,即软件可靠性数据。不同类型的软件可靠性模型可能要求不同类型的软件可靠性数据。