← 最新论文
💻 computer science

Exceptional Behaviors: How Frequently Are They Tested?

本文对 25 个 Python 系统进行了实证研究,结果表明,尽管 21.4% 的执行方法会抛出异常,但这些异常行为频繁发生(中位数为 10 次调用中出现 1 次),却往往未经过测试,从而提出了改进测试工具以及重新评估异常抛出场景稀有性的建议。

原作者: Andre Hora, Gordon Fraser

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

原作者: Andre Hora, Gordon Fraser

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

想象一下你是一位经营着一家繁忙餐厅的主厨。大多数时候,你都在烹饪完美的佳肴,让顾客满意(这是正常行为)。但有时,事情会出错:烤箱坏了、顾客点了一个你没有的食材,或者送货迟到了(这些都是异常情况)。

在计算机编程的世界里,这些“出错的情况”被称为异常(exceptions)。开发者编写特殊的代码来捕捉并优雅地处理这些错误,以免整个餐厅被烧毁。

这篇论文就像是一支由食品检查员组成的团队,他们走访了 25 家不同的真实世界餐厅(软件系统),观察员工在日常演习(测试套件)中实际练习处理这些灾难的情况。

以下是他们的发现,简单分类如下:

1. “演习”与“实战”

检查员发现,虽然厨师(开发者)非常擅长练习如何烹饪完美的佳肴,但他们很少练习当烤箱起火时该怎么办。

  • 数据统计: 在他们检查的每 100 个烹饪工位(方法)中,只有大约 21 个在演习期间真正遇到过问题。
  • 类比: 这就像是一场消防演习,100 个人里有 79 个人甚至从未假装过火警铃响过。他们只是在继续烹饪。

2. 错误到底发生的频率有多高?

对于那些确实会遇到问题的工位,检查员观察了这些错误发生的频率。

  • 数据统计: 平均而言,对于一个可能出现问题的工位,在他们尝试烹饪的 10 次中,只有 1 次 真的发生了问题。
  • 类比: 想象一位可能会煎糊牛排的厨师。如果他煎 100 块牛排,他只会煎糊 10 块。剩下的 90 块都是完美的。大多数时候,“煎糊”是一个罕见的事件。

3. “罕见”灾难 vs. “常见”灾难

检查员注意到两类截然不同的“易发生灾难”的工位:

  • “罕见”灾难(占 80% 的情况): 大多数可能出错的工位,几乎从不出错。例如,某个工位可能有一条规则:“如果顾客点了‘独角兽汉堡’,就大发雷霆。”但因为从来没人点“独角兽汉堡”,所以厨师从未需要过大发雷霆。
  • “常见”灾难(占 20% 的情况): 有些工位一直在出错。想象一个工位规定:“如果顾客点了‘无麸质披萨’,就大发雷霆。”如果 90% 的顾客都点无麸质披萨,那么这位厨师就会不停地大发雷霆。
    • 转折点: 在这些罕见的情况下,“大发雷霆”(抛出异常)实际上是该工位工作的常态!论文认为,仅仅因为一段计算机代码抛出了错误,并不一定意味着出了“故障”或“异常”。有时,这个错误本身就是预期的结果。

4. “隐藏”的错误

最有趣的发现之一是关于那些发生了但从未被“经理”(测试套件)察觉到的错误。

  • 类比: 想象一名副厨掉了一个盘子,但主厨戴着降噪耳机,没听到声音。副厨迅速把盘子捡起来并继续烹饪。经理认为一切正常,但盘子确实掉过。
  • 现实情况: 研究发现,许多错误发生在代码内部,被安全网(try/except 代码块)立即捕捉并处理了,因此从未到达顶层测试。测试程序甚至不知道这些错误曾经发生过。

5. “昂贵”的安全网

最后,论文指出了能量的浪费。

  • 类比: 想象一位厨师在炉灶旁放了一个巨大、沉重且昂贵的灭火器,以防万一。但他每年只用一次。这个灭火器又重又占地方。
  • 建议: 论文建议,对于那些错误发生得极其罕见(如“独角兽汉堡”示例)的工位,与其准备一个沉重的灭火器,不如直接在烹饪前检查订单是否有效。这会让厨房运行得更快、更高效。

总结

这篇论文告诉我们:

  1. 大多数错误是罕见的: 我们很少测试“如果出错怎么办”的情景,因为在现实生活中它们并不经常发生。
  2. 有些错误是正常的: 对于某些特定任务,所谓的“失败”实际上是系统工作的标准方式。
  3. 我们会漏掉隐藏的错误: 许多错误发生后被立即修复,因此我们的测试甚至无法感知它们的存在。
  4. 我们可以更高效: 有时,我们正在为几乎不会发生的问题使用沉重且昂贵的防护机制,我们可以将其更换为更简单的检查。

作者建议,我们需要更好的工具来帮助厨师(开发者)练习那些罕见的灾难场景,并弄清楚哪些安全网实在是太沉重、不值得随身携带。

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

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

试用 Digest →