Ganancias:
- Capacidad para describir eficazmente un error a la IA con mensaje de error, seguimiento de pila y instancia de reproducción más pequeña
- Capacidad para ejecutar un flujo de depuración sistemático con IA para encontrar la causa raíz formulando hipótesis y reduciéndola paso a paso.
- Capacidad para verificar que la solución sugerida por la IA realmente solucionó el problema mediante pruebas de reproducción y regresión.
La depuración es la tarea de descubrir por qué un programa se comporta de manera diferente a lo esperado y solucionarlo, y consume gran parte del tiempo de la mayoría de los ingenieros. Una buena depuración no se basa en un juego de adivinanzas, sino en una reducción sistemática: aclarar el síntoma, formular hipótesis, probar la hipótesis, llegar a la causa raíz. La IA es un socio muy poderoso en este ciclo; Pero sólo si le das la información correcta. Decir "el código no funciona, arreglarlo" obliga a la IA a adivinar y hacer sugerencias generales. Bríndele el mensaje de error completo, el seguimiento de la pila y la muestra de reproducción más pequeña, y juntos encontrarán la causa raíz.
En esta unidad veremos cómo describir eficazmente un error a la IA, reducir las hipótesis paso a paso y verificar mediante pruebas de regresión que la solución propuesta realmente resuelve el problema. Recuerde: "arreglar" un error y "suprimir el síntoma del error" son dos cosas diferentes; La corrección realizada sin encontrar la causa raíz traslada el error a otro lugar.
Conceptos: Seguimiento de pila: un volcado que muestra qué funciones se llamaron y en qué orden en el momento del error. Reproducción mínima: el código/entrada más simple y corto que desencadena el error. Causa raíz: la fuente real del problema, no el síntoma. Pruebas de regresión: Pruebas que aseguran que no se repite el mismo error.
Describir un error a la IA
La probabilidad de que la IA encuentre la causa raíz es directamente proporcional a la calidad de la información que usted proporciona. Una buena descripción del error incluye: lo que intentó hacer, lo que esperaba, lo que sucedió, el texto exacto del error y el seguimiento de la pila, el código involucrado, el entorno (idioma/versión/SO) y la muestra más pequeña que produjo el error.
- Aclarar el síntoma. En el formato "X esperado, Y actualizado".
- Pegue el texto completo del error y el seguimiento de la pila. No lo acortes, ni lo censures, pero no rompas la estructura.
- Da la reproducción más pequeña. Entrada mínima y código que desencadena el error.
- Especifique el entorno. Versión de idioma, versión de biblioteca, entorno de ejecución.
Mensaje de descripción de error efectivo: "Estoy depurando un error. Información: - Lo que estoy tratando de hacer: [X] - Comportamiento esperado: [Y] - Comportamiento real: [Z] - Mensaje de error completo y seguimiento de pila: [pegar] - Entorno: [idioma/versión, biblioteca/versión] - Código mínimo involucrado: [código] No me dé una solución directa. Primero enumere las 3 causas raíz más probables en orden de probabilidad y dígame qué verificación verificar para cada una".
Estrechamiento del flujo por hipótesis
La depuración sistemática es el arte de eliminar posibilidades una por una. Utilice IA para generar hipótesis y diseñar el experimento para probar cada hipótesis; Luego ejecute el experimento y devuelva el resultado. Este ciclo es mucho más rápido que el hábito de realizar cambios aleatorios y detenerse, lo que se denomina "depuración rápida".
Mensaje de ayuda de búsqueda binaria (bisección): "Este error no estaba allí ayer, está ahí hoy. Quiero saber cuál de los últimos 20 cambios provocó el error con la bisección. Dame un plan paso a paso: qué punto debo probar, a qué mitad debo ir dependiendo del resultado. También dime exactamente qué comprobar en cada paso".
Mensaje de estrategia de inserción de registros: "No puedo encontrar el error porque no puedo ver los valores intermedios en esta función. Dígame en qué puntos necesito agregar líneas de registro que impriman qué variables. Agregue una explicación de 'qué aprenderé de este registro' para cada registro. También especifique las advertencias que me impedirán registrar datos confidenciales".
Consejo: si no puedes resolver un error, la mayoría de las veces el problema está en algún lugar que supusiste incorrectamente. Pregúntele a la IA “¿qué suposición mía podría estar equivocada?” Preguntar romperá tu ceguera. Los errores más difíciles se esconden en el lugar donde dices "Estoy seguro de que esto está funcionando bien".
Aviso débil / Aviso fuerte
DÉBIL: "Mi código da un error, corríjalo: [200 líneas de código]" (Resultado: AI no sabe qué error es, qué se espera; da sugerencias generales basadas en conjeturas, la mayoría de ellas son inútiles.) FUERTE: "Recibo NullPointerException. Esperado: se debe devolver la lista de usuarios. Actual: Explota al llamar a getUsers(). Seguimiento de pila: [pegar]. Entorno: Java 17. Repetición mínima: ocurre cuando el La lista de usuarios está vacía, pero no cuando está llena. 15 líneas relacionadas: [código]. Explique la causa raíz y por qué se activa la lista vacía, luego sugiera una solución".
El poderoso mensaje pone el error en contexto: en cuyo caso sucede (lista vacía), en cuyo caso no sucede (lista completa). Esta única pista ("sucede cuando está vacío") apunta casi directamente a la causa raíz. Dado que esta información no está disponible en el mensaje débil, la IA hace una suposición a ciegas.
Verificando la solución
Una solución sólo es una solución real si hace tres cosas:
controlar
Pregunta
Cómo verificar
¿El error desapareció?
¿Funciona la misma entrada ahora?
Ejecutar reproducción mínima nuevamente
¿No hay nuevos errores?
¿Hay algo más roto?
Ejecute todo el conjunto de pruebas
¿No se repetirá?
¿Volverá a ocurrir el mismo error?
Agregue prueba de regresión para este escenario
Las correcciones realizadas sin encontrar la causa raíz a menudo suprimen el síntoma. Por ejemplo, pasar por alto un error nulo con "omitir si es nulo" hace que la verdadera razón sea "¿por qué los datos son nulos?" invisible y el error vuelve a ocurrir en otra parte.
Mini casos
Caso 1: La trampa de la supresión de síntomas. Un equipo silencia un error nulo ocasional con un try-catch; El error desaparece pero después de 2 semanas parece que faltan datos. La verdadera razón es que un servicio devuelve un valor nulo cuando se agota el tiempo de espera. Cuando le preguntas a AI "¿por qué se vuelve nulo?", surge la causa raíz; La solución real tarda 1 hora pero es permanente.
Caso 2: potencia de reproducción mínima. Un desarrollador no puede corregir un error que dice "falla de vez en cuando". Reduce el error a la entrada más pequeña con la sugerencia de AI: el problema sólo ocurre con nombres de archivos que contienen caracteres turcos (error de codificación). Cuando 300 líneas de incertidumbre se reducen a 5 líneas de reproducción definitiva, la solución se vuelve obvia.
Caso 3: Prueba antirregresión. AI corrige un error de cálculo de fecha. El ingeniero no está satisfecho con esto; Agrega una prueba de regresión para el escenario erróneo (fin de mes, 31 de enero + 1 mes). Cuando otro cambio afecta la misma área 4 meses después, la prueba se vuelve roja y el error se detecta antes de que llegue a producción.
Errores comunes
- Significa "no funciona, arréglalo". Sin texto de error, expectativas ni reproducción, la IA adivina.
- Sin dar el seguimiento de la pila. El seguimiento de la pila suele indicar directamente la causa raíz.
- Sigue haciendo cambios aleatorios. Los experimentos sin establecer una hipótesis son una pérdida de tiempo.
- Suprimir el síntoma y pasar por alto la causa raíz. El error renace en otra parte.
- No asegurar la solución con pruebas de regresión. El mismo error vuelve silenciosamente en el futuro.
En resumen
La depuración eficaz consiste en una reducción sistemática, no en una adivinanza. Darle a la IA el texto completo del error, el seguimiento de la pila, la reproducción mínima y la información del entorno aumenta exponencialmente las posibilidades de encontrar la causa raíz. Utilice IA para generar hipótesis y diseñar el experimento para probar cada hipótesis; Tú ejecutas el experimento. Considere una solución "hecha" sólo cuando vea que el error desapareció, no se introducen nuevos errores y está protegido mediante pruebas de regresión.
Tarea de aplicación
Consideremos un error real o artificial. Primero reduzca el error a la reproducción más pequeña (en qué entrada ocurre, en cuál no). Utilizando el mensaje de receta de error eficaz, solicite a la IA 3 hipótesis de causa raíz y un paso de verificación para cada una. Encuentre la causa raíz probando las hipótesis una por una, corríjala, luego escriba y ejecute una prueba de regresión para este escenario para mostrar que el error desapareció y la prueba brinda protección.
lista de verificación
- [] Aclaré el síntoma como "esperado versus realizado".
- [] Le di el texto de error completo y el seguimiento de la pila a la IA.
- [] Reduje el error a la reproducción más pequeña.
- [] Al probar las hipótesis una por una, encontré la causa raíz.
- [] En lugar de suprimir el síntoma, solucioné la causa raíz.
- [] Agregué y ejecuté una prueba de regresión para el mismo error.