编辑: 旋风 | 2017-11-29 |
context;
dynamic slice;
SFL;
suspiciousness ? 基金项目: 国家自然科学基金(61602504, 61672529, 61379054, 61502296) Foundation item: National Natural Science Foundation of China (61602504, 61672529, 61379054, 61502296) 收稿时间: 2017-11-06;
修改时间: 2017-03-26, 2018-06-05, 2018-08-11;
采用时间: 2018-10-08 张卓 等:增强上下文的错误定位技术
267 软件调试是软件开发过程中非常耗时的活动.为了提升软件调试的性能,研究人员提出了许多错误定位方 法(例如文献[1?6]).其中,基于频谱的错误定位方法(spectrum-based fault localization,简称 SFL)[2] 是被广泛研究 和使用的错误定位方法,展示了其在减少检测到错误代码的百分比方面的有效性[1,5,7,8] .SFL 尝试通过度量每个 错误语句的可疑值来识别错误语句.首先,SFL 利用插桩工具来对程序进行插桩,自动收集语句在测试用例执行 中的覆盖数据,以此构建程序谱;
然后,基于程序谱,SFL 利用不同的度量公式来评估语句为错误的可疑性;
最后,SFL 输出以可疑性为排名的语句列表. 然而,SFL 关注语句选择和排名,却忽略调试工程师所需要关心的上下文信息和可疑语句之间的传播关系, 这些关系可以方便其理解和分析失效原因.研究[9,10] 表明,缺乏上下文信息可能会降低错误定位性能.因此,有必 要构建上下文信息来优化错误定位. 为了构建上下文信息,本文发现,程序切片技术[11,12] 可能成为解决这个问题的候选者.程序切片技术提取程 序语句的数据与控制依赖关系,以选出影响程序输出的语句子集.它将这个语句子集命名为切片.可以发现,切 片可以显示切片中语句之间的数据与控制依赖关系,以及如何传播到输出的过程.也就是说,切片显示影响程序 输出的相关语句相互作用的上下文信息.这意味着错误定位可以利用切片来提供上下文信息.现有的程序切片 技术大致可分为静态切片和动态切片两大类:静态切片根据数据和控制依赖关系分析程序,而不运行程序;
动态 切片沿着执行路径的依赖关系进行分析.在实际应用中,静态切片具有更高的时间复杂度,切片体积较大,可能 会包含过多与具体错误行为无关的语句;
动态切片则具有较高的空间复杂度,切片体积较小,可能会出现切片丢 失错误语句的情况[3,13] .由于动态切片体积较小且与具体执行相关联,与静态切片相比,动态切片使用更为广泛. 因此,本文将动态切片纳入研究. 虽然程序切片提供了上下文信息,但是它对切片内的语句赋予相同的可疑度.换言之,即使与原始程序大小 相比,在切片体积明显变小的情况下,它也不能区分切片中的哪个语句更可疑.然而,切片仍然包含许多语句,特 别是当程序规模较大时,需要进行大量的人工查找.因此,衡量一个片段中的语句的可疑性至关重要. 基于上述分析,本文试图将程序切片融入错误定位中,自动获取调试工程师所需的........