Diretriz: Dados de Teste
Essa diretriz é uma introdução ao design dos conjuntos de Dados de Teste.
Relacionamentos
Elementos Relacionados
Descrição Principal

Explicação

Na tarefa de design de teste, dois artefatos significativos foram identificados e descritos: Scripts de Teste e Casos de Teste. Sem os Dados de Teste, não é possível implementar e executar esses dois artefatos. Eles são meramente descrições de condições, cenários e caminhos sem valores concretos para identificá-los de forma sucinta. Os Dados de Teste, ainda que não sejam propriamente um artefato, têm um grande impacto no sucesso (ou na falha) do teste. Não é possível implementar nem executar os testes sem os Dados de Teste, visto que são necessários nas seguintes situações:

  • entrada para criar uma condição
  • saída para avaliar um requisito
  • suporte (uma pré-condição para o teste)

Portanto, a identificação dos valores é um esforço importante que é feito quando Casos de Teste são identificados (consulte Produto de Trabalho: Caso de Teste e Diretriz: Caso de Teste).

Há quatro atributos dos Dados de Teste que devem ser considerados durante a identificação dos Dados de Teste reais:

  • profundidade - o volume ou a quantidade de dados nos Dados de Teste
  • amplitude - o grau de variação nos Dados de Teste
  • escopo - a relevância dos Dados de Teste para o objetivo do teste
  • arquitetura - a estrutura física dos Dados de Teste

Cada uma dessas características é abordada com mais detalhes nas seções abaixo:

Profundidade

A profundidade representa o volume ou a quantidade de dados usados no teste. A profundidade é uma consideração importante, pois um volume muito pequeno de dados talvez não reflita as condições reais, ao passo que pode ser difícil gerenciar e manter um volume excessivo de dados. O ideal é iniciar o teste com um pequeno conjunto de dados que suporte os Casos de Teste críticos (geralmente os Casos de Teste positivos). À medida que se adquire confiança no decorrer do teste, deve-se aumentar os Dados de Teste até que a profundidade dos dados seja representativa do ambiente implementado (ou o que for apropriado e viável).

Amplitude

A amplitude se refere ao grau de variação dos valores dos Dados de Teste. É possível aumentar a profundidade dos Dados de Teste com a simples criação de mais registros. Ainda que normalmente essa seja uma boa solução, ela não considera as variações efetivas que se espera em dados reais. Sem essas variações nos Dados de Teste, talvez não consigamos identificar defeitos (afinal, nem todos os saques feitos em um Caixa Eletrônico são de R$50,00). Portanto, os valores dos Dados de Teste devem refletir os valores dos dados encontrados no ambiente implementado, como saques de R$10,00 ou R$120,00. Além disso, os Dados de Teste devem refletir informações reais como, por exemplo:

  • Nomes que incluam cargos, valores numéricos, pontuação e sufixos:
    • Dr. James Bandlin, Srta. Susan Smith e Rev. Joseph P. Mayers
    • James Johnson III, Steven Wilshire 3rd e Charles James Ellsworth, Esq.
    • Ellen Jones-Smythe, Brian P. Tellstor
  • Endereços com várias linhas, como:
    • 6500 Broadway Street
      Suite 175
    • 1550 Broadway
      Floor 17
      Mailstop 75A
  • Códigos de Cidade (e País) e Números de Telefone reais e correspondentes
    • Lexington, MA, EUA + 01 781 676 2400
    • Kista, Suécia +46 8 56 62 82 00
    • Paris, França +33 1 30 12 09 50

Os valores dos Dados de Teste podem ser uma representação física ou estatística dos dados reais para obter uma amplitude suficiente. Ambos os métodos são válidos e recomendados.

Para criar Dados de Teste com base em uma representação física dos dados implementados, identifique os valores (ou faixas de valores) permitidos para cada elemento de dados no banco de dados implementado e verifique se, para cada elemento de dados, pelo menos um registro dos Dados de Teste contém cada valor permitido.

Por exemplo:

  Número da Conta (intervalo) Número da Senha
