Los datos de prueba sintéticos son datos fabricados en lugar de recopilados. No describen a nadie, se pueden regenerar a demanda y nunca hay que enmascararlos, purgarlos ni reclamarlos por vía judicial. Para los equipos que prueban formularios de dirección, flujos de pago o canalizaciones de importación, es el único tipo de datos que se puede usar libremente en CI, capturas de pantalla y demostraciones.
El problema es que los datos sintéticos solo son útiles cuando son a la vez verosímiles y seguros. Los datos inverosímiles dejan pasar los errores. Los datos inseguros los crean. Esta guía cubre el camino intermedio: generación con semilla para la reproducibilidad, rangos de valores reservados que no pueden colisionar con la realidad, integridad referencial entre entidades y los identificadores concretos que un generador debería negarse a producir.
Qué cuenta realmente como datos sintéticos
Los datos sintéticos se generan a partir de reglas, no se muestrean de personas. Un nombre compuesto a partir de una lista de nombres, una dirección compuesta a partir de un fixture de país, un número de teléfono de un bloque reservado, un correo electrónico en un dominio reservado: cada uno está fabricado y ninguno se refiere a un sujeto real. La reproducibilidad es lo que los separa del ruido aleatorio, porque una salida sin semilla no se puede revisar, comparar ni reproducir.
Los datos de producción anonimizados no son sintéticos. Enmascarar una fila real deja la misma distribución y a menudo el mismo riesgo de reidentificación, y una columna EMAIL enmascarada que conserva el dominio sigue filtrando el empleador. Si una prueba necesita datos con forma de producción, esa es una conversación aparte sobre agregación y acceso, no algo que un generador pueda proporcionar honestamente.
- Generados a partir de reglas, no muestreados de personas
- Reproducibles a partir de una semilla
- Revisables: un diff te dice qué cambió
- Nunca derivados de una fila de producción
Generación con semilla frente a archivos de fixture versionados
Un archivo de fixture versionado tiene una ventaja: es fácil de inspeccionar. Tiene varios problemas. Se desvía, porque nadie lo actualiza cuando cambia el esquema. Hincha el repositorio. Se copia entre proyectos hasta que nadie sabe qué versión es la actual. Y poco a poco se convierte en los únicos datos contra los que alguien prueba, así que la suite cubre exactamente los valores que alguien escribió en 2021.
La generación con semilla mantiene la entrada diminuta y la salida grande. La semilla más la versión del generador son el fixture. Regenera a demanda, guarda solo el primer y el último registro para revisión, y trata cualquier cambio en la salida del generador como un cambio deliberado que requiere una nueva línea base. El único requisito es que el generador esté fijado, porque un generador actualizado con un algoritmo cambiado es un conjunto de datos nuevo incluso con la misma semilla.
| Enfoque | Coste en el repositorio | Reproducible | Riesgo de desviación |
|---|---|---|---|
| Fixtures JSON versionados | Alto | Sí, pero congelados | Aumenta con la antigüedad |
| Generador con semilla en tiempo de prueba | Bajo | Sí, con una versión fijada | Bajo |
| Datos aleatorios sin semilla | Bajo | No | Alto, e inestable |
| Volcado de producción enmascarado | Alto | No | Alto, más riesgo de privacidad |
Rangos reservados que no pueden colisionar con la realidad
Varios estándares reservan valores para documentación y pruebas. Usarlos no es una preferencia de estilo; es la diferencia entre un fixture garantizado como inofensivo y uno que podría pertenecer a alguien. Los bloques reservados son estables, están ampliamente documentados y la mayoría de los validadores los aceptan como sintácticamente normales.
Para el correo electrónico, usa un dominio bajo .test, como example.test, que está reservado y no se puede registrar. Para los números de teléfono del Plan de Numeración de América del Norte, el bloque 555-0100 a 555-0199 está reservado para uso ficticio. Para las direcciones IP, los rangos de documentación son 192.0.2.0/24, 198.51.100.0/24 y 203.0.113.0/24 en IPv4 y 2001:db8::/32 en IPv6. Para las direcciones MAC, el rango de documentación es 00-00-5E-00-53-00 a 00-00-5E-00-53-FF, y las direcciones administradas localmente con el bit U/L activado también son seguras para fixtures.
| Tipo de valor | Reservado para pruebas | Autoridad |
|---|---|---|
| Dominio de correo electrónico | example.test, example.com, example.org | RFC 2606 y RFC 6761 |
| Dominio web | .test, .invalid, .localhost | RFC 2606 |
| Teléfono de EE. UU. y Canadá | NANP 555-0100 a 555-0199 | Rango de ficción NANP |
| Documentación IPv4 | 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | RFC 5737 |
| Documentación IPv6 | 2001:db8::/32 | RFC 3849 |
| Documentación MAC | 00-00-5E-00-53-xx | RFC 7042 |
| MAC administrada localmente | Primer octeto 0x02, bit I/G desactivado | Bit U/L de IEEE 802 |
Integridad referencial entre entidades generadas
La mayoría de los sistemas necesitan más de una entidad. Un pedido tiene un cliente, una dirección de envío y una dirección de facturación, y las tres deben concordar de formas que el esquema impone. Si la dirección de facturación está en Estados Unidos y la de envío en Japón, el cálculo de impuestos y la selección de transportista tienen que aceptar esa combinación, o la prueba falla por un motivo ajeno al comportamiento bajo prueba.
Genera relaciones, no filas. Deriva semillas hijas de la semilla padre para que el pedido y sus direcciones sean reproducibles como una unidad. Decide deliberadamente qué campos deben concordar: el país entre envío y facturación suele ser el mismo, el código postal debe coincidir con la ciudad del fixture, la moneda debe coincidir con el país. Codifica esas restricciones en la factoría para que un fixture roto falle en el momento de la generación en lugar de en una aserción tres capas más abajo.
- Deriva semillas hijas de la semilla padre, no del reloj
- Mantén el país coherente entre facturación, envío e impuestos
- Mantén el código postal coherente con el fixture de ciudad
- Mantén la moneda coherente con el país
- Falla en el momento de la generación cuando se viola una restricción
Lo que este sitio se niega a generar
El sitio no genera números de Seguridad Social, números de tarjetas de pago, valores IMEI o IMSI, direcciones de dispositivos Bluetooth ni números de serie. Cada negativa tiene un motivo. Los SSN son identificadores legalmente restringidos en Estados Unidos. Los números de tarjeta llevan una suma de verificación Luhn, así que uno verosímil puede pasar un validador ingenuo y luego pegarse en un ticket de soporte. Los IMEI tienen un dígito de control y un registro de asignación. Las direcciones Bluetooth comparten el formato MAC pero no llevan significado de fabricante, y una generada invita exactamente a la confusión que las herramientas MAC están diseñadas para evitar.
El mismo razonamiento se aplica a cualquier identificador con una suma de verificación o un registro. Si una prueba realmente necesita uno, usa los valores de prueba publicados oficialmente por el procesador o la autoridad emisora, no un generador. Eso mantiene el valor obviamente falso para cualquiera que reconozca el patrón de prueba, y mantiene tu captura de pantalla fuera de una revisión de cumplimiento.
| Identificador | Generado aquí | Alternativa correcta |
|---|---|---|
| Número de Seguridad Social | No | Nunca uses un SSN real o realista |
| Número de tarjeta de pago | No | Tarjetas de prueba del procesador para el sandbox |
| IMEI o IMSI | No | Valores de prueba del fabricante, si existen |
| Dirección Bluetooth | No | No se necesita para pruebas de formularios de dirección |
| Número de serie del dispositivo | No | Un id de fixture opaco que tú controles |
| Dirección de correo electrónico | Sí, solo example.test | Dominio seguro y no resolutivo |
| Número de teléfono | Sí, NANP 555-0100 a 555-0199 | Rango de ficción reservado |
Volumen, determinismo y rendimiento
Generar cien registros en tiempo de prueba es barato. Generar diez millones no lo es, y hacerlo dentro de la configuración de una prueba dominará el tiempo de ejecución. Precalcula grandes volúmenes una vez en un almacén aislado, con la semilla registrada en el manifiesto, y mantén el generador fuera de la ruta crítica. Para volúmenes medianos, genera en un solo lote en lugar de fila por fila, porque la configuración por fila suele ser el coste real.
El determinismo también tiene una dimensión de rendimiento. Los trabajadores en paralelo no deben compartir un único generador secuencial, porque el entrelazado cambia qué trabajador recibe qué registro. Da a cada trabajador su propia semilla derivada de la semilla de ejecución y del índice del trabajador, para que el conjunto de datos sea estable independientemente de la planificación. Eso también hace que un fallo en el trabajador tres sea reproducible sin volver a ejecutar toda la suite.
- Volúmenes pequeños: genera en línea, con semilla
- Volúmenes grandes: precalcula en un almacén aislado con un manifiesto
- Trabajadores en paralelo: deriva una semilla por índice de trabajador
- Nunca compartas una única instancia de generador entre hilos
- Registra la versión del generador junto con la semilla
Mantener los datos sintéticos fuera de las canalizaciones reales
El peligro de los buenos datos sintéticos es que parecen reales. Pon un marcador en cada registro generado: una marca de fixture, un inquilino dedicado, un correo electrónico en example.test, un teléfono en el rango 555-01xx. Bloquea esos registros para que no envíen correo, capturen pagos ni entren en analítica. Un cliente de demostración que llega a un CRM de producción es un incidente de soporte esperando a que un comercial lo note.
También mantén los datos generados fuera de los registros que se conservan por cumplimiento y de las capturas de pantalla que se van a publicar. Aunque los valores no describen a nadie, un lector no puede saberlo a partir de la imagen, y explicarlo después es más caro que etiquetarlo ahora. Si una captura de pantalla debe mostrar una dirección realista, usa un valor del rango de documentación y añade un pie de foto visible de "datos de muestra".
- Etiqueta cada fila generada con una marca de fixture o inquilino
- Bloquea los inquilinos de fixture para correo, pagos y analítica
- Usa example.test y 555-01xx, nunca un dominio real verosímil
- Pon pie de foto en las capturas que muestren valores generados
- Purga los fixtures del staging compartido de forma programada
Una lista de verificación previa al uso
Antes de usar un conjunto de datos generado en un entorno compartido, hay que responder cuatro preguntas. ¿De dónde salió y se puede regenerar? ¿Está cada valor en un rango reservado o administrado localmente? ¿Satisface las restricciones del esquema y las reglas referenciales? ¿Y está etiquetado de modo que un lector humano no pueda confundirlo con un cliente?
Si alguna respuesta es no, el conjunto de datos no está listo. Esto es deliberadamente estricto, porque el coste de una respuesta incorrecta es asimétrico: regenerar lleva minutos, mientras que un cliente sintético en un informe de ingresos puede distorsionar decisiones durante un trimestre. Ejecuta la lista de verificación como parte de la revisión, no como un comentario en una wiki.
| Pregunta | Condición de aprobación | Evidencia |
|---|---|---|
| Origen | Semilla y versión del generador registradas | Archivo de manifiesto |
| Seguridad | Todos los valores en rangos reservados o locales | Validador ejecutado sobre el conjunto de datos |
| Integridad | Esquema y reglas entre entidades satisfechos | Pruebas de factoría en verde |
| Etiquetado | Marca de fixture en cada fila | La consulta devuelve cero filas sin etiquetar |
Preguntas
- Sí, cuando cada valor es sintético y reservado, por ejemplo correos example.test y teléfonos NANP 555-01xx. Es preferible regenerar a partir de una semilla que versionar grandes conjuntos de datos.
- Esos identificadores están regulados o llevan suma de verificación, y un falso realista puede pasar una validación ingenua y acabar en una captura de pantalla o un ticket. Usa en su lugar valores de prueba oficiales del procesador o la autoridad.
- Deriva una semilla por trabajador a partir de la semilla de ejecución y el índice del trabajador. Un único generador compartido produce una secuencia distinta según la planificación.
- No. El enmascaramiento conserva la distribución original y a menudo el riesgo de reidentificación. Los datos sintéticos se generan a partir de reglas y no describen a ningún sujeto real.
- 38 países con cinco fixtures de ciudad cada uno. Hong Kong y los Emiratos Árabes Unidos no devuelven código postal, porque ninguno tiene.
¿Es seguro versionar datos de prueba sintéticos?+
¿Por qué el generador se niega a producir valores de tarjeta o SSN?+
¿Cómo mantengo reproducibles las pruebas en paralelo?+
¿Los datos de producción enmascarados son lo mismo?+
¿Cuántos países cubren los datos de direcciones sintéticas?+
Los ejemplos son sintéticos. No utilices una dirección generada para verificaciones de identidad, registro de cuentas ni entregas.