Por que «não consigo reproduzir» quase sempre é um problema dos passos
Bons passos para reproduzir = um ponto de partida claro + uma ação por passo + dados reais + o que você observou em cada passo. Se alguém conseguir ler em voz alta e chegar à mesma tela, os passos estão bons o suficiente. Abaixo estão 5 regras, um teste de nível de detalhe, 5 exemplos completos (incluindo como escrever um bug intermitente) e um checklist antes de enviar.
Quando o desenvolvedor responde «não consigo reproduzir», raramente é má vontade. Falta algo nos passos, e normalmente é uma destas três coisas:
+.Em uma frase: os passos não são um registro para você, são uma rota para outra pessoa.
5 regras para passos que funcionam
user+test@x.com, não «um endereço de e-mail».Qual deve ser o nível de detalhe dos passos?
| Nível | Exemplo | Problema |
|---|---|---|
| Grosso demais | «Abrir o checkout, remover um item, o contador está errado» | Três ações numa frase — ninguém sabe onde quebra |
| O ideal | «1. Ir para /cart 2. Clicar em Excluir ao lado do produto 3. Olhar o contador no topo da página» |
Uma ação por passo, cada uma verificável |
| Fino demais | «1. Mover o cursor sobre o botão 2. Pressionar o botão esquerdo 3. Soltar» | Ações físicas picadas: mais difícil de ler, não mais fácil |
O teste: depois de escrever, faça duas perguntas. ① Outra pessoa chega à mesma tela sem olhar minha captura? ② O desenvolvedor consegue dizer em dois minutos se é front, API ou dados? Dois «sim» significam que o nível de detalhe está certo.
5 exemplos completos
Exemplo 1: login e autenticação (5 passos)
Pré-requisitos: conta test@example.com já cadastrada e ativa.
Ambiente: Chrome 120 / macOS 14 / desktop / 1920×1080 / janela anônima.
https://app.example.com/logintest@example.com e a senha corretaEsperado: mensagem «captcha incorreto, tente novamente», com a conta desbloqueada. Real: exibe «conta bloqueada, tente novamente em 24 horas» — mesmo com o captcha correto.
Exemplo 2: pagamento e cupons (6 passos)
Pré-requisitos: 2 itens no carrinho totalizando R$ 1.299; a conta é do tipo enterprise. Ambiente: Chrome 120 / Windows 11 / desktop / 1440×900 / conta enterprise.
/cart e confirmar que o total é R$ 1.299SAVE100 no campo correspondente (expirado há três dias)Esperado: aviso «cupom expirado», com o carrinho inalterado. Real: exibe «cupom aplicado» e desconta R$ 100; no momento do clique em «Aplicar», os dois itens desaparecem do carrinho.
Exemplo 3: toque no mobile (5 passos)
Pré-requisitos: logado, com 1 item no carrinho. Ambiente: iPhone 14 / iOS 17.2 / Safari / viewport 390×844.
https://shop.example.com/cartEsperado: o botão sobe para cima do teclado e continua tocável. Real: o teclado cobre cerca de 60% do botão e os toques nessa área não têm efeito.
Exemplo 4: API e dados (4 passos)
Pré-requisitos: token do ambiente de teste emitido; o banco tem 12.400 pedidos, 12 deles correspondentes à palavra-chave.
Ambiente: https://api-test.example.com / curl 8.x.
GET /api/orders/export?month=2026-08 com o cabeçalho Authorization: Bearer <token>month=2026-08-01~2026-08-07Esperado: 200 com um ID de tarefa de exportação, ou 202 se a tarefa entrou na fila. Real: 504 (timeout de gateway); com o intervalo reduzido retorna 200, ou seja, o limite depende do volume de dados.
Exemplo 5: bug intermitente (com probabilidade e timing)
Pré-requisitos: conta sem saldo; o cartão de teste está vinculado ao usuário de teste. Ambiente: Chrome 120 / macOS 14 / rede limitada a 3G.
/checkout e preencher os dados de pagamentoEsperado: apenas um pedido criado; cliques repetidos devem ser deduplicados no cliente ou bloqueados por idempotência na API.
Real: em 3 de 10 tentativas foram criados dois pedidos (condições: intervalo <500ms e latência >1s). Estão anexados a gravação do painel Network e os IDs das duas chamadas POST /api/orders.
Como escrever um bug intermitente:
- Informe uma probabilidade, não a palavra «intermitente»: «3 de 10 tentativas» é cem vezes mais útil.
- Informe o timing ou o limite: «intervalo <500ms», «latência >1s» — essas condições costumam ser a pista da causa raiz.
- Informe o tipo de evidência: gravação de tela e logs de console são a única prova durável que um bug intermitente consegue levar.
7 erros que invalidam os seus passos
Checklist antes de enviar
- Pré-requisitos escritos (estado de login + estado dos dados)?
- O primeiro passo é uma ação de negócio, não «abrir um navegador»?
- Exatamente uma ação por número?
- Valores reais em vez de genéricos?
- Observação anotada após os passos-chave?
- Resultado esperado e resultado real separados?
- Em bugs intermitentes, probabilidade e timing informados?
FAQ
Quantos passos deve ter uma reprodução?
Normalmente de 3 a 8. Menos de 3 costuma indicar pré-requisitos ausentes; mais de 8 normalmente pode ser encurtado — mova a navegação para os pré-requisitos e mantenha só as ações que disparam o problema.
O ambiente vai nos passos ou em um campo próprio?
Em um campo próprio. Dentro dos passos ele quebra o ritmo de leitura e não pode ser filtrado. Se o formato não tem campo de ambiente (um e-mail, por exemplo), declare em uma linha no início: «Ambiente: Chrome 120 / macOS 14 / 1920×1080».
Ações irrelevantes como «clicar em Voltar» ou «fechar o diálogo» devem entrar?
Só se fizerem parte das condições de reprodução. Faça o teste: remova o passo — o bug ainda acontece? Se sim, tire; se não, ele precisa ficar.
Como escrever os passos de um bug que eu mesmo não consigo reproduzir?
Escreva três coisas com honestidade: ① as condições testadas (quais tentativas funcionaram e quais não); ② a melhor evidência disponível (gravação, logs de console, requisições de rede); ③ as correlações observadas («só quando a rede está lenta»). Marque como «condições de reprodução não confirmadas» no título ou nas observações, em vez de fazer passar por um bug determinístico.
Qual é a diferença entre passos para reproduzir e casos de teste?
Um caso de teste é um checklist desenhado antes — cobre caminhos felizes, limites e exceções buscando cobertura. Os passos para reproduzir são um caminho registrado depois do fato, cujo único objetivo é repetir o problema de forma confiável. Os dois se alimentam, mas os objetivos diferem — para escrever casos de teste, veja modelo de caso de teste com exemplos.
Os passos você escreve; as evidências podem ser automáticas
Os passos precisam vir de quem clicou — só você sabe o que fez. Mas o ambiente e as evidências que os acompanham podem se preencher sozinhos:
- Gravação de tela: grave a aba atual com um clique e corte o trecho, para que até um bug intermitente leve evidência reproduzível.
- Dados de diagnóstico: logs de console em nível de erro e requisições de rede com falha (HTTP ≥ 400) são coletados, com anonimização de parâmetros sensíveis.
- Contexto técnico automático: URL, navegador, sistema operacional, resolução e viewport são preenchidos para você.
- Capturas anotadas: selecione uma área e adicione setas, caixas e texto para fixar a falha.
- Compartilhar ou sincronizar: gere um link que abre sem cadastro, ou envie o relatório para o Feishu Bitable ou um webhook genérico.
Leia também
- Formato de relatório de bug: a especificação dos 10 campos
- Modelo de relatório de bug: um esqueleto para copiar com exemplo preenchido
- Exemplos de título de bug: 40 títulos bons e ruins comparados
- Modelo de caso de teste com exemplos
- Como reportar bugs com eficácia