论文部分内容阅读
软件测试是发现软件中的缺陷、提升软件质量的常用方法,并且软件测试在软件开发过程中得到广泛应用。对于大型软件或一些重要软件而言,一方面,如何生成大量的、高质量的测试用例是非常重要的,这催生了测试用例自动生成方面的方法研究和工具开发。另一方面,测试用例自动生成工具产生的测试用例往往比较庞大,动辄成百上千行,对软件开发者和测试人员验证及修复缺陷带来很大的困难。因此,对测试用例的精简可以显著提升软件测试和开发的效率,它既是当前软件测试领域的一个研究热点,同时具有较高的实用价值。Creduce是一个精简测试用例的工具,可以将具有一定特性的大型c/c++程序精简为具有相同特性的更小的程序。在Creduce中,通过调用一系列插入的、灵活的转换去生成新的变体达到精简的作用,最终生成最简化的测试用例。插入Creduce的转换实际上是一个迭代器,通过遍历测试用例来实现源代码到源代码的转变。然而,我们在研究测试用例自动生成及精简的过程中发现,在Creduce代码中,对于转换的分类处理不够精简。Creduce工具一直重复遍历转换部分的代码,且对不同的转换进行排序。这样增添了许多不必要的处理,使代码的时间复杂度变高。且作为测试用例的来源Csmith,其产生的测试用例无法直接通过Creduce进行精简。Creduce每次只能处理单个测试用例,当处理大批测试用例时,需要测试人员对其进行不断的操作。另外,尽管在Creduce2.2.0版本中增添了并行化的处理,然而对于并行化的处理不够精简,在进程完成后没有对结果进行及时的判断,存储空间也没有得到释放。本文在Creduce的基础上,针对其并行化处理、测试转换分类及批量化等方面存在的问题,设计并实现了一个测试用例精简器Crpro。本文的主要改进包括两个方面:1、对并行化的处理进行优化,在进程完成后对结果进行判断并释放空间。2、对转换的分类处理进行精简,利用Csmith产生的测试用例作为输入进行评测,且对文件进行批量处理。实验表明,Crpro在测试用例精简方面具有较高的性能和有效性。