论文部分内容阅读
动态程序切片能够在程序运行出现异常的情形下有效地捕获到导致该异常出现的错误代码以及传播错误数据的程序运行路径。动态切片技术由于其能够把检查程序错误的范围缩小,成为程序调试的重要工具之一。但是,普通的程序动态切片技术并没有对于切片结果提供额外的参数辅助程序员进一步缩减排查空间,使得在大型程序的切片结果中仍然会出现大小超出理想范围的切片,造成程序调试依旧面临着巨大的人力消耗,直接导致程序维护的高昂代价。自动化错误检测技术能够通过添加辅助信息的方式使得程序切片能够以更加突出的方式显现出程序错误的可能位置,从而让动态切片技术成为更高效的协同调试工具。数据挖掘领域的一部分研究将其技术运用到程序自动错误分析中,但是迄今的主要研究对象仍然停留在程序谓词和返回值上,并不能够满足现实程序多种多样的错误类型。为了提高程序调试的效率,本文提出了一种基于概率推演自动计算动态程序切片中每条语句的正确概率并赋予优先度、进而裁剪的方法。首先从程序运行过程抽取其相应的动态依赖关系图;然后根据依赖关系转化成贝叶斯网络;随后在该网络上运行概率推演并统计,得到程序静态语句的正确概率;最后采用二分聚类的统计方式对切片进行裁剪。实验表明激进的裁剪策略能使4%的代码量覆盖27.49%的错误;而保守的策略可使66%的代码量覆盖84.66%的缺陷。数据说明使用裁剪后的动态程序切片结果可进一步提高调试人员定位缺陷和分析故障的效率。