2

我一直在考虑潜在的故障,无法找出一个例子。根据定义,休眠故障是不会导致错误并因此不会导致故障的故障(代码中的缺陷)。谁能给我一个例子?我唯一想到的是未使用的错误代码..谢谢

4

2 回答 2

4

潜在故障比人们想象的要普遍得多。大多数程序员都经历过思考“我在想什么?怎么可能正确运行?”的时刻即使代码没有显示错误行为。一个经典案例是错误的极端情况处理,例如内存分配失败:

char *foo = malloc(42);
strcpy( foo, "BarBaz" );

上面的代码在大多数情况下都可以正常工作,并且可以很好地通过测试;但是,当 malloc 由于内存耗尽而失败时,它会惨遭失败。故障存在,但处于休眠状态。

于 2012-07-30T08:40:04.373 回答
2

休眠故障只是在您将正确的输入[编辑:或环境]发送到系统之前不会被发现的故障。

一个经典的例子来自Therac-25。直到技术人员“流利”地使用系统后,才出现由一组不太可能的输入键引起的竞争条件。他们记住了常用治疗的关键笔划,这意味着他们可以很快输入它们。

我想到的其他一些:

  • Y2K bug 都是休眠故障,直到 2000 年左右...
  • Photoshop 7 在我的 Windows 7 机器上仍然可以正常运行,但它认为我的 1TB 磁盘已满。一种解释是,用于保存可用空间的数据类型并非旨在考虑如此大量的可用空间,并且存在溢出导致可用空间显得不足。
  • 使用 TFTP 传输大于 32MB 的文件(块计数器只能达到 16 位的 65535)可以揭示许多旧实现中的休眠错误。

在最后一组示例中,有人可能会争辩说没有规范要求这些系统支持此类实例,因此它们并不是真正的错误。但这涉及到规范的完整性。

于 2012-11-05T00:17:33.353 回答