/por Simon Tatham, programador profesional y de software libre

Introducción

Cualquiera que haya escrito software para uso público probablemente haya 
recibido al menos un mal informe de fallo. Informes que no dicen nada 
("¡No funciona!"); informes que no tienen sentido; informes que no dan 
información suficiente; informes que dan información errónea. Informes 
de problemas que acaban siendo un error del usuario; informes de 
problemas que acaban siendo un fallo del programa de un tercero; 
informes de problemas que acaban siendo fallos en la red.

Existe una razón por la cual el soporte técnico se ve como un empleo 
horrible, y esa razón son los malos informes de fallo. Sin embargo, no 
todos los informes de fallo son molestos: yo mantengo software libre, 
cuando no me estoy ganando la vida, y a veces recibo informes de fallos 
increíblemente claros, útiles e informativos.

En este ensayo intentaré dejar claro lo que hace bueno a un informe de 
fallo. Idealmente me gustaría que todo el mundo se leyera este ensayo 
antes de informar de un fallo a cualquiera. Ciertamente, me gustaría que 
todos los que vayan a informarme de fallos a mí se lo leyesen.

En pocas palabras, el objetivo de un informe de fallo es permitir al 
programador ver el programa fallando ante sus ojos. Puedes mostrárselo 
en persona, o darle instrucciones cuidadas y detalladas de cómo hacer 
que falle. Si pueden hacer que falle, podrán intentar recolectar 
información extra hasta que averigüen la causa. Si no pueden hacer que 
falle, tendrán que pedirte que tú recolectes esa información en su lugar.

En los informes de fallo, intenta dejar muy claro qué son hechos reales 
("Estaba con la computadora y ocurrió esto") y qué son especulaciones 
("Creo que esto puede ser el problema"). Excluye las especulaciones si 
quieres, pero no excluyas nunca los hechos.

Cuando informas de un fallo, lo haces porque quieres que el fallo se 
arregle. No tiene sentido blasfemar al programador o ser deliberadamente 
inútil: puede que sea culpa suya que tú tengas el problema, y puede que 
tengas razón al estar enfadado con ellos, pero el fallo se arreglará 
antes si les ayudas proporcionándoles toda la información que necesitan. 
Recuerda también que si el programa es gratuito, entonces el autor lo 
proporciona amablemente, de modo que si mucha gente fuera ruda con ellos 
quizás deban dejar de sentirse amables.

"No funciona."

Dale al programador algo de crédito en cuanto a inteligencia básica: si 
el programa no funcionase en absoluto, se hubieran dado cuenta. Si no se 
han dado cuenta, es que en su caso funciona. Por tanto, o bien estás 
haciendo algo diferente de lo que ellos hacen, o tu entorno es diferente 
del suyo. Necesitan información; proporcionar esa información es el 
objetivo de un informe de fallo.

 Más información casi siempre es mejor que menos.

Muchos programas, particularmente programas gratuitos, publican una 
lista de fallos conocidos. Si puedes encontrar una lista de fallos 
conocidos, merece la pena leerla para ver si el fallo que acabas de 
encontrar ya es conocido o no. Si lo es, probablemente no merezca la 
pena informar de él nuevamente, pero si piensas que tienes más 
información que la que aparece en el informe de fallo, puede que quieras 
contactar con el programador de todos modos. Puede que sean capaces de 
arreglar el fallo más fácilmente si les das información que todavía no 
tenían.

Este ensayo está lleno de consejos. Ninguno de ellos es una regla 
absoluta. Programadores concretos tienen formas concretas en las que les 
gusta que se les informe de fallos. Si el programa viene con su propio 
conjunto de consejos para informar de fallos, léelos. Si los consejos 
que vienen con el programa contradicen los consejos presentes en este 
ensayo, ¡sigue los que vienen con el programa!

