论文部分内容阅读
软件错误定位在软件调试过程中代价昂贵且耗时。随着软件规模的不断扩大,目前已经提出了许多的自动化软件错误定位方法。基于范围不变量的软件错误定位方法就是其中的一种。与其它方法相比,该方法有许多好处,但是需要训练和监控程序中的每条语句中的每个变量,所需的运行时开销较大。然而,这种开销不是必须的。因为只有一个关键变量集合才能以有意义的方式真正影响系统的结果。基于此,本文提出了一种基于关键范围不变量的软件错误定位方法。本文的方法描述如下:首先,在程序执行之前对程序的源代码进行插桩处理。然后执行插桩后的程序,通过检查实际输出结果与预期输出结果是否相同来区分成功测试用例和失败测试用例。然后删除成功测试用例中的偶然正确测试用例。其次,通过分析成功测试用例中的变量取值信息,使用关键变量筛选机制筛选出程序的关键变量集合。然后对关键变量集合中的变量进行训练,从而得到程序的关键范围不变量集合。最后,检测失败测试用例,若关键变量在失败测试用例中的取值不在其对应的关键范围不变量的范围内,则标记违规,即将该关键变量所在的语句标记为可疑语句。当我们需要最小化监控变量的开销时,可以使用该方法以忽略认为不重要的变量。本文以西门子测试集为例来验证有效性。实验结果表明,在错误定位时仅对关键变量集合进行训练和监控,仍然能保持良好的错误定位效果,同时检查的可疑语句数也有所减少。本文方法的主要贡献有:(1)在现有的范围不变量错误定位方法中增加了关键变量筛选阶段。在该阶段,采用动态与静态相结合的筛选方法对变量进行筛选,从而得到程序的关键变量集合。(2)仅使用筛选的关键变量集合进行范围不变量的训练和错误定位。在对筛选的关键变量集合进行训练时,整型变量和非数值型变量被训练成离散型不变量区间,以此来避免漏报。(3)本文方法是在不知道正确版本程序的情况下进行错误定位的。并通过开源程序集对该方法的有效性进行了验证。