QA Learning / SQL

Módulo 6: SQL no dia a dia de QA

validação de dados + métricas

Teoria

Aqui você usa tudo junto pra tarefas reais de QA:

  • Validação de dados: achar linhas que violam a regra de negócio: pedido não-cancelado com valor_total = 0; item com quantidade <= 0; valor_total do pedido diferente da soma dos itens.
  • Métricas de QA: taxa de aprovação por suite, tempo médio de correção de defeito (julianday(fechamento) - julianday(abertura)), defeitos críticos abertos por módulo.
  • Conferir escrita: depois de um teste de API que cria pedido, checar no banco se gravou certo.

⚠️ Este banco tem bugs plantados nos dados. Os exercícios de validação abaixo servem pra você caçá-los, e é exatamente o trabalho de investigação de QA.

Exemplos de aplicação

Um exemplo montado pra cada item da teoria acima. Não precisa rodar: é pra ver a cara do recurso e entender cada pedaço. Os valores são ilustrativos.

Validação de dados: achar quem quebra a regra

-- pedido que não foi cancelado mas está com valor zerado
SELECT id, status, valor_total
FROM pedidos
WHERE status <> 'cancelado'
  AND valor_total = 0;

A regra de negócio diz "todo pedido ativo tem valor". A query procura quem quebra isso. O trabalho de QA: rodar, achar as linhas, investigar por quê. Variações: WHERE quantidade <= 0 em itens_pedido; ou comparar o valor_total do pedido com SUM(quantidade * preco_unitario) dos itens via JOIN + GROUP BY + HAVING.

Métrica: taxa de aprovação por suite

SELECT suite,
       COUNT(*) AS total,
       SUM(CASE WHEN resultado = 'passou' THEN 1 ELSE 0 END) AS passaram,
       ROUND(
         100.0 * SUM(CASE WHEN resultado = 'passou' THEN 1 ELSE 0 END) / COUNT(*),
         1
       ) AS taxa_aprovacao_pct
FROM execucoes_teste
GROUP BY suite;

Junta o SUM(CASE...) (módulo 2) com GROUP BY (módulo 3). Pra cada suite: total, quantas passaram e a porcentagem. O 100.0 (com casa decimal) força divisão fracionária; com 100 inteiro o SQLite arredondaria pra 0.

Conferir escrita depois de um teste de API

-- logo depois do teste que criou um pedido pro cliente 42
SELECT *
FROM pedidos
WHERE cliente_id = 42
ORDER BY id DESC
LIMIT 1;

Depois de um teste de API que cria um pedido, você vai ao banco conferir: o pedido apareceu? O valor_total bate com o que a API recebeu? O status inicial é 'novo'? ORDER BY id DESC LIMIT 1 pega o registro mais recente.

Pegadinhas deste módulo

Os erros que quase todo mundo comete aqui. Ler agora poupa meia hora de confusão depois, e alguns deles são a causa de relatório errado em projeto real.

  • Zero linhas pode significar "está tudo certo" ou "a query está errada". São duas conclusões opostas para o mesmo resultado. Antes de dizer "não há inconsistência", prove que a query funciona: rode uma versão sem o filtro, ou com o filtro invertido, e veja se ela consegue devolver alguma coisa.
  • Comparar número decimal com = falha por arredondamento. valor_total = SUM(quantidade * preco_unitario) pode dar diferente por casas decimais invisíveis. Use ROUND(..., 2) dos dois lados, ou compare a diferença absoluta contra uma tolerância.
  • Achar a linha errada é metade do trabalho. A outra metade é decidir se o dado está torto ou se a regra que você assumiu está errada. Antes de abrir o defeito, confirme qual é a regra: às vezes o defeito está na especificação (Fundamentos, Módulo 5).
  • Métrica sem denominador engana. "40 defeitos no checkout" não diz nada sem saber quantas entregas houve. Prefira taxas, e diga sempre o período e o recorte.
  • A média esconde o caso ruim. Tempo médio de correção de 3 dias pode conter um defeito parado há 200. Olhe também o máximo e a mediana antes de apresentar o número.

Prática: validação de dados

Rode com o botão ou Ctrl+Enter.

carregando banco…

Query livre

Olhar de QA

Aqui está a habilidade que mais rende na carreira: achar, sozinho, a linha que viola a regra. Mas guarde duas cautelas. A primeira: zero linhas pode significar "está tudo certo" ou "a sua query está errada", então prove que a consulta funciona antes de concluir. A segunda: achar a linha torta é metade do trabalho; a outra metade é decidir se o defeito está no dado ou na regra que você assumiu. Às vezes ele está na especificação.

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.