论文部分内容阅读
互联网经济快速发展的今天,人们每天都在接触各种各样的软件产品,软件给人们在学习、工作和生活等方面带来了巨大的便利。随着软件产品的规模不断变大,功能日益复杂,软件漏洞也日益频发,人们逐渐开始注意到软件的质量问题。软件的开发是为了服务大众,一个软件的质量好坏决定软件的使用程度与收益,开发一个不被使用的软件是没有意义的。为了开发一个高质量的软件,测试人员就需要对软件程序进行大量的调试工作。缺陷定位是软件调试过程中的一项关键任务。高效的软件缺陷定位技术可以帮助测试人员快速检测到软件的缺陷位置,有助于后续软件修复工作的进行,降低整个软件开发过程中的软件调试成本。因此,高效软件缺陷定位技术的研究,是一个重要且有意义的研究课题。在软件缺陷定位技术的大量研究工作中,一种常见且有效的方法是基于程序谱的缺陷定位(Spectrum-based Fault Localization,SBFL)方法。但大部分已有的自动化或半自动化的SBFL方法在解决缺陷定位问题时效果表现不理想,主要原因是大部分SBFL方法针对的是单缺陷定位问题设计的,忽略了软件程序一般含有多个缺陷位置的事实。多个缺陷之间的相互干扰会使程序谱信息发生改变,从而影响SBFL方法的定位结果。部分表现不错的软件缺陷定位方法中,有的复杂度较高,有的需要较多的人工干预,这些方法仍需进一步研究。为改善以上问题,本文进行了深入的理论研究和实验验证,主要工作如下:1.在软件缺陷定位中,综合考虑缺陷组合和单个缺陷实体,设计了一种评估程序实体可疑度的评估函数。函数设计时充分利用了程序频谱不同维度的信息,不仅考虑了测试用例对程序实体的贡献度,而且考虑了程序实体在测试用例中的贡献度,以便更精确的定位软件缺陷的位置。2.提出了一种基于遗传算法的软件缺陷定位方法(GA-SFL),提高了软件缺陷定位的效率。缺陷定位之前先对程序频谱信息进行约简,为后续缺陷定位工作减少搜索空间。在使用遗传算法搜索最优缺陷分布种群时,主要优化改进初始种群的生成阶段,提高软件缺陷定位算法的效率。最后根据最优缺陷分布种群的可疑度值和种群中程序实体的位置分布概率得到程序实体的排序表,依次检测进行软件缺陷定位。3.基于缺陷实体在排序表中的位置,设计了两个评估软件缺陷定位效果的评测指标F-avg和F-mid,即将所有缺陷实体排列在排序表中位置的平均数和将所有缺陷实体排列在排序表中位置的中位数。在含有多个缺陷的软件程序中,可以更好的描述软件缺陷的位置分布情况。实验研究以Siemens套件中的7个程序作为研究对象,结合经典评测指标EXAM、EXAMF、EXAML和本文所提出的缺陷定位评测指标F-avg、F-mid,与经典的缺陷定位方法(Tarantula、Jaccard及Ochiai)以及最近提出的GAMFal方法进行对比。在较少人机交互的情况下,实验结果表明,本文所提出的GA-SFL方法在软件缺陷定位效率方面上整体优于所对比的方法。