论文

概括测试用例以实现全面的测试场景覆盖

Generalizing Test Cases for Comprehensive Test Scenario Coverage

摘要

测试用例对于软件开发和维护至关重要。在实践中,开发人员根据对需求的理解和对不同测试场景的推断,从隐式模式中派生出多个测试用例,每个测试用例都验证焦点方法的特定行为。然而,生成全面的测试非常耗时且容易出错:许多本应伴随初始测试的重要测试只是在显着延迟之后才添加,有时只是在触发错误之后才添加。现有的自动化测试生成技术主要关注代码覆盖率。然而在实际项目中,实际测试很少仅由代码覆盖率驱动,因为测试场景不一定与控制流分支保持一致。相反,测试场景源自需求,这些需求通常没有记录并隐式嵌入到项目的设计和实现中。然而,开发人员编写的测试经常被视为可执行的规范;因此,即使是反映开发人员意图的单个初始测试也可以揭示潜在的需求和应验证的不同场景。在这项工作中,我们提出了 TestGeneralizer,一个用于泛化测试用例以全面覆盖测试场景的框架。 TestGeneralizer 精心策划了三个阶段:(1)增强对焦点方法和初始测试背后的需求和场景的理解; (2)生成测试场景模板,并将其具体化为各种测试场景实例; (3) 从这些实例生成并完善可执行测试用例。我们根据 12 个开源 Java 项目的三个最先进的基准来评估 TestGeneralizer。 TestGeneralizer 实现了显着改进:在基于突变和 LLM 评估的场景覆盖率方面,分别比 ChatTester +31.66% 和 +23.08%。