Diretriz: Idéias de Teste
Esta diretriz identifica falhas comuns e enganos feitos durante o desenvolvimento de software. Mostra como criar idéias de teste a partir de chamadas de métodos, condições expressões boleanas e relacionais.
Relacionamentos
Elementos Relacionados
Descrição Principal

Introdução

Idéias de teste são usadas para gerar testes. Idéias de teste podem vir de muitas fontes diferentes. Em geral, elas podem ser extraídas de diferentes modos dependendo do domínio do desenvolvimento apresentado, o tipo de aplicação que se está sendo desenvolvida, e a experiência dos testers. Apesar das idéias de teste serem extraída de diferentes modos, existem algumas categorias que ajudam a criá-las. Está diretriz descreverá algumas destas categorias assim como alguns métodos gerais para criação de boas idéias de teste.

Idéias de Teste e Funçõess

A seguir, algumas idéias de teste para calcular a raiz quadrada:

  1. Um número pouco menor que zero como entradat
  2. Zero como entradat
  3. Números que tem raiz quadrada perfeita, como 4 ou 16 (o resultado é exatamente 2 ou 4?))
  4. Imprimir em uma empresora LaserJet IIIp
  5. Testar com a base de dados cheia

As três primeiras idéias validam entradas enquanto as duas ultimas visam problemas de ambiente. Apesar de estas instruções serem bem incompletas elas asseguram que alguma idéia não seja esquecida.

Idéias de Teste e Fronteiras

Idéias de teste são geralmente baseadas em modelos de falha. Considerar fronteiras. É seguro supor que a função para calculo da raiz quadrada pode ser implementada em algo como isto:
double sqrt(double x) {
    if (x < 0)
      // sindicar erro
      ...
É também plausível que o sinal < venha se ser incorretamente digitado como <=. Este tipo de engano é cometido com freqüência, então é importante verificar. A falha não pode ser detectada com X igual a 2, porque tanto a expressão incorreta (x<=0) como a expressão correta (x<0) irão tomar o mesmo ramo da instrução if. Do mesmo modo, passando para X o valor -5 não é possível identificar a falha. O único odo de encontrar o engano e passando para X o valor 0, o que justifica a segunda idéia de teste.

TIdéias de Teste e Métodos

Vamos imaginar que você está projetando testes para um método que busca uma string em uma coleção seqüencial. O método pode respeitar ou ignorar a caixa alta/baixa na busca, e retorna o índice da primeira ocorrência ou -1 se nenhum ocorrência for encontrada.
int Collection.find(String string, Boolean ignoreCase);

Aqui estão algumas idéias de teste para este método, cada uma delas poderiam ser implementadas como um teste. 

  1. Ocorrência encontrada na primeira posição
  2. Ocorrência encontrada na ultima posição
  3. Nenhuma ocorrência encontrada
  4. Duas ou mais ocorrências encontradas na coleção
  5. Ignorando caixa alta/baixa; ocorrência encontrada, mas não seria encontrada se a caixa alta/baixa fosse respeitada
  6. Respeitando caixa alta/baixa; um ocorrência exata é encontrada
  7. Respeitando caixa alta/baixa; uma string que seria encontrada se a caixa alta/baixa fosse ignora é pulada

No entanto, diferentes idéias de teste podem ser combinadas em um mesmo teste; por exemplo, o seguinte teste satisfaz as idéias de testes 2, 6, e 7:

Configuração: Coleção inicializada com ["dawn", "Dawn"]
Invocação: Collection.find("Dawn", false)
Resultado esperado: Valor retornado é 1 (seria 0 se a string "dawn"não fosse ignorada)

Idéia de Teste Simplicidade e Complexidade

Criar idéias de teste não especificas as fazem mais fáceis de combinar.
Criar vários testes pequenos que satisfazem um numero pequeno de idéias de teste simplifica:

  • "Copiar e Colar" o teste para se adequar a outra idéia de teste
  • Depurar - se você tem um teste que cobre 2 idéias de teste então você sabe que a falha é em uma ou outra área, mais se o teste cobre 7 idéias de teste você vai gastar mais tempo depurando a não conformidade. 

Se a lista de idéias de teste foi concluída, contendo idéias de teste para cada falha no programa, não vai fazer diferença como você escreveu os testes. Mas sempre falta alguma idéia de teste que poderia encontrar erros de programação. Testes pequenos e mais complexos aumentam a chance do teste satisfazer alguma idéia de teste que você não sabia que iria precisar.

Testes Complexos

Algumas vezes quando você esta criando teste mais complexos, novas idéias de teste vêem a mente. No entanto, existem algumas razões para não se criar testes complexos.

  • Testes complexos são mais difíceis de depurar porque geralmente cobrem múltiplas idéias de testes
  • Testes complexos são mais difíceis de entender e manter. O objetivo do teste é menos obvio.
  • Testes complexos são mais difíceis de criar.

Construir um teste que contenta cinco déias de teste geralmente tomas mais tempo que construir cinco testes que contenta uma. Além disto, é mais fácil de cometer enganos - imaginar que você está contentando todas as cinco enquanto que está contentando somente quatro.
Na prática, encontre um balanceamento razoável entre complexidade e simplicidade.