QA Learning / Fundamentos

Módulo 5: Relatar bug

A anatomia de um relatório que é corrigido, severidade × prioridade, e o ciclo de vida do defeito

Aquecimento: 2 perguntas do Módulo 4

1. O que uma carta de teste precisa ter?
Explorar (a área), com (dados, contas, ferramentas) e para (que risco ou informação você busca), mais tempo marcado.

2. O que é um oráculo?
O que te permite afirmar que algo está errado: a especificação, a consistência interna, o comportamento anterior, o propósito, e os dados no banco.

O relatório é o produto do seu trabalho

Um defeito que você encontrou mas ninguém conseguiu reproduzir não vai ser corrigido. Nesse caso o trabalho de achar foi desperdiçado, e, pior, você gastou o tempo de outra pessoa tentando entender.

Por isso: o relatório é a entrega. Ele tem um leitor específico, quem vai corrigir, e um objetivo único: fazer essa pessoa ver o problema na máquina dela, sozinha, em menos de dois minutos. Tudo que serve a isso entra; tudo que não serve, sai.

Anatomia

CampoPara que serve
Títuloa pessoa decide em 3 segundos se é com ela. É o campo mais lido e o mais maltratado.
Ambiente e versãodev / homolog / produção, versão do sistema, navegador e aparelho. Sem isso, "na minha máquina funciona" é inevitável.
Pré-condiçõeso estado necessário antes de começar: que tipo de usuário, que dado precisa existir.
Passosnumerados, do zero, sem pular nada que pareça óbvio. Quem lê não estava lá.
Resultado esperadoo que deveria acontecer, e por quê: a regra, a história, a tela de referência.
Resultado obtidoo que aconteceu de fato. Descreva, não interprete.
Evidênciaprint, vídeo curto, log, resposta da API, a linha do banco. Uma imagem economiza um parágrafo.
Severidade e prioridadedois campos diferentes, a seção abaixo é inteira sobre isso.

Título: a fórmula que funciona

[onde]  o quê acontece  [quando / em que condição]
RuimBom
Erro no checkout[Checkout] Frete cobrado em pedido acima de R$ 300, que deveria ser grátis
Não funciona[Login] Botão "Entrar" não responde no Safari iOS 17
Bug no carrinho urgente!!![Carrinho] Cupom continua aplicado após remover itens e ficar abaixo do mínimo de R$ 50

Teste do título: se a pessoa ler só ele e conseguir dizer onde procurar no código, está bom.

Antes e depois

❌ Como chega (e volta)

Título: desconto errado

Descrição: testei o desconto e veio errado, acho que o
cálculo está trocado. Dá uma olhada aí.

Problemas: título não diz onde nem o quê; não dá pra reproduzir; não diz qual valor veio nem qual era o esperado; não diz o ambiente; e chuta o defeito em vez de relatar a falha (Módulo 1). O resultado previsível é a pergunta "como você fez?" e mais um dia perdido.

✅ Como deveria chegar

Título: [Checkout] Desconto de 25% aplicado para cliente VIP com cupom,
        quando o esperado é 20%

Ambiente: homolog, v2.14.0 — Chrome 128, Windows 11

Pré-condições:
  - cliente com perfil VIP (usei vip.teste@exemplo.com)
  - cupom PROMO15 ativo e ainda não utilizado

Passos:
  1. Entrar como vip.teste@exemplo.com
  2. Adicionar "Monitor 24pol" (R$ 1.000,00) ao carrinho
  3. Ir para o checkout
  4. Aplicar o cupom PROMO15
  5. Observar o resumo do pedido

Esperado:  desconto de 20% (R$ 200,00), total R$ 800,00.
           Regra da história QA-142: VIP + cupom = 20%, os descontos
           não são somados.

Obtido:    desconto de 25% (R$ 250,00), total R$ 750,00.
           Parece que os 10% do VIP e os 15% do cupom foram somados.

Evidência: print do resumo (anexo), e a resposta da API:
           POST /pedidos → {"desconto": 250.00, "total": 750.00}

Severidade: alta      Prioridade: P1
Observação: acontece com qualquer cupom, não só o PROMO15.

Note três detalhes de quem tem experiência: o esperado cita a regra (QA-142) em vez de ser opinião; a hipótese sobre a causa aparece como "parece que", separada do fato; e a última linha diz que o problema é mais amplo do que o passo a passo sugere, informação que economiza uma rodada inteira de conversa.

Severidade × Prioridade

São duas perguntas diferentes, feitas por pessoas diferentes. Confundir as duas é o mal-entendido mais comum de quem está começando, e um dos poucos temas que cai em praticamente toda entrevista de QA.

  • Severidade: o tamanho do estrago quando o defeito acontece. É uma avaliação técnica, e normalmente quem reporta é quem define.
  • Prioridade: a urgência de corrigir. É uma decisão de negócio: depende de quanta gente é afetada, do impacto financeiro, de contrato, de imagem, do que mais está na fila.

Por serem independentes, existem os quatro cruzamentos, e os dois cruzamentos "estranhos" é que provam que os campos são mesmo diferentes:

