En general, he estado trabajando con avisos y avisos de PHP, ya que trabajo en muchos proyectos donde ya está en producción en vivo. Ahora, si enciendo las advertencias y avisos en estos sitios web de producción en vivo, se sobrecargarán con ellos.
En los proyectos en los que trabajo en casa, en el local, generalmente trato de eliminar TODAS las advertencias y avisos. A veces, no hay solución para no tener un aviso, así que solo tendría que lidiar con mirar el aviso hasta que decida desactivarlos por completo.
Al final, no sé si estoy perdiendo el tiempo tratando de deshacerme de todas las advertencias y avisos, o si realmente estoy haciendo esto por el bien común.
De ahí mi pregunta, ¿es una buena práctica evitar advertencias y avisos por completo, o realmente no importa?
@
.error_reporting(0);
? Siempre usoerror_reporting(E_ALL);
y la única diferencia entre el desarrollo y la producción estáini_set('display_errors', 'on');
vsini_set('display_errors', 'off');
. Siempre intento corregir avisos y advertencias mientras el código aún está fresco en mi mente. Frecuenta los registros en mi sistema de producción para ver si hay advertencias y avisos adicionales que podría haber pasado por alto.@
. Después de años y años de programación PHP, no he usado ese operador. Ni una sola vez. Nunca. No solo oculta posibles problemas, sino que también tiene un impacto en el rendimiento: detrás de escena, PHP apaga los informes de errores antes de llamar al código -> llama al código -> lo restablece a su valor original. Estos pasos son caros si tiene docenas o cientos@
en su código.Respuestas:
Siempre debe tener las advertencias activadas al máximo nivel en desarrollo, pruebas y control de calidad, pero no en producción. En realidad, si se trata de una aplicación de alimentación para perros, es decir, una aplicación que usted usa, entonces también debe activarlas en producción.
Básicamente: actívelos en aquellos casos en que la persona que los ve esté en condiciones de hacer algo al respecto (el desarrollador en desarrollo y prueba puede solucionarlos él mismo, el probador en QA puede presentar un error, y si el desarrollador está también el usuario, entonces también puede arreglarlo en producción), pero no los encienda cuando la persona que ve no puede hacer nada al respecto (un usuario en producción, que ni siquiera sabe programar).
Idealmente, también querrás activar el tratamiento de las advertencias como errores, pero eso solo funciona si no hay ninguno para empezar ;-) ¡Pero ten esto en cuenta como un objetivo! Si es posible activar / desactivar esta función por archivo, actívela para todos los archivos nuevos, y actívela para todos los archivos sin advertencia, y nunca la apague nuevamente una vez activada.
Entonces, ¿qué hacer con la sobrecarga?
Usted hace una lista de todas las advertencias y avisos, y luego se adhiere a las siguientes reglas:
Nota: ambos requieren que tenga algún tipo de base de datos de registro y mecanismo de filtrado de registro. Tenga en cuenta también que la "base de datos de registro" y el "mecanismo de filtrado de registro" podrían ser simplemente un archivo de texto y
grep
.Esta es la parte importante. Sin la base de datos, no sabrá cuándo agrega una nueva advertencia, y sin el filtrado, todavía tiene el problema de sobrecarga.
Nota n. ° 2: esto no solo funciona para advertencias, también funciona para verificadores de estilo, métricas de complejidad, cobertura de código, herramientas de análisis estático, etc. Básicamente:
Esto le permite priorizar fácilmente: el código que se edita con frecuencia y, por lo tanto, debe ser fácil de leer y mantener, mejorará con el tiempo. El código que no se toca con frecuencia, no mejorará, pero está bien, porque nadie necesita verlo de todos modos. Y , al menos, no empeorará.
Por supuesto, nada le impide asignar tiempo específicamente para no hacer nada más que cazar y matar advertencias. Es solo que a menudo, esto no es económicamente viable, y es su trabajo como ingeniero tener eso en cuenta. "Un ingeniero es aquel que puede construir con un dólar, lo que cualquier tonto puede construir con dos".
fuente
Si las advertencias y avisos provienen de su código, definitivamente corríjalo. Según mi experiencia, en el 95% puede ser benigno, pero el 5% resalta un problema real que puede conducir a innumerables horas de persecución.
Si provienen del código de un tercero que debe usar por una razón u otra, generalmente no tiene mucha opción.
Es una pregunta diferente si su base de código heredada es realmente grande, entonces puede tratar el código heredado como un tercero, pero requiere que el nuevo código no tenga advertencias.
fuente
using
declaraciones ...Importa. Es posible que una advertencia no rompa sus pruebas o incluso aparezca en la naturaleza por un tiempo, pero podría ser un síntoma de un error inminente. Actualmente desarrollo principalmente en C # / C ++ y tengo una estrategia definida para deshacerme y mantener las advertencias fuera de nuestra base de código. Afortunadamente no es ciencia espacial =).
Si el idioma en el que trabaja tiene la capacidad de tratar las advertencias como errores y tiene niveles de advertencia variables, haría lo siguiente:
Me parece que esto no solo funciona con advertencias de mi código, sino que las mantiene alejadas .
fuente