Si no estás informando de un fallo sino simplemente pidiendo ayuda para 
utilizar el programa, deberías indicar en qué otros sitios has buscado 
ya la respuesta a tu pregunta. ("Miré el capítulo 4 y la sección 5.2 de 
la ayuda pero no encontré nada que me dijera si esto es posible.") Esto 
permitirá que el programador sepa dónde espera la gente encontrar la 
respuesta, de forma que pueden hacer que la documentación sea más fácil 
de usar.

"Muéstrame."

Una de las mejores maneras de informar de un fallo es mostrarlo al 
programador. Sitúalos delante de tu ordenador, lanza su software, y 
demuestra aquello que funciona mal. Deja que miren cómo arrancas la 
máquina, que miren cómo ejecutas el software, que miren cómo interactúas 
con el software y que miren lo que el software realiza como respuesta a 
tus entradas.

Conocen su software como la palma de su mano. Saben en qué partes 
confiar, y saben qué partes pueden tener más fallos. Saben 
intuitivamente lo que tienen que buscar. Cuando el software haya hecho 
algo obviamente erróneo, puede que hayan reparado en algo anterior 
sutilmente erróneo que pueda darles una pista. Pueden observar todo lo 
que el computador hace durante la ejecución de prueba, y pueden decidir 
lo que es importante por sí mismos.

Quizás esto no sea suficiente. Quizás decidan que necesitan más 
información, y te pidan que les muestres lo mismo una vez más. Puede que 
te pidan que les guíes en el proceso, de forma que puedan reproducir el 
fallo por sí mismos todas las veces que sean necesarias. Puede que 
intenten variar el proceso algunas veces más, y así conocer si el 
problema ocurre sólo en un caso o en una familia de casos relacionados. 
Si no tienes suerte, quizás necesiten sentarse durante un par de horas 
con un conjunto de herramientas de desarrollo y empezar a investigar de 
verdad. Pero lo más importante es que el programador esté mirando el 
computador cuando algo falla. Una vez que puedan ver el problema, 
normalmente podrán seguir solos a partir de ese punto para intentar 
arreglarlo.

"Enséñame a mostrar por mí mismo."

Ésta es la era de Internet. Es la era de las comunicaciones globales. Es 
la era en la que puedo enviar mi software a alguien de Rusia pulsando un 
botón, y él puede enviarme sus comentarios de forma igualmente sencilla. 
Pero si tiene un problema con mi programa, no puede hacer que yo esté 
presente cuando falla.

 "Muéstrame" es bueno cuando puedes, pero muchas veces no puedes.

Si tienes que informar de un fallo a un programador que no puede estar 
presente personalmente, el objetivo del ejercicio es hacer que sean 
capaces de reproducir el problema. Quieres que el programador ejecute su 
propia copia del programa, haga lo mismo que tú, y haga que falle de la 
misma manera. Cuando no pueden ver que el problema ocurre delante de sus 
ojos, no pueden hacer nada con él.

Así que diles exactamente lo que hiciste. Si es un programa gráfico, 
diles qué botones pulsaste y en qué orden los pulsaste. Si es un 
programa que se ejecuta escribiendo una orden, múestrales de forma 
precisa la orden que usaste. Cuando sea posible, debes proporcionar una 
transcripción de la sesión, mostrando las órdenes que tecleaste y lo que 
la computadora mostró como respuesta.

Dale al programador toda la información que se te ocurra. Si el programa 
lee de un fichero, probablemente necesites enviarles una copia del 
fichero. Si el programa habla con otro computador a través de una red, 
probablemente no puedas enviarles una copia de ese computador, pero 
puedes al menos decir qué clase de computador es y, si es posible, qué 
software ejecuta.

"A mí me funciona. ¿Qué está mal?"

Si le das a un programador una larga lista de entradas y acciones y 
ellos lanzan su propia copia del programa y no ocurre nada malo, 
entonces es que no les has dado información suficiente. Posiblemente el 
fallo no ocurre en todos los computadores; tu sistema y su sistema puede 
diferir de algún modo. Quizás hayas malentendido lo que el programa 
supuestamente hace, y ambos estáis mirando exactamente la misma pantalla 
y tú piensas que está mal y ellos saben que está bien.

Así que describe también lo que ocurrió. Diles exactamente lo que viste. 
Diles por qué piensas que lo que viste está mal; aún mejor, diles 
exactamente lo que tú esperabas ver. Si dices "y entonces falló", estás 
dejando fuera información muy importante.

Si viste mensajes de error entonces dile al programador, de forma clara 
y precisa, cuáles eran. ¡Son importantes! En este momento, el 
programador no está intentando arreglar el problema: sólo están 
intentando encontrarlo. Necesitan saber qué ha ido mal, y esos mensajes 
de error son el mayor esfuerzo del computador para decírtelo. Anota los 
errores si no tienes otra forma más sencilla de recordarlos, pero no 
merece la pena informar de que el programa generó un error a menos que 
puedas indicar cuál era el mensaje de error.

En particular, si el mensaje de error contiene números, asegúrate de 
informar de ellos al programador. Aunque tú no puedas encontrarles 
sentido no significa que no lo tengan. Los números contienen toda clase 
de información que puede ser leída por un programador, y probablemente 
contengan pistas vitales. Los números en los mensajes de error están ahí 
porque el computador está demasiado confundido como para informar del 
fallo con palabras, pero está intentando hacerlo lo mejor posible para 
darte la información importante.

En este punto, el programador está a efectos prácticos realizando el 
trabajo de un detective. No saben lo que ha ocurrido, y no pueden estar 
lo bastante cerca como para verlo por ellos mismos, así que están 
intentando encontrar pistas que les hagan ver el problema. Los mensajes 
de error, las incomprensibles cadenas de números, e incluso los retardos 
inesperados son todos tan importantes como las huellas dactilares en la 
escena de un crimen. ¡Guárdalos!

Si usas Unix, el programa puede producir un volcado de memoria. Los 
volcados de memoria son una fuente de pistas particularmente buena, así 
que no los elimines. Por otra parte, a la mayoría de programadores no 
les gusta recibir ficheros gigantes por correo electrónico sin una 
advertencia, así que pregunta antes de enviar un volcado a nadie. 
También, ten en cuenta que los volcados de memoria contienen un registro 
del estado completo del programa: cualquier "secreto" presente (quizás 
el programa estuviera manejando un mensaje personal, o trabajando con 
datos confidenciales) puede aparecer en el fichero del volcado.

"Y entonces intenté..."

Hay un montón de cosas que puedes hacer cuando aparece un fallo o un 
error. Muchas de esas cosas empeoran el problema. Una amiga mía en la 
escuela borró accidentalmente todos sus documentos de Word, y antes de 
pedir ayuda a un experto intentó reinstalar el Word y luego ejecutar el 
desfragmentador de disco. Ninguna de esas acciones ayudó a recuperar sus 
ficheros, y gracias a ambas el disco se dispersó de tal manera que 
ningún programa de recuperación hubiese podido hacer nada. Si no hubiese 
tocado nada, puede que hubiera tenido una oportunidad.

Usuarios como éste son como una mangosta atrapada en una esquina: con su 
espalda contra la pared y viendo la muerte inminente ante sus ojos, 
ataca salvajemente, porque hacer algo tiene que ser mejor que no hacer 
nada. Esto no se adapta bien al tipo de problemas que producen los 
computadores.

En lugar de ser una mangosta, sé un antílope. Cuando un antílope se 
enfrenta a algo inesperado o terrorífico, se para. Permanece 
completamente parado e intenta no atraer la atención, mientras se 
detiene a pensar y calcular qué es lo mejor que puede hacer. (Si los 
antílopes tuvieran una línea de atención técnica, probablemente 
llamarían a ella en ese momento.) Entonces, una vez que ha decidido qué 
es lo más seguro que puede hacer, lo hace.

Cuando algo va mal, inmediatamente deja de hacer nada. No toques ningún 
botón en absoluto. Mira la pantalla e intenta encontrar cosas fuera de 
lo normal, y recuérdalo o anótalo. Entonces quizás empieza 
cautelosamente a pulsar "Aceptar" o "Cancelar", lo que te parezca más 
seguro. Intenta desarrollar un reflejo - si el computador hace algo 
inesperado, detente.

Si logras salir del problema, bien cerrando el programa afectado o bien 
reiniciando la computadora, sería bueno intentar hacer que el problema 
ocurra de nuevo. A los programadores les gustan los problemas que pueden 
reproducir más de una vez. Los programadores felices arreglan los fallos 
antes y de forma más eficiente.

"Creo que el modulador de taquiones tiene la polarización incorrecta."

No sólo son los no-programadores los que producen malos informes de 
fallos. Algunos de los peores informes de fallos que he visto vienen de 
programadores, e incluso de buenos programadores.

Una vez trabajé con otro programador que no paraba de encontrar fallos 
en su código e intentaba arreglarlos. De vez en cuando encontraba un 
fallo que no era capaz de arreglar, y me llamaba para que le ayudase. 
"¿Qué ha pasado?", le preguntaba. Él me respondía diciéndome su opinión 
sobre lo que necesitaba repararse.

Esto funcionaba bien cuando su opinión era correcta. Significaba que ya 
había hecho la mitad del trabajo y así podíamos terminarlo los dos 
juntos. Era eficiente y útil.

Sin embargo, muchas veces se equivocaba. Trabajábamos un tiempo 
intentando averiguar por qué una cierta parte del programa producía 
datos incorrectos, y eventualmente descubríamos que no los producía, y 
que habíamos estado media hora investigando un trozo de código que 
funcionaba perfectamente, y que el problema estaba en otra parte.

Estoy seguro de que tú no harías eso con un doctor. "Doctor, necesito 
que me prescriba hidroyoyodina." La gente sabe que no debe hacer eso con 
un doctor: le describes los síntomas, las molestias y achaques y dolores 
y erupciones y fiebres, y dejas que el doctor haga el diagnóstico del 
problema y decida qué hacer al respecto. En otro caso el doctor te 
tomará por hipocondriaco y lunático, y con razón.

Ocurre lo mismo con los programadores. Proporcionar tu propio 
diagnóstico puede que a veces sea útil, pero siempre establece los 
síntomas. El diagnóstico es un extra opcional, y no una alternativa a 
describir los síntomas. Igualmente, enviar modificaciones del código 
para arreglar el problema es un suplemento útil en un informe de fallo, 
pero no un sustituto adecuado para el mismo.

Si un programador te pide información extra, ¡no te la inventes! Una vez 
alguien me informó de un fallo, y le pedí que ejecutara una cierta orden 
que yo sabía que fallaría. Le pedí que lo probase porque quería saber 
cuál de dos errores posibles surgiría. Conocer cuál era una pista vital. 
Pero no lo intentó - sino que me respondió diciendo "No, eso no va a 
funcionar". Me llevó un tiempo persuadirle de que lo intentara de verdad.

Usar tu inteligencia para ayudar al programador está bien. Incluso si 
tus deducciones son incorrectas, el programador debería estar agradecido 
de que al menos hayas intentado hacerle la vida más fácil. Pero informa 
de los síntomas también, o quizás se la compliques.

"Vaya, lo hacía hace un momento."

Dile "fallo intermitente" a un programador y fíjate la cara que ponen. 
Los problemas fáciles son aquellos en los que la realización de una 
secuencia simple de acciones hacen que surja el problema. El programador 
puede repetir esa secuencia de acciones en un entorno de pruebas cerrado 
y observable y ver lo que ocurre con gran detalle. Demasiados problemas 
no funcionan así: habrá programas que fallarán una vez a la semana, o 
una vez cada mucho tiempo, o nunca fallarán cuando los pruebes delante 
del programador pero sí cuando una fecha límite está a la vuelta de la 
esquina.

La mayoría de los fallos intermitentes no son verdaderamente 
intermitentes. La mayoría de ellos tienen alguna lógica en alguna parte. 
Algunos pueden ocurrir cuando la máquina se está quedando sin memoria, 
otros pueden ocurrir cuando otro programa intenta modificar un fichero 
crítico en el momento equivocado, y algunos pueden ocurrir ¡sólo en la 
primera media hora de cada hora! (Una vez vi uno de éstos).

También, si puedes reproducir el fallo pero el programador no puede, 
podría ser porque tu computador y su computador son diferentes en algo y 
ese algo es lo que provoca el fallo. Una vez tuve un programa cuya 
ventana se enrollaba en una pequeña bola en la esquina de la pantalla, 
se quedaba ahí y se enfurruñaba. Pero sólo hacía eso en pantallas de 
800x600; en mi pantalla de 1024x768 estaba bien.

El programador querrá saber todo lo que puedas contarle del problema. 
Pruébalo en otra máquina, quizás. Pruébalo dos o tres veces y mira la 
frecuencia con la que falla. Si falla cuando estás trabajando en algo 
serio pero no cuando estás intentando demostrarlo, puede que sean los 
tiempos grandes de ejecución o ficheros grandes lo que lo hagan fallar. 
Intenta recordar todos los detalles que puedas acerca de lo que estabas 
haciendo cuando el programa falló, y si encontraste algún tipo de 
patrón, menciónalo. Cualquier información que puedas proporcionar será 
útil. Incluso si es sólo probabilística (como "falla con más frecuencia 
si estoy ejecutando el Emacs"), puede que no proporcione pistas directas 
acerca de la causa del problema, pero puede que ayude al programador a 
la hora de reproducirlo.

Más importante, el programador querrá estar seguro de si es un auténtico 
fallo intermitente o un fallo específico de esa máquina. Querrán conocer 
un montón de detalles acerca de tu computador, para intentar saber cómo 
difiere del suyo. Muchos de esos detalles dependerán del programa en 
particular, pero algo que deberías estar listo para proporcionar son los 
números de versión. El número de versión del propio programa, el número 
de versión del sistema operativo, y probablemente de cualquier otro 
programa que intervenga en el problema.

"Entonces cargué el disco en Windows..."

Escribir de forma clara es esencial en un informe de fallo. Si el 
programador no puede entenderte, quizás sea mejor no decir nada.

Recibo informes de fallos de muchas partes del mundo. Muchos de ellos de 
personas que no hablan inglés nativamente, y muchos de esos se disculpan 
por su pobre nivel de inglés. En general, los informes con disculpas por 
el pobre nivel de inglés son en realidad muy claros y útiles. La mayoría 
de informes confusos provienen de hablantes nativos de inglés que 
suponen que les entenderé aunque no hagan ningún esfuerzo por ser claros 
o precisos.

    * Sé específico. Si puedes hacer lo mismo de dos maneras, di cuál 
usaste. "Seleccioné Cargar" puede significar "Pulsé sobre Cargar" o 
"Pulsé Alt+L". Di cuál usaste. A veces importa.
    * Se prolijo. Da más información en lugar de menos. Si dices muchas 
cosas, el programador puede ignorar parte de ellas. Si dices pocas, 
tienen que hacerte más preguntas. Una vez recibí un informe de fallo de 
una sola frase; cada vez que preguntaba más información, el informador 
respondía con otra frase suelta. Me llevó varias semanas obtener un 
volumen de información útil, porque respondía con una frase corta de 
cada vez.
    * Ten cuidado con los pronombres y los verbos sin sujeto. No uses 
referencias como "la ventana", cuando no está claro lo que significa. 
Considera el siguiente ejemplo: "Lancé la AplicaciónCualquiera. Apareció 
una ventana con una advertencia. Intenté cerrarla y cascó." No está 
claro lo que el usuario intentó cerrar. ¿Intentó cerrar la ventana de 
advertencia o la ventana de AplicaciónCualquiera? Hay una diferencia. En 
lugar de eso, podría decir "Lancé la AplicaciónCualquiera, la cual 
mostró una ventana de advertencia. Intenté cerrar la ventana de 
advertencia y AplicaciónCualquiera cascó." Esto es más largo y 
repetitivo, pero es más claro y más difícil de malinterpretar.
    * Lee lo que has escrito. Léete el informe a ti mismo e intenta ver 
si tú crees que es claro. Si listas una secuencia de acciones a realizar 
para provocar el fallo, intenta seguirlas tú mismo para comprobar si has 
omitido algún paso.

Resumen

    * El primer objetivo de un informe de fallo es permitir que el 
programador vea el fallo por sí mismo. Si no puedes hacer que el 
programa falle delante de ellos, dale instrucciones detalladas para que 
ellos mismos puedan hacer que falle.
    * Si esto no surte efecto, y el programador no puede verlo fallar 
por sí mismo, el segundo objetivo del informe de fallo es describir lo 
que falló. Describe todo en detalle. Describe lo que viste, y lo que 
esperabas ver. Toma nota de los mensajes de error, especialmente cuando 
contengan números.
    * Cuando el computador haga algo inesperado, detente. No hagas nada 
hasta que estés tranquilo, y no hagas nada que creas que es peligroso.
    * Por todos los medios, intenta diagnosticar el problema tú mismo si 
crees que puedes, pero si lo haces, informa también de los síntomas 
igualmente.
    * Prepárate para proporcionar información extra si el programador la 
necesita. Si no la necesitasen no preguntarían por ella. No es que estén 
siendo retorcidos. Ten los números de versión preparados, porque 
probablemente harán falta.
    * Escribe de manera clara. Di lo que quieres decir, y asegúrate de 
que no se puede malinterpretar.
    * Por encima de todo, sé preciso. A los programadores les gusta la 
precisión.

Advertencia: nunca he visto en realidad una mangosta o un antílope. Mi 
zoología puede ser inexacta.

$Id: bugs.html 6719 2006-05-30 12:46:40Z simon $

Copyright © 1999 Simon Tatham.
Este documento es "ContenidoAbierto".
Puedes copiarlo y usar el texto bajo los términos de la licencia 
OpenContent.
/
_______________________________________________
Cancelar suscripción
https://listas.softwarelibre.cu/mailman/listinfo/linux-l
Buscar en el archivo
http://listas.softwarelibre.cu/buscar/linux-l

Responder a