【问题标题】:Fault/error/failure in this example [closed]此示例中的故障/错误/失败[关闭]
【发布时间】:2012-08-03 06:59:11
【问题描述】:

具有以下一般定义:
错误 - 错误的原因(编码错误)
错误 - 可能导致失败的错误状态失败 - 服务偏离正确服务

以下代码的正确应用是什么:

当余额为 100 或更少时,代码不应允许提款

  if (Balance<100) 
    {
    return false; 
    }
    else WithDraw();

据我了解,错误在于缺少 = 运算符。但是错误和失败会是什么?

【问题讨论】:

  • 错误、错误、失败的简单示例:一个方法应该返回一个包含 100 个随机数的数组,但由于代码中的错误,它有时会错误地返回一个包含 101 个随机数的数组里面的数字。然而,请求数组的方法假设有 100 个元素 for (int i = 0; i &lt; 100; ++i) 所以它永远不会注意到错误,也没有任何失败。 (如果错误导致了 99 个元素,则可能会失败,但尽管本示例中出现错误,但其余代码并未失败。)

标签: testing computer-science terminology


【解决方案1】:

这个问题需要一些上下文。这似乎也是一个“家庭作业”风格的问题。 根据提供的定义,“缺少 = 运算符”可能不是“错误”。

正在测试的变量“余额”可能明确需要小于 100。

至于错误,您指的是“状态”。在这方面,您可能需要查看以前的控制流语句(if/for/while)来评估状态。

失败...好吧,也许您正在处理简单的转换错误(int/float),这在处理面向货币的程序时很常见。

当提到代码没有做它应该做的事情时,我们通常指的是:

  • 编译/运行时错误
  • 逻辑错误

【讨论】:

  • 缺少运算符肯定是错误,因为它是编码错误会导致错误。请阅读此或可靠性定义
【解决方案2】:

如您所说,代码中存在错误(编码或逻辑错误),比较中缺少运算符。如果余额从来没有正好是 100,那么可能没人注意到这个错误。

如果在某个时候余额为 100 并且检查已完成,则会暴露错误。系统将处于错误状态。它不应该允许撤回,而是允许撤回。如果允许提款,则系统无法正常工作,用户会看到失败。

在这个小例子中,很难区分错误和失败,因为用户可能会看到错误状态的后果。如果我们假设在代码中的其他地方还有另一次检查,并且因为提款没有完成,那么系统将处于错误状态(错误已实现),但另一种情况会掩盖这一情况,而用户不会看到失败了。

【讨论】:

  • 谢谢你,我已经问了好几次了,你的回答是迄今为止我收到的最好的。你能举一个发生错误但不会立即导致失败的例子吗?
  • 我稍微编辑了你的问题(产生了非常糟糕的代码),以便更容易解释并相应地修改我的答案。
  • 谢谢,但你没有弄错吗?您说当余额为 100 时,BalanceOK 的值为 false,但根据代码,情况并非如此。
  • 啊,你说得对。我现在看不到简单的方法来使这个例子工作而不让它变得更加可怕。也许最好回到你原来的问题。
  • 我刚刚更改了要求,现在看起来很好 :) 即使是完全不同的示例,我也会很高兴 ;)
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多