← 最新论文
💻 computer science

Flaky Tests in a Large Industrial Database Management System: An Empirical Study of Fixed Issue Reports for SAP HANA

本文提出了一种基于大语言模型(LLM)的方法,用于自动对 SAP HANA 数据库系统中的测试不稳定(flaky tests)根因进行分类,研究表明并发问题是最普遍的原因,并强调了需要针对不同测试类型制定专门的缓解策略。

原作者: Alexander Berndt, Thomas Bach, Sebastian Baltes

发布于 2026-02-04
📖 1 分钟阅读☕ 轻松阅读

原作者: Alexander Berndt, Thomas Bach, Sebastian Baltes

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

想象一下,你是一位经营着一家规模宏大、高端餐厅(SAP HANA)的主厨。每天,你都有一群副厨(开发人员)在编写新的食谱(代码)。在这些食谱送到顾客面前之前,它们必须通过品尝测试(软件测试)。

通常情况下,品尝测试很简单:这道菜要么美味(通过),要么烧焦了(失败)。但有时,测试会变得不稳定(Flaky)。这意味着如果你连续品尝同一道菜三次,第一次可能味道完美,第二次烧焦了,第三次又恢复了完美。这让人非常困惑!厨房的工作人员不知道到底是食谱本身出了问题,还是测试本身出了故障。

这篇论文是一个关于 SAP HANA 厨房如何查明其品尝测试为何如此不稳定的侦探故事,他们使用了一种新型的“超级机器人助手”(大语言模型)来帮助处理成千上万条投诉。

以下是他们调查过程的详细拆解:

1. 问题所在:“也许”测试

在一个巨大的工业化厨房里,你承担不起猜测的代价。如果一个测试不稳定,整个厨房就会停滞。主厨(开发人员)不得不等待、重新运行测试并浪费时间。这破坏了信任;工作人员开始忽视测试结果,因为它们看起来并不可靠。

2. 侦探工作:使用机器人助手

研究人员面对的是堆积如山的 559 份“厨房投诉单”。每份单据都描述了一个不稳定的测试以及开发人员认为出错的原因。如果靠人工阅读这些单据,将耗费极长的时间。

因此,他们尝试了一个新技巧:他们要求三个不同的 AI“机器人助手”阅读这些投诉单,并将它们分类(例如“时间问题”、“糟糕的食谱”或“坏掉的烤箱”)。

  • 策略: 他们并没有只问一次。他们向每个机器人提出了五次同样的问题。如果一个机器人在五次中给出了四次相同的答案,他们就信任它。然后,他们在三个机器人之间进行“投票”。
  • 结果: 机器人的意见高度一致,并且它们与人类专家的意见一致率达到了 63%。这证明了机器人可以快速且准确地帮助人类处理海量数据。

3. 重大发现:“高峰时段”问题

在对投诉单进行分类后,研究人员发现了最常见的罪魁祸首:并发性(Concurrency)(占所有案例的 23%)。

类比: 想象一个繁忙的厨房,两位厨师试图同时使用同一个搅拌机。一位厨师抓住了它,另一位厨师推开了他,突然间,搅拌机坏了或者奶昔被弄混了。在软件中,这被称为“竞态条件(Race Condition)”。因为 SAP HANA 是一个能够同时处理数千个请求的数据库(就像一个非常忙碌的厨房),这些“冲突”经常发生。

4. 两类厨师:单元测试 vs. 系统测试

厨房有两种类型的测试者,他们面临的问题也不同:

  • “微观品尝者”(原生单元测试): 这些厨师测试微小且特定的食材(比如仅仅是盐或仅仅是面粉)。
    • 他们的不稳定问题: 他们经常因为**平台(Platform)问题(他们使用的特定炉灶表现不同)或隔离(Isolation)**问题(一个测试无意中留下了一把脏勺子,影响了下一个测试)而失败。
  • “全餐品尝者”(系统测试): 这些厨师从头到尾测试整顿饭。
    • 他们的不稳定问题: 他们经常因为超时(Timeouts)(菜肴烹饪时间过长,导致烤箱关闭)或断言脆弱性(Oracle Brittleness)(测试过于挑剔,预期酱汁必须恰好是 3.0 克,但实际是 3.01 克,因此判定失败)而失败。

5. “集体失败”模式

研究人员还观察了多个测试同时失败的情况。

  • 发现: 当许多测试同时失败时,几乎总是由于并发性问题(整个厨房都在赶时间)或平台问题(整个建筑的电源在闪烁)。
  • 趋势: 在厨房更改了规则,为所有烹饪设定了一个统一的全局时间限制后,关于“超时”的投诉显著下降。这表明,通过改变规则可以解决不稳定性问题。

6. 结论:并非只有单一原因

最大的启示是,不稳定的测试很少仅由一个简单的因素引起。有时测试失败是因为竞态条件,同时还叠加了特定的计算机设置和缓慢的网络。

论文指出,与其试图寻找一个“根本原因”(比如仅仅责怪盐),我们应该接受这些失败是一个多标签问题(Multi-label Problem)——即多种错误成分共同作用的复杂组合。

简而言之: 研究人员利用 AI 机器人阅读了数千份错误报告,并发现,在这个庞大的数据库系统中,最大的混乱来源是“同时发生的事件过多”(并发性)。他们还了解到,不同类型的测试失败原因各异,而解决不稳定性需要理解这些复杂且重叠的原因。

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

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

试用 Digest →