论文部分内容阅读
程序员很难保证首次书写的代码是正确的。因此,排错是软件开发过程中必不可少且有相当难度的工作。此外,在软件维护阶段,程序员常常需要对别人书写的代码进行排错。这种情况下,程序员的排错工作就更加困难。所以,排错是软件开发维护过程中必不可少的重要组成部分,且耗时耗力。
一般而言,排错包括两个阶段的任务:确定程序中错误语句的位置(即:错误定位)以及修改错误语句(即:纠错)。在程序排错的这两阶段任务中,错误定位活动的工作量更大。如果能够在错误定位方面的研究取得一定的进展,那么就可以有效地减少整个排错活动的工作量。因此,错误定位是当前排错领域研究的重点,也是本文关注的焦点。
为了帮助程序员确定程序中错误语句的位置,研究人员曾提出过各种各样的错误定位方法。由于基于测试信息的错误局部化方法,可以充分利用测试阶段获得的测试用例相关信息,有效地缩小程序中可疑语句(可能是错误的语句)的范围,因此,这类方法得到了人们更多的关注,并被认为是最有前途的方法之一。但是,这类方法本身还存在着一些尚待解决的问题。首先,这类方法需要大量高质量的测试用例及其执行信息,包括测试用例的执行结果判断信息。但是,实际软件开发过程很难保证提供这些信息。其次,这类方法只能帮助程序员缩小程序中可疑语句的范围,却不能够有效支持整个错误定位过程。为了解决这些现有研究中尚待解决的问题,本文提出了一种帮助程序员省力快捷地定位错误的解决方案。具体工作包括:
1.提出了一种基于测试信息的交互式错误定位框架。这个框架在对测试信息进行统计分析的基础上,结合程序员在错误定位过程中提供的反馈信息。这个框架的输入包括大量的测试输入和一条执行结果错误的测试用例。本文提出基于测试信息的交互式错误定位框架,旨在减少错误定位过程中程序员的工作量--包括检查测试输入对应的执行结果以及设置程序断点。基于这个目的,该框架的实施过程可以分成三个阶段:测试信息筛选、基于测试信息的语句可疑度计算、结合程序员反馈信息的错误定位过程。此外,本论文还提供了分别支持这三个阶段的具体技术。
2.提出了一种面向错误定位的测试输入选择技术。基于测试信息的交互式错误定位过程需要大量测试用例的信息,包括这些测试用例的语句覆盖以及这些测试用例的执行结果是否正确。然而,依据测试预言问题,测试用例的执行结果是否与预期一致,通常需要由程序员自己确定。显然,检查大量测试输入对应的执行结果是否与预期一致,对于程序员而言,既繁琐,又困难。于是,本文提出一种面向错误定位的测试输入选择技术,它利用测试输入对应的语句覆盖信息,选择少量的测试输入,并且保证这些被选出的测试输入在语句上的区分能力更强。于是,程序员只需检查这少量测试输入对应的执行结果,就可以为错误定位过程提供足够的测试信息。
3.提出了一种考虑测试用例相似性的语句可疑度计算方法(SAFL),这种方法主要用来度量程序中每条语句可能是错误的可疑程度。这里的相似性指的是,不同测试用例执行了一些相同语句。尽管研究人员曾提出过其它计算语句可疑度的算法,但是这些算法都忽略了测试用例相似性的影响。与这些已有的语句可疑度计算方法不同,SAFL使用模糊集合论和条件概率来计算语句的可疑度。
4.提出了一种结合程序员反馈信息于错误定位过程的具体策略。这种策略首先仅根据测试信息为程序员推荐第一个程序检查点,然后,程序员评估这个检查点,并提供这个检查点附近的检查反馈信息。接着,依据测试信息和程序员在以往程序检查点曾给出的反馈信息,这种策略不断为程序员推荐新的检查点,直至程序员发现错误语句为止。
5.给出了实验分别验证支持基于测试信息的交互式错误定位框架的三项核心技术。这几组实验分别把面向错误定位的测试输入选择技术、考虑测试用例相似性的语句可疑度计算方法、结合程序员反馈信息于错误定位过程的具体策略这三项技术与现有的相关研究做比较,实验结果验证了这三种技术的有效性,进而保证了基于测试信息的交互式错误定位方法的有效性。进一步地,本文还分析了基于测试信息的交互式错误定位工具TIFL的需求,并给出它的系统设计。