Qualidade de dados em testes de regressão de banco de dados relacional

9

Eu tenho trabalhado em um aplicativo da web de gerenciamento de coleções de museus de código aberto que deve ser usado para acompanhar os artefatos acessados, doados, emprestados ou adquiridos de outro museu.

Isso envolveu projetar e criar um banco de dados bastante grande (em relação às minhas experiências anteriores), que armazena todos os tipos de informações variadas (informações de artefatos, informações de localização alteradas, informações de contato pessoais, fotos, etc.), que precisam ser flexíveis e facilmente extensíveis .

Estou terminando meu curso universitário e não sou profissional no que diz respeito ao design de banco de dados e, por isso, estou realmente querendo criar um conjunto completo de testes para garantir que o que tenho "funcione".

Eu li sobre o teste de banco de dados e me deparei com alguns artigos que mencionam o Teste de regressão em relação aos bancos de dados, mas não entendo completamente o que isso tudo envolve. Ao ler este artigo no Dr.Dobbs , entendo que um tipo de teste que precisarei fazer é validar se a lógica no banco de dados está correta. Portanto, eu criaria testes que inserissem certos dados no banco de dados e, em seguida, os acompanharia com uma consulta para garantir que eu recuperasse os dados corretos do banco de dados (garantindo que todos os gatilhos ou visualizações apropriados estivessem funcionando).

A confusão vem com a menção de testes para "Qualidade de dados". No artigo acima, o autor menciona que você deseja validar o seguinte com testes:

  • Regras de valor do domínio da coluna
  • Regras de valor padrão da coluna
  • Regras de existência de valor
  • Regras de valor da linha
  • Regras de tamanho

Que tipos de testes isso envolveria e como eles seriam implementados? Além disso, é a primeira vez que escrevo um conjunto de testes para um banco de dados. Existem boas diretrizes sobre como / por onde começar ou quaisquer processos que eu possa seguir para orientar o desenvolvimento do teste?

Kristen D.
fonte

Respostas:

3

Uma resposta completa para essa pergunta seria muito longa. Vou tentar mencionar os pontos principais.

Para separar preocupações, você pode estar olhando para testes para:

A - Valide o design do banco de dados.

B - Valide se os programas estão interagindo corretamente com o banco de dados.

A validação do design do banco de dados deve ser realizada pelas pessoas que projetaram o banco de dados. Os desenvolvedores (durante o teste de unidade) devem se preocupar mais com a parte (B). A principal diferença que vejo entre os dois tipos de testes são as ferramentas usadas. Para (A), você usaria um ambiente independente do código do projeto, enquanto que em (B), é claro, você usaria o código do projeto. No texto a seguir, misturarei os dois.

Para responder às suas perguntas específicas:

Regras de valor do domínio da coluna

Cada coluna tem um tipo de dados associado. Cada coluna deve ser validada com relação às regras de negócios para provar que representa o tipo de dados correto. Podem surgir problemas se o tipo de dados da coluna não for compatível com os requisitos de negócios ou se o código usar um tipo de dados diferente de como é definido no banco de dados.

Por exemplo:

  • Se a coluna estiver definida como int pequeno, você não poderá armazenar texto nela. Este é um teste importante, especialmente quando as colunas são opcionais, pois podem passar despercebidas até que alguém realmente insira alguns dados.

  • Você poderia armazenar um valor negativo em uma coluna onde a empresa exige que isso aconteça?

Regras de valor padrão da coluna

Algumas colunas estão associadas a uma especificação de valor padrão no DDL (Data Def. Language), onde se durante a inserção a inserção não fornecer um valor, o banco de dados assumirá o valor padrão. Isso pode ser testado não passando o valor e observando o valor do resultado que o banco de dados armazena. Esse teste também pode incluir a verificação de colunas Nullable. Isso raramente requer um teste, pois pode ser verificado a partir do DDL, a menos que um índice exclusivo seja criado na coluna.

Regras de existência de valor

Pelo que entendi, você verifica se os dados inseridos ou atualizados são exibidos conforme o esperado no banco de dados.

Regras de valor da linha

Não sei ao certo o que isso significa exatamente.

Regras de tamanho

Cada coluna tem um tamanho no banco de dados com base em como é definido no DDL. você deseja garantir que qualquer valor que atenda aos requisitos (GUI do formulário inserido ou resultante da saída de um cálculo) seja armazenado corretamente na coluna. Por exemplo, um tipo de dados Inteiro Pequeno não permite armazenar um valor de 5 bilhões. Além disso, um nome definido como VARCHAR2 (30) não acomodará 40 caracteres, portanto, as regras de negócios devem ser muito claras aqui, especialmente quando a coluna é usada para agregar dados. Você quer testar o que acontece nessas situações.

