← Mundo bit ByteQualidade e Teste de Software
Professor Ronaldo Lavestein
Revisar antes de executar
Etapa 4

Antes de executar

Na etapa anterior encontramos uma contradição entre documentos sem abrir a Cantina Horizonte. Isso muda nossa pergunta: será que testar sempre exige executar o software?

O servidor está parado, mas o trabalho não precisa parar

A equipe da Cantina Horizonte está fazendo manutenção no ambiente. Por algumas horas, ninguém consegue abrir o sistema.

Mesmo assim, chegaram para revisão uma especificação de requisitos e alguns trechos de código.

Você pode simplesmente esperar o sistema voltar — ou pode começar a procurar problemas agora.

Primeiro, revise sem executar nada

Abra o material abaixo e leia com calma. Não tente rodar código. Não procure uma ferramenta automática. Apenas observe os textos e compare cada trecho com aquilo que já sabemos da Cantina Horizonte.

Prática · revisão inicial

Abrir os materiais para revisão →

Anote o que chamou sua atenção, por que pode ser um problema e o que precisaria ser esclarecido.

Você acabou de testar sem executar o programa

Se você percebeu que dois documentos trazem valores diferentes para o cupom, encontrou um problema antes da execução.

Se leu o código abaixo e percebeu que ele aceita 0 e valores negativos, também encontrou um problema sem executar a função:

def validar_quantidade(quantidade):
    return quantidade <= 10

A regra conhecida é:

A quantidade deve estar entre 1 e 10, inclusive.

O código verifica apenas o limite superior. Só a leitura já revelou que uma parte da regra ficou de fora.

Esse tipo de trabalho tem um nome

Teste estático

Teste estático é a avaliação de produtos de trabalho sem executar o software que está sendo analisado.

Esses produtos podem ser requisitos, regras de negócio, documentos, diagramas, código-fonte, configurações e outros artefatos do projeto.

A palavra artefato, aqui, significa simplesmente um produto do trabalho da equipe: algo criado durante o projeto e que pode ser revisado.

E quando executamos?

Teste dinâmico

Teste dinâmico acontece quando executamos o software ou uma parte dele e observamos seu comportamento.

Estático

Ler o requisito do cupom e perceber uma contradição.

Revisar o código de quantidade e notar que falta o limite mínimo.

Dinâmico

Abrir a Cantina Horizonte, digitar 0 e observar se o sistema aceita.

Executar uma função e comparar o resultado obtido com o esperado.

Um não substitui o outro. Eles encontram problemas de maneiras diferentes.

Por que procurar cedo?

Imagine que a regra do cupom esteja contraditória desde a documentação.

Se ninguém perceber, o desenvolvedor escolhe uma interpretação, escreve o código, o testador cria casos baseados em outra interpretação e a discussão só aparece depois.

Ao revisar cedo, podemos perguntar antes:

A regra correta é R$ 30,00 ou R$ 40,00?

Resolver a dúvida nesse momento evita que várias partes do projeto avancem sobre uma base diferente.

Revisar não é apenas caçar erro de digitação

Durante uma revisão, vale procurar problemas de vários tipos:

Ambiguidade

“O sistema deve responder rápido.” Quanto é rápido?

Contradição

Um documento diz R$ 30,00 e outro diz R$ 40,00.

Omissão

A regra fala em máximo 10, mas esquece de informar o mínimo.

Inconsistência

O requisito diz uma coisa e o código representa outra.

Também podemos encontrar duplicações desnecessárias, trechos difíceis de entender, informações sem fonte e regras impossíveis de verificar.

Uma revisão pode ser simples

Nem toda revisão precisa de uma reunião formal ou de um documento enorme.

Para um projeto pequeno, uma lista de perguntas já ajuda bastante:

Checklist de revisão

  • Existe alguma frase com mais de uma interpretação possível?
  • Dois trechos dizem coisas diferentes sobre a mesma regra?
  • Falta algum limite, condição ou exceção importante?
  • O requisito pode ser verificado de forma objetiva?
  • O código representa toda a regra conhecida?

Checklist significa uma lista de verificação: perguntas ou itens que ajudam a lembrar o que precisa ser observado.

Revisão humana e análise automática não enxergam as mesmas coisas

Uma pessoa consegue perceber que “R$ 30,00” e “R$ 40,00” representam uma contradição de negócio porque entende o contexto.

Uma ferramenta de análise estática pode examinar código sem executá-lo e apontar outros sinais, como problemas de sintaxe, trechos nunca usados, padrões perigosos ou violações de regras de código.

A ferramenta conhece a estrutura do código. A equipe conhece a intenção do negócio. Por isso, as duas formas de revisão se complementam.

Mais adiante, quando surgir uma necessidade concreta, poderemos usar ferramentas desse tipo. Aqui o mais importante é entender o raciocínio.

Nem tudo que parece estranho é um defeito

Considere este código:

def calcular_subtotal(preco, quantidade):
    resultado = preco * quantidade
    valor = resultado
    return valor

Ele pode produzir o resultado correto. Ainda assim, a variável valor não acrescenta informação e pode ser eliminada.

Uma revisão também pode melhorar clareza, simplicidade e manutenibilidade, mesmo quando não encontramos uma falha funcional.

Prática · estático ou dinâmico?

SituaçãoEstático ou dinâmico?Por quê?
Ler RF-03 e notar que falta uma condição.EstáticoO software não foi executado.
Digitar 11 na tela e observar a resposta.DinâmicoO sistema foi executado.
Comparar dois documentos que descrevem o cupom.EstáticoEstamos revisando artefatos.
Executar uma função de cálculo com quantidade 2.DinâmicoHá execução do código.
Ler um trecho de código e perceber que aceita valores negativos.EstáticoA conclusão veio da revisão do código.

Agora o problema muda novamente

A revisão estática ajudou a encontrar contradições, omissões e diferenças entre regra e código.

Depois que esses pontos forem esclarecidos, ainda precisaremos executar o sistema.

Só que aparece uma nova dificuldade: para uma quantidade inteira, poderíamos testar 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 — e também 0, -1, -2, 11, 12, 100...

Como escolher poucos valores que tenham boa chance de revelar problemas?

A seguir: escolher bons valores de teste

Vamos parar de escolher números ao acaso e aprender duas técnicas muito úteis: particionamento de equivalência e análise de valores-limite.

Antes de seguir

Você deve conseguir explicar:

  • por que é possível encontrar problemas antes de executar o software;
  • a diferença básica entre teste estático e teste dinâmico;
  • o que significa artefato e checklist neste contexto;
  • por que revisão humana e análise automática podem se complementar.