QA em Scrum
Cerimônias e QA
Sprint Planning
# Sprint Planning - Input de QA
Antes da Planning
- [ ] Backlog priorizado pelo PO
- [ ] User stories com critérios de aceitação
- [ ] Histórias técnicas identificadas
Durante Planning
Para cada história
- PO apresenta requirements
- Devs estimam esforço
- QA identifica:
- Riscos de teste
- Dados necessários
- Dependências
- Complexidade de automação- timebox: ~1 hora por sprint
Output
- [ ] Sprint backlog definido
- [ ] Definition of Done clara
- [ ] Dívidas técnicas identificadas
Daily Standup
# Daily Standup - QA Updates
Formato: 3 perguntas
O que fiz ontem para ajudar o time?
- "Finalizei testes da história #123"
- "Revisei PR do João"
O que farei hoje?
- "Vou testar história #124"
- "Vou automatizar teste de login"
Há algum impedimento?
- "Aguardando ambiente de staging"
- "Preciso de acesso ao banco de produção"
Tips para QA
- Mantenha updates curtos (~30 segundos)
- Identifique bloqueios rápido
- Ajude devs com code review
- Coordene com outros QAers
Sprint Review
# Sprint Review - Testing Handoff
Demo Checklist
- [ ] Funcionalidades demonstradas
- [ ] Critérios de aceitação cumpridos
- [ ] Testes executados
- [ ] Bugs documentados
Demo Format
- "O que foi feito?"
- "Como funciona?"
- "O que não foi feito?" (e por quê)
- "Próximos passos"
Feedback de QA
- Qualidade geral
- Issues encontrados
- Recomendações
Sprint Retrospective
# Sprint Retrospective - QA Focus
Start (O que começar a fazer?)
- "Começar a fazer BDD com time"
- "Começar a documentar testes"
Stop (O que parar de fazer?)
- "Parar de fazer testes manuais em features pequenas"
- "Parar de aceitar histórias sem critérios de aceitação"
Continue (O que continuar fazendo?)
- "Continuar pair testing"
- "Continuar code reviews"
Ações para Próximo Sprint
- [ ] Ação 1 - Responsável: João
- [ ] Ação 2 - Responsável: Maria
Definition of Done (DoD)
# Definition of Done - Checklist
Para uma história ser considerada "Done":
Código
- [ ] Código implementado
- [ ] Code review aprovado
- [ ] Branch merged to main
- [ ] Sem warnings de linter
Testes
- [ ] Unit tests escritos (> 80{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442} coverage)
- [ ] Testes de integração passando
- [ ] Testes funcionais passando
- [ ] Testes de performance (se aplicável)
- [ ] Accessibility testes (se aplicável)
Qualidade
- [ ] Segurança revisada
- [ ] Performance considerada
- [ ] Responsivo (se web/mobile)
- [ ] Logs implementados
Documentação
- [ ] README atualizado
- [ ] API docs (se aplicável)
- [ ] Swagger/OpenAPI atualizado
Deploy
- [ ] Deploy em staging
- [ ] Smoke tests passando
- [ ] Ready for production
QA em Kanban
Quadro Kanban
┌──────────┬──────────┬──────────┬──────────┬──────────┐
│ BACKLOG │ READY │ IN DEV │ TEST │ DONE │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Story 5 │ Story 1 │ Story 2 │ Story 3 │ Story 4 │
│ Story 6 │ │ │ │ Story 7 │
│ Story 8 │ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┘
∞ 5 3 3 ∞
WIP Limits
| Column | WIP Limit | Reason |
|---|---|---|
| Ready | 5 | Capacidade do time |
| In Dev | 3 | Focus por developer |
| Test | 3 | Capacidade QA |
| Review | 2 | Bottlenecks visíveis |
Métricas Kanban
# Lead Time e Cycle Time
import datetime
def calculate_metrics():
tickets = [
{
"id": "PROD-123",
"created": "2024-01-01",
"ready": "2024-01-03",
"dev_start": "2024-01-05",
"dev_done": "2024-01-08",
"test_start": "2024-01-09",
"test_done": "2024-01-10",
"done": "2024-01-10",
}
]
for ticket in tickets:
created = datetime.datetime.strptime(ticket["created"], "{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}Y-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}m-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}d")
done = datetime.datetime.strptime(ticket["done"], "{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}Y-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}m-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}d")
lead_time = (done - created).days
cycle_time = (done - datetime.datetime.strptime(
ticket["dev_start"], "{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}Y-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}m-{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}d"
)).days
print(f"{ticket['id']}: Lead={lead_time}d, Cycle={cycle_time}d")
# Throughput
def throughput(team_tickets):
completed_last_30d = sum(
1 for t in team_tickets
if is_done_recently(t, 30)
)
return completed_last_30d
Classes of Service
| Class | Priority | WIP | Lead Time Target |
|---|---|---|---|
| Expedite | Crítica | 1 | < 1 dia |
| Fixed Date | Alta | 2 | Na data |
| Standard | Normal | ∞ | < 5 dias |
| Intangible | Baixa | ∞ | Quando possível |
XP (Extreme Programming) e QA
Práticas XP
Pair Programming
# Pair Programming Roles
Driver
- Escreve o código
- Focado na implementação
- Compartilha tela
Navigator
- Revisa código em tempo real
- Pensa estrategicamente
- Busca melhorias
- Agenda refatoração
Dicas
- Troque papéis a cada 30-60 minutos
- Mantenha comunicação aberta
- Ambos são responsáveis pela qualidade
Benefícios
- 15{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442} mais lento, mas 15{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442} menos bugs
- Transferência de conhecimento
- Catches bugs em tempo real
TDD em XP
# Ciclo TDD em XP
# Red -> Green -> Refactor (em pares!)
# 1. RED: Escrever teste que falha
def test_calcular_imposto():
resultado = calcular_imposto(100, 0.1)
assert resultado == 10
# 2. GREEN: Fazer passar (mínimo)
def calcular_imposto(valor, taxa):
return 10 # Hardcoded
# 3. REFACTOR: Melhorar (em par)
def calcular_imposto(valor, taxa):
return valor * taxa
Continuous Integration
# CI Pipeline XP Style
name: XP CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 1. Commit pequeno
# 2. Build e test
- run: pip install pytest pytest-cov
# 3. Todos testes passando
- run: pytest -v --cov=src --cov-fail-under=80
# 4. Integrar frequentemente
- name: Merge if green
if: github.ref == 'main'
run: echo "Ready to merge"
Métricas Ágeis de QA
Defect Metrics
# Defect Metrics
class DefectMetrics:
def __init__(self, sprints):
self.sprints = sprints
def defect_leakage(self, sprint):
"""Defeitos encontrados em produção vs. antes"""
prod_bugs = sprint.bugs_found_in_prod
total_bugs = sprint.total_bugs
return (prod_bugs / total_bugs) * 100 if total_bugs else 0
def defect_densities(self, sprints):
"""Densidade de defeitos por feature"""
return {
sprint.name: len(sprint.defects) / sprint.stories_completed
for sprint in sprints
}
def escape_rate(self, sprint):
"""{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442} de defeitos que escaparam para prod"""
escaped = sprint.defects_found_after_release
total = sprint.total_defects
return (escaped / total * 100) if total else 0
# Targets
# Defect Leakage: < 15{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}
# Defect Density: < 0.5 per story
# Escape Rate: < 10{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}
Test Velocity
# Test Velocity Metrics
metrics:
- name: "Tests Written per Sprint"
target: 50
current: 47
- name: "Automation Coverage"
target: "80{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}"
current: "72{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}"
- name: "Test Execution Time"
target: "< 30 min"
current: "35 min"
- name: "Test Maintenance Effort"
target: "< 20{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}"
current: "25{6727d158e4474b0847515bd23a8ee4bebd5f1aac7a18bc968e51d8985dccb442}"
Checklist de Práticas Ágeis para QA
Sprint
- [ ] Participar de planning
- [ ] Identificar riscos de teste
- [ ] Atualizar testes para histórias
- [ ] Executar testes
- [ ] Reportar bugs
- [ ] Participar de review
- [ ] Retrospectiva de QA
Continuous
- [ ] Manter testes atualizados
- [ ] Pair testing quando possível
- [ ] Code reviews
- [ ] CI/CD passing
- [ ] Métricas atualizadas
Conclusão
QA em agile requer adaptação constante e colaboração. As chaves são:
- Integração – QA não é fase separada
- Comunicação – Time completo é responsável
- Automação – Habilita velocidade
- Métricas – Medir para melhorar
- Melhoria – Retrospectivas e adaptação