Prioridade alta (P1)Prioridade baixa (P4)
Severidade
crítica
Checkout derruba o sistema pra todo mundo.
Óbvio: pare tudo.
Sistema quebra ao gerar relatório num formato que dois clientes usam, uma vez por ano.
Estrago enorme, mas quase ninguém é afetado: pode esperar.
Severidade
baixa
Nome da empresa escrito errado na página inicial, no dia do lançamento.
Não quebra nada, mas é a primeira coisa que todo mundo vê: corrija agora.
Texto desalinhado por 2 pixels numa tela interna.
Óbvio: entra na fila.

Guarde os dois exemplos do meio: o do relatório anual e o do nome errado na home. Eles são a resposta pronta pra pergunta "qual a diferença entre severidade e prioridade?".

Não infle a severidade pra ser atendido

É tentador marcar tudo como crítico pra o bug não morrer na fila. Funciona uma vez. Depois, o time aprende a descontar o que você diz, e aí o seu crítico de verdade vira só mais um. Severidade é escala técnica, não é o volume da sua voz. Se algo é severidade média mas precisa sair hoje, o campo certo pra isso é a prioridade, e o lugar certo é uma conversa explicando o porquê.

O ciclo de vida do defeito

O banco que você vai usar nas outras trilhas tem uma tabela defeitos com exatamente os estados que um bug percorre na vida real:

aberto ──→ em_analise ──→ resolvido ──→ fechado
                              │              │
                              └──────────────┴──→ reaberto ──┐
                                                      ▲      │
                                                      └──────┘
  • aberto: você reportou, ninguém pegou ainda.
  • em_analise: alguém está investigando ou corrigindo.
  • resolvido: a correção foi feita. Ainda não acabou: falta você fazer o reteste (Módulo 2).
  • fechado: você retestou e confirmou. Só QA fecha.
  • reaberto: o reteste falhou, ou o problema voltou depois. É um sinal importante: muitos reabertos indicam correção apressada ou relatório incompleto.

Repare no gancho com o Módulo 3: isso é uma máquina de estados, e as transições proibidas valem teste: dá pra fechar um defeito que nunca foi resolvido? E há uma regra de dados fácil de verificar: todo defeito fechado ou resolvido precisa ter data_fechamento preenchida; todo aberto precisa ter data_fechamento nula. Nas trilhas de SQL e de pytest você escreve exatamente essas verificações, e elas encontram dado inconsistente de verdade.

Os campos da tabela defeitos, e por que cada um existe

ColunaPara que serve no dia a dia
tituloa triagem inteira acontece lendo só esta coluna
modulopermite ver onde os defeitos se agrupam (princípio 4 do Módulo 1)
severidadetamanho do estrago, técnico
prioridadeurgência, negócio
statusonde o defeito está no ciclo acima
ambientedev / homolog / producao: defeito crítico que escapou pra produção é a métrica mais dolorida e mais útil de um time de QA
data_abertura / data_fechamentoa diferença entre as duas é o tempo de correção; a segunda nula significa "ainda aberto"

Quando você chegar na Trilha de SQL, vai reconhecer essa tabela, e as consultas vão fazer sentido de negócio, não só de sintaxe.

As três situações difíceis

"Não consegui reproduzir"

Antes de reportar, tente de novo do zero, em outra conta e, se der, em outra máquina. Se acontece só às vezes, diga isso e diga a frequência real ("3 vezes em 10 tentativas"). Junte tudo que possa ser a diferença: horário, dado usado, se havia outra aba aberta, o log do console. Bug intermitente é bug: o que não pode é você esconder que é intermitente.

"Isso é duplicado"

Procure antes de abrir. Se for o mesmo defeito, acrescente sua informação no relatório existente em vez de abrir outro: outro ambiente, outro caminho de reprodução, mais uma ocorrência. Isso aumenta a prioridade do que já existe, o que é melhor do que dividir a atenção em dois registros.

"Não é bug, é o comportamento esperado"

Acontece, e não tem problema. A resposta profissional não é insistir: é perguntar onde está escrito. Se estiver documentado, ótimo: você aprendeu algo e o relatório fecha. Se ninguém souber dizer, o defeito mudou de lugar: não está no código, está na especificação. Aí o registro certo é "comportamento indefinido: ninguém sabe qual deveria ser", e isso precisa ser decidido por alguém, não silenciado.

Olhar de QA

Escreva o relatório do lado de quem vai corrigir, não contra. Descreva o comportamento, nunca a pessoa; separe fato de hipótese; e entregue de bandeja tudo que economize tempo de investigação. A diferença entre "o checkout está um desastre" e "o checkout soma os dois descontos quando o cliente é VIP" não é só educação: é que a segunda frase pode ser corrigida.

Sua vez

Pegue um achado da sessão exploratória do Módulo 4, ou este aqui, se preferir:

"No app de delivery, se você adicionar um item ao carrinho, esperar 20 minutos sem mexer, e então finalizar o pedido, o preço cobrado é o antigo, mesmo que o restaurante tenha reajustado o cardápio nesse meio-tempo."

Escreva o relatório completo: título na fórmula, ambiente, pré-condições, passos numerados, esperado com a razão, obtido, evidência que você juntaria, severidade e prioridade, com uma frase justificando cada uma das duas. A prova traz essa mesma questão, com uma resposta modelo pra você comparar.

Terminou este módulo? Marque: o ✓ aparece no índice da trilha e a barra de progresso anda no começo do site. Fica salvo só no seu navegador.