论文部分内容阅读
如今计算机软件在各个领域都得到了广泛地应用,需求量持续增大,功能复杂性也越来越高。但随着系统规模的不断扩大,其质量问题也更加凸显,这时软件测试工作就显得尤为重要。软件测试通常用来探测系统中存在的缺陷以避免严重事故的发生,但在实际的工作当中,受软件项目时间和人力成本等因素的影响,软件测试工作未能完全覆盖整个项目,因此软件中可能会包含隐藏缺陷。而在软件生命周期中,检测出内在缺陷的时间越晚,修复该缺陷的代价也就越高,如果在软件发布之后出现问题,检测和修复缺陷的代价将更大。因此,本文重点关注可以预先识别出可能含有缺陷的程序模块,并对其分配足够的测试资源的软件缺陷预测技术。目前的软件缺陷预测问题主要通过机器学习分析解决,本文通过研究该方向软件缺陷预测技术的特点,发现主要存在如下问题:1.软件缺陷数据中一般存在大量的冗余或者不相关特征,多余的数据特征会严重影响缺陷预测模型的性能;2.软件缺陷数据存在中严重的类不平衡现象,即正负类样本数据比例差别较大,这样会使模型泛化能力较差,失去模型构建的意义;3.目前软件缺陷预测可用分类器种类较多且大多为单一分类器,但该类算法的预测精度达到一定水平就会进入瓶颈期,继续优化算法难度较高;4.目前的软件工程环境复杂且多样,如何针对不同的开发环境、开发语言,构建出具有普遍性的软件缺陷预测系统势在必行。针对上述问题,本文从以下几方面开展了研究及工程工作:1.针对缺陷预测数据集中存在的冗余或者不相关特征问题,本文采用特征选择方法对特征进行优选,其中主要用信息增益率为数据集选择用于实验的最优特征。经过实验验证,该方法可以有效提升实验结果的精确性。2.针对缺陷预测数据集中存在的严重类不平衡问题,本文采用采样技术,其中主要包括过采样和欠采样。先通过过采样将少数类样本与多数类样本平衡,再通过欠采样去除多数类样本来达到数据集中正负类样本的平衡。经过实验验证,通过采样技术平衡实验数据可以有效提高模型泛化能力。3.针对缺陷预测实验中存在的单一分类器预测精度的问题。本文采用集成学习的思想,在软件缺陷预测领域首次集中引入集成算法Stacking、Bagging和AdaBoost,并采用LG、J48、NB和NN作为集成学习的基分类器。通过多种算法组合,发现对应基分类器集成后的实验效果比单一分类器实验效果好,并对比获取到具有最优实验效果的AdaBoost集成算法,且基分类器采用J48用于构建缺陷预测模型。4.研究成果的工程应用。基于前面的研究成果,本文设计、开发并建立了一个软件缺陷预测系统。同时将该系统用于两个开发语言、开发环境完全不同的软件项目的测试工作中,并将实验得到的缺陷预测结果与实际的软件缺陷情况对比。经过实验验证,该系统可有效对不同项目进行缺陷预测,这对实际的软件测试工作具有重要的工程应用价值。