表达“早期失败”是什么意思,在什么情况下这种方法最有用,何时会避免这种做法?
答案 0 :(得分:25)
从本质上讲,快速失败(又名早期失败)就是对您的软件进行编码,以便在出现问题时,软件失败 as 和就像可能一样明显,而不是试图在可能不稳定的状态下进行。
快速失败
作者:Jim Shore 由Martin Fowler编辑 http://www.martinfowler.com/ieeeSoftware/failFast.pdf...
幸运的是,有一种简单的技术 将大大减少这些数量 你的软件中的错误。它不会减少 错误的总数,在 至少不是一开始,但它会成功 大多数缺陷更容易找到。技术是建立你的 软件“快速失败。”
立即和 可见的失败
有些人建议制作 你的软件工作健壮 自动解决问题。 这导致软件“失败缓慢”。 该计划继续工作 错误但后来以奇怪的方式失败。
快速失败的系统恰恰相反: 当问题发生时,它立即失败 并且明显地。快速失败是不直观的 技术:“立即失败,明显失败” 听起来它会使你的软件更多 脆弱,但它实际上使它更强大。 错误更易于查找和修复,因此更少进入 生产。
...
还要注意 fail-fast iterator 的相关概念 - 迭代器,在对迭代器之外的集合进行某些修改之后,尽快抛出而不是在可能不稳定的情况下继续,或非确定性状态。
答案 1 :(得分:5)
早期失败体现了以下想法:在构建软件时,您失败或测试失败或者您发现错误时更容易纠正(也更便宜)。它也适用于您的业务模型。最好早点发现(例如测试版),而不是发布后。
答案 2 :(得分:4)
“早期失败”意味着程序应该引发异常并在出现问题时停止工作。 (它在实用程序员的提示列表中描述为Crash Early)
在我的生物信息学工作中,我倾向于使用“早期失败”方法,因为我最关心的是确保正确性。相比之下,Rails允许您隐藏故障。例如,Rails'try
允许您在对象上调用某些内容,如果该对象为nil
,则不会引发异常。我想这是因为有了网站,确保程序继续运行比正确性更重要。
答案 3 :(得分:1)
我曾经有一个为我工作的初级oracle程序员,他在所有代码周围放置了“忽略一切”异常块,因此从未见过错误。这最初让他的代码看起来很棒,但是: A)虫子需要更长的时间才能找到; 和 B)之后我失去了所有(好吧,80%)对自己能力的信念。
我已经教过人们,这是一件非常糟糕的事情,因为它隐藏了错误。
不要将此与能够处理低质量输入的代码模块(例如在浏览器中也不是有效的XHTML的HTML)混淆 - 这些根本不需要导致失败。更有可能的是,他们确实多年前导致失败,但解决问题的方法是让系统对如何恢复做出合理的假设。
答案 4 :(得分:-1)
这意味着:“尽早捕捉错误”。如果可能的话,你想知道他们在那里就在那里=)。
越早发现错误,删除它就越便宜。如果你在编写错误的线路时就能知道错误,那就太棒了。您可能确切地知道您打算做什么,并且最有能力快速删除该错误。
另一方面,如果你只是在一个月后或者在它被释放后捕获了这个bug,那么伤害就会大很多。用户已经不得不处理它,你不会记得你在想什么(或者你甚至不会为公司工作,所以有人需要找出你的想法)。