来源笔记

DiffTestGen: Change-Directed LLM-Based Testing for Exposing Behavioral Differences

Code IntelligenceAutomated TestingLLM Test GenerationDifferential TestingSoftware Maintenance

DiffTestGen 使用面向变更的 LLM 测试生成方法,揭示 Python 项目变更前后版本之间的行为差异。它结合静态调用图引导、项目文档、迭代式错误修复和联合覆盖率反馈。

  • 现有测试生成器通常无法执行拉取请求修改的代码,尤其是在变更函数为私有函数或难以通过公共 API 访问时。
  • 这很重要,因为未被发现的行为差异可能导致回归、兼容性问题和可靠性问题;同时,下游回归检测器依赖能够执行变更代码的测试。
  • 分析每个拉取请求的 AST 和差异,识别变更函数,将其分类为公共方法、私有方法或特殊方法,并查找可公开访问的入口点。
  • 使用静态调用图分析、API 文档、函数签名、文档字符串、导入信息和使用指导,告诉 LLM 如何到达变更代码,同时避免直接调用私有函数。
  • 生成测试,通过反馈循环修复语法和运行时错误,并在隔离的旧版本和新版本程序环境中执行稳定的测试。
  • 使用联合覆盖率迭代提供有针对性的覆盖率反馈。联合覆盖率结合两个程序版本中的变更行覆盖率,持续迭代,直到覆盖率达到 100% 或不再提升。
  • 在来自两个开源 Python 项目数据集的 463 个拉取请求上,DiffTestGen 在 78.2% 的拉取请求中揭示了行为差异,平均联合覆盖率达到 90.7%。
  • 在两个数据集上分别进行评估时,它在 61.8% 和 79.7% 的拉取请求中揭示了行为差异,平均联合覆盖率分别为 64.5% 和 92.7%。
  • 与报告中的基线方法相比,它总共多揭示了 99 个拉取请求中的行为差异,并使两个数据集上的代码覆盖率分别提高了 12.5 和 15.6 个百分点。
  • 与 Testora 回归检测器集成后,结果表明 DiffTestGen 发现的行为差异能够揭示现有最佳方法遗漏的回归缺陷。