Heredé un proyecto con una base de código bastante grande, y el desarrollador original rara vez responde a los correos electrónicos. Hay muchas formas diferentes de hacer algunas cosas en él, y no las conozco todas. Una gran cantidad de código duplicado a lo largo de estas rutas (en lugar de funciones incluidas por, digamos, 5 páginas que hacen relativamente lo mismo, es código copiado en 5 páginas), y algunos problemas sutiles en la base de datos (todos hemos oído hablar del código de espagueti , pero ¿alguna vez has oído hablar de una base de datos de spaghetti?)
Todo esto lo puedo manejar la mayor parte del tiempo sin problemas.
El problema es cuando un cliente encuentra un error en alguna parte. Por lo general, envían una captura de pantalla del problema final y dicen: "¿Podrían ver esto?" al tiempo que destaca lo específico en la página que está mal y, a veces, lo que se esperaba. Se brinda muy poca información adicional, y tratar de hablar con ellos y obtener más (como lo que hicieron para obtener el resultado) es como tirar de los dientes.
Básicamente, se reduce a esto:
- Código base grande y complejo con el que no estoy 100% familiarizado
- De muchas maneras, las cosas pueden salir mal
- Muy poca información sobre cómo surgió un error
¿Alguien tiene algún consejo, truco, sugerencia, etc. sobre cómo depurar este tipo de cosas?
Respuestas:
Cuando obtengo algo así, generalmente exijo más información. No estoy seguro de cómo es el lugar donde trabaja, pero aquí, si no tengo suficiente información para reproducir el problema localmente, puedo enviar el ticket de vuelta marcado No se puede reproducir, con una solicitud de más información, y saben que no se solucionará nada hasta Puedo romperlo por mi parte.
Si sus clientes tienen problemas para describir los pasos, pídales un video de captura de pantalla. Hay algunos productos gratuitos que pueden crearlos, como Jing. Hace que sea mucho más fácil ver exactamente lo que estaban haciendo.
EDITAR: Jing fue una buena idea cuando escribí esto hace unos años. Desde entonces, han modificado su instalador para cargar su sistema con crapware "extra" que nunca solicitó, por lo que ya no puedo recomendarlo. Sin embargo, hay muchos grabadores de pantalla decentes.
fuente
Un buen comienzo podría ser este libro .
Estoy usando la definición a continuación, ya que parece que el desarrollador ya no está disponible para soportarlo.
fuente
Tuve un problema similar hace unos años y el mayor impulso a la productividad y la limpieza del código fue integrar el seguimiento de errores en el sistema.
Usamos Fogbugz (¡supongo que todavía lo hacen Fogcreek!) Y pudimos construir un mecanismo de manejo de excepciones donde el usuario podía presionar un botón cada vez que se generaba una excepción y se registraba de inmediato en nuestro sistema, no más llamadas y No más capturas de pantalla. Con esta opción, toma la información que necesita en lugar de intentar extraerla del usuario. Parece que una variante te haría algo bueno, especialmente con una opción de captura de pantalla.
La otra cosa que querrá comenzar a hacer es comenzar a agregar registros. Es posible que desee ir tan lejos como registrar cada llamada de método con valores de argumento. Como parece que está trabajando con código heredado (código sin pruebas), este registro lo ayudará a agregar las pruebas unitarias adecuadas para que no repita ningún problema.
fuente
Mi consejo más serio es comenzar a refactorizar donde pueda. No puedo contar la cantidad de veces que vi una copia de la funcionalidad solo para descubrir que no era 100% una copia completa. Fue 99.9% de copia y 1 pequeño error menor que resultó en un error. Comience a agregar pruebas unitarias a todo y si tiene un departamento de control de calidad, intente obtener algunos scripts de prueba automatizados para esas partes del código que está trabajando.
Por otro lado, vea cuánto registro puede inyectar en el código. Es decir, si no tiene mucho en lo que respecta al inicio de sesión, puede agregar un indicador al código para comenzar a recoger registros más detallados para sus propios propósitos de depuración. Esto es algo que puede hacer que un usuario active y desactive si puede iniciar un diálogo. Me ha ayudado más veces de las que puedo contar. Normalmente obtengo "no funciona" sin una imagen del problema. Solo digo "envíame el archivo de registro".
fuente
Comience escribiendo pruebas unitarias. Elija una clase o una función y escriba un conjunto de pruebas que correspondan a cómo cree que debería funcionar. Si las pruebas fallan, descubra por qué. Si es un error, corríjalo. Si sus expectativas resultan ser erróneas, descubra lo que realmente hace y modifique las pruebas en consecuencia.
Una vez que tenga un conjunto decente de pruebas de unidades de trabajo, tiene una red de seguridad para realizar algunas refactorizaciones para hacer que el código sea más limpio.
Siga iterando hasta que comprenda la base del código.
No hace falta decir que esto es algo que debe hacer con anticipación, no en respuesta a un informe de error.
fuente