Deja Vu at Scale: Paraphrase-Robust Detection of Duplicate Gherkin Steps in Behaviour-Driven Software Testing with Sentence-Transformer Embeddings and a 1.1M-Step Open Benchmark

本文通过发布一个包含超过 110 万个步骤的大规模、跨组织的基准测试,并引入一种结合了精确、词汇和语义方法的改写鲁棒检测器,以识别并量化显著的可消除冗余,从而解决了行为驱动开发中重复 Gherkin 步骤的维护成本问题。

原作者: Ali Hassaan Mughal, Noor Fatima, Muhammad Bilal

发布于 2026-06-15
📖 1 分钟阅读☕ 轻松阅读

原作者: Ali Hassaan Mughal, Noor Fatima, Muhammad Bilal

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你是一位规模宏大的协作式食谱编辑。成千上万来自不同厨房的厨师都为之贡献了食谱。随着时间的推移,你注意到一个问题:同样的指令一遍又一遍地出现,只是写法略有不同。

一位厨师写道:“加入两杯面粉。”
另一位写道:“加入 2 杯面粉。”
第三位写道:“放入 2 杯面粉。”

在软件测试的世界里,这些指令被称为 Gherkin 步骤(Gherkin steps)。它们是告诉计算机如何测试一段软件的“食谱”。问题在于,当这些指令被重复使用或稍作改写时,维护起来就会变成一场噩梦。如果你需要更改一个步骤(比如将“加入面粉”改为“加入杏仁粉”),你可能不得不追踪并修改成千上万个副本,而不是只修改一个。

这篇题为 《规模化中的既视感》(Déjà Vu at Scale) 的论文,讲述了如何构建一个超级智能的工具来发现这些重复项(即使它们的写法略有不同),并创建了一个巨大的示例库来证明该工具的有效性。

以下是他们工作的拆解,使用了简单的类比:

1. 问题所在:“既视感”效应

作者发现,在软件世界中,重复现象无处不在。他们研究了 347 个不同的软件项目(就像 347 本不同的食谱),发现了超过 110 万条指令

  • 数据统计: 他们发现,这些指令中有 80% 是其他指令的精确副本。
  • 痛点: 如果一家公司想要修复一个拼写错误或更改一条规则,他们可能需要编辑数千个文件。这就像是在一本食谱中更新一个配方,而这个配方被写在了 1,000 个不同页面的 1,000 本书里。

2. 解决方案:一位“聪明的图书管理员”

作者构建了一个名为 cukereuse 的工具。你可以把这个工具想象成一位超级图书管理员,他能够阅读指令并理解“加入 2 杯”和“加入两杯”是同一回事,即使拼写或空格有所不同。

他们不仅仅使用了一种技巧,而是使用了四层防御系统来捕捉重复项:

  1. 精确匹配(The Exact Match): 如果两条指令完全相同,甚至连最后一个字母都一致(就像两份复印件),它能瞬间捕捉到。
  2. “近似”匹配(The "Almost" Match): 如果指令有 90% 相同(例如“加入 2 杯”与“加入两杯”),它也能捕捉到。
  3. “语义”匹配(The "Meaning" Match): 这是最聪明的部分。它利用人工智能(称为句子转换器/Sentence Transformers)来理解含义。它知道“用户点击按钮”和“由用户点击按钮”意思是一样的,即使单词完全不同。
  4. 混合匹配(The Hybrid): 它结合了“近似”和“语义”检查,以确保万无一失。

3. 证明过程:“金标准”测试

为了证明他们的图书管理员确实很出色,他们并没有凭空猜测。他们创建了一个巨大的测试集

  • 他们提取了 1,020 对 指令。
  • 三位不同的评审人员(即作者本人)手动阅读了这些指令,并判定:“它们是重复的吗?”
  • 他们确保所有人的判断达成了一致(一个被称为 Fleiss' κ = 0.84 的高分,这就像是一组评委在比赛中对胜者达成高度共识)。
  • 结果: 他们的“语义匹配”工具表现得非常好,但“近似匹配”工具是最可靠且诚实的,它在没有被测试规则误导的情况下,正确识别了约 82% 的重复项。

4. 重大发现:“整合”带来的节省

这篇论文中最令人兴奋的部分是他们对节省成本进行的数学计算。

  • 他们发现,在典型的软件项目中,你可以删除大约 62.5% 的重复指令,并用一个“主指令”来替换它们。
  • 类比: 想象你有一本 100 页的食谱。在使用这个工具后,你发现你其实只需要 37 页独特的页面。其他的 63 页只是副本。你可以把它们扔掉,让这本书变得更薄、更容易管理。
  • 他们将此与 ISO/IEC 25010 联系起来,这基本上是关于“优秀软件”的全球规则手册。他们展示了清理这些重复项可以使软件更容易更改(可维护性)且不易出错(可靠性)。

5. 他们向世界发布了什么

作者并没有将他们的发现据为己有。他们发布了一个“入门包”,供任何想要进行此类研究的人使用:

  • 数据: 来自公共软件项目的 110 万条真实世界指令的海量集合。
  • 测试: 带有“金标准”答案的 1,020 对指令。
  • 工具: 用于查找重复项的实际软件代码 (cukereuse)。
  • 规则: 关于他们如何判定什么是重复项的指南手册。

总结

简而言之,这篇论文指出:“软件测试指令中充满了不必要的重复,导致难以管理。我们构建了一个智能工具来寻找这些重复项(即使它们的写法不同),通过大规模高质量测试证明了其有效性,并表明解决这个问题可以为软件团队节省大量的时间和精力。我们将所有的工具和数据免费提供,以便他人使用。”

他们并没有声称:

  • 他们没有准确说明这能节省多少钱(因为每家公司的薪酬体系不同)。
  • 他们没有说这能解决所有的软件质量问题,仅针对重复指令这一特定问题。
  • 他们没有声称其工具适用于私有的、机密的商业数据(因为他们只研究了公开数据)。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →