domingo, 29 de julio de 2018

¿Como resolver una incidencia de software?

La complejidad de resolver una incidencia es relativa, depende de muchos factores y condiciones, ayuda mucho establecer en que situación nos encontramos, algunas de las razones de la complejidad son las siguientes:

  1. El desarrollador no conoce el código fuente del software, recién se está involucrando.
  2. La incidencia es muy ambigua, muchas veces esperamos que el error se haga evidente mediante un popup en la GUI, sin embargo, puede ser un error silencioso que solo se hace evidente en el resultado de la funcionalidad.
  3. La incidencia se presenta solo cuando el software es sometido a condiciones extremas, una gran cantidad de datos, muchas peticiones simultaneas o un entorno de red con mucho trafico.
  4. El desarrollador está experimentando con una tecnología nueva.
He establecido una serie de pasos que a mi me ayudan a resolver la incidencia de forma exitosa.


1.- Análisis del problema

Lo primero es comprender la incidencia desde el punto de vista del usuario, tener muy claro que es lo que el usuario percibe como incidencia, puede ser muy evidente como un popup con la descripción del error o puede ser muy difícil de comprender. Si la incidencia no es muy clara solicitaremos al usuario que nos narre en forma de historia que fue lo que pasó, hay que poner especial atención a los detalles.

Usualmente el Usuario reporta la incidencia en alguna herramienta o gestor de incidencias, debes leer detalladamente toda la información disponible, presta atención a cada detalle.
Si hay un popup con mensaje de error, este mensaje puede ser muy genérico, para obtener más detalle hay que revisar los archivos  logs de la aplicación y buscar más información sobre la incidencia.

Es importante que confirmes que la información entregada por el usuario sea coherente, que tenga sentido, muchas veces el usuario hace suposiciones sin sentido. Para ello te apoyaras en tus conocimientos sobre la aplicación, tu sentido común, tu lógica y por último, aprovechando la información de los logs.

1.1- Ponerse en Contexto (aplica con mayor relevancia si eres nuevo)
Si recién te has integrado al equipo de desarrollo y producto, lo primero será ponerte en contexto, aprender sobre la funcionalidad que presenta la incidencia, ¿Cuál es el objetivo?, ¿Qué datos de entrada se necesitan? ¿Qué resultados se esperan?
Familiarizarte con cada uno de los conceptos (jerga de palabras) que se manejan te ayudará a ser más productivo, ante la duda siempre pregunta.


2.- Replicar la incidencia
Una vez que tenemos muy claro en que consiste la incidencia, procedemos a replicarla en nuestro ambiente de desarrollo, este paso puede ser muy simple o muy complejo, puede tomar un par de minutos o incluso horas, dependerá de la complejidad de la incidencia.
Debes apoyarte del usuario que reportó la incidencia, si la complejidad es alta y tienes acceso en persona al usuario, lo mejor será que te muestre in situ como replicar el error. Si no tienes acceso en persona usa todas las herramientas disponibles a tu alcance: email, whatsapp, hangout, videos, etc,. Todo se vale.

Usualmente una incidencia se replica bajo ciertas condiciones, estás condiciones pueden ser los datos que el usuario utilizó, la forma (secuencia de pasos) en qué el usuario usó el sistema, el ambiente (configuración y hardware del sistema) donde el usuario usó el sistema.

Si la información proporcionada no es suficiente para replicar la incidencia y no podemos acceder al usuario que la reportó ni podemos acceder al ambiente donde se replica, lo único que nos queda es tratar de reconstruir los hechos mediante los logs de la aplicación. Buscaremos los datos que el usuario usó y realizaremos las actividades en la misma secuencia que el las realizó, nuestro objetivo es replicar la incidencia.

Si replicar la incidencia es complejo, te sugiero los siguientes pasos:

  1. Has una lista de todas las variables y escenarios que podrían afectar tu funcionalidad.
  2. Ordena la lista de acuerdo a la facilidad de probar
  3. Empieza por probar cada ítem de la lista del más simple al más complejo.


3.- Identificar los componentes GUI involucrados
Si la incidencia se reproduce en un ambiente GUI, debemos identificar el componente asociado a la funcionalidad de la incidencia. Usualmente el componente de partida será el botón por el que el usuario ejecuta la funcionalidad.
Sabemos que una funcionalidad puede involucrar un conjunto de componentes, debemos usar la observación, la astucia, la intuición y el sentido común para determinar que componentes son los que requieren ser revisados, así reducimos el espacio y conseguimos un mayor enfoque.

4.- Identificar las clases y métodos involucrados
Una vez identificado el botón u otro componente GUI que inicia la funcionalidad, vamos a identificar las clases y métodos involucrados.

5.- Resolver de forma aislada
Una vez que tenemos identificados las clases y métodos involucrados, vamos a debuggear de forma aislada cada uno de esos métodos, para ello como pre condición es necesario saber que hace cada método, cuales son los datos de entrada y que datos de salida se espera. Aconsejo debuggear porque así vamos leyendo cada linea de código fuente, y podemos identificar errores lógicos.
Si la incidencia no consiste en errores lógicos, debemos preguntarle al usuario que esperaba como resultado, posiblemente es un error de diseño y hay que buscar otro algoritmo.

6.- Probar la solución
Por ultimo, realizar las pruebas necesarias


No hay comentarios:

Publicar un comentario