FORMACIÓN · SEMANA 11

Debugging con IA

Aprender a investigar errores, formular hipótesis, utilizar agentes para encontrar la causa raíz, corregir problemas y evitar regresiones.

Semana 11 de 24 · Nivel: Intermedio

1. Objetivos de Week 11

OBJETIVO CENTRAL

Convertir un error en una investigación estructurada

Al terminar esta semana el alumno debe ser capaz de recibir un error aparentemente complejo y conducir una investigación utilizando IA.

01 · Reproducir

Aprender a describir exactamente cuándo ocurre un problema.

02 · Observar

Utilizar logs, errores, métricas y comportamiento observable.

03 · Hipotetizar

Construir hipótesis sobre la causa raíz.

04 · Investigar

Utilizar IA para analizar evidencias.

05 · Corregir

Aplicar cambios pequeños y verificables.

06 · Prevenir

Crear tests para evitar que el bug reaparezca.

2. La nueva mentalidad

❌ El enfoque incorrecto

ERROR

↓
Copiar error en ChatGPT

↓
"Arréglalo"

↓
Copiar código

↓
Esperar que funcione

✅ El enfoque profesional

ERROR

↓

REPRODUCIR

↓

RECOGER EVIDENCIAS

↓

FORMULAR HIPÓTESIS

↓

INVESTIGAR

↓

CAMBIO MÍNIMO

↓

TEST

↓

VERIFICAR

↓

PREVENIR REGRESIÓN

La IA puede ayudarnos en todas estas fases, pero el desarrollador debe controlar el proceso.

3. ¿Qué es realmente un bug?

Un bug es un comportamiento del sistema que no cumple lo esperado.

Ejemplo

EXPECTED

GET /employees/123

→ 200 OK

→ empleado 123


ACTUAL

GET /employees/123

→ 500 Internal Server Error

El error visible es:

500 Internal Server Error

Pero eso NO nos dice necesariamente cuál es la causa.

Posibles causas

  • registro inexistente;
  • problema de SQL;
  • campo NULL inesperado;
  • error de serialización;
  • error de permisos;
  • configuración incorrecta;
  • variable de entorno;
  • problema de red;
  • bug introducido recientemente.

El error es un síntoma. No necesariamente es la causa.

4. Workflow profesional de debugging

1. Definir el problema

¿Qué debería ocurrir?

2. Reproducir

¿Podemos provocar el problema de forma consistente?

3. Recoger evidencias

Logs, errores, inputs, estado y contexto.

4. Localizar

¿En qué capa aparece?

5. Formular hipótesis

¿Qué podría estar causando el problema?

6. Investigar

Utilizar código, logs, tests y agentes.

7. Corregir

Aplicar el cambio mínimo necesario.

8. Verificar

Comprobar que el bug desaparece.

9. Regression Test

Crear una prueba que evite que vuelva.

10. Documentar

Registrar causas y decisiones importantes.

5. Aprender a leer Logs

Los logs son una de las fuentes de información más importantes durante una investigación.

Ejemplo

2026-08-28 10:31:42 INFO Request received
GET /employees/123

2026-08-28 10:31:42 INFO EmployeeService.findById(123)

2026-08-28 10:31:42 ERROR Database error

SQLSTATE[42P01]:
relation "employees" does not exist

2026-08-28 10:31:42 ERROR
GET /employees/123 → 500

¿Cómo lo interpretamos?

Información Interpretación
Request received La petición llegó al backend.
EmployeeService.findById Entramos en la capa de servicio.
Database error El problema aparece al acceder a DB.
relation does not exist La tabla esperada no existe.
HTTP 500 El backend termina devolviendo error.

Conclusión

Ya hemos reducido enormemente el espacio de búsqueda.

Frontend
   ↓
API
   ↓
Service
   ↓
DATABASE ← PROBLEMA PROBABLE

6. Cómo leer un Stack Trace

Un stack trace puede parecer aterrador al principio.

NullPointerException:
Cannot read properties of null

    at EmployeeService.getDepartment
        (EmployeeService.js:48)

    at EmployeeController.getEmployee
        (EmployeeController.js:21)

    at processRequest
        (router.js:102)

Leer de abajo hacia arriba o de arriba hacia abajo?

Depende del lenguaje y del formato, pero normalmente nos interesa identificar la primera línea que pertenece a nuestro código y que está relacionada con la causa.

Aquí

EmployeeService.js:48

es especialmente interesante.

Error habitual

No hay que asumir que la primera línea del stack trace es automáticamente la causa raíz.

7. Reproducir el problema

Antes de pedir a la IA que arregle algo, debemos intentar conseguir un caso reproducible.

Mala descripción

