2012-08-06 147 views
4

有以下一般定义:
故障 - 错误(错误编码)
错误的原因 - 不正确的状态,可能会导致失败
失败 - 从正确的服务的服务的偏差故障/错误/失败

什么将是对下面的代码的正确应用:

代码建议立即进行删除d不允许在100或更少的余额时提取

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

所以据我所知,故障是缺少=运算符。但是,错误和失败会是什么?

+0

故障,错误,失败的简单例子:一个方法应该返回一个包含100个随机数的数组,但由于代码中的错误,它有时会错误地返回一个包含101个随机数的数组。然而,要求数组的方法假设有100个元素(for(int i = 0; i <100; ++ i)),所以它从不会发现错误,也没有任何失败。 (如果错误导致99个元素出现故障,但因为尽管在这个例子中有错误,其余的代码仍然没有失败。) – AnorZaken 2015-09-20 00:59:24

回答

7

存在故障(编码或逻辑错误),如你所说,在比较中缺少运算符。如果从来没有精确的100的余额,那么没有人会注意到这个错误。

如果在某个点有100的余额并且检查完成,错误将被暴露。系统将处于不正确的状态。它不应该允许撤回,而是它。如果允许退出,系统将无法正常工作,并且用户会看到失败。

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

+0

谢谢,我问了几次,你的答案是迄今为止我收到的最好的。你能举出一个错误发生的例子,但不会立即导致失败吗? – user970696 2012-08-06 13:13:30

+0

我编辑了一下你的问题(产生相当可怕的代码),以便更容易解释并相应地修改我的答案。 – Edu 2012-08-06 13:19:42

+0

谢谢,但你没有犯错?您说余额为100时,BalanceOK的价值为假,但根据代码情况并非如此。 – user970696 2012-08-06 13:26:15

-3

这个问题需要一些背景。这似乎也是一个'家庭作业'式的问题。 根据提供的定义,'missing = operator'可能不是'错误'。

变量“余额”被测试可以明确地需要为小于100

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

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

当提到代码没有做它应该做的,我们一般所说的:

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

缺少的操作员是绝对的错,因为它是编码错误,将导致错误。请阅读此或可靠性定义 – user970696 2012-08-06 13:10:18