FORMACIÓN · SEMANA 12

Testing y Quality Engineering con IA

Aprender a diseñar, generar, ejecutar, revisar y mantener pruebas de software utilizando IA como acelerador.

Semana 12 de 24 · Nivel: Intermedio

1. Objetivos de la semana

OBJETIVO CENTRAL

Construir software que podamos demostrar que funciona

Hasta ahora hemos aprendido a construir funcionalidades y a corregir bugs. Ahora debemos introducir una pregunta fundamental:

¿Cómo sabemos que nuestra aplicación
sigue funcionando después de cambiarla?

01 · Comprender testing

Entender por qué y cuándo necesitamos tests.

02 · Diseñar pruebas

Convertir requisitos en casos de prueba.

03 · Usar IA

Generar tests con IA de forma controlada.

04 · Auditar

Detectar tests generados por IA que no aportan valor.

05 · Automatizar

Integrar pruebas en el workflow.

06 · Prevenir regresiones

Convertir errores en protección permanente.

2. De Testing a Quality Engineering

Testing no significa simplemente escribir pruebas.

Testing tradicional

Construir

↓

Probar

↓

Encontrar errores

↓

Corregir

Quality Engineering

Requisitos
    ↓
Diseño
    ↓
Implementación
    ↓
Testing
    ↓
Observabilidad
    ↓
Seguridad
    ↓
Rendimiento
    ↓
Automatización
    ↓
Continuous Quality

El objetivo es introducir calidad durante todo el ciclo de desarrollo.

3. ¿Qué es un test?

Un test es una comprobación automatizada de que un comportamiento determinado es el esperado.

Ejemplo sencillo

FUNCIÓN

calculateTotal(price, quantity)


ENTRADA

price = 10
quantity = 3


ESPERADO

30


TEST

calculateTotal(10,3)
        ↓
       30

PASS

Un test tiene normalmente

Elemento Significado
Arrange Preparar el escenario.
Act Ejecutar la acción.
Assert Comprobar el resultado.

Patrón AAA

ARRANGE

Preparar datos


ACT

Ejecutar función


ASSERT

Comprobar resultado

4. Niveles de testing

No todos los tests comprueban lo mismo.

Nivel Qué prueba Velocidad
Unit Una unidad aislada. Muy rápida
Integration Interacción entre componentes. Media
API Contrato y comportamiento de APIs. Media
E2E Flujo completo de usuario. Más lenta

Pirámide de testing


             /\
            /  \
           / E2E\
          /------\
         /  API   \
        /----------\
       / Integration\
      /--------------\
     /      UNIT       \
    /__________________\

Muchos tests baratos

Pocos tests caros

Un error habitual es intentar solucionar todo mediante E2E.

Los tests E2E son útiles, pero son más lentos y normalmente más frágiles.

5. Unit Testing

Un unit test prueba una unidad pequeña del sistema de forma aislada.

Ejemplo conceptual

calculateDiscount()

Input:
100
10%

Expected:
90

¿Qué deberíamos probar?

Ejemplo

describe("calculateDiscount", () => {

  test("10% discount", () => {

    expect(
      calculateDiscount(100, 10)
    ).toBe(90);

  });

});

Caso límite

calculateDiscount(100, 100)

Expected:

0

Otro caso

calculateDiscount(100, 0)

Expected:

100

6. Integration Testing

Aquí comprobamos que varias piezas funcionan juntas.

API

↓

Service

↓

Repository

↓

Database

Ejemplo

Queremos comprobar:

POST /employees

↓

EmployeeService

↓

Database

↓

Employee creado

Este test no comprueba únicamente una función. Comprueba la interacción entre componentes.

Cuándo usar integration tests

  • acceso a base de datos;
  • persistencia;
  • transacciones;
  • integraciones;
  • colas;
  • servicios internos.

7. Testing de APIs

Nuestra aplicación utiliza APIs. Por tanto debemos comprobar sus contratos.

Ejemplo

GET /api/employees/123

Esperamos:

HTTP 200

{
  "id": 123,
  "name": "Juan"
}

Tests importantes

Escenario Resultado esperado
ID existente 200
ID inexistente 404
ID inválido 400
Sin autorización 401
Sin permisos 403

Pregunta importante

¿Debemos comprobar solamente el status code?

Ver respuesta

No. También deberíamos comprobar:

  • estructura;
  • campos;
  • tipos;
  • valores;
  • headers importantes;
  • errores;
  • contratos.

8. End-to-End Testing

Un test E2E intenta reproducir el comportamiento de un usuario real.

Ejemplo

Usuario

↓

Login

↓

Dashboard

↓

Employees

↓

Buscar "Juan"

↓

Abrir empleado

↓

Modificar departamento

↓

Guardar

↓

Verificar resultado

Este tipo de test valida que muchas piezas funcionan juntas.

Pero cuidado

Si falla un E2E, no necesariamente sabemos qué componente es responsable.

Por eso necesitamos diferentes niveles de testing.

9. Diseñar casos de prueba

Una de las habilidades más importantes es convertir requisitos en escenarios.

Requisito

Un empleado puede cambiar
su departamento.

Parece sencillo. Pero debemos pensar:

Escenario Resultado
Departamento válido Actualización correcta
Departamento inexistente Error
Empleado inexistente 404
Usuario no autenticado 401
Usuario sin permisos 403
department_id = null Comportamiento definido
Request incompleto 400

La IA puede ayudarnos aquí

Analiza este requisito:

"Un empleado puede cambiar
su departamento."

Genera una matriz de casos de prueba.

Incluye:

- happy path;
- errores;
- edge cases;
- permisos;
- autenticación;
- datos inexistentes;
- valores null;
- valores inválidos;
- concurrencia.

No escribas código todavía.

10. Generar tests con IA

La IA es especialmente buena generando variantes.

Prompt básico

Analiza esta función.

[PEGAR FUNCIÓN]

Genera tests unitarios.

Incluye:

1. Happy path
2. Edge cases
3. Invalid inputs
4. Boundary values
5. Null / undefined
6. Error conditions

Utiliza el framework
de testing existente.

No cambies producción.

Prompt mejorado

Antes de generar tests:

1. Analiza la función.
2. Identifica su contrato.
3. Identifica dependencias.
4. Identifica posibles errores.
5. Identifica casos límite.

Después genera los tests.

Para cada test explica:

- qué comportamiento protege;
- por qué es importante;
- qué bug detectaría.

No generes tests redundantes.

11. Agentes para construir una estrategia de testing

Aquí empezamos a utilizar la IA como miembro de un equipo de QA.

Prompt de auditoría

Actúa como Quality Engineer.

Analiza este proyecto.

No modifiques ningún archivo.

Investiga:

- funcionalidades;
- endpoints;
- componentes;
- servicios;
- modelos;
- reglas de negocio;
- tests existentes.

Construye una matriz:

FEATURE
RISK
EXISTING TESTS
MISSING TESTS
PRIORITY

Después identifica
los 10 riesgos de calidad
más importantes.

Después

Proyecto

↓

IA analiza

↓

Mapa funcional

↓

Riesgos

↓

Casos de prueba

↓

Priorización

↓

Implementación

↓

Ejecución

↓

Informe

Pero nunca aceptar automáticamente todos los tests generados.

12. Cómo detectar tests malos generados por IA

Test aparentemente bueno

test("creates employee", () => {

  const result =
    createEmployee(data);

  expect(result).toBeDefined();

});

El test pasa. Pero... ¿Qué demuestra realmente?

Problema

Solo demuestra que existe algún resultado. No demuestra:

Test más útil

expect(result.name)
  .toBe("Juan");

expect(result.departmentId)
  .toBe(10);

expect(result.id)
  .toBeDefined();

Regla

Un test que siempre pasa no necesariamente es un buen test.

13. Code Coverage

Coverage mide qué parte del código ha sido ejecutada durante los tests.

Ejemplo

100 líneas de código

Tests ejecutan

80 líneas

Coverage = 80%

¿Significa que tenemos un sistema 80% correcto?

No necesariamente

Coverage mide ejecución, no calidad de las assertions. Podemos tener 100% coverage con tests extremadamente malos.

Ejemplo

function divide(a,b){

  if(b === 0){

    throw Error(
      "Cannot divide by zero"
    );

  }

  return a/b;

}

Podemos conseguir coverage alto sin comprobar realmente el comportamiento del error.

Hay que distinguir

Métrica Pregunta
Line coverage ¿Se ejecutó la línea?
Branch coverage ¿Se probaron las ramas?
Assertion quality ¿Comprobamos realmente el resultado?
Mutation testing ¿Los tests detectan cambios incorrectos?

14. TDD asistido por IA

TDD significa:

RED

↓

GREEN

↓

REFACTOR

RED

Escribimos primero el test. Debe fallar.

GREEN

Implementamos lo mínimo para hacerlo pasar.

REFACTOR

Mejoramos el código sin cambiar el comportamiento.

Con IA

REQUISITO

↓

IA propone casos

↓

Desarrollador revisa

↓

IA genera tests

↓

Test FAIL

↓

IA implementa

↓

Test PASS

↓

IA propone refactoring

↓

Tests PASS

La ventaja no es escribir menos tests. La ventaja es poder iterar mucho más rápido.

15. Edge Cases

Los casos límite son uno de los lugares donde la IA puede aportar mucho valor.

Ejemplo

function calculateAge(birthYear){

  return 2026 - birthYear;

}

Casos obvios

birthYear = 1990

→ 36

Pero...

Analiza esta función.

Busca exhaustivamente
edge cases.

Clasifícalos:

CRÍTICO
ALTO
MEDIO
BAJO

Explica qué comportamiento
esperarías en cada caso.

16. Proyecto práctico Week 12

PROYECTO CONDUCTOR

Crear una estrategia de calidad para nuestra aplicación

Durante esta semana vamos a construir la primera verdadera capa de calidad del proyecto.

Paso 1 — Inventario

Pedir al agente que analice:

Paso 2 — Matriz de riesgos

Feature Impacto Probabilidad Prioridad
Login Alto Media Alta
Employee search Medio Alta Alta
Profile editing Alto Media Alta

Paso 3 — Unit tests

Crear tests para las funciones de negocio principales.

Paso 4 — API tests

Crear tests para:

200
400
401
403
404
409
500

Paso 5 — Integration tests

Comprobar:

API
 ↓
Service
 ↓
Database

Paso 6 — E2E

Construir al menos 3 flujos completos:

  1. Login → Dashboard.
  2. Buscar empleado → abrir ficha.
  3. Editar empleado → guardar → verificar.

Paso 7 — Regression tests

Recuperar los 3 bugs de Week 11. Cada uno debe tener un test automatizado.

Paso 8 — Quality Gate

Pull Request

↓

Tests

↓

Coverage

↓

Lint

↓

Security checks

↓

PASS / FAIL

Entregables

docs/

├── quality-strategy.md
├── test-plan.md
└── risk-matrix.md


tests/

├── unit/
├── integration/
├── api/
└── e2e/


docs/

└── regression-tests.md

17. Ejercicios prácticos

Ejercicio 1 — Diseñar tests

Tenemos:

login(email,password)

Diseña al menos 8 casos.

Ver solución
  • credenciales correctas;
  • password incorrecta;
  • email inexistente;
  • email vacío;
  • password vacía;
  • email inválido;
  • usuario bloqueado;
  • usuario sin permisos.

Ejercicio 2 — ¿Unit o E2E?

¿Qué utilizarías para comprobar que una función calcula correctamente un descuento?

Respuesta

Unit test. Es una unidad pequeña y no necesitamos levantar toda la aplicación.

Ejercicio 3 — API

¿Qué debería ocurrir con:

GET /employees/999999

si no existe el empleado?

Respuesta

Normalmente: 404 Not Found.

Ejercicio 4 — Test inútil

expect(result).toBeDefined();

¿Por qué puede ser insuficiente?

Respuesta

Porque únicamente demuestra que existe un resultado. No valida que el resultado sea correcto.

Ejercicio 5 — Coverage

¿100% coverage significa 100% calidad?

Respuesta

No. Coverage mide qué código se ejecuta, no necesariamente si las assertions comprueban correctamente el comportamiento.

Ejercicio 6 — Edge cases

Para:

function multiply(a,b){
 return a*b;
}

encuentra al menos 8 casos.

Respuesta
  • 2 × 3;
  • 0 × 5;
  • -2 × 3;
  • -2 × -3;
  • decimal × decimal;
  • 0 × 0;
  • null;
  • undefined;
  • string;
  • Infinity.

Ejercicio 7 — Prompt

Escribe un prompt para que una IA analice una funcionalidad y genere casos de prueba sin escribir código.

Respuesta orientativa
Analiza esta funcionalidad.

No escribas código.

Identifica:

- happy path;
- errores;
- edge cases;
- permisos;
- autenticación;
- datos inexistentes;
- estados límite.

Devuelve una matriz de casos de prueba
con:

INPUT
PRECONDITIONS
ACTION
EXPECTED RESULT
PRIORITY

18. Reto avanzado — Encontrar tests que faltan

Entrega al agente el código de una funcionalidad real del proyecto. Pídele:

NO ESCRIBAS TESTS.

Analiza únicamente
qué comportamientos deberían
estar cubiertos.

Busca:

- ramas;
- errores;
- límites;
- permisos;
- estados inválidos;
- concurrencia;
- null;
- datos inexistentes.

Devuelve únicamente
la matriz de cobertura propuesta.

Después el alumno debe revisar manualmente la propuesta.

Objetivo

Aprender que la IA puede producir una primera versión, pero el criterio sigue siendo humano.

19. Test de evaluación

1. ¿Qué es un unit test?

2. ¿Qué significa AAA?

3. ¿Qué prueba mejor un flujo completo?

4. ¿Qué suele ser más rápido?

5. ¿Qué es un edge case?

6. ¿100% coverage garantiza calidad?

7. ¿Qué debería hacer primero un agente al analizar una estrategia de testing?

8. ¿Qué debería comprobar un buen test?

9. ¿Qué status suele corresponder a un recurso inexistente?

10. ¿Qué significa TDD?

11. ¿Qué significa RED en TDD?

12. ¿Por qué no debemos aceptar automáticamente tests generados por IA?

13. ¿Qué prueba la assertion?

14. ¿Qué es un regression test?

15. ¿Quién debe decidir si un test es adecuado?

Ver respuestas explicadas
  1. 1 — B. Un unit test comprueba una unidad pequeña.
  2. 2 — B. Arrange, Act, Assert.
  3. 3 — B. E2E comprueba flujos completos.
  4. 4 — A. Los unit tests suelen ser los más rápidos.
  5. 5 — A. Es un caso límite o extremo.
  6. 6 — B. Coverage no mide por sí solo la calidad.
  7. 7 — B. Primero hay que entender el sistema y sus riesgos.
  8. 8 — B. El objetivo es validar comportamiento.
  9. 9 — B. 404 Not Found.
  10. 10 — A. Test Driven Development.
  11. 11 — A. Primero escribimos una prueba que falla.
  12. 12 — B. La IA puede producir tests superficiales.
  13. 13 — A. Una assertion comprueba una condición.
  14. 14 — A. Protege contra regresiones.
  15. 15 — B. La responsabilidad final es humana.

20. Recursos externos

Martin Fowler — The Practical Test Pyramid
Referencia fundamental para comprender la estrategia de niveles de testing.
Playwright — Documentación oficial
Framework moderno para testing E2E y automatización web.
Jest — Getting Started
Framework ampliamente utilizado para testing JavaScript/TypeScript.
Testing Library
Principios y herramientas para testing centrado en el comportamiento del usuario.
GitHub Actions
Automatización de tests y CI/CD.
Martin Fowler — TDD
Introducción al desarrollo dirigido por tests.
OWASP Web Security Testing Guide
Referencia para testing de seguridad en aplicaciones web.
Google SRE — Testing for Reliability
Testing desde una perspectiva de fiabilidad de sistemas.

21. Checklist

22. Evaluación práctica

Actividad Peso
Test teórico 15%
Ejercicios 10%
Estrategia de testing 15%
Unit tests 15%
API / Integration 15%
E2E 15%
Regression tests 10%
Documentación 5%

Objetivo recomendado: ≥80%.

23. El aprendizaje clave

De "la IA escribe tests" a "la IA me ayuda a diseñar calidad"


REQUISITO

↓

RIESGOS

↓

CASOS DE PRUEBA

↓

ESTRATEGIA

↓

IA GENERA TESTS

↓

DESARROLLADOR REVISA

↓

EJECUCIÓN

↓

ANÁLISIS

↓

REGRESSION

↓

QUALITY GATE

Nueva competencia

El alumno ya no utiliza la IA únicamente para generar código.

Empieza a utilizarla para pensar sobre la calidad del software.

24. Preparación para Week 13

El siguiente salto

Hasta ahora tenemos:

  • contexto;
  • desarrollo asistido;
  • debugging;
  • testing;
  • quality engineering.

Ahora aparece una cuestión fundamental:


¿Cómo hacemos que una IA
pueda trabajar sobre nuestro proyecto
durante horas,

manteniendo contexto,
tomando decisiones,
ejecutando herramientas
y completando tareas complejas?

Week 13 — Agentes de desarrollo

Trabajaremos:

  • qué es un agente;
  • agent loop;
  • tools;
  • context;
  • planning;
  • delegación;
  • subagentes;
  • guardrails;
  • human-in-the-loop;
  • agentic coding;
  • workflows complejos;
  • cómo evitar que un agente destruya el proyecto.