QA Learning / Projeto final

← Todas as trilhas

Projeto final

Uma história de usuário, do refinamento ao pipeline: usando tudo o que você aprendeu, na ordem em que se usa no trabalho. No fim você tem um entregável que dá pra mostrar numa entrevista.

Antes de começar

Este projeto assume as trilhas de Fundamentos, Git, SQL, API, pytest e CI/CD. Se faltar alguma, dá pra fazer as etapas correspondentes depois: cada uma é independente.

Reserve 4 a 6 horas, em mais de um dia se preferir. Trabalhe no seu fork do repositório, num branch chamado projeto-final.

A história

QA-501: Cupom de primeira compra

Como cliente novo, quero aplicar o cupom PRIMEIRA10 no meu primeiro pedido, para ganhar 10% de desconto.

Regras informadas pelo time de produto:

  • o cupom dá 10% de desconto sobre o valor dos itens;
  • vale apenas para clientes que nunca fizeram um pedido;
  • o pedido precisa ter valor de itens a partir de R$ 100,00;
  • o desconto não se acumula com outras promoções;
  • o valor_total gravado no pedido já deve vir com o desconto aplicado.

Leia de novo, devagar. A história parece completa, e não é. Descobrir isso é a primeira etapa.

Etapa 1: Refinamento, o que a história não diz

Entregável: um arquivo projeto-final/01-perguntas.md com no mínimo 8 perguntas que você levaria à reunião de refinamento, cada uma com uma frase dizendo por que ela importa (qual o risco se ninguém responder).

Como produzir as perguntas, em vez de esperar que apareçam:

  • passe as técnicas do Módulo 3 de Fundamentos pela regra: toda vez que você não souber preencher a coluna "resultado esperado", achou uma pergunta;
  • passe o pente dos tipos do Módulo 2: segurança, performance, usabilidade, acessibilidade;
  • pergunte pelos limites que ninguém escreve: zero, vazio, exatamente no valor, um item só.

Dica de professor: as três perguntas mais valiosas desta história têm a ver com o que é "nunca fez um pedido", o que acontece com pedido cancelado e sobre qual valor incide o desconto. Se você chegou nelas sozinho, está pensando como QA.

Etapa 2: Casos de teste

Entregável: projeto-final/02-casos-de-teste.md com uma tabela de casos, indicando para cada um qual técnica o gerou.

Use as quatro, em ordem:

TécnicaO que ela deve fazer aparecer aqui
Partição de equivalênciacliente novo × cliente com histórico; cupom válido, inexistente, expirado, já usado; campo vazio
Valor limiteitens somando R$ 99,99 / R$ 100,00 / R$ 100,01; pedido com 1 item; carrinho vazio
Tabela de decisãoé cliente novo? × atinge o mínimo? × já tem outra promoção? Todas as combinações, e a mensagem esperada em cada uma
Transição de estadoaplicar o cupom e depois remover itens até cair abaixo de R$ 100; aplicar, cancelar o pedido, tentar usar o cupom de novo; usar o cupom em dois pedidos simultâneos

Marque com ⚠ os casos cujo resultado esperado depende de uma pergunta da Etapa 1 que ainda não foi respondida. Essa marcação é o que transforma a sua tabela num instrumento de negociação com o time.

Etapa 3: Investigar os dados que já existem

Antes de testar a funcionalidade nova, entenda o terreno. Entregável: projeto-final/03-consultas.sql, com as queries comentadas e o que cada resultado significa.

Responda, no banco de prática (Trilha de SQL):

  1. Quantos clientes nunca fizeram um pedido? (São os elegíveis ao cupom.)
    Dica: é o padrão LEFT JOIN ... WHERE ... IS NULL. Cuidado com a pegadinha do Módulo 4.
  2. E se pedidos cancelados não contarem como "já fez um pedido"? Quantos clientes passam a ser elegíveis?
    A diferença entre as duas respostas é exatamente o custo de não ter perguntado na Etapa 1.
  3. Quantos pedidos teriam atingido o mínimo de R$ 100,00 em itens?
  4. Existem pedidos cujo valor_total já não bate com a soma dos itens? Quantos, e quais?
    Se já há divergência hoje, qualquer teste do novo cálculo vai dar falso positivo. Isso precisa ser dito ao time antes da entrega.
  5. Monte a massa de teste: um INSERT que cria um cliente novo, sem nenhum pedido, para você usar nos testes manuais.

Faça a Etapa 3 dentro de uma transação e confira antes de confirmar: Módulo 7.

Etapa 4: Testar pela API