diretrizes sobre como / por onde começar

Uma maneira de fazer isso é criar um plano de teste. Você deseja garantir que está usando a versão correta das especificações (como documentos de requisitos e casos de uso) e do software. Você também precisa coordenar esses testes com os testes realizados por Teste de Unidade (se houver). Você pode encontrar testes duplicados que não precisam ser executados novamente. Você deseja tirar uma cópia do banco de dados antes de testar, para poder repetir um teste específico, se precisar. O DBA pode ajudá-lo com isso. Você também precisa verificar com sua equipe como eles documentam esses testes e verificar o escopo dos testes com eles. Você pode dividir seu banco de dados em partes lógicas e iniciar o teste de cada parte lógica separadamente. O processo de teste pode começar estudando a DDL do banco de dados e verificando se as colunas estão definidas corretamente, conforme exigido pelos negócios. Você deve usar o software do aplicativo e não qualquer outra ferramenta para executar a maioria dos testes. Por exemplo, questione o seguinte:

  • A coluna deveria ser do tipo definido (não faz sentido criar um Nome como Int).

  • O tamanho é compatível com os requisitos comerciais?

  • Todas as colunas nos requisitos de negócios foram encontradas no banco de dados?

  • As colunas nulas são realmente opcionais?

  • etc.

Em seguida, você pode projetar casos de teste para testar o acima. Você pode usar a GUI para fazer a maioria dos testes.

Existem outros testes importantes do banco de dados que você não mencionou. Aqueles lidam com:

1 - Testar se as chaves primárias são realmente únicas do ponto de vista comercial.

2 - Testar se os índices únicos (exceto o PK) são realmente únicos da perspectiva do negócio.

3 - Testar restrições de chave estrangeira funcionam.

4 - Testar o que acontece quando uma linha é excluída e seu efeito em linhas relacionadas.

5 - Outros testes relacionados a construções especiais de bancos de dados como CHEKC, Triggers, se existirem.

6 - Normalização correta da tabela e que as colunas normalizadas mantêm valores corretos.

A descrição acima não é uma lista completa, mas deve começar.

NoChance
fonte
Obrigado pelos detalhes em sua resposta e suas sugestões para o desenvolvimento de testes parecem um bom lugar para começar. Obrigado pela ajuda.
25412 Kristen D.
KristenD. @Songo Agradeço o feedback.
precisa saber é o seguinte
1

Eu acho que você está abordando isso da maneira errada.

Qualquer banco de dados que eu conheço verifica os dados antes de inseri-los nas tabelas - ele os valida de acordo com a definição de cada coluna. Você não pode inserir uma sequência de 80 caracteres em uma coluna SMALLINT (3) - o banco de dados falhará nessa tentativa e informará que você cometeu um erro. Você não precisa testar isso inserindo os dados e recuperando-os.

O que você deseja ter são regras de validação / filtragem de dados antes de serem enviadas ao banco de dados.

  • Garantir que os dados se ajustem aos tipos e intervalos aceitos para cada coluna e filtrar conteúdo indesejado
  • Escapar corretamente para evitar erros (e possíveis injeções de SQL se você tiver uma interface pública)

Essas regras de validação / filtragem devem ser executadas nos dados do seu aplicativo real. Você pode configurar testes para garantir que estejam corretos, alimentando-os com dados corretos e incorretos para garantir que eles sejam aprovados ou reprovados na validação de acordo.

No que diz respeito ao design do banco de dados, você não pode realmente verificá-lo com testes - já que muitos designs funcionam mesmo que não sejam ideais (e a definição de mudanças ideais entre pessoas diferentes). O design adequado do banco de dados vem com experiência e conhecimento, não com testes automatizados.

Eran Galperin
fonte
Vejo de onde você é e pretendo criar e testar filtros que validam dados antes que cheguem ao banco de dados, mas nesta questão minhas principais intenções eram tentar verificar o design do banco de dados (o máximo possível antes de realmente usá-lo) e também verifique se o que realmente está funcionando está como planejado (por exemplo, para garantir que as restrições de chave estrangeira não sejam quebradas como @EmmadKareem mencionado em sua resposta. Obrigado por trazer a validação de dados, pois é uma parte muito integral parte de qualquer aplicativo que usa um banco de dados.
Kristen D.