可靠性增长模型
可靠性增长建模
可靠性增长模型是对系统可靠性如何在整个测试过程中随时间推移而演变的模拟。当识别出系统故障时,会纠正导致这些故障的潜在缺陷,并且通过系统测试和调试,系统的可靠性应该会提高。接下来,必须将概念上的可靠性增长模型转换为数学模型,以便预测可靠性。
可靠性增长建模需要将不同时间段观察到的可靠性与显示可靠性潜在变化的已知函数进行比较。例如,一个等步长函数意味着系统的可靠性随着每次发布线性增长。通过将观察到的可靠性增长与其中一个函数进行比较,可以预测系统在未来某个时间点的可靠性。因此,可靠性增长模型可用于帮助项目规划。
可靠性增长模型组通过测试来衡量和预测可靠性程序的改进。增长模型将系统的可靠性或故障率描述为时间或测试用例数量的函数。此类别中的模型如下所示。
Coutinho 模型
在对数-对数图纸上,Coutinho 绘制了已识别缺陷的累积数量和采取的纠正措施的数量与累积测试周数的关系。令 N(t) 表示故障总数,t 表示整个测试持续时间。模型的故障率 λ(t) 可以表示为:
$$\mathrm{λ_{(t)} =\frac{N(t)}{t}= β_{0}t^{-β1}}$$
其中 $β_{0}$ 和 $β_{1}$ 是模型参数。可以使用最小二乘法估计此模型的参数。
Wall 和 Ferguson 模型
时间 t 处的故障总数 m(t) 可以写成:
$$\mathrm{m_{(t)} = a_{0}[b(t)]^{3}}$$
其中 alpha0:和 alpha1:是未知参数。可以使用测试用例数或总测试时间来计算函数 b(t)。同样,在时间 t 处,故障率函数由下式给出:
$$\mathrm{λ_{(t)} = m^{'(t)} = a_{0}βb^{'(t)[b(t)]^{β-1}}}$$
Wall 和 Ferguson 使用各种软件故障数据评估了他们的模型,并发现故障数据与模型高度相关。
可靠性和增长模型受到批评
可靠性增长建模领域似乎面临着与所谓的历史主义相同的根本问题,即哲学问题。波普尔认为,长期预测不能应用于我们所有人都在其中纠缠的社会结构。而且,“明智的做法是立即逐一解决最紧迫和最真实的社会问题”
当我第一次遇到可靠性增长模型时,我感到有必要将波普尔的证伪性、确证性和简单性原则应用于它们。以下是根据其预测能力和促进错误学习的能力对可靠性增长模型进行评估。这是根据波普尔的标准和使用统计分析完成的。必须解决以下问题:非常复杂的可靠性增长模型的预测能力是什么?这项工作是否物有所值,或者它是否具有欺骗性?可靠性增长模型能教会我们什么?哪些方法(如果有)更适合软件工程师的工作?
可靠性增长模型的益处
经典的可靠性假设得到了广泛的支持:大量的时间和精力都投入到收集、分类和分析硬件组件的故障率统计数据(Shooman,1990)。在特定条件下,硬件组件的寿命周期(首次故障发生的时间)可以建模为指数分布的随机变量。故障时间大于 t 的概率定义为某个物品(组件或系统)的可靠性函数 R(t)。此函数由 R(t) = 提供,其中故障率 l 为常数。
现在让我们考虑一个存在某些错误的程序。假设操作配置文件恒定,则可以预期恒定的故障率 l。可靠性函数看起来类似于上面显示的硬件故障函数。
有一个重要的区别:故障现在被视为一个不导致永久缺陷的易变事件。该缺陷从一开始就存在。
我们预计会进行一些故障排除工作。因此,会出现一个新的和意想不到的故障率。从一开始,似乎就无法实现基于以往经验评估故障率。
该怎么办?我们可以尝试通过自己的努力摆脱这些困境。每个所谓的可靠性增长模型 (RGM) 都基于关于故障消除如何导致故障率变化的某些假设。
此假设是相应模型的核心。它旨在传达 RGM 的经验实质。
一个常见的假设是 Jelinski-Moranda 模型(Lyu,1996):通过消除缺陷,所有故障的故障率都会降低一个恒定值。
主要问题是这些假设是否可以得到验证。
微不足道的可靠性预测
“微不足道的预测”是天气预报中使用的一种策略:明天的天气将与今天相同。这种小小的预测具有一定的预测能力。我很好奇一个简单的可靠性增长模型是否可以根据统计标准与更复杂的模型竞争。
下一个微不足道的可靠性预测 (TRP) 模型不对可靠性增长做出任何假设。它适用于具有固定故障率的系统。在此前提下,可以使用过去故障之间的时间来计算平均故障间隔时间或其倒数故障率:使用最近的 - 例如五次或十次 - 连续故障之间的执行时间的平均值来确定平均故障间隔时间。
TRP 是一种简单的模型,通常用于硬件可靠性。它具有任何公认理论都应该具有的所有组成部分 -
该概念易于理解,任何工程师都能够看到其局限性。
模型的适用性假设得到了很好的理解。
使用泊松分布,可以轻松确定估计的精度 - 所谓的置信区间。
我们为什么将 TRP 与假设可靠性增加的更详细的模型进行竞争,因为我们知道它是在可靠性不变的前提下做出的?我们不知道在消除缺陷时故障率如何变化。系统可能会发生重大变化,变得更好或更糟。但是,假设根本没有变化似乎是可以接受的,因为故障消除对系统可靠性的影响很小。
波普尔的标准
可靠性增长模型旨在根据以往经验预测软件行为。在这种情况下,以往经验依赖于历史数据;预测无法通过试验进行验证。
知识是合成的(或经验性的),因为它涉及一些并非先验有效的假设,必须通过经验来验证。它在那些仅依赖逻辑推理和数学的章节中是分析性的。波普尔 (1980) 对预测技术的合成或经验实质(方法的预测强度)的标准如下 -
可证伪性:无论预测价值(或预测能力)如何,没有任何预测技术在所有情况下都是正确的。必须有失败的可能性。诸如“明天这里会下雨或不会下雨”之类的陈述不被认为是经验性的,因为无法对其进行争论。
确证 - 当(可证伪的)预测技术的预测价值已在各种情况下得到证明时,则认为该预测技术得到了确证。
客观性 - 预测和断言是客观的,因为它们可以进行主体间测试。
简单性 - 预测技术不应依赖于太多可更改的变量。因为否则,它的证伪规避就太简单了,其预测价值也过低。
从波普尔标准看可靠性增长模型
在公正性方面,可靠性增长模型(RGM)并不比其他预测方法差。然而,在我看来,RGM未能满足波普尔的所有标准。
波普尔的证伪标准不能用于可靠性增长模型。这主要是由于模型和参数的多样性,使得几乎不可能找不到一个与某些给定的实验或现场数据相符的模型。
因此,这些模型未能满足简单性的标准。“简单”在这种情况下并不意味着“易于理解”。在某些平面点上进行(基本)直线拟合比这些点可以用更高阶曲线(不简单)来近似的事实更具有说服力和经验力。
因此,这些模型无法得到证实(从波普尔的意义上来说)。在我迄今为止看到的所有模型演示中,模型都是事后选择并拟合到数据的。基于这些模型,我不知道有任何可证伪且非平凡的软件可靠性预测技术。