早期的预测模型是黑盒模型,它使用软件开发流程各个阶段(包括需求分析、测试和收集信息)的特征来预测软件的行为。比如美国的RADC模型,借助于一些难以描述的真实关系来预测大量数据源下的软件可靠性。它的优点在于不同故障密度参数之间的转变是相当明确的,因而它的预测数据可以借助于一些常用常用软件的失效数据来建立。但它仍然有一些缺陷:1)不能保证所有的错误都能被发现;2)在早期软件生命周期阶段获得的数据能用来预测故障密度,但很难用来计算故障概率。
在众多模型中,软件可靠性增长模型(SRGMs)得到了相当多的研究人员的注意。到目前为止,他们已经提出了多种软件可靠性增长模型,例如Jelinski-Moranda模型、NHPP模型、Musa模型、S-Shaped模型等等。所谓的软件可靠性增长指的是,在软件开发的测试阶段,通过不断地检测并排除软件故障来提高软件可靠性[4]。在传统的软件可靠性增长模型中,有一些假设是不合理也不现实的。比如,假设能够在纠正已有错误的同时不引入新的错误。另外,从众多的模型中选择一个最好的模型,这一过程是相当花时间的,而且一点也不实用。更重要的是,软件可靠性增长模型尽管能够很好地拟合历史数据,但在预测软件错误这方面作用寥寥。
研究人员为了解决上述问题,提出了很多方法。这些方法大多基于贝叶斯网络、神经网络、时间序列建模或者是不同模型的组合模型。
2.3 基于时间序列的软件可靠性建模
时间序列[5]:从统计学角度上说,将某一变量 在不同时间节点上的取值,按照时间先后排列而成的数列 称为时间序列。
时间序列具有以下特点[6]:
a) 数据的取值与时间节点相关,但并不一定是时间 的严格函数;
b) 每一时刻的取值是相对随机的,不能完全依赖历史值预测得出;
c) 前后两个时刻的数值具有一定的相关性;
d) 趋势性和周期性变化是时间序列的显著特征。
时间序列建模基本步骤[7]:
1) 用统计学方法取得目标样本并剔除无效数据。在失效数据收集过程中,由于一些人为因素比如测试者的能力,有时会引入一些非真实有效数据[8],称为奇异数据。它们的存在必然会给建模的准确性造成影响。因此,在建模之前的分析阶段,应先对时间序列中的奇异数据进行检测和剔除,在此之后方能进行时间序列建模。但是目前来说,仍然没有一个很好的自动化方法能用来方便地剔除奇异数据,通常只能依靠分析人员的实际经验,即采用肉眼观察的人工方法来剔除。由于人为因素的存在,建模精度就不可避免地受到影响,从而增大系统误差。
2)分析动态数据,找到跳点和拐点。跳点是与其他数据不一致的观测值,根据跳点正确与否调整建模数据;引起时间序列趋势突变的点称为拐点,若存在拐点,建模时须用不同模型去分段拟合。
3)选择合适的随机模型,进行曲线拟合。
应用时间序列模型来预测软件可靠性有两个优点,一是能够解决传统软件可靠性增长模型中所存在的问题,二是它能给出准确的预测[4]。值得一提的是,大多数的时间序列模型(包括自回归滑动平均模型ARIMA)隐含假设时间序列在统计意义上是完全可以分析的,即时间序列拥有非稀疏、完整、能充分接受轻微噪声的特性。然而,这种假设并不总是正确的,因为故障数据通常是不均匀的或是不完全的。例如,我们很难或者说不可能去检测所有软件的故障。在两个连续软件故障之间的时间或在一段给定执行时间内发生的软件故障数量是不均匀分布的,这也是软件测试的特性之一。 基于时间序列的软件可靠性建模技术研究(3):http://www.youerw.com/jisuanji/lunwen_21062.html