Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Apresentar uma discussão e exemplos a respeito da necessidade de geração de dados simulados.
Para que serve:
O conteúdo apresentado neste artigo serve como um guia para auxiliar a tarefa de geração de dados simulados visando preencher um banco de dados.
Em que situação o tema é útil:
A análise das situações e alternativas apresentadas neste artigo é útil para os DBAs e desenvolvedores que lidam com ambientes diversos e a necessidade de testes para validação e homologação.
A utilização de qualquer banco de dados possui um pré-requisito básico: dados. Estes dados são armazenados de acordo com a especificação de um modelo de dados que é elaborado a partir da modelagem proveniente da necessidade de armazenamento. Por exemplo: um sistema que controla a entrada/saída de funcionários em uma empresa substituindo o antigo cartão de ponto vai possuir dados sobre pessoas, horários, datas, autorização, etc.
A maioria dos modelos de dados é preenchida através da utilização da interface de um sistema que permite a captura manual realizada por digitadores/usuários ou automática, realizada por sensores ou equipamentos especializados. Mas e quando é necessário preencher o banco de dados com dados simulados? Esta necessidade é muito comum durante validações, homologações, testes de desempenho, exportação da base de dados e outras situações. E, infelizmente, os principais bancos de dados disponíveis não apresentam recursos e ferramentas adequadas para a geração de dados simulados ou de testes suficientemente adequadas aos modelos de dados reais.
Baseado neste cenário, este artigo apresentará algumas alternativas de código livre para permitir a geração de dados simulados, também conhecidos como massa de testes. O artigo também mostrará como preencher dados em tabelas de três modelos de dados parciais que representam as necessidades de dados simulados. Gerar dados simulados é crucial para qualquer profissional que trabalha com desenvolvimento e administração de banco de dados, uma vez que a geração de dados está intimamente ligada com o processo de testes e homologação.
Planejando a geração de dados
Antes de começar a discutir como gerar dados simulados é preciso levar em consideração alguns pontos importantes sobre esta tarefa. Estes pontos incluem a necessidade de testes, a qualidade e quantidade dos dados, o ambiente, as implicações e os aspectos técnicos envolvidos neste tipo de tarefa.
A geração de dados ocorre tradicionalmente durante a fase de testes do banco de dados ou de um sistema recém-desenvolvido. Atualmente a área de testes está muito avançada se comparada ao que tínhamos alguns anos atrás: hoje contamos com metodologias ágeis, desenvolvimento orientado a testes, integração contínua, ferramentas especializadas para gestão e geração automática de testes, diferentes tipos de testes (testes unitários, caixa preta, caixa branca, etc.) e outras práticas que indicam como empregar diferentes tipos de dados visando verificação, validação, homologação e adequação a requisitos.
Uma parte importante da tarefa de realização de testes que envolve o banco de dados é a geração dos dados. A importância está relacionada com a representatividade dos dados quando se faz testes, ou seja, o quão fidedigno os dados são em relação ao ambiente real. Esta necessidade de representar a realidade é importante, pois o que está sendo testado deve ser avaliado com a máxima precisão em relação ao que realmente pode acontecer em um ambiente de produção, e não aos dados que o testador inventa na hora simplesmente para concluir o teste rapidamente.
Para exemplificar a falta de comprometimento com a geração de dados realísticos destaco que muitas vezes já encontrei desenvolvedores e testadores alheios à qualidade e quantidade dos dados, chegando até a fornecer valores completamente fora de contexto durante a digitação. Algo como colocar nomes de clientes que não representam a realidade, endereços com tipos de logradouros absurdos, datas inválidas, códigos fora de formato, valores fora das faixas pré-estabelecidas, preços absurdos e outras violações da representatividade da realidade. Por exemplo: uma vez encontrei em um cadastro de clientes o endereço “via láctea, segunda estrela à direita” ao invés de algo como “Rua X, nro 25 fundos”. Também é clássico encontrar situações onde foi colocado simplesmente um ponto (.) ou um espaço em branco (“ ”) para campos texto obrigatórios. Este tipo de atitude perante o preenchimento dos dados de teste deixa claro que não há a menor preocupação com o fato dos dados não representarem a realidade. Com certeza esta falta de representatividade dos dados é algo que pode contaminar o teste e fazer com que ele seja concluído com sucesso ao passo que com dados reais é possível que uma falha ocorra. O inverso também pode ocorrer, ou seja, testes com dados sem representatividade podem falhar ao passo que o mesmo teste com dados reais seria concluído com sucesso.
Se por um lado temos a falta de representatividade de dados em algumas situações, por outro lado existe a necessidade de utilização de modelos estatísticos específicos para o preenchimento da base de dados. Por exemplo, um banco de dados que armazena os horários de chegada, atendimento e tempo de espera em filas de clientes a serem atendidos em um caixa ou guichê. Dependendo do rigor do teste pode ser preciso gerar dados que sigam os parâmetros de uma distribuição estatística de Poisson ou Normal (veja as ...