Por Qué Importa el Testing de Migración de Datos
La migración de datos mueve datos de un sistema a otro — frecuentemente de una base de datos legacy a una plataforma moderna. Son operaciones de alto riesgo porque:
- La pérdida de datos puede ser catastrófica e irreversible.
- Las diferencias de schema requieren transformaciones complejas.
- El downtime impacta directamente las operaciones del negocio.
- Los datos migrados pueden comportarse diferente en el nuevo sistema.
Tipos de Migración
| Tipo | Descripción | Nivel de Riesgo |
|---|---|---|
| Big bang | Todos los datos migrados de una vez en ventana de mantenimiento | Alto |
| Trickle | Datos migrados incrementalmente en el tiempo | Medio |
| Ejecución paralela | Ambos sistemas corren simultáneamente con datos sincronizados | Bajo pero costoso |
| Blue-green | Nuevo sistema preparado completamente, luego se cambia tráfico | Medio |
El Proceso de Testing de Migración
Fase 1: Análisis Pre-Migración
Antes de escribir tests, analiza la migración y crea un documento de mapeo.
Fase 2: Preparación de Datos de Test
- Identificar edge cases en datos fuente: valores NULL, caracteres especiales, strings de longitud máxima.
- Muestrear datos representativos.
- Crear registros de test conocidos con resultados esperados precalculados.
Fase 3: Tests de Ejecución de Migración
Verificación de conteo de registros:
-- Antes de migración
SELECT COUNT(*) FROM legacy_db.users;
SELECT COUNT(*) FROM legacy_db.orders;
-- Después de migración
SELECT COUNT(*) FROM new_db.users;
SELECT COUNT(*) FROM new_db.orders;
Verificación de valores agregados:
SELECT SUM(order_total) FROM legacy_db.orders;
SELECT SUM(amount_usd) FROM new_db.orders;
Fase 4: Validación de Calidad de Datos
Integridad referencial:
SELECT COUNT(*) FROM new_db.orders o
LEFT JOIN new_db.users u ON o.user_id = u.id
WHERE u.id IS NULL;
-- Esperado: 0
Correctitud de tipos de datos:
SELECT legacy_id, legacy_created_at, new_created_at
FROM migration_audit
WHERE ABS(EXTRACT(EPOCH FROM legacy_created_at - new_created_at)) > 1;
-- Esperado: 0 filas
Fase 5: Validación de Aplicación
Después de migrar datos, prueba la aplicación contra los datos migrados:
- ¿Pueden los usuarios iniciar sesión con credenciales existentes?
- ¿Se muestran correctamente los pedidos existentes?
- ¿Pueden los usuarios realizar nuevas operaciones?
- ¿Los reportes generan números correctos?
Testing de Estrategia de Rollback
Toda migración necesita un plan de rollback probado:
- Verificación de backup: Restaurar en ambiente de test.
- Script de rollback: Probar que revierte correctamente.
- Punto de no retorno: Identificar cuándo el rollback ya no es factible.
- Tiempo de rollback: Medir duración.
Testing de Rendimiento
Migraciones en datasets grandes pueden tomar horas. Prueba con datos a escala de producción.
Ejercicio: Plan de Testing de Migración de Datos
Escenario
Tu empresa migra de una base PostgreSQL legacy a un nuevo sistema con 2 millones de usuarios, 8 millones de pedidos y 25 millones de items.
Tarea 1: Crear Documento de Mapeo
Crea un mapeo completo campo-por-campo entre schemas legacy y nuevos.
Tarea 2: Escribir Queries de Verificación
Escribe queries SQL para verificar:
- Todos los usuarios legacy existen en el nuevo sistema.
- Los nombres se dividieron correctamente.
- Los códigos de estado se mapearon correctamente.
- Las fechas se convirtieron de string a timestamp correctamente.
- Los montos se convirtieron a USD con tasa correcta.
- Todas las relaciones foreign key están intactas.
Tarea 3: Datos de Test de Edge Cases
Crea registros que cubran edge cases: nombre NULL, nombre complejo, caracteres no-ASCII, monto cero, fecha bisiesta, moneda sin tasa de cambio.
Tarea 4: Plan de Rollback
Documenta: qué se respalda, cómo se restaura, cuál es el punto de no retorno, cuánto toma el rollback, cuál es el plan de comunicación.
Entregables
- Documento de mapeo completo campo-por-campo.
- Queries SQL de verificación con resultados esperados.
- Datos de test de edge cases con resultados esperados.
- Documento de plan de rollback.