论文部分内容阅读
软件缺陷的多少直接反映了整个软件质量的好坏,每一个软件中的缺陷都必须得到妥善的处理,可靠的基于软件仓库的缺陷预测则在软件缺陷的发现和移除中起着至关重要的作用。首先,它能够指导软件开发人员将有限的资源投入到更容易产生缺陷的模块中,从而提高软件质量。而在关键软件的评估中,基于软件仓库的缺陷预测在决定软件是否可以投入使用时起着决定性的作用。虽然研究者们使用数据挖掘和机器学习的方法已经得出了比较满意的预测准确度,但是直接将机器学习的模型用于缺陷预测会产生很多和软件缺陷经验相矛盾的问题。而这些问题会影响到预测的准确性。本文首先提出了一套软件缺陷预测的方法,使用该方法对已有的三个预测算法——CART、朴素贝叶斯、C4.5,进行了预测预测的比较,随后,在C4.5决策树算法的基础上,针对软件仓库计算出来的指标的特点对算法进行了改进,改进算法引入了Spearman等级相关度,使得其决策树在选取属性作为根结点更为符合开源软件缺陷的实际情况。同时,本文还提出了一种新的预测粒度——切片粒度,该粒度是通过对程序中的函数按照其在函数调用图中的距离进行聚类得到的。为了验证改进算法以及新预测粒度的有效性,本文提出了一个缺陷预测方法,该预测方法是由预测指标以及预测算法组成,整个预测过程分为三个主要步骤:一、挖掘指标,从软件仓库中挖掘出用于预测的指标,包括源代码指标、变更指标、缺陷指标、切片指标等;二、预测,将挖掘出的指标输入预测算法中,得出该算法对挖掘出的指标做出的预测;三、预测算法改进,针对指标数据特点和指标跟缺陷的关联度来改进算法,使用第一步挖掘出的指标做出预测。最后,本文将改进预测算法与已有算法用到预测方法中做了缺陷预测的比较,实验表明,改进后的缺陷预测算法大大地降低了决策树的规模,并且在两个模块的缺陷预测准确率上分别提高了4.5802和4.8656个百分点。另外,本文还做了切片粒度和文件粒度的对比实验,实验表明,在不包含零缺陷函数的情况下,无论是训练集还是测试集,切片粒度的准确率要明显高于文件粒度的准确率,在训练集和测试集上分别高出8.5个百分点和2.5个百分点,并且在生成的决策树大小上,切片粒度的树规模比文件粒度的要小大概50%。