"早期失败"的含义是什么意思,什么时候你想这样做?

And*_*imm 25 fail-fast-fail-early

"早期失败"的含义是什么意思,在什么情况下这种方法最有用,何时会避免这种做法?

Ber*_*t F 28

本质上说,快速失败(又名失败早)是编写软件,使得当有一个问题,该软件未能尽快为明显的可能,而不是试图在一个可能是不稳定的状态继续.


由Jim
Fowler编辑的Jim Shore 快速失败
http://www.martinfowler.com/ieeeSoftware/failFast.pdf

...
幸运的是,有一种简单的技术可以大大减少软件中这些错误的数量.它不会减少错误的总体数量,至少在开始时不会减少,但它会使大多数缺陷更容易找到.

该技术是将您的软件构建为"快速失败".

立即和明显的失败

有些人建议您自动解决问题,从而使您的软件更加强大.这导致软件"缓慢失败."程序在发生错误后继续工作但稍后以奇怪的方式失败.

快速失败的系统恰恰相反:当问题发生时,它会立即失败并且明显失败.快速失败是一种非直观的技术:"立即失败并且明显失败"听起来会让你的软件更加脆弱,但它实际上使它更加强大.错误更容易找到和修复,因此更少的投入生产.
...


还要注意一个失败快速迭代器的相关概念- 一个迭代器,它在对迭代器之外的集合进行某些修改之后,尽快抛出而不是继续处于潜在的不稳定或非确定性状态.

  • 通过一个反例来解释,一些不"快速失败"的东西将是大多数网络浏览器和HTML.考虑这个无效的HTML:`<div> <b>粗体文本!</ div>`它缺少`</ b>`,但是网页浏览器选择与"早期失败"相反,试图从问题中恢复并希望它不会让事情变得更糟.在他们的情况下,这是一个明智的选择.但是当你编写代码(而不是视觉表示层)时,为了正确性可能是一个更好的策略. (8认同)
  • @KonradRudolph:确实,如果所有浏览器在不平衡的“&lt;b&gt;”标记上失败,我们就不会有带有损坏的“&lt;b&gt;”标记的网站,因为网络开发人员在开发过程中会注意到它。不幸的是,一旦(当时)市场领先的浏览器开始接受损坏的 HTML,其他浏览器就必须效仿,否则人们就不会使用他们的产品(“浏览器 X 不会显示我最喜欢的网站,但它可以与浏览器 Y 配合使用” ,所以我将使用浏览器 Y。”) (4认同)
  • @Darien“就他们而言,这是一条明智的路线。” — 这一主张(称为“稳健性原则”或“Postel 定律”)是在没有证据支持的情况下提出的,此后受到[严厉批评](https://tools.ietf.org/id/draft-thomson-postel-was -错误-03.html)。事实上,几乎可以肯定这是错误的。至少,它使维护网络浏览器代码库的成本不必要地增加,并且阻止了这些资源被用于更有价值的目的。 (3认同)

And*_*imm 7

“早期失败”意味着如果出现问题,程序应该引发异常并停止工作。(在实用程序员的提示列表中将其描述为Crash Early

在我的生物信息学工作中,我倾向于使用“早期失败”方法,因为我最关心的是确保正确性。相比之下,Rails 允许您隐藏故障。例如,Railstry允许您在对象上调用某些内容,并且如果该对象是nil. 我想这是因为对于网站来说,确保程序持续运行比正确性更重要。

  • @Michael Andrew 正在为 SO 增加价值并在这里分享他的工作,我对此没有任何错误或愚蠢。是的,您甚至可以使用 SO 作为博客,甚至我们鼓励这样做。请参阅http://meta.stackexchange.com/questions/17463/should-i-ask-a-question-i-know-the-answer-to和http://meta.stackexchange.com/questions/2706/moving -个人技术博客到 stackoverflow-serverfault (7认同)
  • 我特别说过“人们可以回答自己的问题”,但我认为常见问题解答条目主要是为那些提出问题,搜索一段时间,找到答案,然后将其发布在自己的问题上的人准备的,因为其他人都不知道。根据您回答的速度,看起来您发布的问题*已经知道*答案,这有点愚蠢;你也可能刚刚在博客上谈论过它。我可以整天坐在这里发布我已经知道答案的问题,并立即发布这些答案 (2认同)

Ste*_*ard 5

早期失败体现了这样的想法:在构建软件时,您失败或测试失败或者您发现错误更容易纠正(也更便宜).它也适用于您的业务模型.最好早点发现(例如测试中),而不是发布后.

  • @NomeN:“热情的程序员”建议“尽早失败”也应该适用于商业:如果出现问题,请告诉其他人,不要掩盖。 (2认同)