论文部分内容阅读
随着软件产品的日益复杂,软件故障无法避免。人工寻找软件故障会耗费大量时间与精力,且最终能否找出错误还要依赖于程序人员的经验。如果能够自动的进行错误定位,则会大大降低软件调试过程的时间与难度。基于变异分析的错误定位方法与已有的自动错误定位方法相比,拥有较高的定位精度。但由于变异算子的多样性,该方法会产生大量的变异体,变异体执行开销巨大。目前,选择变异是降低变异测试开销的重要方法,已有的选择变异方法通常是依据特定应用背景下的经验固定地选用某些变异算子,虽然能够在一定程度上降低变异测试的成本,但是由于缺少对真实错误修正模式的分析,导致所选变异算子生成的变异体不能有效地代表真实错误,降低了变异测试的有效性,更不利于定位软件错误。针对以上的这些问题,本文主要完成了以下工作:首先,从版本控制系统中挖掘大量的错误文件与对应的修正文件对,并分别为它们生成抽象语法树。然后使用Gum Tree工具比对错误文件语法树与修正文件语法树,获得错误语句及修正错误语句执行的编辑操作。其次,得到变异模式并映射到相应变异算子,构建变异算子-修正模式库。对每一类已知的变异算子,找到所有使用其进行修正的错误实例,进而获取修正错误的编辑操作,提取最大公共编辑操作作为变异模式,并映射到相应变异算子。本文还在一阶变异算子中使用频繁序列挖掘算法Prefix Span来挖掘频繁操作组成高阶变异算子。然后,使用变异算子推荐的方式来实现选择变异,先寻找与目标语相似的错误语句并获取修正错误的编辑操作,将得到的编辑操作与变异模式进行匹配来找到其中蕴含的变异算子进行推荐。最后,为了验证方法的有效性,本文使用Defects4j作为测试数据集进行了测试,验证了变异算子推荐的有效性,进一步将变异算子推荐方法应用在错误定位中,与固定的选用某些变异算子相比,本文的错误定位方法平均精度较高。此外,使用高阶变异算子来替代一阶变异算子进一步提高了错误定位的精度。