● 摘要
充分的测试数据集是保障软件测试质量的基础,如何自动化地生成高质量的测试数据一直是近年来的研究热点。基于符号执行的测试数据生成技术虽然在结构高覆盖测试需求方面取得了很大的进展,但对于诸如触发数据生成、回归验证等其它测试需求的场景还不能很好地进行应用。由于程序中循环等结构的存在以及程序规模的不断扩大,程序路径空间会呈爆炸式增长,从而使得路径高覆盖测试变得不再可行。同时,应用场景的变更会改变测试需求,此时路径高覆盖也许不再是首选要素。例如,回归测试中没有必要对整个演化程序进行重新测试,此时的测试重心应该集中在与修改有关的部分。还有,在对静态分析出的可疑缺陷进行验证时,测试需求应该是尽快地去生成能触发缺陷发生的数据。本文把演化程序中与修改有关的部分以及静态分析出的可疑缺陷称为测试目标。针对上面的问题,本课题研究在测试目标制导下的测试数据生成技术。首先,针对广义的目标,设计了一种目标制导的路径探索策略,该策略可以在生成能够覆盖到目标的路径的过程中,避免探索与目标无关的路径;其次,针对特定的目标,提出了两种测试数据生成技术。一种是用于缺陷验证的测试数据生成技术,该技术专注于去生成可疑缺陷的触发数据,使得以尽可能小的花费验证该类缺陷的真实性。一种是用于演化程序测试的测试数据生成技术,该技术重点考虑程序中被修改的部分,可以高效地生成能揭示回归错误的测试数据。基于上述研究成果,本文实现了一个目标制导的测试数据生成原型系统REG,并在该系统上对一系列实际的程序进行了实验。实验结果表明,在对演化程序生成等量结果数据集的情况下,该系统所需探索的路径数量平均能比现有系统少47%,同时该系统能比较高效地为指定缺陷生成触发数据。
相关内容
相关标签