● 摘要
为了保证软件的质量,测试是软件工程领域一项不可缺少的活动。在测试过程中,当程序发生失效行为时,程序员常常采用调试的方法来消除程序中的缺陷。调试是软件测试过程中一项非常复杂与耗时的活动。调试主要包括两项任务:定位错误和修复错误。其中定位程序中错误语句的位置这项任务消耗的人力和时间开销更大。为了帮助程序员尽快发现程序中错误语句所在的位置,研究人员相继提出了多种自动化的错误定位技术。这类技术能有效地缩小错误语句可能存在的范围,因此得到了人们越来越多的关注。本文关注的焦点正是在这种研究背景下,针对程序员在软件生命周期中两种常见的调试场景展开基于测试信息的错误定位方法的研究。具体的研究内容和创新性成果包括:
1)提出了一种巧合正确性测试用例识别方法
测试用例集当中存在的巧合正确性测试用例会对基于测试信息的错误定位方法产生消极影响。本文首先分析了巧合正确性测试用例在测试用例集当中的盛行程度,接着分析了识别巧合正确性测试用例对错误定位技术的影响。为了识别巧合正确性测试用例,提出了一种基于聚类分析的识别方法。该方法采用了有效的聚类技术,结合可能引发错误执行的分支覆盖特征对测试用例进行聚类。为了从聚类结果中识别并选出适量的可能巧合正确性测试用例,本文提出的采样方法首先对测试用例集当中可能存在的巧合正确性测试用例数目进行了估计,接着优先从失败测试用例比率高的簇中选择适量正确测试用例,从而既能有效地识别巧合正确性测试用例,同时避免了现有方法引入过多的非巧合正确性测试用例的情况,最后通过对识别的巧合正确性测试进行适当处理以提高错误定位技术的效果。
2)提出了一种区分测试用例诊断能力的错误定位方法
现有的大多数基于测试信息的错误定位方法认为单个测试用例对语句可疑度的贡献都是相同的。针对这种情况,本文给出了一种区分测试用例诊断能力的软件错误定位方法,这种方法根据语句覆盖信息分别对正确测试用例和失败测试用例的诊断能力进行了量化,并认为参与测试用例执行的语句对测试用例执行结果也有相应不同程度的影响,在此基础上分别提出了两种区分测试用例权重的错误定位技术H1和H2。同时由于本文给出的测试用例的诊断能力与参与测试用例执行的语句集密切相关,因而在对可疑语句进行排行时,除了支持传统的大小排行外,还支持增量排行。
3)提出了一种支持错误定位的测试用例选择方法
现有的基于测试信息的错误定位技术需要覆盖度很高的测试用例集作为输入。然而,在一些调试场景下,软件出现了失效但并没有大量执行结果已知的测试用例用于自动化的错误定位。针对这种情况,本文给出了一种支持错误定位的测试用例选择方法,从自动生成的大量执行结果未知的测试用例构成的集合中选出少量的测试用例,由程序员检查执行结果,并将选出的测试用例用于现有的基于覆盖信息的错误定位方法,从而辅助程序员在测试信息较少时有效地定位程序中的错误。这种方法首先将程序中的语句根据测试用例的覆盖信息表示成动态基本块,进而以动态基本块为单位来表示每个测试用例的覆盖信息。当从大量测试用例中选择一条测试用例供程序员检查执行结果时,优先考虑能够对可疑度排行变化较大的动态基本块集尽可能产生均匀划分的测试用例。在公共程序测试集上的实验表明,该方法能有效选择出少量的测试用例供程序员检查执行结果,同时选择的测试用例能有效地支持错误定位。
相关内容
相关标签