"No funciona."

Buena descripción

Cuando un usuario abre

Employees → Employee Detail

y el empleado no tiene departamento,

la API devuelve 500.

Con empleados que tienen departamento,
funciona correctamente.

Excelente descripción

ENVIRONMENT

Local development

REQUEST

GET /employees/123

INPUT

employeeId = 123

EXPECTED

200 OK

ACTUAL

500 Internal Server Error

CONDITION

employee.department_id = NULL

REPRODUCIBILITY

100%

LOG

Cannot read properties of null
at EmployeeService.js:48

Regla

Cuanto mejor describas el problema, menos tendrá que adivinar la IA.

8. Formular hipótesis

Antes de modificar código, debemos preguntarnos:

¿Qué podría estar causando este comportamiento?

Ejemplo

PROBLEMA

Employee detail devuelve 500
si department_id = NULL.


HIPÓTESIS 1

El backend asume que department
siempre existe.


HIPÓTESIS 2

El JOIN SQL elimina el registro.


HIPÓTESIS 3

El serializer no acepta NULL.


HIPÓTESIS 4

El frontend espera department.name.

Ahora podemos investigar cada hipótesis.

Pensamiento científico

Hipótesis

↓

Evidencia

↓

Confirmar / descartar

↓

Nueva hipótesis

↓

Solución

9. Prompts profesionales para debugging

Prompt 1 — Análisis inicial

Estoy investigando un bug.

NO modifiques ningún archivo.

Primero analiza:

1. El error.
2. El stack trace.
3. El código relacionado.
4. Los tests existentes.
5. El comportamiento esperado.

Después:

- identifica posibles causas;
- clasifícalas por probabilidad;
- indica qué evidencia necesitamos para confirmar
  o descartar cada una.

No propongas todavía una solución definitiva.

Prompt 2 — Investigación dirigida

Tenemos estas evidencias:

[PEGAR EVIDENCIAS]

Hipótesis actual:

[HIPÓTESIS]

Analiza el código relevante.

Quiero que determines:

1. Si la hipótesis es correcta.
2. Qué líneas la soportan.
3. Qué líneas la contradicen.
4. Qué información falta.

No modifiques código.

Prompt 3 — Proponer solución

La causa raíz parece ser:

[CAUSA]

Propón la solución mínima.

Antes de modificar:

- explica qué archivos cambiarás;
- explica por qué;
- identifica posibles efectos secundarios;
- indica qué tests deberían cubrir el problema.

No implementes todavía.

Prompt 4 — Implementación

Implementa únicamente la solución aprobada.

No hagas refactoring adicional.

Añade un regression test que reproduzca
el bug original.

Ejecuta los tests relacionados.

Después informa:

- archivos modificados;
- tests ejecutados;
- resultado;
- posibles riesgos.

Prompt 5 — Segunda revisión

El bug está corregido.

Ahora intenta encontrar una forma
de romper la solución.

Busca:

- edge cases;
- inputs inesperados;
- estados NULL;
- problemas de permisos;
- regresiones;
- efectos secundarios.

No modifiques código.

Devuelve una lista priorizada
de posibles problemas.

10. Utilizar un agente para investigar

Los agentes son especialmente útiles cuando el problema atraviesa muchos archivos.

Ejemplo

Bug:

El listado de empleados tarda 8 segundos
cuando existen más de 10.000 empleados.

Podemos pedir:

Investiga el problema de rendimiento
del listado de empleados.

No modifiques código.

Analiza:

- endpoint;
- controller;
- service;
- repository;
- queries;
- índices;
- serialización;
- frontend;
- paginación;
- tests.

Busca posibles cuellos de botella.

Para cada uno indica:

- evidencia;
- impacto estimado;
- probabilidad;
- recomendación.

No implementes ninguna solución.

El agente puede descubrir

Frontend
   ↓
GET /employees
   ↓
Service
   ↓
Repository
   ↓
SELECT *
FROM employees

10.000 rows

↓
Sin paginación

↓
Serialización completa

↓
8 segundos

La solución puede ser evidente:

Pagination

+

SELECT campos necesarios

+

Índices adecuados

Pero lo importante es que la IA ha ayudado a investigar, no simplemente a escribir código.

11. Regression Testing

Una corrección profesional no termina cuando el error desaparece.

Problema

Bug encontrado

↓

Fix

↓

Funciona

↓

Dos meses después...

↓

BUG VUELVE

Para evitarlo necesitamos un regression test.

Ejemplo

BUG ORIGINAL

Empleado sin departamento

↓

API devuelve 500


REGRESSION TEST

Employee department = NULL

↓

GET /employees/{id}

↓

Expected: 200

↓

