论文部分内容阅读
当今社会,软件与人们的联系越来越密切,软件质量的重要性已不言而喻。软件发生失效后,如何自动调试程序是一个非常有意义的研究课题。虽然程序自动调试这一研究已有很多经验可以借鉴,但究竟如何做到程序故障自动定位则是程序自动调试技术的关键问题。本文在测试路径生成、测试输入数据生成和动态程序切片等技术的支持下,结合“近邻模型”思想,利用程序削片方法分析失效测试路径与相似成功测试路径的差异。在分析现有的路径相似度量方法及相似路径生成算法基础上,定义了一种新的基于程序控制流差异的路径间的相似度量标准,设计并实现了一种基于替换无约束边的相似路径生成算法。通过试验,分析了算法的复杂度,对比了原有算法,并提出了算法的扩展方向。随后,利用相似路径生成算法、Gupta方法、Chen动态切片方法和削片策略进行了程序故障定位试验,试验表明,本文所提的程序故障定位方法在处理与程序控制流有关的错误时能够有效地定位故障。本文的工作主要包括以下三个方面:1)针对Wang方法所存在的问题,定义了一种新的基于控制流差异的相似度量标准,在此基础上讨论了基于失效路径的相似成功候选路径集生成算法。算法考虑到可能产生不可行路径,于是在候选路径集的生成过程中加入了“最少谓词”的启发策略以求所选路径尽可能为可行路径:还考虑到忽略数据流信息所带来的相似度量的副作用,算法产生多条相似路径而非单一相似路径,通过增加路径条数来提高故障定位精度。利用该算法进行了相似路径生成试验,证实算法可以为失效路径自动产生相似路径。2)采用本文所提的程序故障自动定位方法对多个含有故障的C语言程序进行了试验,发现该方法在一定程度上能够降低调试代价,特别是在定位与控制流相关的程序故障时,它的精度较高。3)讨论了基于失效路径及其相似路径集差异分析的程序故障定位原型系统的框架,对框架下的现有可用工具和资源逐一进行了介绍,并给出了相似路径生成工具和故障报告生成工具的开发思路。