论文部分内容阅读
软件调试过程是软件开发和软件维护中的重要阶段,包括软件缺陷的定位和修复等环节。目前,随着软件程序规模的日渐增长,软件调试过程中花费的成本也逐渐增多。并且,当软件缺陷发生时,会造成软件功能的失效,严重时甚至会造成财产的损失,因此尽快地修复软件缺陷是一个重要的研究问题。已有的软件缺陷定位技术大多是基于测试用例执行过程中程序的行为特征。在测试用例集执行过程中,通过搜集程序执行信息获取待测程序的行为特征,根据失败测试用例和成功测试用例的执行信息对程序实体进行排序,从而筛选出最有可能包含缺陷的程序实体。在基于测试用例集的方法中,基于频谱的方法数量较多,特别是轻量级的频谱构造方式,这类定位统计的数据较少,仅仅简单统计程序实体在成功测试用例和失败测试用例中的覆盖信息,由于时间开销较小也被用于自动程序修复方法当中。自动程序修复方法基于缺陷定位的结果,采用不同类型的补丁生成算法生成程序补丁。随后基于测试用例集或其他形式的程序规约对补丁的正确性进行验证,从而筛选出正确的补丁对源程序进行修复。目前缺陷定位和缺陷修复都是软件工程领域活跃的研究问题,近几年这两个领域都有较多的研究进展,但在实际项目上的应用仍有待进一步探索。为进一步研究上述问题,本课题利用先进的软件缺陷定位和自动程序修复方法对Online Judge系统中的数据集进行建模和实验,对系统中的部分提交程序进行缺陷的自动定位和修复,因此需要结合方法要求在Online Judge系统搜集相应的数据集。针对缺陷自动修复方法对测试用例的输入输出进行分析并自动生成Junit测试用例脚本作为程序规约,并进一步对修复结果进行可读性优化。此外,我们对数据结果进行分类统计,验证软件缺陷定位和缺陷自动修复两种方法对真实小规模程序的有效性和准确性,对比方法的优势及存在的问题,为该领域科研方法向实际产品转化展开进一步探索。