【.com快速翻译】 “我在测试中没有发现任何错误,所以这意味着没有错误......对吧?”不要那样想。由于大型软件的复杂度很高,无论你做多少测试,都不可能做到零缺陷。因为您无法弄清楚用户使用它的所有方式,所以了解应用程序中错误和异常之间的区别很重要。为此,您必须选择正确的方式来处理这些错误和异常,以积极的态度确保应用程序的正常运行,并对您的开发团队和最终用户负责。测试本身也是一个问题即使你的测试是最彻底的,你仍然只是在测试一个特定的情况,你自己的喜好也在测试过程中发挥作用,使得测试本身有偏差。想象一下,成千上万的用户同时使用你的应用程序,他们也在以数千种方式进行操作。肯定会有你没有测试过的情况。如何正确处理应用程序中的错误简单来说,bug导致错误和异常,在不同的情况下有不同的含义,取决于你更关注问题的哪一方面。主要问题当然是如何更好地处理这些错误和异常,以免它们产生负面后果。首先,让我们看看一些定义以及为什么这些差异很重要。错误和异常有什么区别?有些编程语言对错误和异常有自己的定义,但我想定义这个区别。让我们从错误开始。一个编程错误,通常无法继续并从中恢复,需要程序员进入程序并修改代码来修复它。有时错误会变成异常,以便可以在代码中处理它们。通过简单的检查可以避免错误,如果一些简单的检查还不够,还可以将错误作为异常处理,使应用程序能够解决问题并保持运行在最低限度。除了例外。当出现异常时,需要考虑到不同编程语言的特点。可以忽略或捕获异常,因此代码可以恢复和处理这些情况,而无需将应用程序置于“错误”状态。由于可以忽略异常,此时应用程序仍然可以继续运行,并且还可以记录未处理的异常(这是错误的),因此是否处理这些潜在的异常由开发人员决定。让我们看一些例子。Case1:用户错误当用户输入了错误的数据时,可能暂时不需要处理,但仍然可能导致程序出错和不可恢复的状态。毫无疑问,此时的代码应该进行简单的检查以防止错误情况的发生,你应该进行前后端验证,并抛出异常作为“***防御”。Case2:无法打开文件/下载异常这是一种特殊情况,不会破坏您的整个应用程序。您的应用程序应该能够处理这个问题。下载失败的原因有很多,所以在程序设置过程中,要做好充分的预期和准备。好了,以上就是我定义的错误和异常的区别。这是一个易于遵循的过程,可帮助您更好地处理错误。注意每一个异常“如果我捕捉到每一个异常,我的代码就没有错误,对吧?”就像我在上一篇文章中提到的,并不是所有的错误都会导致异常。这个结论的主要问题是你不知道哪里出了问题。您的代码可能有问题,捕获异常而不做任何事情,您将丢失该信息。不要只是寻找例外并照常做事。发现异常的目的是为了处理它们,创造一个更适合运行的环境。如何将您的应用程序编码为自我恢复抛出和捕获异常是让您的应用程序自我恢复并防止其进入错误状态的好方法。如果您知道可能会抛出哪种异常,那么最好知道捕获到哪种异常会导致应用程序停顿。(我们讲了一点软件架构报错)说到具体的异常类型,你可以收集用户的反馈,这样你就知道究竟是什么原因导致程序出错了,你可以更好地处理这些情况。为什么指定要捕获的异常类型很重要在程序运行时,某些异常可能会损坏数据或以意外方式运行。这将导致应用程序失败。如果您确切地知道发生了哪些异常,您应该知道要遵循哪些步骤来恢复。或者,如果你无法恢复,你应该知道如何处理好这种情况。那么,这可以恢复吗?很多时候异常有足够的信息知道出了什么问题,并且在捕获的异常中有时可以从错误状态中恢复。您可以通过修复一些数据、重新获取数据,甚至要求用户重试来做到这一点。您可以捕获异常,但有时程序仍然无法运行,因为您依赖的数据已以不可恢复的方式损坏,或者需要以不同方式解决这些异常。例如,程序如何从超出范围的数组异常中恢复?下面是一个将错误转化为异常的例子。您的应用程序希望数据以某种方式存在,但事实并非如此。虽然恢复并不总是可能的,但现在可以不进入错误状态并顺利处理情况。如果在登录时发生异常,开发人员可以通过在访问数组或访问数组之前添加一些简单的检查来修复异常。如何处理未处理的异常有些异常是不需要的,例如代码中的错误。你可以记录那些没有被你的代码捕捉到的异常,很多语言都提供了这种处理异常的方式。(例如,.NET的application_error和javascript全局的on_errorhandler)。任何未处理的异常都将显示为错误,并且代码本身无法修复错误。因此,将这些错误记录下来,可以方便大家查找原因。这样,错误就不会作为异常被忽略。一旦出现这些异常,您可以快速解决。错误日志错误日志可以帮助我们捕捉错误。有了错误日志,可以查看记录的错误和异常,这也是调试的关键,还可以优先修复哪些错误。您不必过分依赖用户发送的屏幕截图和描述,更不用说并非所有用户都对报告错误感兴趣。错误日志让你的团队保持活跃,一旦发现错误,他们可以及时联系用户,防止他们被侵犯。用户也会很高兴收到您的提醒,这也可以改善您的客户关系。当然,在用户使用之前解决这些问题才是最关键的。例如,导致不正确计费的代码错误比无法显示特定详细信息页面的错误严重得多,即使它更有可能无法显示详细信息页面。当你的应用出现异常时,你想办法修复它,但只有1%的用户会主动报错,还有很多你不知道的潜在错误隐患。一些解决方案编写一些代码来保存异常和堆栈跟踪,将它们保存在文件中或通过电子邮件发送,可以提醒您注意这些错误,这是一种可行的方法。比如一个用户在操作过程中遇到很多异常,一百个用户可能会遇到一些不常见的错误,哪个更重要?当不知道具体错误情况时,影响更多用户的错误更为重要。在异常中使用堆栈跟踪可以帮助您找出错误所在,并且您应该能够复制或阅读代码以查看哪里出了问题。有时这还不够,问题需要进一步跟踪。如果发生这种情况,请在记录之前向异常添加更多信息,包括特定于上下文的详细信息,例如帐户ID或特定对象状态,这将允许您在本地复制错误。现在您应该能够捕获所有错误和异常并记录未处理的错误和异常。根据应用程序的大小,错误消息的噪音也可能是一个问题。您可以使用邮件过滤来做一些聪明的事情,比如帮助您对错误进行分组,但这只是解决方案的一部分。几年前我这样做过,但很快意识到问题太多,这只是部分解决方案。问题是,我仍然不知道哪些错误影响了用户***。为了用户体验,我专注于抛出最多的错误而不是最烦人的错误。因此,我从来没有真正弄清楚哪些错误更严重。我没有正在发生的事情的直观表示,但必须运行手动查询才能弄清楚,这非常耗时。大型软件中的错误和异常是很常见的。对错误的正确处理将作为评判一个团队的依据,也是一个突破错误和异常,创造更好运行环境的过程。好的应用程序包含尽可能从异常中恢复的代码。处理和记录异常对软件的健康非常重要!刘妮娜译原文链接:https://dzone.com/articles/how-to-handle-errors-and-exceptions-in-large-scale】
