Error handling 在编写代码时,您是主动还是被动地处理错误?

Error handling 在编写代码时,您是主动还是被动地处理错误?,error-handling,project,error-checking,Error Handling,Project,Error Checking,换句话说,您是花时间预测错误并编写代码来绕过这些潜在问题,还是按照自己认为合适的方式编写代码,然后逐个问题解决任何错误 我最近一直在思考这个问题,我是一个非常被动的人。我编写我的代码,尝试一下,返回纠正错误并重复,直到应用程序按预期工作。然而,我的一位朋友表示,他花时间思考每一行是如何解释的,并在错误发生之前修复错误 我必须指出,重新激活是纯粹的预激活。在我的应用程序上线之前,我一定要确保它正常运行 应该始终保持平衡 过多的错误检查速度慢,并导致垃圾代码。没有足够的错误检查会使您的程序在边缘情况

换句话说,您是花时间预测错误并编写代码来绕过这些潜在问题,还是按照自己认为合适的方式编写代码,然后逐个问题解决任何错误

我最近一直在思考这个问题,我是一个非常被动的人。我编写我的代码,尝试一下,返回纠正错误并重复,直到应用程序按预期工作。然而,我的一位朋友表示,他花时间思考每一行是如何解释的,并在错误发生之前修复错误


我必须指出,重新激活是纯粹的预激活。在我的应用程序上线之前,我一定要确保它正常运行

应该始终保持平衡

过多的错误检查速度慢,并导致垃圾代码。没有足够的错误检查会使您的程序在边缘情况下崩溃,这在交付后很难发现


因此,您可以决定某段代码的可靠性,并相应地实现错误检查。一些测试实用程序可能不是非常可靠-无错误检查。第三方搜索服务在深层后台使用的COM服务器应该是超级可靠的-更多的错误检查。

我认为单独问这个问题有点奇怪,而且非常主观,但是显然有很多技术允许你做到每一个。我倾向于使用以下两种方法:

  • 测试驱动开发(这似乎是主动的)
  • 强大的静态类型(被动的,但是一个紧凑的迭代开发周期的一部分,如中所述,它是由我的ML编译器强制执行的,我编译了很多)
我偶尔会转向程序的正式验证领域。这肯定是“被动的”,但如果你想得更直接一点,它会使验证更容易


我还必须说,我重视编程中的许多先入为主的思想。避免bug的最简单方法是一开始就不要编写它们。有时这是不可避免的,但通常花多一点时间思考问题可以得到质量更好的解决方案,然后剩下的就可以用我上面提到的自动化方法来解决了。

我通常会问自己一些编码时的“如果”,比如

  • 用户单击按钮,如果他们没有选择日期怎么办
  • 用户正在搜索框中键入内容,如果他们试图在其中键入html,该怎么办
  • 我的标签文本取决于共享驱动器的值,如果它没有映射呢

等等。通过这样做,我发现当应用程序上线时,错误会减少很多,我可以专注于修复更多模糊的错误,而不是纠正本来应该存在的条件

在考虑错误处理时,我遵循一个简单的原则:垃圾输入,垃圾输出。如果你不想让任何垃圾(例如无效输入)弄乱你的软件,你必须找到软件中所有它可以进入并处理的点。当然,你的软件越复杂,就越难找到每一个切入点,但我觉得,你在前期做得越多,以后需要做的反应就越少。

我提倡积极主动的方法

  • 我试图以这种风格编写代码,从而产生可维护和可靠的代码
  • 我使用防御性编程技术来防止由于注意力的丧失和类似的错误而在代码中出现愚蠢的错误
  • 我根据fortress原理设计了数据库模型,SQL代码检查每次奇异操作后的结果
  • 我想到了这部分代码可能会出现的潜在问题,我对此进行了解释。不是所有的可能性,而是我现在能想到的主要可能性
这通常会导致软件运行相当平稳。有时它甚至会让我感到惊讶,但这是预期的目标,所以我们来了。

IMHO,单词“Error”(或其松散的同义词“bug”)本身意味着它是一种无法预见的程序行为

我通常会在设计时考虑所有可能的场景。当然,通常不可能想到所有可能的情况。但是,仔细考虑并考虑尽可能多的场景通常比尽快让某些东西工作要好。这节省了大量调试和重新设计代码的时间和精力。我经常坐下来用笔和纸,甚至是最小的编程任务,然后才真正把任何代码输入到我的编辑器中

正如我所说,这不会消除所有错误。对我来说,就调试时间而言,这是值得的。另一个好处是,它带来了更可靠、更易于维护的设计,更少的错误修复和以后添加的特殊情况。但是在任何情况下,代码完成后都必须进行大量调试

当您只需要模型或快速原型时,这不适用。此外,诸如截止日期之类的实际限制常常使彻底评估变得困难或不可能。

什么样的编程?不可能以任何一般的方式回答这个问题。(这就像问“你玩的时候戴头盔吗?”——好吧,玩什么?)

在工作中,我在一个数据库支持的网站上工作。这些要求很严格,如果我没有预料到用户会把它搞砸,我会在一天中的某个小时接到一个电话来修复它

在家里,我正在做一个项目。。。我甚至不知道它能做什么。我不能处理“错误”,因为我不知道在这种情况下什么是“错误”,因为我不知道什么是正确的行为。程序的整个目的可以而且经常在几分钟到几小时的时间范围内改变,因此,即使在这么早的时候花上几分钟思考错误也完全是浪费时间。(这比浏览更糟糕,因为错误处理会增加代码行。)

我想唯一的