Entregável: projeto-final/04-testes-api.md: os cenários de API que você executaria, com a verificação de cada um. Use a API falsa da Trilha 4 para praticar a mecânica.

Cubra as três camadas, sem parar na primeira:

  • Status: 200/201 no sucesso; 400 no cupom inválido, no cliente não elegível, no valor abaixo do mínimo; 405 nos métodos errados.
  • Contrato: a resposta traz os campos de desconto? Com que tipo? O valor_total vem como número? Existe campo a mais que não deveria estar exposto?
  • Valor e efeito colateral: o desconto devolvido é realmente 10% dos itens? Depois do POST, um GET encontra o pedido? E, o mais importante, o que ficou gravado no banco bate com o que a API devolveu?

Inclua ao menos dois cenários de abuso: aplicar o cupom duas vezes no mesmo pedido, e enviar o preço do item pelo corpo da requisição para ver se a API confia no que o cliente mandou.

Etapa 5: Automatizar a validação

Entregável: trilha-3/test_05_projeto_final.py: um arquivo de testes de verdade, rodando na sua máquina.

Escreva, no mínimo:

  1. um teste que confirme que nenhum pedido tem valor_total divergente da soma dos itens, com tolerância de arredondamento;
  2. um teste parametrizado que confira o domínio de valores de três colunas (status de pedido, severidade e resultado de execução);
  3. um teste que confirme que não existe pedido apontando para cliente inexistente;
  4. um teste com @pytest.mark.xfail(strict=True) para uma regra que você sabe que o dado atual viola, com a razão documentada.

Requisitos de qualidade: toda mensagem de assert deve listar quais linhas falharam. Lembre que, no CI, essa mensagem é o relatório de bug.

Etapa 6: Colocar no pipeline

Entregável: o seu branch com os testes rodando no GitHub Actions.

  1. Commit e push do branch projeto-final.
  2. Abra um Pull Request com descrição em três seções: o que muda, por quê, como testar.
  3. Veja o workflow rodar na aba Actions. Abra o log e encontre a linha em que os seus testes executaram.
  4. Quebre de propósito: mude uma asserção para algo falso, dê push e confirme que o check fica ✗ no PR. Depois conserte e veja voltar ao ✓.
  5. Acrescente o badge do workflow no seu README.md.

O passo 4 é o mais importante: até você ver o vermelho aparecer por causa de uma mudança sua, o pipeline é abstração.

Etapa 7: Relatar e fechar

Entregável: projeto-final/07-relatorio.md, com duas partes.

a) Um relatório de defeito completo: use um achado real das Etapas 3 ou 4 (os pedidos com valor_total divergente servem). Estrutura do Módulo 5 de Fundamentos: título na fórmula, ambiente, pré-condições, passos, esperado com a razão, obtido, evidência, e severidade e prioridade justificadas separadamente.

b) Um resumo de sessão, nos quatro itens:

  • O que cobri: cenários, camadas, o que foi automatizado;
  • O que achei: defeitos, ambiguidades, inconsistências de dados;
  • O que não deu tempo: dito explicitamente, sem constrangimento;
  • O que me preocupa: os riscos que você não conseguiu descartar.

Esse resumo é o que uma pessoa que decide precisa ler antes de liberar a entrega. Escrever bem os quatro itens é a habilidade mais transferível deste curso inteiro.

Checklist do entregável

Ao fim, o seu branch deve conter:

ArquivoEtapaO que demonstra
projeto-final/01-perguntas.md1que você acha ambiguidade antes de o código existir
projeto-final/02-casos-de-teste.md2que você usa técnica, e não intuição, para escolher o que testar
projeto-final/03-consultas.sql3que você investiga dados sozinho, sem depender de ninguém
projeto-final/04-testes-api.md4que você testa status, contrato e valor, e cruza com a fonte
trilha-3/test_05_projeto_final.py5que você automatiza o que vale a pena repetir
PR aberto, com check ✓6que você entrega dentro do fluxo de um time
projeto-final/07-relatorio.md7que você comunica risco de forma que alguém possa decidir

Por que isso vale como portfólio

Quase todo candidato júnior a QA chega na entrevista dizendo que "fez um curso de Selenium". Poucos chegam com um repositório onde dá pra ver as perguntas que fizeram no refinamento, a tabela de casos com a técnica que gerou cada um, as consultas que usaram para investigar, os testes automatizados rodando num pipeline, e um relatório que distingue severidade de prioridade. Esse conjunto conta uma história sobre como você pensa, e é isso que a pessoa entrevistando está tentando descobrir.

Concluiu o projeto final? Marque aqui. Fica salvo só no seu navegador.