← Mundo bit ByteQualidade e Teste de Software
Professor Ronaldo Lavestein
Escolher o foco
Etapa 7

O que estamos testando?

A regra da quantidade é a mesma, mas podemos observá-la em pontos diferentes do sistema. Testar uma função isolada não responde exatamente às mesmas perguntas que testar o pedido completo na tela.

A mesma regra, quatro perguntas diferentes

A Cantina Horizonte deve rejeitar quantidade 0.

Podemos perguntar se a função que valida quantidade está correta, se essa regra continua funcionando quando outras partes conversam, se o sistema completo rejeita a operação e, por fim, se o produto atende à necessidade real de quem vai utilizá-lo.

As perguntas se parecem, mas o alcance de cada uma é diferente.

Começando pelo menor pedaço

Imagine uma função responsável apenas por decidir se uma quantidade é válida.

Entrada: quantidade 0.
Esperado: a função deve informar que o valor é inválido.

Nesse caso, queremos observar uma parte pequena do software sem depender da interface, do banco de dados ou do restante do pedido.

Teste de unidade

Verifica uma pequena unidade de comportamento em isolamento, como uma função, método ou componente pequeno.

O significado de unidade pode variar conforme a tecnologia e o projeto. O importante é a ideia de testar uma parte pequena com poucas dependências externas.

Quando duas ou mais partes precisam trabalhar juntas

Agora suponha que a regra de quantidade esteja correta, mas o pedido precise consultar o estoque no banco antes de ser finalizado.

A pergunta deixa de ser apenas “a função calcula certo?” e passa a incluir:

Essas partes trocam informação corretamente quando trabalham juntas?

Teste de integração

Verifica a interação entre partes do sistema, como regra de negócio, servidor, banco de dados ou outros componentes que precisam se comunicar.

Mais adiante vamos praticar isso diretamente na comunicação entre a aplicação e sua interface de servidor.

Agora olhe para o sistema completo

Um cliente abre a Cantina Horizonte, escolhe um produto, informa quantidade 0, tenta adicioná-lo e observa a resposta.

Nesse momento várias partes podem participar: tela, JavaScript, servidor, regras e banco.

Teste de sistema

Verifica o sistema integrado como um todo, observando seu comportamento completo em um ambiente representativo.

Se o sistema completo aceita quantidade 0, existe um problema observável mesmo que alguma função isolada esteja correta.

E quando queremos saber se a solução atende ao uso real?

Imagine a equipe demonstrando uma versão à responsável pela cantina. Ela confirma se o fluxo de pedido, as mensagens e as regras atendem ao trabalho que precisa ser realizado.

Teste de aceitação

Ajuda a avaliar se a solução atende às necessidades e critérios combinados para seu uso. É comum envolver pessoas que representam o negócio, o cliente ou quem receberá o produto.

Não significa que todos os testes anteriores deixam de ser necessários. Cada nível responde perguntas diferentes.

Os níveis formam uma mudança de alcance

NívelPergunta principal na Cantina HorizonteExemplo
UnidadeUma pequena regra funciona isoladamente?validar_quantidade(0) deve rejeitar.
IntegraçãoPartes diferentes trabalham corretamente juntas?Pedido consulta produto e atualiza estoque no banco.
SistemaO produto completo se comporta como esperado?Finalizar um pedido pelo sistema completo.
AceitaçãoA solução atende ao uso e aos critérios combinados?Responsável pela cantina valida o fluxo que será usado no atendimento.

“Nível” não é a mesma coisa que “tipo”

Aqui existe uma confusão comum.

Nível de teste ajuda a responder em que alcance ou parte da solução estamos testando.

Já outra pergunta é:

Que aspecto da qualidade queremos avaliar?

Quando verificamos o que o sistema faz

Se testamos se o sistema calcula o total, rejeita quantidade inválida, aplica o cupom corretamente ou muda o status segundo a regra, estamos verificando comportamentos funcionais.

Teste funcional

Verifica funções, regras e comportamentos esperados: o que o sistema deve fazer diante de determinadas entradas e situações.

Quando a função pode estar certa, mas a qualidade ainda incomoda

Lembre das situações da Etapa 1:

Demora

O pedido é calculado corretamente, mas leva 15 segundos para confirmar.

Mensagem ruim

A operação é rejeitada, mas aparece apenas “Erro 1047”.

Tela estreita

No celular, parte do conteúdo fica escondida ou exige rolagem horizontal.

Dados desaparecem

Pedidos registrados não permanecem disponíveis depois.

Teste não funcional

Avalia características de qualidade que vão além de uma função específica, como desempenho, facilidade de uso, compatibilidade, confiabilidade, segurança e outras características relevantes ao contexto.

O nome não funcional não significa “menos importante”. Em alguns sistemas, desempenho, confiabilidade ou segurança são tão críticos quanto a função principal.

Uma prática simples de qualidade que já podemos fazer

Sem instalar ferramenta nova, faça três observações na Cantina Horizonte:

  1. reduza a largura da janela do navegador e verifique se as funções principais continuam utilizáveis;
  2. compare uma mensagem clara com uma mensagem genérica e diga qual ajuda mais a pessoa a corrigir a ação;
  3. finalize um pedido e observe se o retorno acontece em um tempo que faria sentido durante o intervalo.

Essa observação inicial não substitui medições profissionais. Ela apenas mostra que também podemos avaliar características além do resultado funcional.

Segurança aparece aqui, mas não vamos transformar QTS em outro módulo

Segurança é uma característica importante da qualidade. Ao longo de QTS podemos verificar comportamentos básicos, como não confiar apenas na validação da tela.

Mas assuntos como ataques, autenticação, criptografia e testes especializados de segurança exigem aprofundamento próprio e não serão o foco desta trilha.

Um teste pode combinar nível e tipo

Podemos ter, por exemplo:

SituaçãoNívelAspecto
Função calcula subtotal de 2 salgados.UnidadeFuncional
Pedido grava e reduz estoque no banco.IntegraçãoFuncional
Fluxo completo rejeita carrinho vazio.SistemaFuncional
Sistema completo continua utilizável em tela estreita.SistemaNão funcional

Isso mostra por que “funcional” e “de sistema” não são categorias concorrentes. Uma expressão fala do aspecto; a outra fala do alcance.

Prática · diga qual pergunta está sendo feita

  1. Executar apenas a função que calcula o subtotal.
  2. Verificar se criar um pedido realmente altera o estoque salvo no banco.
  3. Usar a aplicação completa para comprar dois salgados.
  4. Medir se finalizar um pedido demora mais do que o aceitável.
  5. Pedir que a responsável pela cantina confirme se o fluxo atende ao trabalho real.

Em cada caso, tente explicar qual é o nível e, quando fizer sentido, qual aspecto da qualidade está sendo observado.

Agora nosso conjunto de testes cresceu bastante

Temos valores-limite, combinações de regras, transições de estado, diferentes níveis e características de qualidade.

Se tentarmos verificar tudo, em todos os níveis, com todos os dados e ambientes possíveis, o número de casos cresce rapidamente.

Se não dá para testar tudo, como decidir o que precisa de mais atenção?

A seguir: decidir o que testar primeiro

Vamos usar risco, impacto e prioridade para decidir onde o esforço de teste faz mais diferença.

Antes de seguir

Você deve conseguir explicar:

  • a diferença básica entre testes de unidade, integração, sistema e aceitação;
  • a diferença entre nível de teste e aspecto testado;
  • o que caracteriza um teste funcional;
  • por que testes não funcionais também precisam de situações observáveis.