论文部分内容阅读
软件缺陷是软件系统的一种错误,它会导致系统异常和崩溃。在软件开发的过程中,由于软件复杂度和软件人员水平等众多原因,软件缺陷无法避免。之前的统计显示在当前的软件项目开发中,缺陷修复通常会消耗项目总开销的80%。同时研究发现如果能够较早地发现缺陷,那么修复的开销也会大大降低,缺陷预测研究便应运而生。软件缺陷预测研究力图有效地利用代码块度量特征,进而预测含有缺陷的代码块,保证软件质量,节约人力成本,提高软件开发效率。在当前软件缺陷预测中,大多数研究者们致力于文件或模块级别的代码块特征提取和缺陷预测模型的建立,研究结果表明在这些级别上缺陷预测模型具有较高的精度。尽管可以通过上述模型精确地定位到存在潜在缺陷的具体代码文件,但在这些级别上的代码块由于包含很长的代码,开发者仍需要大量工作量来遍历代码块的所有代码定位缺陷的具体位置。因此,研究者们尝试在更小粒度的级别上——方法级别上抽取度量,进而提出了方法级别上的缺陷预测方法,并取得了一定的效果。但同样观察到,项目中依旧存在具有几百行代码的庞大方法,仍会影响定位缺陷的效率。为进一步降低缺陷修复的工作量,提高缺陷预测的实用性,本文提出了一种比已有的级别粒度更细的基本块粒度上的度量抽取和缺陷预测建模方法。具体包括:(1)给出了基本块粒度上的12种度量定义和计算规则,其中包括6种延续已有定义的基本度量和6种在基本块粒度的CFG度量,并实现了一个基于基本块粒度的度量抽取和缺陷标注工具;(2)抽取了 9个开源项目共36个版本中的基本块度量和缺陷数据构成数据集,并作了度量的相关性分析;(3)在数据集上使用随机森林、逻辑回归和Adaboost三个学习器建立缺陷预测模型,用AUC和CE指标对模型性能进行了评价。实验的结果表明:(1)基本度量和CFG度量不存在冗余关系,基本块粒度上定义的CFG度量具有独立的实际意义;(2)CFG度量中的传递变量数和深度与缺陷的相关性较大,基本块度量都有助于提高缺陷预测模型的性能;(3)在版本内场景下,仅使用基本块度量和随机森林学习器建立缺陷预测模型进行预测,可以达到0.638的AUC值和0.106的CE值,引入CFG度量后,预测性能有明显的提升,AUC达到0.736,CE达到0.283。同样,在版本间场景下,也有显著的提升;(4)与静态缺陷查找工具PMD相比,基本块粒度的缺陷预测模型性能均有显著提升。综上所述,本文提出的CFG度量有助于缺陷预测,提升缺陷预测性能,并具有实用价值。本文提出基本块度量的定义,并给出基本块度量计算规则,对基本块级别上的缺陷预测进行科学的、有针对性的研究。该研究结果对软件维护、缺陷定位、缺陷预测等领域都有重要意义。