← Mundo bit ByteQualidade e Teste de Software
Professor Ronaldo Lavestein
Combinar condições
Etapa 6

Regras mais complicadas

Na etapa anterior, valores-limite ajudaram bastante quando a regra dependia de um número. Agora o cupom MBB10 traz outro tipo de desafio: o resultado depende de várias condições ao mesmo tempo.

O cupom parece simples até começarmos a perguntar

A regra combinada da Cantina Horizonte é esta:

O MBB10 concede 10% de desconto quando o subtotal for maior ou igual a R$ 30,00, o cupom estiver dentro da validade e ainda não tiver sido utilizado.

Testar R$ 29,99, R$ 30,00 e R$ 30,01 continua sendo útil para o limite do valor.

Mas isso não responde sozinho o que acontece quando o cupom está vencido ou já foi usado.

Uma condição sozinha não conta a história inteira

Podemos separar a regra em três perguntas:

Subtotal suficiente?

O valor é pelo menos R$ 30,00?

Cupom válido?

A data atual ainda está dentro da validade?

Ainda não utilizado?

O cupom permanece disponível para uso?

O desconto só deve acontecer quando as três respostas forem favoráveis.

Se começarmos a testar de cabeça, é fácil esquecer uma combinação

Imagine alguém anotando apenas:

“Testar um pedido de R$ 50,00 com o cupom MBB10.”

Esse caso verifica uma situação possível, mas não deixa claro se o cupom estava vencido ou se já tinha sido usado.

Quando várias condições influenciam uma mesma decisão, precisamos de uma forma melhor de organizar as combinações.

A tabela nasce da necessidade

Vamos colocar as condições nas linhas e diferentes combinações nas colunas. O resultado fica assim:

Condição / açãoRegra 1Regra 2Regra 3Regra 4
Subtotal ≥ R$ 30,00?SimSimSimNão
Cupom dentro da validade?SimNãoSimSim
Cupom ainda não utilizado?SimSimNãoSim
Aplicar 10%?SimNãoNãoNão

Agora fica muito mais difícil esquecer que um cupom vencido ou já utilizado precisa produzir outro resultado.

Tabela de decisão

É uma técnica usada para organizar condições e ações quando o resultado depende de combinações de regras.

Uma tabela completa poderia mostrar todas as combinações possíveis. Para aprender o raciocínio, começamos pelas combinações que realmente ajudam a separar os comportamentos importantes.

O teste continua precisando de dados concretos

A tabela organiza a lógica, mas ainda precisamos transformar cada coluna em uma situação executável.

CasoSubtotalValidadeUso anteriorEsperado
CT-CUP-01R$ 50,00VálidoNão usadoAplicar 10%
CT-CUP-02R$ 50,00VencidoNão usadoNão aplicar
CT-CUP-03R$ 50,00VálidoJá usadoNão aplicar
CT-CUP-04R$ 20,00VálidoNão usadoNão aplicar

CT significa Caso de Teste. Estamos começando a identificar os casos porque eles já são numerosos o bastante para precisarem de organização.

Agora aparece um segundo tipo de regra

Nem todo comportamento depende apenas de valores e condições atuais. Alguns dependem também de onde o processo está neste momento.

Veja o caminho normal de um pedido:

Novo→Confirmado→Em preparação→Pronto→Entregue

Cada posição desse caminho representa um estado do pedido.

Estado e transição

Se o pedido está em Novo e passa para Confirmado, houve uma mudança de estado.

Transição de estado

É a passagem de um estado para outro. Quando as regras dizem quais mudanças são permitidas, podemos testar tanto transições válidas quanto inválidas.

Por exemplo, estas mudanças fazem sentido:

Estado atualPróximo estadoEsperado
NovoConfirmadoPermitir
ConfirmadoEm preparaçãoPermitir
Em preparaçãoProntoPermitir
ProntoEntreguePermitir

As mudanças inválidas também são importantes

Agora experimente pensar nas situações abaixo:

Novo → Entregue

O pedido pulou todas as etapas intermediárias. Isso deveria ser permitido?

Entregue → Em preparação

O pedido voltou para um estado anterior depois de ter sido entregue.

Esses casos não são encontrados apenas escolhendo números próximos a um limite. O que importa é a sequência de estados.

Teste de transição de estados

É uma técnica útil quando o comportamento permitido depende do estado atual e das mudanças possíveis a partir dele.

Uma técnica não substitui a outra

Até aqui já vimos problemas diferentes pedindo técnicas diferentes:

ProblemaTécnica que ajuda
Faixas de valores com comportamento semelhanteParticionamento de equivalência
Pontos em que o comportamento mudaAnálise de valores-limite
Várias condições combinadasTabela de decisão
Comportamento depende do estado atualTransição de estados

Na prática, as técnicas também podem ser combinadas. O cupom, por exemplo, tem uma condição de valor que merece análise de limite e outras condições que ficam mais claras numa tabela de decisão.

Prática · escolha a técnica pelo problema

  1. A quantidade aceita vai de 1 a 10. Qual técnica ajuda a observar as bordas?
  2. O cupom depende de valor mínimo, validade e uso anterior. Qual técnica ajuda a organizar as combinações?
  3. Um pedido não pode voltar de Entregue para Em preparação. Qual técnica ajuda a representar isso?
  4. Uma regra diz que notas de 0 a 100 são válidas e valores fora da faixa são inválidos. Que duas técnicas podem se complementar?

O objetivo não é decorar nomes. É reconhecer que tipo de problema estamos tentando organizar.

Mas ainda falta uma pergunta

Até aqui falamos muito sobre como escolher bons casos. Porém uma mesma regra pode ser testada em lugares diferentes.

A quantidade 0 pode ser verificada numa função isolada, na comunicação entre partes ou no sistema completo visto pelo usuário.

Quando dizemos “testar a quantidade”, o que exatamente estamos testando?

A seguir: níveis e tipos de teste

Vamos organizar os níveis de teste e separar duas ideias que costumam se misturar: onde estamos testando e que característica estamos avaliando.

Antes de seguir

Você deve conseguir explicar:

  • por que valores-limite não organizam sozinhos uma regra com várias condições;
  • para que serve uma tabela de decisão;
  • o que significa transição de estado;
  • por que técnicas diferentes podem ser usadas no mesmo sistema.