A conversa costuma começar assim: homologação está com dados velhos, o time precisa reproduzir um bug, alguém restaura o dump de produção. Funciona, o bug aparece, o time segue em frente. E a base de clientes agora existe em um ambiente com credenciais compartilhadas, sem log de acesso e com backup em um bucket que ninguém revisa desde a criação.
Este artigo não é sobre conformidade no abstrato. É sobre por que a cópia de produção é uma decisão cara, quais alternativas existem de fato, e como montar uma massa de teste sintética que resolva os mesmos problemas que o dump resolvia.
O que a cópia de produção realmente custa
O custo não é a multa hipotética. É o conjunto de obrigações que passam a valer sobre um ambiente que não foi construído para suportá-las.
- Ampliação da superfície de exposição: dados pessoais passam a existir em um ambiente com controle de acesso mais frouxo, geralmente acessível a mais gente do que produção.
- Rastreabilidade perdida: incidente em homologação raramente tem log suficiente para dizer quem acessou o quê, o que atrapalha justamente a resposta que a lei exige.
- Retenção sem fim: dumps de teste sobrevivem em máquinas de desenvolvedor, buckets, snapshots e backups. Atender a um pedido de eliminação passa a exigir caçar cópias.
- Vazamento por ferramenta de apoio: ambientes de teste conectam ferramentas de observabilidade, mock e captura de tela que não passaram por avaliação de fornecedor.
- Bloqueio comercial: cliente corporativo pergunta se dados dele estão em ambiente de teste com cada vez mais frequência, e a resposta errada trava contrato.
Três abordagens, três níveis de proteção
Os termos são usados como sinônimos e não são. A diferença prática está em se o dado continua ou não sob o escopo da lei.
| Abordagem | Origem do dado | Continua sob a LGPD? | Custo de manutenção |
|---|---|---|---|
| Cópia de produção | Registros reais | Sim, integralmente | Baixo para criar, alto para governar |
| Mascaramento | Registros reais transformados | Sim, com risco de reidentificação | Médio; a regra precisa acompanhar o schema |
| Anonimização | Registros reais irreversivelmente agregados | Não, se de fato irreversível | Alto; provar irreversibilidade é difícil |
| Geração sintética | Regras de formato e distribuição | Não | Médio no início, decrescente depois |
A anonimização parece o melhor dos mundos e raramente é. Ela precisa ser irreversível considerando todos os meios razoavelmente disponíveis — inclusive cruzamento com bases externas. Um registro com data de nascimento, CEP e sexo já é frequentemente único em uma cidade média, mesmo sem nome nem documento. Provar irreversibilidade dá mais trabalho do que gerar dado novo.
O que você realmente precisa da massa de teste
Vale separar a necessidade real da necessidade percebida. Quando o time diz que precisa de dados de produção, quase sempre o que ele precisa é de uma destas quatro coisas — nenhuma delas exige identidade.
- 1Formato: acentuação, apóstrofo em sobrenome, campo com 300 caracteres, telefone com nono dígito, endereço sem número.
- 2Distribuição: proporção de pedidos cancelados, percentual de cadastros sem e-mail, cauda longa de valores altos.
- 3Volume: paginação com cem mil registros, relatório que agrega um ano, índice que só degrada acima de certo tamanho.
- 4Relacionamento: cliente com muitos pedidos, pedido sem item, item com produto removido do catálogo.
Nenhum desses quatro exige que o registro pertença a uma pessoa existente. É por isso que a geração sintética funciona: ela ataca exatamente o que importa para o teste.
Montando a massa na prática
Uma massa sintética útil tem três camadas, e a maior parte das equipes só constrói a primeira.
Camada 1 — caminho feliz
Registros bem-comportados que exercitam o fluxo principal. É o que a maioria dos geradores entrega por padrão: nome, e-mail, documento válido, endereço completo, pedido com item.
Camada 2 — casos-limite
Aqui mora o valor. Estes casos precisam ser escritos à mão uma vez e versionados junto com o código, porque nenhum gerador adivinha as bordas do seu domínio.
- Nome com apóstrofo, hífen, acento e caractere fora do Latin-1.
- Documento inválido em cada modo de falha: tamanho errado, sequência repetida, dígito verificador trocado.
- Campos opcionais vazios, nulos e com string vazia — os três se comportam diferente.
- Valores no limite: zero, negativo, máximo do tipo, precisão decimal na fronteira do arredondamento.
- Datas problemáticas: 29 de fevereiro, virada de fuso, horário de verão histórico.
- Textos longos que estouram o layout e curtos demais que quebram truncamento.
Camada 3 — volume
Registros gerados em massa por script, com a distribuição aproximada da produção. Não precisa ser exato: precisa ter cauda. Uma base em que todo cliente tem exatamente três pedidos não revela o problema de performance que aparece no cliente com quatro mil.
function pedidosPorCliente() {
// A maioria dos clientes tem poucos pedidos; uma minoria tem muitos.
// Uma distribuição exponencial aproxima isso melhor que um sorteio uniforme.
const sorteio = Math.random();
if (sorteio < 0.6) return 1;
if (sorteio < 0.85) return Math.ceil(Math.random() * 5);
if (sorteio < 0.98) return Math.ceil(Math.random() * 50);
return Math.ceil(Math.random() * 4000);
}
function gerarClientes(quantidade) {
return Array.from({ length: quantidade }, (_, indice) => ({
id: indice + 1,
nome: nomeSintetico(),
documento: cpfSintetico(),
pedidos: pedidosPorCliente()
}));
}Documentos brasileiros na massa sintética
CPF, CNPJ, CNH e placa exigem cuidado extra porque têm dígito verificador. Um documento aleatório não passa na validação da própria aplicação, e o teste falha por motivo errado. É preciso gerar números que fechem no algoritmo — sem que correspondam a inscrições reais.
É exatamente o que os geradores do Codigio Labs fazem: montam a base aleatoriamente e calculam os verificadores pelas mesmas fórmulas que sua aplicação usa para validar. O resultado passa na checagem sintática e não pertence a ninguém. Tudo acontece no navegador, então nem o número gerado nem o que você digita chega a um servidor.
Como sair da cópia de produção sem parar o time
Cortar o dump de uma vez costuma falhar porque o time perde a capacidade de investigar. A transição funciona melhor por subtração gradual.
- 1Comece pelos ambientes novos: nenhuma feature branch nova recebe dump. A massa sintética nasce junto com o ambiente.
- 2Migre os testes automatizados primeiro. Eles são os que mais sofrem com dados instáveis e os que mais ganham com massa determinística.
- 3Toda vez que um bug só reproduzir com dados reais, extraia o caso estrutural e adicione à camada 2. A massa melhora a cada incidente.
- 4Reduza a retenção do dump antes de eliminá-lo: de indefinido para trinta dias, depois para sete.
- 5Encerre a cópia quando a massa cobrir os fluxos críticos, e registre a decisão — ela é um argumento útil em auditoria e em due diligence de cliente.
Resumo
- Copiar produção para teste amplia a exposição e transfere obrigações para um ambiente que não foi feito para cumpri-las.
- Mascaramento reduz risco mas mantém o dado no escopo; geração sintética o tira do escopo.
- O que o teste precisa é formato, distribuição, volume e relacionamento — não identidade.
- Documentos brasileiros exigem geração com dígito verificador correto para não falhar na própria validação da aplicação.
- Marque explicitamente os registros sintéticos e fixe a semente do gerador.