避免警告和通知是一种好习惯吗?


20

通常,我一直在处理PHP警告和注意事项,因为我从事的许多项目已经在实时生产中。现在,如果我打开这些实时生产网站上的警告和通知,它们将被超负荷使用。

我在家中或本地进行的项目通常会尝试消除所有警告和注意事项。有时,没有通知是没有解决方案的,所以我只需要处理一下通知,直到决定完全关闭通知。

最后,我不知道我是在浪费时间试图摆脱所有警告和注意,还是为了更大的利益而这样做。

因此,我的问题是,完全避免发出警告和通知是一种好的做法,还是真的没有关系?


6
“有时,没有通知就没有解决方案”自从我使用PHP已有一段时间了,但是我不记得遇到了可以避免使用通知/警告或至少使用本地抑制@通知/警告的情况。
CodesInChaos

27
我所见过的最令人信服的论点是“这些消息的存在是有原因的,使我们自己无视大量的警告会导致我们忽略可能已经避免的实际问题。” 换句话说,如果在正常操作期间没有警告或注意事项,则任何警告或注意事项都表明存在潜在的麻烦;如果一切都只是噪音,那么只有在SHTF之后(可能是在客户这样做之后),您才会开始注意到麻烦。
Piskvor '16

12
通常使用@抑制通知是一件坏事。更糟糕的是,然后直接关闭所有通知,因为您现在隐藏了潜在的问题。在15年的php编程中,我还没有遇到过不得不抑制自己控制的代码的情况。
塞拉德(Cerad)

2
您是只是关闭这些通知的显示还是在做什么error_reporting(0);?我总是使用error_reporting(E_ALL);,开发和生产之间的唯一区别是ini_set('display_errors', 'on');VS ini_set('display_errors', 'off');。我始终致力于在代码仍记忆犹新的同时修正通知和警告。我经常查看生产系统上的日志,以查看是否有其他可能错过的警告和注意事项。
MonkeyZeus

1
我非常同意@Cerad所说的话@。经过多年的PHP编程,我没有使用过该运算符。不止一次。决不。它不仅隐藏了潜在的问题,而且还对性能产生了影响:在后台,PHP在调用代码->调用代码->将其设置回其原始值之前关闭了错误报告。如果您@的代码中包含数十或数百个代码,那么这些步骤将非常昂贵。
Radu Murzea '16

Answers:


26

如果我打开这些实时制作网站上的警告和通知,它们将被超载。

在开发,测试和质量检查中,应该始终将警告最大化,而不是在生产中。实际上,如果这是一个令人讨厌的应用程序,即您自己使用的应用程序,则还应该在生产中将其打开。

基本上:在看到他们的人有能力对其进行处理的情况下将它们打开(开发和测试的开发人员可以自己修复它们,QA中的测试人员可以提交错误,并且如果开发人员可以也是用户,那么他也可以在生产环境中进行修复),但是当看到的人对他们无能为力时(生产用户甚至不知道如何编程),都不要打开它们。

理想情况下,您还希望将警告视为错误,但这仅在没有开头的情况下才有效;-)但请记住这一点作为目标!如果可以按文件打开/关闭此功能,请为所有新文件将其打开,然后为所有无警告的文件将其打开,并且永远不要再次将其关闭

那么,如何处理过载?

您列出所有警告和注意事项的列表,然后遵守以下规则:

  1. 永远不要在任何情况下都不会在列表中添加新的警告。每个新的代码段,每个编辑,每个更改,每个补丁,每个提交都不得引入新的警告,它只能修复它们。
  2. 每当您触摸一段代码时,请修复该代码段中的所有警告。(Boyscout规则:始终使营地处于比您发现的状态更好的状态。)这样,不重要的代码可能会充满警告,但是重要的代码会随着时间的流逝变得更干净。“代码段”可以是函数,类,文件。您也可以放宽此规则,说至少要修正一个警告。关键是:在找到它们时对其进行修复。

注意:这两个都要求您拥有某种日志数据库和日志过滤机制。还要注意,“日志数据库”和“日志过滤机制”可能只是一个文本文件和grep

这是重要的一点。没有数据库,您将不知道何时添加新警告,没有过滤,您仍然会遇到过载问题。

注意#2:这不仅适用于警告,还适用于样式检查器,复杂性指标,代码覆盖率,静态分析工具等。基本上:

  1. 不要添加新问题。
  2. 当您发现旧问题时,请进行修复。

这使您可以轻松地确定优先级:经常编辑并因此需要易于阅读和维护的代码将随着时间的流逝而变得更好。不会经常被触及的代码不会变得更好,但这没关系,因为无论如何也没有人需要看它。而且,至少它不会恶化。

当然,没有什么可以阻止您专门分配时间,以便无所事事地追捕并杀死警告。只是这种情况在经济上不可行,而作为工程师,您要牢记这一点。“工程师是一个可以用一美元建造的工程师,任何傻瓜都可以用两个建造的工程师。”


3
为何要关闭未经过滤就到达用户的警告和错误的另一点:对开发人员而言,警告像翔实的信息一样,可能会泄漏敏感信息(文件名,其他相关服务器的名称,所使用的SQL查询的结构,... )
哈根·冯·埃岑

生产中的警告应该发送到日志,而不是用户!错误应该记录在日志中,而不是用户。一个没有捕获错误,不会记录错误并提供用户适合的错误页面的网站还没有准备好投入生产。PHP可以很容易地做到这一点,但您仍然应该做对。
hobbs

49

如果警告和通知来自您的代码,则绝对可以修复它。根据我的经验,有95%的人可能是良性的,但有5%的人强调一个真正的问题,这可能会导致花费大量时间进行追逐。

如果它们来自您出于某种原因而必须使用的第三方代码,则通常没有太多选择。

如果您的遗留代码库确实很大,这是一个不同的问题,那么您可以将遗留代码视为第三方,但是要求新代码必须没有警告。


8
我使用Java / eclipse工作,这显然与php不同,但我通常发现警告是由以下两种情况引起的:1)可以编译但我犯了一个明显的错误,或者2)现在还可以,但在以后会很糟糕
corsiKa

1
@corsiKa我正在将您的注释翻译为PHP,但我意识到只需要更改一个词即可。
wizzwizz4 2016年

3
当然,除非这些警告来自StyleCop关于您的using声明顺序……
Dan Pantry

12

这很重要。警告可能不会破坏您的测试,甚至不会在野外出现一段时间-但这可能是隐隐可见的错误的征兆。我目前主要使用C#/ C ++进行开发,并且具有定义的策略来摆脱和避免在我们的代码库中发出警告。幸运的是,这不是火箭科学。

如果您使用的语言能够将警告视为错误并且具有不同的警告级别,我将执行以下操作:

  1. 将警告级别调低到足够远,这样您就不会收到任何警告。如果您处于最低警告级别,但仍收到警告-尝试修复它们。如果您不能修复它们,那么您现在就完成了,但是希望您可以修复它们。大。
  2. 由于您现在没有警告(很可能处于低警告级别),因此请拨动开关并将所有警告视为错误。
  3. 尝试提高警告级别并修复所有新警告。如果不能,请调低警告级别,但不要关闭警告,将警告视为错误。

我发现这不仅可以在我的代码中显示警告,还可以将警告排除在外

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.