---
id: qa-trace-requirements
agent: qa
title: Mapear cada AC para teste (rastreabilidade)
inputs: [story]
outputs: [matriz de rastreabilidade AC→teste, lista de gaps com severidade]
elicit: false
modes: [interactive, yolo]
---

# Mapear cada AC para teste (rastreabilidade)

**Objetivo:** provar que toda AC da story tem teste que a verifica em Given-When-Then — e nomear cada
buraco (AC sem teste) com severidade, em vez de fechar os olhos.

**Pré-condições:**
- A story existe, com ACs explícitas. Sem ACs, **pare**: não há requisito a rastrear.
- Existem testes (na File List / suíte) a mapear. Se não há suíte, o resultado é uma matriz cheia de
  gaps — e isso já é o achado.

## Passos

1. **Listo cada AC** da story como linha da matriz de rastreabilidade.
2. **Para cada AC, localizo o(s) teste(s)** que a verificam e descrevo o vínculo em Given-When-Then
   (dado o estado, quando a ação, então o resultado esperado que prova a AC).
3. **Marco a cobertura** por AC: COBERTA (teste verde rastreado), PARCIAL (só caminho feliz, falta
   borda/falha), ÓRFÃ (nenhum teste).
4. **Registro cada gap** (PARCIAL/ÓRFÃ) com severidade derivada do risco da AC: ÓRFÃ em área ALTO é
   bloqueador; PARCIAL em área BAIXO é dívida.
5. **Confirmo o inverso:** todo teste rastreia a alguma AC. Teste que não prova nada da story é ruído
   — registro, mas não inflo a cobertura com ele.
6. **Entrego a matriz** como insumo direto para `qa-gate` — a rastreabilidade é o que separa "achei
   bonito" de "provei que atende".

## Critério de pronto (DoD)

- [ ] Toda AC é uma linha da matriz com status de cobertura
- [ ] Cada vínculo AC→teste descrito em Given-When-Then
- [ ] Todo gap (PARCIAL/ÓRFÃ) registrado com severidade derivada do risco
- [ ] Inverso confirmado: testes sem AC identificados
- [ ] Matriz entregue como insumo para o gate

## Falha / recuperação

- **AC intestável como escrita** → registro a lacuna e devolvo ao @sm/@po; não invento o teste de um
  requisito ambíguo.
- **AC órfã em área de alto risco** → marco como bloqueador para o gate (não pode ser PASS) e roteio
  fix-request ao @dev para criar o teste faltante.