PASS

Principio fundamental

Cada bug importante debería convertirse en conocimiento permanente del sistema.

12. Debugging y seguridad

Los errores pueden contener información sensible.

Nunca compartas sin revisar

Ejemplo peligroso

DATABASE_URL=
postgres://admin:
MyPassword123@
production-db.example.com

No deberías enviar esto a una IA.

Alternativa

DATABASE_URL=
postgres://[REDACTED]

13. Proyecto práctico Week 11

PROYECTO CONDUCTOR

Investigar y corregir 3 bugs

En esta semana no se trata simplemente de "hacer que funcione". El objetivo es demostrar un proceso profesional de debugging asistido por IA.

Bug 1 — Empleado sin departamento

Condición:

department_id = NULL

Resultado:

GET /employees/{id}

→ 500

Bug 2 — ID inexistente

GET /employees/999999

Resultado actual:

500

Resultado esperado:

404

Bug 3 — Búsqueda lenta

Buscar:

"Juan"

Resultado:

La interfaz tarda más de 5 segundos.

Para cada bug

  1. Reproducir.
  2. Documentar comportamiento esperado.
  3. Documentar comportamiento actual.
  4. Recoger logs.
  5. Crear hipótesis.
  6. Utilizar IA para investigar.
  7. Identificar causa raíz.
  8. Crear plan de solución.
  9. Implementar.
  10. Crear regression test.
  11. Ejecutar tests.
  12. Realizar review.

Entregables

docs/bugs/

├── BUG-001.md
├── BUG-002.md
└── BUG-003.md


tests/

└── regression/


docs/

└── debugging.md

Plantilla BUG-001.md

# BUG-001

## Title

Employee without department returns 500

## Environment

Local

## Expected

200 OK

## Actual

500

## Steps to reproduce

1.
2.
3.

## Evidence

Logs...

## Hypotheses

1.
2.
3.

## Root cause

...

## Solution

...

## Regression test

...

## Verification

...

## Lessons learned

...

14. Ejercicios prácticos

Ejercicio 1 — Síntoma vs causa

Tenemos:

HTTP 500

¿Es suficiente para decir cuál es la causa?

Ver respuesta

No. Un HTTP 500 indica un error interno, pero puede tener múltiples causas. Necesitamos logs, stack trace, request y contexto.

Ejercicio 2 — Mejorar un bug report

Transforma:

"La pantalla de empleados falla."

en un bug report profesional.

Ver respuesta orientativa
Título:
Employee detail returns 500 for employees
without department.

Environment:
Local.

Steps:
1. Open employee list.
2. Select employee 123.
3. Employee has department_id = NULL.

Expected:
Employee detail loads correctly.

Actual:
HTTP 500.

Reproducibility:
100%.

Evidence:
NullPointerException at
EmployeeService.js:48.

Ejercicio 3 — Hipótesis

Un endpoint tarda 7 segundos. Propón al menos 5 hipótesis.

Ver respuesta
  • Query sin índice.
  • Demasiados registros.
  • Falta de paginación.
  • N+1 queries.
  • Serialización excesiva.
  • Servicio externo lento.
  • Procesamiento innecesario.

Ejercicio 4 — ¿Qué prompt es mejor?

A)

"Arregla este bug."


B)

"Investiga este bug.
No modifiques código.
Analiza logs, stack trace y código.
Propón hipótesis y dime qué evidencia
necesitamos para confirmar cada una."
Ver respuesta

B. Porque obliga a la IA a investigar antes de modificar el sistema.

Ejercicio 5 — Regression test

¿Por qué añadir un test después de solucionar un bug?

Ver respuesta

Para garantizar que el comportamiento corregido queda protegido frente a futuras modificaciones.

Ejercicio 6 — Debugging sin modificar

¿Por qué es recomendable pedir inicialmente al agente que no modifique archivos?

Ver respuesta

Porque primero queremos comprender el problema y validar la hipótesis. Si dejamos que modifique código demasiado pronto, podemos perder el contexto del problema o introducir cambios innecesarios.

Ejercicio 7 — Seguridad

Tienes este log:

Authorization: Bearer eyJhbGciOi...

¿Lo copiarías directamente en un prompt?

Ver respuesta

No. Debe eliminarse o sustituirse por:

Authorization: Bearer [REDACTED]

Ejercicio 8 — Causa raíz

La aplicación devuelve:

Cannot read property "name" of null

¿Qué investigarías?

Ver respuesta orientativa
  • Qué objeto es null.
  • Dónde se crea.
  • De dónde viene.
  • Si la DB permite NULL.
  • Si el API contract permite NULL.
  • Si el frontend espera siempre un objeto.
  • Qué casos de negocio producen NULL.

