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

时间:2010-09-03 14:54:20

标签: error-handling project error-checking

换句话说,您是否花时间预测错误并编写代码以解决这些潜在问题,或者您是否按照您认为合适的方式编写代码,然后逐个问题地解决任何错误?

我最近一直在思考这个问题,而且我非常反应灵敏。我编写代码,给它一个旋转,返回正确的错误并重复,直到应用程序按预期工作。然而,我的一位朋友提出,他花时间思考如何解释每一行,并在错误出现之前修复错误。

我必须指出,重新活跃是纯粹的PRE-live。我绝对确保我的应用程序在它上线之前正在运行。

7 个答案:

答案 0 :(得分:4)

应该始终保持平衡。

太多错误检查很慢并导致垃圾代码。没有足够的错误检查会使程序在边缘情况下崩溃,这些情况在发货后不太好发现。

因此,您决定一些代码应该是多么可靠,并相应地执行错误检查。某些测试实用程序可能不是很可靠 - 更少的错误检查。在深背景中由第三方搜索服务使用的COM服务器应该是超级可靠的 - 更多的错误检查。

答案 1 :(得分:0)

我认为孤立地问这个有点奇怪,而且非常主观,但显然有很多技术允许你做每一个。我倾向于使用这两个:

  • 测试驱动的开发(这似乎是主动的)
  • 强大的静态类型(反应性,但是紧密迭代开发周期的一部分,如我的ML编译器强制执行,我编译很多)

偶尔我会突然进入正式的程序验证世界。这肯定是“反应性的”,但如果你认为更多的前期,它往往会使验证更容易。

我还必须说,我非常重视编程中的许多前期思考。避免错误的最简单方法是不首先编写错误。有时它是不可避免的,但通常花一点时间来思考问题可以带来质量更好的解决方案,然后其余部分可以使用我上面谈到的各种自动化方法。

答案 2 :(得分:0)

我经常在编码时问自己一堆假设,比如

  • 用户点击按钮,如果他们没有选择日期怎么办?
  • 用户正在搜索框中输入内容,如果他们尝试在那里输入html怎么办?
  • 我的标签文字取决于共享驱动器的值,如果没有映射会怎样?

等等。通过这样做,我发现当应用程序确实上线时,错误会少一些,我可以集中精力修复更加模糊的错误,而不是纠正应该开始的条件。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我提倡积极主动的做法。

  • 我尝试以该样式编写代码,从而产生可维护且可靠的代码
  • 我使用防御性编程技术来防止因我失去注意力而导致的代码中的愚蠢错误
  • 我根据要塞原则设计数据库模型,每次奇异操作后检查结果的SQL代码
  • 我想到了这部分代码可能会发生的潜在问题,而我也会考虑到这一点。不是每一种可能性,而是我现在能想到的主要的可能性。

这通常会导致软件运行相当顺利。有时它甚至让我感到惊讶,但这是预期的目标,所以我们在这里。

答案 5 :(得分:0)

恕我直言,“错误”(或其松散的同义词“bug”)本身意味着它是一种无法预见的程序行为。

我经常尝试设计所有可能的场景。当然,通常不可能想到所有可能的情况。但是考虑并允许尽可能多的场景通常比仅仅让某些东西尽快工作更好。这节省了大量时间和精力来调试和重新设计代码。在将任何代码实际输入编辑器之前,我经常用笔和纸坐下来进行最小的编程任务。

正如我所说,这不会消除所有错误。对我来说,在调试时间方面,它可以多付出代价。另一个好处是它可以实现更加坚固和可维护的设计,减少错误修复黑客和以后添加的特殊情况。但无论如何,在代码完成后你将不得不进行大量的调试。

当你想要的只是一个模型或快速原型时,这不适用。此外,诸如截止日期之类的实际限制通常会使评估变得困难或不可能。

答案 6 :(得分:0)

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

在工作中,我正在开发一个由数据库支持的网站。要求是严格的,如果我没有预料到用户会如何搞砸,我会在一天的某个奇怪时刻接到电话来解决它。

在家里,我正在制作一个节目...我甚至都不知道它会做什么。我不能处理'错误'因为我不知道在这种情况下是什么'错误',因为我不知道将会是什么样的正确行为。该程序的整个目的可以并且经常在几分钟到几小时的时间范围内发生变化,因此即使花费几分钟时间考虑这些错误也是完全浪费时间。 (它比浏览SO更糟糕,因为错误处理会增加代码行。)

我想唯一的答案就是“我做了长期节省时间的事情”,毕竟,这是使用机器为我们工作的全部理由。