论文部分内容阅读
软件日趋复杂,大量软件高度可配置,给软件测试带来了极大的挑战。组合测试是一种高效的软件测试方法,能有效检查出由参数相互作用而导致的软件故障。但是在实际应用过程中,约束的存在会对组合测试造成很大的影响。约束问题的解决,是有效使用组合测试的关键。然而关于约束的研究远远不够,我们做了以下几个方面的工作。第一,我们讨论了约束对组合测试造成的影响,并调研了文献和真实系统中约束的存在情况,对约束进行了分类。我们发现,在真实系统中约束是普遍存在的,根据其表现形式分为禁止约束、必须约束、数值约束和屏蔽约束4种。我们提出了约束间相互转化的方法,特别是屏蔽约束的转化,使得约束能够被统一处理。第二,我们将现有约束处理策略按照处理时机分为覆盖表生成前处理、覆盖表生成时处理和覆盖表生成后处理3种,详细介绍了各种处理方法的步骤并进行了分析。此外,我们提出了一种测试用例修正法和一种测试用例集后处理法。实验结果表明,在覆盖表生成时采用直接约束避免法不仅会得到较小的覆盖表,而且生成效率也非常高。第三,为方便测试人员使用,我们开发了一个支持约束处理的组合测试工具CTCH(Combinatorial Testing with Constraint Handling)。该工具采用一次一条的生成思路,结合直接约束避免策略,并根据灵活位置对测试用例集进行约简。接着,我们对现有支持约束处理的工具进行了调研,发现大部分工具都采用直接约束避免法。然后,我们将CTCH和其它工具进行了对比。实验结果表明:我们所开发的工具不仅使用方便,而且效果和主流生成工具相比非常有竞争力。第四,我们在一个含有大量约束的系统中使用了组合测试,在这个系统中发现了一些由参数取值组合所触发的软件故障,说明组合测试在含大量约束的实际应用中仍然具有良好的效率和作用。