¿Qué quieres desarrollar hoy?
Browse by Tags
All Tags
»
excepciones
(RSS)
practicas
tres simples preguntas para un buen manejo de excepciones
Se han dicho muchas cosas sobre el manejo correcto de excepciones, pero yo creo que todo se puede resumir en 3 simples preguntas:
Que?
Cuando?
Donde?
que paso y que datos causaron esto?
, Esta es probablemente el area donde los desarrolladores tienen mas problema; frecuentemente lo unico que contestan es "
que paso?
", pero eso no es suficiente; vamos a ver porque:
digamos que tenemos codigo de manejo de errores y...
la aplicacion nos da este mensaje de error (o se guarda en un log): "La informacion del empleado es incorrecta"
el error
me dice que paso, pero es demasiado abierto
, la descripcion es demasiada vaga, hay muchisimas cosas que podrian estar mal con la informacion del emploeado
Ok, entonces vamos a mejorar el mensaje de error, solo para este ejemplo, digamos que validamos la ciudad; cambiamos el codigo y ahora el error es:
"el valor del campo Ciudad no es valido"
Este mensaje es mucho mejor que el anterior, al menos ya se donde especificamente tengo el problema; la cuestion es que este mensaje de error
solo me sirve en el momento en el que sucede
, y solo le sirve a la persona/proceso al que le sucedio
Asi que vamos a mejorar aun mas:
"[ILEGIBLE] no es una ciudad valida"
AH!!...
ahora se exactamente que paso
, y
que es lo que lo esta causando
, aun si yo solo estuviera leyendo el error en un LOG file, sabria exactamente que paso, lo que es mas,
puedo analizar la lista de errores
y si veo que este error es muy comun,
podria cambiar/mejorar las reglas
en la aplicacion basado en la informacion que tengo;
tambien me podria dar cuenta de situaciones
que si no tuviera esta informacion pues simplemente no sabria, y los usuarios de mi aplicacion "aprenderian" como se tiene que usar la aplicacion, en vez de que se mejorara el proceso, los usuarios tendrian que hacer algo talvez mas lento porque mi aplicacion no da la informacion necesaria
Cuando?
siempre
debes incluir fecha y hora con cada error
Donde?
Esto es casi automatico con esto del stack trace, pero muchas veces el mismo codigo se usa (por ejemplo) desde una aplicacion web y desde un servicio web (estoy haciendo eso mismo ahora) y seria bueno que el mensaje de error tuviera un campo que me indicara de donde se genero el error, si de la aplicacion web o del servicio web
Esto ultimo yo lo he solucionado teniendo un campo adicional en mi tabla de errores llamado "Origen", entonces en la capa mas alta, capturo los errores y lo mando grabar a mi tabla pasando el origen de donde se genero el error, web o servicio web
En resumen,
pongan especial atencion al
"
que?
", recuerden que el saber que paso no me dice mucho, los mensajes de error deben contener los datos que causaron el problema, tal como #Empleado, #Producto, propiedad especifica que causo el problema, etc
He visto innumerables veces programadores que tienen que correr una aplicacion varias veces para reproducir el problema, o lo que es peor, el (tristemente) clasico "
hableme cuando vea el error otravez!
", simplemente porque el log error no contiene informacion que les diga donde es que y que causo el error y que hacer para arreglarlo.
las excepciones deberian ser algo como
el derecho de [Escritura] no se encontro para el empleado [101]
en vez de
No se pudo grabar el registro!
Con la informacion de este ultimo ejemplo que les doy, yo puedo ir a la base de datos inmediatamente y darle derechos de escritura al empleado 101 y se acabo el problema!
Hay un mar de diferencia de un mensaje de error a otro, y ese mar de diferencia es lo que los va a hacer
programadores mucho mas productivos
a la hora de mantener su mismo software.
El software siempre va a tener bugs, la diferencia es cuanto tiempo les cuesta arreglar un bug cuando estos salen a la vista
Search
Go
This Blog
Home
Tags
.net
activex
asp.net
blogs
bugs
C#
chistoso
codigo
componentes
debug
divertido
DOS
errores
excepciones
extenciones
firefox
fsharp
gemas
google
gratis
hacking
herramientas
IE
IE7
Instalacion
libros
linea de comando
links
Linux
listas genericas
Mac
microsoft
noticias
novell
optimizacion
oracle
patrones
personal
practicas
preguntas para entrevista
problemas
redes sociales
refleccion
seguridad
seguridad .net
servidores
SQL
sugerencias
SVN
tecnologia
third party
tips
trivia
twitter
UI
usabilidad
utilidades
videos
Vista
Visual Studio 2005
Visual Studio 2008
web
Windows
Navigation
Home
Blogs
Calendar
Forums
Photos
Downloads
Archives
September 2008 (1)
August 2008 (1)
July 2008 (3)
June 2008 (1)
May 2008 (1)
March 2008 (2)
January 2008 (1)
November 2007 (2)
October 2007 (3)
September 2007 (2)
August 2007 (1)
June 2007 (3)
May 2007 (7)
April 2007 (10)
March 2007 (5)
February 2007 (8)
January 2007 (9)
December 2006 (16)
October 2006 (1)
Syndication
RSS 2.0
Atom 1.0