温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
软件
故障
预测
技术研究
方法
探讨
闫然
舰船产品可靠性 船舶标准化与质量2022 年第 5 期36软件故障预测技术研究方法探讨中国船舶集团有限公司综合技术经济研究院 闫然 李慕宇 王梅晨 张凯摘要:软件质量在武器装备中越来越重要,软件故障预测是保证软件质量的手段之一。本文介绍了软件故障预测技术的发展和研究背景和与软件故障有关的名词概念或定义,说明此技术研究的重要性;对近些年来对软件故障预测关键技术的研究做了调研,总结了国内外主要的研究方法种类;阐述了软件故障预测技术的发展方向,总结了软件故障预测,指出目前发展的不足,提出自己的看法。关键词:软件故障 故障预测引言软件质量工程包括软件测试、故障预防、故障检测、容错、形式化验证和故障预测等众多软件质量保障活动。其中,软件测试是软件开发过程中最重要的质量保障方式,而软件故障预测可以检测出很多软件问题并且可以提高软件测试的效率。因此,有必要在软件测试时引入软件故障预测模型。故障预测可在系统运行过程中通过监测相关参数指标,预测出将要发生的故障,在系统故障或者任务中断之前采取措施,如故障屏蔽、系统重构、系统重组等手段,保证系统的正常运行。这时候故障预测可和可靠性设计技术相结合,待预测出故障后,可用设计时预先的技术手段,共同完成系统任务。对于实时性要求不高的系统软件,可通过故障检测,发现故障并及时恢复系统。软件故障预测模型已从 20 世纪 90 年代一直研究至今,故障率预测(fault-prone)模块的定义早于系统测试。Menzies 等1的研究表明,如果建立了健壮模型,故障预测模型的检测率(71%)高于软件复审的检测率(60%)。因此软件故障预测可以检测出很多软件问题并且可以提高软件测试的效率。软件测试效率的提高可以缩短软件开发周期,减小项目开发风险,缩减资源及基础设施的消耗。软件测试对测试人员的经验水平要求较高(经验丰富的测试人员往往比新手发现软件故障的效率高出很多),并且测试过程耗时且代价大,因此有必要在软件测试时引入软件故障预测模型。预测模型可以使软件测试人员关注那些具有故障倾向的模块,让软件项目的测试具有针对性,从而缩短软件测试周期。除了提高软件测试效率,软件故障预测在软件开发过程中还有很多用处。比如在软件开发过程中对软件进行故障预测可以保障开发出高度可靠的系统,根据方法级属性可以确定出结构较为复杂易出错的代码;根据面向对象(Object-Oriented,OO)属性的度量选择最佳的系统设计方案,确定可以重构的模块,基于预测结果分配资源,从而充分利用有限资源提高软件产品的质量。1 有关概念1.1 软件故障预测故障预测是软件工程中重要的问题,用来评估最终产品是否达到了规定的质量或满足了用户的期望,用于测试和形式化验证资源的分配决策。软件双月刊/总第 302 期37故障预测的基本思想是根据软件故障发生的历史,预测软件将来故障发生的行为,软件可靠性模型应是这种思想的实现。软件故障预测技术大体上分为静态和动态两种,静态预测技术,主要是指基于故障相关的度量数据,对缺陷的数量或者分布进行预测的技术;而动态技术则是基于故障或者失效产生的时间,对系统故障随时间的分布进行预测的技术。软件工程界研究静态故障预测已有很长的历史,一般解决以下问题:1)如何评估模型;2)哪些度量适合于故障预测;3)哪些定性、定量或混合模型可用于故障预测。在评估预测模型方面,精度、明确度和敏感度是常用到的评估指标2。1.2 故障诊断与故障预测故障预测是指根据系统过去和现在的状态,预测系统将来是否会发生故障。它和故障检测与诊断的区别在于:故障诊断是根据已经出现的故障现象,找出故障原因和故障部件,而故障预测是利用已有的知识,采用预测推理的方法对可能发生的故障做出判断。故障预测是针对不确定事件预测系统在未来时间段出现故障的时间和发生故障种类,找出故障原因和发生故障部件,为有计划地安排维修和维护提供理论依据。2 软件故障预测关键技术2.1 历史研究对软件故障的预测方法有很多,而国外研究者将工作的中心转移到对预测时所使用的数据集上,以及软件预测的度量值之间和故障模块之间的关系。很多研究者表示,对公共数据集 NASA 数据集的滥用,对模型的建立及验证有很大的影响。Gray3通过对 NASA 数据的研究表明:1)研究人员需要分析的数据可能在特定的基础条件下才能使用;2)被使用缺陷预测数据集频次不相同以及某些数据重复使用过多,导致缺陷预测数据集容易失衡。这主要是因为重复的数据会导致大量的训练和测试数据是相同的。Santosh 和 Atul4研究了类度量与面向对象软件系统的错误模块的关系。从最近的国内外研究的内容来看,国内的研究者在原有的方法上进行了集成、深入研究或者从某个方法的某一个角度进行了改进。韦大伟等5为解决软件可靠性预测精度差和泛化能力不强问题,提出一种遗传算法集成神经网络的软件可靠性预测模型。通过遗传算法对神经网络集成权重进行了优化,并用主成分分析方法对软件属性度量数据进行了预处理,降低数据维数,简化神经网络的结构,加快神经网络的运算速度。仿真实验结果表明,基于遗传算法集成神经网络的软件可靠性预测模型同BP(Back Propagation)网络、LVQ(Learning Vector Quantization)网络和 PNN(Probabilistic Neural Ne-tworks)网络相比具有更好的预测精度和泛化能力。秦兴生等6根据软件测试过程中已知的软件故障时间序列,利用非齐次泊松分布过程方法、神经网络集成等方法对其进行建模。通过对三个实例分别建模,非齐次泊松分布模型预测的平均相对误差依次为 3.02%、5.88%和 6.58%,而神经网络集成模型为0.19%、1.88%和 1.455%,实验结果表明神经网络集成模型具有更精确的预测能力。2.2 研究现状国内外对软件故障预测领域的研究很活跃,尤其对软件静态故障预测。除了结合各种机器学习和统计方法外,近年来研究内容逐渐转向静态故障预测的准确性问题、怎么使得模型更符合实际应用问题、如何进行动态故障预测问题,以及怎样才能真正与软件工程的其他过程(如软件测试)相结合的问题。故障预测方法主要有统计模型方法、机器学习法、机器学习+统计方法(见表 1)。1)统计模型用于软件故障预测的统计方法主要是一系列的回归模型,包括逻辑回归(logistic regression model,LR)、泊 松 回 归(Poisson regression model,PR)、负 二 项 回 归(negative binomial regression model,NBR)以 及 多 零 负 二 项 回 归 模 型(zero-inflated negative binomial regression,多零 NBR)。LR 是对线性回归的进一步改善,针对线性回归难以解决分闫然 李慕宇 王梅晨 张凯 软件故障预测技术研究方法探讨 舰船产品可靠性 船舶标准化与质量2022 年第 5 期38类时出现的 01 之外的非法概率值,采用对数变换,其结果值将不再局限于 01 的区间,而是负无穷大至正无穷大之间的任意值。与线性回归一样,LR 需要找出能与训练数据匹配较好的权值,用模型对数似然最大化权值来测量匹配的良好程度,这在软件缺陷分类技术中应用得非常广泛。PR 要求因变量均值与方差均相等,当此条件不满足时,即存在方差大于均值的过度分散问题,在 PR 模型中加入参数,来捕捉这种情形,这就是 NBR。NBR 模型去掉了线性回归模型的输出只能是非负整数的限制。NBR 假设输出期望值是特征属性的函数,而不是正函数。软件度量数据中为零的数据个数超过 PR 和 NBR 中的预测是常见情形,多零 NBR 模型则明确对值为 0的数量建模。出处度量模型数据集类型描述Menzizies方法层度量机器学习公共朴素贝叶斯模型最优Janes类层度量统计模型私有采用 CK 度量集,多零 NBR 模型性能较好Marcus类层度量统计模型部分概念内聚度量Zhou类层度量机器学习公共考虑故障严重程度Zimmermann构建层度量统计模型私有多线性回归模型,基于图理论的复杂性度量Knab文件层度量机器学习部分决策树Raimund过程层度量机器学习部分变更度量优于代码度量,决策树优于逻辑回归、朴素贝叶斯模型Weyker过程层度量统计模型私有采用 NBR 模型,基于文件层度量,考虑开发人员信息可提高预测性能Bibi过程层度量机器学习+统计方法私有通过分类的回归方法Tomaszewski类层度量+构建层度量统计方法+专家意见私有统计模型优于专家估计表 1 预测模型分类软件可靠性预测模型,最主要的有 Musa 执行时间模型、Goel-Okumoto 模型、Jelinski-Moranda 模型、BevLittlewood 贝叶斯模型等。随着神经网络技术的发展,人们开始采用神经网络对软件的可靠性进行预测。支持向量机(Support Vector Machine,SVM)参数的选择和优化一直是支持向量机应用和理论研究中的一个重要课题。目前主要采用网格搜索法、单纯形法、梯度下降法和遗传算法(Genetic Algorithm,GA)等方法确定支持向量机的参数向量。2)机器学习机器学习被广泛用于软件故障预测,典型的有朴素贝叶斯方法、贝叶斯网络和决策树等。统计方法是一种黑盒方法,输入和响应之间的关系不可见。统计模型依赖于数据,不同开发组织可能有不同的数据特征,所以由某开发组织数据得出的统计模型不能应用于其他组织。统计特征方法约简技术,如主成分分析法,适用于减少或消除度量之间的线性相关性,将机器学习和统计方法一起应用于故障预测的方法称为机器学习+统计方法,专家估计方法难以应用于大型数据,但专家估计可以将项目相关的问题考虑进去,可作为机器学习方法的补充。机器学习算法被广泛地应用于软件故障预测,主要有贝叶斯、基于规则、支持向量机(SVM)、人工免疫系统(AIS)、基于案例推理以及神经网络等方法。由于该方法采用经验风险最小化(Empirical Risk Minimization,ERM)准则,用十分复杂的模型去拟合有限的样本,存在过拟合问题,从而导致学习机器泛化能力的下降,其预测能力受到较大的影响。事实上,这种用 ERM 准则代替期望风险最小化的学习目的并没有充分的理论依据,只是一种直观上合双月刊/总第 302 期39理的想当然的做法。支持向量机7(SVM)是一种建立在 VC 维理论和结构风险最小化(Structure Risk Minimization,SRM)原则基础上的一种新型机器学习方法,在最小化经验风险的同时,最小化置信区间的上界,从而获得更强的泛化能力,有效地解决实际应用中样本不足的缺陷,以及神经网络的过学习、鲁棒性差和泛化能力差的问题。软件故障预测有很多种方法,例如遗传编程、决策树、神经网络、朴素贝叶斯算法、模糊逻辑与人工免疫系统(AIS)算法。几乎所有的软件故障预测研究使用指标度量和原来软件版本的故障数据来建立故障预测模型,这被称为监督学习方法。监督机器学习分类器包括两个阶段:培养和测试阶段,培养阶段的结果是一个模型,该模型应用于测试数据做一些预测8。还有一些其他方法,如聚类,是没有初始数据时被使用,这些方法被称为非监督学习方法。值得注意的是,像 Koksal9等一样的许多研究人员,应用另外一种数据挖掘技术分类方法,因描述性语言而著名。人工神经网络:神经网络已有上百种不同的模型,常见的有 BP 网络、径向基 RBF 网络、Hopfield网络、随机神经网络(Boltzmann 机)、竞争神经网络(Hamming 网络,自组织映射网络)等。Menzies 等 1在 NASA 的公共数据集基础上,研究了几种用于软件故障预测的数据挖掘算法,他们使用的是方法层指标值。性能评价指标是 PD、PF和均衡率。他们用朴素贝叶斯算法取得了最好的性能,应用该算法之前,他们用 LogNum 过滤法对度量值进行了处理。Jiang Yue 等 10利用早期生命周期数据预测软件故障。他们利用从文本提取的度