论文部分内容阅读
在程序调试中,定位出软件的缺陷位置是程序调错过程中一项很重要的活动。找出软件缺陷的效率取决于程序开发人员的逻辑判断能力以及在程序调试过程中的经验。然儿,近些年,随着软件行业尤其互联网行业的高速发展,一些大型软件呈现出规模庞大、代码量大、程序之间的逻辑复杂等特点。单纯靠人工去定位软件缺陷是比较艰难的。如果有方法能根据程序运行过程中表现的一些特征定位出软件缺陷的大体位置,然后再靠人力进行简单判断,将节省很多精力。基于此,近些年,一些自动化定位软件缺陷的方法被很多国内外的学者提出。目前国际上比较流行的软件缺陷定位方法有基于程序普的缺陷定位方法、基于统计缺陷定位方法、基于BP神经网络缺陷定位方法等。以上的相关研究大多是以语句为粒度的缺陷检测和定位。而以函数为粒度的定位研究很少。而从实际生产环境中出现的软件缺陷情况看,大多缺陷都是由一个函数内部多个语句逻辑执行错误而造成,所以用函数作为粒度来确定软件缺陷的位置更符合生产环境。再者,现在大多数研究都是基于单机的,当软件很庞大,代码量很大,用于确定软件缺陷的初始数据量很大的时候,单机处理相当吃力或者无法用单机进行处理。因此基于大数据方法来进行数据的清洗和统计是相当必要的。本文提出的方法是基于函数调用全信息的软件缺陷定位。首先该方法利用面向切面编程的方式得到函数调用过程中的函数参数值、函数调用次数、函数之间调用关系的数据信息。接着利用Gini指数等方式提取出与函数缺陷相关的特征,最后利用随机森林模型预测函数可能缺陷的嫌疑度。该方法中进行的数据预处理是在hadoop集群上,使用hive和mapreduce进行数据的清洗和相关特征提取,利用本人改进过的随机森林模型进行模型的训练和缺陷预测。其中为了解决正负样本不均匀的情况,使用了改进后的重采样算法。为了得到预测结果更多的信息,对随机森林模型增加了置信度算法。通过在西门子测试集上进行试验,可以证明,基于函数调用全信息的缺陷定位方法,能较准确、较全面、较快速定位出软件缺陷的位置。由于该方法几乎整个过程都是在hadoop集群上进行,所以对于大数据量的软件缺陷定位很适合。该方法在实际生产环境中对大型软件缺陷定位有较高的实用价值。