15. Ejercicio avanzado — Debugging con agente

Reto

Pide al agente que investigue este problema:

Cuando se buscan empleados
por nombre,

la primera búsqueda funciona,

pero las siguientes búsquedas
muestran resultados incorrectos.

No permitas modificaciones inicialmente.

El agente debería investigar

Solución orientativa

Una posible causa sería que el frontend mantiene resultados anteriores en estado mientras llega la nueva respuesta. Pero el alumno no debe asumir esta solución: debe demostrarla mediante evidencias.

16. Test de evaluación

Pregunta 1

¿Qué diferencia existe entre síntoma y causa?

Pregunta 2

¿Qué deberíamos hacer antes de modificar código durante una investigación?

Pregunta 3

¿Qué aporta un stack trace?

Pregunta 4

¿Qué es una hipótesis de debugging?

Pregunta 5

¿Qué debería hacer un buen prompt de investigación?

Pregunta 6

¿Qué es un regression test?

Pregunta 7

¿Por qué debemos evitar compartir secretos con una IA?

Pregunta 8

¿Qué significa reproducibilidad?

Pregunta 9

¿Qué estrategia es preferible para un fix?

Pregunta 10

¿Quién tiene la responsabilidad final de aceptar la solución?

Pregunta 11

¿Qué información ayuda más a una IA a investigar un bug?

Pregunta 12

¿Cuál es un buen workflow?

Ver respuestas explicadas
  1. 1 — B. El síntoma es lo que observamos; la causa explica el comportamiento.
  2. 2 — A. Primero necesitamos entender el problema.
  3. 3 — A. El stack trace proporciona información sobre la ejecución.
  4. 4 — A. Una hipótesis es una explicación que debemos validar.
  5. 5 — B. La IA funciona mucho mejor con contexto y evidencias.
  6. 6 — A. Protege contra regresiones.
  7. 7 — A. Los secretos deben mantenerse fuera de prompts y logs compartidos.
  8. 8 — A. Un bug reproducible puede investigarse de forma mucho más fiable.
  9. 9 — B. El cambio mínimo reduce riesgos y efectos secundarios.
  10. 10 — B. La responsabilidad sigue siendo humana.
  11. 11 — B. Es la información necesaria para una investigación seria.
  12. 12 — B. Es el workflow profesional trabajado durante la semana.

17. Recursos externos

GitHub Copilot — Debugging
Material oficial sobre debugging asistido por Copilot.
Visual Studio Code — Debugging
Documentación oficial sobre depuración.
MDN — Debugging
Introducción práctica al debugging de aplicaciones web.
OWASP Top 10
Referencia fundamental para identificar problemas de seguridad.
Google SRE — Monitoring Distributed Systems
Fundamentos sobre observabilidad y diagnóstico.
Google SRE — Practical Alerting
Conceptos relacionados con diagnóstico y operaciones.
Martin Fowler — Test Pyramid
Cómo estructurar diferentes tipos de pruebas.
The Twelve-Factor App — Logs
Principios sobre gestión de logs en aplicaciones.

18. Checklist de finalización

19. Evaluación práctica

Para considerar Week 11 superada

Actividad Puntuación
Test teórico 20%
Ejercicios 15%
BUG-001 20%
BUG-002 20%
BUG-003 20%
Documentación 5%

Objetivo mínimo recomendado: 80%.

20. Lo que debe quedar aprendido

La IA no es el botón "arreglar bug"

DESARROLLADOR

define problema
      ↓
proporciona contexto
      ↓
recoge evidencia
      ↓
formula hipótesis
      ↓
      IA
      ↓
analiza
      ↓
propone
      ↓
      DESARROLLADOR
      ↓
valida
      ↓
autoriza cambio
      ↓
      IA
      ↓
implementa
      ↓
tests
      ↓
      DESARROLLADOR
      ↓
acepta solución

La competencia realmente adquirida

El alumno empieza a pasar de:

"La IA me arregla los errores."

a:

"Utilizo la IA como investigador
para acelerar mi proceso de debugging."

21. Preparación para Week 12

El siguiente problema

Ya sabemos:

  • preparar contexto;
  • delegar tareas;
  • construir features;
  • debuggear con IA.

Ahora tenemos que responder:

¿Cómo sabemos que el software
que estamos construyendo
es realmente de calidad?

La respuesta nos lleva a:

Week 12 — Testing y Quality Engineering con IA

Trabajaremos:

  • unit testing;
  • integration testing;
  • E2E;
  • test coverage;
  • test cases generados con IA;
  • mutation testing;
  • property-based testing;
  • quality gates;
  • test automation;
  • generación de tests por agentes.