论文部分内容阅读
近年来,社会发展对软件测试和调试技术提出了新的挑战。不断变化的环境和需求对软件系统提出了更高的要求,保证软件质量变得至关重要。目前,软件调试是保证软件质量最主要的手段之一,而错误定位是软件调试中最为耗时费力的活动之一。错误定位旨在找到隐含在程序源代码中的错误指令、过程或数据定义。它可以提高软件质量、降低软件调试成本。因此,研究软件错误定位具有重要意义。软件错误定位是近年来国内外研究的热点,具有重要科学意义和应用前景。到目前为止,软件错误定位方法还不够完善,存在如下问题:(1)错误定位精度有待进一步提高。大多数错误定位方法,利用统计理论对定位结果进行了精炼,只在一定程度上提高了错误定位的精度。(2)较少考虑偶然正确性测试用例对错误定位效率的影响,偶然正确性测试用例会使错误定位效率下降。(3)已有的方法在软件中存在多个错误时的定位效果不理想,开发人员较难高效地同时定位出软件中存在的多个错误。针对上述问题,本文从程序切片分析入手并结合数据挖掘技术进行软件错误定位研究。首先,研究基于关联分析及排序策略的错误定位方法;其次,研究偶然正确性测试用例对错误定位效率的影响,从理论角度进行了分析,并提出偶然正确性测试用例识别方法;最后,针对软件中存在多错误的问题,提出多错误定位方法。本文的主要工作和贡献总结如下:(1)提出了基于关联分析及排序策略的错误定位方法FLAR(Fault Localization based on Association analysis and Rank strategy)以及改进方法DS-FLAR(Dynamic Slicing-Fault Localization based on Association analysis and Rank strategy)。采用关联分析技术能够反映出程序执行轨迹中语句与执行结果之间的关联关系,然后利用本文设计的排序策略对关联分析后的语句进行排序,生成错误定位报告。实证研究表明,FLAR方法错误定位效果较好。另外,我们提出改进的动态切片方法,用于更好地缩小错误定位的范围,从而优化FLAR方法,最终提出一种基于动态切片、关联分析及排序策略相结合的错误定位方法DS-FLAR。实验结果表明DS-FLAR定位效果优于FLAR方法、以及其它对比方法。(2)针对偶然正确性问题,提出了错误定位效率受偶然正确性测试用例影响的理论分析框架。通过将怀疑度计算公式看成是程序元素的四元组表示形式中变量(成功测试用例覆盖程序元素的次数)的函数,采用对函数求导的方式来分析偶然正确性测试用例对不同怀疑度计算公式效率的影响。基于上述框架,理论分析了偶然正确性测试用例对30个经典怀疑度计算公式效率的影响。此研究工作是偶然正确性测试用例对错误定位效率影响的有益理论探索,为在软件错误定位时移除偶然正确性测试用例提供理论依据。(3)针对偶然正确性影响错误定位效率的问题,提出了面向有效错误定位的偶然正确性测试用例识别方法。该方法首先识别偶然正确性元素,应用怀疑度计算公式计算程序元素怀疑度,挑选出高可疑偶然正确性元素作为偶然正确性特征元素;然后,根据该特征元素对程序执行轨迹进行维度约简,并进一步建立基于模糊c均值聚类的偶然正确性测试用例识别模型;最后,将其结果应用于错误定位。应用该方法在3组测试程序上进行偶然正确性测试用例识别,在此基础上,采用4种错误定位方法开展错误定位,比较移除偶然正确性测试用例对错误定位效率的影响。实验结果表明,与基于k-means聚类的偶然正确性测试用例识别方法相比,该方法在偶然正确性测试用例识别方面具有较低的误报率和漏报率,更能提高错误定位的效率。(4)针对软件中存在多个错误的问题,提出了基于Chamelelon聚类分析的多错误定位方法。该方法首先将每一个失败程序执行轨迹和所有成功程序执行轨迹合并,计算其怀疑度,按怀疑度大小选取高可疑元素作为程序执行轨迹的特征元素,按照该特征元素对失败程序执行轨迹进行约简;其次,在此基础上,聚类分析技术将失败程序执行轨迹分簇,使得每簇包含一个错误;然后,将失败程序执行轨迹簇与所有成功程序执行轨迹簇合并,计算其怀疑度;最后,根据合并后的簇生成的怀疑度序列,采用并行调试模式同时定位程序中的多个错误。实证研究表明该方法能有效地定位程序中的多个错误。