(inteiro)
Saldo da Conta
(decimal)
Tipo de Conta
(cadeia)
(S) 0812 0000 0000 a
0812 9999 9999

© 0829 0000 0000 para
0829 9999 9999

(X) 0799 0000 0000 a
0799 9999 9999

0000 - 9999 -999.999,99 a 999.999,99 S, C, X
registro 1 0812 0837 0293 8493 -3.123,84 S
registro 2 0812 6493 8355 3558 8.438,53 S
registro 3 0829 7483 0462 0352 673,00 C
registro 4 0799 4896 1893 4896 493.498,49 X

A matriz acima contém o número mínimo de registros que representariam fisicamente os valores de dados aceitáveis. Para o Número da Conta, há um registro para cada uma das três faixas, todos os números PIN estão dentro da faixa especificada, há diversos Saldos de Conta - inclusive um negativo, e há registros para cada um dos diferentes Tipos de Conta. A matriz acima consiste nos dados mínimos, e o melhor seria manter os valores de dados nos limites de cada intervalo, bem como dentro do intervalo (consulte Diretriz: Caso de Teste).

A vantagem da representação física é que os Dados de Teste têm tamanho limitado, podem ser gerenciados, concentram-se nos valores aceitáveis e são direcionados para esses valores aceitáveis. A desvantagem, entretanto, é que os dados reais não são totalmente aleatórios. Os dados reais tendem a possuir perfis estatísticos que podem afetar o desempenho, o que na utilização da representação física não seria observado.

A representação estatística dos Dados de Teste são Dados de Teste que refletem a amostragem estatística (das mesmas porcentagens) dos dados de produção. Por exemplo, usando os mesmos elementos de dados acima, se analisássemos o banco de dados de produção e descobríssemos o seguinte:

  • Número total de registros: 294.031
  • Número total de tipo de conta S: 141.135 (48 % do total)
  • Número total de tipo de conta C: 144.075 (49 %)
  • Número total de tipo de conta X: 8.821 (3 %)
  • A distribuição dos números de conta e dos números PIN é uniforme

nossos Dados de Teste, baseados na amostragem estatística, teriam 294 registros (em comparação com os quatro observados acima):

  Dados de Teste (em 0,1% da produção)
Número de Registros Porcentagem
Número Total de registros 294 100
Números de contas
(S) 0812 0000 0000 a
0812 9999 9999
141 48
Números de contas
© 0829 0000 0000 para
0829 9999 9999
144 49
Números de contas
(X) 0799 0000 0000 a
0799 9999 9999
9 3

A matriz acima considera somente os tipos de conta. Ao desenvolver os melhores Dados de Teste com base na representação estatística, você incluiria os elementos de dados significativos. No exemplo acima, isso incluiria refletir os saldos reais das contas.

Uma desvantagem da representação estatística é que ela pode não refletir a faixa total de valores aceitáveis.

Geralmente, os dois métodos de identificação dos Dados de Teste são usados para garantir que esses dados considerem todos os valores e questões de desempenho/população.

A amplitude dos Dados de Teste é relevante para os Dados de Teste usados como entrada, assim como para aqueles que dão suporte aos testes (nos dados preexistentes).

Escopo

O escopo é a relevância dos Dados de Teste para o objetivo do teste, e está relacionado à profundidade e à amplitude. Um grande volume de dados não significa que eles sejam apropriados. Da mesma forma que com a amplitude dos Dados de Teste, devemos garantir a relevância desses dados para o objetivo do teste, ou seja, é necessário haver Dados de Teste para suportar o objetivo do teste específico.

Por exemplo, na matriz abaixo, os quatro primeiros registros de Dados de Teste consideram os valores aceitáveis para cada elemento de dados. No entanto, não há registros que avaliem saldos negativos dos tipos de conta C e T. Portanto, ainda que esses Dados de Teste incluam corretamente saldos negativos (amplitude válida), o escopo dos dados abaixo seria insuficiente para suportar qualquer teste usando saldos negativos para cada tipo de conta. A expansão desses dados para incluir novos registros, contendo saldos negativos para cada tipo de conta, seria necessária para suprir essa omissão.

Número da Conta (intervalo) Número da Senha
(inteiro)
Saldo da Conta
(decimal)
Tipo de Conta
(cadeia)
(S) 0812 0000 0000 a
0812 9999 9999

© 0829 0000 0000 para
0829 9999 9999

(X) 0799 0000 0000 a
0799 9999 9999

0000 - 9999 -999.999,99 a 999.999,99 S, C, X
registro 1 0812 0837 0293 8493 -3.123,84 S
registro 2 0812 6493 8355 3558 8.438,53 S
registro 3 0829 7483 0462 0352 673,00 C
registro 4 0799 4896 1893 4896 493.498,49 X
Novo Registro 1 0829 3491 4927 0352 -995.498,34 C
Novo Registro 2 0799 6578 9436 4896 -64.913,87 X

O escopo dos Dados de Teste é relevante para os Dados de Teste usados como entrada, assim como para aqueles que dão suporte aos testes (nos dados preexistentes).

Arquitetura

A estrutura física dos Dados de Teste é relevante somente para os dados preexistentes usados pelo objetivo do teste para dar suporte ao teste, como a tabela de regras ou o banco de dados de um aplicativo.

O teste não é executado nenhuma vez e é encerrado. O teste é repetido dentro de iterações e entre elas. Para executar o teste de forma consistente, confiável e eficaz, os Dados de Teste devem ser retornados ao seu estado inicial antes da execução do teste. Isso deve ocorrer especialmente quando o teste for automatizado.

Portanto, para garantir a integridade, confiança e eficácia do teste, é fundamental que os Dados de Teste não incluam influências externas, e seu estado deve ser conhecido no início, durante e no fim da execução do teste. Há duas questões que devem ser consideradas para alcançar esse objetivo do teste:

Cada uma dessas questões afetará o modo como você gerencia o banco de dados de testes, cria o modelo de teste e interage com outros papéis.

Instabilidade / Segregação

Os Dados de Teste podem se tornar instáveis pelos seguintes motivos:

  • influências externas não relacionadas ao teste modificam os dados
  • os testadores não têm conhecimento do tipo de dados usado pelos outros

Para manter a confiança e a integridade do teste, os Dados de Teste devem ter um controle rígido e devem ser isolados dessas influências. As estratégias para garantir o isolamento dos Dados de Teste contêm:

  • ambientes de teste separados - os testadores têm seus próprios ambientes de teste, fisicamente separados de outros. Os testadores não compartilham nada, ou seja, eles têm os próprios objetivos de teste e dados. Por exemplo cada testador pode ter seu próprio PC.
  • instâncias básicas separadas dos Dados de Teste - os testadores têm as suas próprias instâncias de dados, isoladas de todas as outras influências. O ambiente físico, talvez até mesmo o destino de teste, é compartilhado, mas se cada testador tiver sua própria instância dos dados, haverá pouco risco de contaminação dos Dados de Teste.
  • Particionamento de Dados de Teste / banco de dados - todos os testadores compartilham o banco de dados e sabem quais dados os outros estão utilizando (e evitam utilizar os dados do outro testador). Por exemplo, um testador pode usar os registros 0 a 99, um segundo pode usar os registros 100 a199, um terceiro usa clientes com sobrenomes de Aa a Kz, enquanto um quarto usa pacientes com nomes de La a Zz.

Estado Inicial

A outra questão relativa à arquitetura dos Dados de Teste que deve ser considerada se refere ao estado inicial dos Dados de Teste no início da execução do teste. Isso deve ocorrer principalmente quando o teste for automatizado. Da mesma forma que o objetivo do teste deve iniciar a execução do teste em um estado desejado conhecido, os Dados de Teste também devem. Isso contribui para a capacidade de repetição e para a segurança de que cada execução de teste será idêntica à anterior.

Quatro estratégias são freqüentemente usadas para abordar essa questão:

  • atualização dos dados
  • reinicialização dos dados
  • redefinição dos dados
  • rolagem progressiva dos dados

Cada estratégia é descrita com mais detalhes a seguir.

O método usado dependerá de vários fatores, incluindo as características físicas do banco de dados, a competência técnica dos testadores, a disponibilidade de papéis externos (que não sejam papéis de teste) e o objetivo do teste.

Atualização de Dados

A Atualização dos Dados é o método mais conveniente de retornar os Dados de Teste ao seu estado inicial. Esse método envolve a criação de uma cópia do banco de dados em seu estado inicial e seu armazenamento. Depois (ou antes) da conclusão da execução do teste, a cópia arquivada do banco de dados de testes é transferida para o ambiente de teste para uso. Isso garante que o estado inicial dos Dados de Teste será o mesmo no início de cada execução de teste.

Uma vantagem desse método é que os dados podem ser arquivados em estados iniciais distintos. Por exemplo, é possível arquivar os Dados de Teste no estado do fim do dia, do fim da semana, do fim do mês, etc. Com isso, o testador terá um método de atualizar rapidamente os Dados de Teste para um determinado estado, de forma a suportar um teste, como o teste dos casos de uso do fim do mês.

Reinicialização de Dados

Se não for possível atualizar os dados, o método mais aconselhável será restaurá-los ao estado inicial através de alguns meios programáticos. A reinicialização dos dados depende de ferramentas e casos de uso especiais para retornar os Dados de Teste a seus valores iniciais.

É necessário ter cuidado para garantir que todos os dados, relacionamentos e valores-chave retornem a seu valor inicial apropriado, para assegurar a integridade dos dados.

Uma vantagem desse método é que ele pode suportar o teste dos valores inválidos contidos no banco de dados. Sob condições normais, valores de dados inválidos seriam interceptados e não seria permitida a entrada de dados (por exemplo, por uma regra de validação no cliente). No entanto, outro agente pode afetar os dados (por exemplo, uma atualização eletrônica de outro sistema). O teste precisa verificar se os dados inválidos foram identificados e tratados de forma adequada, independentemente de como ocorreram.

Reconfiguração de Dados

Um método simples de retornar os dados ao estado inicial consiste em reverter as mudanças feitas nos dados durante o teste. Esse método depende do uso do objetivo do teste para inserir entradas de reversão, ou seja, adicionar registros/valores que foram excluídos, cancelar a modificação de registros/valores modificados e excluir dados adicionados.

No entanto, há riscos associados a esse método, que incluem:

  • todas as ações devem ser revertidas, e não apenas algumas
  • dependência de casos de uso contidos no objetivo do teste, que devem ser testados para verificar se estão funcionando corretamente antes de serem usados para a redefinição dos dados.
  • pontos, índices e chaves de banco de dados não podem ser redefinidos

Se esse for o único método disponível no ambiente de teste, evite o uso de ponteiros, índices e chaves de banco de dados como os objetivos principais para verificação. Ou seja, use, por exemplo, o campo Nome do Paciente para determinar se o paciente foi adicionado ao banco de dados, em vez de usar um ID do Paciente gerado pelo sistema.

Redirecionamento de Dados

A rolagem progressiva dos dados é o método menos aconselhável de abordar o estado inicial dos Dados de Teste. Na verdade, isso não considera realmente a questão. Em vez disso, o estado dos dados ao término da execução do teste se torna o novo estado inicial dos Dados de Teste. Geralmente, isso requer modificar os Dados de Teste usados para entrada e/ou os Casos de Teste e Dados de Teste usados na avaliação dos resultados.

Em algumas situações isso será necessário como, por exemplo, no fim do mês. Se não houver archive dos dados, antes do fim do mês, os Dados de Teste e os Scripts de Teste referentes a cada dia e a cada semana deverão ser executados a fim de fazer o "redirecionamento" dos dados para o estado necessário para o teste de processamento do fim do mês.

Os riscos associados a esse método são:

  • não é possível redefinir pontos, índices e chaves de banco de dados (nem usá-los para verificação)
  • os dados mudam constantemente
  • é necessário um esforço adicional para garantir a verificação dos resultados