Base2 Tecnologia
Base2 Tecnologia

Roadmap de Qualidade

Este roadmap foi idealizado pelo Time de Arquitetura da Base2 com o objetivo de auxiliar pessoas a evoluírem em suas carreiras, pensando nas melhores práticas de mercado. Escolha sua trilha de aprendizado e encontre conteúdo, laboratórios práticos, cursos e leituras cuidadosamente selecionados para cada etapa da sua jornada em qualidade de software.

Júnior
Fundamentos
Ideal para quem está começando. Do mindset de QA ao primeiro emprego, sem pré-requisitos técnicos.
13Módulos
21+Exercícios
18Labs
Pleno
Automação
Para quem já tem base. Cypress, Playwright, APIs, CI/CD, acessibilidade e IA na prática.
15Módulos
35+Exercícios
25Labs
Sênior
Arquitetura
Para QAs experientes. Estratégia, performance, segurança, chaos engineering e liderança técnica.
18Módulos
43+Exercícios
18Labs
Todos os níveis
Fundamentos Atemporais
Competências que não expiram. Comunicação, ética, mentalidade e SDLC: para qualquer nível.
9Temas
17+Exercícios
11Labs
Desenvolvedor
Qualidade no Código
Testabilidade, TDD, code review com olhar de qualidade, logs úteis e como não quebrar o pipeline.
6Módulos
12+Exercícios
6Labs
PO · PM
Qualidade no Produto
Critérios de aceite que prestam, Definition of Done, priorização de bugs e métricas de qualidade.
5Módulos
10+Exercícios
5Labs
DevOps · SRE
Qualidade no Pipeline
Gates de qualidade, observabilidade como ferramenta de QA, confiabilidade e gestão de incidentes.
5Módulos
10+Exercícios
5Labs
UX · Design
Qualidade na Experiência
Testes de usabilidade, design que reduz bugs de interface, acessibilidade e handoff sem surpresas.
5Módulos
10+Exercícios
5Labs
Analista de Negócio
Qualidade nos Requisitos
Requisitos testáveis, rastreabilidade, regras de negócio sem ambiguidade e cenários que viram testes.
5Módulos
10+Exercícios
5Labs
SM · Agile Coach
Qualidade no Processo
Como Scrum Masters e Agile Coaches criam as condições para que qualidade aconteça no processo e na cultura.
5Módulos
10+Exercícios
5Labs
Referência Geral
Glossário de Qualidade
Todos os termos do roadmap em português, com busca rápida.
150+Termos
15+Categorias
Base2 Tecnologia
Base2 Tecnologia  ·  Roadmap de Qualidade
🔍
🗺️ Visão Geral

Mapa de Carreira QA

Visualize a progressão completa de Júnior a Sênior, as skills que surgem em cada nível e como elas se aprofundam ao longo da carreira.

JR
QA Júnior
Fundamentos e primeiros passos
Começa aqui
Mindset de QA
Testes Manuais
Casos de Teste
Reporte de Bugs
Azure Boards (alternativa ao Jira)
Caixa Preta / Cinza
Smoke, Sanity, Regressão
Teste Exploratório
Git básico
HTTP e REST básico
SQL básico
Metodologias Ágeis
Intro à Automação
Docker básico para QA
evolui para
PL
QA Pleno
Autonomia técnica e estratégia
Aprofunda
Automação E2E (Cypress, Playwright)
API Testing (Postman, REST Assured)
BDD / Cucumber
Git avançado + CI/CD
SQL avançado
Estratégia de testes
Surge aqui
Performance (k6, Gatling)
Mobile (Appium)
Contract Testing (Pact)
Robot Framework
Selenium WebDriver
Selenium Grid
Feature Flags
Quality Gates no CI
Azure DevOps Pipelines
Testcontainers
Paralelismo e Matrix Builds
Acessibilidade (WCAG)
Shift-Left Testing
Segurança para QA
IA para QA
Mentoria de júniores
Testes de Mutação
evolui para
SR
QA Sênior
Visão sistêmica e liderança técnica
Aprofunda
Arquitetura de testes
Performance avançada
Segurança (OWASP)
Observabilidade
Liderança de times QA
Surge aqui
Quality Engineering
Chaos Engineering
TestOps / QAOps
Compliance e Regulatório
Microsserviços e Eventos
Data Literacy
Decisão Estratégica
FinOps de Testes
SAFe e Agilidade em Escala
Estratégia de Ambientes
Azure DevOps (Test Plans + Boards)
Definição de padrões
Influência cross-team
Estratégia P2P
Soft Skills para QA
Surge neste nível
Aprofunda do nível anterior
🛠️ Referência Geral

Mapa de Ferramentas por Linguagem

Um guia de referência rápida que mapeia as principais ferramentas de qualidade por ecossistema de linguagem. Use para escolher o stack certo para o seu contexto ou para expandir o conhecimento além da sua linguagem principal.

Java

O ecossistema Java é o mais consolidado no mercado enterprise. As ferramentas têm vasta documentação, integração nativa com Maven/Gradle e amplo suporte corporativo.

JUnit 5TestNGRestAssuredSelenium WebDriverAppiumMockitoAllure ReportMaven SurefireGatlingWireMockPITest (mutation)ArchUnit
🔑 Quando usar
  • JUnit 5: Testes unitários e de integração, padrão em qualquer projeto Java moderno.
  • RestAssured: Automação de API com sintaxe fluente Given/When/Then. Ideal para stacks Spring Boot.
  • Gatling: Performance e carga em Scala/Java. Relatórios ricos e suporte a alto volume de VUs.
  • WireMock: Simulação de APIs HTTP para isolamento de dependências externas nos testes.
  • PITest: Mutation testing para Java. Mede a qualidade real dos testes inserindo mutações no bytecode.
🐍

Python

Python combina legibilidade com poder. É a linguagem preferida para testes de API, automação de dados e projetos que misturam QA com Data Science ou IA.

PytestRequestsRobot FrameworkBehavePlaywright (Python)Appium (Python)FakerAllure-PytestLocustPytest-BDDHypothesis
🔑 Quando usar
  • Pytest: Framework de testes mais versátil do Python, suporta fixtures, parametrize e plugins ricos.
  • Requests: Testes de API HTTP simples e diretos, sem overhead de frameworks maiores.
  • Robot Framework: Ideal quando o time inclui não-desenvolvedores, sintaxe keyword-driven legível para todos.
  • Locust: Performance e carga em Python puro. Fácil de hackear e integrar com pipelines Python.
  • Hypothesis: Property-based testing. Gera dados de entrada automaticamente para encontrar edge cases.
🟨

JavaScript / TypeScript

O ecossistema JS/TS domina o frontend e vem crescendo no backend. As ferramentas são modernas, rápidas e têm excelente integração com pipelines Node.js.

JestVitestPlaywrightCypressk6SupertestMSWPact-JSTesting LibraryStryker (mutation)Detox (mobile RN)
🔑 Quando usar
  • Jest: Testes unitários e de componente React/Vue/Node, o padrão do ecossistema frontend.
  • Testing Library: Testa componentes como o usuário os vê, queries por role, label e texto visível.
  • Playwright: E2E moderno com suporte a Chromium, Firefox e WebKit, excelente para TypeScript.
  • Cypress: E2E com feedback visual em tempo real, favorito para DX elevada em SPAs.
  • Stryker: Mutation testing para JS/TS. Mede eficácia real da suíte com relatório HTML detalhado.
  • Detox: E2E para React Native. Alternativa ao Appium para apps RN com melhor integração.
🔷

C#

C# é o stack dominante em ambientes Microsoft e Unity. Tem ferramentas robustas e integração nativa com Azure DevOps e Visual Studio.

xUnitNUnitMSTestRestSharpSelenium (C#)Playwright (C#)SpecFlowMoqNSubstituteNBomber (perf)WireMock.NET
🔑 Quando usar
  • xUnit: Framework de testes moderno para .NET, mais flexível e extensível que NUnit e MSTest.
  • RestSharp: Cliente HTTP para automação de APIs REST em .NET, sintaxe limpa e tipagem forte.
  • SpecFlow: BDD com Gherkin no ecossistema .NET, geração de relatórios com SpecFlow+LivingDoc.
  • NBomber: Performance e carga em C#. Integra nativamente com o ecossistema .NET e Azure.
  • NSubstitute: Mocking fluente para .NET. Alternativa mais simples que Moq para projetos modernos.

Performance e Carga

Ferramentas de performance são em grande parte independentes de linguagem. A escolha certa depende do protocolo testado, do volume de VUs necessário e da integração com o CI.

k6 (JS)Gatling (Scala/Java)JMeter (Java)Locust (Python)NBomber (C#)Artillery (JS)
🔑 Quando usar
  • k6: Scripts em JS, ótima DX, integração nativa com Grafana e CI/CD. Melhor opção para a maioria dos times modernos.
  • Gatling: Alto volume, relatórios ricos, preferido em stacks Java enterprise.
  • JMeter: Mais antigo, GUI visual, útil para times que já o conhecem. Mais verboso que k6.
  • Locust: Python puro, fácil de hackear, ideal para times com Python como linguagem principal.

Acessibilidade

Ferramentas de acessibilidade se dividem em automáticas (detectam ~30-40% dos problemas) e assistivas (simulam a experiência real). Use sempre as duas, automáticas integram com CI, assistivas revelam o que escapa da automação.

axe-coreaxe DevToolsWAVELighthouse (CI)NVDA (Windows)VoiceOver (Mac/iOS)TalkBack (Android)Pa11y
🔑 Quando usar
  • axe-core: Integra com Playwright, Cypress e Jest. Gate de CI para violações WCAG.
  • Lighthouse: Audit de acessibilidade + performance + SEO. Roda no CI via CLI.
  • NVDA / VoiceOver / TalkBack: Testes manuais com leitor de tela. Insubstituíveis para validar a experiência real.
  • WAVE: Extensão visual para inspeção rápida durante desenvolvimento.
🔒

Segurança

Ferramentas de segurança para QA: DAST (testa a aplicação em execução) e SAST (analisa o código estático). O QA lida principalmente com DAST, ferramentas que escaneiam a aplicação em busca de vulnerabilidades do OWASP Top 10.

OWASP ZAPBurp Suite CommunitySnykSonarQube (SAST)CodeQLDependabotOWASP Juice Shop
🔑 Quando usar
  • OWASP ZAP: DAST open-source, modo automático integra com CI. Referência para QA iniciando em segurança.
  • Burp Suite Community: Proxy de interceptação para testes manuais e exploração de vulnerabilidades.
  • Snyk: Detecta vulnerabilidades em dependências. Integra com GitHub, GitLab e CI/CD.
  • OWASP Juice Shop: App vulnerável para prática ética de security testing.
📋

Gestão de Testes

Ferramentas de gestão organizam casos de teste, execuções, ciclos de regressão e rastreabilidade. A escolha depende do tamanho do time, integração com o tracker de bugs e necessidade de relatórios formais.

MeloQA 🇧🇷TestRailZephyr (Jira)Xray (Jira)qTestAllure TestOpsReportPortal
🔑 Quando usar
  • MeloQA: Plataforma brasileira, interface em português, integra com Jira. Ideal para times iniciando gestão formal de testes.
  • Zephyr / Xray: Plugins nativos do Jira. Sem fricção para times que já vivem no Jira.
  • Allure TestOps / ReportPortal: Focados em resultados de automação. Transformam dados de CI em dashboards de qualidade.
🤖

IA para QA

A IA está entrando no toolkit de QA em várias camadas: geração de casos de teste, autocomplete de código, análise de logs, detecção de flaky tests e testes visuais inteligentes. O QA moderno precisa saber onde ela amplifica e onde seu julgamento ainda é insubstituível.

GitHub CopilotQodo (ex-CodiumAI)Applitools EyesTestimMablDiffblue CoverClaude / ChatGPT
🔑 Quando usar
  • GitHub Copilot / Claude: Geração de casos de teste, scripts de automação, análise de logs e revisão de código de teste.
  • Qodo: Sugere testes unitários diretamente no editor. Integra com VS Code e JetBrains.
  • Applitools Eyes: Testes visuais com IA. Detecta regressões visuais ignorando diferenças irrelevantes (anti-aliasing, fontes).
  • Mabl / Testim: Plataformas com self-healing, os seletores se adaptam automaticamente quando a UI muda.
📡

Observabilidade e Monitoramento

O QA Pleno e Sênior precisa entender as ferramentas de observabilidade para validar que o sistema se comporta bem em produção. Logs, métricas e traces são as três dimensões da observabilidade.

DatadogGrafanaSentryNew RelicPrometheusJaegerOpenTelemetryELK Stack
🔑 Quando usar
  • Sentry: Monitoramento de erros em produção. Captura stack traces com contexto. Essencial para QA validar pós-deploy.
  • Grafana + Prometheus: Dashboards de métricas. Ideal para visualizar resultados de testes de performance.
  • Datadog / New Relic: Plataformas completas de APM. Mais usadas em ambientes enterprise.
  • OpenTelemetry: Padrão aberto para instrumentação. Garante portabilidade entre ferramentas.
🔵

Go

Go está crescendo rapidamente em stacks de backend de alta performance. Sua cultura de testes está embutida na linguagem, o pacote testing é nativo. Para QAs que trabalham com sistemas Go, conhecer o ecossistema de testes é diferencial.

testing (stdlib)TestifyGinkgo + Gomegahttptestk6 (performance)GoMock
🔑 Quando usar
  • testing (stdlib): Pacote nativo do Go. Sem dependências externas, direto e idiomático.
  • Testify: Adiciona assertions expressivas e mocking. A extensão mais popular do ecossistema Go.
  • Ginkgo + Gomega: Framework BDD para Go. Ideal para times que preferem Given/When/Then.
  • httptest: Pacote stdlib para testar handlers HTTP sem levantar um servidor real.
💎

Ruby

Ruby ainda tem presença relevante em projetos legados e times com Ruby on Rails. O ecossistema de testes Ruby é maduro e expressivo: RSpec é referência de como um framework BDD deve ser.

RSpecMinitestCapybaraSelenium (Ruby)Cucumber (Ruby)FactoryBot
🔑 Quando usar
  • RSpec: Framework BDD mais popular de Ruby. Sintaxe expressiva com describe, context e it. Padrão em projetos Rails.
  • Capybara: DSL para testes de integração web. Integra com Selenium e outros drivers.
  • FactoryBot: Geração de dados de teste orientada a objetos.
  • Cucumber (Ruby): A implementação original do Cucumber: BDD com Gherkin em projetos Ruby/Rails.
💡

Critérios para Escolha do Stack

Não existe ferramenta universalmente melhor: existe a ferramenta certa para o contexto. Antes de adotar qualquer ferramenta, avalie esses critérios em ordem de prioridade.

🔑 Critérios de Decisão
  • Linguagem do time: Prefira a linguagem que devs e QAs já conhecem. Reduz custo de revisão, onboarding e manutenção.
  • Tipo de teste: Unitário → mesma linguagem do código. API → Requests/RestAssured/Supertest. E2E web → Playwright ou Cypress. Mobile → Appium ou Detox. Performance → k6 / Gatling / Locust. Segurança → OWASP ZAP / Burp. Acessibilidade → axe + leitor de tela manual.
  • Protocolo testado: HTTP/REST → qualquer ferramenta. gRPC → k6 ou Gatling. WebSocket → k6 ou Playwright. GraphQL → Playwright, Cypress ou Postman.
  • Integração com CI: Verifique suporte nativo ao seu CI (GitHub Actions, Azure DevOps, GitLab CI, Jenkins) antes de adotar. Ferramentas sem CLI ou sem saída JUnit XML dificultam pipelines.
  • Maturidade da comunidade: Estrelas no GitHub, Stack Overflow ativo e documentação atualizada indicam que você não ficará preso sem resposta.
  • Custo de manutenção: Self-healing (Mabl, Testim) reduz manutenção mas custa mais. Open-source exige mais setup mas tem custo zero. Avalie o TCO, não só o preço de entrada.
  • IA disponível: Prefira ferramentas com boa integração com Copilot/LLMs. Playwright, Jest e Pytest têm excelente suporte em modelos de linguagem.
∞ Fundamento Atemporal

Soft Skills para QA

Nenhuma ferramenta ou framework substitui a capacidade de dar feedback difícil com cuidado, resolver um conflito sem criar ressentimento, influenciar decisões sem ter autoridade formal ou apresentar resultados para quem não fala a língua técnica. Essas habilidades são o que separa um QA bom de um QA indispensável.

💬

Feedback: Como Dar e Como Receber

Feedback é uma das ferramentas mais poderosas de um QA, e uma das mais temidas. Saber apontar um problema sem atacar a pessoa, e saber receber uma crítica sem se defender reflexivamente, transforma a cultura de qualidade do time inteiro.

🏋️ Como aprofundar por nível
  • Júnior: Pratique o modelo SBI: Situação (onde/quando), Comportamento (o que foi feito), Impacto (qual o efeito). Substitui "você sempre faz isso" por dados observáveis.
  • Pleno: Separe feedback de código de feedback de postura. Code review exige objetividade; feedback de comportamento exige contexto e cuidado. Misturar os dois cria defensividade.
  • Sênior: Crie rituais de feedback no time: retrospectivas com espaço seguro, 1:1s regulares, cultura de "feedback como presente". Meça se as pessoas do time pedem feedback ativamente, esse é o indicador de maturidade.

Resolução de Conflitos

QA vive na fronteira entre "está pronto" e "não está bom o suficiente". Conflitos com desenvolvedores, com POs e com o próprio time são inevitáveis. A habilidade não é evitá-los, é navegar por eles sem comprometer a qualidade nem as relações.

🏋️ Como aprofundar por nível
  • Júnior: Quando houver discordância sobre um bug (é bug ou é comportamento esperado?), leve dados, não opiniões. "Segundo o critério de aceite da história X, o comportamento esperado era Y" é mais eficaz que "eu acho que está errado".
  • Pleno: Aprenda a separar a posição do interesse. O dev quer que o bug seja fechado (posição). O interesse real é entregar uma feature funcionando. O QA quer reprovar o bug (posição). O interesse real é que o usuário não seja impactado. Partindo dos interesses, soluções surgem mais facilmente.
  • Sênior: Conflitos recorrentes geralmente indicam gaps de processo, não de personalidade. Se QA e dev brigam sempre pelo mesmo tipo de coisa, o problema é uma definição de critérios, não uma relação interpessoal. Endereçe o processo, não a pessoa.
🧲

Influência Sem Autoridade

QA raramente tem poder hierárquico para impor mudanças. O que tem é credibilidade técnica, dados e relacionamentos. Influenciar sem autoridade é a arte de fazer as pessoas quererem fazer o que precisa ser feito, sem precisar de um cargo para isso.

🏋️ Como aprofundar por nível
  • Júnior: Construa credibilidade sendo consistente: quando você diz que algo vai dar problema e dá, as pessoas passam a ouvir o que você diz antes. Credibilidade se constrói em pequenas entregas, não em grandes discursos.
  • Pleno: Traduza problemas de qualidade para a linguagem de quem você quer influenciar. Para o dev: impacto técnico. Para o PO: impacto no usuário e no negócio. Para o gestor: risco e custo. A mesma informação, embalada de formas diferentes, chega diferente.
  • Sênior: Crie aliados. Um QA que convence o dev de que qualidade é responsabilidade de todos multiplica sua influência por N pessoas. Não tente influenciar todo mundo sozinho, construa uma rede de pessoas que compartilham os mesmos valores de qualidade.
🤝

Trabalho em Equipe e Colaboração

QA não trabalha isolado. Funciona em times com devs, designers, POs, SREs e às vezes com vários times ao mesmo tempo. Colaborar bem significa saber quando trazer informação, quando pedir ajuda, quando tomar a frente e quando apoiar.

🏋️ Como aprofundar por nível
  • Júnior: Evite o modelo "QA como porteiro": não espere o código chegar para testar. Entre nas conversas cedo, contribua com perguntas de borda, ajude o time a pensar nos cenários antes de codar.
  • Pleno: Pair testing com desenvolvedor é uma das práticas de colaboração mais poderosas e subutilizadas. Testar junto gera entendimento mútuo, reduz o tempo de ciclo e cria empatia entre as duas funções.
  • Sênior: Mapeie o nível de colaboração do time usando uma métrica simples: quantas vezes por semana QA e dev se falam sobre qualidade fora das cerimônias formais? Se a resposta for "raramente", há um gap de cultura a endereçar.
👂

Escuta Ativa

A maior parte dos bugs começa numa informação que foi mal entendida. Escuta ativa não é esperar a sua vez de falar, é processar de verdade o que a outra pessoa está dizendo, fazer as perguntas certas e confirmar o entendimento antes de agir. Para um QA, é uma habilidade técnica tanto quanto uma interpessoal.

🏋️ Como aprofundar por nível
  • Júnior: Após cada conversa sobre requisitos ou bugs, escreva um resumo do que você entendeu e compartilhe com a pessoa. "Só para confirmar meu entendimento: X, Y e Z. Correto?" Previne retrabalho e demonstra cuidado.
  • Pleno: Em reuniões de refinamento, pratique fazer uma pergunta por vez e esperar a resposta completa antes de fazer a próxima. Resista à tentação de resolver antes de entender. Perguntas abertas geram mais informação: "como você imagina que isso se comporta quando...?" em vez de "isso deveria fazer X?"
  • Sênior: Observe o padrão de quem fala e quem não fala nas cerimônias do time. Escuta ativa também é criar espaço para que pessoas mais quietas contribuam. Um facilitador que só ouve as vozes mais altas perde informação crítica.
📊

Apresentação de Resultados para Stakeholders

Bug count não é relatório de qualidade. Apresentar resultados para stakeholders é a habilidade de transformar dados técnicos em narrativa de negócio: o que está em risco, o que foi mitigado, o que precisa de decisão. A pessoa que consegue fazer isso se torna uma referência estratégica, não apenas operacional.

🏋️ Como aprofundar por nível
  • Júnior: Comece a registrar o que você faz além de contar bugs. Tempo de execução dos testes, cobertura de critérios de aceite, cenários explorados. Dados são a matéria-prima de um relatório.
  • Pleno: Construa dashboards simples que respondam às perguntas dos stakeholders: "Podemos fazer o deploy com segurança?" e "Qual o risco de ir para produção agora?" são as perguntas reais. Tudo que não responde a isso é ruído para quem toma decisões.
  • Sênior: Adapte o formato ao público: dev quer detalhes técnicos de falha, PO quer impacto no usuário, C-level quer risco e custo estimado. A mesma métrica de cobertura conta histórias diferentes para pessoas diferentes. Cuide da narrativa.
🧪

Laboratório: Soft Skills na Prática

Exercícios para desenvolver as habilidades interpessoais no contexto real de trabalho

1
Mapeie seu ponto cego interpessoal

Antes de melhorar qualquer soft skill, você precisa saber onde está hoje. Este exercício é um diagnóstico honesto.

  • 1. Para cada uma das 6 habilidades deste módulo, dê uma nota de 1 a 5 para si mesmo: 1 = evito completamente, 5 = me sinto confortável e eficaz.
  • 2. Pense no último mês: em que situações você deveria ter usado cada uma dessas habilidades e não usou, ou usou mal? Anote uma situação concreta por habilidade.
  • 3. Identifique a habilidade com menor nota e maior frequência de uso no seu trabalho atual. Esse é o ponto de entrada com maior retorno.
  • 4. Se possível, peça para um colega de confiança responder como vê você nas mesmas 6 habilidades. A diferença entre a sua autopercepção e a percepção de fora é seu ponto cego.
💡 Dica: Soft skills se desenvolvem com prática deliberada em situações reais, não só com leitura. Escolha uma situação por semana para aplicar a habilidade em foco.
2
Pratique o feedback SBI em uma situação real

Feedback é a soft skill mais transformadora para um QA e a que mais pessoas evitam. Este exercício força a prática no mundo real.

  • 1. Identifique uma situação recente em que você gostaria de ter dado um feedback (para um dev, um PO, um colega QA) mas não deu.
  • 2. Escreva o feedback usando o modelo SBI: Situação (quando e onde aconteceu), Comportamento (o que a pessoa fez, comportamento observável, não interpretação), Impacto (qual foi o efeito concreto no trabalho ou no time).
  • 3. Leia o feedback escrito e verifique: tem alguma palavra de julgamento? ("sempre", "nunca", "você é...") Se sim, reescreva substituindo pelo comportamento observado.
  • 4. Se fizer sentido, entregue o feedback de verdade. Se não, guarde como treino e repita com a próxima situação.
3
Construa um mini-relatório de qualidade para stakeholders

Transforme dados técnicos de qualidade em uma narrativa de negócio que qualquer pessoa no seu time consiga entender e usar para tomar decisões.

  • 1. Escolha um sprint ou ciclo de desenvolvimento recente. Colete os dados de qualidade disponíveis: bugs encontrados por severidade, cobertura de testes, itens que voltaram do QA, tempo médio de ciclo.
  • 2. Para cada dado, responda: o que isso significa para o produto? Para o usuário? Para o próximo sprint? Transforme o número em frase de impacto.
  • 3. Monte um slide ou documento de no máximo uma página com três seções: O que testamos, O que encontramos, O que recomendamos para o próximo ciclo.
  • 4. Compartilhe com alguém fora da área técnica (PO, gestor, designer). Peça uma reação honesta: ficou claro? Eles saberiam tomar uma decisão baseados nisso?
💡 Dica: Um bom relatório de qualidade responde uma pergunta: "Podemos avançar com confiança?" Se o leitor ainda tiver dúvida depois de ler, o relatório precisa de mais trabalho.
4
Trabalho em equipe sob pressão de release

Simule situação de pressão e pratique colaboração efetiva.

  • 1. Simule com colega: 2 horas para o release, QA encontrou bug de alta severidade, PO quer liberar assim mesmo e dev diz que leva 4 horas para corrigir. Conduza a conversa e cheque a decisão.
  • 2. Avalie a colaboração: as perspectivas foram ouvidas? A decisão foi baseada em dados ou em pressão emocional? O risco foi comunicado claramente?
  • 3. Documente como template de 'high-pressure release decision': quem deve estar na conversa, quais informações são necessárias, quais são as opções e quem tem a palavra final.
💡Dica: Decisões de release sob pressão são tomadas melhor quando o processo está definido antes da pressão. Processo acordado em calma sobrevive; processo improvisado sob pressão raramente produz boas decisões.
5
Escuta ativa em contexto de conflito

Pratique escuta ativa em conversa difícil sobre qualidade.

  • 1. Simule com colega: dev frustrado porque o QA 'sempre rejeita histórias na última hora'. Ouça sem interromper por 3 minutos. Depois parafraseie: 'o que estou ouvindo é que...' e pergunte se entendeu corretamente.
  • 2. Identifique os sentimentos por trás da frustração: o dev quer feedback mais cedo? Os critérios de aceite não estão claros? Ele não sente que o QA entende as restrições técnicas?
  • 3. Proponha mudança de processo que endereça a causa raiz. Comprometa-se com ação específica e prazo. Acompanhe na próxima retrospectiva se resolveu.
💡Dica: Na maioria dos conflitos entre QA e dev, a causa raiz é um processo mal definido, não diferença de valores. Conflitos resolvidos com processo são duráveis; resolvidos com 'vou ser menos rigoroso' não são.
6
Apresentação de resultados para stakeholders executivos

Prepare e execute apresentação para público executivo.

  • 1. Com dados dos últimos 2 meses, prepare apresentação de 5 minutos: o CTO quer saber se o time está pronto para dobrar o ritmo de features sem comprometer a qualidade.
  • 2. Estruture em 3 partes: situação atual de qualidade (dados), gap entre capacidade atual e necessária para o aumento de ritmo e recomendação com investimento necessário e ROI.
  • 3. Apresente para colega simulando CTO cético. Responda: 'não podemos só contratar mais QA?' e 'quanto economizaríamos aceitando mais risco em produção?' Com dados, não opinião.
💡Dica: Executivos tomam decisões com base em risco vs. recompensa. Sua apresentação deve quantificar o risco de não investir com a mesma precisão que quantifica o custo de investir.
🟢 Trilha Júnior

Fundamentos para quem está começando em QA

Conceitos essenciais, primeiras ferramentas e boas práticas para iniciar sua carreira como Quality Assurance Engineer. Foco em entender o que é qualidade, como testar manualmente e organizar seu trabalho.

✅ Sem pré-requisitos técnicos 📅 3–6 meses de estudo
14Módulos
21+Exercícios
29+Recursos
13Labs
Seu progresso na trilha Júnior 0 de 146 itens (0%)
Você ainda não concluiu nenhum módulo nesta trilha.
🌱

Seu início como QA, o que esperar e como se destacar

Um guia honesto sobre o dia a dia, as expectativas e os erros mais comuns de quem está começando.

Como é o seu dia a dia

Como QA Júnior, você vai passar a maior parte do tempo executando testes manuais, documentando casos de teste e reportando bugs. Você vai participar de cerimônias ágeis, daily, planning, refinamento e review, e aprender a fazer perguntas que ninguém ainda fez sobre as histórias de usuário.

Na prática, seu trabalho começa antes do desenvolvimento: lendo a história, entendendo os critérios de aceite e pensando em cenários de borda. Termina depois do deploy: validando o ambiente de produção e confirmando que o que foi entregue é o que foi pedido.

O que é esperado de você

  • Curiosidade antes de certeza. Júniores que fazem boas perguntas valem mais do que os que fingem que entenderam.
  • Bugs bem reportados. Um bug sem steps de reprodução, sem evidência e sem ambiente identificado não serve para ninguém. Aprenda a reportar com qualidade desde o início.
  • Comunicação proativa. Se encontrou um bloqueio, comunique. Se vai atrasar, avise antes. O time precisa de previsibilidade.
  • Aprendizado constante. Você não precisa saber tudo, mas precisa estar sempre aprendendo algo. Reserve tempo toda semana para estudar.
  • Atenção ao detalhe. QA é a última linha de defesa antes do usuário. Detalhes importam.

O que ainda não é esperado

Autonomia total, definição de estratégia de testes, liderança de processos ou domínio de automação, esses são objetivos do Pleno. Como Júnior, é esperado que você precise de direcionamento e que peça ajuda. Isso não é fraqueza, é consciência do seu estágio.

Também não é esperado que você saiba tudo sobre o produto no primeiro mês. Contexto se constrói com tempo, conversas e muita observação.

Armadilhas comuns, e como evitá-las

  • "Tá funcionando, então passou." Funcionar não é o mesmo que estar correto. O comportamento pode ser o esperado pelos devs mas não pelo usuário. Sempre questione.
  • Testar só o happy path. O sistema vai funcionar quando tudo der certo. A questão é o que acontece quando algo dá errado. Cenários de erro são tão importantes quanto os de sucesso.
  • Não documentar o que testou. Se não está documentado, para o time não aconteceu. Evidência é parte do trabalho.
  • Esperar ser chamado para testar. QA proativo entra nas conversas antes do desenvolvimento começar. Você não precisa esperar a história chegar para você.

Como saber que está pronto para o Pleno

Você está pronto para avançar quando consegue trabalhar com autonomia no ciclo de testes, sem precisar de direcionamento constante, quando começa a identificar padrões de bugs recorrentes e propõe melhorias de processo, e quando sente a necessidade de automatizar o que faz repetidamente.

O sinal mais claro: quando o time começa a te pedir opinião sobre qualidade, não apenas execução.

"O QA Júnior que se destaca não é o que encontra mais bugs, é o que faz as perguntas certas antes que os bugs existam."
🟢 Júnior · Módulo 1

Fundamentos de QA

Antes de testar qualquer coisa, você precisa aprender a pensar como alguém que busca falhas, não como alguém que quer confirmar que tudo funciona.

🎯

Mindset de QA

O QA pensa como o usuário mais exigente possível. Enquanto o dev pergunta "isso funciona?", o QA pergunta "o que pode dar errado?". Esse olhar crítico é treinável e é a habilidade mais importante do iniciante.

🏋️ Exercícios Rápidos
  • Escolha um app do seu celular e liste 10 cenários onde algo poderia dar errado.
  • Para cada cenário, classifique: bug de dados, bug visual, bug de fluxo ou bug de performance.
  • Escreva a diferença entre QA (garantia de qualidade) e QC (controle de qualidade) com exemplos do dia a dia.

Verificação vs. Validação

Verificação "Estamos construindo o produto certo?", revisa documentação, requisitos, fluxos. Validação "O produto funciona para o usuário?", executa o software em condições reais. Um QA júnior precisa saber distinguir os dois contextos para aplicar a abordagem certa.

🏋️ Exercícios Rápidos
  • Dado um requisito de login, escreva 2 exemplos de verificação (sem executar código) e 2 de validação.
  • Acesse github.com/public-apis/public-apis e liste 3 atividades de verificação possíveis no README.
📐

Pirâmide de Testes

A pirâmide de testes mostra a distribuição ideal: muitos testes unitários na base (rápidos, baratos), poucos testes E2E no topo (lentos, caros). Como júnior, você vai trabalhar principalmente nos testes manuais e de integração, mas precisa entender toda a pirâmide para colaborar com o time.

🏋️ Exercícios Rápidos
  • Pesquise a pirâmide de testes e desenhe no papel, coloque exemplos reais em cada camada.
  • Para um app de e-commerce, indique qual tipo de teste é mais adequado para: calcular frete, botão de comprar, tela de cadastro.
🧪

Laboratório, Mindset e Fundamentos

Exercícios guiados para treinar o olhar de QA desde o primeiro dia

1
Mapeando riscos em um app real

Análise de um app real com olhar crítico de QA. Objetivo: treinar a percepção de falhas antes de qualquer teste formal.

  • 1. Abra qualquer app de delivery no seu celular. Navegue por 5 minutos como usuário normal.
  • 2. Agora navegue novamente fazendo perguntas: "E se o endereço estiver errado?", "E se o cartão recusar?", "E se a internet cair no momento do pagamento?"
  • 3. Liste pelo menos 10 perguntas "E se..." e classifique cada uma: Dados | Fluxo | Visual | Performance.
  • 4. Para 3 das perguntas, escreva o que o app deveria fazer (comportamento esperado) vs. o que pode estar acontecendo de errado.
💡 Dica: Comece pelos fluxos de dinheiro, pagamento, confirmação, reembolso. São os de maior risco de negócio e costumam ter mais bugs.
2
Sua primeira análise da pirâmide de testes

Analise a distribuição de testes de um projeto open source real e compare com a pirâmide ideal.

  • 1. Acesse github.com/gothinkster/realworld, este é um projeto com o mesmo app feito em várias tecnologias.
  • 2. Escolha uma implementação (ex: React, Vue ou Angular) e abra a pasta de testes. Conte os arquivos por tipo.
  • 3. Desenhe a pirâmide atual do projeto. Depois desenhe a ideal. O que está diferente?
  • 4. Escreva 2 recomendações práticas para melhorar a estratégia de testes desse projeto.
💡 Dica: Se a pasta de testes tiver mais arquivos de E2E do que unitários, o projeto tem uma "pirâmide invertida", testes lentos e caros dominam. Isso é um problema comum em times sem QA estruturado.
3
Aplicando a Pirâmide de Testes num projeto real

Analise um projeto real (ou o Sauce Demo) e identifique onde cada tipo de teste se encaixa na pirâmide.

  • 1. Desenhe a pirâmide em papel: base (unitários), meio (integração), topo (E2E). Para o Sauce Demo, liste 3 exemplos concretos de teste para cada camada.
  • 2. Identifique se a distribuição atual está invertida: muitos E2E e poucos unitários. Quais são os sintomas de uma pirâmide invertida no dia a dia?
  • 3. Proponha uma redistribuição: quais testes E2E existentes poderiam ser substituídos por testes de integração ou unitários sem perder cobertura de risco?
💡Dica: A pirâmide não é uma regra rígida, é um guia de custo x velocidade x confiabilidade. Justifique sempre suas escolhas com base no risco do projeto.
🟢 Júnior · Módulo 2

Tipos de Teste

Entenda os diferentes tipos de teste que existem: por abordagem, execução, momento e escopo. A base conceitual que todo QA precisa dominar para comunicar estratégia de qualidade com clareza.

Teste Caixa Preta

Você testa o comportamento externo do sistema sem ver o código. Recebe um requisito, define entradas e verifica se as saídas são as esperadas. É a abordagem central do QA manual e a mais usada no mercado para validação funcional.

🏋️ Exercícios Rápidos
  • Para um campo de login, liste todas as combinações de entrada que você testaria (válidas e inválidas).
  • Acesse practicetestautomation.com/practice/login e execute testes manuais documentando cada resultado.

Noções de Caixa Branca

Mesmo como júnior é útil saber que existe o teste caixa branca, onde o testador analisa o código. Você não precisa ser expert agora, mas entender que existem caminhos lógicos no código ajuda a formular perguntas melhores para os devs e a entender relatórios de cobertura.

🏋️ Exercícios Rápidos
  • Peça a um dev para mostrar uma função simples. Identifique os caminhos possíveis (if/else) sem executar o código.
  • Pesquise o que é "cobertura de código" e escreva em suas palavras o que significa 80% de cobertura.
🌫️

Teste Caixa Cinza

A combinação das duas abordagens: você tem acesso parcial ao funcionamento interno, logs, banco de dados, DevTools, headers HTTP, mas não lê o código diretamente. É a abordagem mais comum no dia a dia de um QA próximo ao time de dev: você testa pela interface mas valida o estado interno (cookies, tokens, registros no banco) para confirmar o comportamento correto.

🏋️ Exercícios Rápidos
  • Faça login num sistema e use o DevTools para verificar se o token de sessão foi criado corretamente nos cookies.
  • Após um cadastro, peça para um dev confirmar se o registro foi salvo com os dados corretos no banco.
🔬

Funcional vs. Não-Funcional

Testes funcionais verificam o que o sistema faz, "o login funciona?", "o carrinho calcula o total corretamente?". Testes não-funcionais verificam como o sistema se comporta, "aguenta 1000 usuários simultâneos?", "carrega em menos de 2 segundos?". Como júnior, a maioria do trabalho será funcional, mas é essencial entender que performance, segurança e acessibilidade também são responsabilidade de QA.

🏋️ Exercícios Rápidos
  • Pegue 10 casos de teste de um sistema e classifique cada um como funcional ou não-funcional.
  • Para um e-commerce, liste 3 exemplos de cada. Qual a diferença na forma de executar?
📋

Smoke, Sanity e Regressão

Smoke test: verifica se o build não "pegou fogo", 5 a 10 fluxos críticos para garantir que o sistema está minimamente funcional. Sanity test: valida que uma correção específica funcionou sem quebrar o entorno imediato. Regressão: re-executa a suíte para garantir que nada parou de funcionar após uma mudança. Smoke é rápido e amplo, sanity é focado, regressão é completo e sistemático.

🏋️ Exercícios Rápidos
  • Para o Sauce Demo, defina quais 5 testes seriam seu smoke test. Justifique.
  • Um dev corrigiu "preço não aparecia no carrinho". Quais testes você executaria no sanity?
🎯

Manual, Exploratório e Ad-hoc

Manual estruturado: segue casos de teste documentados passo a passo. Exploratório: você aprende o sistema enquanto testa, sem script, design e execução simultâneos. Eficaz para bugs que scripts nunca encontrariam. Ad-hoc: informal, baseado em intuição, útil para investigação rápida. Saber quando usar cada um é uma habilidade importante.

🏋️ Exercícios Rápidos
  • Passe 20 minutos em teste exploratório no Sauce Demo. Anote tudo que testou. Compare com o que um script seguiria.
  • Qual a diferença entre exploratório e ad-hoc? Quando você usaria cada um?
🏗️

Níveis: Unitário, Integração, Sistema e UAT

O escopo define o que está sendo testado. Unitário: uma função isolada, responsabilidade do dev. Integração: dois ou mais componentes conversando (ex: API + banco). Sistema: o software completo em conjunto. UAT: o usuário final valida que atende ao negócio. O QA atua principalmente em sistema, mas precisa entender todos os níveis para comunicar bugs com precisão.

🏋️ Exercícios Rápidos
  • Para um e-commerce, dê um exemplo de bug em cada nível: unitário, integração, sistema e UAT.
  • Por que um bug unitário é mais barato de corrigir do que o mesmo bug em UAT?
🧪

Laboratório, Tipos e Abordagens de Teste na Prática

Um exercício por tipo, do conceito à execução

1
Caixa Preta: teste estruturado de login

Aplique partição de equivalência em cima de um formulário real sem nenhum conhecimento do código.

  • 1. Acesse The Internet / Login. Antes de clicar em qualquer coisa, defina suas partições: credenciais válidas, usuário inválido, senha inválida, ambos inválidos, campos vazios, espaços em branco.
  • 2. Para cada partição escreva um caso de teste: ID | Entrada | Resultado Esperado. Credenciais válidas: tomsmith / SuperSecretPassword!.
  • 3. Execute todos os casos e preencha: Resultado Obtido | Status (Passou/Falhou).
  • 4. Algum resultado surpreendeu você? Registre como observação ou bug.
💡 Dica: Use uma planilha para documentar, ID, Descrição, Entrada, Esperado, Obtido, Status. Isso já é um caso de teste profissional pronto para um sistema de gestão de testes.
2
Caixa Branca: lendo cobertura de código

Entenda o que um relatório de cobertura diz, e o que ele não diz.

  • 1. Clone o repositório RealWorld (qualquer implementação frontend). Rode os testes existentes e gere o relatório de cobertura com npm test -- --coverage.
  • 2. Abra o relatório HTML em coverage/lcov-report/index.html. Identifique: qual arquivo tem menor cobertura? Quais linhas não estão cobertas?
  • 3. Para uma função com cobertura abaixo de 60%, mapeie os caminhos possíveis (if/else, ternários) sem executar o código. Quantos testes seriam necessários para cobrir todos os caminhos?
  • 4. Escreva pelo menos 1 teste novo que cubra um caminho descoberto. A cobertura subiu?
💡 Dica: 100% de cobertura não significa ausência de bugs, significa que o código foi executado, não que o comportamento está correto. Cobertura é um indicador, não uma garantia.
3
Caixa Cinza: validando estado interno no login

Use DevTools para verificar o que acontece por trás da interface durante um fluxo de autenticação.

  • 1. Acesse OrangeHRM Demo. Abra o DevTools (F12) antes de logar. Vá na aba Network e ative a opção "Preserve log".
  • 2. Faça login com Admin / admin123. Na aba Network, encontre a requisição de autenticação. Quais headers foram enviados? Qual o status code da resposta?
  • 3. Vá em Application → Cookies. Quais cookies foram criados após o login? Têm as flags HttpOnly e Secure?
  • 4. Faça logout e verifique: os cookies foram removidos? Copie a URL de uma página autenticada e tente acessar sem estar logado. O sistema redireciona corretamente?
💡 Dica: Verificar que cookies de sessão são removidos no logout é um teste de segurança essencial. Muitos sistemas fazem o redirect mas esquecem de invalidar o token no servidor.
4
Funcional vs. Não-Funcional: classificando e executando

Identifique os dois tipos num sistema real e execute pelo menos um de cada.

  • 1. Liste 10 cenários de teste para o Sauce Demo. Para cada um, classifique: funcional ou não-funcional. Se não-funcional, especifique o subtipo (performance, compatibilidade, usabilidade, segurança).
  • 2. Execute 3 testes funcionais documentando resultado em tabela.
  • 3. Execute 1 teste não-funcional básico: abra o Lighthouse no DevTools (aba Lighthouse), rode um relatório de Performance na página de produtos do Sauce Demo. Qual o score? Qual a métrica mais crítica?
  • 4. Compare: como a forma de documentar um resultado funcional difere de um não-funcional?
💡 Dica: O Lighthouse é uma ferramenta de não-funcional que qualquer QA pode usar sem nenhum setup, está embutido no Chrome. Score abaixo de 50 em Performance já é um sinal de alerta real.
5
Smoke, Sanity e Regressão: montando as três suítes

Defina e execute as três suítes para o Sauce Demo, entendendo o propósito de cada uma.

  • 1. Smoke: defina 5 testes que verificam se o Sauce Demo está "vivo". Critério: se qualquer um falhar, você bloqueia o QA e pede um novo build. Execute e documente.
  • 2. Sanity: simule que um dev corrigiu o bug "produto adicionado ao carrinho some após atualizar a página". Quais 4 a 6 testes você executaria para validar essa correção sem testar tudo? Monte e execute a suíte.
  • 3. Regressão: liste os 15 testes mais importantes do Sauce Demo. Organize em ordem de prioridade. Essa é sua suíte de regressão completa.
  • 4. Para cada suíte, documente: quantos testes, tempo estimado de execução, quando você a executaria (a cada build? a cada release? após cada bugfix?).
💡 Dica: A suíte de smoke deve ser executável em menos de 10 minutos. Se demorar mais, está grande demais. Regressão pode demorar mais, mas precisa ter um SLA definido, "nossa regressão roda em 2 horas" é uma informação importante para o time.
6
Exploratório com charter: testando além do script

Execute uma sessão de teste exploratório estruturado usando a técnica de charter.

  • 1. Defina um charter (missão) para sua sessão: "Explorar o fluxo de checkout do Sauce Demo em busca de comportamentos inesperados em cenários de borda". Defina um tempo: 25 minutos.
  • 2. Durante a sessão, tome notas contínuas: o que testou, o que encontrou, perguntas que surgiram, bugs ou estranhezas. Use a estrutura SBTM (Session-Based Test Management).
  • 3. Tente cenários que um script nunca cobriria: adicionar 99 unidades do mesmo produto, remover todos os itens no meio do checkout, voltar ao passo anterior com o botão do browser, digitar XSS simples nos campos de texto.
  • 4. Ao final, escreva um relatório de sessão: o que você testou, o que encontrou, cobertura estimada, sugestões de testes adicionais.
💡 Dica: Teste exploratório não é teste aleatório, é teste intencional sem script pré-definido. O charter dá direção, o tempo dá foco, as notas dão rastreabilidade.
7
Níveis de teste: identificando onde cada bug mora

Para cada nível da pirâmide, identifique e documente um bug real ou hipotético com precisão.

  • 1. Unitário: pense numa função de cálculo de desconto, calcularDesconto(preco, percentual). Quais casos de teste unitários cobririam essa função? Escreva pelo menos 5 (incluindo valores negativos, zero, percentual acima de 100).
  • 2. Integração: simule um cenário onde o serviço de carrinho chama o serviço de estoque. Quais testes de integração verificariam que a comunicação entre os dois está correta? Liste pelo menos 3 cenários.
  • 3. Sistema: execute o fluxo completo de compra no Sauce Demo do login ao "Thank you for your order". Documente cada passo e resultado : isso é um teste de sistema.
  • 4. UAT: escreva 3 critérios de aceite de negócio para o fluxo de checkout, como um usuário final os descreveria (sem linguagem técnica). Como esses critérios diferem dos testes de sistema que você escreveu no passo 3?
💡 Dica: Um bug encontrado em UAT já passou por unitário, integração e sistema sem ser detectado, isso significa que algo falhou em pelo menos um desses níveis anteriores. Identificar onde o bug "deveria ter sido pego" é uma análise de causa raiz valiosa.
🟢 Júnior · Módulo 3

Documentação e Testes Manuais

A base do trabalho de QA: escrever casos de teste claros, executar com rigor e documentar tudo.

📝

Casos e Cenários de Teste

Um caso de teste tem: pré-condição, passos numerados, dado de entrada e resultado esperado. Um cenário é o contexto de negócio de mais alto nível. Escrever casos claros é a habilidade #1 do QA júnior, se outra pessoa não consegue executar seguindo seus passos, o caso precisa melhorar.

🏋️ Exercícios Rápidos
  • Escreva 5 casos de teste para o campo de e-mail de um formulário de cadastro.
  • Peça a alguém executar seus casos sem sua ajuda, eles conseguiram? Se não, reescreva.
🌐

Chrome DevTools para QA

As DevTools são seu microscópio para aplicações web. Como júnior, foque em 3 abas: Network (ver requisições de API), Console (ver erros JavaScript) e Elements (inspecionar HTML/CSS). Esses 3 recursos já cobrem 80% do que você precisará no dia a dia.

🏋️ Exercícios Rápidos
  • Abra o DevTools (F12) em qualquer site e encontre 1 erro no Console.
  • Na aba Network, filtre por XHR/Fetch e identifique uma chamada de API. Veja o status code e o payload.
  • Inspecione um botão com o Elements e descubra qual classe CSS controla a cor dele.
🔧

Compatibilidade entre Browsers

O mesmo site pode se comportar diferente no Chrome, Firefox, Safari e Edge. Testar compatibilidade básica faz parte do checklist júnior. Foco em: layout quebrado, funcionalidades que não funcionam em algum browser específico e diferenças de comportamento de formulários.

🏋️ Exercícios Rápidos
  • Teste o mesmo site em 2 browsers diferentes. Documente qualquer diferença visual ou funcional encontrada.
📊

Git, Primeiros Passos

Como júnior, você precisa saber o básico de Git para colaborar com o time: clone, add, commit, push e pull. Seus casos de teste, scripts e documentação devem viver em repositório, não em pasta na área de trabalho.

🏋️ Exercícios Rápidos
  • Crie um repositório no GitHub chamado "qa-studies". Faça commit dos seus primeiros casos de teste.
  • Pratique o fluxo básico: editar um arquivo git add git commit git push.
🧪

Laboratório, Casos de Teste e DevTools

Escreva casos profissionais e domine as 3 abas essenciais do DevTools

1
10 Casos de Teste para o OrangeHRM

O OrangeHRM (opensource-demo.orangehrmlive.com, login: Admin/admin123) é um sistema de RH para prática. Escreva casos de teste profissionais para o módulo de login.

  • 1. Acesse o sistema e explore o fluxo de login por 10 minutos. Anote tudo que pode ser testado.
  • 2. Crie uma planilha com colunas: ID | Título | Pré-condição | Passos | Dado de Entrada | Resultado Esperado.
  • 3. Escreva 10 casos: pelo menos 3 positivos (deve funcionar) e 5 negativos (deve rejeitar ou dar erro).
  • 4. Execute todos os casos e preencha: Resultado Obtido e Status (✅ Passou / ❌ Falhou / ⚠️ Bloqueado).
💡 Dica: Casos negativos geralmente são mais valiosos que positivos, eles encontram mais bugs. Pense em: senha expirada, usuário desativado, campos com caracteres especiais, copiar e colar espaços em branco.
2
DevTools: 3 Superpoderes Essenciais

Domine as 3 abas do DevTools mais usadas no dia a dia do QA web.

  • 1. Network: Abra reqres.in com F12. Clique em "GET /api/users". Anote: status code, tempo de resposta e 3 campos do JSON retornado.
  • 2. Console: Em qualquer site, abra o Console e veja se há erros (ícones vermelhos). Tente digitar document.title e pressione Enter. O que retornou?
  • 3. Elements: Clique direito em qualquer botão Inspecionar. Encontre o seletor CSS da cor de fundo. Dê duplo clique no valor da cor e mude para outra, veja a mudança em tempo real.
  • 4. Documente o que você descobriu nos 3 passos. Essas são as habilidades que vão impressionar no seu próximo processo seletivo.
💡 Dica: Marque a opção "Preserve log" na aba Network, assim as requisições não somem quando você navega entre páginas. Fundamental para debugar fluxos de múltiplas etapas.
3
Chrome DevTools para investigação

Use DevTools para ir além do visual e entender a causa raiz.

  • 1. No Sauce Demo, abra DevTools (F12) e a aba Network. Faça login e identifique a requisição de autenticação: endpoint, método, payload e status code.
  • 2. Adicione um produto ao carrinho observando Network. Existe chamada de API para atualizar o carrinho ou é tudo no frontend? O que isso implica para os testes?
  • 3. Use a aba Console para verificar erros JavaScript durante a navegação. Documente cada erro: mensagem, arquivo, linha e qual ação o dispara.
💡Dica: Bug report com evidência de rede (print da aba Network com falha) economiza horas de investigação para o dev.
4
Compatibilidade entre browsers

Verifique o comportamento em diferentes browsers e documente inconsistências.

  • 1. Execute o fluxo completo de compra no Chrome, Firefox e Edge. Registre qualquer diferença visual ou comportamental.
  • 2. Use o modo responsivo do DevTools para simular iPhone 12, iPad e 1920px. Verifique: menu acessível, botões clicáveis, texto legível.
  • 3. Classifique cada diferença: bug real (comportamento incorreto) ou variação aceitável (renderização diferente mas funcional). Escreva bug report só para bugs reais.
💡Dica: Diferença entre browsers nem sempre é bug. Botão levemente diferente é aceitável; formulário que não submete no Firefox não é.
🟢 Júnior · Módulo 4

Metodologias Ágeis e o Papel do QA

Entenda onde o QA se encaixa no Scrum e como colaborar com o time de desenvolvimento.

🔁

Scrum para QA Júnior

No Scrum, o QA participa de toda a sprint. Seu trabalho começa no planejamento (revisar user stories, escrever critérios de aceitação) e vai até a review. Você não é apenas quem testa no final, é quem define o que significa "pronto".

🏋️ Exercícios Rápidos
  • Pesquise o que é "Definition of Done" e escreva uma DoD para uma user story de login.
  • Crie um board no Trello com colunas: Backlog | Sprint | Em QA | Concluído. Popule com 3 user stories fictícias.
📋

Critérios de Aceitação

Critérios de aceitação definem exatamente quando uma feature está "pronta". São escritos antes do desenvolvimento e guiam os testes. O formato mais comum é BDD: Given/When/Then (Dado/Quando/Então). Escrever bons critérios é uma das competências mais valorizadas em QA júnior.

🏋️ Exercícios Rápidos
  • Para a story "Como usuário, quero redefinir minha senha", escreva 3 critérios de aceitação no formato Given/When/Then.
  • Identifique o que está faltando neste critério: "O login deve funcionar corretamente."
🌊

Waterfall vs. Ágil

O Waterfall é sequencial (fases fechadas antes de avançar) e ainda existe em contratos governamentais e projetos de hardware. O Ágil é iterativo e colaborativo. Como júnior, você vai trabalhar quase sempre em times ágeis, mas entender o Waterfall ajuda em entrevistas e em projetos de clientes enterprise.

🏋️ Exercícios Rápidos
  • Liste 3 vantagens e 3 desvantagens de cada modelo para o trabalho de QA.
🧪

Laboratório, Scrum na Prática

Simule um mini-sprint com user stories e critérios de aceitação reais

1
Mini-Sprint: do backlog ao QA

Monte um mini-sprint de 1 hora no Trello simulando seu papel como QA.

  • 1. Crie um board gratuito no Trello com 5 colunas: Backlog | Em Desenvolvimento | Pronto para QA | Em QA | Concluído.
  • 2. Crie 5 cards de user stories para um app de lista de tarefas. Cada card deve ter: a story, os critérios de aceitação (mínimo 3, no formato Given/When/Then) e a estimativa em pontos (1, 2, 3 ou 5).
  • 3. Mova 2 stories para "Pronto para QA". Para cada uma, escreva os casos de teste no próprio card.
  • 4. Execute os casos manualmente (simule o comportamento esperado) e mova para "Concluído" com o resultado documentado.
💡 Dica: Critérios vagos geram bugs em produção. "Deve salvar corretamente" é vago. "Dado que o usuário preencheu o nome com 50 caracteres, quando clicar em Salvar, então deve exibir mensagem de sucesso em menos de 2 segundos" é testável.
2
Escrevendo critérios de aceitação em BDD

Pratique a escrita de critérios de aceitação no formato Gherkin (Given/When/Then) para 3 user stories diferentes.

  • 1. Pegue esta story: "Como usuário, quero redefinir minha senha por e-mail, para recuperar acesso à minha conta." Escreva pelo menos 4 cenários BDD: sucesso, e-mail não cadastrado, link expirado e link já utilizado.
  • 2. Agora pegue: "Como admin, quero desativar um usuário, para revogar seu acesso imediatamente." Escreva 3 cenários cobrindo: desativação com sucesso, tentativa de login após desativação e reativação posterior.
  • 3. Para cada cenário, avalie: ele é testável de forma objetiva? Um QA consegue executar sem ambiguidade? Se não, reescreva.
  • 4. Compare seus critérios com os de um colega (ou use o Claude para revisá-los). Quais cenários você não pensou?
💡 Dica: Um bom critério BDD tem: Given (estado inicial claro), When (ação específica do usuário), Then (resultado verificável e mensurável). Evite "Then o sistema funciona corretamente", isso não é testável.
3
Mapeando o papel do QA em cada metodologia

Compare como o QA atua em Waterfall versus Ágil usando um cenário concreto.

  • 1. Para um sistema de login simples, escreva a sequência de atividades do QA em Waterfall: quando recebe os requisitos, quando testa, quando reporta bugs, quando aprova.
  • 2. Repita para Scrum: em quais cerimônias o QA participa? O que faz no refinamento, na planning, durante a sprint e na review?
  • 3. Identifique um bug de requisito descoberto tarde no Waterfall e trace como teria sido pego mais cedo no Ágil. Qual foi o custo da descoberta tardia?
💡Dica: Em Ágil, o QA que só testa no final da sprint trabalha em modo Waterfall dentro de um ciclo ágil. Isso é chamado de "mini-waterfall" e é um antipadrão.
4
QA em Waterfall vs. Ágil

Compare o papel do QA nas duas metodologias com um cenário concreto.

  • 1. Para um sistema de login, escreva a sequência de atividades do QA em Waterfall: quando recebe requisitos, quando testa, quando reporta e quando aprova.
  • 2. Repita para Scrum: em quais cerimônias o QA participa? O que faz no refinamento, planning, durante a sprint e na review?
  • 3. Identifique um bug de requisito descoberto tarde no Waterfall e trace como teria sido capturado mais cedo no Ágil. Calcule o custo da descoberta tardia.
💡Dica: QA que só testa no final da sprint trabalha em modo Waterfall dentro do Ágil. Isso é 'mini-waterfall', um antipadrão.
🟢 Júnior · Módulo 5

Técnicas de Teste Básicas

As duas técnicas mais fundamentais do QA: partição de equivalência e análise de valor limite.

⚖️

Partição de Equivalência

Em vez de testar infinitas combinações, agrupe os dados em classes onde todos se comportam da mesma forma e teste um representante por classe. Ex: campo de idade aceita 1-120. Partições: negativo, 1-120 (válido), acima de 120. Você não precisa testar todos os números, apenas um de cada grupo.

🏋️ Exercícios Rápidos
  • Para um campo de CEP (exatamente 8 dígitos), defina todas as partições válidas e inválidas.
  • Para um sistema de desconto que aceita cupons de 3 a 10 caracteres, quantas partições existem? Quais são?
📏

Análise de Valor Limite

Os bugs mais comuns ficam nos limites das condições (off-by-one errors). Para um campo que aceita 8-20 caracteres, os valores limite são: 7, 8, 9, 19, 20, 21. Sempre teste o valor abaixo do mínimo, o mínimo, um acima do mínimo, um abaixo do máximo, o máximo e um acima do máximo.

🏋️ Exercícios Rápidos
  • Para um campo de senha com 8-20 caracteres, liste todos os valores limite a serem testados.
  • Crie 6 casos de teste (um para cada valor limite) para um campo de quantidade de produtos: mínimo 1, máximo 99.
📊

Tabela de Decisão

A tabela de decisão mapeia combinações de condições e suas ações resultantes. É ideal para regras de negócio complexas com múltiplas variáveis: descontos por perfil + valor + região, por exemplo. Cada linha da tabela é um caso de teste. Garante cobertura completa sem redundância.

🏋️ Exercícios Rápidos
  • Para a regra "frete grátis acima de R$150 para usuários premium, acima de R$300 para usuários comuns", crie uma tabela de decisão com todas as combinações possíveis.
  • No OrangeHRM, mapeie as regras de acesso por perfil (Admin, Supervisor, Funcionário) numa tabela de decisão. Quantos casos de teste únicos ela gerou?
🧪

Laboratório, Partição e Valor Limite

Aplique as técnicas em um campo real com implementação e testes Jest

1
Validação de Senha: Partição + Valor Limite

Aplique as duas técnicas combinadas para um campo de senha com regras: 8-20 chars, pelo menos 1 número, 1 letra maiúscula.

  • 1. Primeiro, defina as partições: (a) válida, (b) muito curta, (c) muito longa, (d) sem número, (e) sem maiúscula.
  • 2. Depois, para a regra de comprimento, liste os 6 valores limite: 7, 8, 9, 19, 20, 21.
  • 3. Monte uma tabela com colunas: Valor | Partição | É Limite? | Resultado Esperado. Mínimo 10 linhas.
  • 4. Implemente a função validatePassword(pwd) em JS e escreva testes Jest para cada linha da tabela.
💡 Dica: Instale o Jest com npm init -y && npm i -D jest. Rode os testes com npx jest --coverage. Se a cobertura de branches for 100%, você cobriu todos os caminhos possíveis!
2
Transição de estados: testando o ciclo de vida de um pedido

Aplique a técnica de transição de estados para mapear e testar todos os caminhos possíveis de um pedido.

  • 1. Desenhe o diagrama de estados de um pedido de e-commerce com os estados: Criado, Confirmado, Em Separação, Enviado, Entregue, Cancelado e Devolvido.
  • 2. Para cada estado, identifique: quais eventos fazem o pedido avançar? Quais transições são inválidas? (ex: de Entregue para Em Separação não deveria ser possível)
  • 3. Crie casos de teste para: o caminho feliz completo, 3 cancelamentos em fases diferentes e 2 tentativas de transições inválidas.
  • 4. Execute os casos no site demoqa.com ou num sistema que você conheça. Documente os resultados.
💡 Dica: Transições inválidas frequentemente revelam bugs sérios. Um pedido "Entregue" que pode ser "Cancelado" pode gerar reembolso duplo ou inconsistência de estoque. Esses são os cenários mais valiosos de testar.
3
Criando uma Tabela de Decisão para regra de negócio

Use tabela de decisão para mapear todas as combinações de uma regra de negócio e derivar casos de teste.

  • 1. Regra: desconto aplicado se o cliente tem conta há mais de 1 ano E o carrinho tem mais de R$200. Monte a tabela com todas as combinações (2 condições = 4 linhas). Para cada linha, escreva o resultado esperado.
  • 2. Para cada linha da tabela, escreva um caso de teste com: dados de entrada, ação e resultado esperado. Verifique que cada combinação está coberta.
  • 3. Adicione uma terceira condição: cliente premium tem 10% adicional. Quantas linhas a tabela passa a ter? Quais novos casos surgem?
💡Dica: Tabelas de decisão são especialmente úteis para regras fiscais, de elegibilidade e cálculos de desconto, onde combinações incorretas causam impacto financeiro direto.
4
Tabela de Decisão para regra de negócio

Use tabela de decisão para cobrir todas as combinações de uma regra complexa.

  • 1. Regra: desconto se conta há mais de 1 ano E carrinho acima de R$200. Monte a tabela com as 4 combinações. Para cada linha, escreva resultado esperado.
  • 2. Para cada linha da tabela, escreva um caso de teste com: dado de entrada, ação e resultado esperado.
  • 3. Adicione uma terceira condição: cliente premium ganha 10% extra. Quantas linhas a tabela passa a ter? Quais casos novos surgem?
💡Dica: Tabelas de decisão são essenciais para regras fiscais e de desconto, onde combinações erradas causam impacto financeiro direto.
🟢 Júnior · Módulo 6

Git e Controle de Versão

Seus artefatos de teste (casos, planos, scripts) merecem versionamento. Git é a ferramenta universal para isso.

🌿

Comandos Essenciais

Para começar, você precisa de apenas 6 comandos: git clone (baixar), git add (preparar), git commit (salvar), git push (enviar), git pull (atualizar) e git status (verificar estado). Com esses 6, você já consegue colaborar em qualquer projeto.

🏋️ Exercícios Rápidos
  • Configure seu Git com nome e e-mail: git config --global user.name e user.email.
  • Crie um repositório "qa-portfolio" no GitHub. Adicione um README e faça seu primeiro commit.
🐙

GitHub para QA

Além de repositórios, o GitHub é onde você vai colaborar: Issues para registrar bugs, Pull Requests para propor mudanças, README como documentação do projeto. Um perfil GitHub ativo com repositórios de automação é o portfólio mais valorizado em processos seletivos de QA.

🏋️ Exercícios Rápidos
  • Registre um bug encontrado nos seus testes como uma Issue no GitHub com: título claro, passos para reproduzir, resultado esperado e evidência.
  • Escreva um README profissional para seu repositório qa-portfolio com instruções de como executar seus testes.
🌿

Branching e Pull Requests para QA

O QA precisa entender o fluxo de branches para validar no ambiente certo. Conceitos essenciais: feature branch (onde o dev desenvolve), staging/main (onde o QA testa), Pull Request (janela para revisão antes do merge). Participar do review de PR é uma forma de shift-left: você detecta problemas antes do código entrar em main.

🏋️ Exercícios Rápidos
  • No seu repositório qa-portfolio, crie um fluxo de branches: maindevelopfeature/login-tests. Faça commits na feature, abra um PR para develop e escreva uma descrição explicando o que foi adicionado.
  • Revise um PR de um colega (ou simule com seu próprio código): comente em pelo menos 2 pontos que podem ser melhorados. A habilidade de revisar código de teste é diferencial de QA Pleno.
🧪

Laboratório, Seu Primeiro Repositório de QA

Configure um repositório profissional que vai crescer com sua carreira

1
Repositório qa-portfolio do zero

Crie um repositório profissional que vai funcionar como portfólio de QA.

  • 1. Crie o repositório no GitHub: nome "qa-portfolio", público, com README, .gitignore para Node.js e licença MIT.
  • 2. Clone localmente: git clone https://github.com/SEU_USUARIO/qa-portfolio.git.
  • 3. Crie a estrutura de pastas: manual-tests/, test-plans/, automation/. Adicione um arquivo README em cada pasta explicando o que vai ter ali.
  • 4. Faça commits com mensagens descritivas: git commit -m "feat: add login test cases for OrangeHRM". Faça push e veja no GitHub.
💡 Dica: Use o padrão Conventional Commits nas mensagens: feat: (nova coisa), fix: (correção), test: (testes), docs: (documentação). Isso mostra profissionalismo no GitHub.
2
Simulando um fluxo de trabalho real com branches e PR

Pratique o ciclo completo de uma feature: branch, commits, PR e merge, como acontece em times reais.

  • 1. No seu repositório qa-portfolio, crie uma branch: git checkout -b feature/login-test-cases
  • 2. Adicione um arquivo manual-tests/login-test-cases.md com os 10 casos de teste que você criou no módulo anterior. Faça 3 commits separados com mensagens descritivas.
  • 3. Faça push: git push origin feature/login-test-cases. No GitHub, abra um Pull Request para a branch main. Escreva uma descrição explicando o que foi adicionado.
  • 4. Simule um code review: revise seu próprio PR, adicione um comentário em um caso de teste que poderia ser melhorado, responda ao comentário e faça um commit de melhoria.
💡 Dica: Nunca faça commit direto na main em projetos colaborativos. O fluxo branch, PR e review é padrão em qualquer empresa. Um histórico de PRs bem descritos no seu GitHub é evidência concreta de profissionalismo.
3
Simulando o fluxo de PR como QA

Pratique o fluxo completo de branch, PR e code review com olhar de QA.

  • 1. Em um repositório pessoal no GitHub, crie a branch feature/login-page a partir da main. Adicione um arquivo de caso de teste em Markdown.
  • 2. Abra um Pull Request para a main. Escreva uma descrição clara: o que muda, por que muda e como testar. Adicione uma checklist de critérios de aceite.
  • 3. Revise seu próprio PR após 30 minutos. Encontre pelo menos uma melhoria. Solicite review de um colega e aplique o feedback antes de mergear.
💡Dica: O QA que sabe fazer code review de testes e escrever boas descrições de PR é muito mais valioso do que o que só executa testes. Essa habilidade diferencia candidatos em processos seletivos.
4
Fluxo de PR com olhar de QA

Pratique o ciclo completo de branch, PR e review.

  • 1. Num repositório GitHub pessoal, crie a branch feature/login-test. Adicione um arquivo de caso de teste em Markdown.
  • 2. Abra um PR com descrição clara: o que muda, por que muda, como testar. Inclua checklist de critérios de aceite.
  • 3. Revise seu próprio PR após 30 min. Encontre uma melhoria, aplique e mergeie. Documente o aprendizado.
💡Dica: QA que sabe escrever boas descrições de PR e fazer code review de testes se diferencia em processos seletivos.
🟢 Júnior · Módulo 7

Teste Exploratório

Testar sem script, com curiosidade e criatividade, uma das habilidades mais valiosas e divertidas do QA.

🔍

O que é Teste Exploratório

No teste exploratório você aprende, projeta e executa testes ao mesmo tempo, guiado pela curiosidade. Não tem script predefinido, você segue o sistema como um usuário curioso e criativo. Muito eficaz para encontrar bugs que testes estruturados não capturam.

🏋️ Exercícios Rápidos
  • Abra o demoqa.com e explore por 20 minutos sem roteiro. Documente tudo que você testou e o que encontrou.
  • Instale a extensão Bug Magnet no Chrome, ela sugere valores extremos com clique direito nos campos.
📋

Charter de Exploração

Um charter define o objetivo da sessão: "Explorar a tela de cadastro focando em campos de texto por 30 minutos, buscando comportamentos inesperados com dados especiais." Tem 3 partes: o que explorar, como explorar, e o que procurar. Isso torna a exploração estruturada sem engessar a criatividade.

🏋️ Exercícios Rápidos
  • Escreva um charter para explorar o formulário em demoqa.com/automation-practice-form.
  • Execute a sessão de 30 minutos com timer. Anote tudo em tempo real.
  • Ao final, escreva o relatório: o que cobriu, o que encontrou, sugestões de próximas sessões.
🧭

Teste Exploratório e Heurísticas

Heurísticas são atalhos mentais que guiam a exploração sem engessar a criatividade. Combiná-las com ET Charters (Missões) transforma uma sessão exploratória livre em uma investigação estruturada e repetível. Registrar os passos de cada sessão em Logs de Sessão cria evidência auditável e facilita a reprodução de bugs encontrados.

🏋️ Exercícios Rápidos
  • ET Charters: Escreva 3 charters distintos para explorar o OrangeHRM, cada um com missão, área-alvo e critério de parada (ex.: "Explorar validações de formulário por 25 min buscando erros de fronteira em campos numéricos").
  • Goldilocks: Aplique a heurística Goldilocks ("nem demais, nem de menos, mas na medida certa") em campos numéricos: teste o valor mínimo válido, um valor abaixo do mínimo, o valor máximo válido, um valor acima do máximo e o valor central. Documente o comportamento para cada um.
  • Log de Sessão: Durante uma sessão de 20 min, registre cada ação em formato de log com timestamp, o que foi testado e qualquer anomalia. Ao final, verifique se outra pessoa consegue reproduzir o bug usando apenas o seu log.
🧪

Laboratório, Sessão Exploratória Guiada

Conduza sua primeira sessão exploratória estruturada com charter e relatório

1
30 minutos de Exploração no DemoQA

Conduza uma sessão de teste exploratório no demoqa.com com charter definido.

  • 1. Escreva seu charter antes de começar: "Explorar o Practice Form (demoqa.com/automation-practice-form) focando em validações de campos por 30 minutos, testando dados incomuns e limites."
  • 2. Configure um timer de 30 minutos. Durante a sessão, anote em tempo real: o que você testou e qualquer comportamento inesperado.
  • 3. Experimente inputs extremos: nome com 500 caracteres, e-mail sem @, data de nascimento no futuro, upload de arquivo .exe, campos com emojis e caracteres especiais (ç, ñ, 中文).
  • 4. Ao final, escreva o relatório da sessão: resumo do que cobriu, lista de bugs encontrados com evidência (screenshot), e 2 sugestões de próximas sessões.
💡 Dica: Instale a extensão Loom (gratuita) e grave sua tela durante a sessão. Com o vídeo fica muito mais fácil documentar os bugs, você pode pausar, retroceder e capturar o momento exato da falha.
2
Heurísticas de teste: usando SFDIPOT para guiar a exploração

Use a heurística SFDIPOT (Structure, Function, Data, Interface, Platform, Operations, Time) para explorar sistematicamente um sistema.

  • 1. Leia a definição de cada dimensão do SFDIPOT. Para o site demoqa.com/automation-practice-form, crie uma tabela com as 7 dimensões.
  • 2. Para cada dimensão, liste 3 perguntas de teste. Exemplo: Data "O que acontece com caracteres especiais no nome? Com emojis? Com strings de 500 caracteres?"
  • 3. Execute pelo menos 2 perguntas de cada dimensão (14 testes no total). Documente o que encontrou.
  • 4. Ao final, compare: quais dimensões geraram mais bugs? Qual você tenderia a ignorar sem a heurística?
💡 Dica: SFDIPOT funciona como um checklist mental que ativa durante a exploração. Com o tempo, ele se torna automático. Explorar com heurística é diferente de explorar aleatoriamente, o retorno é muito maior.
3
Sessão exploratória guiada por heurísticas

Aplique heurísticas de teste para guiar uma sessão exploratória estruturada.

  • 1. Escolha 3 heurísticas do modelo SFDPOT (Structure, Function, Data, Platform, Operations, Time) e aplique cada uma no Sauce Demo por 10 minutos. Documente o que testou e o que encontrou.
  • 2. Aplique a heurística Goldilocks em pelo menos 2 campos: valores muito pequenos, muito grandes e no limite certo. O sistema se comporta de forma previsível nos três casos?
  • 3. Escreva um Session Test Report ao final: missão, duração, área coberta, bugs encontrados e perguntas que surgiram e ainda precisam de investigação.
💡Dica: Heurísticas não substituem o julgamento, elas estruturam ele. Use-as como checklist mental, não como roteiro rígido.
4
Sessão exploratória com heurísticas

Aplique heurísticas para estruturar uma exploração com mais cobertura.

  • 1. Escolha 3 heurísticas do SFDPOT e aplique cada uma no Sauce Demo por 10 minutos. Documente o que testou e o que encontrou.
  • 2. Aplique Goldilocks em 2 campos: valores muito pequenos, muito grandes e no limite. O sistema se comporta previsivelmente?
  • 3. Escreva um Session Test Report: missão, duração, área coberta, bugs encontrados e perguntas que surgiram.
💡Dica: Heurísticas estruturam o julgamento, não o substituem. Use como bússola, não como roteiro rígido.
🟢 Júnior · Módulo 8

Acessibilidade para QA

Acessibilidade não é um recurso extra, é qualidade. Cerca de 15% da população mundial tem alguma deficiência. Como QA, entender os fundamentos de acessibilidade digital significa garantir que o produto funciona para todos os usuários, não apenas para a maioria.

O que é Acessibilidade Digital

Acessibilidade digital significa que sites e aplicações podem ser usados por pessoas com deficiências visuais, auditivas, motoras e cognitivas. O padrão internacional é o WCAG (Web Content Accessibility Guidelines), mantido pelo W3C. O nível AA é o requisito mínimo na maioria dos mercados. Os 4 princípios fundamentais são: Perceptível, Operável, Compreensível e Robusto, memorize como POUR.

🏋️ Exercícios Rápidos
  • Leia os 4 princípios WCAG (POUR) no site oficial. Para cada princípio, identifique 1 elemento do Sauce Demo que o respeita e 1 que pode violá-lo.
  • Use a extensão axe DevTools (gratuita) no Chrome. Execute o scan no Sauce Demo. Quantas violações? Qual o nível de impacto da mais grave?
⌨️

Teste de Teclado e Navegação

A navegação por teclado é o teste de acessibilidade mais básico e mais revelador. Usuários com limitações motoras e cegos dependem dele. Regra fundamental: tudo que é possível com mouse deve ser possível com teclado. Atalhos essenciais: Tab avança, Shift+Tab volta, Enter ativa, Esc fecha. O indicador de foco nunca pode desaparecer.

🏋️ Exercícios Rápidos
  • Desconecte o mouse. Tente login → adicionar produto → checkout no Sauce Demo usando só teclado. Documente cada ponto onde ficou preso ou o foco sumiu.
  • Verifique se todos os botões, links e campos são alcançáveis por Tab/Enter. Para cada falha, escreva um bug report com: elemento, comportamento esperado e obtido.
👁️

Contraste de Cores e Texto

O WCAG exige contraste mínimo de 4.5:1 para texto normal e 3:1 para texto grande. Baixo contraste é o problema mais comum e mais fácil de detectar. Afeta principalmente pessoas com baixa visão, daltonismo e usuários em ambientes com muita luz. Verifique com o WebAIM Contrast Checker ou a extensão WAVE.

🏋️ Exercícios Rápidos
  • Use o WebAIM Contrast Checker para verificar o contraste de 5 textos do Sauce Demo. Algum está abaixo do mínimo WCAG AA?
  • Instale a extensão WAVE e execute no Sauce Demo. A aba "Contrast" lista todos os problemas automaticamente.
🔊

Texto Alternativo e Semântica HTML

Leitores de tela anunciam o conteúdo para usuários cegos. Para isso precisam de: atributo alt em imagens, labels associadas a campos, botões com texto descritivo e uso correto de HTML semântico (<button>, <nav>, <main>). Um botão "Clique aqui" ou imagem sem alt são barreiras reais.

🏋️ Exercícios Rápidos
  • No Sauce Demo, inspecione as imagens de produto com DevTools. Têm alt descritivo? Um leitor de tela anunciaria algo útil?
  • Verifique os campos de login: os inputs têm labels associadas? Teste clicando na label, o foco deve ir para o campo correspondente.
  • Ative o NVDA (Windows, gratuito) ou VoiceOver (Mac: Cmd+F5) e navegue pela página de produtos por 5 min de olhos fechados. O que foi impossível de entender?
🧪

Laboratório, Auditoria de Acessibilidade

Combine ferramentas automáticas com testes manuais e produza um relatório real

1
Auditoria completa no Sauce Demo: automático + teclado + contraste

Conduza uma auditoria de acessibilidade combinando 3 abordagens complementares.

  • 1. Automático: Execute o axe DevTools no Sauce Demo. Liste violações por impacto: Critical, Serious, Moderate, Minor. Para cada Critical/Serious, explique o impacto no usuário afetado.
  • 2. Teclado: Tente completar login → carrinho → checkout sem mouse. Documente falhas de foco, elementos não alcançáveis e ordem de Tab confusa.
  • 3. Contraste: Use WAVE ou WebAIM Contrast Checker em pelo menos 5 textos. Registre a relação de contraste e se passa no nível AA (4.5:1).
  • 4. Relatório: Produza: resumo executivo (1 parágrafo) + tabela de violações (elemento | problema | impacto | critério WCAG) + prioridade de correção justificada.
💡 Dica: Ferramentas automáticas detectam ~30-40% dos problemas. O resto só aparece com teclado e leitor de tela. Um relatório que combina as 3 abordagens vale muito mais do que só o scan automático.
2
Bug reports de acessibilidade no padrão profissional

Bug reports de acessibilidade têm estrutura específica: além dos passos, incluem qual tecnologia assistiva foi usada e qual critério WCAG é violado.

  • 1. Para cada problema encontrado, escreva bug report com: Título, Ambiente (browser + SO + ferramenta assistiva), Passos para reproduzir, Comportamento atual, Comportamento esperado, Critério WCAG violado (ex: "1.4.3 Contrast: Nível AA") e Impacto no usuário.
  • 2. Classifique: Critical (impossibilita o uso), Major (dificulta muito), Minor (incômodo). Justifique pensando no usuário, não na complexidade técnica.
  • 3. Revise seus reports após 24h. As informações são suficientes para um dev reproduzir e corrigir sem te perguntar nada?
💡 Dica: "Botão sem acessibilidade" é ruim. "Botão Adicionar ao Carrinho não é anunciado por leitores de tela (WCAG 4.1.2, Nível A)" é um bug report que qualquer dev consegue entender e priorizar.
3
Navegação completa por teclado

Execute o fluxo de compra usando apenas o teclado.

  • 1. Desconecte o mouse. Use Tab, Shift+Tab, Enter e Esc para completar: login, selecionar produto, adicionar ao carrinho e iniciar checkout.
  • 2. Para cada ponto onde o foco desapareceu ou ficou preso, registre: qual elemento, qual browser, qual ação tentou. Classifique: impede completamente o uso ou apenas dificulta?
  • 3. Escreva um bug report para o problema mais grave: critério WCAG violado (ex: 2.1.1 Keyboard), tecnologia assistiva afetada e impacto no usuário.
💡Dica: Usuários de teclado incluem pessoas com deficiência motora, power users e usuários de tecnologia assistiva. Todos dependem dessa navegação.
4
Contraste e texto alternativo

Audite contraste e alt text com ferramentas automáticas.

  • 1. Use o WebAIM Contrast Checker para verificar 5 elementos: título, labels de botões, preços, descrições e placeholders. Registre a relação de contraste de cada um.
  • 2. Instale a extensão WAVE e execute na página de produtos. Compare os erros encontrados com sua análise manual.
  • 3. Inspecione as imagens com DevTools: cada uma tem atributo alt descritivo? Se um leitor de tela anunciar o alt, o usuário entenderia o que está comprando sem ver a imagem?
💡Dica: Contraste mínimo WCAG AA é 4.5:1 para texto normal. Ferramentas detectam contraste, mas não se o alt text é útil. Isso exige avaliação humana.
🟢 Júnior · Módulo 9

Reporte e Gestão de Bugs

Como registrar, priorizar e acompanhar bugs com as ferramentas que o mercado usa.

🇧🇷

MeloQA: gestão de testes brasileira

O MeloQA é a primeira plataforma brasileira de gestão de testes, com suporte em português e custo acessível. Reúne casos de teste, ciclos de execução, bug tracker integrado, rastreabilidade e relatórios em um só lugar. Para o QA júnior, é uma alternativa nacional ao Jira para registrar e acompanhar bugs com contexto de qualidade.

🏋️ Exercícios Rápidos
  • Crie uma conta gratuita no MeloQA (meloqa.com) e explore a interface por 15 minutos.
  • Crie um projeto, adicione 5 casos de teste do módulo de login do OrangeHRM e registre um bug encontrado usando o Bug Tracker integrado.
  • Compare MeloQA e Jira: para um QA júnior em time pequeno, qual oferece mais contexto de qualidade?
📌

Jira para QA

O Jira é a ferramenta mais usada para gestão de bugs e tarefas em times ágeis. Como QA júnior, você vai registrar bugs (issues), acompanhar o status e trabalhar nos boards de sprint. Um bom bug report no Jira tem: título descritivo, passos para reproduzir, resultado esperado vs. obtido, severidade e evidência.

🏋️ Exercícios Rápidos
  • Crie uma conta gratuita no Jira (até 10 usuários). Crie um projeto e registre 3 bugs encontrados nas suas práticas anteriores.
  • Para cada bug, classifique: Severidade (Critical/Major/Minor/Trivial) e Prioridade (High/Medium/Low).
🔷

Azure Boards para QA

O Azure Boards é o módulo de gestão de trabalho do Azure DevOps, equivalente ao Jira para times que usam a stack Microsoft. Organiza o trabalho em Work Items: Epic (iniciativa grande), Feature (funcionalidade), User Story (história de usuário) e Bug (defeito). O QA usa diariamente o Board (quadro Kanban), o Backlog e as queries para acompanhar bugs e rastrear o status das histórias que precisa testar.

A grande diferença do Jira: integração nativa com Azure Repos (pull requests), Azure Pipelines (resultado do CI/CD vinculado ao work item) e Azure Test Plans (casos de teste associados à história). Tudo dentro do mesmo ecossistema, sem plugin.

🏋️ Exercícios Rápidos
  • Crie uma conta gratuita em dev.azure.com e um projeto. Configure um board com as colunas: To Do, In Progress, In Review, Testing, Done. Crie 3 User Stories e 2 Bugs fictícios. Pratique mover os itens entre colunas e adicionar comentários com evidências (screenshots).
  • Registre um bug completo no formato Azure Boards: título descritivo, steps to reproduce, resultado obtido vs. esperado, severidade, prioridade e evidência como anexo. Associe o bug a uma User Story via link "Related Work". Compare com o mesmo bug registrado no Jira: quais campos são equivalentes?
  • Crie uma Query personalizada: "Bugs com severidade Critical ou High no sprint atual, atribuídos ao meu time, com status diferente de Resolved". Salve a query e adicione ao seu dashboard pessoal. Essa query vira seu checklist diário.
  • Configure um Dashboard de qualidade com os widgets: Bug Trend (evolução de bugs por sprint), Test Results Trend (taxa de sucesso dos testes) e Velocity (histórias entregues por sprint). Apresente o dashboard em uma daily e explique o que cada número significa.
📝

Anatomia de um Bug Report

Um bom bug report permite que qualquer pessoa reproduza o problema. Elementos essenciais: Título (claro e específico), Ambiente (browser, OS, versão), Passos para reproduzir (numerados), Resultado obtido (o que aconteceu), Resultado esperado (o que deveria acontecer), Evidência (screenshot/vídeo) e Severidade.

🏋️ Exercícios Rápidos
  • Escreva um bug report completo para um bug real que você encontrou nos exercícios anteriores.
  • Peça a alguém reproduzir seu bug seguindo apenas o report, sem sua ajuda verbal. Se não conseguirem, melhore o report.
🧪

Laboratório, Bug Reports Profissionais

Documente bugs reais no padrão que o mercado exige

1
Encontrar e Documentar 3 Bugs

Explore o demoqa.com/automation-practice-form por 20 minutos e documente 3 bugs no padrão profissional.

  • 1. Explore o formulário buscando comportamentos inesperados. Use Loom para gravar a tela.
  • 2. Para cada bug encontrado, crie um card no Jira com: Título no padrão "[Módulo] Descrição do problema", Passos numerados, Resultado Obtido, Resultado Esperado, Screenshot/vídeo como evidência.
  • 3. Classifique cada bug: Severidade (impacto técnico) e Prioridade (urgência de negócio). Escreva a justificativa.
  • 4. Peça a alguém testar os seus reports, se não conseguirem reproduzir, melhore os passos até que qualquer pessoa consiga.
💡 Dica: Severidade ≠ Prioridade! Um crash (Critical) numa funcionalidade pouco usada pode ter prioridade Low. Um erro de digitação no nome da empresa na tela inicial (Trivial) pode ter prioridade High. O contexto de negócio define a prioridade.
2
Triagem e priorização de bugs: simulando uma reunião de bug triage

Pratique a triagem de bugs como acontece em times reais, onde QA, dev e PO decidem juntos a prioridade.

  • 1. Crie 5 bugs fictícios com diferentes severidades para um app de banco: (1) tela branca ao abrir, (2) erro ortográfico no rodapé, (3) saldo exibido com centavos errados, (4) logout não funciona no Safari, (5) notificação de compra chega com 2 horas de atraso.
  • 2. Para cada bug, defina individualmente: Severidade (impacto técnico) e Prioridade (urgência de negócio). Justifique suas escolhas.
  • 3. Simule a reunião de triage: use o Claude ou um colega como PO. Apresente cada bug e negocie a prioridade final. O bug do saldo errado pode ser Trivial tecnicamente mas Critical para o negócio?
  • 4. Documente o resultado final e as justificativas de negócio. Esse documento seria apresentado ao time na daily.
💡 Dica: O bug do saldo com centavos errados pode parecer Minor tecnicamente, mas para um banco é Critical. Quem define a prioridade é o negócio, não a tecnologia. O QA precisa entender ambos os lados para ser um bom mediador.
3
Ciclo de bug no Jira ou Azure Boards

Pratique abertura, acompanhamento e fechamento de bugs.

  • 1. Crie um projeto gratuito no Jira ou Azure DevOps. Configure colunas: Aberto, Em Análise, Em Correção, Em Reteste, Fechado.
  • 2. Abra 3 bugs do Sauce Demo com título, severidade, prioridade, steps, resultado atual e esperado. Mova cada um pelo fluxo completo.
  • 3. Crie um filtro que mostre bugs Abertos de severidade Alta ou Crítica, ordenados por data de criação. Salve como favorito para acompanhamento diário.
💡Dica: A ferramenta muda (Jira hoje, Azure amanhã), mas o fluxo é o mesmo. Aprenda o conceito; a ferramenta você aprende em horas.
4
Relatório de métricas de bugs

Analise os dados dos bugs para produzir um relatório de qualidade.

  • 1. Com os bugs do exercício anterior, produza um relatório: total por severidade, taxa de bugs reabertos e tempo médio entre abertura e fechamento.
  • 2. Identifique o módulo com mais bugs. O que isso indica sobre a área de maior risco? Como isso influencia a próxima sessão exploratória?
  • 3. Apresente o relatório em 3 parágrafos para um PO não técnico: o que está bem, o que preocupa e qual ação você recomenda. Evite jargões.
💡Dica: Dados sem contexto são ruído. Um relatório de qualidade diz: 'este é o padrão de problemas e o que ele indica sobre o produto'.
🟠 Trilha Pleno

Automação e estratégia para o QA Pleno

Você já domina os fundamentos. Agora é hora de automatizar, integrar com CI/CD, testar APIs e liderar a qualidade do seu time. Foco em produtividade, cobertura e confiabilidade.

⚡ Pré-requisito: fundamentos de QA 📅 6–18 meses de estudo
15Módulos
59+Exercícios
71+Recursos
25Labs com Código
Seu progresso na trilha Pleno 0 de 240 itens (0%)
Você ainda não concluiu nenhum módulo nesta trilha.
⚙️

Assumindo responsabilidade técnica, o QA que o time confia

Como o seu papel muda no Pleno, o que o time espera de você e como se posicionar além da execução.

Como o papel muda

No Pleno, você para de executar testes e começa a desenhar estratégias. A diferença é sutil mas fundamental: o Júnior segue o plano de testes, o Pleno cria o plano. O Júnior reporta bugs, o Pleno analisa padrões e propõe mudanças de processo que evitam que os bugs apareçam.

Seu dia a dia agora inclui automação, decisões técnicas sobre cobertura de testes, integração com pipelines de CI/CD e conversas estratégicas com devs e POs sobre risco e prioridade. Você também vai começar a mentorear júniores, e isso vai te ensinar mais sobre QA do que qualquer curso.

O que é esperado de você

  • Autonomia técnica. Você deve conseguir definir, implementar e manter uma suíte de automação sem precisar de supervisão constante.
  • Visão além do seu squad. Qualidade não termina na sua história. Um QA Pleno pensa no impacto das mudanças no sistema como um todo.
  • Influência técnica. Participar de code reviews, questionar decisões de arquitetura que afetam testabilidade, sugerir padrões de qualidade para o time de dev.
  • Dados, não opiniões. Quando propor algo, traga evidências. Taxa de regressão, tempo de execução dos testes, cobertura de código, números convencem mais do que intuição.
  • Mentoria de júniores. Explicar o que você faz é parte do trabalho. Se você não consegue ensinar, talvez não domine tanto quanto pensa.

Como se posicionar no time

O QA Pleno bem-sucedido não é o guardião que bloqueia releases, é o parceiro que ajuda o time a entregar com confiança. Isso significa entrar nas conversas cedo, trazer perspectiva de risco sem ser alarmista e encontrar o equilíbrio entre velocidade e qualidade.

Na relação com devs: seja parceiro técnico, não adversário. Na relação com POs: traduza requisitos em critérios de aceite testáveis antes que o dev escreva uma linha. Na relação com gestores: mostre valor com métricas, não com horas trabalhadas.

Armadilhas comuns do Pleno

  • Automatizar tudo. Automação tem custo de manutenção. Nem todo teste deve ser automatizado. A habilidade de decidir o que automatizar é mais valiosa do que saber como automatizar.
  • Focar só na ferramenta. Saber Playwright é uma skill. Saber quando usar Playwright, quando usar testes de componente e quando não automatizar nada é sabedoria.
  • Ignorar o lado humano. QA Pleno que só fala em código perde a influência que poderia ter. Comunicação com não-técnicos é tão importante quanto a técnica.
  • Esperar permissão para melhorar processos. No Pleno, você tem autonomia para propor mudanças. Se algo está errado no processo, traga a proposta de melhoria.

Como saber que está pronto para o Sênior

Você está pronto quando o impacto do seu trabalho vai além do seu squad, quando outras equipes buscam sua opinião, quando você consegue ver problemas de qualidade sistêmicos e tem clareza de como resolvê-los, e quando as decisões técnicas que você toma hoje economizam semanas de trabalho para o time no futuro.

O sinal mais claro: quando você percebe que o problema de qualidade da empresa não é técnico, é cultural, e você quer fazer parte da solução.

"O QA Pleno que se destaca não é o que tem mais ferramentas no arsenal, é o que sabe qual ferramenta certa usar em cada contexto e consegue convencer o time do porquê."
🟠 Pleno · Automação

Automação de Testes

Tudo que um QA Pleno precisa dominar: frontend, API, mobile, performance, BDD e muito mais. Navegue pelos subtópicos abaixo.

🌲

Cypress

Framework moderno para E2E em JS/TS. Roda no browser, tem time-travel debugging, interceptação de requisições e DX excelente. Ideal para SPAs (React, Vue, Angular). O Page Object Model (POM) é o padrão para organizar os testes.

🏋️ Exercícios Rápidos
  • Instale o Cypress e automatize login + checkout no saucedemo.com.
  • Implemente Page Object Model com pelo menos 3 pages.
  • Use cy.intercept() para mockar uma chamada de API nos testes.
🎭

Playwright

Framework da Microsoft com suporte a Chromium, Firefox e WebKit. Paralelismo nativo, trace viewer, e suporte a TypeScript. O codegen grava suas ações e gera código automaticamente. Considerado o mais completo em 2026.

🏋️ Exercícios Rápidos
  • Configure Playwright com TypeScript e implemente os mesmos testes do Cypress.
  • Use codegen para criar o esqueleto dos testes: npx playwright codegen saucedemo.com.
  • Analise uma falha usando o Trace Viewer, veja DOM snapshots e network lado a lado.
🤖

Selenium WebDriver

O framework mais estabelecido do mercado. Suporta Java, Python, C#, Ruby e JS. Selenium 4 trouxe BiDi protocol e integração nativa com CDP. Muito presente em stacks Java enterprise. Essencial para projetos legados.

🏋️ Exercícios Rápidos
  • Configure Selenium + Java + TestNG no Maven.
  • Implemente POM e execute nos 3 browsers principais.
  • Integre com Allure Reports.
🧪

Laboratório, Automação Frontend na Prática

Um exercício por ferramenta, do primeiro teste ao pipeline

1
Cypress: projeto profissional com Page Object Model

Construa uma suíte Cypress organizada com POM e dados externalizados para o Sauce Demo.

  • 1. Bootstrap: mkdir cypress-project && cd cypress-project && npm init -y && npm i -D cypress. Abra o Cypress e selecione E2E Testing.
  • 2. Crie a estrutura POM: cypress/pages/LoginPage.js, ProductsPage.js, CartPage.js, CheckoutPage.js. Cada classe encapsula seletores e ações da página.
  • 3. Externalize credenciais em cypress.env.json (não commite). Escreva testes cobrindo: login válido, login inválido, adicionar produto, remover do carrinho, checkout completo.
  • 4. Configure GitHub Actions: instale Cypress, rode os testes e faça upload do vídeo e screenshots como artefatos em caso de falha.
💡 Dica: Use data-test como seletor padrão, o Sauce Demo já os tem. Nunca use seletores por classe CSS nos testes.
2
Playwright: cross-browser com Trace Viewer

Implemente os mesmos fluxos do Sauce Demo em Playwright, explorando execução paralela e o Trace Viewer.

  • 1. Bootstrap: npm init playwright@latest. Escolha TypeScript, instale os browsers. Configure playwright.config.ts para rodar em Chromium, Firefox e WebKit.
  • 2. Implemente os mesmos cenários do exercício Cypress usando a API do Playwright. Use page.getByTestId() como seletor principal.
  • 3. Configure trace: 'on-first-retry' no config. Faça um teste falhar intencionalmente. Abra o trace com npx playwright show-trace e analise: DOM snapshot, network, screenshots de cada passo.
  • 4. Compare o tempo de execução total: Cypress vs. Playwright nos mesmos testes. Qual foi mais rápido? Em qual browser houve mais diferença?
💡 Dica: O Playwright Codegen (npx playwright codegen saucedemo.com) gera o código inicial em segundos. Use-o para o esqueleto, depois refatore para POM.
3
Selenium WebDriver: POM com Java e TestNG

Implemente automação com Selenium 4 + Java + TestNG com Page Object Model e relatório Allure.

  • 1. Crie um projeto Maven. Adicione dependências: selenium-java, testng, allure-testng, webdrivermanager. Configure o WebDriverManager para dispensar download manual de drivers.
  • 2. Implemente a estrutura POM: LoginPage.java, ProductsPage.java com métodos que retornam a próxima página (fluent interface). Use By.cssSelector("[data-test='...']") como seletor padrão.
  • 3. Escreva os testes com TestNG: login válido, inválido, compra completa. Configure o testng.xml para rodar em paralelo nos browsers Chrome e Firefox.
  • 4. Adicione a anotação @Step do Allure nos métodos de página. Gere o relatório com mvn allure:serve e analise a visualização dos passos.
💡 Dica: O WebDriverManager (WebDriverManager.chromedriver().setup()) elimina o problema de versão de driver. Sem ele, você vai gastar tempo com setup toda vez que o Chrome atualizar.
4
Service Virtualization com Hoverfly

Configure o Hoverfly para capturar e simular respostas de API externa.

  • 1. Instale Hoverfly. Configure em modo capture e faça requisições reais para reqres.in através do proxy. O Hoverfly grava todas as interações em arquivo de simulation.
  • 2. Mude para o modo simulate. Agora todas as requisições para reqres.in são respondidas pelo Hoverfly sem tocar na API real. Execute seus testes E2E e verifique que os resultados são idênticos.
  • 3. Edite a simulation para injetar cenários de falha: atraso de 3 segundos, erro 503, body malformado. Execute novamente: o sistema se comporta adequadamente em cada falha?
💡Dica: Service virtualization não é só para acelerar testes: é a única forma de testar cenários de falha de dependências externas de forma controlada. Timeout de 30s de API de pagamento é impossível de testar sem virtualização.
📮

Postman e Newman

Postman para testes manuais e exploração. Newman (CLI) para executar as coleções em pipelines. Pre-request scripts para dados dinâmicos, environments para múltiplos ambientes, e JSON Schema para validar contratos.

🏋️ Exercícios Rápidos
  • Crie uma coleção completa para a Restful Booker API cobrindo auth + CRUD.
  • Configure environments dev e staging. Salve o token dinamicamente no script Tests.
  • Execute via Newman: npx newman run collection.json -e dev.json --reporters htmlextra

REST Assured

Biblioteca Java com sintaxe fluente Given/When/Then. Essencial para stacks Java. Suporta OAuth, schema validation e é o padrão em projetos enterprise com Maven/Gradle.

🏋️ Exercícios Rápidos
  • Configure Maven + REST Assured + TestNG.
  • Implemente CRUD completo para JSONPlaceholder com schema validation.
🔒

Contract Testing

Valide contratos de API para que mudanças no backend não quebrem o frontend silenciosamente. JSON Schema define os campos obrigatórios e seus tipos. Quando a API muda o formato de resposta sem avisar, o contract test falha antes do usuário perceber.

🏋️ Exercícios Rápidos
  • No Postman, adicione JSON Schema validation em cada request da coleção da Restful Booker.
  • Simule uma quebra: mude o tipo esperado de um campo. Confirme que o teste falha com mensagem clara.
🧪

Laboratório, API Testing Profissional

Um exercício por ferramenta, do manual ao automatizado

1
Postman e Newman: coleção completa com pipeline

Construa uma coleção profissional no Postman e execute em CI com Newman.

  • 1. No Postman, crie uma coleção "Restful Booker" (docs). Adicione requests para: criar reserva (POST), buscar por ID (GET), atualizar (PUT), deletar (DELETE), autenticar (POST /auth).
  • 2. Use variáveis de ambiente para baseUrl, token e bookingId. No POST /auth, salve o token com pm.environment.set("token", ...). No POST /booking, salve o ID criado para usar nos testes seguintes.
  • 3. Adicione testes em cada request: status code correto, schema do response (use pm.test), campos obrigatórios presentes, tempo de resposta < 2s.
  • 4. Exporte a coleção e o environment. Instale Newman: npm i -g newman. Execute: newman run coleção.json -e env.json --reporters cli,html. Configure o GitHub Actions para rodar Newman no CI.
💡 Dica: Use o Pre-request Script da collection para compartilhar setup entre todas as requests, autenticação, headers padrão, variáveis globais.
2
REST Assured: automação de API com Java

Implemente testes de API com REST Assured + JUnit 5 cobrindo os principais verbos HTTP.

  • 1. Crie projeto Maven com dependências: rest-assured, junit-jupiter, json-schema-validator. Configure a baseURI para o Restful Booker no @BeforeAll.
  • 2. Implemente o fluxo completo em um único teste de integração: (1) POST /auth → extrai token, (2) POST /booking → extrai bookingId, (3) GET /booking/{id} → valida os campos, (4) PUT /booking/{id} → atualiza e valida, (5) DELETE /booking/{id} → valida 201.
  • 3. Adicione validação de JSON Schema no GET /booking: crie o arquivo booking-schema.json e use matchesJsonSchemaInClasspath(). O schema deve rejeitar se um campo obrigatório estiver faltando.
  • 4. Configure o Allure Report para REST Assured. Gere e analise o relatório com a visualização de cada request/response.
💡 Dica: A DSL do REST Assured (given().when().then()) é altamente legível. Extraia a configuração base para um BaseTest.java que todos os testes de API herdam.
3
Contract Testing de API: validando o contrato antes do merge

Implemente testes de contrato num cenário realista de microsserviços com Pact.

  • 1. Crie dois serviços: order-service (consumer, consome a API de produtos) e product-service (provider, serve GET /products e GET /products/{id}). Use Node.js + Express.
  • 2. No order-service, escreva testes Pact definindo o contrato: "GET /products deve retornar status 200 com array de objetos contendo id, name e price". Execute, o Pact gera o arquivo de contrato.
  • 3. No product-service, implemente a verificação do contrato. Execute, deve passar. Agora mude o campo price para valor no provider e execute novamente. O contrato deve falhar.
  • 4. Integre ao GitHub Actions: o consumer roda seus testes e publica o contrato, o provider verifica o contrato numa etapa separada. Uma mudança no provider que quebre o contrato deve bloquear o merge.
💡 Dica: O poder do contract testing está no CI, não no teste local. Quando o provider faz um merge que quebra um contrato do consumer, o pipeline avisa antes de ir para produção.
📱

Qualidade Mobile de Contexto

Aplicativos mobile existem num ambiente radicalmente diferente do web: o usuário é interrompido, a conexão oscila e os gestos definem a experiência. Testar qualidade mobile de contexto significa validar o comportamento do app em condições reais de uso, não apenas em um emulador com Wi-Fi estável. Os três pilares são: resiliência a interrupções, adaptabilidade de rede e gestos de UX.

🏋️ Exercícios Rápidos
  • Interrupções: Durante um fluxo de compra no Sauce Labs Demo App, simule uma ligação entrante (usando o Android Emulator: adb emu gsm call 5555555555). O app pausa corretamente? Retorna ao mesmo estado após a chamada? Tente também com uma notificação push.
  • Rede: Configure o Android Emulator para alternar entre Wi-Fi e 4G durante um upload de foto. O app enfileira a operação ou perde os dados? Use adb shell svc wifi disable e enable para simular a troca sem reiniciar o app.
  • Gestos: No app de demonstração, teste: swipe para deletar item, pinch-to-zoom em imagem de produto, pull-to-refresh na listagem, e long press em card. Cada gesto deve ter feedback visual imediato (dentro de 100ms) para não parecer quebrado.
🤖

Espresso (Android)

Framework oficial do Google para testes de UI no Android. Roda no dispositivo, sincroniza automaticamente com a UI thread, e é muito mais rápido que Appium para testes de componentes individuais.

🏋️ Exercícios Rápidos
  • Crie um projeto Android Studio e escreva testes Espresso para uma tela de login simples.
🧪

Laboratório, Automação Mobile na Prática

Um exercício por ferramenta, do setup ao teste real em dispositivo

1
Appium: setup completo e primeiro fluxo automatizado

Configure o ambiente Appium do zero e automatize o fluxo de login num app Android.

  • 1. Instale: Android Studio, JDK 11+, Appium 2 (npm i -g appium), driver Android (appium driver install uiautomator2). Configure as variáveis de ambiente ANDROID_HOME e JAVA_HOME.
  • 2. Baixe o APK do Sauce Labs Demo App. Suba um emulador pelo Android Studio ou conecte um device real. Instale o APK: adb install app.apk.
  • 3. Inicie o Appium Server e use o Appium Inspector para inspecionar os elementos do app. Mapeie os locators do login: campo de usuário, senha e botão de entrar.
  • 4. Escreva um teste Java/Python que: abre o app, faz login com credenciais válidas, valida que chegou na tela de produtos, faz logout. Execute e analise o resultado.
💡 Dica: Use AppiumBy.accessibilityId() como locator principal, é mais estável que XPath em apps mobile. Se o elemento não tiver accessibility ID, adicione no app (isso também melhora acessibilidade).
2
Espresso: testes de UI nativos no Android

Escreva testes Espresso diretamente no código do app Android para validar fluxos críticos.

  • 1. Clone o repositório Android Architecture Samples no Android Studio. Explore a estrutura de testes existentes em app/src/androidTest/.
  • 2. Escreva um teste Espresso que: abre o app, cria uma nova tarefa (digitando título e descrição), verifica que a tarefa aparece na lista, marca como concluída, verifica que o status mudou.
  • 3. Adicione um teste que valida a mensagem de erro quando tenta criar uma tarefa com título vazio. Use onView(withText("...")).check(matches(isDisplayed())).
  • 4. Execute os testes no emulador (./gradlew connectedAndroidTest). Analise o relatório HTML gerado em app/build/reports/androidTests/. Qual foi o tempo total de execução?
💡 Dica: Espresso é síncrono por design, ele espera automaticamente que as operações de UI terminem antes de fazer asserções. Isso elimina flakiness causada por Thread.sleep() que você veria no Appium.
🤖

Selenium WebDriver: Base Técnica

Antes de escalar para o Grid, é essencial dominar o WebDriver como fundamento. O Selenium WebDriver controla o browser via protocolo W3C WebDriver, oferecendo suporte a Chrome, Firefox, Edge e Safari. O padrão Page Object Model (POM) encapsula locators e ações de cada tela em classes reutilizáveis, reduzindo duplicação e facilitando manutenção. Dominar estratégias de Waits (Implicit, Explicit e Fluent Wait) é essencial para eliminar flakiness e criar testes confiáveis.

🏋️ Exercícios Rápidos
  • POM: Refatore um teste existente do Sauce Demo criando classes de Page Object para LoginPage e ProductsPage. Cada classe deve conter apenas locators e métodos de ação (sem asserções).
  • Explicit Wait: Substitua todos os Thread.sleep() do seu projeto por WebDriverWait + ExpectedConditions. Identifique qual condição de espera é adequada para cada elemento (visibilidade, clicabilidade, presença no DOM).
  • Fluent Wait: Implemente um Fluent Wait com polling de 500ms e timeout de 10s para um elemento que aparece de forma assíncrona. Teste o comportamento quando o elemento não aparece dentro do tempo esperado.
🕸️

Selenium Grid 4

Distribui execução em múltiplos nós. Hub (orquestrador), Nodes (executores). Roda Chrome, Firefox, Edge e Safari simultaneamente. Suporta Docker com UI em localhost:4444.

🏋️ Exercícios Rápidos
  • Suba Grid: docker run -d -p 4444:4444 selenium/standalone-chrome. Conecte em http://localhost:4444.
  • Configure Hub + 2 Nodes (Chrome e Firefox) com docker-compose. Execute em paralelo.
📦

Selenium + Docker + CI/CD

Containers eliminam o "funciona na minha máquina". Imagens selenium/standalone-chrome ou selenium/hub + nodes. No GitHub Actions, suba o Grid como service. Execução paralela cross-browser sem instalar browser no CI.

🏋️ Exercícios Rápidos
  • Crie docker-compose.yml com Hub + Node Chrome + Node Firefox. Execute apontando para o Hub.
  • Configure GitHub Actions com o Grid como service antes dos testes.

TestNG e JUnit 5 para paralelismo

TestNG paralelismo por métodos/classes/suítes via XML. JUnit 5 @Execution(CONCURRENT). Use ThreadLocal<WebDriver> em vez de variável estática para evitar problemas de thread-safety.

🏋️ Exercícios Rápidos
  • Configure 5 testes em paralelo com TestNG (parallel="methods"). Compare o tempo.
  • Corrija thread-safety usando ThreadLocal<WebDriver>.
🧪

Laboratório, Selenium Grid na Prática

Um exercício por tópico, do Grid local ao pipeline cross-browser

1
Selenium Grid 4: subindo e monitorando o Grid local

Configure um Grid 4 standalone e distribua testes em múltiplos browsers.

  • 1. Baixe o selenium-server-4.x.jar e suba o Grid standalone: java -jar selenium-server-4.x.jar standalone --port 4444. Acesse localhost:4444 e explore a UI de monitoramento.
  • 2. Adapte um teste Selenium existente para usar RemoteWebDriver com capabilities apontando para o Grid. Execute com Chrome e com Firefox alternando as capabilities.
  • 3. Durante a execução, monitore a UI do Grid: observe a sessão ativa, o browser em uso e o status. Faça o teste falhar intencionalmente e veja como o Grid reporta a sessão encerrada.
  • 4. Anote as diferenças de comportamento entre rodar localmente e rodar via Grid. O que muda no tempo de setup? O que muda no debugging?
💡 Dica: O Grid 4 standalone é suficiente para uso local e para CI com poucos nós. A configuração Hub+Node só é necessária quando você precisa distribuir em múltiplas máquinas físicas.
2
Docker Compose: Grid multi-browser em CI

Suba um Grid com Docker Compose e integre ao GitHub Actions para execução cross-browser automática.

  • 1. Crie docker-compose.yml com: Hub (selenium/hub:4 na porta 4444), Node Chrome (selenium/node-chrome:4, 2 sessões máx), Node Firefox (selenium/node-firefox:4, 2 sessões máx). Todos na mesma network selenium-grid.
  • 2. Suba com docker-compose up -d. Aguarde os Nodes se registrarem no Hub (monitore em localhost:4444). Execute sua suíte Selenium apontando para o Hub.
  • 3. Crie .github/workflows/selenium-grid.yml: inicie o Grid como service, execute os testes Maven/Gradle apontando para o Hub, publique os resultados Surefire como artefato.
  • 4. Verifique que os testes rodaram em Chrome e Firefox simultaneamente. Compare o tempo total vs. execução sequencial local.
💡 Dica: Se um Node não aparece no Hub, use docker-compose logs node-chrome. O problema mais comum é a network Docker, ambos os containers precisam estar na mesma rede definida no compose.
3
TestNG paralelo: eliminando flakiness de thread-safety

Configure paralelismo com TestNG e resolva o problema clássico de WebDriver compartilhado.

  • 1. Crie uma suíte de 6 testes Selenium usando uma variável estática de WebDriver (static WebDriver driver). Configure o TestNG XML com parallel="methods" thread-count="3". Execute, observe as falhas intermitentes (flakiness).
  • 2. Refatore para usar ThreadLocal<WebDriver>: crie uma classe DriverManager com ThreadLocal<WebDriver> tlDriver. Adapte os testes para usar DriverManager.getDriver().
  • 3. Execute novamente com a mesma configuração de paralelismo. Os testes devem passar de forma consistente. Compare os tempos: quantas vezes mais rápido foi a execução paralela?
  • 4. Adicione uma Factory de WebDriver que suporte múltiplos browsers via propriedade de sistema: -Dbrowser=chrome ou -Dbrowser=firefox. Execute as duas versões.
💡 Dica: ThreadLocal é o padrão ouro para WebDriver em testes paralelos. Cada thread tem sua própria instância de driver, sem compartilhamento, sem flakiness.
🤖

Fundamentos do Robot Framework

Arquivos .robot com seções: *** Settings ***, *** Variables ***, *** Test Cases ***, *** Keywords ***. Filosofia keyword-driven testes em linguagem natural legível pelo negócio. Extensível via libraries Python.

🏋️ Exercícios Rápidos
  • Instale: pip install robotframework robotframework-seleniumlibrary. Abra o Sauce Demo e verifique o título.
  • Crie keyword Login With Valid Credentials. Use-a em 3 test cases.
  • Externalize URL/credenciais em variáveis. Passe pela CLI: robot --variable URL:https://saucedemo.com.
📚

Libraries essenciais

SeleniumLibrary (web/Selenium), Browser Library (web/Playwright, mais moderna), RequestsLibrary (API REST), DatabaseLibrary (banco), Collections (listas e dicionários).

🏋️ Exercícios Rápidos
  • Instale Browser Library e reescreva um teste anterior. Compare velocidade vs. SeleniumLibrary.
  • Use RequestsLibrary para testar reqres.in: GET /users/1, POST /users, DELETE /users/1.
🏗️

Organização, Resource Files e Data-Driven

Estrutura: resources/ (keywords compartilhadas), tests/, data/. Resource File = Page Object. Para data-driven, use [Template] com datasets diferentes.

🏋️ Exercícios Rápidos
  • Crie Resource Files: login_page.robot, products_page.robot.
  • Use [Template] para 5 combinações de login: válido, senha errada, bloqueado, campos vazios.
📊

Relatórios e integração com CI

Gera report.html e log.html nativamente. CI: robot --outputdir results tests/. Configure screenshot em falha no Test Teardown.

🏋️ Exercícios Rápidos
  • Configure GitHub Actions para executar a suíte e publicar o report.html como artefato.
  • Configure Run Keyword If Test Failed Capture Page Screenshot no Test Teardown.
🧪

Laboratório, Robot Framework do Zero ao CI

Um exercício por tópico, do primeiro .robot ao pipeline com relatório

1
Fundamentos: primeiro projeto Robot com keyword-driven

Crie seu primeiro projeto Robot Framework usando a filosofia keyword-driven do zero.

  • 1. Instale: pip install robotframework robotframework-browser. Execute rfbrowser init para baixar os browsers do Playwright.
  • 2. Crie tests/login.robot. Escreva um Test Case chamado "Login com credenciais válidas" usando keywords built-in da Browser Library: New Browser, New Page, Type Text, Click, Get Text.
  • 3. Execute: robot tests/login.robot. Abra o report.html e o log.html gerados. Explore a estrutura: cada keyword expandida, screenshots, tempos.
  • 4. Adicione um segundo test case "Login com senha inválida" que verifica a mensagem de erro. Execute ambos e confirme que os relatórios mostram resultados distintos.
💡 Dica: O log.html do Robot é um dos relatórios mais detalhados do mercado, cada keyword expandida com screenshots e tempos. Use-o ativamente para debugging.
2
Libraries: RequestsLibrary para testes de API

Use a RequestsLibrary para cobrir os endpoints do reqres.in com testes Robot.

  • 1. Instale: pip install robotframework-requests. Crie tests/api/users_api.robot com Library RequestsLibrary no Settings.
  • 2. Implemente Test Cases para: GET /users (valide status 200 e que data é lista não vazia), POST /users (valide 201 e que name e id estão no response), DELETE /users/2 (valide 204).
  • 3. Use a keyword Create Session no Suite Setup para reutilizar a conexão. Use variáveis ${BASE_URL} e ${HEADERS} definidas em *** Variables ***.
  • 4. Execute a suíte de API isolada: robot --include api tests/. Verifique o relatório. Adicione um caso de erro proposital para ver como o Robot reporta falhas de API.
💡 Dica: A RequestsLibrary retorna o objeto de response Python completo. Use Should Be Equal As Integers ${response.status_code} 200 para validar status codes de forma legível.
3
Organização: Resource Files e Data-Driven no Sauce Demo

Estruture um projeto Robot profissional com Resource Files e testes data-driven.

  • 1. Crie a estrutura: resources/login_page.robot, resources/products_page.robot, resources/variables.robot, tests/checkout.robot. Cada Resource File contém as keywords da sua página.
  • 2. Em login_page.robot, crie keywords: Open Sauce Demo, Login With Credentials (recebe usuário e senha como argumentos), Verify Login Error.
  • 3. Em tests/login_tests.robot, use [Template] Login With Credentials para criar um test data-driven com 4 linhas de dados: válido, usuário errado, senha errada, bloqueado.
  • 4. Execute tudo: robot --outputdir results tests/. Verifique que o relatório mostra cada iteração do template como um teste separado com seu resultado.
💡 Dica: O [Template] é a forma mais elegante de data-driven no Robot, cada linha de dados vira um test case separado com nome automático. Muito mais limpo do que duplicar test cases.
4
CI: pipeline Robot com relatório publicado no GitHub Actions

Configure um pipeline completo que executa a suíte Robot e publica o relatório como artefato.

  • 1. Configure captura automática de screenshot em falha: no *** Settings *** de cada suite, adicione Test Teardown Run Keyword If Test Failed Take Screenshot.
  • 2. Crie .github/workflows/robot.yml: instale Python e dependências (pip install -r requirements.txt), execute robot --outputdir results tests/, faça upload de results/ como artefato com actions/upload-artifact.
  • 3. Force uma falha num teste. Faça o push. No GitHub Actions, baixe o artefato e abra o report.html. O screenshot da falha deve estar visível no log.
  • 4. Adicione tags aos testes: [Tags] smoke e [Tags] regression. Modifique o workflow para rodar só o smoke em PRs: robot --include smoke tests/.
💡 Dica: Tags são o mecanismo mais poderoso de filtragem do Robot. Com --include smoke --exclude wip você tem controle total sobre quais testes rodam em cada contexto de CI sem alterar o código.
🥋

DSL do Karate: escrevendo testes de API

DSL baseada em Gherkin sem step definitions. Sintaxe: Given url, And request, When method post, Then status 201, And match response.nome == "João". O operador match valida JSON por igualdade, tipo e estrutura.

🏋️ Exercícios Rápidos
  • Projeto Karate com Maven. .feature testando GET /users do reqres.in. Valide status 200.
  • Use match each para validar que todos os usuários têm id, email e first_name.
  • Encadeie: POST para criar usuário, use o id para GET e valide os dados.
🔁

Reuso, variáveis e cenários data-driven

call invoca outro feature file. callonce executa uma vez, ideal para autenticação. Variáveis com def. Examples: do Gherkin funciona nativamente para data-driven.

🏋️ Exercícios Rápidos
  • Crie auth.feature com callonce para compartilhar token entre os testes.
  • Implemente data-driven com Examples: para criar 5 usuários com dados diferentes.
🚀

Karate Gatling: performance sem reescrita

Os mesmos feature files de API rodam como testes de performance via Gatling. Defina a carga em Scala/Java e o Karate executa os cenários.

🏋️ Exercícios Rápidos
  • Adicione karate-gatling. Configure simulation com 10 VUs por 30 segundos.
  • Execute e analise: tempo médio, p95, taxa de erros.
🧪

Laboratório, Karate Framework na Prática

Um exercício por tópico, da DSL ao performance test

1
DSL do Karate: primeiro projeto e validações avançadas

Crie um projeto Karate do zero e use o operador match para validações de schema.

  • 1. Crie projeto Maven com karate-junit5. Estruture: runner em src/test/java/ e features em src/test/resources/.
  • 2. Escreva get_users.feature testando GET /users do reqres.in. Valide status 200 e campos de cada item com match each response.data == {id: '#number', email: '#string', first_name: '#string', last_name: '#string', avatar: '#string'}.
  • 3. Encadeie chamadas: POST /users para criar um usuário, salve def userId = response.id, faça GET /users/#(userId) e valide que o nome bate.
  • 4. Execute com mvn test e analise o relatório HTML gerado. Qual a diferença entre usar #string e fixar um valor exato na validação?
💡 Dica: O match each valida que TODOS os itens de uma lista satisfazem o schema. Muito mais eficiente do que iterar manualmente, uma linha substitui um loop inteiro.
2
Reuso com callonce e cenários data-driven com Examples

Implemente autenticação reutilizável e testes data-driven elegantes.

  • 1. Crie auth.feature que faz POST /api/login no reqres.in e retorna o token. Em outro feature, use * def auth = callonce read('auth.feature') no Background.
  • 2. Crie um Scenario Outline com Examples para criar usuários com diferentes dados (nome e cargo). Mínimo 4 linhas. Valide que cada criação retorna 201.
  • 3. Execute e verifique que cada linha de Examples aparece como cenário separado no relatório.
  • 4. Compare call vs callonce: execute os testes e conte quantas chamadas de autenticação foram feitas. Com callonce, deve ser apenas 1.
💡 Dica: callonce executa apenas uma vez por suíte, perfeito para autenticação. O resultado é cacheado e compartilhado, economizando chamadas desnecessárias de login.
3
Karate Gatling: reaproveitando feature files como carga

Use os feature files existentes para executar performance test sem reescrita.

  • 1. Adicione karate-gatling ao pom.xml. Crie PerfTest.scala que importa os feature files existentes como protocolo Karate.
  • 2. Configure: rampUsers(10).during(30). Execute: mvn gatling:test.
  • 3. Abra o relatório HTML do Gatling. Analise: tempo médio, p95, p99, throughput, taxa de erros.
  • 4. Adicione assertions: global.responseTime.percentile(95).lt(1000) e global.failedRequests.percent.lt(1). O teste passou?
💡 Dica: O real valor é zero duplicação, o mesmo feature file serve para teste funcional E de carga. Uma mudança no contrato da API atualiza os dois automaticamente.

k6, Performance como código

Ferramenta moderna da Grafana Labs. Scripts em JavaScript. Conceitos: VUs, stages, thresholds ("p95 < 500ms"), checks. Integra com Grafana para dashboards em tempo real.

🏋️ Exercícios Rápidos
  • Escreva script enviando 50 req/s para reqres.in por 30 segundos.
  • Adicione threshold: p95 < 500ms e taxa de erros < 1%.
  • Configure 3 stages: ramp-up 0→100 VUs em 1 min, sustentação 3 min, ramp-down 1 min.
🦗

Locust, Performance em Python

VUs como classes Python. Interface web em localhost:8089. Ideal para times Python ou cenários com lógica complexa. Escala em modo distribuído.

🏋️ Exercícios Rápidos
  • Instale: pip install locust. Crie locustfile.py com GET /users e POST /users.
  • Simule 50 usuários, 5 de spawn rate por 2 minutos. Analise erros e latência.
📚 Cursos e Recursos
🏹

Gatling, Performance para stacks Java

Scripts compilam para bytecode. Relatórios HTML com percentis e erros por endpoint. Muito usado em projetos bancários e corporativos no Brasil.

🏋️ Exercícios Rápidos
  • Projeto Gatling com Maven. Simulation com 20 usuários no reqres.in.
  • Analise relatório: endpoint mais lento, p99, taxa de erros.
📐

Conceitos fundamentais de performance

Tipos Load, Stress, Soak, Spike. Métricas throughput (req/s), latência (p50/p90/p95/p99), taxa de erros. Critérios "p95 < 500ms com 500 usuários e erro < 0,1%".

🏋️ Exercícios Rápidos
  • Para uma API que você conhece, defina critérios de aceite realistas.
  • Execute o mesmo cenário com k6 e Locust. As métricas coincidem?
🧪

Laboratório, Performance Testing na Prática

Um exercício por ferramenta e conceito

1
k6: thresholds, stages e CI no GitHub Actions

Construa um teste de performance com critérios de aceite automáticos integrado ao pipeline.

  • 1. Escreva load-test.js simulando GET /users e POST /users no reqres.in. Use group() para organizar os dois fluxos.
  • 2. Configure stages: { duration: '30s', target: 20 }, { duration: '2m', target: 20 }, { duration: '30s', target: 0 }. Adicione thresholds: p95 < 500ms e taxa de erros < 1%.
  • 3. Execute localmente. Analise: p50, p95, p99, throughput. Os thresholds passaram?
  • 4. Configure GitHub Actions com grafana/k6-action. Falhe o pipeline se os thresholds não passarem. Verifique o resultado no PR.
💡 Dica: Thresholds transformam um teste descritivo em um teste com critério de aceite automático. Sem thresholds, você só coleta métricas, não valida performance.
2
Locust: fluxo autenticado com lógica Python

Use a flexibilidade do Python para simular um usuário com autenticação e estado.

  • 1. Instale: pip install locust. Crie locustfile.py com classe APIUser(HttpUser) e wait_time = between(1, 3).
  • 2. Implemente on_start para fazer login e salvar token. Use-o em todos os requests seguintes via header Authorization.
  • 3. Adicione tasks com pesos: @task(3) para GET /users e @task(1) para POST /users. Execute: locust --headless -u 50 -r 5 --run-time 2m.
  • 4. Compare com o k6 para o mesmo cenário. Qual ferramenta facilita mais cenários com lógica complexa? Qual é mais concisa para scripts simples?
💡 Dica: O Locust brilha quando o cenário tem lógica Python complexa, tokens por sessão, fluxos condicionais, dependências entre requests. Para scripts simples, k6 é mais conciso.
3
Gatling: simulation com ramp, feed de dados e relatório

Implemente uma simulation Gatling com dados variados e critérios de aceite automáticos.

  • 1. Crie projeto Maven com gatling-maven-plugin. Em src/gatling/scala/, crie ReqresSimulation.scala.
  • 2. Implemente: login (POST /api/login), listagem (GET /api/users), criação (POST /api/users). Use feed(csv("users.csv").circular) para variar os dados.
  • 3. Configure: rampUsers(20).during(60.seconds) e assertions: p95 < 1000ms e erros < 1%. Execute: mvn gatling:test.
  • 4. Abra o relatório HTML. Qual endpoint tem maior p99? Há degradação durante o ramp-up? O teste passou nos critérios?
💡 Dica: O relatório HTML do Gatling é o mais visualmente rico, gráficos de percentis ao longo do tempo, distribuição de latências, erros por endpoint. Vale explorar cada seção.
4
Conceitos na prática: Load, Stress, Soak e Spike

Execute os quatro tipos de teste e documente o comportamento do sistema em cada um.

  • 1. Load 50 VUs por 3 minutos. Registre p50, p95, throughput e erros como baseline.
  • 2. Stress rampa 0→200 VUs em 5 minutos. Em qual ponto a taxa de erros começa a subir? Documente o ponto de ruptura.
  • 3. Spike 5 VUs por 1 min → salto para 150 VUs por 30s → volta para 5. O sistema se recuperou? Em quanto tempo?
  • 4. Soak 20 VUs por 10 minutos. Compare p95 no início vs. no final. Houve degradação gradual?
💡 Dica: Load testa o dia a dia. Stress encontra o limite. Spike valida a recuperação. Soak detecta memory leaks. Um sistema saudável passa em todos os quatro.
🥒

Cucumber: feature files e step definitions

O Cucumber funciona em duas camadas: feature files (.feature) escritos em Gherkin (Given/When/Then em linguagem natural, legível por PO e negócio) e step definitions (código que implementa cada passo). A separação é proposital: o negócio lê e valida os cenários, o QA implementa a automação. Essa rastreabilidade entre requisito e teste é o maior valor do BDD.

🏋️ Exercícios Rápidos
  • Instale Cucumber com Playwright: npm i -D @cucumber/cucumber @playwright/test.
  • Escreva um feature file para login com 3 cenários: sucesso, senha errada e usuário bloqueado.
  • Implemente os step definitions correspondentes usando Playwright.
📝

Escrevendo bons cenários Gherkin

Gherkin mal escrito é pior que não ter BDD. Princípios de bons cenários: um cenário por comportamento (não misture múltiplas verificações), linguagem de negócio (evite termos técnicos como "clique no botão ID #login-btn"), independentes (cada cenário roda isolado, sem depender do anterior), declarativos ("Dado que o usuário está logado" não "Dado que o usuário acessou /login, preencheu email e clicou em entrar").

🏋️ Exercícios Rápidos
  • Reescreva este cenário ruim no formato correto: "Dado que acesso localhost:3000/login, quando preencho #email com admin@test.com e #password com 123456 e clico em #submit, então vejo dashboard."
  • Crie um feature file com Background para eliminar repetição de pré-condições entre cenários.
🏷️

Tags, hooks e organização de suítes

Cucumber tem um sistema de tags (@smoke, @regression, @wip) que funciona como o sistema de tags do Pytest e Playwright. Hooks (Before/After) permitem setup e teardown por cenário ou tag. Background define pré-condições compartilhadas entre cenários do mesmo feature. Organizar bem as tags é essencial para integrar Cucumber ao CI/CD.

🏋️ Exercícios Rápidos
  • Configure tags @smoke nos cenários mais críticos e execute apenas eles: npx cucumber-js --tags @smoke.
  • Implemente um hook Before que limpa dados de teste e um After que tira screenshot em caso de falha.
🤝

BDD como ferramenta de colaboração

O maior valor do BDD não é técnico, é a conversa que acontece antes de escrever o código. As sessões de refinamento com Three Amigos (PO, Dev, QA) escrevendo cenários juntos detectam ambiguidades nos requisitos antes do desenvolvimento começar. O feature file é o contrato vivo entre negócio e engenharia.

🏋️ Exercícios Rápidos
  • Conduza uma sessão de escrita colaborativa de feature file com um colega (um faz papel de PO, outro de Dev, você como QA) para uma story de cadastro.
  • Meça o valor: quantas ambiguidades e perguntas surgiram durante a escrita que não teriam sido descobertas de outra forma?
🧪

Laboratório, BDD do feature file ao relatório no CI

Um exercício por tópico, da escrita ao pipeline

1
Cucumber: feature files e step definitions do zero

Configure Cucumber + Playwright e implemente feature files para o Sauce Demo.

  • 1. Crie projeto Node.js: npm i -D @cucumber/cucumber playwright. Configure cucumber.js com caminhos para features e steps.
  • 2. Escreva features/login.feature com 3 cenários em português (# language: pt): login válido, senha inválida, campos vazios.
  • 3. Implemente steps/login.steps.js com Playwright. Use Before e After hooks para abrir e fechar o browser.
  • 4. Execute: npx cucumber-js. Gere relatório HTML com cucumber-html-reporter e analise.
💡 Dica: Steps devem ser reutilizáveis. "Dado que estou na página de login" deve funcionar em qualquer feature, sem dependência de estado anterior.
2
Gherkin: cenários que o negócio entende

Pratique escrita de Gherkin focada em comportamento de negócio, não em implementação.

  • 1. Reescreva estes cenários ruins: (a) "Clicar no botão azul de login", foca em UI; (b) "Verificar se #cart-count tem valor 1", expõe implementação; (c) "Testar o checkout", vago demais.
  • 2. Escreva um Scenario Outline para o filtro de ordenação: "Dado que estou na página de produtos, Quando ordeno por <critério>, Então os produtos aparecem em ordem <esperada>". Use Examples com 4 critérios.
  • 3. Implemente os step definitions e execute. Cada linha de Examples deve gerar um cenário separado no relatório.
  • 4. Identifique 3 anti-padrões de Gherkin e reescreva-os. O teste: um PO sem conhecimento técnico consegue lê-los e dizer se estão corretos?
💡 Dica: Se você precisar de um dev para entender o cenário, está errado. Gherkin correto é legível por qualquer stakeholder.
3
Tags e hooks: suítes seletivas e setup preciso

Use tags para criar suítes seletivas e hooks para gerenciar estado com precisão.

  • 1. Adicione tags: @smoke nos 3 mais críticos, @regression em todos, @login e @checkout por área. Execute: npx cucumber-js --tags "@smoke".
  • 2. Implemente Before({tags: "@checkout"}) que faz login automaticamente antes de cenários de checkout, eliminando duplicação.
  • 3. Adicione @wip em cenário incompleto. Configure CI para falhar se encontrar @wip: --tags "not @wip".
  • 4. Configure GitHub Actions: @smoke em PRs, @regression no merge para main. O smoke deve rodar em menos de 5 minutos.
💡 Dica: Hooks condicionais por tag são muito mais precisos que hooks globais. Setup desnecessário é uma das principais causas de testes lentos.
4
BDD colaborativo: do Three Amigos ao teste automatizado

Pratique o ciclo completo de BDD, do refinamento ao pipeline.

  • 1. História: "Como usuário do Sauce Demo, quero ordenar produtos por preço para encontrar a opção mais barata." Simule Three Amigos: escreva as perguntas que o QA faria ao PO e ao dev (mínimo 5 cada).
  • 2. Escreva critérios de aceite em Gherkin cobrindo: ordenação crescente, decrescente, estado após navegação, ordenação com carrinho não vazio.
  • 3. Implemente os step definitions e execute. Algum critério não é satisfeito pelo Sauce Demo atual? Documente como bug.
  • 4. Compare os cenários BDD com os testes manuais anteriores. O BDD adicionou cobertura nova? Qual abordagem comunica melhor o comportamento esperado?
💡 Dica: O maior valor do BDD não é a automação, é a conversa. Feature files são o artefato da conversa, não o objetivo. Sem a conversa, é só ATDD com sintaxe diferente.
🧩

O que são testes de componente

Testes de componente ficam entre unitários e E2E na pirâmide. Eles renderizam um componente de UI em isolamento, sem precisar de um browser completo ou de toda a aplicação rodando, e verificam seu comportamento. São mais rápidos e estáveis que E2E porque não dependem de rede, banco ou outros serviços, mas são mais realistas que testes unitários porque exercitam HTML, CSS e interações de usuário reais.

🏋️ Exercícios Rápidos
  • Pesquise a diferença entre testes unitários, de componente e E2E para React. Dê um exemplo de cada para um botão de "Adicionar ao Carrinho".
  • Identifique 3 componentes em uma aplicação que você conhece que se beneficiariam mais de testes de componente do que de E2E.
⚛️

React Testing Library

React Testing Library (RTL) é o padrão de mercado para testes de componente em React. Sua filosofia: teste o que o usuário vê, não os detalhes de implementação. Queries por texto visível (getByText), roles ARIA (getByRole) e labels (getByLabelText) são mais resilientes a refatorações do que queries por classe CSS ou ID.

🏋️ Exercícios Rápidos
  • Instale: npm i -D @testing-library/react @testing-library/jest-dom @testing-library/user-event.
  • Escreva um teste para um componente de formulário de login: preencha os campos, clique em submit e verifique que a função de callback foi chamada.
  • Compare: reescreva o mesmo teste usando querySelector. Qual é mais resiliente a mudanças de CSS?
🎭

Playwright Component Testing

Playwright tem um modo de component testing que roda componentes React, Vue e Svelte diretamente no browser real, sem precisar de toda a aplicação. É mais lento que RTL mas mais fiel ao ambiente de produção. Ideal para componentes com comportamentos visuais complexos (animações, tooltips, comportamentos de scroll).

🏋️ Exercícios Rápidos
  • Configure o Playwright Component Testing: npm i -D @playwright/experimental-ct-react.
  • Monte um componente Button no teste e verifique que renderiza corretamente e dispara o evento onClick.
  • Compare a velocidade de execução com RTL no mesmo componente.
🔬

Cypress Component Testing

Cypress também suporta component testing, com a vantagem de usar a mesma API dos testes E2E. Boa escolha para times que já usam Cypress, mesmas queries, mesmos comandos, mesmo DevTools de debug. O component test roda num iframe controlado pelo Cypress, com hot reload.

🏋️ Exercícios Rápidos
  • Configure Cypress Component Testing para React: adicione component: { devServer: { framework: "react" } } ao cypress.config.
  • Crie um spec de componente para um card de produto e verifique: título renderizado, preço formatado e botão funcional.
🧪

Laboratório, Testes de Componente na Prática

Um exercício por abordagem, do RTL ao component testing visual

1
O que são testes de componente: identificando a camada certa

Entenda quando usar testes de componente vs. unitário vs. E2E com exemplos práticos.

  • 1. Para um formulário de login React, liste: 3 casos de teste unitário (lógica isolada), 3 de componente (renderização + interação) e 3 de E2E (fluxo completo). O que cada camada valida que as outras não validam?
  • 2. Identifique a diferença entre testar validateEmail() unitariamente vs. renderizar o campo e verificar a mensagem de erro.
  • 3. Escolha um componente num projeto open source React. Descreva em texto quais testes de componente você escreveria antes de implementá-los.
  • 4. Para o componente escolhido, quantos testes de componente vs. unitários vs. E2E você planejou? Está em proporção com a pirâmide?
💡 Dica: Testes de componente vivem entre unitário e E2E. São mais rápidos que E2E (sem browser real), mais realistas que unitários (testam renderização + interação). Ideais para formulários, listas e modais.
2
React Testing Library: formulário com validações e acessibilidade

Teste um formulário de login cobrindo renderização, interação, validação e acessibilidade.

  • 1. Crie LoginForm.jsx: campos email e senha, validação de email, senha mínima 8 chars, botão desabilitado quando inválido, mensagens de erro inline.
  • 2. Escreva testes RTL: renderização inicial, email inválido (erro aparece), email válido + senha curta (erro de senha), formulário válido (botão habilitado), submit (callback chamado com valores corretos).
  • 3. Use APENAS queries semânticas: getByRole('textbox', {name: /email/i}). Proibido usar getByTestId neste exercício.
  • 4. Instale jest-axe e adicione teste de acessibilidade. Corrija qualquer violação encontrada.
💡 Dica: Queries por role e label testam como o usuário vê o componente, não como o dev o implementou. Isso torna os testes mais resistentes a refatorações.
3
Playwright Component Testing: testes visuais e interação

Configure o Playwright Component Testing e teste componentes com screenshots.

  • 1. Num projeto React com Vite: npm i -D @playwright/experimental-ct-react. Configure playwright-ct.config.ts.
  • 2. Crie LoginForm.ct.spec.tsx. Monte com mount(<LoginForm />). Escreva testes de interação usando a mesma API do Playwright E2E.
  • 3. Adicione screenshot: expect(component).toHaveScreenshot('login-empty.png'). Gere o baseline. Mude a cor de um botão e execute novamente, o teste deve falhar com diff visual.
  • 4. Compare velocidade vs. testes E2E do mesmo fluxo. Em qual cenário você usaria cada abordagem?
💡 Dica: Screenshots visuais são poderosos mas precisam de manutenção. Qualquer mudança intencional requer --update-snapshots. Use para componentes de UI que mudam raramente.
4
Cypress Component Testing: desenvolvimento com feedback visual

Use o Cypress Component Testing para desenvolver e testar um componente simultaneamente.

  • 1. Num projeto React: npx cypress open → Component Testing → React + Vite.
  • 2. Crie ProductCard.cy.jsx para um componente com imagem, nome, preço e botão adicionar. Monte com props variadas: normal, sem estoque, com desconto.
  • 3. Teste: renderização por conjunto de props, clique chama callback correto, desabilitado sem estoque, badge de desconto visível quando aplicável.
  • 4. Use o Cypress Studio para gravar interações manuais e gerar assertions automaticamente. Compare o código gerado com o que você escreveria.
💡 Dica: O Cypress Component Testing renderiza o componente em tempo real, você vê o estado enquanto o teste executa. Isso torna o debugging muito mais intuitivo que o jsdom do Jest.
🤝

Consumer-Driven Contract Testing

No Pact, o consumer (frontend ou serviço que consome) define o que espera do provider (API que fornece). Esse contrato é um arquivo JSON que o consumer gera e o provider valida. Se o provider mudar sua API de forma incompatível, o teste falha, antes do deploy. É a solução definitiva para o problema de "funciona em isolamento mas quebra na integração".

🏋️ Exercícios Rápidos
  • Leia a documentação do Pact e entenda o conceito de "pact file", o arquivo de contrato.
  • Liste 3 integrações em um projeto que você conhece onde o Contract Testing seria valioso.
📄

Pact na Prática: Consumer Side

No lado do consumer (ex: frontend React ou serviço Node.js), você escreve testes que descrevem as interações esperadas com a API. O Pact gera automaticamente o arquivo de contrato (.json). Depois o provider precisa validar que consegue satisfazer essas interações.

🏋️ Exercícios Rápidos
  • Configure um projeto Pact-JS e escreva seu primeiro consumer test definindo um contrato para GET /users.
  • Verifique que o pact file foi gerado em ./pacts/ após rodar os testes.

Pact na Prática: Provider Side

O provider pega o pact file gerado pelo consumer e valida que sua API consegue satisfazê-lo. Isso pode ser feito localmente ou via Pact Broker, um servidor central onde os contratos são publicados e os resultados de verificação são registrados, criando rastreabilidade completa.

🏋️ Exercícios Rápidos
  • Configure a verificação no lado do provider para validar o contrato gerado pelo consumer.
  • Publique o pact file no Pact Broker gratuito (pactflow.io oferece conta free).
🔄

Pact Broker e Can I Deploy

O Pact Broker centraliza contratos e resultados de verificação. O comando can-i-deploy consulta o broker antes de um deploy e responde: "posso fazer deploy desse serviço agora sem quebrar os consumers?". Integra perfeitamente com CI/CD, é o guardião de compatibilidade entre serviços.

🏋️ Exercícios Rápidos
  • Configure o Pact Broker localmente com Docker.
  • Integre o can-i-deploy no seu pipeline GitHub Actions como gate antes do deploy.
🧪

Laboratório, Contract Testing com Pact

Um exercício por etapa, do conceito ao pipeline com Can I Deploy

1
Consumer-Driven: mapeando o contrato antes de implementar

Entenda o modelo consumer-driven e identifique o que precisa ser testado.

  • 1. order-service chama product-service para buscar detalhes de produto. Mapeie o contrato: endpoint, método, headers, request e response esperado.
  • 2. Identifique 3 mudanças no provider que QUEBRARIAM o consumer e 3 que seriam COMPATÍVEIS. Qual a diferença entre elas?
  • 3. Desenhe o fluxo: quem gera o contrato? Quem verifica? Em qual etapa do CI? Como um PR do provider seria bloqueado se quebrasse o consumer?
  • 4. Pesquise um caso real de breaking change em API pública (Twitter v1→v2, Stripe). Como o contract testing teria ajudado?
💡 Dica: Contract testing não substitui testes de integração, complementa. Integração verifica a comunicação em ambiente controlado. Contract testing verifica que o contrato é respeitado independente do ambiente.
2
Pact Consumer: escrevendo e gerando o contrato

Implemente o lado consumer do contrato com Pact JS.

  • 1. Crie order-service em Node.js. Instale @pact-foundation/pact. Implemente product.client.js com getProduct(id) que faz GET /products/{id}.
  • 2. Escreva teste Pact: "dado produto 1 existe, GET /products/1 retorna 200 com {id: 1, name: string, price: number, inStock: boolean}". Execute, o contrato JSON é gerado em pacts/.
  • 3. Abra o arquivo de contrato JSON e entenda sua estrutura. Quais campos o consumer realmente depende?
  • 4. Adicione interaction para produto não encontrado: GET /products/999 → 404 com {error: "Product not found"}. O consumer deve tratar esse caso.
💡 Dica: O arquivo de contrato JSON é o artefato mais importante, é ele que o provider vai verificar. Commite no repositório ou publique no Pact Broker.
3
Pact Provider: verificando e quebrando intencionalmente

Implemente o provider e veja o Pact em ação quando o contrato é violado.

  • 1. Crie product-service com Express. Implemente GET /products/:id retornando {id, name, price, inStock} e 404 para /products/999.
  • 2. Configure verificação Pact no provider apontando para o arquivo de contrato. Execute, deve passar.
  • 3. Quebre o contrato: mude price para valor. Execute novamente, o Pact deve falhar indicando qual campo está faltando.
  • 4. Faça uma mudança COMPATÍVEL: adicione campo category ao response. Execute, deve passar, pois o consumer não depende dele.
💡 Dica: A verificação do provider valida o contrato escrito pelo consumer. Isso inverte o controle, o consumer define o que precisa, o provider precisa satisfazer.
4
Pact Broker e Can I Deploy: pipeline completo

Configure o Pact Broker e integre o can-i-deploy ao CI de ambos os serviços.

  • 1. Suba o Pact Broker: docker run -p 9292:9292 pactfoundation/pact-broker. Configure o consumer para publicar o contrato: pact.publishPacts({pactBrokerUrl, consumerVersion}).
  • 2. Configure o provider para buscar contratos do broker. Execute, deve buscar e publicar resultado da verificação.
  • 3. No GitHub Actions do consumer, adicione can-i-deploy antes do deploy: npx pact-broker can-i-deploy --pacticipant order-service --version $VERSION --to-environment production.
  • 4. Simule o fluxo completo e faça uma quebra de contrato. Em qual etapa o pipeline falha?
💡 Dica: Can-i-deploy responde "posso fazer deploy dessa versão do consumer sabendo que o provider está em produção?". Sem ele, o Pact é só um teste local.
🎭

O que é Service Virtualization

Service Virtualization cria um substituto funcional de uma dependência, API de parceiro, sistema legado, serviço de pagamento, mainframe, que ainda não existe ou está indisponível no ambiente de teste. Diferente de mocks simples: a VS é stateful, pode simular latência, falhas e diferentes cenários de resposta.

🏋️ Exercícios Rápidos
  • Liste 3 dependências externas de um projeto que você conhece que poderiam ser virtualizadas.
  • Pesquise a diferença entre stub, mock, fake e virtual service.
🔌

WireMock, O padrão do mercado

WireMock é a ferramenta mais usada para simular APIs HTTP. Funciona standalone (servidor independente) ou embedded em testes Java. Suporta: request matching por URL, método, headers e body, respostas dinâmicas com templates, simulação de latência e falhas, record-and-playback de APIs reais.

🏋️ Exercícios Rápidos
  • Inicie o WireMock standalone: docker run -p 8080:8080 wiremock/wiremock
  • Configure um stub para GET /api/products que retorna uma lista de produtos em JSON.
  • Teste simulando um timeout: fixedDelayMilliseconds: 5000
📼

Record and Playback

WireMock pode gravar interações reais com uma API e depois reproduzi-las sem precisar da API. Fluxo: apontar WireMock como proxy para a API real, executar os fluxos de teste enquanto ele grava, depois usar os recordings como stubs. Perfeito para capturar o comportamento de APIs legadas ou de terceiros.

🏋️ Exercícios Rápidos
  • Use o WireMock em modo recording apontado para a JSONPlaceholder API.
  • Após gravar 5 requests, desligue o recording e confirme que os stubs respondem corretamente.
🔀

Hoverfly e MockServer

Hoverfly alternativa ao WireMock com foco em testes de performance, suporta milhares de req/s sem overhead. MockServer muito usado em testes Java com ExpectationInitializer programático. MSW (Mock Service Worker) intercepta requisições no browser e no Node.js, perfeito para testes de frontend.

WireMock Hoverfly MockServer MSW Nock json-server
🏋️ Exercícios Rápidos
  • Configure MSW no seu projeto Playwright para mockar chamadas de API nos testes de UI.
🧪

Laboratório, Service Virtualization na Prática

Um exercício por ferramenta e técnica

1
O que é Service Virtualization: mapeando dependências

Identifique as dependências de um sistema e defina quando virtualizar cada uma.

  • 1. Para um e-commerce, mapeie as dependências externas: API de pagamento, serviço de CEP, API de frete, estoque, email, SMS. Para cada uma: está disponível em teste? Tem custo por chamada? Tem dados imprevisíveis?
  • 2. Classifique cada dependência: virtualizar / usar instância de teste / mockar no código. Documente o motivo de cada decisão.
  • 3. Para a API de pagamento, descreva os cenários que você virtualizaria: aprovado, recusado por saldo, recusado por cartão inválido, timeout, erro 500. Quais seriam impossíveis de reproduzir com a API real?
  • 4. Pesquise um caso real onde ausência de virtualização causou custo inesperado ou dados enviados para produção por engano. O que deveria ter sido feito?
💡 Dica: Service Virtualization é diferente de mock, o virtual service é stateful, roda como serviço independente e pode simular latência e comportamentos complexos. Um mock é uma substituição em memória dentro do código de teste.
2
WireMock standalone: stubs e response templating

Configure o WireMock e crie stubs que simulam cenários impossíveis com a API real.

  • 1. Execute o WireMock standalone: java -jar wiremock-standalone-3.x.jar --port 8080. Acesse localhost:8080/__admin para confirmar.
  • 2. Crie stubs via API REST: (a) GET /api/pagamento/123 → 200 com pagamento aprovado; (b) GET /api/pagamento/456 → 200 com pagamento recusado; (c) GET /api/pagamento/999 → 503 com delay de 3000ms.
  • 3. Escreva testes automatizados chamando o WireMock em vez da API real. Verifique em /__admin/requests que as chamadas foram registradas.
  • 4. Adicione response templating dinâmico: GET /api/usuarios/{{request.pathSegments.[2]}} retorna JSON com o ID interpolado do path.
💡 Dica: Use /__admin/requests para ver todas as chamadas recebidas. É muito útil para debugar, você vê exatamente o que seu sistema está enviando para a dependência virtual.
3
Record and Playback: capturando e reproduzindo APIs reais

Use o modo de proxy do WireMock para gravar interações reais e reproduzi-las offline.

  • 1. Inicie o WireMock em modo proxy: java -jar wiremock-standalone.jar --proxy-all "https://reqres.in" --record-mappings --port 8080.
  • 2. Faça chamadas através do proxy (apontando para localhost:8080): GET /api/users, GET /api/users/1, POST /api/users. As respostas são gravadas em mappings/ e __files/.
  • 3. Reinicie sem --proxy-all. Faça as mesmas chamadas, agora o WireMock responde com os dados gravados, sem chamar a API real.
  • 4. Edite um arquivo gravado alterando um campo. Execute seus testes apontando para o WireMock. O teste detectou a mudança?
💡 Dica: Record and Playback é perfeito para capturar o comportamento de APIs legadas sem documentação. Grave durante um dia de uso real e tenha um repositório de comportamentos para usar offline.
4
Hoverfly e MockServer: quando usar cada ferramenta

Compare as três ferramentas de virtualização para o mesmo cenário e documente sua recomendação.

  • 1. Execute o Hoverfly: docker run -p 8500:8500 -p 8888:8888 spectolabs/hoverfly. Configure em modo simulate. Importe um simulation JSON com 2 endpoints. Verifique no dashboard (localhost:8888).
  • 2. Execute o MockServer: docker run -p 1080:1080 mockserver/mockserver. Crie uma expectativa via POST /mockserver/expectation com request matcher e response. Valide que funciona.
  • 3. Para o mesmo stub de pagamento aprovado, implemente nas três ferramentas: WireMock, Hoverfly e MockServer. Compare: sintaxe, documentação, integração com sua stack.
  • 4. Documente sua recomendação para cada contexto: (a) time Java com Spring, (b) time Node.js com Playwright, (c) time precisando gravar APIs legadas, (d) time precisando simular latência e falhas complexas.
💡 Dica: WireMock é o padrão para Java. Hoverfly tem o melhor suporte a simulação de chaos e latência. MockServer brilha em Kubernetes. Não existe melhor universal, existe a certa para o contexto.
🟠 Pleno · Módulo 2

Tipos de Teste em Profundidade

No nível Pleno, a base conceitual se expande: tipos não-funcionais, testes de mutação, contract testing, chaos engineering e as estratégias de shift-left e feature flags como ferramentas de qualidade.

Performance, Carga e Estresse

Três tipos que costumam ser confundidos. Performance comportamento do sistema sob condições normais, tempo de resposta, throughput, uso de recursos. Carga (Load) comportamento sob a carga esperada de produção. Estresse (Stress) comportamento além do limite, o objetivo é descobrir o ponto de ruptura e como o sistema se recupera. Soak carga sustentada por horas para detectar memory leaks e degradação gradual. Spike pico súbito de carga para simular eventos (Black Friday, campanha viral).

🏋️ Exercícios Rápidos
  • Para um e-commerce, defina critérios de aceite de performance realistas: qual a carga esperada? Qual latência é aceitável para o usuário?
  • Qual a diferença prática entre um teste de carga que passa e um teste de estresse que falha propositalmente?
🔒

Testes de Segurança

Identificar vulnerabilidades antes que cheguem em produção é responsabilidade do QA. Esta categoria abrange desde SAST (análise estática) e DAST (análise dinâmica) até testes de autenticação, autorização e injeção. A referência central é o OWASP Top 10.

📌 Módulo dedicado
  • Este tema possui um módulo completo na trilha Pleno: 🔒 Segurança para QA, cobrindo OWASP Top 10, OWASP ZAP, JWT, autenticação/autorização e laboratório prático com WebGoat.

Testes de Acessibilidade

Garantir que o sistema funciona para todos, incluindo pessoas com deficiências visuais, motoras, auditivas ou cognitivas. O padrão é o WCAG (Web Content Accessibility Guidelines), com níveis A, AA e AAA. Ferramentas: axe DevTools (extensão de browser), WAVE, Lighthouse. Técnicas manuais incluem navegar apenas com teclado (Tab, Enter, Esc) e usar leitores de tela (NVDA, VoiceOver). Acessibilidade não é opcional, em muitos países é obrigação legal.

🏋️ Exercícios Rápidos
  • Instale a extensão axe DevTools e execute no Sauce Demo. Quais violações encontrou? Em qual nível WCAG cada uma se enquadra?
  • Tente completar o fluxo de compra do Sauce Demo usando APENAS o teclado (sem mouse). Conseguiu? Onde travou?
🖥️

Usabilidade e Compatibilidade

Usabilidade o sistema é intuitivo? O usuário consegue completar tarefas sem fricção? Métodos: testes com usuários reais, heurísticas de Nielsen, análise de fluxos com gravação de sessão (Hotjar, FullStory). Compatibilidade o sistema funciona igual em diferentes browsers (Chrome, Firefox, Safari, Edge), sistemas operacionais, dispositivos e resoluções? Ferramentas: BrowserStack, Sauce Labs, LambdaTest para execução cross-browser em nuvem.

🏋️ Exercícios Rápidos
  • Avalie o Sauce Demo usando as 10 Heurísticas de Nielsen. Qual heurística está mais violada?
  • Acesse o Sauce Demo no Firefox, Safari e no modo mobile do Chrome DevTools. Há diferenças visuais ou funcionais?
🧬

Testes de Mutação

Uma técnica para medir a qualidade dos próprios testes, não do código. A ideia: introduza bugs artificiais no código (mutantes) e verifique se seus testes os detectam. Se um mutante sobrevive (seus testes passam mesmo com o bug), significa que sua suíte tem lacunas. A métrica é o mutation score percentual de mutantes mortos. Ferramentas: Stryker (JS/TS), PIT (Java), mutmut (Python). Muito usado em stacks com alta cobertura de testes unitários.

🏋️ Exercícios Rápidos
  • Instale o Stryker num projeto JavaScript com testes Jest. Execute e analise o relatório de mutação. Qual o mutation score inicial?
  • Escolha 3 mutantes sobreviventes e escreva testes novos para matá-los. Como o mutation score mudou?
🔗

Contract Testing Conceitual

Em arquiteturas de microsserviços, os serviços se comunicam via contratos (APIs). Contract testing garante que o consumidor e o provedor concordam com o formato dos dados, sem precisar subir todo o ambiente. O conceito central: consumer-driven contracts, é o consumidor quem define o que espera, e o provedor precisa satisfazer esses contratos. Evita o problema clássico de "funciona no meu ambiente mas quebra no do cliente" causado por mudanças silenciosas de API. A ferramenta de referência é o Pact.

🏋️ Exercícios Rápidos
  • Desenhe um diagrama de dois microsserviços que se comunicam. Quais campos do contrato poderiam quebrar silenciosamente se o time do provedor alterasse o schema?
  • Na prática com Pact: veja o guia de getting started e implemente um contrato básico entre consumer e provider.
🌪️

Chaos Engineering

A prática de introduzir falhas intencionais em produção (ou em ambiente controlado) para descobrir como o sistema se comporta sob condições adversas. A premissa: se você não testar a resiliência, a produção vai testar por você. Experimentos típicos: matar instâncias aleatoriamente, introduzir latência na rede, esgotar memória de um serviço. Ferramenta de referência: Chaos Monkey (Netflix). No Brasil ainda é pouco adotado, mas é cada vez mais cobrado em empresas com arquiteturas distribuídas.

🏋️ Exercícios Rápidos
  • Para um sistema que você conhece, liste 5 falhas que poderiam acontecer em produção. Como você testaria a resiliência do sistema a cada uma?
  • Leia o artigo de chaos engineering do Netflix. Qual foi o primeiro experimento que eles fizeram? O que encontraram?
⬅️

Shift-Left Testing

A estratégia de mover os testes para mais cedo no ciclo de desenvolvimento, antecipando problemas antes que virem código. QA entra na concepção, revisão de requisitos e design de API, reduzindo exponencialmente o custo de correção de bugs.

📌 Módulo dedicado
  • Este tema possui um módulo completo na trilha Pleno: ⬅️ Shift-Left Testing, com conceitos, cursos, leituras complementares e laboratório prático.
🚦

Feature Flags como Estratégia de Teste

Feature flags permitem ativar ou desativar funcionalidades em produção sem um novo deploy. Para QA, isso abre possibilidades: testar uma feature em produção para um subconjunto de usuários, fazer rollback instantâneo se um bug aparecer, comparar comportamento com e sem a feature (A/B testing). Também possibilitam trunk-based development, merges frequentes sem quebrar produção. Ferramentas: LaunchDarkly, Unleash, AWS AppConfig.

🏋️ Exercícios Rápidos
  • Suba um Unleash local com Docker e configure uma feature flag. Implemente um toggle simples num projeto de exemplo que altera o comportamento de uma rota.
  • Como você testaria uma feature que está atrás de uma flag? Escreva casos de teste para os estados: flag ON, flag OFF, e transição entre os dois.
🧪

Laboratório, Tipos de Teste em Profundidade

Um exercício por tipo, da teoria à execução real

1
Performance, Carga e Estresse: três execuções, três análises

Execute os três tipos com k6 contra uma API pública e compare os resultados.

  • 1. Performance baseline escreva um script k6 que faz GET https://reqres.in/api/users com 1 VU por 30 segundos. Anote p50, p95, p99 e throughput. Esse é seu baseline.
  • 2. Carga suba para 50 VUs simultâneos por 2 minutos (carga realista). Os percentis se mantiveram? Adicione um threshold: p95 < 800ms. O teste passou?
  • 3. Estresse rampa de 0 a 300 VUs em 3 minutos. Observe o ponto onde a taxa de erros começa a subir. Documente: em quantos VUs o sistema começou a degradar?
  • 4. Compare os três relatórios. Qual a diferença entre o comportamento do sistema nos três cenários? O que cada tipo de teste revelou que o outro não revelaria?
💡 Dica: O teste de estresse não precisa passar, o objetivo é encontrar o ponto de ruptura. Um sistema que degrada graciosamente (aumenta latência antes de dar erro) é melhor do que um que falha abruptamente.
2
Segurança: OWASP Top 10 na prática

Explore vulnerabilidades reais no OWASP Juice Shop de forma ética e documentada.

  • 1. Acesse OWASP Juice Shop. Complete o desafio de SQL Injection no login: use ' OR 1=1-- no campo de email. O que aconteceu? Qual item do OWASP Top 10 isso representa?
  • 2. Tente um desafio de XSS: encontre um campo que reflita input do usuário sem sanitização. Injete <script>alert('xss')</script>. Funcionou?
  • 3. Instale a extensão OWASP ZAP ou use o Burp Suite Community. Execute um scan passivo na URL do Juice Shop. Quais vulnerabilidades foram identificadas automaticamente?
  • 4. Para cada vulnerabilidade encontrada, documente: tipo (OWASP category), severidade (crítica/alta/média/baixa), como explorar, como mitigar.
💡 Dica: O Juice Shop foi criado propositalmente com vulnerabilidades reais para fins de estudo. Nunca aplique as mesmas técnicas em sistemas sem autorização explícita, mesmo que seja um sistema da sua empresa.
3
Acessibilidade: auditoria completa WCAG no Sauce Demo

Execute uma auditoria de acessibilidade combinando ferramentas automáticas e testes manuais.

  • 1. Instale a extensão axe DevTools no Chrome. Execute na página de produtos do Sauce Demo. Liste todas as violações encontradas com nível WCAG (A, AA ou AAA) e impacto (critical/serious/moderate/minor).
  • 2. Navegue pelo fluxo completo de compra usando APENAS o teclado (Tab para navegar, Enter para clicar, Esc para fechar). Em quais pontos o foco desapareceu ou ficou preso?
  • 3. Ative o leitor de tela do sistema (NVDA no Windows, VoiceOver no Mac com Cmd+F5). Tente completar o login. As instruções do leitor de tela fazem sentido? Os botões têm labels descritivos?
  • 4. Monte um relatório: violações automáticas (axe) + problemas manuais (teclado + leitor de tela). Priorize as 3 correções mais urgentes com justificativa de impacto para o usuário.
💡 Dica: Ferramentas automáticas como axe detectam apenas ~30% dos problemas de acessibilidade. Os 70% restantes só aparecem em testes manuais com teclado e leitor de tela. Use as duas abordagens.
4
Usabilidade e Compatibilidade: heurísticas e cross-browser

Avalie o Sauce Demo pelas heurísticas de Nielsen e teste em múltiplos contextos.

  • 1. Leia as 10 Heurísticas de Nielsen. Para cada uma, identifique um elemento do Sauce Demo que viola ou respeita a heurística. Monte uma tabela com: Heurística | Elemento | Violação/Conformidade | Evidência (screenshot).
  • 2. Acesse o Sauce Demo no Chrome, Firefox e Safari (ou use o modo de simulação de dispositivos do DevTools para Edge e Samsung Internet). Há diferenças visuais ou funcionais entre os browsers?
  • 3. No DevTools do Chrome, ative o modo responsivo (Ctrl+Shift+M). Teste nas dimensões: 375x667 (iPhone SE), 768x1024 (iPad), 1440x900 (desktop). O layout quebrou em alguma resolução?
  • 4. Compile os achados em um relatório de usabilidade: violações de heurística (prioridade alta/média/baixa) + problemas de compatibilidade encontrados.
💡 Dica: Ao reportar problemas de usabilidade, sempre vincule ao impacto no usuário: "O botão de remover item não tem confirmação (viola Heurística 3, Controle do Usuário), o que pode causar frustração ao remover acidentalmente."
5
Testes de Mutação: medindo a qualidade dos seus testes

Use o Stryker para descobrir lacunas na sua suíte de testes JavaScript.

  • 1. Crie um projeto JavaScript simples com uma função calcularDesconto(preco, percentual) e pelo menos 3 testes Jest para ela. Execute os testes, todos devem passar.
  • 2. Instale o Stryker: npm init stryker. Execute npx stryker run. Anote o mutation score inicial e o relatório HTML gerado.
  • 3. Abra o relatório e encontre os mutantes sobreviventes. Para cada um, entenda: qual mudança foi feita no código? Por que seus testes não pegaram?
  • 4. Escreva testes adicionais para matar os mutantes sobreviventes. Execute o Stryker novamente. O score deve ter subido. Documente: quais testes você adicionou e por quê.
💡 Dica: Se um mutante sobrevive, significa que você pode introduzir aquele bug em produção e seus testes não vão detectar. Mutation testing é a forma mais honesta de medir a eficácia real da sua suíte.
6
Contract Testing: consumer e provider com Pact

Implemente um contrato básico entre dois serviços usando Pact JS.

  • 1. Crie dois projetos Node.js: consumer-app (faz GET /users) e provider-app (serve GET /users). No consumer, instale @pact-foundation/pact.
  • 2. No consumer, escreva um teste Pact que define o contrato: "quando chamar GET /users, espero status 200 e um array com objetos que tenham id (number) e name (string)". Execute, o Pact gera um arquivo JSON de contrato.
  • 3. No provider, use o Pact para verificar que sua API satisfaz o contrato gerado. Execute a verificação, deve passar.
  • 4. Quebre o contrato intencionalmente: mude o campo name para nome no provider. Execute a verificação novamente. O que aconteceu? Como isso previne bugs em produção?
💡 Dica: O contrato é gerado pelo consumer, não pelo provider. Isso é o "consumer-driven" do contract testing, quem consome a API define o que precisa, e o provider só precisa satisfazer isso.
7
Chaos Engineering: mapeando e simulando falhas

Planeje experimentos de chaos para um sistema real e simule o mais simples localmente.

  • 1. Para um sistema que você conhece (ou o Sauce Demo como referência), liste 5 falhas que poderiam acontecer em produção: serviço de pagamento fora do ar, banco de dados lento, CDN inacessível, timeout na API de CEP, disco cheio no servidor.
  • 2. Para cada falha, defina o experimento: Hipótese | Como simular | O que o sistema deveria fazer | Como medir.
  • 3. Simule latência de rede localmente: use as Chrome DevTools (Network → Throttling → Custom) para simular uma conexão 3G lenta no Sauce Demo. O sistema se comporta bem? Há timeouts, spinners sem fim, ou a UI quebra?
  • 4. Documente o resultado: o sistema foi resiliente? O que deveria ser implementado para melhorar a resiliência (retry, fallback, graceful degradation)?
💡 Dica: Chaos Engineering começa pequeno, você não precisa matar servidores em produção para começar. Simular latência e erros de rede via DevTools ou proxies como Charles Proxy já revela muito sobre a resiliência do sistema.
8
Shift-Left: entrando antes do desenvolvimento começar

Aplique shift-left numa história de usuário real, identificando ambiguidades antes que virem código.

  • 1. Pegue esta história de usuário: "Como cliente, quero filtrar produtos por categoria para encontrar o que procuro mais rapidamente." Antes de escrever qualquer teste, liste todas as perguntas que você faria ao PO/dev. Mínimo: 8 perguntas.
  • 2. Reescreva os critérios de aceite no formato Given/When/Then. Escreva pelo menos 5 cenários cobrindo: filtro com resultados, filtro sem resultados, múltiplos filtros simultâneos, limpar filtros, filtro após busca.
  • 3. No Sauce Demo, execute o filtro de produtos manualmente. Ele atende aos critérios que você definiu? Encontrou ambiguidades que não estavam nos critérios originais?
  • 4. Compare a história original com seus critérios de aceite. Quantas ambiguidades você identificou? O que teria acontecido se o dev tivesse implementado sem essas perguntas?
💡 Dica: Perguntas de shift-left nunca são "pedantes", são investimento. Uma pergunta respondida no refinamento vale 10x menos do que um bug encontrado em produção.
9
Feature Flags: testando os dois estados de uma funcionalidade

Configure uma feature flag com Unleash e escreva testes para os dois estados.

  • 1. Suba o Unleash localmente com Docker: docker run -p 4242:4242 unleashorg/unleash-server. Acesse localhost:4242 e crie uma feature flag chamada novo-checkout.
  • 2. Num projeto Node.js simples, instale unleash-client e implemente uma rota que retorna comportamentos diferentes dependendo do estado da flag: novo-checkout = ON retorna o novo fluxo, OFF retorna o fluxo atual.
  • 3. Escreva testes para os dois estados: flag ON (novo fluxo), flag OFF (fluxo atual). Execute ambos os conjuntos de testes.
  • 4. Ative e desative a flag pelo painel do Unleash enquanto os testes rodam. Documente: como você garantiria em CI que ambos os estados estão sempre cobertos?
💡 Dica: Sempre teste os dois estados de uma flag, ON e OFF. Um bug clássico é a feature nova funcionar mas a remoção da flag (quando ela vai para 100% dos usuários) quebrar o código antigo que não foi limpo.
🟠 Pleno · Módulo 3

Estratégias e Cobertura

Domine a aplicação estratégica dos diferentes tipos de teste para maximizar cobertura com eficiência.

💨

Smoke + Regressão

Smoke 5-10 testes críticos executados a cada deploy, se falhar, bloqueia o pipeline. Regressão a suíte completa executada em frequência menor. A chave é saber o que vai no smoke (crítico, rápido, estável) vs. na regressão (cobertura ampla).

🏋️ Exercícios Rápidos
  • Crie uma suíte de smoke com 5 testes para o Sauce Demo que execute em menos de 2 minutos.
  • Configure a tag @smoke no Playwright e o script de CI para executar só esses testes no PR.
🧩

Testes de Integração de API

Verificam a comunicação entre serviços: API Banco, API API, Frontend API. Essencial em microsserviços. O QA pleno define a estratégia de integração: quais fluxos precisam de teste E2E vs. apenas testes de contrato.

🏋️ Exercícios Rápidos
  • Mapeie todos os pontos de integração de uma aplicação que você conhece.
  • Para cada integração, defina: qual tipo de teste cobre melhor e por quê.
🔍

Teste Exploratório Avançado

Para o pleno, o teste exploratório vai além da exploração livre. Use heurísticas como SFDIPOT (Structure, Function, Data, Interface, Platform, Operations, Time) e HICCUPPS para guiar sessões mais profundas e consistentes.

🏋️ Exercícios Rápidos
  • Pesquise a heurística SFDIPOT e aplique em uma sessão de 45 minutos no OrangeHRM.
  • Documente usando o formato de Session-Based Test Management (SBTM).
🎯

Técnicas Avançadas

Tabela de Decisão para lógicas complexas com múltiplas condições. Transição de Estados para sistemas com fluxos de status (pedidos, aprovações). Pairwise Testing para reduzir o número de combinações em testes com muitos parâmetros.

🏋️ Exercícios Rápidos
  • Crie uma tabela de decisão para um sistema de frete com 3 condições de negócio.
  • Desenhe o diagrama de estados para o fluxo de um pedido de e-commerce e derive testes para cada transição.
🧪

Laboratório, Smoke Test e Regressão no CI

Suíte organizada por tags integrada ao GitHub Actions

1
Smoke Test Automatizado com Playwright

Crie uma suíte de smoke que executa em menos de 2 minutos e bloqueia PRs quando falha.

  • 1. Anote seus 5 testes mais críticos com test("@smoke titulo", ...).
  • 2. No package.json: "smoke": "playwright test --grep @smoke".
  • 3. No GitHub Actions, configure para rodar o smoke em PRs e a regressão completa no merge para main.
  • 4. Teste: faça um selector quebrar intencionalmente. O PR ficou bloqueado? O erro foi claro?
// .github/workflows/playwright.yml on: { pull_request: { branches: [main, develop] } } jobs: smoke: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npx playwright install --with-deps chromium - run: npm run smoke - uses: actions/upload-artifact@v4 if: always() with: { name: smoke-report, path: playwright-report/ }
💡 Dica: Smoke tests instáveis (flaky) destroem a confiança no CI. Se um smoke falhar mais de 2 vezes sem bug real, remova-o do smoke e investigue a causa do flakiness antes de recolocar.
2
Teste de Regressão automatizado com Playwright e tags

Monte uma suíte de regressão organizada por tags que cobre os fluxos críticos do Sauce Demo.

  • 1. No projeto Playwright existente, organize os testes com 3 tags: @smoke (5 testes críticos, menos de 2 min), @regression (cobertura ampla) e @flaky (testes instáveis em quarentena).
  • 2. Configure 3 scripts no package.json: "smoke", "regression" e "full" usando --grep do Playwright.
  • 3. Implemente pelo menos 10 testes de regressão cobrindo: login válido/inválido, ordenação de produtos, adicionar/remover do carrinho, checkout completo e logout.
  • 4. Simule um bug: comente um seletor. Execute o smoke, veja falhar. Execute a regressão completa. Documente quais testes detectaram o problema.
💡 Dica: A suíte de regressão deve ser executada a cada merge para develop. Se demorar mais de 15 minutos, está grande demais, divida em shards paralelos ou reduza o escopo dos testes E2E.
3
Teste exploratório avançado com charter

Conduza sessão exploratória com time-boxing e relatório.

  • 1. Escreva 3 charters para o Sauce Demo com missão, área e riscos específicos. Ex: 'Explorar checkout focando em estados de erro de pagamento para identificar bugs de usabilidade'.
  • 2. Execute cada charter em sessões de 25 minutos. Durante cada sessão, documente em tempo real: o que testou, encontrou e as perguntas que surgiram.
  • 3. Produza um Session Test Report: cobertura vs. planejado, bugs por severidade, áreas não cobertas e recomendações para a próxima sessão.
💡Dica: O charter não é um roteiro, é uma bússola. Se durante a sessão encontrar algo mais interessante, siga o achado e documente o desvio.
4
Técnicas avançadas de design de teste

Use técnicas formais para derivar casos de alta cobertura.

  • 1. Para uma regra com múltiplas condições (ex: frete por CEP, peso e valor), aplique análise de causa-efeito: identifique todas as causas e efeitos possíveis.
  • 2. Construa a tabela de decisão completa. Aplique cobertura MC/DC: cada condição deve afetar independentemente o resultado. Quantos casos o MC/DC requer?
  • 3. Compare a cobertura da técnica formal vs. intuição. Qual encontrou mais casos de borda? Documente a diferença como argumento para técnicas formais em regras críticas.
💡Dica: MC/DC é exigido em sistemas críticos como aviação (DO-178C). Mesmo fora desses domínios, revela gaps que testes intuitivos sistematicamente perdem.
🟠 Pleno · Módulo 4

Acessibilidade

Garanta que aplicações sejam usáveis por todos. WCAG 2.1 AA é o padrão de mercado, saiba testar e automatizar.

WCAG 2.1 na Prática

Os 4 princípios WCAG: Perceptível (texto alternativo, contraste), Operável (teclado, tempo suficiente), Compreensível (linguagem clara, erros identificáveis), Robusto (compatível com tecnologias assistivas). Nível AA é o exigido na maioria dos contratos.

🏋️ Exercícios Rápidos
  • Navegue em um site usando apenas o teclado (Tab, Enter, Esc, setas). Documente problemas de foco.
  • Verifique o contraste de cores de 3 elementos com WebAIM Contrast Checker.
🔦

Axe-Core + Playwright

Integre o axe-core ao Playwright para detectar violações WCAG automaticamente em cada execução. Configure para falhar apenas em violações critical e serious, não bloqueie o pipeline com alertas informativos.

🏋️ Exercícios Rápidos
  • Instale @axe-core/playwright e crie testes de acessibilidade para 3 páginas do demoqa.com.
  • Configure o threshold: falhar apenas em critical/serious. Log as demais.
⌨️

Testes Manuais de Acessibilidade

Ferramentas automáticas detectam apenas ~30% dos problemas de acessibilidade. Os 70% restantes exigem testes manuais com teclado e leitor de tela. Checklist essencial: navegação completa por Tab, foco visível em todos os elementos interativos, anúncios corretos do VoiceOver/NVDA, contraste mínimo de 4.5:1 para texto normal e formulários com labels associados.

🏋️ Exercícios Rápidos
  • Teste de teclado: Desconecte o mouse e tente completar o fluxo de login + compra do Sauce Demo usando apenas Tab, Shift+Tab, Enter e Esc. Documente onde o foco sumiu ou ficou preso.
  • Leitor de tela: Ative o VoiceOver (Mac: Cmd+F5) ou NVDA (Windows, gratuito) e navegue pelo Sauce Demo com os olhos fechados por 3 minutos. O que foi confuso ou impossível?
  • Verifique contraste de cor com a extensão gratuita "axe DevTools" ou "Colour Contrast Analyser". Há algum elemento abaixo do mínimo WCAG AA (4.5:1)?
🧪

Laboratório, Automação de Acessibilidade

Integre axe-core ao Playwright com relatório de violações WCAG

1
Teste de Acessibilidade Automatizado

Adicione testes de acessibilidade à sua suíte Playwright existente.

  • 1. Instale: npm i -D @axe-core/playwright
  • 2. Crie accessibility.spec.ts com o código abaixo. Execute em 3 páginas do demoqa.com.
  • 3. Para cada violação encontrada: anote impacto (critical/serious/moderate), elemento afetado e regra WCAG violada.
  • 4. Escolha 1 violação critical, pesquise a correção HTML e documente antes/depois.
import { test, expect } from '@playwright/test'; import AxeBuilder from '@axe-core/playwright'; test('sem violações críticas', async ({ page }) => { await page.goto('https://demoqa.com'); const results = await new AxeBuilder({ page }) .withTags(['wcag2a', 'wcag2aa']).analyze(); results.violations.forEach(v => console.log(`[${v.impact}] ${v.id}: ${v.description}`) ); const blocker = results.violations .filter(v => ['critical','serious'].includes(v.impact)); expect(blocker).toHaveLength(0); });
💡 Dica: Ferramentas automáticas detectam ~30-40% das violações WCAG. Para cobertura completa combine com: navegação por teclado manual e leitor de tela (NVDA gratuito no Windows).
2
Teste manual de acessibilidade com teclado e leitor de tela

Ferramentas automáticas detectam apenas 30-40% dos problemas. Teste manualmente os 60% restantes.

  • 1. Abra o demoqa.com e feche o mouse. Navegue usando apenas: Tab (próximo elemento), Shift+Tab (anterior), Enter (ativar), Esc (fechar), setas (selecionar opções).
  • 2. Documente: há elementos que não recebem foco? O indicador de foco é visível? Alguma funcionalidade é inacessível pelo teclado? Formulários têm labels adequados?
  • 3. Instale o NVDA (gratuito, Windows) ou use o VoiceOver (Mac: Cmd+F5). Navegue pela página ouvindo o leitor. O conteúdo faz sentido sem ver a tela?
  • 4. Liste 5 barreiras de acessibilidade encontradas. Para cada uma, classifique pelo critério WCAG (A, AA ou AAA) e sugira a correção em HTML.
💡 Dica: Teste com teclado antes de usar o leitor de tela. Se a navegação por teclado não funciona, o leitor de tela também não vai funcionar. São problemas em camadas.
3
Axe-core no pipeline de CI

Configure testes de acessibilidade automatizados que rodam em cada PR.

  • 1. Adicione @axe-core/playwright ao projeto. Escreva um teste que abre cada página principal, roda o scan e falha se encontrar violações Critical ou Serious.
  • 2. Configure threshold: falha apenas para violações novas. Declare as existentes como aceitas temporariamente no arquivo de configuração do axe.
  • 3. Integre no GitHub Actions. Configure comentário no PR com resumo das violações: número por nível de impacto e link para o relatório completo.
💡Dica: Acessibilidade automatizada no CI cria barreira contra regressões. Combine: automação detecta violações conhecidas, humano detecta o que a automação perde.
🟠 Pleno · Módulo 5

CI/CD e Pipelines

Integre seus testes ao pipeline e transforme QA em uma barreira contínua de qualidade.

⚙️

GitHub Actions

Workflows YAML que executam testes automaticamente a cada push/PR. Matrix builds para testar em múltiplos browsers/ambientes em paralelo. Gratuito para projetos públicos.

🏋️ Exercícios Rápidos
  • Crie uma pipeline que executa smoke no PR e regressão completa no merge.
  • Configure matrix para rodar em Chromium, Firefox e WebKit simultaneamente.
🏗️

Headless + Docker

Testes headless rodam sem interface gráfica, essencial em CI. Docker garante que o ambiente é idêntico em toda máquina e no servidor. Combine: Playwright headless + container Docker = testes 100% reproduzíveis.

🏋️ Exercícios Rápidos
  • Configure um Dockerfile para seu projeto Playwright.
  • Execute os testes dentro do container localmente antes de subir para CI.
📊

Relatórios no CI

Publicar relatórios de teste no CI fecha o loop: todo PR tem um link para o relatório HTML. Allure, Playwright HTML reporter e jUnit XML são os formatos mais usados. O if: always() garante que o relatório é publicado mesmo quando os testes falham.

🏋️ Exercícios Rápidos
  • Configure upload de relatório como artifact no GitHub Actions.
  • Publique o relatório HTML do Playwright como GitHub Pages do repositório.
🚦

Quality Gates: o que deve bloquear um merge

Um quality gate é uma condição que, se não satisfeita, bloqueia o avanço no pipeline. É a tradução de política de qualidade em código: não é mais opinião do QA, é regra automatizada. Gates típicos: cobertura mínima de código, zero testes falhando, ausência de vulnerabilidades críticas (Snyk/Dependabot), score mínimo de acessibilidade (Lighthouse) e ausência de secrets expostos no código.

A chave é calibrar o gate corretamente: gates muito rigorosos paralisam o time, muito frouxos não protegem nada. Comece conservador e evolua com base nos dados de incidentes reais do seu projeto.

🏋️ Exercícios Rápidos
  • No seu pipeline GitHub Actions, adicione um step que falha se algum teste falhar: if: failure() para notificar e exit 1 para bloquear. Verifique que o PR não pode ser mergeado com pipeline vermelho.
  • Configure o SonarQube ou CodeClimate como gate de qualidade: defina cobertura mínima de 70% e zero issues críticos. Simule uma quebra adicionando código sem teste e veja o pipeline falhar.
  • Adicione o lighthouse-ci como gate: npm i -g @lhci/cli. Configure lighthouserc.json com score mínimo de performance 80 e acessibilidade 90. O merge deve bloquear se o score cair abaixo.
  • Documente os gates do seu projeto em um QUALITY_GATES.md: quais são, por que foram escolhidos e qual o critério de revisão. Gates sem justificativa tendem a ser removidos na primeira pressão.
🔀

Paralelismo e Matrix Builds

Suítes de testes lentas são o maior inimigo do feedback rápido. Paralelismo distribui os testes em múltiplos workers simultaneamente. Matrix builds executam a mesma suíte em combinações de versões (Node 18/20/22, Chrome/Firefox/WebKit) ao mesmo tempo. No GitHub Actions: strategy.matrix define as combinações, sharding divide os testes por worker.

🏋️ Exercícios Rápidos
  • Configure matrix build no GitHub Actions para rodar seus testes E2E em Chrome, Firefox e WebKit simultaneamente. Compare o tempo total com a execução sequencial.
  • Use o sharding nativo do Playwright: --shard=1/4 --shard=2/4 etc. Divida sua suíte em 4 workers no CI e use merge-reports para consolidar o relatório final.
  • Meça o tempo antes e depois. Documente: qual foi o ganho? Qual o custo em minutos de CI consumidos? Vale a pena para o tamanho atual da suíte?
📖 Leituras Recomendadas
🧪

Testcontainers: banco de dados real nos testes

Testcontainers sobe um container Docker real durante o teste e destrói depois. Sem mock de banco, sem dados compartilhados entre testes, sem "funciona local mas falha no CI". Cada teste que precisa de banco de dados cria o seu, usa e limpa. Suporta PostgreSQL, MySQL, MongoDB, Redis, Kafka e dezenas de outros serviços.

A grande vantagem sobre mocks: você testa o SQL real, as migrações reais e o comportamento real do banco, não uma simulação que pode esconder bugs de borda.

🏋️ Exercícios Rápidos
  • Em um projeto Java ou Node.js, adicione Testcontainers. Escreva um teste de integração que: sobe um PostgreSQL, cria uma tabela, insere dados, consulta e valida. O banco é destruído ao final automaticamente.
  • Compare o mesmo teste com e sem Testcontainers: com mock de banco vs. banco real. Quais diferenças de comportamento você encontrou? O mock escondia algum bug?
  • Configure Testcontainers para rodar no CI. Verifique que o Docker está disponível no runner (GitHub Actions suporta por padrão). Execute a suíte e valide que os containers são criados e destruídos corretamente.
🔷

Azure DevOps Pipelines

O Azure DevOps é a plataforma Microsoft de CI/CD, gestão de backlog (Azure Boards), repositórios (Azure Repos) e artefatos (Azure Artifacts). Para QAs em stacks Microsoft (.NET, C#, Azure cloud), é o equivalente ao GitHub Actions: pipelines definidas em YAML que executam testes automaticamente a cada commit ou PR. A integração nativa com Visual Studio, Test Plans e Azure Boards fecha o ciclo de qualidade dentro do mesmo ecossistema.

Conceitos essenciais: Pipeline (equivalente ao workflow do GitHub Actions), Stage (fase: build, test, deploy), Job (conjunto de steps em um agent) e Agent Pool (runners Microsoft-hosted ou self-hosted).

🏋️ Exercícios Rápidos
  • Crie uma conta gratuita no Azure DevOps (dev.azure.com) e um projeto. Configure um pipeline YAML que: faz checkout do repositório, instala dependências e executa os testes com npm test ou dotnet test. Verifique que o pipeline roda automaticamente a cada push.
  • Configure um pipeline multi-stage com três stages: Build (compila e roda testes unitários), Test (roda testes de integração e E2E) e Deploy (só executa se os dois anteriores passaram). Adicione aprovação manual antes do deploy em produção.
  • Publique os resultados de teste no formato JUnit XML usando a task PublishTestResults. Acesse a aba "Tests" do pipeline e verifique que os resultados aparecem com histórico de execuções, taxa de sucesso e testes mais lentos.
  • Configure um Quality Gate usando a task PublishCodeCoverageResults: defina cobertura mínima de 70% e configure o pipeline para falhar abaixo desse threshold. Verifique que um PR com cobertura insuficiente não pode ser completado.
🧪

Laboratório, Pipeline Completa do Zero

GitHub Actions com smoke, regressão, relatório e bloqueio de PR

1
Pipeline GitHub Actions Completa

Configure uma pipeline profissional que executa testes, publica relatório e bloqueia merge em falha.

  • 1. Crie .github/workflows/playwright.yml com o YAML abaixo. Faça push e abra um PR.
  • 2. Em Settings Branches Branch protection rules: adicione o job de testes como "Required status check".
  • 3. Faça um teste falhar intencionalmente. O PR ficou bloqueado? A notificação de falha chegou por e-mail?
  • 4. Acesse o artifact do relatório na página do workflow Actions e confirme que o HTML está acessível.
name: QA Pipeline on: pull_request: { branches: [main, develop] } push: { branches: [main] } jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npx playwright install --with-deps - run: npx playwright test - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report path: playwright-report/
💡 Dica: O if: always() no upload do artifact é ESSENCIAL. Sem ele, o relatório só é publicado quando os testes passam, exatamente quando você não precisa dele.
2
Pipeline com matrix strategy: testando em múltiplos browsers

Configure execução paralela em 3 browsers com GitHub Actions usando matrix strategy.

  • 1. No seu workflow playwright.yml, adicione uma matrix strategy com os 3 browsers do Playwright: chromium, firefox e webkit.
  • 2. Configure os shards: divida a suíte em 2 shards para cada browser, totalizando 6 jobs paralelos. Use --shard=1/2 e --shard=2/2.
  • 3. Configure um job de merge-reports que roda após todos os shards e unifica os relatórios em um único HTML usando npx playwright merge-reports.
  • 4. Calcule a economia de tempo: sem paralelismo quanto levaria? Com 6 jobs paralelos, quanto leva agora? Documente o resultado.
# .github/workflows/playwright.yml (trecho) jobs: test: strategy: fail-fast: false matrix: browser: [chromium, firefox, webkit] shard: [1, 2] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npx playwright install --with-deps ${{ matrix.browser }} - run: npx playwright test --project=${{ matrix.browser }} --shard=${{ matrix.shard }}/2 - uses: actions/upload-artifact@v4 if: always() with: name: blob-report-${{ matrix.browser }}-${{ matrix.shard }} path: blob-report/
💡 Dica: Com matrix strategy e shards, uma suíte de 60 testes que levaria 30 minutos pode rodar em menos de 5 minutos. Em empresas com muitos PRs por dia, isso é a diferença entre CI útil e CI ignorado.
3
Headless e Docker no pipeline

Execute testes E2E em modo headless dentro de um container.

  • 1. Crie um Dockerfile para Playwright usando a imagem oficial mcr.microsoft.com/playwright:latest. Instale dependências e configure o script de teste.
  • 2. Execute os testes no container: docker run playwright-tests. Verifique que passam sem interface gráfica. Use o relatório HTML como artefato de saída.
  • 3. Integre no GitHub Actions: step que faz build da imagem e executa os testes. Configure upload do relatório como artefato para download após a execução.
💡Dica: Testes que passam local mas falham no CI têm problema de ambiente. Docker elimina essa desculpa: o container é o mesmo local e no CI.
4
Relatórios de teste no CI

Configure publicação automática de relatórios no pipeline.

  • 1. No GitHub Actions, configure Allure Report: instale allure-playwright, execute com output para allure-results e use a action de publicação como GitHub Pages.
  • 2. Configure o JUnit XML como formato adicional. Use upload-artifact para salvar os XMLs. Verifique que o GitHub parseia os resultados na aba Tests do Actions.
  • 3. Configure notificação de falha: use if: failure() para enviar mensagem no Slack ou criar issue quando testes falharem na main.
💡Dica: Relatórios que ninguém acessa não existem. Envie o link automaticamente no PR ou canal do time. Visibilidade cria responsabilidade.
5
Quality Gates no pipeline

Configure gates automáticos que bloqueiam merges quando a qualidade cai.

  • 1. Configure o SonarCloud no repositório. Defina Quality Gate: cobertura mínima de 70%, zero bugs críticos e zero vulnerabilidades. Configure status check para bloquear o PR.
  • 2. Simule quebra de gate: adicione função sem teste e abra um PR. O pipeline deve bloquear automaticamente. Adicione o teste e verifique que o gate passa.
  • 3. Documente os gates em QUALITY_GATES.md: quais são, por que foram escolhidos, critério de revisão semestral e quem aprova exceções.
💡Dica: Um quality gate novo deve começar conservador e evoluir com dados históricos. Começar com 80% num projeto com 20% garante que o gate seja ignorado desde o primeiro dia.
6
Paralelismo e matrix builds

Divida a suíte em workers paralelos e meça o ganho.

  • 1. Configure sharding no Playwright: divida em 4 shards com --shard=1/4 até --shard=4/4 no GitHub Actions com matrix strategy.
  • 2. Use playwright merge-reports para consolidar os 4 relatórios num único HTML. Configure como artefato. Verifique que todos os testes aparecem.
  • 3. Meça: tempo sequencial vs. paralelo. Documente o ganho em minutos e o custo em runners adicionais. Justifique (ou não) a adoção permanente.
💡Dica: Paralelismo vale mais para suítes com mais de 10 minutos. Para suítes menores, o overhead de setup dos runners pode anular o ganho.
7
Pipeline multi-stage no Azure DevOps

Configure pipeline completo com stages de build, teste e deploy.

  • 1. Crie pipeline YAML com 3 stages: Build (npm install + build), Test (npm test + PublishTestResults) e Deploy (só executa se os anteriores passaram).
  • 2. Configure a task PublishTestResults com formato JUnit. Acesse a aba Tests do pipeline e verifique histórico de execuções e testes mais lentos.
  • 3. Adicione aprovação manual antes do Deploy: configure um Environment com regra de aprovação do QA lead. Simule o fluxo completo e documente o tempo médio.
💡Dica: Aprovação manual não é falta de confiança na automação. É um checkpoint humano onde o QA lead confirma que o contexto de negócio permite o deploy.
🟠 Pleno · Módulo 6

Gestão de Testes

Organize, execute e reporte ciclos de teste com a ferramenta líder do mercado.

🇧🇷

MeloQA: gestão avançada e MeloAI

No nível pleno, o MeloQA vai além do bug tracker: rastreabilidade completa entre requisitos, casos de teste e bugs, ciclos de sprint, relatórios de cobertura e o MeloAI para geração de casos de teste com IA. A integração nativa com Jira sincroniza bugs diretamente no board do time de desenvolvimento.

🏋️ Exercícios Rápidos
  • Configure um projeto completo no MeloQA: crie casos de teste, execute um ciclo e registre os bugs com evidência.
  • Ative a integração com Jira e sincronize um bug do MeloQA com um card no Jira. Verifique a rastreabilidade bidirecional.
  • Use o MeloAI para gerar casos de teste a partir de uma descrição de funcionalidade. Avalie e refine os cenários gerados.
🗂️

TestRail na Prática

O TestRail organiza casos de teste em suítes, permite criar planos de execução, rastrear resultados e gerar relatórios de cobertura. O QA pleno cria as estruturas e lidera as execuções.

🏋️ Exercícios Rápidos
  • Crie um projeto no TestRail (trial gratuito) e importe seus casos de teste do OrangeHRM.
  • Execute um ciclo completo e analise o relatório: quantos passaram, falharam, ficaram bloqueados?
📋

Plano de Testes

O plano de testes define: escopo, abordagem, recursos, ambiente, critérios de entrada/saída e riscos. É o contrato entre o QA e os stakeholders. Um bom plano evita discussões no final do sprint sobre o que foi ou não testado.

🏋️ Exercícios Rápidos
  • Crie um plano de testes para o módulo de Recrutamento do OrangeHRM com todos os elementos.
  • Defina critérios de saída claros: quando o QA pode assinar que o módulo está pronto?
🗄️

Test Data Management

Test Data Management (TDM) é a prática de criar, versionar, proteger e limpar os dados usados em testes. Sem uma estratégia de TDM os times enfrentam: testes que falham por dados inconsistentes entre ambientes, dados sensíveis de produção em ambientes de teste (risco de compliance), e suítes que dependem de estado compartilhado e não rodam de forma isolada.

Os 3 pilares do TDM são: Criação (dados sintéticos vs. mascarados), Isolamento (cada teste cria e limpa seus próprios dados) e Versionamento (seeds como código, versionados no repositório).

🏋️ Exercícios Rápidos
  • Dados sintéticos: Use Faker.js ou Faker (Python) para gerar 20 usuários com dados realistas (nome, e-mail, CPF, endereço). Substitua qualquer dado real hardcoded nos seus testes por dados gerados dinamicamente.
  • Isolamento: Refatore testes de API para criar dados no beforeEach e limpar no afterEach. Execute em paralelo, devem passar sem interferir.
  • Seeds como código: Crie seeds/test-users.json no repositório com dados de teste padrão. Configure o CI para rodar o seed antes dos testes de integração.
  • Mascaramento: Para um banco com dados reais (ou simulados), aplique mascaramento nos campos PII: CPF → XXX.XXX.XXX-XX, e-mail → manter domínio e mascarar usuário. Documente quais campos são PII e como são tratados.
🧪

Laboratório, Ciclo Completo de Testes no TestRail

Da escrita dos casos à execução e relatório profissional

1
Ciclo de Teste Completo no TestRail

Execute um ciclo de teste real com TestRail, cobrindo planejamento, execução e relatório.

  • 1. Crie a estrutura no TestRail: Project Suite Section Test Cases. Adicione 10 casos para o módulo de login do OrangeHRM.
  • 2. Crie um Test Plan com ambiente definido: browser, OS, URL do ambiente de homologação.
  • 3. Execute todos os casos e marque: Passed, Failed, Blocked (com comentário explicando o bloqueio).
  • 4. Gere o relatório de execução. Qual é a taxa de sucesso? Quais bugs precisam ser abertos no Jira?
💡 Dica: Vincule os casos de teste do TestRail com as issues do Jira usando a integração nativa. Isso cria rastreabilidade: story critério de aceitação caso de teste resultado de execução.
2
Métricas de qualidade com um ciclo de sprint completo

Execute um ciclo de QA completo no TestRail e extraia métricas reais para apresentar ao time.

  • 1. No TestRail, crie um Test Run com os 10 casos de teste do OrangeHRM. Execute todos e marque o resultado de cada um: Passed, Failed ou Blocked.
  • 2. Ao finalizar, extraia as métricas: % de aprovação, % de falha, % bloqueado, defeitos encontrados por severidade.
  • 3. Crie um bug no Jira para cada teste que falhou, com evidência, e vincule ao caso de teste no TestRail usando a integração nativa.
  • 4. Monte um relatório de 1 página com: resumo do ciclo, métricas, bugs abertos e recomendação de Go/No-Go para o release. Este é o entregável real de um QA pleno.
💡 Dica: A recomendação de Go/No-Go deve ser baseada em critérios definidos antes do início dos testes (critérios de saída). Se não há critérios pré-definidos, a decisão vira política e não qualidade.
3
Criando e executando um plano de testes

Produza um plano completo para uma feature e execute-o.

  • 1. Para o carrinho do Sauce Demo, escreva um plano com: escopo, itens fora do escopo, riscos, abordagem (manual/automatizado/exploratório), ambiente necessário e critérios de saída.
  • 2. Execute o plano e registre: casos que passaram, falharam e foram bloqueados. Atualize com os achados reais vs. planejado.
  • 3. Produza um resumo executivo de 1 página para o PO: status de qualidade, bugs por severidade, cobertura real vs. planejada e recomendação de go/no-go com justificativa.
💡Dica: Um plano de 1 página com escopo claro e critérios explícitos vale mais do que um documento de 50 páginas que ninguém lê.
4
Test Data Management na prática

Implemente TDM com dados sintéticos e isolamento por teste.

  • 1. Use Faker.js ou Faker Python para gerar 20 usuários com dados realistas. Substitua qualquer dado hardcoded nos testes por dados gerados dinamicamente.
  • 2. Refatore dois testes de API para usar beforeEach (criar) e afterEach (limpar). Execute ambos em paralelo 5 vezes. Dados de um interferem no outro?
  • 3. Identifique campos PII (nome, CPF, e-mail). Aplique mascaramento nos dados de teste. Documente a política de dados do time.
💡Dica: Dados de teste controlados tornam os testes determinísticos: 10 execuções devem dar o mesmo resultado. Se o resultado muda com os dados, o problema é a estratégia de dados.
🟠 Pleno · Módulo 7

Monitoramento e Relatórios

Allure Reports e integração com dashboards de monitoramento.

📋

Allure Reports

Gera relatórios HTML ricos com histórico de execuções, screenshots automáticos em falhas, gráficos de tendência e anotações de feature/severity. Integra com TestNG, JUnit, Pytest, Cucumber e Playwright.

🏋️ Exercícios Rápidos
  • Configure Allure no Playwright. Adicione annotations: feature, severity, description.
  • Configure captura automática de screenshot em falhas e publique no GitHub Pages.
📈

Grafana e Sentry

Sentry captura erros em produção automaticamente, com stack trace completo. Grafana dashboards para métricas de health da aplicação. QA pleno configura alertas para detectar regressões em produção antes do usuário.

🏋️ Exercícios Rápidos
  • Configure Sentry em uma aplicação de exemplo.
  • Acesse o dashboard do Sentry e analise os erros capturados: tipo, frequência e impacto.
📈

Métricas de Qualidade no Dashboard

Um dashboard de qualidade eficaz mostra o estado real da suíte de testes: taxa de sucesso, tempo médio de execução, flaky tests recorrentes e tendência de cobertura. Ferramentas como Allure TestOps, ReportPortal e painéis customizados no Grafana transformam dados de CI em inteligência acionável para o time.

🏋️ Exercícios Rápidos
  • No seu projeto Playwright ou Cypress, configure a exportação de resultados em formato JUnit XML. Importe no GitHub Actions e habilite o test reporter nativo para visualizar resultados por PR.
  • Identifique os 3 testes mais lentos da sua suíte e os 3 testes que mais falharam no último mês. Para cada grupo, proponha uma ação: otimização, redesign ou remoção.
  • Crie um relatório semanal simples (pode ser um markdown no GitHub) com: total de testes, % passando, flaky tests identificados e bugs encontrados pelos testes antes do deploy.
🧪

Laboratório, Allure com Screenshots e Histórico

Relatórios profissionais com tendências de execução ao longo do tempo

1
Allure Framework no Playwright

Configure o Allure para gerar relatórios com histórico, screenshots em falhas e categorização.

  • 1. Instale: npm i -D allure-playwright e npm i -g allure-commandline. Configure em playwright.config.ts.
  • 2. Nos testes, adicione: test.info().annotations.push({type:"feature", description:"Login"})
  • 3. Configure hook afterEach para screenshot em falhas: if (testInfo.status === "failed") await page.screenshot({...})
  • 4. Execute 3 vezes. Gere com histórico: copie allure-report/history allure-results/. Rode allure generate --clean && allure open
💡 Dica: O histórico do Allure mostra quais testes são flaky (passam e falham alternando). Um teste que flutua sem motivo aparente é um candidato a investigação imediata.
2
Detectando testes flaky com histórico do Allure

Use o histórico do Allure para identificar testes que passam e falham alternadamente, o sinal mais claro de instabilidade.

  • 1. Execute sua suíte Playwright 5 vezes seguidas (pode usar um loop no terminal: for i in 1 2 3 4 5; do npx playwright test; done).
  • 2. A cada execução, gere o relatório Allure preservando o histórico. Após 5 execuções, abra o relatório e vá em "Suites" ou "Timeline".
  • 3. Identifique testes que não têm resultado consistente (às vezes passa, às vezes falha). Esses são seus testes flaky.
  • 4. Para cada teste flaky encontrado: analise a causa (seletor instável? timing? dado compartilhado?) e aplique a correção. Adicione waitFor, melhore o seletor ou isole o dado de teste.
💡 Dica: Um teste flaky é pior que um teste ausente. Ele treina o time a ignorar falhas de CI ("ah, deve ser flaky"). Flakiness acima de 2% numa suíte é sinal de alerta crítico.
3
Dashboard de qualidade com métricas reais

Configure um dashboard que o time consulte ativamente.

  • 1. No Grafana (gratuito), crie dashboard com: taxa de sucesso dos testes ao longo do tempo, tempo de execução da suíte por semana e testes ignorados por sprint.
  • 2. Configure uma fonte de dados com dados históricos de 4 sprints. Identifique tendências: a suíte está ficando mais lenta? Taxa de sucesso caiu após alguma mudança?
  • 3. Apresente na retrospectiva da próxima sprint. Use os dados para propor uma ação concreta com métrica de sucesso definida.
💡Dica: Dashboard consultado uma vez por sprint vale mais que um dashboard perfeito que ninguém acessa. Comece com 3 métricas que o time realmente se importa.
🟠 Pleno · Módulo 8

IA como Ferramenta de Produtividade

Use LLMs e ferramentas de IA para ampliar sua capacidade de QA, não para substituir seu julgamento.

💬

LLMs para QA Pleno

Claude, GPT-4 e Gemini podem: gerar casos de teste a partir de user stories, converter critérios em Gherkin, revisar planos de teste, gerar dados de massa realistas e explicar stack traces complexos. A chave é saber fazer as perguntas certas.

🏋️ Exercícios Rápidos
  • Use o Claude para gerar 15 casos de teste a partir de uma user story. Avalie e refine o output.
  • Crie um prompt para converter critérios de aceitação em cenários BDD (Given/When/Then).
👁️

Applitools Eyes, Visual Testing

Detecta regressões visuais com Visual AI, comparação inteligente que ignora diferenças insignificantes (anti-aliasing) e destaca mudanças visuais reais. Integra com Playwright e Cypress.

🏋️ Exercícios Rápidos
  • Crie conta gratuita no Applitools. Integre com Playwright. Crie baseline visual do Sauce Demo.
  • Simule uma regressão visual via DevTools e confirme que o Applitools detecta.
🔬

CodiumAI e GitHub Copilot

CodiumAI e GitHub Copilot sugerem testes diretamente na IDE enquanto você escreve código. Aceleram a criação de testes unitários e ajudam a cobrir casos que você poderia perder.

🏋️ Exercícios Rápidos
  • Instale CodiumAI no VS Code. Para uma função de cálculo de desconto, aceite as sugestões de teste.
  • Avalie a qualidade dos testes sugeridos: são relevantes? Cobrem edge cases?
🧪

Laboratório, Prompt Cookbook e Applitools

Construa seus prompts reutilizáveis e implemente testes visuais com IA

1
Seu QA Prompt Cookbook

Crie um conjunto de prompts reutilizáveis que amplificam sua produtividade como QA.

  • 1. Teste este prompt com uma user story real: "Você é QA sênior. Dado a user story abaixo, gere: 10 casos positivos, 5 negativos, 3 edge cases. Formato: tabela com ID|Descrição|Pré-condição|Passos|Resultado Esperado. Story: [cole aqui]"
  • 2. Refine o prompt até o output ser realmente útil. Anote cada iteração e o que mudou.
  • 3. Crie mais 3 prompts: (a) converter critérios em Gherkin, (b) revisar caso de teste apontando lacunas, (c) gerar 50 cadastros com dados brasileiros realistas.
  • 4. Documente no Google Docs, nome, quando usar, prompt completo, exemplo de output. Este é seu Prompt Cookbook.
💡 Dica: Prompts eficazes têm 4 elementos: Contexto (você é QA sênior), Tarefa (gere/revise/converta), Formato (tabela/JSON/lista) e Exemplo quando possível. Quanto mais específico, mais útil.
2
Gerando dados de teste com IA: massa realista em minutos

Use LLMs para gerar conjuntos de dados de teste ricos e variados que seriam difíceis de criar manualmente.

  • 1. Abra o Claude e use este prompt: "Gere 20 casos de dados de teste para um formulário de cadastro de usuário brasileiro. Inclua: casos válidos, inválidos e de borda para os campos: nome completo (min 3, max 100 chars), CPF, e-mail, telefone celular, data de nascimento (maior de 18 anos) e CEP. Formato: tabela markdown com colunas: ID, Cenário, Nome, CPF, Email, Telefone, Data Nascimento, CEP, Resultado Esperado."
  • 2. Avalie o output: os dados são realistas? Os CPFs parecem válidos? As datas de borda (exatamente 18 anos) foram incluídas? Refine o prompt para cobrir casos que faltaram.
  • 3. Converta a tabela em um arquivo JSON usando o Claude: "Converta esta tabela para um array JSON que possa ser usado como fixture no Playwright." Use o arquivo gerado num teste paramétrico.
  • 4. Compare o tempo gasto: quanto levaria criar esses 20 casos manualmente vs. com IA? Documente o ganho de produtividade.
💡 Dica: IA gera dados rápido, mas você precisa validar a qualidade. CPFs gerados por LLMs podem não ser válidos no algoritmo de verificação. Use uma biblioteca como cpf-cnpj-validator para validar antes de usar nos testes.
3
Visual testing com Applitools Eyes

Configure testes visuais com IA para detectar regressões de UI.

  • 1. Crie conta gratuita no Applitools. Integre o SDK Playwright e configure captura de baseline para as 3 páginas principais do Sauce Demo.
  • 2. Faça uma mudança visual pequena no CSS via DevTools. Execute com Applitools e veja o diff visual. Aceite a mudança intencional e rejeite a acidental.
  • 3. Configure no CI: execute em dois branches (main como baseline e branch com mudança). Verifique que o Applitools detecta e reporta a diferença automaticamente no PR.
💡Dica: Visual testing com IA ignora diferenças de anti-aliasing e renderização de fonte entre browsers, focando apenas em mudanças que afetam a percepção do usuário.
🟣 Trilha Sênior

Arquitetura de qualidade para o QA Sênior

Você já automatiza com confiança. Agora o desafio é escalar a qualidade: performance, segurança, arquitetura de testes, liderança técnica e IA avançada. Seu impacto vai além do código.

🏗️ Pré-requisito: automação consolidada 📅 18+ meses de estudo contínuo
19Módulos
43+Exercícios
77+Recursos
19Labs Avançados
Seu progresso na trilha Sênior 0 de 178 itens (0%)
Você ainda não concluiu nenhum módulo nesta trilha.
🏛️

QA como agente de transformação, liderando qualidade em escala

O papel estratégico do Sênior, como operar com ambiguidade e o que diferencia um Sênior excepcional.

Como o papel muda no Sênior

No Sênior, você não é mais responsável pela qualidade de um produto, você é responsável pela cultura e arquitetura de qualidade da empresa. A diferença é enorme. Você deixa de pensar em suítes de testes e passa a pensar em como múltiplos times, com diferentes stacks e contextos, podem manter um padrão consistente de qualidade.

Seu trabalho passa a ser mais invisível, e paradoxalmente mais impactante. Quando você faz bem feito, os times entregam com confiança sem precisar chamar você para cada decisão. Isso é escala.

O que é esperado de você

  • Visão sistêmica. Você enxerga como as decisões de qualidade de um time afetam os outros. Mudanças de arquitetura, novos serviços, integrações, você analisa o risco antes que virem problemas.
  • Influência sem autoridade. Você não manda em ninguém, mas seu parecer técnico move decisões. Isso exige credibilidade construída ao longo do tempo e habilidade de comunicação com todos os níveis da empresa.
  • Definição de padrões. Você cria os guias, frameworks e critérios que outros times adotam. Sua experiência vira documentação, treinamento e cultura.
  • Decisões com trade-offs explícitos. No Sênior, as decisões raramente são óbvias. Você sabe articular os trade-offs, escolher conscientemente e defender a escolha com dados e contexto.
  • Desenvolvimento de pessoas. Mentorear não é mais opcional, é parte central do papel. O sucesso de QAs Júniores e Plenos que você orientou é uma das principais métricas do seu impacto.

Operando com ambiguidade

O Sênior trabalha onde não há respostas certas. "Qual estratégia de testes para um sistema legado sem documentação?" "Como convencer a liderança a investir em quality engineering quando o produto nunca parou de funcionar?" "Como implementar shift-left num time que tem medo de mudar o processo?"

Essas perguntas não têm resposta no Google. Elas exigem julgamento técnico acumulado, capacidade de mapear contexto rapidamente e disposição para tomar decisões com informação incompleta. Ambiguidade não é um obstáculo para o Sênior, é o ambiente natural de trabalho.

Como se posicionar estrategicamente

O QA Sênior que gera mais impacto é aquele que consegue conectar qualidade com negócio. Não fala de cobertura de testes para o CEO, fala de risco de reputação, custo de defeitos em produção e velocidade de entrega. Traduz qualidade para a linguagem de quem toma decisões.

Internamente, você é o elo entre times técnicos e não-técnicos. Externamente, você representa a maturidade de qualidade da empresa para clientes, parceiros e novos talentos que estão avaliando onde trabalhar.

O que diferencia um Sênior excepcional

  • Pensa em legado. As decisões de hoje são o contexto de amanhã. Um Sênior excepcional constrói sistemas, processos e cultura que sobrevivem à sua própria saída da empresa.
  • Aprende em público. Compartilha conhecimento, em artigos, talks, comunidades, documentação interna. Sêniors excepcionais elevam o nível do mercado, não só do time.
  • Sabe dizer não com contexto. A habilidade mais rara: recusar demandas equivocadas explicando claramente o porquê e propondo uma alternativa melhor.
  • Permanece curioso. Tecnologia muda. Contexto muda. O Sênior que para de aprender vira um Pleno caro. A curiosidade não é só uma virtue, é um requisito de sobrevivência.
"O QA Sênior que se destaca não é o mais experiente tecnicamente, é o que usa sua experiência para criar condições em que todos ao seu redor conseguem trabalhar melhor."
🟣 Sênior · Módulo 1

Arquitetura e Design de Testes

O QA sênior define a estratégia, não apenas executa. Arquitetura de testes, cobertura de risco e decisões de trade-off são seu território.

🏗️

Arquitetura de Testes

Uma boa arquitetura de testes define: distribuição da pirâmide (quanto de cada camada), padrões de design (POM, Screenplay, Factory), estratégia de dados (fixtures, seeders, factories), paralelismo e isolamento entre testes.

🏋️ Exercícios Rápidos
  • Audite a arquitetura de testes de um projeto open source. Identifique débitos técnicos e proponha melhorias.
  • Projete a arquitetura de testes para um novo projeto de microsserviços com 5 serviços.
📊

Métricas de Qualidade

QA sênior define e acompanha métricas: cobertura de código, taxa de bugs escapados (escaped defects), tempo de feedback do CI, flakiness rate, MTTR (Mean Time to Recovery). Sem métricas, não há como saber se a qualidade está melhorando.

🏋️ Exercícios Rápidos
  • Defina 5 métricas de qualidade para um projeto e como coletá-las.
  • Crie um dashboard simples (Grafana ou Google Data Studio) para visualizar as métricas ao longo do tempo.
🎯

Gestão de Risco em Testes

Não é possível testar tudo, o sênior prioriza baseado em risco. Matriz de risco: probabilidade × impacto. Análise de pontos de mudança do código. Testes baseados em risco (Risk-Based Testing) focam esforço onde o retorno é maior.

🏋️ Exercícios Rápidos
  • Para um projeto que você conhece, crie uma matriz de risco com 10 funcionalidades.
  • Projete uma estratégia de testes que cobre 80% do risco com 40% do esforço total.
🔄

TDD e BDD Avançados

TDD (Test-Driven Development): o teste guia o design do código. BDD (Behavior-Driven Development): specs legíveis por negócio. ATDD (Acceptance TDD): critérios de aceitação como testes executáveis. O sênior define qual abordagem usar em cada contexto.

🏋️ Exercícios Rápidos
  • Implemente uma feature completa usando TDD: ciclo Red-Green-Refactor até cobertura 100%.
  • Configure Cucumber com Playwright para testes BDD com feature files em português.
🧪

Laboratório, Arquitetura e Métricas de Qualidade

Audit de arquitetura, definição de métricas e estratégia de risco

1
Auditoria de Arquitetura de Testes

Faça uma auditoria completa da arquitetura de testes de um projeto open source real.

  • 1. Escolha um projeto no GitHub com pelo menos 100 stars e uma pasta de testes. Analise: distribuição da pirâmide, padrões usados, cobertura reportada.
  • 2. Identifique pelo menos 5 débitos técnicos: testes duplicados, seletores frágeis, dados hardcoded, ausência de isolamento, falta de paralelismo.
  • 3. Projete a arquitetura ideal para o projeto: diagrama com camadas, ferramentas sugeridas e justificativa para cada decisão.
  • 4. Escreva um documento de 1 página com o plano de migração: o que mudar primeiro, riscos do processo e métricas de sucesso.
💡 Dica: A melhor arquitetura é a que o time consegue manter. Uma suíte complexa e performática que ninguém entende é pior do que uma suíte simples que o time usa e confia.
2
Definindo métricas de qualidade e OKRs para um time de QA

Pratique a definição de métricas estratégicas que conectam qualidade ao negócio, não apenas à tecnologia.

  • 1. Para um e-commerce fictício com 5 times ágeis, defina 5 métricas de qualidade estratégicas. Para cada uma: nome, definição precisa, como coletar, meta e frequência de revisão.
  • 2. Transforme essas métricas em OKRs trimestrais. Exemplo: Objective "Reduzir bugs escapados para produção" com Key Results mensuráveis.
  • 3. Identifique as armadilhas de cada métrica: como ela pode ser "gamificada"? (ex: aumentar a cobertura de código adicionando testes inúteis). Defina contramedidas.
  • 4. Apresente os OKRs como se fosse uma reunião com a diretoria: 1 slide por objetivo com contexto atual, meta e impacto esperado no negócio.
💡 Dica: Métricas de qualidade ruins incentivam comportamentos errados. "Número de bugs encontrados" incentiva criar bugs para encontrar. "Velocidade de testes" incentiva testes superficiais. Sempre defina a métrica e sua contrapartida juntas.
3
Definindo e rastreando métricas de qualidade

Selecione e implemente métricas que o time realmente use para tomar decisões.

  • 1. Selecione 4 métricas: uma de processo (bug escape rate), uma de produto (MTTR), uma de automação (flaky test rate) e uma de entrega (deployment frequency). Defina como cada uma é calculada.
  • 2. Configure coleta automática no CI/CD e crie dashboard. Estabeleça baselines atuais e defina metas para o próximo trimestre com justificativa.
  • 3. Apresente nas próximas 3 reuniões de sprint review. Após a terceira, avalie: o time usa os dados para decidir? Alguma métrica está sendo 'jogada'?
💡Dica: Métricas que o time otimiza artificialmente são piores do que não ter métricas. A certa é difícil de manipular e fácil de interpretar.
4
TDD e BDD avançados em feature complexa

Use TDD e BDD de forma integrada para desenvolver com alta cobertura desde o início.

  • 1. Escolha feature nova simples. Antes de qualquer código, escreva os cenários BDD em Gherkin com PO e dev. Esses cenários se tornam os testes de aceite automatizados.
  • 2. Usando TDD, implemente em ciclos Red-Green-Refactor: teste unitário que falha, mínimo para passar, refatora. Repita até todos os cenários BDD estarem cobertos.
  • 3. Compare cobertura TDD+BDD vs. feature equivalente sem essas práticas. Qual o tempo adicional de desenvolvimento? Qual a diferença em bugs encontrados em QA?
💡Dica: TDD não é sobre ter testes, é sobre deixar os testes guiar o design. Código com TDD tende a ter interfaces mais limpas porque você pensa em como testar antes de implementar.
🟣 Sênior · Módulo 2

Performance e Testes de Carga

Garanta que o sistema aguenta a demanda real, e defina os critérios para saber se ele está pronto para produção.

📊

Estratégia de Performance

Performance testing não é só "rodar o JMeter". O sênior define: SLOs (Service Level Objectives), baseline de performance, critérios de aceitação (ex: p95 < 500ms com 1000 usuários concorrentes), e estratégia de testes por tipo (load, stress, spike, soak).

🏋️ Exercícios Rápidos
  • Defina SLOs de performance para um sistema de e-commerce: latência, throughput e error rate.
  • Projete uma estratégia completa: quais tipos de teste, quando executar e critérios de aprovação/reprovação.
🚀

K6 Avançado

K6 suporta: thresholds como critérios de qualidade no CI, scenarios com múltiplos tipos de usuário simultâneos, k6/experimental/browser para testes de browser, e integração com Grafana Cloud para dashboards em tempo real.

🏋️ Exercícios Rápidos
  • Implemente um script K6 com múltiplos cenários: 90% leitura + 10% escrita simultâneos.
  • Configure thresholds no CI: o deploy é bloqueado se p95 > 500ms ou error rate > 1%.
📈

Análise de Resultados

Saber interpretar os resultados é tão importante quanto executar os testes. Métricas-chave: p50, p90, p95, p99 (percentis de latência), throughput (req/s), error rate, saturação de CPU/memória. Identifique o "knee point", onde a latência começa a degradar.

🏋️ Exercícios Rápidos
  • Execute um teste de carga com K6. Identifique o ponto exato onde p95 começa a degradar.
  • Correlacione os resultados de performance com métricas de servidor (CPU, memória) via Grafana.
🧪

Laboratório, K6 Avançado com Thresholds e CI

Script com múltiplos cenários, análise de percentis e bloqueio no pipeline

1
K6: Multi-Scenario + Thresholds no CI

Implemente um teste de carga avançado com múltiplos cenários e integre ao GitHub Actions.

  • 1. Crie o script abaixo com 2 cenários simultâneos: leitura e escrita. Rode localmente e analise os percentis.
  • 2. Adicione thresholds que bloqueiam o deploy: p95 < 500ms, error rate < 1%, p99 < 1000ms.
  • 3. Configure o GitHub Actions para executar o teste de performance uma vez por dia às 2h da manhã.
  • 4. Analise: em qual nível de carga o p95 começa a ultrapassar 500ms? Esse é o limite de capacidade atual.
import http from 'k6/http'; import { sleep, check } from 'k6'; export const options = { scenarios: { leitura: { executor: 'ramping-vus', stages: [{duration:'30s',target:50},{duration:'2m',target:100},{duration:'30s',target:0}] }, escrita: { executor: 'constant-vus', vus: 10, duration: '3m', startTime: '30s' } }, thresholds: { 'http_req_duration{scenario:leitura}': ['p(95)<500'], 'http_req_duration{scenario:escrita}': ['p(95)<800'], http_req_failed: ['rate<0.01'], }, }; export default function() { check(http.get('https://jsonplaceholder.typicode.com/posts/1'), {'status 200': r => r.status === 200}); sleep(1); }
💡 Dica: Nunca execute testes de carga em produção sem autorização. Use ambientes de homologação ou APIs de prática. O K6 Cloud tem tier gratuito para visualizar resultados em dashboard ao vivo.
2
Análise de gargalos com distributed profiling

Correlacione resultados de K6 com métricas de infraestrutura para identificar a causa raiz de degradação de performance.

  • 1. Execute um teste de carga com K6 contra uma API local (pode ser um servidor Express simples). Capture os resultados de p95 e p99.
  • 2. Enquanto o K6 roda, monitore os recursos do servidor: CPU, memória e I/O com htop ou docker stats. Identifique qual recurso satura primeiro.
  • 3. Introduza um gargalo artificial: adicione um setTimeout(100) numa rota crítica. Re-execute o K6. Como o p95 mudou? E o throughput?
  • 4. Documente sua análise: "O sistema degrada a partir de X usuários simultâneos porque Y recurso satura, causando Z comportamento observado pelo usuário." Esta é a estrutura de um relatório de performance profissional.
💡 Dica: p95 > 1s geralmente indica problema de I/O (banco, disco). p99 muito acima do p95 indica picos esporádicos (garbage collection, lock contention). Cada padrão aponta para uma causa diferente.
3
Analisando gargalos com dados reais

Interprete resultados de teste de carga para identificar o gargalo.

  • 1. Execute teste k6 em ramp-up de 0 a 200 VUs em 5 minutos. Colete throughput, taxa de erro, P50, P95 e P99. Identifique o ponto exato onde a performance começa a degradar.
  • 2. Correlacione com métricas de infraestrutura: a degradação começa quando CPU atinge 80%? Quando conexões de banco esgotam? Essa correlação aponta o gargalo real.
  • 3. Produza relatório de 2 páginas: resumo executivo (o sistema aguenta N usuários com SLOs satisfeitos), análise técnica (onde está o gargalo) e recomendações priorizadas.
💡Dica: A pergunta certa não é 'qual é a latência média?' mas 'qual é a latência P99 com 150 VUs simultâneos?' O gargalo real aparece nos percentis altos sob carga.
🟣 Sênior · Módulo 3

Testes de Segurança

OWASP Top 10, análise de vulnerabilidades, JWT e automação de security scanning.

🔐

OWASP Top 10 na Prática

As 10 vulnerabilidades mais críticas: Broken Access Control, Cryptographic Failures, Injection, Insecure Design, Security Misconfiguration, Vulnerable Components, Auth Failures, Software/Data Integrity, Logging Failures, SSRF. O sênior define a estratégia de security testing e integra ao pipeline.

🏋️ Exercícios Rápidos
  • Suba o WebGoat localmente com Docker e faça um scan com OWASP ZAP.
  • Para 3 vulnerabilidades High encontradas, escreva bug reports com impacto de negócio.
🔑

Segurança de APIs

APIs modernas usam JWT, OAuth 2.0 e API Keys. O sênior testa: expiração de tokens, IDOR (Insecure Direct Object Reference), privilege escalation, rate limiting, e exposição de dados sensíveis em respostas. Ferramentas: OWASP ZAP, Burp Suite, jwt.io.

🏋️ Exercícios Rápidos
  • Teste IDOR: tente acessar recursos de outro usuário mudando um ID na URL.
  • Verifique se a API tem rate limiting adequado: quantas requisições por segundo são permitidas?
🔍

SAST e DAST

SAST (Static Analysis): analisa o código sem executar (SonarQube, CodeQL). DAST (Dynamic Analysis): testa a aplicação em execução (OWASP ZAP, Burp). O sênior define onde cada tipo se encaixa no pipeline de CI/CD.

🏋️ Exercícios Rápidos
  • Configure o CodeQL (gratuito no GitHub) em um repositório e analise as vulnerabilidades encontradas.
  • Compare os resultados de SAST vs. DAST para a mesma aplicação, quais vulnerabilidades cada abordagem encontra?
🛡️

Security no Pipeline

Shift-left security: integrar testes de segurança desde o início do ciclo. OWASP ZAP tem modo de automação para CI. Dependabot verifica dependências vulneráveis. SBOM (Software Bill of Materials) rastreia todos os componentes e suas versões.

🏋️ Exercícios Rápidos
  • Configure o OWASP ZAP em modo automation no GitHub Actions.
  • Habilite o Dependabot no seu repositório e analise os alertas de segurança gerados.
🧪

Laboratório, Security Testing com OWASP ZAP

Scan completo no WebGoat e análise profissional de vulnerabilidades

1
Scan de Segurança Completo com OWASP ZAP

Use o WebGoat, app vulnerável da OWASP, para praticar security testing de forma legal.

  • 1. Suba o WebGoat: docker run -d -p 8080:8080 -p 9090:9090 webgoat/goat-and-wolf
  • 2. No OWASP ZAP, use Automated Scan em http://localhost:8080/WebGoat. Aguarde o scan completo (15-20 min).
  • 3. Categorize todos os alertas por nível: High, Medium, Low, Informational. Para cada High: descreva o vetor de ataque, impacto potencial e remediação.
  • 4. Escreva um relatório executivo de 1 página com: resumo dos riscos, vulnerabilidades críticas, impacto de negócio e roadmap de correção priorizado.
💡 Dica: NUNCA execute scans em sistemas sem autorização. Use sempre ambientes locais, de homologação ou plataformas como HackTheBox e TryHackMe criadas para prática. Scans não autorizados são crime.
2
Integrando SAST ao pipeline com CodeQL e Snyk

Configure análise estática de segurança automática no pipeline para detectar vulnerabilidades antes do merge.

  • 1. No repositório do GitHub, ative o CodeQL Analysis: Settings Security Code scanning Set up Default. Faça um commit e aguarde a análise.
  • 2. Instale o Snyk CLI: npm i -g snyk. Autentique: snyk auth. Execute no projeto: snyk test e snyk code test.
  • 3. Analise os resultados: quais vulnerabilidades foram encontradas? Qual a severidade? Qual o caminho de exploração (attack vector)?
  • 4. Configure o Snyk no GitHub Actions para bloquear PRs com vulnerabilidades High/Critical. Teste: adicione uma dependência com vulnerabilidade conhecida e veja o pipeline falhar.
💡 Dica: SAST (análise estática) encontra vulnerabilidades no código sem executá-lo. DAST (análise dinâmica, como ZAP) testa a aplicação rodando. Use os dois em camadas: SAST no PR, DAST no ambiente de staging.
3
OWASP API Security Top 10 na prática

Aplique os testes de segurança mais críticos para APIs REST.

  • 1. No OWASP Juice Shop, explore: BOLA tentando acessar recursos de outros usuários pelo ID, Broken Authentication tentando endpoints sem token e Mass Assignment enviando campos extras.
  • 2. Para cada vulnerabilidade encontrada, escreva teste de segurança automatizado usando Postman ou código: confirma que a vulnerabilidade existe (red) e que foi corrigida (green).
  • 3. Configure os testes de segurança no pipeline contra staging a cada deploy. Configure para notificar o time de segurança quando vulnerabilidades de alta severidade forem encontradas.
💡Dica: BOLA (anteriormente IDOR) é o #1 no OWASP API Security Top 10 porque é fácil de cometer e difícil de detectar. Todo endpoint que retorna dados por ID precisa de teste de autorização.
4
SAST, DAST e integração no pipeline

Configure análise estática e dinâmica como parte do pipeline de qualidade.

  • 1. Configure o CodeQL (gratuito para projetos públicos) como action no repositório. Execute a análise em push para main e analise: quais vulnerabilidades foram encontradas e qual a severidade?
  • 2. Configure o Snyk com npx snyk test no pipeline. Configure para falhar com vulnerabilidades High ou Critical em dependências diretas.
  • 3. Documente a política de segurança do time: quais vulnerabilidades bloqueiam o deploy, quais exigem tratamento em X dias e quais são aceitas como risco após avaliação.
💡Dica: SAST encontra problemas no código sem executar. DAST encontra problemas na aplicação em execução. Eles se complementam: SAST é mais rápido, DAST encontra bugs de runtime.
🟣 Sênior · Módulo 4

Automação Mobile Avançada

Appium avançado, Detox para React Native e estratégias de teste em devices reais na nuvem.

📱

Appium Avançado

Além do básico: gestos complexos (swipe, pinch, long press), testes de performance mobile (Appium com Perfetto), execução paralela em múltiplos devices, e integração com BrowserStack e Sauce Labs para testes em devices reais na nuvem.

🏋️ Exercícios Rápidos
  • Implemente testes com gestos: swipe em uma lista, pinch-to-zoom em uma imagem.
  • Configure execução paralela em 3 devices diferentes usando Appium Grid.
🍎

Detox para React Native

Framework gray-box para React Native, sincroniza automaticamente com o estado da aplicação, eliminando waitForElement e sleeps. Muito mais estável que Appium para apps React Native.

🏋️ Exercícios Rápidos
  • Configure Detox em um projeto React Native de exemplo.
  • Compare estabilidade e velocidade de execução entre Appium e Detox no mesmo app.
☁️

Cloud Device Testing

BrowserStack e Sauce Labs oferecem acesso a centenas de devices reais na nuvem. Essencial para testar em versões antigas do Android/iOS que você não tem localmente. O sênior define a estratégia de cobertura de devices.

🏋️ Exercícios Rápidos
  • Configure sua suíte Appium para rodar no BrowserStack (trial gratuito).
  • Defina uma matriz de cobertura de devices para um app: quais OS/devices cobrir e por quê?
🧪

Laboratório, Gestos e Cloud Testing com BrowserStack

Testes com gestos complexos e execução em devices reais na nuvem

1
Appium + BrowserStack: devices reais na nuvem

Configure sua suíte Appium para executar em devices reais no BrowserStack.

  • 1. Crie conta no BrowserStack (trial gratuito com 100 minutos). Obtenha sua User e Access Key.
  • 2. Adapte suas desired capabilities para o BrowserStack: substitua appium:app por app com o app ID do BrowserStack.
  • 3. Execute o teste em 2 devices diferentes: Pixel 6 (Android 13) e Samsung Galaxy S21 (Android 12). Compare os resultados.
  • 4. Analise o relatório no BrowserStack: vídeo da execução, logs, screenshots por step. Quais diferenças de comportamento você identificou entre os dois devices?
💡 Dica: Defina sua matriz de devices baseada nos dados reais de uso da aplicação (Google Analytics ou Firebase Analytics). Não teste em todos os devices possíveis, teste nos que seus usuários reais usam.
2
Estratégia de cobertura de devices: risk-based device matrix

Defina uma matriz de devices baseada em dados reais de uso, não em suposições.

  • 1. Acesse o Google Analytics ou Firebase Analytics de qualquer app público que você administre, ou use dados fictícios representativos. Identifique os top 10 devices/OS mais usados.
  • 2. Monte uma matriz de risco: para cada combinação OS/Versão/Fabricante, atribua um score de risco baseado em: % de usuários, número de bugs históricos nessa plataforma e criticidade das funcionalidades usadas.
  • 3. Com base no score, categorize os devices em: P0 (testar em toda release), P1 (testar em releases maiores) e P2 (testar mensalmente).
  • 4. Calcule o custo da estratégia: quantos device-hours de teste são necessários por sprint? Compare com o custo de uma conta no BrowserStack ou Firebase Test Lab.
💡 Dica: Testar em todos os devices é impossível e desnecessário. Os top 5 devices cobrem geralmente 70-80% dos seus usuários. Foque esforço onde está o impacto.
3
Cloud Device Testing na prática

Execute testes mobile em dispositivos reais na nuvem.

  • 1. Configure conta de trial no BrowserStack. Execute testes Appium em 3 dispositivos reais: Android antigo (API 28), Android atual (API 33) e iPhone. Compare com resultados do simulador.
  • 2. Identifique pelo menos um comportamento que difere entre simulador e dispositivo real: animações, sensores, rede. Documente como evidência do valor dos dispositivos reais.
  • 3. Integre no CI com GitHub Actions: execute os testes mobile nos dispositivos mais críticos (menor e maior versão de SO suportada) a cada PR para a main.
💡Dica: Simuladores são bons para desenvolvimento rápido, péssimos para validação final. Bug que só aparece em dispositivo real com rede 4G é exatamente o bug que o usuário encontrará.
🟣 Sênior · Módulo 5

Observabilidade e Monitoramento em Produção

QA sênior monitora a qualidade em produção. Métricas, logs e alertas são extensões dos seus testes.

📈

Stack de Observabilidade

A tríade de observabilidade: Métricas (Prometheus + Grafana), Logs (ELK Stack: Elasticsearch, Logstash, Kibana) e Traces (Jaeger, Zipkin). O sênior define o que monitorar e os alertas que importam.

🏋️ Exercícios Rápidos
  • Configure a stack completa Prometheus + Grafana com Docker Compose.
  • Crie dashboards com métricas de qualidade: error rate, latência p95 e disponibilidade.
🔔

SLOs e Alertas Inteligentes

SLOs (Service Level Objectives) definem o que é "bom o suficiente": 99.9% de disponibilidade, p95 < 500ms, error rate < 0.1%. O sênior configura alertas que disparam quando os SLOs são ameaçados, não apenas quando já foram violados.

🏋️ Exercícios Rápidos
  • Defina SLOs para um sistema de pagamento. Calcule o error budget mensal.
  • Configure alertas no Grafana que disparam quando o burn rate do error budget está alto.
🔍

Root Cause Analysis

Quando um bug escapa para produção, o sênior lidera o post-mortem: timeline do incidente, identificação da causa raiz, impacto no usuário e action items para prevenir a recorrência. Cultura blameless é fundamental.

🏋️ Exercícios Rápidos
  • Para um incidente hipotético, escreva um post-mortem completo com timeline, causa raiz e ações corretivas.
  • Leia post-mortems públicos de empresas (Google, Cloudflare) e identifique padrões de causa raiz.
🧪

Laboratório, Observabilidade com Prometheus e Grafana

Stack completa de monitoramento com dashboards de qualidade em produção

1
Stack Prometheus + Grafana do Zero

Configure a stack de observabilidade localmente e crie dashboards de qualidade.

  • 1. Crie um docker-compose.yml com Prometheus, Grafana e uma aplicação Node.js com métricas expostas (use prom-client).
  • 2. No Grafana (localhost:3000, admin/admin), adicione o Prometheus como datasource.
  • 3. Crie um dashboard com 4 painéis: (1) taxa de requests/s, (2) p95 de latência, (3) error rate, (4) availability das últimas 24h.
  • 4. Configure um alerta que envia e-mail quando o error rate ultrapassar 1% por mais de 5 minutos.
💡 Dica: Comece monitorando o que importa para o negócio, não colete todas as métricas possíveis. Um dashboard com 4 métricas que todo mundo entende é melhor que 40 métricas que ninguém olha.
2
SLOs, error budgets e alertas inteligentes

Configure SLOs reais com error budgets e alertas que disparam antes da violação, não depois.

  • 1. Para uma API hipotética com SLO de 99.9% de disponibilidade mensal, calcule: quantos minutos de downtime são permitidos por mês? Por semana? Por dia?
  • 2. Configure o Grafana com uma panel de "Error Budget Burn Rate". A taxa de queima ideal é 1x. Se estiver em 2x, você vai consumir o budget em metade do tempo restante.
  • 3. Crie 3 alertas no Grafana: WARNING (burn rate > 2x por 1h), CRITICAL (burn rate > 10x por 5min) e PAGE (budget < 10% restante no mês).
  • 4. Simule uma degradação: aumente artificialmente o error rate. Observe a sequência de alertas disparando. O alerta chegou com tempo suficiente para agir antes da violação do SLO?
💡 Dica: Alertar quando o SLO já foi violado é tarde demais. Alertar no burn rate detecta quando você está no caminho da violação, com tempo para agir. Essa é a diferença entre monitoramento reativo e proativo.
3
Root Cause Analysis com dados de observabilidade

Execute RCA completo usando logs, métricas e traces.

  • 1. Escolha o erro mais frequente da última semana no Sentry ou Grafana. Execute RCA com os 5 Porquês partindo do sintoma (o que o usuário viu) até a causa raiz sistêmica.
  • 2. Valide o RCA com dados: cada resposta deve ser corroborada por dado de observabilidade, não por suposição. Se não houver dado, você encontrou um gap de observabilidade.
  • 3. Produza Post-Mortem no formato padrão: timeline, impacto, causa raiz com evidências, ações corretivas e ações preventivas.
💡Dica: O 5o Porquê quase sempre aponta para um processo, não para uma pessoa. 'O dev não testou' não é causa raiz. 'Não existe processo que verifica X' é causa raiz.
🟣 Sênior · Módulo 6

IA Avançada e Agentes de Teste

Self-healing, agentes autônomos, AI Red Teaming e o futuro do papel do QA Sênior.

🧠

Self-Healing Tests com Healenium

O Healenium usa um algoritmo de árvore de similaridade para encontrar automaticamente o elemento quando o seletor original quebra. Reduz dramaticamente a manutenção de suítes grandes em sistemas que mudam frequentemente.

🏋️ Exercícios Rápidos
  • Configure Healenium com Selenium + Docker Compose. Quebre um seletor e observe o auto-repair.
  • Analise os logs do Healenium: com que confiança ele identificou o novo seletor?
🌐

Agentes Autônomos de Teste

Ferramentas como Octomind, Shortest e Browser Use usam LLMs para navegar autonomamente em aplicações e gerar testes sem intervenção humana. O sênior avalia, cuida e complementa o que os agentes produzem.

Octomind Shortest Browser Use Playwright MCP AgentQL
🏋️ Exercícios Rápidos
  • Explore o Octomind (trial gratuito) e deixe o agente descobrir testes para um app de exemplo.
  • Documente as limitações: quais cenários o agente não cobriu? Quais ele errou?
🔬

AI Red Teaming

Testar sistemas de IA é diferente de testar software tradicional. AI Red Teaming verifica: alucinações, viés, outputs inseguros, injeção de prompt e comportamentos imprevisíveis. É uma especialidade emergente de alto valor para QA sênior.

🏋️ Exercícios Rápidos
  • Teste um chatbot de atendimento: tente extrair informações indevidas, induzir alucinações e contornar restrições.
  • Documente as vulnerabilidades encontradas usando o framework OWASP LLM Top 10.
📊

IA em Performance e Anomalias

Ferramentas como Datadog APM com ML e Dynatrace Davis AI detectam automaticamente anomalias em métricas de performance que seriam impossíveis de identificar manualmente. O sênior define os thresholds e interpreta os insights.

🏋️ Exercícios Rápidos
  • Use o New Relic (plano gratuito) com detecção de anomalias em uma aplicação de teste.
  • Compare: o que a IA detectou que você não teria visto manualmente nos dashboards?
🧪

Laboratório, Self-Healing e AI Red Teaming

Healenium na prática e técnicas de red teaming para sistemas de IA

1
Self-Healing com Healenium: simulando uma quebra real

Configure Healenium e veja o auto-repair em ação quando um seletor muda.

  • 1. Configure com Docker Compose: docker-compose up -d usando o docker-compose.yml oficial do Healenium.
  • 2. No projeto Selenium Java, substitua o driver: WebDriver driver = SelfHealingDriver.create(new ChromeDriver())
  • 3. Execute o teste uma vez para criar o baseline. Depois modifique o HTML de um elemento via DevTools (mude o id ou class).
  • 4. Execute novamente. O Healenium deve detectar a mudança e sugerir o novo seletor. Veja o relatório em localhost:7878.
💡 Dica: O Healenium funciona melhor quando o elemento ainda existe na página com atributos similares. Se o elemento sumiu completamente, nenhuma IA consegue encontrá-lo, o teste deve falhar explicitamente.
2
AI Red Teaming: testando um chatbot

Aplique técnicas de red teaming para encontrar vulnerabilidades em um sistema de IA.

  • 1. Escolha um chatbot público (ex: um assistente de atendimento de qualquer empresa). Crie uma conta gratuita se necessário.
  • 2. Teste as categorias do OWASP LLM Top 10: (1) Prompt Injection, tente fazer o bot ignorar suas instruções originais. (2) Insecure Output, peça informações confidenciais de forma indireta. (3) Overreliance, peça ao bot para afirmar uma inverdade conhecida.
  • 3. Para cada vulnerabilidade encontrada, documente: prompt usado, resposta do sistema, categoria OWASP e severidade.
  • 4. Escreva um relatório com as vulnerabilidades encontradas e recomendações de mitigação.
💡 Dica: AI Red Teaming é feito com autorização. Para praticar, use plataformas como Gandalf (lakera.ai/insights/gandalf-game), um jogo de prompt injection criado especificamente para aprendizado.
3
Agentes autônomos de teste: implementando e avaliando

Configure agente de IA para geração de testes e avalie sua eficácia.

  • 1. Instale Qodo no VS Code. Para um módulo com lógica de negócio complexa, solicite a geração automática de testes unitários.
  • 2. Avalie criticamente: cobrem casos de borda? Testam comportamento ou implementação? Algum é redundante? Algum cenário importante ficou de fora?
  • 3. Execute mutation testing (Stryker ou PITest) nos testes gerados. Qual é o mutation score? Compare com os testes que você teria escrito manualmente.
💡Dica: IA gera testes rápido mas não necessariamente bons testes. O valor está na combinação: IA gera o esqueleto, humano enriquece com contexto de negócio e casos de borda.
4
AI Red Teaming: encontrando vieses e falhas em modelos

Execute sessão de red teaming em sistema com funcionalidade de IA.

  • 1. Defina o escopo e crie uma taxonomy: jailbreak, viés, alucinação, injeção de prompt. Execute pelo menos 20 tentativas por categoria.
  • 2. Documente cada tentativa: prompt usado, output obtido e classificação (conseguiu provocar comportamento indesejado ou não). Taxa de sucesso por categoria é a métrica de robustez.
  • 3. Produza relatório de red teaming: achados por categoria, exemplos dos comportamentos indesejados e recomendações de mitigação. Apresente ao time de produto.
💡Dica: Red teaming de IA requer criatividade. Os ataques mais efetivos envolvem múltiplos turnos de conversa ou contexto indireto que o modelo não reconhece como malicioso.
🟣 Sênior · Módulo 7

Liderança Técnica em QA

Influência técnica, mentoria, definição de padrões e comunicação com stakeholders.

👥

Mentoria e Padrões de Qualidade

O QA sênior define os padrões técnicos do time: guia de estilo de automação, padrões de nomenclatura, regras de code review para testes, e práticas de onboarding para novos QAs. Mentoria não é microgerenciamento, é criar autonomia.

🏋️ Exercícios Rápidos
  • Escreva um guia de padrões de automação para um time júnior (naming, estrutura de pastas, seletores).
  • Crie um checklist de code review para testes automatizados.
📢

Comunicação com Stakeholders

Sênior traduz qualidade em linguagem de negócio: bug reports têm impacto financeiro estimado, relatórios de qualidade mostram tendências, e decisões de release têm riscos documentados. Dashboards executivos, não planilhas técnicas.

🏋️ Exercícios Rápidos
  • Crie um relatório de qualidade de sprint para um gerente de produto, sem jargão técnico.
  • Prepare uma apresentação de 5 slides com métricas de qualidade para uma diretoria fictícia.
🎓

Certificações Avançadas

CTAL-TA (ISTQB Test Automation): automação avançada. CTAL-TM (Test Manager): gestão. AWS/Azure DevOps Engineer cloud. CTFL-AT (Agile Tester): ágil avançado.

🏋️ Exercícios Rápidos
  • Estude o syllabus do CTAL-TA e faça um simulado.
  • Mapeie quais certificações agregam mais valor para seu contexto e crie um plano de estudo.
🧪

Laboratório, Padrões e Comunicação de Qualidade

Defina padrões técnicos e comunique qualidade para stakeholders

1
Guia de Padrões de Automação para o Time

Crie um documento de padrões que um time de QA júnior/pleno pode seguir para manter consistência.

  • 1. Defina os padrões de nomenclatura: como nomear arquivos, funções de teste e variáveis. Dê exemplos bons e ruins.
  • 2. Documente a estrutura de pastas padrão do projeto e explique a responsabilidade de cada diretório.
  • 3. Escreva um checklist de code review para PRs de automação: o que sempre verificar antes de aprovar.
  • 4. Publique o guia como Wiki no GitHub do seu repositório de portfólio.
💡 Dica: Um bom guia de padrões tem mais exemplos do que regras. "Não use seletores de CSS" é uma regra. "Use data-test="login-btn" em vez de .btn.primary.login" é um exemplo, muito mais útil para um júnior.
2
Conduzindo um tech talk: ensinando automação para o time

A liderança técnica se manifesta também em compartilhar conhecimento. Prepare e apresente um tech talk de 20 minutos.

  • 1. Escolha um tópico do roadmap que você domina (ex: Playwright, Pact, K6). Prepare uma apresentação de 20 minutos para um time de 5 pessoas.
  • 2. Estrutura sugerida: 3 min de contexto (por que isso importa?), 10 min de demo ao vivo (mostre código funcionando), 5 min de exercício guiado (o time faz junto), 2 min de Q&A.
  • 3. Grave a apresentação com Loom. Assista e avalie: você foi claro? O demo funcionou? Conseguiu engajar?
  • 4. Compartilhe a gravação com o time (ou comunidade) e colete feedback estruturado: o que foi mais útil? O que poderia ser mais claro? O que você deixou de cobrir?
💡 Dica: O melhor jeito de consolidar conhecimento é ensinar. Preparar um tech talk força você a identificar lacunas no seu próprio entendimento. Se não consegue explicar, você ainda não entendeu completamente.
3
Comunicando qualidade para stakeholders de negócio

Prepare e execute apresentação para stakeholders não técnicos.

  • 1. Colete dados dos últimos 2 sprints: bugs por severidade, taxa de escape, cobertura de automação e tempo médio de correção.
  • 2. Traduza para negócio: '1 bug crítico por sprint' vira 'a cada sprint, 1 problema impacta todos os usuários por uma média de 4 horas'. Calcule o custo estimado.
  • 3. Prepare apresentação de 10 minutos: situação atual de qualidade, tendência nos últimos 3 sprints, principais riscos e investimento necessário para o próximo nível com ROI estimado.
💡Dica: Stakeholders tomam decisões com base em risco e custo. Sua apresentação deve responder: 'qual é o risco de não investir em qualidade agora?' com dados, não opinião.
🟣 Sênior · Módulo 8

SAFe, Qualidade em Escala e DevOps Avançado

Quando um time ágil não é suficiente: qualidade em organizações com múltiplos times e produtos.

🏢

SAFe (Scaled Agile Framework)

Em organizações grandes, vários times ágeis trabalham juntos no mesmo produto. O SAFe define papéis como System Team (testes de integração de todos os times) e Release Train Engineer. O QA sênior contribui na definição de critérios de qualidade a nível de PI (Program Increment).

🏋️ Exercícios Rápidos
  • Pesquise o papel do System Team no SAFe e como ele coordena testes de integração entre times.
  • Projete uma estratégia de testes para um PI de 5 sprints com 3 times trabalhando no mesmo produto.
🔄

DevOps e Shift-Left

"Shift-left" significa trazer testes para mais cedo no ciclo. No DevOps maduro: desenvolvedores escrevem testes unitários, QA automatiza integração e E2E, e testes de segurança e performance rodam no pipeline. O QA sênior é o catalisador dessa cultura.

🏋️ Exercícios Rápidos
  • Mapeie o pipeline de CI/CD de um projeto e identifique onde cada tipo de teste deve ser inserido.
  • Escreva uma proposta de shift-left para um time que ainda testa manual no final do sprint.
🏗️

XP (Extreme Programming)

XP leva as boas práticas ao extremo: pair programming, TDD obrigatório, integração contínua frequente, releases pequenas. O QA sênior em um time XP atua como guardião das práticas técnicas de qualidade.

🏋️ Exercícios Rápidos
  • Leia o capítulo sobre Testing em "Extreme Programming Explained" (Kent Beck).
  • Implemente um ciclo completo de XP em um projeto pequeno: TDD + CI + pair programming.
🌍

Estratégia de Ambientes para QA

A estratégia de ambientes define onde e como o QA atua em cada etapa do ciclo: desenvolvimento (local/dev), integração (staging/homologação) e produção. Cada ambiente tem riscos, dados e propósitos diferentes. QA sênior define essa estratégia e garante que ela seja seguida pelo time.

Os erros mais comuns: testar apenas em staging (que não reflete produção), usar dados reais em ambientes de teste (risco de compliance) e não ter ambiente de integração estável, fazendo o QA competir por um ambiente compartilhado com outros times.

🏋️ Exercícios Rápidos
  • Mapeie os ambientes do seu time atual: quantos existem, quem pode deployar em cada um, quais dados existem em cada ambiente e quais testes rodam em cada um. Documente as diferenças entre staging e produção: versão de banco, configurações de serviços externos, volume de dados.
  • Identifique os maiores riscos da estratégia atual: ambiente de staging instável? Dados de produção em homologação? Testes de performance no mesmo ambiente dos testes funcionais? Para cada risco, proponha uma mitigação concreta com esforço estimado.
  • Defina uma política de promoção entre ambientes: quais critérios precisam ser satisfeitos para um artefato avançar de dev para staging e de staging para produção. Formalize em um DEPLOYMENT_POLICY.md e apresente ao time.
  • Configure ambientes efêmeros para PRs usando GitHub Actions: cada PR sobe um ambiente isolado (via Docker Compose ou plataforma como Railway/Render), roda os testes E2E nele e destrói após o merge. Calcule o custo por PR e compare com o valor de isolamento obtido.
📋

Azure DevOps: qualidade em escala enterprise

No nível sênior, o Azure DevOps deixa de ser só pipeline e passa a ser a plataforma central de qualidade do time: Azure Boards para rastreabilidade entre bugs, histórias e testes, Azure Test Plans para gestão de casos de teste manuais e exploratórios com rastreabilidade completa, e Azure Artifacts para versionamento de artefatos de teste. Em organizações grandes, a integração entre essas ferramentas elimina o gap de informação entre squads, QA e gestão.

🏋️ Exercícios Rápidos
  • Configure o Azure Test Plans: crie um Test Plan para uma sprint, adicione Test Suites por funcionalidade e associe cada caso de teste a uma User Story no Azure Boards via link. Execute os testes manualmente e veja o relatório de cobertura por história.
  • Defina uma Branch Policy no Azure Repos que exige: pipeline verde, cobertura mínima satisfeita e pelo menos um reviewer aprovado antes de completar um PR. Documente o racional de cada policy para o time.
  • Configure o Azure Dashboards com um painel de qualidade do time: taxa de sucesso dos testes ao longo do tempo, bugs por sprint, lead time de bugs e cobertura de código. Apresente o dashboard na retrospectiva e use os dados para propor uma ação concreta de melhoria.
  • Implemente Environment gates: configure um ambiente de produção no Azure Pipelines com aprovação manual do QA lead e um gate automático que verifica se os testes de smoke passaram no staging antes de liberar o deploy. Documente o processo de rollback.
🧪

Laboratório, Estratégia de Qualidade em Escala

Projete uma estratégia de qualidade para múltiplos times com métricas e responsabilidades claras

1
Plano de Qualidade para uma Organização Multi-Times

Projete uma estratégia de qualidade completa para uma empresa fictícia com 3 squads ágeis.

  • 1. Crie a estrutura: 3 times de produto (Squad A, B, C) + 1 System Team. Defina as responsabilidades de QA de cada time.
  • 2. Projete a pirâmide de testes para cada camada: testes dentro dos squads vs. testes do System Team.
  • 3. Defina as métricas de qualidade compartilhadas: quais são reportadas por squad? Quais são consolidadas no nível de produto?
  • 4. Escreva um plano de 90 dias para implementar a estratégia: o que fazer primeiro, como medir o progresso e critérios de sucesso.
💡 Dica: Em organizações multi-times, a maior causa de problemas de qualidade é a ausência de responsabilidade clara nas interfaces entre times. Comece pelos contratos de API entre squads, é onde a maioria dos bugs de integração surge.
2
Coordenando testes de integração entre múltiplos times

Simule a coordenação de um ciclo de System Demo no SAFe, onde múltiplos times precisam testar a integração dos seus trabalhos.

  • 1. Projete uma arquitetura fictícia com 3 squads: Squad A (checkout), Squad B (catálogo de produtos), Squad C (pagamentos). Cada squad entregou features no último PI.
  • 2. Defina: quais integrações entre squads precisam de teste? Quem é responsável por cada teste de integração? Qual é o ambiente compartilhado?
  • 3. Crie um plano de System Integration Testing de 2 dias: quais features são testadas juntas? Em que ordem? Quais são os critérios de entrada (cada squad precisa ter passado nos testes unitários)?
  • 4. Identifique os riscos do plano: o que pode atrasar? Como você comunicaria um bloqueio que impede outro squad de continuar? Escreva um template de comunicação para esse cenário.
💡 Dica: Em organizações SAFe, o System Team não testa funcionalidades individuais, testa as integrações entre times. A pergunta central é sempre: "Os times conseguem trabalhar juntos?" não "A feature X funciona?"
3
DevOps e Shift-Left: mapeando e implementando

Mapeie o pipeline atual e identifique onde shift-left pode ser aplicado.

  • 1. Mapeie o fluxo do código do commit até produção: quais verificações de qualidade existem em cada etapa? Onde os bugs são mais frequentemente descobertos?
  • 2. Identifique 3 verificações que acontecem em staging mas poderiam acontecer mais cedo: pre-commit hooks, CI automatizado ou análise estática. Estime o ganho de tempo de feedback.
  • 3. Implemente uma das verificações mais à esquerda. Meça o tempo de feedback antes e depois. Apresente o dado como argumento para continuar o shift-left.
💡Dica: Shift-left não é 'fazer tudo antes'. É mover cada verificação para o ponto mais cedo onde é viável. Segurança não pode ser testada no commit, mas SAST pode.
4
Estratégia de ambientes para time distribuído

Projete e documente a estratégia de ambientes de um time real.

  • 1. Para um time com 3 squads em paralelo, projete: quais ambientes existem, quem deploya em cada um, como evitar conflito e como garantir que staging reflita o estado integrado.
  • 2. Identifique os riscos: o que acontece se dois squads deployam em staging simultaneamente? Como é o rollback se um squad quebra o ambiente de outro?
  • 3. Configure ambientes efêmeros para PRs usando GitHub Actions: cada PR cria um ambiente isolado com docker-compose, roda testes E2E e destrói ao mergear. Calcule o custo por PR.
💡Dica: Ambiente de staging compartilhado é o maior gerador de 'funciona no meu ambiente'. Ambientes efêmeros eliminam essa desculpa ao custo de mais complexidade de infraestrutura.
5
Azure DevOps enterprise: pipeline de qualidade completo

Configure um pipeline completo com Branch Policies e Test Plans.

  • 1. Configure Branch Policies no Azure DevOps: pipeline verde obrigatório, cobertura mínima de 70% e aprovação de reviewer antes de mergear na main.
  • 2. Configure Azure Test Plans para a sprint: crie Test Suites por área, associe casos de teste a User Stories e execute os testes manuais registrando resultados.
  • 3. Configure Azure Dashboard com 4 widgets: Build Health, Test Results Trend, Bug Trend por sprint e Deployment Frequency. Defina OKR de melhoria baseado nos dados.
💡Dica: O valor do Azure DevOps enterprise está na integração: um bug no Boards é rastreável ao commit, ao pipeline e ao test plan. Isso é impossível com ferramentas desconectadas.
🟢 Júnior · Módulo 10

SQL para QA

Toda aplicação tem banco de dados. Saber consultar e validar dados diretamente no banco é uma das habilidades mais práticas e valorizadas do QA.

🗄️

Por que SQL é essencial para QA

Quando você clica em "Salvar" e a tela mostra sucesso, como tem certeza que os dados foram gravados corretamente? Com SQL. O QA usa SQL para validar integridade de dados após fluxos, investigar bugs de persistência, criar massa de dados para testes e conferir se regras de negócio estão sendo respeitadas no banco.

🏋️ Exercícios Rápidos
  • Instale o DBeaver (gratuito) e conecte a um banco SQLite ou MySQL local.
  • Execute um SELECT simples e filtre os resultados com WHERE.
  • Liste 3 situações do seu dia a dia de testes onde uma query SQL ajudaria a confirmar um resultado.
📋

Comandos Essenciais para QA

SELECT / WHERE / ORDER BY consultar e filtrar dados. JOIN cruzar tabelas (ex: pedido com cliente). COUNT / SUM / AVG agregar dados para validações numéricas. INSERT / UPDATE criar e modificar massa de dados para testes. EXPLAIN analisar performance de queries. Com esses comandos você cobre 90% dos casos de uso de QA.

🏋️ Exercícios Rápidos
  • Escreva uma query que busca todos os usuários cadastrados nos últimos 7 dias.
  • Crie um JOIN entre duas tabelas (ex: pedidos e clientes) e filtre pelo status do pedido.
  • Use COUNT(*) e GROUP BY para contar pedidos por status.
🔍

Validação de Dados no Banco

Após executar um fluxo de teste (ex: criar um pedido), vá até o banco e valide: o registro existe? Os campos obrigatórios estão preenchidos? As foreign keys estão corretas? Os valores calculados (total, desconto) batem com o esperado? Isso é teste de caixa cinza, você testa pela UI mas valida no banco.

🏋️ Exercícios Rápidos
  • Após criar um usuário via UI, execute um SELECT para confirmar que os dados foram gravados corretamente.
  • Escreva uma query que detecta registros orphans (ex: pedidos sem cliente associado).
🌱

Massa de Dados com SQL

Testes consistentes precisam de dados controlados. Com SQL você cria, reseta e limpa dados de teste sem depender de fluxos de UI lentos. Seeds scripts que populam o banco com dados conhecidos. Fixtures conjuntos de dados reutilizáveis. Teardown limpeza após os testes.

🏋️ Exercícios Rápidos
  • Escreva um script SQL que insere 10 usuários de teste com dados realistas.
  • Crie um script de teardown que remove todos os dados criados por um teste específico (use um campo identificador).
🧪

Laboratório, SQL para QA na Prática

Do SELECT básico à validação pós-fluxo em banco de dados real

1
Configurando o ambiente: DBeaver + banco de prática

Configure um ambiente local com DBeaver e um banco de dados de prática para todos os exercícios de SQL.

  • 1. Baixe e instale o DBeaver Community (gratuito, multiplataforma).
  • 2. Suba um banco MySQL de prática via Docker: docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qa123 -e MYSQL_DATABASE=loja mysql:8
  • 3. No DBeaver, crie nova conexão MySQL: host localhost, porta 3306, database loja, user root, password qa123. Clique em "Test Connection".
  • 4. Execute o script de criação de tabelas abaixo. Verifique no painel esquerdo que as tabelas apareceram.
-- Script de setup do banco de prática CREATE TABLE clientes ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, criado_em TIMESTAMP DEFAULT NOW() ); CREATE TABLE pedidos ( id INT PRIMARY KEY AUTO_INCREMENT, cliente_id INT NOT NULL, status ENUM('pendente','aprovado','enviado','entregue','cancelado'), total DECIMAL(10,2) NOT NULL, criado_em TIMESTAMP DEFAULT NOW(), FOREIGN KEY (cliente_id) REFERENCES clientes(id) ); INSERT INTO clientes(nome,email) VALUES ('Ana Silva','ana@teste.com'),('Bob Souza','bob@teste.com'),('Carol Lima','carol@teste.com'); INSERT INTO pedidos(cliente_id,status,total) VALUES (1,'aprovado',299.90),(1,'entregue',150.00),(2,'pendente',89.50),(3,'cancelado',500.00);
💡 Dica: O DBeaver tem autocomplete de SQL (Ctrl+Space) e histórico de queries executadas. Guarde suas queries de validação em arquivos .sql no seu repositório de QA, elas são artefatos de teste tão importantes quanto os scripts de automação.
2
Validação pós-fluxo: teste caixa cinza com SQL

Simule um fluxo de teste completo combinando ação via API e validação direta no banco.

  • 1. Use o Postman para criar um novo cliente: INSERT INTO clientes(nome,email) VALUES('Teste QA','qa_1777400057@teste.com'), ou insira via SQL diretamente.
  • 2. Após a inserção, escreva e execute as 3 queries de validação abaixo no DBeaver. Cada uma verifica uma regra de negócio diferente.
  • 3. Crie um pedido para esse cliente com status 'pendente' e valor 150.00. Depois escreva uma query que valida: o pedido existe, está associado ao cliente correto, e o valor bate.
  • 4. Por fim, escreva uma query de "sanidade" que detectaria problemas de integridade: pedidos sem cliente, emails duplicados, totais negativos.
-- 1. Validar que o registro foi criado SELECT id, nome, email, criado_em FROM clientes WHERE email = 'qa@teste.com'; -- 2. Validar integridade referencial SELECT p.id, p.status, p.total, c.nome as cliente FROM pedidos p JOIN clientes c ON p.cliente_id = c.id WHERE c.email = 'qa@teste.com'; -- 3. Query de sanidade geral SELECT (SELECT COUNT(*) FROM pedidos WHERE cliente_id NOT IN (SELECT id FROM clientes)) AS orphan_orders, (SELECT COUNT(*) FROM pedidos WHERE total <= 0) AS invalid_totals, (SELECT COUNT(*) FROM clientes GROUP BY email HAVING COUNT(*) > 1 LIMIT 1) AS dup_emails;
💡 Dica: Salve suas queries de validação como um arquivo validacoes_pos_fluxo.sql no seu repositório. Com o tempo você vai ter uma biblioteca de queries de QA reutilizáveis para cada módulo do sistema.
3
Validação de dados no banco após operação

Confirme via SQL que uma operação persistiu dados corretamente.

  • 1. Use um banco PostgreSQL local ou SQLite com tabela de pedidos. Simule um INSERT e valide com SELECT que todos os campos foram persistidos: valor, status, data, cliente.
  • 2. Simule um bug: altere o status do pedido para valor inválido direto no banco. Execute o fluxo novamente. O sistema detecta ou ignora o estado inválido?
  • 3. Escreva uma query de validação para rodar após cada deploy: detecta pedidos com status inconsistente, valores negativos ou datas no futuro. Documente como parte do smoke test.
💡Dica: Testes que verificam só a UI podem passar mesmo quando o banco está errado. Validação via SQL fecha esse gap em testes de integração.
4
Criando massa de dados com SQL

Prepare dados controlados para testes previsíveis e reproduzíveis.

  • 1. Crie um script SQL que popula um banco de testes com: 10 usuários com perfis diferentes (admin, cliente, bloqueado), 5 produtos em categorias distintas e 20 pedidos em estados variados.
  • 2. Execute os testes manuais usando esse banco controlado em vez de dados aleatórios. Quais testes ficaram mais previsíveis?
  • 3. Adicione um script de cleanup que remove só os dados criados pelos testes, sem apagar os dados base. Esse par setup + cleanup é a base de qualquer estratégia de TDM.
💡Dica: Scripts de massa de dados versionados no repositório são patrimônio do time: qualquer pessoa que clona consegue reproduzir o ambiente exato.
🟠 Pleno · Módulo 13

Feature Flags e Rollout Gradual

Feature flags desacoplam o deploy do release. O QA moderno precisa entender como testar funcionalidades que existem no código mas não estão visíveis para todos os usuários.

🚩

O que são Feature Flags

Feature flags (ou feature toggles) são condicionais no código que permitem ativar ou desativar funcionalidades sem novo deploy. Tipos: Release flags (dark launch), Experiment flags (A/B testing), Ops flags (kill switch de emergência), Permission flags (acesso por perfil). O QA precisa testar ambos os estados: flag ON e flag OFF.

🏋️ Exercícios Rápidos
  • Pesquise o padrão "dark launch" e explique em suas palavras como ele reduz risco em deploys.
  • Liste 3 funcionalidades de um produto que se beneficiariam de feature flags para rollout gradual.
🎛️

LaunchDarkly e Unleash

LaunchDarkly plataforma SaaS líder, suporta targeting por usuário/segmento, rollout percentual e métricas de impacto. Unleash alternativa open-source, self-hosted. Ambos têm SDKs para todas as linguagens. O QA usa essas ferramentas para ativar flags específicas no ambiente de teste sem impactar produção.

🏋️ Exercícios Rápidos
  • Crie uma conta gratuita no LaunchDarkly e crie sua primeira feature flag.
  • Configure o SDK JavaScript e ative/desative a flag programaticamente em um projeto de teste.
🧪

Testando com Feature Flags

Cada feature flag cria 2 caminhos de código que precisam ser testados: flag ativa e flag inativa. Em CI/CD: execute os testes com a flag desligada (comportamento atual) e depois com ela ligada (novo comportamento). Ao fazer rollout gradual, monitore métricas de erro e performance para cada segmento.

🏋️ Exercícios Rápidos
  • Escreva casos de teste para uma feature flag de "novo checkout" nos dois estados.
  • Configure seu Playwright para receber a flag via variável de ambiente e testar ambos os estados no CI.
📊

Canary Releases e A/B Testing

Com feature flags você implementa: Canary Release, nova funcionalidade para 5% dos usuários, monitora, expande gradualmente. A/B Testing, dois grupos veem versões diferentes, métricas decidem o vencedor. O QA define os critérios de "saída segura" para cada fase do rollout.

🏋️ Exercícios Rápidos
  • Desenhe um plano de rollout gradual para uma nova feature: quais % de usuários em cada fase e quais métricas monitorar?
🧪

Laboratório, Feature Flags com Unleash (open-source)

Configure o Unleash localmente e teste uma feature flag com dois estados no Playwright

1
Setup Unleash + primeira feature flag

Configure o Unleash self-hosted e crie sua primeira feature flag.

  • 1. Suba o Unleash via Docker Compose:
  • 2. Acesse localhost:4242, faça login (admin/unleash4all) e crie um novo projeto "qa-demo".
  • 3. Crie a feature flag "novo-checkout" do tipo Release. Configure a estratégia: "Gradual rollout" com 50% dos usuários.
  • 4. No painel, teste o toggle: ative e desative a flag e observe a mudança de estado em tempo real.
# docker-compose.yml para Unleash version: '3' services: db: image: postgres:14 environment: POSTGRES_PASSWORD: unleash POSTGRES_USER: unleash POSTGRES_DB: unleash unleash: image: unleashorg/unleash-server ports: ["4242:4242"] environment: DATABASE_URL: postgres://unleash:unleash@db/unleash INIT_ADMIN_API_TOKENS: "*:*.unleash-insecure-api-token" depends_on: [db]
💡 Dica: O Unleash tem uma API REST completa. Você pode ativar/desativar flags via API nos seus testes automatizados: antes do teste, ativa a flag; após o teste, desativa. Isso é integração de feature flags no ciclo de testes.
2
Testando os dois estados com Playwright

Configure seus testes Playwright para executar com a feature flag ativa e inativa.

  • 1. Instale o SDK: npm i @unleash/proxy-client-fetch
  • 2. Crie um helper que ativa/desativa a flag via API do Unleash antes de cada teste.
  • 3. Escreva 2 testes para o mesmo fluxo de checkout: um com novo-checkout = OFF (fluxo atual) e outro com novo-checkout = ON (novo fluxo). Ambos devem passar.
  • 4. No GitHub Actions, configure uma matrix que executa os testes nos dois estados da flag. Assim toda mudança é validada em ambos os contextos.
💡 Dica: Nunca use valores hardcoded de feature flags nos testes. Sempre leia o estado da flag via SDK ou API. Isso garante que os testes refletem o comportamento real do sistema em cada ambiente.
3
Testando flags ativas e inativas

Estruture a suíte para testar os dois estados de uma feature flag.

  • 1. Configure flag new-checkout-flow no Unleash ou LaunchDarkly. Configure ambiente local com a flag desativada e outro com ela ativada.
  • 2. Escreva testes parametrizados que rodam para os dois estados. Use beforeEach para definir o estado via API. Verifique que o comportamento esperado é diferente para cada estado.
  • 3. Simule canary release: ative a flag para 10% dos usuários. Escreva teste que verifica que o grupo de controle vê o fluxo antigo e o experimental vê o novo.
💡Dica: Feature flags sem testes para os dois estados criam dívida invisível. Quando a flag é removida, ninguém sabe se o código do estado inativo ainda funciona.
4
A/B Testing como estratégia de qualidade

Use A/B testing para validar hipótese com dados reais.

  • 1. Defina hipótese mensurável: 'Mudar texto do botão de Adicionar ao carrinho para Comprar agora aumentará conversão em 10%'. Identifique métrica primária e de guardrail.
  • 2. Configure experimento com 50% de tráfego em cada variante. Defina o período mínimo para atingir significância estatística de 95%.
  • 3. Analise os resultados: a variante venceu? A diferença é estatisticamente significativa? As métricas de guardrail foram impactadas? Documente a decisão com base nos dados.
💡Dica: A/B test encerrado antes de atingir significância estatística é pior que não fazer o teste. Decisões com dados insuficientes parecem objetivas mas não são.
🟣 Sênior · Módulo 9

Qualidade no Ciclo de Desenvolvimento

O maior diferencial do Arquiteto de Qualidade: qualidade não começa nos testes, começa na concepção. Cada fase do desenvolvimento é uma oportunidade de prevenir defeitos.

Princípio Fundamental

O custo de corrigir um defeito aumenta exponencialmente a cada fase que passa. Um bug encontrado nos requisitos custa R$1. Nos testes custa R$10. Em produção custa R$100 ou mais. O Arquiteto de Qualidade projeta sistemas para encontrar defeitos o mais cedo possível, qualidade é prevenção, não detecção.

📋

Fase 1: Requisitos e Discovery

O QA sênior participa desde a concepção. Atividades: Three Amigos (dev + QA + PO refinam a história juntos), revisão de requisitos para detectar ambiguidades e cenários não cobertos, escrita colaborativa de critérios de aceitação em BDD, análise de impacto em funcionalidades existentes e identificação de riscos antes do desenvolvimento começar.

🏋️ Exercícios Rápidos
  • Participe (ou simule) uma sessão Three Amigos para uma user story complexa. Documente as perguntas que você fez como QA.
  • Revise os requisitos de uma funcionalidade e liste todas as ambiguidades e cenários de borda que você encontrar.
🏗️

Fase 2: Design e Arquitetura

Testabilidade é um atributo de arquitetura, precisa ser projetada, não adicionada depois. O QA sênior participa das decisões de arquitetura com o olhar de: como vou testar isso? Pontos cegos de design: componentes acoplados, ausência de logs estruturados, sem IDs de correlação, estados impossíveis de reproduzir em teste, ausência de endpoints de healthcheck.

🏋️ Exercícios Rápidos
  • Analise a arquitetura de um sistema e identifique 5 pontos que dificultam o teste (ex: sem ID de correlação nas requisições).
  • Proponha mudanças de design que melhorariam a testabilidade sem alterar o comportamento externo.
⌨️

Fase 3: Desenvolvimento

QA e dev trabalham em par. Práticas: Pair testing (QA e dev testam juntos enquanto desenvolvem), code review com foco em testabilidade (cobertura adequada, assertions significativas), TDD como prática de time (não apenas individual), definição de Definition of Done que inclui critérios de qualidade mensuráveis.

🏋️ Exercícios Rápidos
  • Defina um checklist de code review focado em qualidade de testes (mínimo 10 itens).
  • Escreva uma "Definition of Done" completa para um time ágil que você gerenciaria.
🧪

Fase 4: Homologação (QA)

Fase clássica do QA, mas com abordagem estratégica: critérios de entrada claros (o que precisa estar pronto para iniciar testes), ambiente espelho de produção, dados de teste representativos (não apenas happy path), smoke tests automatizados antes de aceitar um build, gestão de defeitos com rastreabilidade completa até os requisitos originais.

🏋️ Exercícios Rápidos
  • Defina critérios de entrada e saída formais para o início e fim da fase de QA de um projeto.
  • Escreva um checklist de preparação de ambiente de homologação (10+ itens).
🚀

Fase 5: Deploy e Release

Zero-downtime deployment blue-green, canary. Feature flags deploy desacoplado do release. Smoke tests de produção suite mínima que roda após cada deploy para confirmar que o ambiente está saudável. Rollback automático se o smoke falhar, o deploy é revertido automaticamente.

🏋️ Exercícios Rápidos
  • Projete uma estratégia de deploy com canary release: quais smoke tests rodam após cada fase do rollout?
  • Defina os critérios automáticos de rollback: quais métricas precisam piorar para acionar a reversão?
📊

Fase 6: Produção e Monitoramento

Shift-right quality qualidade monitorada em produção. Práticas: synthetic monitoring (testes agendados em produção), real user monitoring (RUM), alertas baseados em SLOs, análise de logs para padrões de erro, feedback loop para o backlog (bugs de produção viram casos de teste de regressão).

🏋️ Exercícios Rápidos
  • Configure synthetic monitoring no New Relic ou Datadog para os fluxos críticos da aplicação.
  • Defina um processo de feedback loop: como um bug de produção se torna um caso de teste automatizado?
🧪

Laboratório, Qualidade em Todo o Ciclo: Three Amigos ao Prod

Implemente práticas de qualidade em cada fase do SDLC em um projeto de exemplo

1
Three Amigos: refinamento com olhar de QA

Simule uma sessão Three Amigos para uma user story complexa e documente o valor que o QA agrega na fase de requisitos.

  • 1. Escolha esta user story: "Como usuário premium, quero transferir pontos para outro usuário, respeitando as regras de limite diário e bloqueio de conta."
  • 2. Vá até um LLM (Claude ou ChatGPT) e peça para jogar o papel do Dev e do PO. Você é o QA. Conduza uma sessão de 15 minutos fazendo perguntas críticas sobre a story.
  • 3. Documente as perguntas que você fez como QA (mínimo 10) e o impacto de cada uma: que bugs essa pergunta preveniu?
  • 4. Escreva os critérios de aceitação finais da story em formato BDD (Given/When/Then), cobrindo cenários positivos, negativos e edge cases identificados na sessão.
💡 Dica: As perguntas mais valiosas do QA na fase de requisitos são: "O que acontece quando...?", "Qual é o comportamento esperado se...?", "Como validamos que...?", "Quem tem permissão para...?". Cada resposta é um cenário de teste que não vai para produção como bug.
2
Definition of Done e Critérios de Entrada/Saída

Crie artefatos formais de qualidade que um time real poderia adotar.

  • 1. Escreva uma Definition of Done completa para um time de 5 pessoas (2 devs, 1 QA, 1 designer, 1 PO). Inclua: critérios técnicos, de testes, de documentação e de deploy.
  • 2. Defina critérios de entrada para a fase de QA: o que precisa estar pronto para o QA aceitar um build para teste?
  • 3. Defina critérios de saída da fase de QA: quais métricas e condições precisam ser atingidas para o QA assinar o release?
  • 4. Documente tudo num Google Docs e compartilhe para revisão. Peça feedback para um colega dev, os critérios são razoáveis? Claros? Executáveis?
💡 Dica: Uma DoD fraca gera debates infinitos sobre "está pronto?" no final do sprint. Uma DoD forte previne esses debates porque todos sabem exatamente o que "pronto" significa. O investimento de 2 horas na DoD economiza dias de atrito ao longo do projeto.
3
Implementando Quality Gates no pipeline de CI/CD

Configure quality gates automáticos que bloqueiam o avanço do código quando critérios de qualidade não são atendidos.

  • 1. Defina quality gates para 3 estágios do pipeline: PR (cobertura de testes > 80%, zero erros de lint), Staging (todos os testes passando, performance p95 < 500ms), Production (smoke tests passando, error rate < 0.1%).
  • 2. Implemente o gate de cobertura no GitHub Actions usando o relatório de coverage do Jest/Pytest. Configure para falhar se a cobertura cair abaixo de 80%.
  • 3. Adicione o gate de performance: após o deploy em staging, execute um mini load test com K6 (30s, 20 usuários). Se p95 > 500ms, o pipeline falha e o deploy para produção é bloqueado.
  • 4. Documente a estratégia: qual é o custo de cada gate (tempo de execução)? Como você balanceia velocidade de CI com rigor de qualidade?
💡 Dica: Quality gates precisam ser rápidos para não frustrar o time. Um gate que demora 30 minutos vai ser ignorado ou contornado. Prefira gates de 2-5 minutos com alta precisão a gates completos e lentos.
4
Auditoria de qualidade no design e arquitetura

Avalie testabilidade de uma solução antes da implementação.

  • 1. Na revisão de arquitetura da próxima feature complexa, mapeie: quais dependências externas existem, onde seria necessário mock e quais cenários de falha são difíceis de simular.
  • 2. Produza relatório de testabilidade de 1 página: pontos de atenção, sugestões de mudança de design e estimativa de esforço com e sem as mudanças propostas.
  • 3. Após a implementação, valide: as dificuldades que você previu se confirmaram? O que não previu? Use para calibrar a próxima revisão de arquitetura.
💡Dica: QA sênior que participa da revisão de arquitetura agrega mais valor do que o que revisa o código depois. O custo de mudar o design é zero; o código implementado é caro.
5
Qualidade no deploy e release

Configure smoke tests e rollback automatizado.

  • 1. Escreva suíte de smoke tests que roda após cada deploy em staging: verifica que endpoints críticos respondem, que login funciona e que o fluxo de compra é executável.
  • 2. Configure rollback automático: se smoke tests falharem em 5 minutos do deploy, o pipeline reverte para a versão anterior automaticamente usando deployment slots ou blue/green.
  • 3. Documente o release checklist: o que deve estar verdadeiro antes, durante e após cada release. Inclua smoke tests passando, métricas estáveis e responsável de plantão.
💡Dica: Rollback manual sob pressão é arriscado. Rollback automatizado baseado em critérios objetivos remove o elemento humano do momento mais crítico.
6
Monitoramento pós-deploy e loop de feedback

Estabeleça observação estruturada nas primeiras horas após cada release.

  • 1. Crie dashboard de 'deploy watch' com 4 métricas essenciais das primeiras 2 horas: taxa de erro, latência P99, volume de transações e tickets de suporte abertos.
  • 2. Para o próximo release, execute deploy watch formal: observe o dashboard por 30 minutos, documente anomalias e compare com o baseline pré-deploy.
  • 3. Se uma anomalia foi encontrada, trace a causa raiz: era bug que deveria ter sido capturado em QA? Problema de performance sob carga real? Use para melhorar o próximo release.
💡Dica: Os primeiros 30 minutos após um deploy são os mais críticos. Problemas descobertos aqui ainda podem ser revertidos com impacto mínimo.
🟣 Sênior · Módulo 10

Chaos Engineering

Testar que o sistema funciona é necessário. Testar que ele sobrevive quando as coisas dão errado é o que separa sistemas resilientes dos frágeis.

🌪️

Princípios do Chaos Engineering

Chaos Engineering é a disciplina de experimentar deliberadamente falhas em sistemas distribuídos para descobrir fraquezas antes que elas causem incidentes em produção. Princípios: hipótese de estado estável (o sistema tem comportamento baseline definido), variar eventos do mundo real (CPU spike, rede lenta, serviço down), executar em produção (progressivamente), automatizar experimentos continuamente.

🏋️ Exercícios Rápidos
  • Leia o Chaos Engineering Handbook (gratuito) e resuma os 5 princípios.
  • Para um sistema que você conhece, liste 5 hipóteses de falha que você testaria.
💥

Litmus e Chaos Monkey

Litmus framework open-source de chaos para Kubernetes, injeta falhas em pods, nodes e redes de forma declarativa via ChaosEngine YAML. Chaos Monkey ferramenta da Netflix que mata instâncias aleatoriamente em produção. Pumba chaos para containers Docker sem Kubernetes. Gremlin plataforma SaaS com interface amigável.

🏋️ Exercícios Rápidos
  • Configure o Litmus no seu cluster Kubernetes local (kind ou minikube).
  • Execute um experimento simples: kill de um pod e verifique se o sistema se recupera automaticamente.
📐

Game Days

Um Game Day é um exercício planejado onde o time deliberadamente introduz falhas em um ambiente para praticar resposta a incidentes. O QA lidera: define o cenário de falha, observa o comportamento do sistema, mede o tempo de detecção e recuperação (MTTD e MTTR), e documenta os aprendizados.

🏋️ Exercícios Rápidos
  • Planeje um Game Day para um sistema de e-commerce: que falha você vai introduzir, o que vai observar e quais métricas vai medir?
  • Defina os critérios de sucesso do Game Day: como saber se o sistema se comportou adequadamente?
🔬

Chaos no Pipeline de CI/CD

Integrar chaos experiments no pipeline garante que novas mudanças não introduzam fragilidades. Fault injection em ambiente de staging: simule latência de rede, errors de banco, timeout de serviços externos. Se o sistema se degrada gracefully (circuit breaker, retry, fallback), o deploy avança. Se não, bloqueia.

🏋️ Exercícios Rápidos
  • Configure um chaos experiment básico que simula latência de 500ms em 50% das requisições de um serviço no staging.
  • Verifique que o circuit breaker da aplicação aciona corretamente quando o chaos está ativo.
🧪

Laboratório, Chaos Engineering com Litmus e Docker

Primeiro experimento de chaos: kill de container e verificação de resiliência

1
Chaos com Pumba no Docker (sem Kubernetes)

Use o Pumba para introduzir caos em containers Docker locais, não precisa de Kubernetes.

  • 1. Suba 2 containers: uma app simples e o Pumba. Arquivo docker-compose.yml abaixo.
  • 2. Com os containers rodando, execute: docker ps para confirmar. Depois execute o Pumba para adicionar latência: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock gaiaadm/pumba netem --duration 60s --delay 500ms re2:app.*
  • 3. Durante o experimento, faça requests para a app (curl ou browser) e observe o impacto da latência. Meça o tempo de resposta antes e durante o chaos.
  • 4. Agora tente o kill: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock gaiaadm/pumba kill --signal SIGKILL re2:app.*. O container voltou automaticamente? (depende do restart policy).
# docker-compose.yml para chaos lab version: "3" services: app: image: nginx:alpine ports: ["8080:80"] restart: always labels: - "role=target" monitor: image: curlimages/curl command: sh -c "while true; do echo $(date): $(curl -s -o /dev/null -w '%{http_code} %{time_total}s' http://app:80); sleep 2; done" depends_on: [app]
💡 Dica: Configure restart: always no docker-compose.yml do container da app. Isso simula o comportamento de orquestradores de produção. Se o container reiniciar automaticamente em menos de 30 segundos, você tem resiliência básica.
2
Game Day: planejamento e execução

Conduza um mini Game Day documentado para um sistema hipotético.

  • 1. Escolha um sistema: pode ser o nginx do exercício anterior ou qualquer app local que você tenha.
  • 2. Defina sua hipótese: "Acredito que quando o banco de dados ficar indisponível por 30 segundos, a aplicação vai retornar erro 503 gracefully sem perder dados em trânsito."
  • 3. Execute o experimento: derrube o container do banco (docker stop db), faça requests durante 30 segundos, depois restaure (docker start db).
  • 4. Documente: o que aconteceu? A hipótese foi confirmada ou refutada? Quais fragilidades foram descobertas? Quais ações de melhoria você recomendaria?
💡 Dica: O valor do Chaos Engineering não está em "quebrar coisas", está na pergunta que vem depois: "O que precisamos mudar para que o sistema sobreviva a isso em produção?" Cada experimento deve gerar um action item concreto.
3
Definindo hipóteses e métricas para experimentos de Chaos

Chaos Engineering sem hipótese clara é apenas destruição. Aprenda a estruturar experimentos científicos.

  • 1. Escolha um sistema (pode ser o nginx do laboratório anterior). Defina o estado estável: quais métricas definem "o sistema está saudável"? (ex: latência p95 < 200ms, error rate < 0.1%, 100% de requests respondidos)
  • 2. Formule 3 hipóteses no formato: "Acreditamos que quando [condição de falha], o sistema [comportamento esperado], porque [razão técnica]. Vamos verificar medindo [métrica específica]."
  • 3. Execute um experimento para cada hipótese. Para cada um: registre o estado estável antes, introduza a falha, observe o comportamento e compare com a hipótese.
  • 4. Crie um relatório de experimento com: hipótese, resultado (confirmada/refutada), comportamento observado, impacto no usuário e ação de melhoria recomendada.
💡 Dica: Se todos os seus experimentos de chaos confirmam as hipóteses, você não está sendo ousado o suficiente. O objetivo é encontrar as surpresas, os comportamentos que você não esperava. Comece com hipóteses conservadoras e evolua para cenários mais extremos.
4
Chaos no pipeline de CI/CD

Integre injeção de falhas no pipeline para validar resiliência a cada deploy.

  • 1. Configure Litmus Chaos no cluster de staging. Crie ChaosEngine que injeta latência de 500ms nos pods após cada deploy por 2 minutos.
  • 2. Execute smoke test durante a janela de chaos: o sistema mantém o SLO (P99 abaixo de 2 segundos) com latência injetada? Qual o impacto real no usuário?
  • 3. Configure o pipeline para falhar se o smoke test não passar durante o chaos. Documente o nível de resiliência como SLO de infraestrutura.
💡Dica: Chaos no CI não substitui chaos em produção, mas valida a hipótese básica de resiliência antes do deploy. Sistema que falha no chaos do CI falhará no chaos de produção.
🟣 Sênior · Módulo 11

TestOps

A evolução de "testes no pipeline" para "qualidade como plataforma". TestOps é a disciplina de gerenciar, orquestrar e otimizar toda a infraestrutura de testes como se fosse um produto.

🏭

O que é TestOps

TestOps aplica os princípios de DevOps à engenharia de qualidade: infraestrutura de testes como código, gestão centralizada de ambientes de teste, dados de teste como serviço, dashboards unificados de qualidade, orquestração de execução distribuída e feedback loops rápidos para o time de desenvolvimento.

🏋️ Exercícios Rápidos
  • Pesquise a diferença entre TestOps e DevOps e explique como eles se complementam.
  • Avalie a maturidade TestOps do seu time atual usando o modelo de maturidade do ISTQB.
🌐

Gestão de Ambientes de Teste

Um dos maiores problemas de QA em escala: ambientes instáveis, dados inconsistentes, configurações divergentes. A solução TestOps: ambientes efêmeros (criados e destruídos por demanda via IaC), environment-as-code (Terraform, Pulumi), dados de teste versionados (database migrations de teste), ambient assertions (smoke tests que validam o ambiente antes dos testes).

🏋️ Exercícios Rápidos
  • Configure um ambiente de teste efêmero usando Docker Compose que sobe e desce sob demanda.
  • Escreva um script de verificação de ambiente que valida: banco acessível, serviços respondendo, dados de seed carregados.
📊

Test Data Management (TDM)

Dados de teste são um dos maiores gargalos de QA em produção. Estratégias: synthetic data generation (Faker, Mockaroo), data masking (dados reais anonimizados de produção), data versioning (seeds versionadas no Git), data virtualization (snapshots de banco por feature branch). O sênior define a estratégia de TDM para o time.

🏋️ Exercícios Rápidos
  • Implemente um gerador de massa de dados com Faker.js para 1000 usuários com perfis realistas.
  • Configure data masking em um dump de banco de dados para remover dados PII (CPF, email, telefone) mantendo a estrutura.
🔄

Orquestração e Paralelismo

Em times grandes, rodar a suíte completa em um único runner leva horas. TestOps resolve com: sharding (dividir testes em N runners paralelos), test selection inteligente (rodar apenas testes impactados pelas mudanças do commit), flakiness tracking (detectar e quarentenar testes instáveis automaticamente).

🏋️ Exercícios Rápidos
  • Configure sharding no Playwright: divida sua suíte em 3 shards paralelos.
  • Implemente uma lógica de quarentena: testes que falham mais de 3 vezes nos últimos 10 runs são movidos para uma suite separada.
🧪

Laboratório, TestOps: Ambiente Efêmero e Dados de Teste

Configure infraestrutura de testes como código com ambiente efêmero e geração de massa de dados

1
Ambiente efêmero com Docker Compose + health checks

Crie um ambiente de teste completo que sobe, valida e desce automaticamente.

  • 1. Crie o docker-compose.yml abaixo com a aplicação + banco + health checks.
  • 2. Crie um script setup-test-env.sh que: (1) sobe os containers, (2) aguarda os health checks, (3) executa os seeds de dados, (4) confirma que o ambiente está pronto.
  • 3. Execute seus testes Playwright apontando para este ambiente efêmero.
  • 4. Crie um script teardown-test-env.sh que derruba tudo e limpa volumes. Integre ambos scripts no GitHub Actions.
# docker-compose.test.yml, ambiente efêmero version: '3.8' services: app: image: your-app:latest ports: ["3000:3000"] depends_on: db: condition: service_healthy environment: DATABASE_URL: postgres://qa:qa123@db:5432/testdb healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 5s timeout: 3s retries: 10 db: image: postgres:15 environment: POSTGRES_USER: qa POSTGRES_PASSWORD: qa123 POSTGRES_DB: testdb healthcheck: test: ["CMD", "pg_isready", "-U", "qa", "-d", "testdb"] interval: 3s timeout: 3s retries: 10 volumes: - ./seeds/init.sql:/docker-entrypoint-initdb.d/init.sql
💡 Dica: Health checks com --wait garantem que os testes só começam quando o ambiente está realmente pronto, não apenas quando o container iniciou. Isso elimina uma classe enorme de falsos negativos em CI.
2
Test Data Management: geração de massa de dados realistas

Implemente uma solução de geração de dados de teste usando Faker.js.

  • 1. Instale: npm i -D @faker-js/faker
  • 2. Crie o script generate-test-data.js abaixo que gera usuários, produtos e pedidos.
  • 3. Execute o script e valide: os dados gerados são realistas? CPFs são válidos? Emails são únicos? Datas são consistentes?
  • 4. Integre a geração no setup do ambiente: o script roda automaticamente após o banco subir, populando os dados de teste necessários para cada suíte.
// generate-test-data.js const { faker } = require('@faker-js/faker/locale/pt_BR'); const fs = require('fs'); faker.seed(42); // Seed fixa para reprodutibilidade const generateUsers = (count) => Array.from({ length: count }, (_, i) => ({ id: i + 1, nome: faker.person.fullName(), email: faker.internet.email().toLowerCase(), cpf: faker.helpers.replaceSymbolWithNumber('###.###.###-##'), telefone: faker.phone.number('(##) 9####-####'), cidade: faker.location.city(), criado_em: faker.date.past({ years: 2 }).toISOString(), })); const generatePedidos = (users, count) => Array.from({ length: count }, (_, i) => ({ id: i + 1, cliente_id: faker.helpers.arrayElement(users).id, status: faker.helpers.arrayElement(['pendente','aprovado','enviado','entregue']), total: parseFloat(faker.commerce.price({ min: 29, max: 2000 })), criado_em: faker.date.recent({ days: 90 }).toISOString(), })); const users = generateUsers(100); const pedidos = generatePedidos(users, 300); // Gera SQL de INSERT const userSQL = users.map(u => `INSERT INTO clientes(id,nome,email,criado_em) VALUES(${u.id},'${u.nome}','${u.email}','${u.criado_em}');`).join('\n'); const pedidoSQL = pedidos.map(p => `INSERT INTO pedidos(id,cliente_id,status,total,criado_em) VALUES(${p.id},${p.cliente_id},'${p.status}',${p.total},'${p.criado_em}');`).join('\n'); fs.writeFileSync('seeds/test-data.sql', userSQL + '\n' + pedidoSQL); console.log(`Gerado: ${users.length} usuários, ${pedidos.length} pedidos`);
💡 Dica: Use seeds fixas no Faker (faker.seed(12345)) para gerar dados determinísticos, os mesmos dados toda vez que o script roda. Isso torna os testes reproduzíveis e facilita o debug quando um teste falha.
3
Implementando Test Selection Inteligente com histórico de mudanças

Reduza o tempo de CI rodando apenas os testes impactados pelas mudanças do commit.

  • 1. No projeto Playwright, instale: npm i -D @playwright/test-runner-affected ou configure manualmente usando git diff para identificar arquivos alterados.
  • 2. Mapeie quais testes cobrem quais páginas/componentes. Crie um arquivo test-mapping.json: chave é o caminho do arquivo de código, valor é o array de testes que exercitam aquele código.
  • 3. No pipeline, implemente a lógica: se o commit alterou src/checkout.ts, execute apenas os testes mapeados para checkout. Se alterou múltiplos arquivos, execute a união dos testes mapeados.
  • 4. Meça o impacto: compare o tempo de CI antes (suíte completa) e depois (testes selecionados) para 5 commits típicos. Qual foi a redução média?
💡 Dica: Ferramentas como Launchable usam ML para fazer essa seleção automaticamente, aprendendo com histórico de falhas. Mas implementar manualmente te dá entendimento profundo do problema antes de adotar uma ferramenta.
4
Orquestração e paralelismo em escala

Configure orquestração com relatório consolidado.

  • 1. Configure o ReportPortal com docker-compose. Integre com Playwright ou JUnit para publicar resultados automaticamente. Configure dashboards por projeto, tipo de teste e ambiente.
  • 2. Configure suíte completa para rodar em 8 workers paralelos. Configure merge de relatórios: os 8 parciais devem se consolidar em um único no ReportPortal.
  • 3. Configure detecção automática de flaky tests: testes que alternam entre pass e fail sem mudança de código são marcados automaticamente. Revise semanalmente.
💡Dica: Flaky tests são a forma mais cara de ruído em QA: geram falsos alarmes, consomem tempo e erodem confiança. Cada flaky não corrigido é um custo que cresce.
🟣 Sênior · Módulo 12

Compliance e Qualidade Regulatória

Em fintech, saúde, governo e e-commerce, qualidade não é opcional, é obrigação legal. O QA sênior precisa entender as regulamentações que impactam o que deve ser testado.

⚖️

LGPD e GDPR para QA

A LGPD (Brasil) e GDPR (Europa) regulamentam o tratamento de dados pessoais. Para QA, isso significa: dados PII em ambientes de teste devem ser anonimizados, logs não podem expor dados sensíveis, o direito ao esquecimento deve ser testado, e consentimento de uso de dados precisa de casos de teste específicos.

🏋️ Exercícios Rápidos
  • Audite os ambientes de teste do seu time: há dados pessoais reais (CPF, email, telefone) em bancos de homologação? Isso viola LGPD.
  • Escreva casos de teste para a funcionalidade "excluir minha conta e todos os dados" (right to be forgotten).
🏦

PCI-DSS para Fintech

O PCI-DSS (Payment Card Industry Data Security Standard) define requisitos de segurança para sistemas que processam dados de cartão. O QA valida: dados de cartão nunca são logados ou armazenados em texto claro, campos de cartão têm masking adequado (****1234), transmissão é sempre via HTTPS com TLS 1.2+, e tokens de pagamento são usados em vez de números reais.

🏋️ Exercícios Rápidos
  • Escreva 5 casos de teste de compliance PCI-DSS para um checkout de e-commerce.
  • Verifique se os logs da aplicação jamais registram números de cartão, mesmo em formato parcial não mascarado.
🏥

HIPAA, ISO 13485 e Setores Regulados

Setores específicos têm regulamentações próprias: HIPAA (saúde, EUA): proteção de dados médicos, audit trails obrigatórios. ISO 13485 (dispositivos médicos): rastreabilidade completa de testes. BACEN (bancos brasileiros): requisitos de disponibilidade e SLAs. ANVISA (saúde brasileira): validação de software médico.

🏋️ Exercícios Rápidos
  • Para um sistema de prontuário eletrônico, liste 5 requisitos de compliance que impactam os casos de teste.
📋

Testes de Compliance na Prática

Estratégias: compliance as code (regras de compliance codificadas em testes automatizados), audit trail testing (verificar que toda ação crítica é registrada com timestamp, usuário e dado alterado), data residency testing (dados são armazenados no país correto), vulnerability scanning integrado ao pipeline (Snyk, Dependabot).

🏋️ Exercícios Rápidos
  • Configure o Snyk (gratuito) no seu repositório e analise as vulnerabilidades de dependências.
  • Escreva um teste que valida o audit trail: após uma operação crítica, confirma que o log foi gerado com todos os campos obrigatórios.
🧪

Laboratório, Compliance Testing: LGPD e Audit Trail

Implemente testes de conformidade LGPD e validação de audit trail

1
Auditoria de dados PII em ambientes de teste

Detecte e corrija exposição de dados pessoais nos ambientes de teste do seu projeto.

  • 1. Execute a query abaixo no banco de homologação para detectar possíveis dados PII reais (padrões de CPF, email, telefone real).
  • 2. Implemente data masking: crie um script que substitui dados reais por dados sintéticos equivalentes mantendo o formato.
  • 3. Configure o Snyk no repositório: npx snyk test. Analise os resultados e priorize as vulnerabilidades críticas.
  • 4. Documente um processo de "limpeza de ambiente": quando usar dados reais (nunca!), quando usar dados mascarados e quando usar dados sintéticos.
-- Query de detecção de PII potencial no banco de teste SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'testdb' AND ( column_name LIKE '%cpf%' OR column_name LIKE '%email%' OR column_name LIKE '%telefone%' OR column_name LIKE '%celular%' OR column_name LIKE '%senha%' OR column_name LIKE '%password%' OR column_name LIKE '%cartao%' OR column_name LIKE '%credit_card%' ) ORDER BY table_name; -- Verificar se há emails que parecem reais (domínios corporativos) SELECT email FROM clientes WHERE email NOT LIKE '%@teste.com' AND email NOT LIKE '%@example.com' AND email NOT LIKE '%@fake.com' LIMIT 20;
💡 Dica: Uma violação de LGPD com dados de teste reais pode resultar em multa de até 2% do faturamento (máximo R$ 50 milhões por infração). O custo de implementar data masking é irrisório em comparação. Isso é compliance como vantagem competitiva.
2
Implementando e testando Audit Trail

Configure e valide um sistema de audit trail que registra todas as operações críticas.

  • 1. Crie uma tabela de audit no banco: CREATE TABLE audit_log(id INT AUTO_INCREMENT, tabela VARCHAR(50), operacao ENUM("INSERT","UPDATE","DELETE"), usuario VARCHAR(100), dados_antes JSON, dados_depois JSON, ip VARCHAR(45), timestamp TIMESTAMP DEFAULT NOW(), PRIMARY KEY(id));
  • 2. Configure triggers no banco para registrar automaticamente mudanças nas tabelas críticas (clientes, pedidos, pagamentos).
  • 3. Escreva testes automatizados que: (a) executam uma operação (ex: alterar email do cliente), (b) consultam o audit_log e verificam que o registro foi criado corretamente com todos os campos obrigatórios.
  • 4. Teste casos negativos: tente executar operações como usuário não autorizado e confirme que o audit_log registra a tentativa. Verifique que o log é imutável (nenhum usuário pode deletar registros de audit).
💡 Dica: Um audit trail bem implementado não apenas atende compliance, é uma ferramenta poderosa de debugging. Quando um cliente diz "alguém mudou meu dado sem minha autorização", o audit trail te diz exatamente quem, quando e como.
3
Criando uma política de dados de teste para o time

Formalize como o time deve tratar dados em ambientes de teste, tornando compliance uma prática cotidiana.

  • 1. Audite todos os ambientes de teste do seu time (dev, staging, QA): há dados reais (CPF, email, nome, telefone) em algum banco de dados?
  • 2. Escreva uma política de Dados de Teste de 1 página com: princípios (ex: "zero dados reais em ambientes não-produtivos"), ferramentas aprovadas (Faker.js, Mockaroo), processo de solicitação de exceção e responsabilidades.
  • 3. Crie um script de auditoria automática que verifica semanalmente se há dados PII nos bancos de teste (use a query SQL do laboratório anterior). Configure para enviar um relatório por email.
  • 4. Apresente a política para o time em uma reunião de 15 minutos. Colete feedback e ajuste. Uma política que o time não entende ou não segue não protege ninguém.
💡 Dica: A política precisa ser prática, não apenas correta. Se for muito burocrática, o time vai contorná-la. Ofereça alternativas simples: dados sintéticos pré-gerados, seeds padronizados e um processo ágil para criar novos conjuntos.
4
Testes de compliance na prática

Implemente testes automatizados que verificam requisitos regulatórios.

  • 1. Para LGPD, escreva testes que verificam: dados pessoais são retornados só para o titular autenticado, o endpoint de exclusão realmente remove todos os registros e logs de auditoria são gerados.
  • 2. Para cada teste de compliance, documente: o artigo da lei verificado (ex: Art. 18 LGPD), a evidência que o teste gera como prova e a frequência de execução recomendada.
  • 3. Simule uma auditoria: o auditor pede evidência de proteção de dados pessoais. Você consegue gerar o relatório dos últimos 6 meses em menos de 1 hora?
💡Dica: Testes de compliance devem gerar evidência auditável, não apenas pass/fail. O relatório do teste é tão importante quanto o resultado: é o que você apresenta ao auditor.
🟣 Sênior · Módulo 13

Testes em Microsserviços

Testar um monolito é relativamente simples. Testar dezenas de microsserviços que se comunicam por eventos é um desafio de arquitetura.

🧩

Estratégia de Testes em Microsserviços

A pirâmide de testes muda em microsserviços: menos E2E (lentos e frágeis), mais testes de contrato e integração focados. Estratégia recomendada: testes unitários dentro de cada serviço, contract tests com Pact entre serviços, component tests de cada serviço isolado (com dependências virtualizadas) e E2E mínimo só para fluxos críticos de negócio.

🏋️ Exercícios Rápidos
  • Para uma arquitetura com 5 microsserviços, desenhe o mapa de dependências e identifique onde o Pact seria mais valioso.
  • Defina a estratégia de testes para cada serviço: quais camadas, quais ferramentas, quais responsabilidades.
📨

Testando Sistemas Baseados em Eventos

Em arquiteturas event-driven (Kafka, RabbitMQ, SQS), a comunicação é assíncrona. Desafios de teste: como verificar que um evento foi publicado? Como testar o consumer sem o producer rodando? Como lidar com a consistência eventual? Ferramentas: Testcontainers (Kafka embedded), Pact para contratos de mensagens.

🏋️ Exercícios Rápidos
  • Configure um Kafka local com Docker e escreva um teste que publica um evento e verifica que o consumer o processou.
  • Use Testcontainers para subir um Kafka real em memória dentro dos testes de integração.
🔍

Distributed Tracing para QA

Em microsserviços, um request atravessa vários serviços. Quando algo falha, como descobrir onde? Distributed tracing (Jaeger, Zipkin, OpenTelemetry) cria uma "trilha" do request por todos os serviços. O QA usa isso para: investigar bugs de integração, validar SLOs de cada serviço individualmente, e detectar gargalos na cadeia de chamadas.

🏋️ Exercícios Rápidos
  • Configure o Jaeger localmente com Docker e instrumente uma aplicação simples com OpenTelemetry.
  • Execute um fluxo de teste e analise o trace: qual serviço introduziu mais latência?
🔄

Consistência Eventual e Idempotência

Sistemas distribuídos são eventualmente consistentes, o dado pode não estar atualizado imediatamente após uma operação. O QA precisa: testar com polling/retry para aguardar a consistência, testar idempotência (enviar o mesmo evento 2x não causa efeito duplicado), e testar o comportamento de compensação quando uma saga falha parcialmente.

🏋️ Exercícios Rápidos
  • Escreva um teste que verifica consistência eventual: executa uma operação, aguarda até 5 segundos verificando a cada 500ms, e falha com mensagem clara se o estado não convergiu.
  • Teste idempotência: envie o mesmo request de criação 3 vezes e verifique que apenas 1 registro foi criado.
🧪

Laboratório, Testando Kafka com Testcontainers

Configure testes de integração para um sistema event-driven com Kafka real em memória

1
Testcontainers + Kafka: testes de integração reais

Use Testcontainers para subir um Kafka real dentro dos seus testes de integração Java/Node.js.

  • 1. Setup Java: <dependency><groupId>org.testcontainers</groupId><artifactId>kafka</artifactId><version>1.19.0</version><scope>test</scope></dependency>
  • 2. Crie o teste de integração abaixo. O Testcontainers vai subir um container Kafka real dentro do JVM de teste, sem precisar de infraestrutura externa.
  • 3. Execute: mvn test -Dtest=KafkaIntegrationTest. Observe nos logs que o container Kafka é criado e destruído automaticamente.
  • 4. Adicione asserções: (1) o evento foi publicado no tópico correto, (2) o consumer processou dentro de 5 segundos, (3) o resultado final está no banco de dados.
// KafkaIntegrationTest.java @Testcontainers class KafkaIntegrationTest { @Container static KafkaContainer kafka = new KafkaContainer( DockerImageName.parse("confluentinc/cp-kafka:7.4.0") ); @Test void deveProcessarEventoDePedido() throws Exception { String bootstrapServers = kafka.getBootstrapServers(); // Producer: publica evento Properties prodProps = new Properties(); prodProps.put("bootstrap.servers", bootstrapServers); prodProps.put("key.serializer", StringSerializer.class); prodProps.put("value.serializer", StringSerializer.class); try (KafkaProducer<String, String> producer = new KafkaProducer<>(prodProps)) { producer.send(new ProducerRecord<>("pedidos", "1", "{\"id\":1,\"status\":\"aprovado\",\"total\":299.90}")); } // Consumer: consome e valida Properties consProps = new Properties(); consProps.put("bootstrap.servers", bootstrapServers); consProps.put("group.id", "test-group"); consProps.put("key.deserializer", StringDeserializer.class); consProps.put("value.deserializer", StringDeserializer.class); consProps.put("auto.offset.reset", "earliest"); try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consProps)) { consumer.subscribe(List.of("pedidos")); ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(5)); assertFalse(records.isEmpty(), "Nenhum evento recebido em 5 segundos"); String body = records.iterator().next().value(); assertTrue(body.contains("\"status\":\"aprovado\"")); } } }
💡 Dica: Testcontainers garante que os testes de integração rodam com infraestrutura real (não mocks), são reproduzíveis (mesma versão do container toda vez) e não deixam lixo (containers são destruídos após os testes).
2
Testando consistência eventual com polling e timeout

Implemente um padrão de teste robusto para sistemas assíncronos que não dependem de sleeps arbitrários.

  • 1. O problema: após publicar um evento, o banco não atualiza imediatamente. Testes com sleep(2000) são frágeis. Implemente o padrão de polling com timeout.
  • 2. Crie uma função waitForCondition(checkFn, timeout=5000, interval=200) que executa checkFn a cada 200ms até retornar true ou o timeout expirar.
  • 3. Use essa função nos testes de integração: após publicar um evento Kafka, chame waitForCondition(() => db.query("SELECT * WHERE status='processado'").
  • 4. Teste os casos de erro: o que acontece quando a condição nunca é atingida? A mensagem de erro é clara? O teste falha com timeout explicativo ou com erro genérico?
// waitForCondition.ts async function waitForCondition( checkFn: () => Promise<boolean>, timeout = 5000, interval = 200, message = "Condition not met within timeout" ): Promise<void> { const start = Date.now(); while (Date.now() - start < timeout) { if (await checkFn()) return; await new Promise(r => setTimeout(r, interval)); } throw new Error(`${message} (${timeout}ms)`); } // Uso no teste it("processa evento de pedido", async () => { await kafka.publish("pedidos", { id: 123, status: "criado" }); await waitForCondition( async () => { const row = await db.query("SELECT status FROM pedidos WHERE id=123"); return row?.status === "processado"; }, 5000, 200, "Pedido nao foi processado pelo consumer" ); });
💡 Dica: Nunca use sleep fixo em testes assíncronos. 2 segundos pode ser suficiente num dia e insuficiente em outro. O polling com timeout garante que o teste é rápido quando o sistema responde rápido e apenas falha quando realmente expira.
3
Testando sistemas baseados em eventos

Implemente testes para sistema assíncrono com mensageria.

  • 1. Configure Kafka com docker-compose. Crie producer e consumer. Use Testcontainers para subir o Kafka nos testes de integração.
  • 2. Escreva testes que verificam: o consumer processa a mensagem dentro do timeout? O que acontece se o consumer falha no meio? A mensagem fica em dead letter queue?
  • 3. Teste consistência eventual: publique sequência de eventos e verifique que o estado final é consistente, mesmo sem ordem garantida. Esse teste revela se o sistema é idempotente.
💡Dica: Sistemas event-driven testados com mocks de mensageria têm ponto cego enorme: a serialização real. Testcontainers com Kafka real elimina esse ponto cego.
4
Distributed Tracing para diagnóstico

Use tracing para investigar e documentar bug em microsserviços.

  • 1. Configure OpenTelemetry com Jaeger no OpenTelemetry Demo. Execute fluxo de compra e visualize o trace: quantos serviços foram envolvidos? Qual tem maior latência?
  • 2. Injete erro proposital em um serviço. Use Jaeger para identificar qual serviço está causando degradação sem olhar o código. Documente o processo de diagnóstico.
  • 3. Escreva guia de 'debugging com tracing' para o time: como interpretar um trace, identificar gargalos e correlacionar erro de usuário com trace usando o trace ID.
💡Dica: Em microsserviços, logs individuais são insuficientes para entender o fluxo completo. Tracing conecta os pontos e mostra a jornada completa de uma requisição.
🟣 Sênior · Módulo 14

Literacia de Dados para QA

Em 2026, decisões de QA baseadas em intuição foram substituídas por decisões baseadas em dados. O Arquiteto de Qualidade define, coleta e interpreta métricas que conectam qualidade ao negócio.

📊

As Métricas que Importam

Existem dezenas de métricas de QA, mas poucas realmente importam para o negócio. Métricas técnicas: defect escape rate (% de bugs que chegam a produção), test flakiness rate, test coverage meaningful (não só %), MTTR. Métricas de negócio: custo por defeito, tempo de feedback, qualidade percebida pelo usuário (NPS correlacionado com incidentes).

🏋️ Exercícios Rápidos
  • Calcule o defect escape rate do último sprint do seu time. Como melhorá-lo?
  • Construa um modelo de custo: quanto custa um bug encontrado em cada fase (requisito, dev, QA, produção)?
🔬

Análise de Causa Raiz com Dados

Quando bugs escapam para produção, dados revelam padrões que olhar humano perde. Técnicas: Pareto dos defeitos (80% dos bugs vêm de 20% dos componentes, foque ali), correlação mudança × defeito (componentes com mais commits têm mais bugs?), análise de flakiness (quais testes são cronicamente instáveis?), análise de cobertura inteligente.

🏋️ Exercícios Rápidos
  • Pegue o histórico de bugs do Jira dos últimos 3 meses. Quais 3 componentes concentram mais defeitos?
  • Crie um gráfico de Pareto dos defeitos por módulo usando Python/Excel.
📈

Dashboards de Qualidade para Stakeholders

O Arquiteto de Qualidade traduz dados técnicos em linguagem de negócio. Um dashboard executivo eficaz mostra: tendência de qualidade (melhorando ou piorando?), risco do release (baseado em métricas objetivas), cobertura de riscos críticos, e custo evitado de defeitos. Ferramentas: Grafana, Power BI, Google Data Studio.

🏋️ Exercícios Rápidos
  • Crie um dashboard em Google Data Studio (gratuito) com 4 métricas de qualidade para um time fictício.
  • Escreva um relatório de qualidade de sprint para um gerente de produto, sem jargão técnico.
🤖

Predictive Quality Analytics

IA aplicada a métricas de qualidade: modelos que predizem defeitos com base em métricas de código (complexidade ciclomática, churn de código, cobertura), priorizam testes baseados em risco de mudança, e detectam anomalias automaticamente em pipelines de CI. Ferramentas emergentes: Launchable, Sealights, Diffblue.

🏋️ Exercícios Rápidos
  • Use um modelo simples: correlacione o número de commits em um arquivo com o número de bugs naquele arquivo. A hipótese se confirma?
🧪

Laboratório, Dashboard de Qualidade e Análise de Dados

Construa um painel de métricas de qualidade e analise padrões de defeitos com dados reais

1
Análise de Pareto dos Defeitos com Python

Use Python para analisar o histórico de bugs e identificar onde focar esforços de qualidade.

  • 1. Exporte os bugs do Jira como CSV (Issues Export CSV). Se não tiver Jira, use o arquivo de exemplo do link abaixo.
  • 2. Instale as bibliotecas: pip install pandas matplotlib seaborn
  • 3. Execute o script abaixo para gerar o gráfico de Pareto. Identifique os componentes que concentram 80% dos defeitos.
  • 4. Escreva uma análise de 1 parágrafo: "Com base no Pareto, os próximos sprints de QA devem focar em [X, Y, Z] porque esses componentes respondem por [%] dos defeitos históricos."
# analise_defeitos.py import pandas as pd import matplotlib.pyplot as plt # Dados de exemplo (substitua pelo export do Jira) dados = { "componente": ["Checkout","Checkout","Pagamentos","Auth","Checkout", "Pagamentos","Relatórios","Auth","Checkout","Pagamentos", "API","Checkout","Auth","Pagamentos","API"], "severidade": ["Critical","Major","Critical","Minor","Major", "Major","Minor","Critical","Critical","Minor", "Major","Major","Minor","Critical","Minor"], "sprint": ["S23","S23","S23","S24","S24","S24","S24","S25","S25","S25", "S25","S26","S26","S26","S26"] } df = pd.DataFrame(dados) # Pareto por componente contagem = df["componente"].value_counts() total = contagem.sum() cumulativo = contagem.cumsum() / total * 100 fig, ax1 = plt.subplots(figsize=(10, 6)) ax1.bar(contagem.index, contagem.values, color="#3b82f6", alpha=0.8) ax1.set_ylabel("Número de Defeitos") ax2 = ax1.twinx() ax2.plot(contagem.index, cumulativo.values, "ro-", linewidth=2) ax2.axhline(80, color="orange", linestyle="--", label="80%") ax2.set_ylabel("% Acumulado") plt.title("Pareto de Defeitos por Componente, Análise QA") plt.tight_layout() plt.savefig("pareto_defeitos.png", dpi=150) print(f"Componentes críticos (80% dos defeitos): {contagem[cumulativo <= 80].index.tolist()}")
💡 Dica: O Pareto de defeitos é uma das análises mais poderosas que um QA sênior pode apresentar para um gerente. Transforma "testar tudo" (impossível) em "testar os 20% que valem 80%" (estratégico). É a diferença entre QA operacional e QA estratégico.
2
Dashboard de Qualidade no Google Looker Studio

Construa um dashboard executivo de qualidade com dados reais do seu time.

  • 1. Crie uma planilha no Google Sheets com métricas das últimas 4 semanas: Semana | Total de bugs encontrados | Bugs escapados para prod | % de testes passando | Duração do pipeline (min) | Cobertura de código (%).
  • 2. Acesse Google Looker Studio (gratuito) e crie um novo relatório conectado à sua planilha.
  • 3. Adicione 4 visualizações: (1) linha temporal de bugs por semana, (2) gauge de defect escape rate (meta: < 5%), (3) barra de duração do pipeline (meta: < 15 min), (4) tabela de tendências.
  • 4. Compartilhe o dashboard com alguém do time e colete feedback: as métricas fazem sentido? Que decisão você tomaria com base nelas?
💡 Dica: Um bom dashboard de qualidade tem 3 características: (1) diz se estamos melhorando ou piorando, (2) levanta um alerta quando algo está errado, (3) é atualizado automaticamente. Se precisar de atualização manual, ninguém vai olhar.
3
Correlacionando métricas de código com densidade de defeitos

Use análise de dados para identificar os módulos de maior risco e direcionar esforços de teste de forma estratégica.

  • 1. Pegue um repositório open source com histórico de issues (ex: VSCode, React). Use a API do GitHub para extrair: número de commits por arquivo nos últimos 90 dias e número de issues fechadas por componente.
  • 2. Calcule a correlação: arquivos com muitos commits têm mais bugs? Plote num gráfico de dispersão usando Python (matplotlib) ou Google Sheets.
  • 3. Identifique os 5 módulos mais arriscados (alta frequência de mudança + alta densidade de bugs históricos). Esses são os candidatos a revisão de arquitetura.
  • 4. Escreva uma recomendação estratégica: "Baseado na análise de dados, os próximos 2 sprints de QA devem priorizar X, Y e Z porque [dados]. Isso deve reduzir o escaped defect rate em aproximadamente [estimativa]."
💡 Dica: Esta análise é chamada de "defect clustering" e é usada por times de engenharia maduros para direcionamento de testes. A premissa (lei de Pareto) se confirma empiricamente: 80% dos bugs vêm de 20% dos módulos.
4
Predictive Quality Analytics na prática

Use dados históricos para prever áreas de risco.

  • 1. Colete dados de bugs dos últimos 6 meses: módulo, severidade, data de descoberta, data de introdução e esforço de correção. Organize numa planilha ou banco.
  • 2. Identifique padrões: quais módulos concentram mais bugs? Há correlação entre tamanho de PR e número de bugs? Features de times novos têm mais bugs?
  • 3. Na próxima sprint, use as hipóteses para priorizar esforço de teste. Ao final, valide: os módulos priorizados concentraram mais bugs? Documente a acurácia.
💡Dica: Você não precisa de machine learning para fazer predictive quality. Correlações simples em planilha já melhoram a priorização. Comece simples e adicione complexidade conforme necessário.
🟢 Júnior · Módulo 11

HTTP para QA

Antes de testar qualquer API ou aplicação web, você precisa entender como a comunicação entre cliente e servidor funciona. É o vocabulário básico do QA moderno.

🌐

Como funciona uma requisição HTTP

Toda vez que você abre um site ou usa um app, seu dispositivo envia uma requisição HTTP para um servidor e recebe uma resposta. A requisição tem: método (o que fazer), URL (onde), headers (metadados) e body (dados). A resposta tem: status code (resultado), headers e body. Entender esse ciclo é o pré-requisito para testar qualquer sistema web.

🏋️ Exercícios Rápidos
  • Abra o DevTools (F12), vá em Network e acesse qualquer site. Clique em uma requisição e identifique: método, URL, status code, headers e body da resposta.
  • Acesse httpbin.org e explore os endpoints. Faça um GET /get e um POST /post pelo browser.
🔢

Status Codes: o dicionário do QA

Os status codes dizem o que aconteceu com sua requisição. As famílias que você precisa dominar: 2xx (sucesso: 200 OK, 201 Created, 204 No Content), 3xx (redirecionamentos), 4xx (erro do cliente: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 422 Unprocessable Entity), 5xx (erro do servidor: 500 Internal Server Error, 503 Service Unavailable).

🏋️ Exercícios Rápidos
  • Crie um card de referência com os 10 status codes mais comuns e um exemplo real de quando cada um aparece.
  • No DevTools, navegue em um site e force um 404 acessando uma URL inexistente. Depois tente acessar uma área restrita sem login e veja o 401 ou 403.
  • No Postman, faça requisições para httpbin.org/status/200, /400, /404 e /500. Observe como cada um se comporta.
📋

Métodos HTTP: GET, POST, PUT, PATCH, DELETE

Cada método HTTP tem uma semântica específica: GET busca dados (sem efeito colateral), POST cria um recurso, PUT substitui completamente, PATCH atualiza parcialmente, DELETE remove. Como QA, você usa isso para entender o que cada requisição faz e definir os casos de teste corretos para cada operação.

🏋️ Exercícios Rápidos
  • Para um sistema de cadastro de usuários, liste quais métodos HTTP seriam usados para: criar, buscar todos, buscar um, editar nome, trocar senha e desativar.
  • No Postman, teste os 5 métodos na API JSONPlaceholder (jsonplaceholder.typicode.com). Observe as diferenças nas respostas.
🔑

Headers, Autenticação e Body

Headers carregam metadados: Content-Type (formato dos dados), Authorization (token de acesso), Accept (formato esperado na resposta). Para autenticação, os formatos mais comuns são Bearer Token (JWT no header Authorization) e API Key (no header ou query param). O body geralmente é JSON, entender sua estrutura é essencial para validar respostas de API.

🏋️ Exercícios Rápidos
  • No Postman, faça uma requisição com header Authorization: Bearer token_qualquer. Veja o 401 retornado. Depois use as credenciais corretas da Restful Booker API.
  • Analise um JWT em jwt.io: cole um token e leia o payload. Quais informações ele carrega? Quando expira?
🧪

Laboratório, HTTP na prática: do DevTools ao Postman

Domine o protocolo HTTP com exercícios progressivos usando ferramentas reais

1
Mapeando o tráfego HTTP de uma aplicação real

Use o DevTools para entender toda a comunicação HTTP de uma aplicação antes de escrever um único caso de teste.

  • 1. Abra o OrangeHRM, abra o DevTools na aba Network e marque "Preserve log". Faça login com Admin/admin123.
  • 2. Filtre por XHR/Fetch. Identifique: qual endpoint é chamado no login? Qual método? Qual status code retorna em caso de sucesso?
  • 3. Tente um login inválido. O status code mudou? O endpoint é o mesmo? O body da resposta é diferente?
  • 4. Documente em uma tabela: Endpoint, Método, Cenário, Status Code Esperado. Isso já é o início de um plano de testes de API.
💡 Dica: Sempre que receber uma nova aplicação para testar, passe 30 minutos explorando o Network do DevTools antes de abrir qualquer ferramenta de teste. Você vai entender a arquitetura da aplicação muito mais rápido do que lendo documentação.
2
Testando status codes e validações no Postman

Construa uma coleção Postman que valida status codes corretos para cada cenário de uma API real.

  • 1. Na JSONPlaceholder API (jsonplaceholder.typicode.com), crie uma coleção com 5 requests: GET /posts, GET /posts/1, GET /posts/9999, POST /posts (body JSON) e DELETE /posts/1.
  • 2. Para cada request, adicione um teste de status code na aba Tests: pm.test("Status correto", () => pm.response.to.have.status(200))
  • 3. Execute a coleção com Collection Runner. Analise: o GET /posts/9999 retornou 404? O POST retornou 201? Há algo inesperado?
  • 4. Adicione um teste de tempo de resposta em todos: pm.test("Menos de 1s", () => pm.expect(pm.response.responseTime).to.be.below(1000)). Alguma requisição está lenta?
// Tests no Postman para POST /posts pm.test("Status 201 Created", () => pm.response.to.have.status(201)); pm.test("Body tem ID gerado", () => { const body = pm.response.json(); pm.expect(body).to.have.property("id"); pm.expect(body.id).to.be.a("number"); }); pm.test("Body reflete dados enviados", () => { const body = pm.response.json(); pm.expect(body.title).to.eql(pm.request.body.raw ? JSON.parse(pm.request.body.raw).title : ""); }); pm.test("Resposta em menos de 1s", () => pm.expect(pm.response.responseTime).to.be.below(1000));
💡 Dica: Validar status codes é o teste mais básico de API, e o mais esquecido. Uma API que retorna 200 com mensagem de erro no body é um bug sutil e perigoso. Sempre valide tanto o status code quanto o conteúdo da resposta.
3
Status codes numa API real

Use Postman para explorar os códigos de resposta de uma API pública.

  • 1. Na API reqres.in, faça chamadas que retornem: 200 (GET /users/1), 201 (POST /users), 404 (GET /users/999) e 400 (POST /login sem senha). Para cada um, documente: o que significa e o que o QA deve verificar.
  • 2. Envie uma requisição propositalmente malformada. O servidor retorna 400 ou 500? A diferença importa: 4xx é erro do cliente, 5xx é erro do servidor.
  • 3. Crie uma coleção Postman com teste automatizado para cada endpoint: verifica status code, campos obrigatórios no body e tempo de resposta abaixo de 2 segundos.
💡Dica: APIs que retornam 200 com mensagem de erro no body são um antipadrão comum. Verifique sempre o status code E o conteúdo da resposta.
4
Autenticação e headers na prática

Explore como token e headers funcionam em uma API real.

  • 1. Na reqres.in, faça login (POST /login) e obtenha o token. Use-o no header Authorization: Bearer em uma requisição protegida. Verifique que sem token recebe 401.
  • 2. Teste cenários: token inválido, token de outro usuário, sem token. Cada cenário retorna código diferente?
  • 3. Inspecione os headers da resposta: Content-Type está correto? Há headers de segurança como X-Content-Type-Options? Documente os ausentes como achados de segurança básica.
💡Dica: Testar autenticação não é só 'funciona com token válido'. Os casos de borda (expirado, formato errado, sem permissão) são onde bugs de segurança mais aparecem.
🟢 Júnior · Módulo 12

Portfólio e Carreira em QA

Seu portfólio é a evidência concreta das suas habilidades. Em QA, um GitHub bem organizado vale mais do que qualquer certificado no currículo.

💼

O que colocar no portfólio de QA

Um portfólio de QA júnior precisa mostrar que você sabe testar na prática. Os projetos mais valorizados por recrutadores técnicos: casos de teste documentados para apps reais, plano de testes de uma funcionalidade completa, relatório de bugs com evidências, primeiro projeto de automação (mesmo simples) e um README claro explicando o que você testou e como.

🏋️ Exercícios Rápidos
  • Crie o repositório qa-portfolio no GitHub com README profissional explicando seu objetivo de aprendizado.
  • Escolha um app gratuito (OrangeHRM, Sauce Demo, DemoQA) e documente 20 casos de teste em uma planilha Google Sheets linkada no README.
  • Execute os testes, registre os resultados e adicione ao menos 3 bug reports completos com screenshots.
📝

Como se destacar no processo seletivo de QA

O que recrutadores técnicos avaliam em QAs júniores: clareza dos casos de teste (são executáveis por outra pessoa?), qualidade dos bug reports (reproduzíveis, com evidência), raciocínio crítico (você pensou nos cenários negativos?), iniciativa (você foi além do básico?) e comunicação (você explica bem o que testou?). Certificações ajudam, mas portfólio prático pesa mais.

🏋️ Exercícios Rápidos
  • Revise seus casos de teste com um olhar crítico: outra pessoa conseguiria executar sem sua ajuda?
  • Peça feedback do seu portfólio para alguém da área antes de enviar para vagas.
  • Prepare um pitch de 2 minutos: "Testei o app X, encontrei Y problemas, o mais crítico foi Z porque..."
🎓

Certificações que valem a pena para Júnior

A certificação mais reconhecida no mercado brasileiro é o CTFL (ISTQB Foundation Level), oferecida pelo BSTQB no Brasil. Ela valida fundamentos de teste e abre portas em processos seletivos. Não é obrigatória para entrar na área, mas diferencia seu currículo. Custo médio: R$400-600. Estude o syllabus oficial (gratuito no site do BSTQB) por 2-3 meses.

🏋️ Exercícios Rápidos
  • Baixe o syllabus CTFL em português no site do BSTQB e leia o índice. Quais capítulos você já domina?
  • Faça simulados gratuitos online para avaliar sua prontidão antes de pagar a prova.
  • Se ainda não está pronto para a CTFL, comece pela DIO ou Alura para construir a base.
🌐

Comunidade e networking em QA

Aprender em comunidade acelera muito a evolução. No Brasil: QA Ninja (canal YouTube e Discord), Iterasys (canal YouTube com conteúdo gratuito), Testing Dojo Brasil (eventos), LinkedIn (siga QAs sêniors brasileiros). Internacionalmente: Ministry of Testing e Test Automation University. Participar de discussões online é networking real.

🏋️ Exercícios Rápidos
  • Siga 5 profissionais de QA sênior no LinkedIn. Ative notificações dos posts deles.
  • Entre no servidor Discord da comunidade QA Brasil e apresente-se.
  • Inscreva-se no canal do YouTube da Iterasys e assista 2 vídeos por semana.
🧪

Laboratório, Construindo seu portfólio de QA do zero

Crie um portfólio profissional que demonstra suas habilidades para recrutadores

1
Estruturando o repositório qa-portfolio

Monte a estrutura completa do seu portfólio no GitHub com documentação profissional.

  • 1. Crie o repositório público qa-portfolio no GitHub. No README.md, escreva: quem você é, qual seu objetivo na área de QA, e um índice dos projetos.
  • 2. Crie a seguinte estrutura de pastas: 01-manual-tests/, 02-bug-reports/, 03-test-plans/, 04-automation/. Cada pasta com seu próprio README.
  • 3. Na pasta 01-manual-tests/, adicione a planilha de casos de teste que você criou nos módulos anteriores (exporte como CSV ou link para Google Sheets).
  • 4. Na pasta 02-bug-reports/, documente 3 bugs encontrados no OrangeHRM ou DemoQA com: título, passos, resultado esperado, resultado obtido e screenshot.
💡 Dica: Use o padrão de commits Conventional Commits: docs: add login test cases for OrangeHRM. Um histórico de commits bem escrito já demonstra profissionalismo antes do recrutador abrir um arquivo.
2
Primeiro projeto de automação no portfólio

Adicione um projeto de automação simples mas completo que demonstre capacidade técnica.

  • 1. Na pasta 04-automation/, crie um projeto Playwright com pelo menos 5 testes automatizados para o Sauce Demo (saucedemo.com).
  • 2. Escreva um README detalhado para o projeto: o que foi testado, como instalar, como executar, e um screenshot do relatório de execução.
  • 3. Configure um GitHub Actions workflow simples que executa os testes automaticamente a cada push. Adicione o badge de status no README principal.
  • 4. Faça um print do pipeline passando no GitHub Actions e adicione ao README como evidência de que os testes rodam em CI.
💡 Dica: Recrutadores técnicos vão clonar seu repositório e tentar executar. Se o npm install && npm test não funcionar, é eliminatório. Teste o processo de instalação do zero em uma pasta limpa antes de compartilhar o link.
3
Preparando para o processo seletivo

Simule um processo seletivo e identifique pontos de melhoria.

  • 1. Escolha uma vaga real de QA Júnior no LinkedIn. Marque: o que você já sabe, está aprendendo e ainda não sabe. Esse mapa guia seu estudo.
  • 2. Grave um vídeo de 5 minutos se apresentando como QA: quem você é, o que já fez (mesmo projetos pessoais), o que sabe e por que quer a vaga. Assista e avalie.
  • 3. Prepare respostas para as 5 perguntas mais comuns: O que é um bug? Como prioriza testes? Me dê um exemplo de bug encontrado. O que é teste exploratório? Diferença entre verificação e validação?
💡Dica: Em entrevistas JR, postura e raciocínio valem mais do que conhecimento técnico perfeito. Mostre que você pensa criticamente e aprende rápido.
4
Construindo presença na comunidade QA

Dê primeiros passos na comunidade e comece a construir reputação.

  • 1. Atualize seu LinkedIn com foco em QA: seção de habilidades, resumo mencionando sua transição ou início na área e conexão com 10 profissionais de QA.
  • 2. Publique um post compartilhando algo que aprendeu nessa trilha: 3 parágrafos sobre uma ferramenta, técnica ou insight. O hábito de compartilhar constrói autoridade.
  • 3. Entre em 2 comunidades de QA (Slack do Ministry of Testing, Discord QA Brasil ou grupos LinkedIn). Leia as discussões por uma semana e responda uma pergunta onde você pode contribuir.
💡Dica: A comunidade de QA é pequena e colaborativa. Quem compartilha o que aprende é lembrado. Sua próxima oportunidade pode vir de uma conexão numa comunidade.
🟠 Pleno · Módulo 14

Gestão de Ambientes

Credenciais hardcoded em código são uma das vulnerabilidades mais comuns e evitáveis. O QA pleno sabe como gerenciar dados sensíveis com segurança em todos os ambientes.

🔐

Por que nunca hardcodar credenciais

Colocar senhas, tokens e URLs de ambiente diretamente no código é um erro gravíssimo: o histórico do Git guarda tudo para sempre, qualquer pessoa com acesso ao repositório vê as credenciais, e um repositório que vira público expõe dados sensíveis instantaneamente. Ferramentas como GitGuardian e GitHub Secret Scanning monitoram repositórios públicos e alertam quando credenciais são expostas.

🏋️ Exercícios Rápidos
  • Pesquise no GitHub por "password" language:javascript, quantos repositórios públicos têm senhas expostas? Isso demonstra a escala do problema.
  • Verifique seus repositórios de QA: há alguma URL de ambiente, usuário ou senha hardcoded no código?
📄

Arquivo .env e dotenv

O padrão mais simples e universal: variáveis de ambiente em um arquivo .env local (nunca commitado) carregadas pela biblioteca dotenv. O repositório tem um arquivo .env.example com as chaves necessárias mas sem os valores, servindo como documentação. Cada desenvolvedor/CI tem seu próprio .env com os valores reais.

🏋️ Exercícios Rápidos
  • No seu projeto Playwright, crie um .env com BASE_URL, USERNAME e PASSWORD. Carregue com dotenv e substitua os valores hardcoded.
  • Confirme que o .env está no .gitignore. Crie o .env.example com as chaves sem valores.
🏗️

GitHub Secrets no CI/CD

Para pipelines de CI/CD, variáveis de ambiente são configuradas como GitHub Secrets (Settings > Secrets and variables > Actions). Elas ficam criptografadas e não aparecem nos logs. No workflow YAML, são referenciadas como ${{ secrets.NOME_DA_VARIAVEL }}. Nunca imprima secrets com echo ou console.log, mesmo em ambientes privados.

🏋️ Exercícios Rápidos
  • Configure os secrets BASE_URL, USERNAME e PASSWORD no GitHub Settings do seu repositório.
  • Atualize o workflow do Playwright para passar os secrets como variáveis de ambiente para os testes.
  • Verifique nos logs do GitHub Actions que os valores não aparecem, devem estar mascarados como ***.
🌍

Múltiplos ambientes: dev, staging e produção

Times profissionais têm múltiplos ambientes. A estratégia: um arquivo .env por ambiente (.env.dev, .env.staging) e uma variável ENV que seleciona qual carregar. No Playwright, o playwright.config.tsprocess.env.ENV para definir a baseURL correta. No CI, cada pipeline stage configura as variáveis do ambiente correspondente.

.env + dotenv GitHub Secrets Vault (HashiCorp) AWS Secrets Manager Azure Key Vault
🏋️ Exercícios Rápidos
  • Configure o Playwright para aceitar um parâmetro de ambiente: ENV=staging npx playwright test deve apontar para a URL de staging.
  • Crie 2 arquivos .env: .env.dev e .env.staging. Configure o playwright.config.ts para carregar o correto baseado na variável ENV.
🧪

Laboratório, Configuração segura de múltiplos ambientes

Refatore um projeto de automação para usar variáveis de ambiente com segurança

1
Refatorando o projeto Playwright para usar .env

Substitua todos os valores hardcoded do projeto Playwright por variáveis de ambiente.

  • 1. Instale dotenv: npm i -D dotenv. Crie .env com BASE_URL=https://www.saucedemo.com, STANDARD_USER=standard_user e PASSWORD=secret_sauce.
  • 2. Adicione .env ao .gitignore. Crie .env.example com as chaves sem valores e documente no README que o desenvolvedor deve criar seu próprio .env.
  • 3. Atualize o playwright.config.ts: import "dotenv/config" e use process.env.BASE_URL na baseURL.
  • 4. Substitua nos testes: process.env.STANDARD_USER e process.env.PASSWORD. Execute os testes e confirme que funcionam da mesma forma.
// playwright.config.ts import { defineConfig } from "@playwright/test"; import "dotenv/config"; // Validação explícita no startup const requiredEnvVars = ["BASE_URL", "STANDARD_USER", "PASSWORD"]; for (const v of requiredEnvVars) { if (!process.env[v]) throw new Error(`Variável de ambiente ${v} não configurada. Verifique o .env`); } export default defineConfig({ baseURL: process.env.BASE_URL, use: { headless: true }, });
💡 Dica: Use o !. (non-null assertion) com cuidado em TypeScript: process.env.BASE_URL!. Melhor adicionar uma validação explícita no início do config: if (!process.env.BASE_URL) throw new Error("BASE_URL não configurada"). Mensagem de erro clara economiza horas de debug.
2
GitHub Secrets e múltiplos ambientes no CI

Configure GitHub Secrets e um pipeline que aceita execução em dev e staging.

  • 1. No GitHub, vá em Settings > Secrets and variables > Actions. Adicione os 3 secrets: BASE_URL, STANDARD_USER e PASSWORD.
  • 2. Atualize o workflow GitHub Actions para passar os secrets como variáveis de ambiente. Verifique nos logs que os valores aparecem como ***.
  • 3. Adicione um workflow_dispatch input que aceita o parâmetro environment (dev ou staging). O pipeline deve usar a URL correspondente ao ambiente escolhido.
  • 4. Execute manualmente o workflow escolhendo "staging". Confirme que os testes rodaram contra a URL correta.
# .github/workflows/playwright.yml name: Playwright Tests on: push: { branches: [main] } workflow_dispatch: inputs: environment: description: "Ambiente alvo" required: true default: "dev" type: choice options: [dev, staging] jobs: test: runs-on: ubuntu-latest env: BASE_URL: ${{ secrets.BASE_URL }} STANDARD_USER: ${{ secrets.STANDARD_USER }} PASSWORD: ${{ secrets.PASSWORD }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npx playwright install --with-deps chromium - run: npx playwright test - uses: actions/upload-artifact@v4 if: always() with: { name: report, path: playwright-report/ }
💡 Dica: Adicione uma step de "print env" no início do pipeline que mostra quais variáveis estão configuradas (sem os valores): echo "BASE_URL configurada: ${{ env.BASE_URL != '' }}". Facilita o debug quando o pipeline falha por variável faltando.
3
Configurando secrets no CI

Pratique gestão segura de credenciais no pipeline.

  • 1. No GitHub Actions, configure 3 secrets: API_KEY, DATABASE_URL e STAGING_PASSWORD. Escreva workflow que usa esses secrets sem expô-los no log. Verifique que os valores aparecem como *** nos logs.
  • 2. Tente vazar um secret propositalmente com echo. Veja o que o GitHub exibe. Adicione add-mask para mascarar valores dinâmicos que não são secrets mas também não devem aparecer.
  • 3. Configure ambientes separados (staging e production) com secrets diferentes para cada um. Verifique que o workflow de staging nunca acessa secrets de produção.
💡Dica: Secrets de produção nunca devem estar no mesmo escopo que o código de teste. Environments no GitHub Actions garantem esse isolamento.
4
Testando em múltiplos ambientes

Configure a suíte para rodar em dev, staging e produção com configuração dinâmica.

  • 1. Refatore a configuração para ler URL base, credenciais e timeouts de variáveis de ambiente: process.env.BASE_URL, process.env.TEST_USER. Elimine todos os valores hardcoded.
  • 2. Crie .env.dev, .env.staging e .env.prod. Execute a mesma suíte nos três. Existem testes que passam em staging mas falham em produção?
  • 3. Documente as diferenças entre ambientes: timeouts, dados disponíveis, feature flags ativas. Esse mapa é essencial para debugar falhas intermitentes.
💡Dica: Testes que passam em staging mas falham em produção geralmente revelam diferença de configuração, não bug no código. O ambiente é um primeiro-cidadão na estratégia de teste.
🟣 Sênior · Módulo 15

Decisão Estratégica em QA

Saber automatizar não te torna sênior. O que torna um QA sênior é a capacidade de decidir: o que precisa ser testado, o que pode esperar, onde está o risco real e quando a qualidade está em conflito com o negócio. Executar é confortável. Decidir envolve contexto, consequência e responsabilidade.

🧠

Isso Precisa Ser Testado? A Pergunta Mais Importante

A maioria dos QAs aprende a responder "como testar". Poucos aprendem a perguntar "isso precisa mesmo ser testado?", e menos ainda "isso precisa mesmo existir?". A decisão de não testar algo é tão estratégica quanto a decisão de testar. E ela exige coragem, contexto e critério.

🏋️ Como desenvolver esse julgamento
  • Mapeie valor vs. risco: Para cada item da sprint, pergunte: qual o impacto se falhar em produção? Qual a probabilidade de falhar? Qual o custo de testar? A intersecção alto impacto + alta probabilidade + baixo custo de teste é onde o esforço vale mais.
  • Questione a existência antes de testar: Se a feature ainda está em discussão ou tem baixa probabilidade de ser usada, testar extensivamente é desperdício. Um QA que levanta essa questão no refinamento gera mais valor do que um que escreve 50 casos de teste para algo que vai ser descartado.
  • Documente a decisão de não testar: "Decidimos não automatizar este fluxo porque X" é tão válido quanto um plano de teste. O que não pode acontecer é não testar por omissão ou por preguiça, a decisão consciente é a diferença.
⚖️

Trade-off: Qualidade vs. Velocidade vs. Custo

No mundo real, qualidade perfeita não existe. Existe o melhor nível de qualidade possível dado o tempo disponível, o custo aceitável e o risco tolerável pelo negócio. QA sênior entende que o seu papel não é maximizar qualidade a qualquer custo, é encontrar o ponto de equilíbrio certo para cada contexto.

🏋️ Frameworks de decisão
  • O triângulo de ferro revisitado: Tempo · Custo · Qualidade, você pode otimizar dois, mas o terceiro sofre. QA sênior torna esse trade-off explícito para os stakeholders em vez de absorvê-lo silenciosamente.
  • Risco tolerável por tipo de produto: Um MVP em fase de validação tem tolerância a bugs maior do que um sistema financeiro. Um A/B test tem tolerância diferente de uma feature core. Calibre o nível de teste ao contexto do produto, não a um padrão fixo.
  • Quando ceder e quando não ceder: Existem bugs que podem ir para produção com monitoramento. Existem bugs que não vão, independente da pressão. QA sênior sabe distinguir os dois, e tem dados para defender a posição quando a pressão aparecer.
📍

Lendo o Contexto de Negócio para Decidir

Um bug de performance num sistema com 10 usuários ativos não tem o mesmo peso que o mesmo bug num sistema com 1 milhão. Uma falha no fluxo de pagamento tem outro peso que uma falha no fluxo de perfil. QA sênior lê o negócio, modelo de receita, perfil de usuário, momento de mercado, e usa isso para tomar decisões melhores.

🏋️ Como incorporar contexto de negócio
  • Conheça os KPIs do produto: Quais métricas o negócio usa para medir sucesso? Conversão, retenção, NPS, ARR? Bugs que impactam esses KPIs diretamente têm prioridade diferente dos que não impactam.
  • Entenda o momento do produto: Produto em fase de aquisição tolera bugs diferente de produto em fase de retenção. Lançamento em mercado regulado tem restrições que produto interno não tem. A estratégia de teste segue a estratégia de produto.
  • Participe das conversas de roadmap: QA que sabe o que está vindo nos próximos 3 meses prepara a infraestrutura de teste antes, não depois. Visibilidade do roadmap é vantagem estratégica, não luxo.
🎯

Priorização com Dados: Da Intuição ao Critério

Intuição é o ponto de partida, não o ponto de chegada. QA sênior usa dados históricos, frequência de bugs por módulo, tempo de ciclo, taxa de regressão, custo de falha em produção, para transformar "eu acho que esse fluxo é arriscado" em "esse módulo gerou 60% dos bugs críticos nos últimos 3 meses". Critério com dados é defendível. Intuição sem dados é apostas.

🏋️ Construindo critério com dados
  • Heatmap de risco: Mapeie os módulos do sistema por frequência de bugs (histórico) e criticidade de negócio (impacto). O quadrante alta frequência + alto impacto é onde concentrar cobertura. O quadrante baixa frequência + baixo impacto é onde reduzir.
  • Custo de falha por tipo: Calcule (ou estime) o custo de um bug crítico em produção vs. o custo de prevenir no desenvolvimento. Quando esse dado existe, o investimento em qualidade deixa de ser custo e vira argumento.
  • Decisão registrada: Toda decisão estratégica de teste, o que foi coberto, o que foi deliberadamente deixado de fora e por quê, deve ser documentada. Se a decisão se mostrar errada depois, você aprende. Se se mostrar certa, você tem evidência.
🗣️

Defendendo Decisões para Quem Não Fala Técnico

De nada adianta tomar a decisão certa se você não consegue explicar para o PO por que o deploy precisa esperar, ou para o gestor por que o investimento em cobertura de testes vai reduzir custo no próximo trimestre. A decisão estratégica tem duas partes: tomá-la e comunicá-la. A segunda é tão crítica quanto a primeira.

🏋️ Como comunicar decisões estratégicas
  • Traduza risco técnico em risco de negócio: "Esse módulo tem 0% de cobertura de teste" não significa nada para um PO. "Se essa funcionalidade falhar em produção, impacta o fluxo de checkout de 100% dos usuários ativos" significa muito.
  • Ofereça opções, não bloqueios: Em vez de "não podemos fazer o deploy", apresente: "Temos três opções: (1) deploy com monitoramento intensivo e plano de rollback, (2) deploy parcial para 10% dos usuários, (3) mais 2 dias para cobrir os cenários críticos. Qual o risco que o negócio quer assumir?"
  • Documente o risco aceito: Quando o negócio decide avançar mesmo com riscos apontados pelo QA, registre formalmente o risco e quem tomou a decisão de aceitar. Isso protege o time e cria histórico para aprendizado.
🧪

Laboratório: Decida Como Sênior

Exercícios para desenvolver o julgamento estratégico que ferramentas não ensinam

1
Auditoria de decisões da última sprint

Olhe para o que foi testado na última sprint com olhos críticos. O esforço foi alocado onde o risco estava de verdade?

  • 1. Liste tudo que foi testado na última sprint. Para cada item, classifique: alto risco (impacto crítico se falhar), médio risco ou baixo risco.
  • 2. Calcule a proporção do esforço de teste alocado em cada categoria. O que você encontra? O esforço estava concentrado onde o risco era maior?
  • 3. Identifique um item de alto risco que recebeu pouco esforço e um item de baixo risco que recebeu esforço excessivo. O que levou a essa alocação? Foi decisão consciente ou padrão de comportamento?
  • 4. Proponha como ficaria a alocação ideal. O que você faria diferente na próxima sprint?
💡 Dica: Se você não consegue classificar o risco de um item sem pensar muito, é sinal de que falta contexto de negócio. Vá buscar esse contexto antes de planejar os testes.
2
Construa um heatmap de risco do seu sistema

Transforme dados históricos em critério de priorização visual que qualquer pessoa do time consegue interpretar.

  • 1. Liste os principais módulos ou funcionalidades do sistema que você testa.
  • 2. Para cada módulo, levante dois dados: frequência de bugs nos últimos 3 meses (use o histórico do seu sistema de gestão de bugs) e impacto de negócio se falhar (1 a 5, com base no que você sabe do produto).
  • 3. Plote numa matriz 2x2: eixo X = frequência de bugs, eixo Y = impacto de negócio. Quadrante superior direito = foco máximo de cobertura. Quadrante inferior esquerdo = cobertura mínima.
  • 4. Compare com a cobertura de teste atual. Onde há desalinhamento? Apresente o heatmap para o time e use como base para uma decisão concreta de priorização.
3
Simule uma decisão de deploy sob pressão

O cenário mais difícil do dia a dia de um QA sênior: o negócio quer fazer o deploy, você tem riscos não cobertos. O que você faz?

  • 1. Pense num deploy real recente onde havia riscos não completamente cobertos. Se não tiver, use o seguinte cenário fictício: feature de checkout novo, 2 cenários críticos não testados por falta de tempo, deploy marcado para amanhã, PO sob pressão de prazo de mercado.
  • 2. Escreva as três opções que você apresentaria para o PO e o gestor: uma que protege qualidade, uma que equilibra risco e velocidade, uma que prioriza velocidade com mitigação.
  • 3. Para cada opção, descreva: o risco que permanece, o que seria necessário para monitorar em produção e qual seria o plano de rollback.
  • 4. Escreva o e-mail ou mensagem que você mandaria para documentar formalmente o risco aceito pelo negócio. Isso protege o time e registra a decisão para aprendizado futuro.
💡 Dica: QA que só sabe dizer "não está pronto" sem oferecer alternativas se torna obstáculo. QA que apresenta opções com riscos claros se torna parceiro estratégico. A diferença está na forma, não na posição.
4
Priorização com dados em sprint real

Aplique critérios objetivos para decidir o que testar com tempo limitado.

  • 1. Para a próxima sprint, atribua scores de 1 a 3 para cada item: impacto no usuário se falhar, probabilidade de falha (histórico da área) e complexidade da mudança.
  • 2. Calcule score de risco (impacto x probabilidade). Ordene os itens. Com base no tempo disponível, defina o corte: teste completo, smoke test ou só regressão automatizada.
  • 3. Ao final da sprint, valide: os bugs encontrados estavam nos itens de score alto ou baixo? Ajuste os pesos dos critérios com base nos dados reais.
💡Dica: Priorização com dados não elimina o julgamento humano, ela o estrutura. O score é ponto de partida, não sentença. Item com score baixo mas crítico para o PO deve ser tratado como alto.
5
Defendendo decisões para quem não fala técnico

Pratique a comunicação de decisões difíceis de qualidade.

  • 1. Escolha uma decisão controversa real: rejeitar deploy por bug 'menor', recomendar adiar feature para refatorar testes, ou escalar risco de segurança. Documente o contexto.
  • 2. Prepare justificativa com o framework: situação atual, complicação (por que é problema), resolução proposta e consequências de não agir.
  • 3. Apresente para colega simulando PO cético. Refine até a argumentação ser convincente sem jargão técnico. O argumento deve estar em linguagem de risco de negócio.
💡Dica: 'Precisamos corrigir porque é a prática certa' não convence. 'Se não corrigirmos, temos 40% de chance de incidente crítico que custará X horas de suporte' convence.
🟣 Sênior · Módulo 16

Quality Engineering vs. QA

A transição de papel que está redesenhando o mercado. Entender a diferença entre QA tradicional e Quality Engineering define como o sênior se posiciona e impacta uma organização.

🔄

De QA para Quality Engineer

QA tradicional: especialista em testes, foca em encontrar bugs, atua principalmente na fase de homologação, work is done quando os testes passam. Quality Engineer generalista de qualidade, embedded no time de produto, foca em prevenir defeitos em todo o SDLC, responsável pela estratégia de qualidade, work is done quando o time produz software de alta qualidade de forma sustentável. A diferença não é ferramental, é de mindset e escopo de responsabilidade.

🏋️ Exercícios Rápidos
  • Faça um diagnóstico honesto: em qual ponto do espectro QA-QE você está hoje? Liste evidências concretas.
  • Identifique 3 atividades que você poderia começar a fazer amanhã para se mover em direção ao papel de Quality Engineer.
🏗️

Quality Engineering na prática

O Quality Engineer atua em 4 frentes simultaneamente: Developer Enablement (ajuda devs a escreverem melhores testes, define padrões, faz pair testing), Pipeline Quality (dono da estratégia de CI/CD, quality gates, feedback rápido), Production Quality (monitora qualidade em produção, define SLOs, analisa incidentes), Team Learning (compartilha conhecimento, eleva o nível do time).

🏋️ Exercícios Rápidos
  • Para cada uma das 4 frentes, identifique uma ação concreta que você poderia implementar no seu time atual.
  • Calcule quanto do seu tempo semanal vai para cada frente. Onde está o desequilíbrio?
📊

Métricas de impacto do Quality Engineer

O QA mede testes executados e bugs encontrados. O Quality Engineer mede impacto no negócio: tempo de feedback (quanto tempo o dev espera para saber se quebrou algo?), escaped defect rate (% de bugs que chegam a produção), deployment frequency (qualidade habilita velocidade), MTTR (mean time to recovery), developer confidence (os devs confiam na suíte de testes?).

🏋️ Exercícios Rápidos
  • Defina suas métricas de Quality Engineer para o próximo trimestre. Para cada uma: baseline atual, meta e como vai medir.
🤝

Influência sem autoridade

O Quality Engineer raramente tem autoridade formal sobre devs e POs. Sua influência é técnica e relacional. Estratégias: data-driven advocacy (use métricas para justificar investimento em qualidade), quick wins visíveis (resolva um problema doloroso do time rapidamente), teaching, not gatekeeping (ensine boas práticas em vez de bloquear), alinhamento com objetivos de negócio (conecte qualidade com velocidade, não com processo).

🏋️ Exercícios Rápidos
  • Pense em um problema de qualidade atual no seu time. Como você argumentaria pela solução em termos de negócio (tempo, dinheiro, risco) em vez de termos técnicos?
🧪

Laboratório, Diagnóstico e Plano de Evolução para Quality Engineer

Avalie o estado atual do time e construa um roadmap de evolução concreto

1
Diagnóstico: onde seu time está no espectro QA-QE

Use o modelo de maturidade para identificar onde o time está e o que precisa mudar.

  • 1. Avalie seu time atual nas 4 dimensões usando escala 1-5: (1) Developer Enablement: os devs escrevem bons testes? O QA ajuda ativamente nisso? (2) Pipeline Quality: os testes bloqueiam deploys ruins? O feedback é rápido? (3) Production Quality: há monitoramento? O time reage a incidentes proativamente? (4) Team Learning: conhecimento de qualidade é compartilhado? Há tech talks, padrões documentados?
  • 2. Some os scores e posicione o time: 4-8 (QA Reativo), 9-13 (QA Proativo), 14-17 (Quality Engineering Básico), 18-20 (Quality Engineering Avançado).
  • 3. Para as duas dimensões com menor score, defina 2 ações concretas com: o que fazer, quem envolver, em quanto tempo e como medir o progresso.
  • 4. Apresente o diagnóstico para seu tech lead ou gerente com os dados e o plano de melhoria. Como eles reagiram?
💡 Dica: O diagnóstico é mais valioso quando feito com o time, não para o time. Facilite a sessão como um exercício colaborativo. Times que participam do diagnóstico são muito mais comprometidos com as ações de melhoria.
2
Construindo o caso de negócio para investimento em qualidade

Aprenda a traduzir melhorias de qualidade em linguagem financeira que diretores entendem.

  • 1. Calcule o custo atual de bugs em produção: estime o tempo médio de um incidente (detecção + investigação + fix + deploy + comunicação). Multiplique pelo custo/hora do time e pela frequência mensal.
  • 2. Calcule o custo de um bug encontrado em cada fase: requisito (1x), desenvolvimento (10x), QA (25x), produção (100x). Aplique esses multiplicadores ao seu baseline de bugs.
  • 3. Proponha um investimento específico (ex: implementar testes de contrato, reduzir flakiness, melhorar observabilidade) e estime a redução de custos esperada.
  • 4. Escreva um documento de 1 página no formato: Problema (com dados), Proposta (com esforço estimado), Retorno Esperado (com métrica de sucesso). Este é o documento que abre orçamento.
💡 Dica: Diretores não se importam com cobertura de código. Eles se importam com "quanto custa um bug em produção?" e "quanto economizamos prevenindo isso?". A habilidade de fazer essa tradução é o que diferencia um Quality Engineer que influencia decisões de um QA que executa tarefas.
3
Quality Engineering na prática: implementando uma iniciativa

Execute iniciativa de QE end-to-end e meça o impacto.

  • 1. Identifique área com dívida de qualidade: cobertura baixa, flaky tests, pipeline lento ou review sem critérios claros. Documente o estado atual com métricas.
  • 2. Defina iniciativa com: objetivo claro, métricas de sucesso, prazo de 4 semanas e responsabilidades. Execute sem tirar o time das entregas regulares.
  • 3. Compare estado atual com baseline. Quanto a métrica melhorou? Qual foi o esforço? Calcule o ROI: 10 minutos de CI economizados x 20 PRs por semana = 200 minutos de developer time por semana.
💡Dica: Quality Engineering sem métricas é só refactoring. A diferença está no ciclo: medir baseline, implementar, medir novamente, calcular impacto.
4
Influência sem autoridade: conduzindo mudanças culturais

Promova mudanças de qualidade sem autoridade formal.

  • 1. Identifique uma prática que quer introduzir mas que requer mudança de comportamento. Mapeie as resistências esperadas.
  • 2. Em vez de propor diretamente, conduza experimento de 2 sprints com quem se voluntariar. Meça o impacto com dados reais.
  • 3. Apresente os resultados para o time. Convide a expandir o experimento. Mudança cultural baseada em evidência tem mais chance de persistir do que baseada em mandato.
💡Dica: Influência sem autoridade começa com credibilidade, que vem de entregar resultados consistentes e de entender o contexto dos outros antes de propor mudanças.
🟣 Sênior · Módulo 17

FinOps de Testes: Qualidade com Eficiência de Custo

Em 2026, times de engenharia estão sob pressão crescente para reduzir custos de infraestrutura. O QA sênior entende o custo financeiro de cada decisão de teste e otimiza sem sacrificar qualidade.

💸

O custo real da sua suíte de testes

Cada minuto de CI/CD custa dinheiro. GitHub Actions cobra por minuto de execução em runners hospedados. BrowserStack, Sauce Labs e outros serviços de device farm cobram por hora de device. Uma suíte de 500 testes E2E rodando 3x por dia em 3 browsers em paralelo pode custar centenas de dólares por mês. O QA sênior sabe calcular esse custo e justificá-lo, ou reduzi-lo.

🏋️ Exercícios Rápidos
  • Calcule o custo mensal da sua suíte de testes: (minutos de CI por execução × execuções por dia × 30 dias × custo por minuto do runner).
  • Identifique os 20% de testes que consomem 80% do tempo de execução. Eles entregam valor proporcional?

Estratégias de otimização de pipeline

Técnicas para reduzir custo sem reduzir cobertura: test selection inteligente (rodar só testes impactados pelas mudanças), sharding eficiente (dividir otimamente entre runners), caching agressivo (node_modules, browser binaries, fixtures), runner self-hosted (máquinas próprias são mais baratas para uso intensivo), headless vs. headed (headless é mais rápido e barato).

🏋️ Exercícios Rápidos
  • Configure caching no GitHub Actions para node_modules e browsers do Playwright. Meça a economia de tempo.
  • Compare: quanto custa usar GitHub hosted runners vs. uma instância EC2 self-hosted para o seu volume de testes?
🎯

Pirâmide de custos x cobertura

A pirâmide de testes também é uma pirâmide de custos: testes unitários custam centavos, testes E2E custam reais. A estratégia FinOps: maximizar cobertura de unitários (rápidos, baratos), usar testes de componente e integração no meio (custo moderado, cobertura realista), e reservar E2E apenas para os fluxos críticos de negócio que justificam o custo. Cada E2E adicionado sem critério tem um preço.

🏋️ Exercícios Rápidos
  • Audite sua suíte E2E atual: cada teste justifica seu custo? Há testes E2E que poderiam ser substituídos por testes de componente com a mesma cobertura a 10% do custo?
📈

Relatório de eficiência de testes

Métricas de FinOps para QA: custo por teste (custo total / número de testes), custo por bug detectado (ROI da suíte), tempo médio de execução por tipo (unitário, integração, E2E), taxa de utilização de runners (runners ociosos custam dinheiro), flakiness cost (cada re-execução por flakiness tem custo real).

GitHub Actions AWS EC2 Self-hosted Spot Instances Buildkite CircleCI
🏋️ Exercícios Rápidos
  • Construa um dashboard simples de eficiência: custo mensal, bugs detectados pelo CI no mês, custo por bug. Apresente para o time.
🧪

Laboratório, Auditoria e otimização de custos de CI

Calcule o custo real da sua suíte e implemente otimizações mensuráveis

1
Auditoria de custos: calculando o ROI da sua suíte

Calcule o custo real da sua suíte de testes e o retorno sobre investimento.

  • 1. No GitHub Actions, acesse Billing & plans > Actions. Veja o consumo de minutos do mês. Se não tiver dados reais, use: 500 testes E2E × 3 min cada = 1500 min/execução × 10 execuções/dia × 22 dias = 330.000 min/mês × $0.008/min = $2.640/mês.
  • 2. Classifique sua suíte por tipo (unitário, integração, E2E) e meça o tempo médio de cada categoria. Construa uma tabela: tipo, quantidade, tempo total, custo estimado.
  • 3. Identifique os 10 testes mais lentos. Para cada um: quanto custa por mês? O que ele testa que não poderia ser testado de forma mais barata?
  • 4. Calcule o ROI: quantos bugs o CI detectou no último mês? Qual seria o custo desses bugs em produção (use o multiplicador 25x do módulo anterior)? O ROI justifica o custo?
💡 Dica: O ROI de testes raramente é negativo, o problema é que os custos são visíveis (fatura do GitHub) e os benefícios são invisíveis (bugs que não chegaram a produção). Aprenda a tornar os benefícios visíveis com a mesma precisão que os custos.
2
Implementando cache e self-hosted runner para reduzir custos

Implemente otimizações concretas e meça a redução de custo e tempo.

  • 1. Configure cache agressivo no GitHub Actions: node_modules com hash do package-lock.json, binários do Playwright com hash da versão, fixtures de teste.
  • 2. Meça o impacto: execute o pipeline sem cache, depois com cache. Qual foi a redução em minutos? Calcule a economia mensal projetada.
  • 3. Configure um runner self-hosted numa instância EC2 t3.medium (~$0.042/h). Compare: ao custo de $0.008/min do GitHub hosted, quantos minutos de CI pagam 1 hora de EC2? A partir de que volume o self-hosted fica mais barato?
  • 4. Documente suas descobertas num relatório de 1 página: custo antes, custo depois, economia mensal, tempo de payback do investimento.
💡 Dica: Instâncias EC2 Spot podem reduzir o custo do self-hosted runner em até 70% comparado ao On-Demand. Para workloads de CI que toleram interrupção (você pode simplesmente re-executar o pipeline), Spot é a escolha mais econômica.
3
Otimizando o pipeline sem perder cobertura

Analise e otimize o custo do pipeline mantendo a cobertura de risco.

  • 1. Mapeie o tempo de execução de cada stage: quais consomem mais minutos? Calcule o custo real por PR usando os dados de billing do GitHub Actions.
  • 2. Identifique otimizações: quais testes rodariam só na main (não em cada PR)? Quais podem ser paralelizados? Quais têm cobertura redundante?
  • 3. Implemente a otimização de maior ganho com menor risco. Meça: tempo antes e depois, custo mensal e se algum bug que a otimização teria deixado escapar.
💡Dica: Pipeline que custa 5x mais e não encontra mais bugs é desperdício. Pipeline que custa 0.5x e perdeu cobertura crítica é risco. A meta é máxima cobertura com mínimo custo.
4
Relatório de eficiência para gestão

Produza relatório que justifique o investimento em qualidade.

  • 1. Colete dados de custo dos últimos 3 meses: horas de QA, minutos de CI, horas de dev corrigindo bugs em QA vs. produção e horas de suporte. Converta em custo monetário.
  • 2. Calcule custo de bug em cada fase: correção em QA vs. correção em produção (suporte + correção + impacto). A diferença é o ROI do processo de qualidade.
  • 3. Produza relatório de 1 página para CTO: custo atual do processo de qualidade, bugs evitados (estimativa), ROI calculado e proposta de investimento adicional com ROI projetado.
💡Dica: O argumento mais forte para qualidade não é 'é a coisa certa', é 'o custo de não investir é X vezes maior'. Com dados, a conversa muda de opinião para negócio.
🟢 Júnior · Módulo 13

Introdução à Automação de Testes

Antes de escolher uma ferramenta, entenda o raciocínio por trás da automação: o que automatizar, como pensar cenários, onde encontrar locators e como avaliar uma API.

🤔

O que automatizar, e o que NÃO automatizar

Automatize fluxos estáveis, repetitivos e de alto risco. Não automatize testes exploratórios, UX subjetiva, cenários instáveis. Regra: se vai executar mais de 3 vezes, considere automatizar.

🏋️ Exercícios Rápidos
  • Pegue 10 casos manuais e classifique: "vale automatizar" ou "não vale". Justifique.
  • Calcule o ROI: execuções por mês, tempo de cada, em quantos meses o investimento se paga?
✍️

Como escrever bons cenários

Um bom cenário é independente, determinístico, focado e legível. Use Given / When / Then para estruturar o raciocínio.

🏋️ Exercícios Rápidos
  • Pegue um cenário grande e quebre em cenários independentes.
  • Reescreva 3 casos usando Given/When/Then.
🎯

Como encontrar bons locators

Hierarquia: data-testid / data-test (mais estável), aria-label / role, id único, CSS selector e por último XPath. Nunca use classes geradas dinamicamente.

🏋️ Exercícios Rápidos
  • No saucedemo.com, inspecione 5 elementos e escreva um locator para cada.
  • Use npx playwright codegen saucedemo.com e observe os locators sugeridos.
🔌

Como avaliar uma API antes de testar

Entenda o contrato: endpoint, método HTTP, headers, autenticação, body esperado, status codes. Use Postman para explorar manualmente antes de automatizar.

🏋️ Exercícios Rápidos
  • Acesse reqres.in no Postman: GET /users, POST /users, DELETE /users/2.
  • Documente: endpoint, método, headers, body, resposta esperada (sucesso e erro).
🗺️

O que testar em cada tipo de aplicação

Web SPA estados assíncronos, lazy loading. APIs REST contratos, autenticação, paginação. Mobile gestos, orientação, offline. SOAP XML, namespaces. GraphQL queries, mutations, schema.

🏋️ Exercícios Rápidos
  • Liste 5 riscos de um SPA que não existiriam em site server-side tradicional.
  • Compare o que testar em REST vs. GraphQL. Crie uma tabela com as diferenças.
🐳

Docker: o mínimo que o QA precisa saber

Docker é uma ferramenta que empacota uma aplicação com tudo que ela precisa para rodar: código, dependências e configurações. O resultado é um container: um ambiente isolado e reproduzível. Para QA, o valor é direto: chega de "funciona na minha máquina". Com Docker, o ambiente de teste é idêntico em todo computador e no CI.

Conceitos essenciais: imagem é o molde (como uma classe). container é a instância em execução (como um objeto). docker-compose.yml orquestra múltiplos containers, por exemplo: sua aplicação + banco de dados + serviço de e-mail.

🏋️ Exercícios Rápidos
  • Instale o Docker Desktop e execute: docker run hello-world. Leia a saída, ela explica o que aconteceu passo a passo.
  • Suba um banco de dados PostgreSQL em container: docker run -e POSTGRES_PASSWORD=senha -p 5432:5432 postgres. Conecte com DBeaver ou outro cliente. O banco existe só enquanto o container roda.
  • No projeto do time, abra o docker-compose.yml e identifique: quais serviços existem, em quais portas cada um roda e quais variáveis de ambiente são necessárias. Suba o ambiente com docker compose up -d e rode os testes.
  • Comandos essenciais para o dia a dia do QA: docker ps (containers rodando), docker logs nome-do-container (ver logs), docker exec -it nome bash (entrar no container), docker compose down (derrubar tudo).
🧪

Laboratório, Fundamentos de Automação

Solidifique o raciocínio antes de abrir qualquer IDE

1
Mapeando o que automatizar no Sauce Demo

Aplique os critérios e organize na pirâmide.

  • 1. Liste 20 casos de teste: login, produtos, carrinho, checkout, logout, filtros.
  • 2. Para cada: frequência, risco de regressão, estabilidade, tempo manual.
  • 3. Selecione os 8 mais candidatos e os 4 que não devem ser automatizados. Justifique.
  • 4. Organize na pirâmide: unitários, integração ou E2E?
💡 Dica: Saber justificar suas escolhas e dizer não para automações que não valem a pena é muito valorizado.
2
Explorando locators e APIs manualmente

Desenvolva o olhar clínico antes de automatizar.

  • 1. No Sauce Demo, mapeie locators de todos os elementos interativos. Tabela: elemento, data-testid, CSS, XPath.
  • 2. No Postman, execute cada endpoint do reqres.in. Documente status code, tempo, estrutura JSON.
  • 3. Provoque erros: body inválido, header faltando, ID inexistente. Os erros são semânticos?
  • 4. Escreva 3 cenários Given/When/Then para a API e 3 para o frontend.
💡 Dica: A exploração manual revela casos de borda que nenhuma documentação menciona.
3
Escrevendo bons cenários de teste

Pratique a escrita de cenários claros, independentes e verificáveis.

  • 1. Para o login do Sauce Demo, escreva 5 cenários: sucesso, usuário bloqueado, senha incorreta, campo vazio e usuário não cadastrado. Cada um com pré-condição, passos e resultado esperado específico.
  • 2. Revise com critério INVEST adaptado: são Independentes? São Verificáveis (critério claro de passa/falha)? São Específicos (testam uma coisa só)?
  • 3. Converta dois cenários para Gherkin (Given/When/Then). Mostre para alguém não técnico: entenderia o que está sendo testado sem explicação?
💡Dica: Cenários bem escritos valem mais do que código de automação mal estruturado. Se o cenário não é claro para um humano, a automação dele também não será.
4
Encontrando locators robustos

Pratique a escolha de seletores que resistem a mudanças de UI.

  • 1. No Sauce Demo, inspecione o botão 'Add to cart' com DevTools. Liste todos os atributos disponíveis: id, class, data-*, aria-label, text. Qual seria o locator mais robusto?
  • 2. Simule mudança de UI: altere a classe CSS do botão no DevTools. Qual dos locators listados quebraria? Qual sobreviveria?
  • 3. Para 5 elementos, escolha o melhor locator seguindo a ordem: data-testid > aria-label > texto visível > id > class. Documente a escolha e justificativa.
💡Dica: O locator mais robusto muda apenas quando o comportamento do elemento muda, não quando alguém refatora o CSS. data-testid é o padrão da indústria por isso.
5
Avaliando uma API antes de automatizar

Explore manualmente antes de qualquer linha de automação.

  • 1. Use Postman para explorar reqres.in por 20 minutos: quais endpoints existem, quais métodos HTTP aceitam, quais parâmetros são obrigatórios? Documente numa tabela.
  • 2. Identifique: quais endpoints retornam dados sensíveis? Existe paginação? Os erros são descritivos? A API segue convenções REST?
  • 3. Escreva um plano de teste de API de 1 página: endpoints testados, cenários (happy path + erros) e critério de aceite para cada um. Esse documento deve existir antes de qualquer automação.
💡Dica: Automatizar uma API que você não entende é receita para automação frágil. 30 minutos de exploração manual economizam horas de debug depois.
6
Docker: primeiros passos no ambiente de teste

Configure um ambiente de teste com Docker e valide a reproduzibilidade.

  • 1. Instale o Docker Desktop. Execute docker run -d -p 80:80 nginx e acesse localhost. Você subiu um servidor web em segundos sem instalar nada no sistema.
  • 2. Crie um docker-compose.yml com dois serviços: uma app Node.js e um PostgreSQL. Suba com docker compose up -d e verifique com docker ps.
  • 3. Acesse o container PostgreSQL com docker exec -it, crie uma tabela de teste. Destrua com docker compose down e suba novamente: a tabela ainda existe? Por quê?
💡Dica: Containers são efêmeros por padrão. Dados que precisam persistir precisam de volumes. Dados de teste geralmente não precisam, e isso é uma vantagem.
📖 Referência Rápida

Glossário de QA

Todos os termos que você vai encontrar no dia a dia de QA, organizados por categoria e com definições em português. Use a busca para encontrar qualquer termo rapidamente.

93 termos
📌Fundamentos de Teste
Baseline
Versão estável e aprovada de um artefato (código, documentação) que serve como referência para comparações futuras.
Bug
Um defeito no software que causa um comportamento inesperado ou incorreto. Tecnicamente, 'bug' é o defeito no código; 'falha' é o sintoma observado pelo usuário.
Caso de Teste
Conjunto de condições e passos que verificam se uma funcionalidade específica funciona conforme o esperado. Inclui pré-condições, passos, dados de entrada e resultado esperado.
Cenário de Teste
Descrição de alto nível de uma situação a ser testada, geralmente em linguagem de negócio. Ex: 'Usuário faz login com credenciais válidas'.
Cobertura de Testes
Medida que indica quanto do sistema foi exercitado pelos testes. Pode ser por requisitos, linhas de código, branches, etc.
Critério de Aceite
Condições que devem ser satisfeitas para que uma história de usuário ou funcionalidade seja considerada completa. Define o 'pronto' do QA.
Defeito
Imperfeição ou problema num artefato de software (código, documentação, configuração) que pode causar falha quando executado.
Erro
Ação humana que produz um resultado incorreto — geralmente o engano do desenvolvedor que originou o defeito.
Evidence
Evidência de execução de um teste — screenshot, log, vídeo ou relatório que comprova que o teste foi executado e qual foi o resultado.
Falha
O comportamento incorreto observado quando o sistema executa um defeito. É o sintoma visível do bug.
Massa de Dados
Conjunto de dados usados para executar testes. Pode ser gerado, importado ou anonimizado a partir de dados reais de produção.
Plano de Testes
Documento que descreve o escopo, abordagem, recursos, cronograma e critérios de entrada e saída de uma atividade de testes.
Rastreabilidade
Capacidade de vincular casos de teste a requisitos, histórias de usuário ou bugs. Garante que tudo que precisa ser testado está coberto.
Suite de Testes
Agrupamento lógico de casos de teste relacionados, normalmente por funcionalidade, módulo ou tipo de teste.
🗂️Tipos e Abordagens
Ad-hoc
Teste informal e não documentado, baseado na intuição do testador. Útil para investigação rápida, não substitui uma estratégia.
Caixa Branca
Abordagem onde o testador tem acesso ao código-fonte e testa caminhos internos, branches e condições lógicas.
Caixa Cinza
Combinação das duas abordagens: o testador tem acesso parcial ao sistema (logs, banco, DevTools) mas não ao código completo.
Caixa Preta
Abordagem de teste onde o testador não tem acesso ao código-fonte. Testa apenas entradas e saídas, como um usuário final.
Re-teste
Execução de um caso de teste específico após a correção de um bug, para confirmar que o defeito foi resolvido.
Regressão
Re-execução de testes existentes para garantir que mudanças recentes não quebraram funcionalidades que já funcionavam.
Sanity Test
Validação focada que verifica se uma correção ou mudança específica funcionou sem quebrar o entorno imediato.
Smoke Test
Suite enxuta (5 a 10 testes) que verifica se o build está minimamente funcional antes de testar em profundidade.
Teste Exploratório
Abordagem onde design e execução acontecem simultaneamente, sem script pré-definido. O testador aprende o sistema enquanto testa.
Teste Funcional
Verifica o que o sistema faz — se as funcionalidades atendem aos requisitos especificados.
Teste Não-Funcional
Verifica como o sistema se comporta — performance, segurança, usabilidade, compatibilidade, acessibilidade.
Teste Unitário
Testa uma unidade isolada de código (função, método) sem dependências externas. Responsabilidade primária do desenvolvedor.
Teste de Integração
Verifica a comunicação entre dois ou mais componentes do sistema — ex: API + banco de dados.
Teste de Sistema
Testa o software completo como um todo, simulando o comportamento real em ambiente controlado.
UAT
User Acceptance Testing — validação feita pelo usuário final ou representante do negócio para confirmar que o sistema atende aos requisitos.
⚙️Processos e Metodologias
ATDD
Acceptance Test-Driven Development — os critérios de aceite são escritos como testes automatizados antes do desenvolvimento começar.
BDD
Behavior-Driven Development — extensão do TDD que usa linguagem natural (Gherkin) para descrever comportamentos esperados, facilitando a colaboração entre negócio e tecnologia.
Definition of Done
Conjunto de critérios que devem ser atendidos para que uma história de usuário seja considerada concluída. Inclui testes, revisão de código, documentação, etc.
Definition of Ready
Critérios que uma história precisa atender antes de entrar em desenvolvimento — refinada, estimada, com critérios de aceite definidos.
Refinamento
Cerimônia ágil onde as histórias futuras são detalhadas, estimadas e preparadas para entrar em desenvolvimento.
Review
Cerimônia ágil onde o time demonstra o que foi entregue na sprint para os stakeholders, validando o incremento do produto.
Shift-Left
Estratégia de mover as atividades de teste para mais cedo no ciclo de desenvolvimento, reduzindo o custo de correção de defeitos.
Shift-Right
Estratégia de testar em produção ou ambientes próximos à produção, usando monitoramento, feature flags e canary releases.
TDD
Test-Driven Development — metodologia onde os testes são escritos antes do código de produção, guiando o design da implementação.
Three Amigos
Reunião entre PO, dev e QA para discutir uma história antes do desenvolvimento, alinhando entendimento e identificando ambiguidades.
🤖Automação
Assertion
Verificação programática que valida se um resultado obtido corresponde ao esperado. É o 'então' do Given/When/Then.
CI/CD
Continuous Integration / Continuous Delivery — prática de integrar código frequentemente e automatizar build, testes e deploy.
Contract Testing
Técnica que verifica se dois serviços concordam com o formato da comunicação entre eles, sem precisar subi-los juntos.
Data-Driven Testing
Abordagem onde o mesmo caso de teste é executado com múltiplos conjuntos de dados, separando lógica de teste dos dados de entrada.
False Negative
Teste que passa mesmo quando existe um defeito no sistema. O cenário mais perigoso — dá falsa sensação de segurança.
False Positive
Teste que reporta falha quando o sistema está correto. Indica problema no próprio teste, não no software.
Flaky Test
Teste que passa e falha de forma intermitente sem mudança no código, geralmente por dependência de timing, estado compartilhado ou recursos externos.
Framework
Estrutura base que organiza e suporta a automação de testes — define padrões, abstrações e ferramentas que compõem a solução.
Headless
Execução de testes de browser sem interface gráfica visível. Mais rápido e adequado para ambientes de CI.
Keyword-Driven
Abordagem onde os testes são descritos por palavras-chave em linguagem natural (ex: 'Fazer Login', 'Verificar Título'), implementadas como funções reutilizáveis.
Locator
Estratégia para identificar elementos na interface — CSS selector, XPath, ID, data-testid. A escolha do locator impacta diretamente a estabilidade dos testes.
Mock
Substituto de uma dependência real que simula comportamentos específicos durante os testes, controlando as respostas recebidas.
Page Object Model
Padrão de design que encapsula os elementos e ações de cada página em classes separadas, tornando os testes mais legíveis e fáceis de manter.
Pipeline
Sequência automatizada de etapas (build, teste, deploy) executada a cada mudança de código. Garante que defeitos sejam detectados cedo.
Service Virtualization
Simulação de dependências externas (APIs, mainframes, serviços de pagamento) para testes sem necessidade da dependência real.
Spy
Wrapper em torno de uma dependência real que registra chamadas sem substituir o comportamento original.
Stub
Similar ao mock, mas focado em fornecer respostas pré-definidas sem verificar como foi chamado. Usado para isolar dependências.
Performance
Latência
Tempo entre o envio de uma requisição e o recebimento da resposta. Diretamente ligada à experiência do usuário.
Load Test
Teste que simula a carga esperada em produção para validar se o sistema se comporta dentro dos critérios de aceite.
Percentil
Medida estatística usada em performance. p95 = 95% das requisições responderam em X ms ou menos. Mais representativa que a média.
Ramp-up
Período de aumento gradual de carga num teste de performance, simulando o crescimento orgânico de usuários.
SLA
Service Level Agreement — acordo formal que define os níveis mínimos de serviço esperados, incluindo disponibilidade e tempo de resposta.
SLO
Service Level Objective — meta interna de nível de serviço, geralmente mais rigorosa que o SLA. Ex: 'p99 < 500ms'.
Soak Test
Teste de carga sustentada por horas para identificar degradação gradual, memory leaks ou comportamento instável ao longo do tempo.
Spike Test
Teste que simula um pico súbito e intenso de carga, como o que ocorre em campanhas de marketing ou Black Friday.
Stress Test
Teste que ultrapassa os limites do sistema para descobrir o ponto de ruptura e como ele se recupera.
Throughput
Número de requisições processadas por unidade de tempo (req/s). Mede a capacidade do sistema.
Virtual User
Simulação de um usuário real num teste de carga. Cada VU executa o cenário de forma independente e concorrente.
🔌API e Técnico
Endpoint
URL específica de uma API que representa um recurso ou operação. Ex: GET /api/usuarios/123.
GraphQL
Linguagem de consulta para APIs onde o cliente define exatamente quais dados quer receber, diferente do REST que retorna estruturas fixas.
HTTP
HyperText Transfer Protocol — protocolo de comunicação base da web. QA precisa entender métodos (GET, POST, PUT, DELETE), status codes e headers.
Header
Metadados enviados junto com uma requisição ou resposta HTTP. Incluem informações como tipo de conteúdo, autenticação e cache.
JSON
JavaScript Object Notation — formato leve de troca de dados, amplamente usado em APIs REST. Legível por humanos e fácil de parsear.
OAuth
Protocolo de autorização que permite que aplicações acessem recursos em nome do usuário sem expor suas credenciais.
Payload
Corpo (body) de uma requisição ou resposta HTTP, geralmente em JSON ou XML. Contém os dados enviados ou recebidos.
REST
Representational State Transfer — estilo arquitetural para APIs que usa HTTP e opera sobre recursos identificados por URLs.
SOAP
Simple Object Access Protocol — protocolo mais antigo de comunicação entre serviços, baseado em XML. Comum em sistemas legados e bancários.
Schema
Definição formal da estrutura esperada de um dado — campos, tipos, obrigatoriedade. Usado para validar requests e responses.
Status Code
Código numérico na resposta HTTP que indica o resultado da requisição. 2xx = sucesso, 3xx = redirecionamento, 4xx = erro do cliente, 5xx = erro do servidor.
Swagger/OpenAPI
Especificação padrão para documentar APIs REST. Gera documentação interativa e pode ser usada para gerar testes automaticamente.
Token
Credencial de acesso gerada após autenticação, enviada em headers subsequentes para identificar e autorizar o usuário.
Webhook
Mecanismo onde um sistema notifica outro via HTTP quando um evento ocorre, em vez de o receptor fazer polling. Ex: notificação de pagamento aprovado.
📊Gestão e Qualidade
Acceptance Criteria
Sinônimo de Critério de Aceite. Condições definidas pelo produto que o software deve satisfazer para ser considerado pronto.
Bug Triage
Processo de revisão e priorização de bugs reportados, geralmente feito com QA, dev e produto para decidir o que corrigir e quando.
Débito Técnico
Custo acumulado de decisões técnicas subótimas tomadas para entregar mais rápido. Inclui falta de testes, código legado e documentação defasada.
KPI de Qualidade
Indicadores-chave para medir a saúde do processo de qualidade: taxa de defeitos escapados, cobertura de testes, tempo de ciclo de bug, etc.
MTTF
Mean Time To Failure — tempo médio entre falhas. Indica a confiabilidade do sistema.
MTTR
Mean Time To Restore — tempo médio para restaurar o serviço após uma falha. Métrica de resiliência operacional.
Prioridade
Urgência de correção do bug do ponto de vista do negócio. Um bug pode ser de alta severidade mas baixa prioridade (afeta funcionalidade pouco usada).
Quality Gate
Critério automático que bloqueia o avanço no pipeline se métricas de qualidade não forem atendidas — cobertura mínima, zero bugs críticos, etc.
Root Cause Analysis
Investigação para identificar a causa raiz de um defeito, não apenas o sintoma. Evita que o mesmo problema reapareça.
Severidade
Impacto técnico de um bug no sistema — quão crítico é o problema. Ex: Crítico (sistema parado), Alto, Médio, Baixo.
Shift-Right
Estratégia de testar em produção usando monitoramento, feature flags e observabilidade para detectar problemas que só aparecem em escala real.
Test Coverage
Percentual do sistema coberto pelos testes. Pode ser medido por requisitos, linhas de código (code coverage) ou funcionalidades.
🟢 Júnior · Módulo Final

Mentalidade QA: seu papel no time

Ser QA vai muito além de executar testes. É uma postura, uma forma de pensar que influencia o time inteiro. Mesmo como júnior, você já pode começar a cultivar essa mentalidade e fazer a diferença.

Princípio fundamental

Qualidade não é responsabilidade de uma pessoa, é uma mentalidade compartilhada pelo time. O QA júnior que entende isso deixa de ser "aquele que encontra bugs no final" e passa a ser "aquele que ajuda o time a não criar bugs desde o início".

🤝

QA em times multidisciplinares

Num time ágil, o QA trabalha lado a lado com devs, designers, POs e stakeholders. Seu papel não é fiscalizar, é colaborar. Isso significa: participar das cerimônias (planning, refinement, daily) com olhar crítico, fazer perguntas que ninguém mais faz ("E se o usuário fizer X?"), e ser a voz do usuário dentro do time.

🏋️ Exercícios Rápidos
  • Na próxima daily do seu time (ou simulada), anote quantas vezes você fez uma pergunta de qualidade. Faça pelo menos uma por dia.
  • No planejamento de uma sprint, identifique uma história que tem critérios de aceitação vagos. Pergunte: "Como vamos saber que isso está pronto?"
  • Apresente-se para um dev do time como parceiro, não como revisor. Proponha fazer uma sessão de pair testing juntos.
📋

Qualidade começa na análise

O bug mais barato é o que nunca foi desenvolvido. Como júnior, você pode contribuir já na fase de análise: lendo user stories com olhar crítico, identificando cenários que o PO não pensou, e sugerindo critérios de aceitação mais claros antes que o código seja escrito. Uma pergunta no refinement pode evitar dias de retrabalho.

🏋️ Exercícios Rápidos
  • Para a próxima história do backlog que você tiver acesso, leia e escreva 3 perguntas que o dev ou o PO não fizeram.
  • Compare o esforço de responder uma pergunta no refinamento vs. corrigir um bug em produção. Como você apresentaria esse argumento para o time?
⌨️

Parceria com desenvolvimento

O dev não é seu adversário, é seu parceiro. Quanto mais cedo o QA e o dev conversam, menos retrabalho existe. Práticas que fortalecem essa parceria: comunicar bugs com empatia e clareza (descreva o problema, não culpe a pessoa), celebrar quando um bug é encontrado cedo, e propor pair testing para features complexas.

🏋️ Exercícios Rápidos
  • Da próxima vez que encontrar um bug, experimente falar com o dev antes de abrir o ticket. Mostre o problema, pergunte se ele consegue reproduzir. Observe a diferença na receptividade.
  • Escreva um bug report onde o título começa com o comportamento observado, não com uma acusação. Compare: "Login quebrado" vs. "Usuário não consegue logar com e-mail em maiúsculas".
🚀

Da entrega até a produção

O QA júnior tende a pensar que seu trabalho termina quando os testes passam. Mas a qualidade continua após o deploy: será que a funcionalidade chegou corretamente em produção? Os usuários estão conseguindo usar? Há erros no Sentry? Cultivar o hábito de acompanhar o que vai para produção é o primeiro passo para pensar em qualidade de ponta a ponta.

🏋️ Exercícios Rápidos
  • Após o próximo deploy da sua equipe, acesse a ferramenta de monitoramento (Sentry, Datadog, ou os logs) e verifique se há novos erros relacionados à feature que você testou.
  • Converse com o time sobre como vocês sabem que uma feature está funcionando em produção. Se a resposta for "não sabemos", você encontrou uma oportunidade de melhoria.
🎯

Reconhecendo o Risco Antes de Testar

Testar tudo com a mesma intensidade é impossível. Antes de começar, pergunte: o que acontece com o usuário se isso falhar? É um fluxo central ou um caso raro? Já vimos bugs aqui antes? As respostas definem onde concentrar esforço.

🏋️ Exercícios Rápidos
  • Na próxima sprint, classifique cada item como risco alto, médio ou baixo antes de testar. Comece pelos de alto risco.
  • Pergunte ao dev: "qual parte dessa mudança foi mais complicada de implementar?" Essa resposta revela onde o risco está.
  • Ao longo de 3 sprints, anote quais módulos geraram mais bugs. Use isso para calibrar seu julgamento.
🧪

Laboratório, Mapa de Influência do QA Júnior

Exercícios para começar a cultivar a mentalidade QA no seu time

1
Mapeando onde a qualidade pode melhorar no seu time

Antes de influenciar, você precisa enxergar. Faça um diagnóstico honesto do ciclo de qualidade do seu time.

  • 1. Responda por escrito: (1) O QA participa do refinamento/planning ou só recebe o trabalho pronto? (2) Os bugs são comunicados com empatia ou geram conflito? (3) Como o time sabe que algo está funcionando em produção?
  • 2. Para cada resposta, classifique: Está bom, Pode melhorar ou Não existe ainda.
  • 3. Escolha um ponto "Pode melhorar" e escreva uma proposta de mudança pequena e concreta. Ex: "Poderia participar dos últimos 15 minutos do refinement para fazer perguntas de qualidade."
  • 4. Apresente a proposta para o tech lead ou PO como uma sugestão de melhoria, não como uma crítica. Observe a reação e ajuste a abordagem se necessário.
💡 Dica: Comece pelas mudanças mais fáceis e de maior impacto visível. Quando o time perceber o valor, a abertura para mudanças maiores aumenta naturalmente. Pequenas vitórias constroem credibilidade.
2
Sua primeira contribuição na fase de análise

Pratique o papel do QA como parceiro na análise, não apenas como executor de testes.

  • 1. Pegue uma user story do backlog (real ou fictícia). Leia com cuidado e escreva: o que está claro, o que está vago e quais cenários estão faltando.
  • 2. Formule pelo menos 5 perguntas que você faria numa sessão de refinamento. Foque em: comportamentos de borda, mensagens de erro, permissões de usuário e comportamento em falhas.
  • 3. Para cada pergunta, escreva o cenário de teste que surgiu dela. Quantos casos de teste você gerou só fazendo boas perguntas?
  • 4. Compartilhe sua análise com alguém do time e peça feedback. As perguntas foram úteis? Alguma era óbvia demais ou de menos?
💡 Dica: As melhores perguntas de QA na análise começam com "E se...": "E se o usuário não tiver conexão?", "E se o campo tiver 500 caracteres?", "E se dois usuários fizerem isso ao mesmo tempo?". Cada "E se" é um potencial bug prevenido.
3
Parceria com desenvolvimento

Pratique comunicação produtiva de bugs com o dev.

  • 1. Encontre um bug no Sauce Demo. Escreva uma mensagem de Slack para o dev: descreva objetivamente, inclua evidência e pergunte se precisa de mais detalhes para reproduzir.
  • 2. Reescreva o mesmo bug em três tons: agressivo, neutro e colaborativo. Qual gera melhor resultado?
  • 3. Identifique um momento em que o QA pode ajudar o dev antes do código existir. Escreva perguntas que faria no refinamento para prevenir o bug encontrado.
💡Dica: O QA que os devs querem por perto facilita a vida deles. A forma como você comunica um bug é tão importante quanto o bug em si.
4
Da entrega ao monitoramento

Trace o caminho de uma feature do código à produção.

  • 1. Para um botão de favoritar, mapeie cada etapa: refinamento, dev, code review, QA, staging, deploy, produção, monitoramento. Em quais o QA deve estar presente?
  • 2. Identifique em qual etapa bug de lógica de negócio, de performance e de segurança são mais baratos de encontrar. O custo muda conforme a etapa.
  • 3. Proponha um checklist de saída para cada etapa onde o QA atua: o que precisa estar verdadeiro para avançar. Esse checklist é a base de um DoD orientado a qualidade.
💡Dica: QA que só testa no final é um gargalo. QA que atua em cada etapa é um multiplicador. A diferença está na mentalidade, não na senioridade.
5
Reconhecendo risco antes de testar

Treine julgamento de risco com histórias reais de sprint.

  • 1. Pegue 5 histórias do backlog (ou crie fictícias). Para cada uma: qual impacto se falhar, é fluxo crítico ou secundário, já teve bugs nessa área antes?
  • 2. Atribua prioridade de teste (Alta, Média, Baixa). Compare com a prioridade de negócio do PO. Onde diverge? Por quê?
  • 3. Com 50% do tempo disponível, quais histórias cobriria completamente, parcialmente e deixaria para regressão automatizada? Documente e apresente ao time.
💡Dica: Risco não é só probabilidade de falha, é probabilidade vezes impacto. Funcionalidade pouco usada que falha silenciosamente pode ser mais crítica que outra que falha com mensagem clara.
📖 Referência Rápida

Glossário de QA

Todos os termos que você vai encontrar no dia a dia de QA, organizados por categoria e com definições em português. Use a busca para encontrar qualquer termo rapidamente.

93 termos
📌Fundamentos de Teste
Baseline
Versão estável e aprovada de um artefato (código, documentação) que serve como referência para comparações futuras.
Bug
Um defeito no software que causa um comportamento inesperado ou incorreto. Tecnicamente, 'bug' é o defeito no código; 'falha' é o sintoma observado pelo usuário.
Caso de Teste
Conjunto de condições e passos que verificam se uma funcionalidade específica funciona conforme o esperado. Inclui pré-condições, passos, dados de entrada e resultado esperado.
Cenário de Teste
Descrição de alto nível de uma situação a ser testada, geralmente em linguagem de negócio. Ex: 'Usuário faz login com credenciais válidas'.
Cobertura de Testes
Medida que indica quanto do sistema foi exercitado pelos testes. Pode ser por requisitos, linhas de código, branches, etc.
Critério de Aceite
Condições que devem ser satisfeitas para que uma história de usuário ou funcionalidade seja considerada completa. Define o 'pronto' do QA.
Defeito
Imperfeição ou problema num artefato de software (código, documentação, configuração) que pode causar falha quando executado.
Erro
Ação humana que produz um resultado incorreto — geralmente o engano do desenvolvedor que originou o defeito.
Evidence
Evidência de execução de um teste — screenshot, log, vídeo ou relatório que comprova que o teste foi executado e qual foi o resultado.
Falha
O comportamento incorreto observado quando o sistema executa um defeito. É o sintoma visível do bug.
Massa de Dados
Conjunto de dados usados para executar testes. Pode ser gerado, importado ou anonimizado a partir de dados reais de produção.
Plano de Testes
Documento que descreve o escopo, abordagem, recursos, cronograma e critérios de entrada e saída de uma atividade de testes.
Rastreabilidade
Capacidade de vincular casos de teste a requisitos, histórias de usuário ou bugs. Garante que tudo que precisa ser testado está coberto.
Suite de Testes
Agrupamento lógico de casos de teste relacionados, normalmente por funcionalidade, módulo ou tipo de teste.
🗂️Tipos e Abordagens
Ad-hoc
Teste informal e não documentado, baseado na intuição do testador. Útil para investigação rápida, não substitui uma estratégia.
Caixa Branca
Abordagem onde o testador tem acesso ao código-fonte e testa caminhos internos, branches e condições lógicas.
Caixa Cinza
Combinação das duas abordagens: o testador tem acesso parcial ao sistema (logs, banco, DevTools) mas não ao código completo.
Caixa Preta
Abordagem de teste onde o testador não tem acesso ao código-fonte. Testa apenas entradas e saídas, como um usuário final.
Re-teste
Execução de um caso de teste específico após a correção de um bug, para confirmar que o defeito foi resolvido.
Regressão
Re-execução de testes existentes para garantir que mudanças recentes não quebraram funcionalidades que já funcionavam.
Sanity Test
Validação focada que verifica se uma correção ou mudança específica funcionou sem quebrar o entorno imediato.
Smoke Test
Suite enxuta (5 a 10 testes) que verifica se o build está minimamente funcional antes de testar em profundidade.
Teste Exploratório
Abordagem onde design e execução acontecem simultaneamente, sem script pré-definido. O testador aprende o sistema enquanto testa.
Teste Funcional
Verifica o que o sistema faz — se as funcionalidades atendem aos requisitos especificados.
Teste Não-Funcional
Verifica como o sistema se comporta — performance, segurança, usabilidade, compatibilidade, acessibilidade.
Teste Unitário
Testa uma unidade isolada de código (função, método) sem dependências externas. Responsabilidade primária do desenvolvedor.
Teste de Integração
Verifica a comunicação entre dois ou mais componentes do sistema — ex: API + banco de dados.
Teste de Sistema
Testa o software completo como um todo, simulando o comportamento real em ambiente controlado.
UAT
User Acceptance Testing — validação feita pelo usuário final ou representante do negócio para confirmar que o sistema atende aos requisitos.
⚙️Processos e Metodologias
ATDD
Acceptance Test-Driven Development — os critérios de aceite são escritos como testes automatizados antes do desenvolvimento começar.
BDD
Behavior-Driven Development — extensão do TDD que usa linguagem natural (Gherkin) para descrever comportamentos esperados, facilitando a colaboração entre negócio e tecnologia.
Definition of Done
Conjunto de critérios que devem ser atendidos para que uma história de usuário seja considerada concluída. Inclui testes, revisão de código, documentação, etc.
Definition of Ready
Critérios que uma história precisa atender antes de entrar em desenvolvimento — refinada, estimada, com critérios de aceite definidos.
Refinamento
Cerimônia ágil onde as histórias futuras são detalhadas, estimadas e preparadas para entrar em desenvolvimento.
Review
Cerimônia ágil onde o time demonstra o que foi entregue na sprint para os stakeholders, validando o incremento do produto.
Shift-Left
Estratégia de mover as atividades de teste para mais cedo no ciclo de desenvolvimento, reduzindo o custo de correção de defeitos.
Shift-Right
Estratégia de testar em produção ou ambientes próximos à produção, usando monitoramento, feature flags e canary releases.
TDD
Test-Driven Development — metodologia onde os testes são escritos antes do código de produção, guiando o design da implementação.
Three Amigos
Reunião entre PO, dev e QA para discutir uma história antes do desenvolvimento, alinhando entendimento e identificando ambiguidades.
🤖Automação
Assertion
Verificação programática que valida se um resultado obtido corresponde ao esperado. É o 'então' do Given/When/Then.
CI/CD
Continuous Integration / Continuous Delivery — prática de integrar código frequentemente e automatizar build, testes e deploy.
Contract Testing
Técnica que verifica se dois serviços concordam com o formato da comunicação entre eles, sem precisar subi-los juntos.
Data-Driven Testing
Abordagem onde o mesmo caso de teste é executado com múltiplos conjuntos de dados, separando lógica de teste dos dados de entrada.
False Negative
Teste que passa mesmo quando existe um defeito no sistema. O cenário mais perigoso — dá falsa sensação de segurança.
False Positive
Teste que reporta falha quando o sistema está correto. Indica problema no próprio teste, não no software.
Flaky Test
Teste que passa e falha de forma intermitente sem mudança no código, geralmente por dependência de timing, estado compartilhado ou recursos externos.
Framework
Estrutura base que organiza e suporta a automação de testes — define padrões, abstrações e ferramentas que compõem a solução.
Headless
Execução de testes de browser sem interface gráfica visível. Mais rápido e adequado para ambientes de CI.
Keyword-Driven
Abordagem onde os testes são descritos por palavras-chave em linguagem natural (ex: 'Fazer Login', 'Verificar Título'), implementadas como funções reutilizáveis.
Locator
Estratégia para identificar elementos na interface — CSS selector, XPath, ID, data-testid. A escolha do locator impacta diretamente a estabilidade dos testes.
Mock
Substituto de uma dependência real que simula comportamentos específicos durante os testes, controlando as respostas recebidas.
Page Object Model
Padrão de design que encapsula os elementos e ações de cada página em classes separadas, tornando os testes mais legíveis e fáceis de manter.
Pipeline
Sequência automatizada de etapas (build, teste, deploy) executada a cada mudança de código. Garante que defeitos sejam detectados cedo.
Service Virtualization
Simulação de dependências externas (APIs, mainframes, serviços de pagamento) para testes sem necessidade da dependência real.
Spy
Wrapper em torno de uma dependência real que registra chamadas sem substituir o comportamento original.
Stub
Similar ao mock, mas focado em fornecer respostas pré-definidas sem verificar como foi chamado. Usado para isolar dependências.
Performance
Latência
Tempo entre o envio de uma requisição e o recebimento da resposta. Diretamente ligada à experiência do usuário.
Load Test
Teste que simula a carga esperada em produção para validar se o sistema se comporta dentro dos critérios de aceite.
Percentil
Medida estatística usada em performance. p95 = 95% das requisições responderam em X ms ou menos. Mais representativa que a média.
Ramp-up
Período de aumento gradual de carga num teste de performance, simulando o crescimento orgânico de usuários.
SLA
Service Level Agreement — acordo formal que define os níveis mínimos de serviço esperados, incluindo disponibilidade e tempo de resposta.
SLO
Service Level Objective — meta interna de nível de serviço, geralmente mais rigorosa que o SLA. Ex: 'p99 < 500ms'.
Soak Test
Teste de carga sustentada por horas para identificar degradação gradual, memory leaks ou comportamento instável ao longo do tempo.
Spike Test
Teste que simula um pico súbito e intenso de carga, como o que ocorre em campanhas de marketing ou Black Friday.
Stress Test
Teste que ultrapassa os limites do sistema para descobrir o ponto de ruptura e como ele se recupera.
Throughput
Número de requisições processadas por unidade de tempo (req/s). Mede a capacidade do sistema.
Virtual User
Simulação de um usuário real num teste de carga. Cada VU executa o cenário de forma independente e concorrente.
🔌API e Técnico
Endpoint
URL específica de uma API que representa um recurso ou operação. Ex: GET /api/usuarios/123.
GraphQL
Linguagem de consulta para APIs onde o cliente define exatamente quais dados quer receber, diferente do REST que retorna estruturas fixas.
HTTP
HyperText Transfer Protocol — protocolo de comunicação base da web. QA precisa entender métodos (GET, POST, PUT, DELETE), status codes e headers.
Header
Metadados enviados junto com uma requisição ou resposta HTTP. Incluem informações como tipo de conteúdo, autenticação e cache.
JSON
JavaScript Object Notation — formato leve de troca de dados, amplamente usado em APIs REST. Legível por humanos e fácil de parsear.
OAuth
Protocolo de autorização que permite que aplicações acessem recursos em nome do usuário sem expor suas credenciais.
Payload
Corpo (body) de uma requisição ou resposta HTTP, geralmente em JSON ou XML. Contém os dados enviados ou recebidos.
REST
Representational State Transfer — estilo arquitetural para APIs que usa HTTP e opera sobre recursos identificados por URLs.
SOAP
Simple Object Access Protocol — protocolo mais antigo de comunicação entre serviços, baseado em XML. Comum em sistemas legados e bancários.
Schema
Definição formal da estrutura esperada de um dado — campos, tipos, obrigatoriedade. Usado para validar requests e responses.
Status Code
Código numérico na resposta HTTP que indica o resultado da requisição. 2xx = sucesso, 3xx = redirecionamento, 4xx = erro do cliente, 5xx = erro do servidor.
Swagger/OpenAPI
Especificação padrão para documentar APIs REST. Gera documentação interativa e pode ser usada para gerar testes automaticamente.
Token
Credencial de acesso gerada após autenticação, enviada em headers subsequentes para identificar e autorizar o usuário.
Webhook
Mecanismo onde um sistema notifica outro via HTTP quando um evento ocorre, em vez de o receptor fazer polling. Ex: notificação de pagamento aprovado.
📊Gestão e Qualidade
Acceptance Criteria
Sinônimo de Critério de Aceite. Condições definidas pelo produto que o software deve satisfazer para ser considerado pronto.
Bug Triage
Processo de revisão e priorização de bugs reportados, geralmente feito com QA, dev e produto para decidir o que corrigir e quando.
Débito Técnico
Custo acumulado de decisões técnicas subótimas tomadas para entregar mais rápido. Inclui falta de testes, código legado e documentação defasada.
KPI de Qualidade
Indicadores-chave para medir a saúde do processo de qualidade: taxa de defeitos escapados, cobertura de testes, tempo de ciclo de bug, etc.
MTTF
Mean Time To Failure — tempo médio entre falhas. Indica a confiabilidade do sistema.
MTTR
Mean Time To Restore — tempo médio para restaurar o serviço após uma falha. Métrica de resiliência operacional.
Prioridade
Urgência de correção do bug do ponto de vista do negócio. Um bug pode ser de alta severidade mas baixa prioridade (afeta funcionalidade pouco usada).
Quality Gate
Critério automático que bloqueia o avanço no pipeline se métricas de qualidade não forem atendidas — cobertura mínima, zero bugs críticos, etc.
Root Cause Analysis
Investigação para identificar a causa raiz de um defeito, não apenas o sintoma. Evita que o mesmo problema reapareça.
Severidade
Impacto técnico de um bug no sistema — quão crítico é o problema. Ex: Crítico (sistema parado), Alto, Médio, Baixo.
Shift-Right
Estratégia de testar em produção usando monitoramento, feature flags e observabilidade para detectar problemas que só aparecem em escala real.
Test Coverage
Percentual do sistema coberto pelos testes. Pode ser medido por requisitos, linhas de código (code coverage) ou funcionalidades.
🟠 Pleno · Módulo Final

Mentalidade QA: influência e protagonismo

O QA pleno já sabe testar. O desafio agora é ampliar seu raio de influência: propor melhorias de processo, engajar o time em práticas de qualidade e ser o elo entre negócio, desenvolvimento e operações.

Princípio fundamental

O QA pleno não espera receber trabalho pronto para testar, ele entra na conversa antes. Qualidade é uma propriedade emergente de um processo bem construído, e o pleno é quem lidera a construção desse processo no time.

🌱

QA como agente de mudança cultural

O QA pleno não apenas testa: ele transforma a cultura do time. Isso significa ir além do papel técnico e atuar como facilitador de conversas difíceis, defensor de processos saudáveis e referência de qualidade para toda a equipe. Propor rituais de melhoria contínua, conduzir retrospectivas focadas em qualidade, e tornar a qualidade responsabilidade coletiva, não de um papel isolado, são as marcas do QA que gera impacto real. Qualidade não é fase: é cultura.

🏋️ Exercícios Rápidos
  • Mapeie os 3 principais pontos de atrito de qualidade no seu time atual. Para cada um, proponha uma mudança de processo (não de ferramenta) que reduziria o problema.
  • Prepare uma apresentação de 5 minutos para o seu time explicando "por que qualidade é responsabilidade de todos". Use dados do projeto atual para embasar.
  • Identifique um colega dev ou PO que ainda não tem mentalidade de qualidade. Desenhe um plano de influência gradual para os próximos 30 dias.
🔄

Qualidade no pipeline de CI/CD

O QA pleno é o dono da estratégia de CI/CD do time: quais testes rodam em qual etapa, quais gates bloqueiam o deploy, e como o pipeline dá feedback rápido aos devs. Um pipeline bem configurado é como ter um QA trabalhando 24h por dia. A chave: feedback em menos de 10 minutos para PRs, smoke automático após deploy, e relatórios que o time realmente lê.

🏋️ Exercícios Rápidos
  • Mapeie o pipeline atual do seu time. Onde os testes de qualidade se encaixam? Há gates que bloqueiam deploys ruins?
  • Identifique onde o pipeline mais demora. Proponha uma otimização (parallelização, sharding, caching) que reduza o tempo em pelo menos 30%.
📊

Observabilidade como extensão dos testes

Os testes verificam que o sistema funciona em condições controladas. A observabilidade verifica que ele funciona para usuários reais em condições reais. O QA pleno conecta os dois: define synthetic monitoring (testes agendados em produção), configura alertas baseados em comportamento de usuário, e usa logs e traces para investigar bugs que só aparecem em produção.

🏋️ Exercícios Rápidos
  • Configure um synthetic monitor no New Relic ou Datadog para o fluxo mais crítico da aplicação. O que acontece se ele falhar às 3h da manhã?
  • Para o próximo bug de produção do seu time, use os logs e traces para reconstruir exatamente o que o usuário fez. Depois escreva o caso de teste de regressão.
🗣️

Comunicando qualidade para o negócio

O QA pleno traduz indicadores técnicos em linguagem de negócio: não "a cobertura caiu 5%" mas "o risco de bugs em produção aumentou, e o custo de correção pode ser 10x maior se não agirmos agora". Apresentar métricas de qualidade em reuniões de sprint review, criar dashboards que stakeholders entendem, e celebrar quando a qualidade melhora, tudo isso constrói a cultura de qualidade no time.

🏋️ Exercícios Rápidos
  • Prepare um relatório de qualidade da última sprint em linguagem de negócio, sem termos técnicos. Apresente para o PO e colete feedback.
  • Crie um dashboard simples no Google Looker Studio com 3 métricas de qualidade que o PO consegue entender e acompanhar sozinho.
⚖️

Decidindo com Dados e Contexto de Produto

QA pleno não só executa: ele faz escolhas. Quais testes priorizar quando o tempo aperta? Quando um bug pode ir para produção? Essas decisões exigem dados históricos e entendimento do que o negócio tolera como risco.

🏋️ Exercícios Rápidos
  • Olhe os bugs dos últimos 2 meses: quais módulos concentram mais ocorrências e maior impacto? Concentre cobertura aí; reduza onde é raro e de baixo impacto.
  • Converse com o PO sobre as métricas do produto (conversão, retenção, NPS). Bugs que afetam essas métricas têm outra urgência.
  • Em vez de "não podemos fazer o deploy", ofereça opções: "podemos ir com monitoramento intensivo ou esperar mais um dia para cobrir o cenário Z."
🧪

Laboratório, QA como agente de mudança no time

Exercícios para ampliar influência e construir cultura de qualidade

1
Conduzindo uma sessão Three Amigos real

Prepare e facilite uma sessão Three Amigos para uma user story real ou fictícia, liderando como QA.

  • 1. Escolha uma user story com pelo menos 3 critérios de aceitação. Prepare uma lista de 15 perguntas de qualidade antes da sessão, organizadas por fase: análise, desenvolvimento, teste e produção.
  • 2. Convide um dev e um PO (ou use um LLM para simular os papéis). Facilite a sessão: apresente a story, faça as perguntas, anote as respostas e os novos cenários identificados.
  • 3. Ao final, escreva os cenários BDD descobertos na sessão. Quantos novos casos de teste surgiram de perguntas que ninguém tinha pensado?
  • 4. Documente o resultado: quantos potenciais bugs foram prevenidos antes de uma linha de código ser escrita? Este número é seu argumento para institucionalizar o Three Amigos no time.
💡 Dica: As perguntas mais valiosas do QA no Three Amigos são sobre fluxos negativos, permissões e estados de erro. POs pensam no happy path. Devs pensam na implementação. O QA é o único que pensa sistematicamente em "o que pode dar errado".
2
Pipeline de qualidade: do PR à produção

Desenhe e implemente a estratégia completa de qualidade no pipeline do seu time.

  • 1. Mapeie o ciclo completo: PR, merge, staging, produção. Para cada etapa, defina: quais testes rodam, qual é o gate de qualidade e qual é o feedback que o dev recebe.
  • 2. Implemente pelo menos um gate que ainda não existe: pode ser smoke automático pós-deploy, cobertura mínima no PR ou test de performance em staging.
  • 3. Configure um alerta de produção para o fluxo mais crítico. Quando ele disparar, qual é o runbook do time? Documente o processo de resposta.
  • 4. Apresente o mapa completo para o time numa sessão de 20 minutos. Quais gaps foram identificados? Quais são as próximas melhorias?
💡 Dica: Um pipeline de qualidade nunca está "pronto", ele evolui com o produto. Revise trimestralmente: os gates ainda fazem sentido? O tempo de feedback ainda é aceitável? Novos riscos surgiram que precisam de cobertura?
3
Qualidade visível no pipeline

Configure métricas de qualidade visíveis para todo o time.

  • 1. Configure badges de status no README: cobertura de código, status do pipeline e resultado dos testes. Qualquer um que abrir o repositório deve ver instantaneamente se o projeto está saudável.
  • 2. Adicione comentário automático no PR com resumo dos testes: quantos passaram, falharam, foram ignorados e qual a cobertura. Use GitHub Actions para postar automaticamente.
  • 3. Apresente o dashboard de qualidade na próxima retrospectiva. Use os dados para propor uma melhoria concreta com métrica de sucesso definida.
💡Dica: Qualidade invisível é qualidade que o time não valoriza. Métricas visíveis criam accountability coletivo sem precisar de cobrança individual.
4
Observabilidade expandindo os testes

Use dados de produção para identificar gaps de cobertura.

  • 1. Acesse os logs de erro do Sentry ou equivalente. Liste os 5 erros mais frequentes das últimas 2 semanas. Para cada um: existe teste automatizado que cobre esse cenário?
  • 2. Para cada erro sem cobertura, escreva um caso de teste que teria capturado o bug antes de produção. Isso é 'testes guiados por incidentes'.
  • 3. Calcule: dos top 10 erros de produção, quantos seriam capturados pela suíte atual? Use como métrica de eficácia real da suíte.
💡Dica: A suíte mais valiosa não é a maior, é a que cobre cenários que realmente falham em produção. Observabilidade calibra essa cobertura.
5
Comunicando qualidade com dados para o negócio

Traduza métricas técnicas em linguagem de negócio.

  • 1. Colete dados da última sprint: bugs encontrados em QA vs. produção, tempo médio de correção por severidade, cobertura e taxa de regressão.
  • 2. Reescreva em linguagem de negócio: 'taxa de regressão de 15%' vira '1 em cada 7 funcionalidades corrigidas quebrou outra'. 'Cobertura de 65%' vira '35% do código sem verificação automatizada'.
  • 3. Prepare apresentação de 5 min para o PO com métricas traduzidas. O objetivo é que eles tomem uma decisão com base nos dados, não apenas que entendam os números.
💡Dica: Stakeholders se importam com risco, custo e velocidade, não com cobertura de código. A tradução é responsabilidade do QA, não do stakeholder.
📖 Referência Rápida

Glossário de QA

Todos os termos que você vai encontrar no dia a dia de QA, organizados por categoria e com definições em português. Use a busca para encontrar qualquer termo rapidamente.

93 termos
📌Fundamentos de Teste
Baseline
Versão estável e aprovada de um artefato (código, documentação) que serve como referência para comparações futuras.
Bug
Um defeito no software que causa um comportamento inesperado ou incorreto. Tecnicamente, 'bug' é o defeito no código; 'falha' é o sintoma observado pelo usuário.
Caso de Teste
Conjunto de condições e passos que verificam se uma funcionalidade específica funciona conforme o esperado. Inclui pré-condições, passos, dados de entrada e resultado esperado.
Cenário de Teste
Descrição de alto nível de uma situação a ser testada, geralmente em linguagem de negócio. Ex: 'Usuário faz login com credenciais válidas'.
Cobertura de Testes
Medida que indica quanto do sistema foi exercitado pelos testes. Pode ser por requisitos, linhas de código, branches, etc.
Critério de Aceite
Condições que devem ser satisfeitas para que uma história de usuário ou funcionalidade seja considerada completa. Define o 'pronto' do QA.
Defeito
Imperfeição ou problema num artefato de software (código, documentação, configuração) que pode causar falha quando executado.
Erro
Ação humana que produz um resultado incorreto — geralmente o engano do desenvolvedor que originou o defeito.
Evidence
Evidência de execução de um teste — screenshot, log, vídeo ou relatório que comprova que o teste foi executado e qual foi o resultado.
Falha
O comportamento incorreto observado quando o sistema executa um defeito. É o sintoma visível do bug.
Massa de Dados
Conjunto de dados usados para executar testes. Pode ser gerado, importado ou anonimizado a partir de dados reais de produção.
Plano de Testes
Documento que descreve o escopo, abordagem, recursos, cronograma e critérios de entrada e saída de uma atividade de testes.
Rastreabilidade
Capacidade de vincular casos de teste a requisitos, histórias de usuário ou bugs. Garante que tudo que precisa ser testado está coberto.
Suite de Testes
Agrupamento lógico de casos de teste relacionados, normalmente por funcionalidade, módulo ou tipo de teste.
🗂️Tipos e Abordagens
Ad-hoc
Teste informal e não documentado, baseado na intuição do testador. Útil para investigação rápida, não substitui uma estratégia.
Caixa Branca
Abordagem onde o testador tem acesso ao código-fonte e testa caminhos internos, branches e condições lógicas.
Caixa Cinza
Combinação das duas abordagens: o testador tem acesso parcial ao sistema (logs, banco, DevTools) mas não ao código completo.
Caixa Preta
Abordagem de teste onde o testador não tem acesso ao código-fonte. Testa apenas entradas e saídas, como um usuário final.
Re-teste
Execução de um caso de teste específico após a correção de um bug, para confirmar que o defeito foi resolvido.
Regressão
Re-execução de testes existentes para garantir que mudanças recentes não quebraram funcionalidades que já funcionavam.
Sanity Test
Validação focada que verifica se uma correção ou mudança específica funcionou sem quebrar o entorno imediato.
Smoke Test
Suite enxuta (5 a 10 testes) que verifica se o build está minimamente funcional antes de testar em profundidade.
Teste Exploratório
Abordagem onde design e execução acontecem simultaneamente, sem script pré-definido. O testador aprende o sistema enquanto testa.
Teste Funcional
Verifica o que o sistema faz — se as funcionalidades atendem aos requisitos especificados.
Teste Não-Funcional
Verifica como o sistema se comporta — performance, segurança, usabilidade, compatibilidade, acessibilidade.
Teste Unitário
Testa uma unidade isolada de código (função, método) sem dependências externas. Responsabilidade primária do desenvolvedor.
Teste de Integração
Verifica a comunicação entre dois ou mais componentes do sistema — ex: API + banco de dados.
Teste de Sistema
Testa o software completo como um todo, simulando o comportamento real em ambiente controlado.
UAT
User Acceptance Testing — validação feita pelo usuário final ou representante do negócio para confirmar que o sistema atende aos requisitos.
⚙️Processos e Metodologias
ATDD
Acceptance Test-Driven Development — os critérios de aceite são escritos como testes automatizados antes do desenvolvimento começar.
BDD
Behavior-Driven Development — extensão do TDD que usa linguagem natural (Gherkin) para descrever comportamentos esperados, facilitando a colaboração entre negócio e tecnologia.
Definition of Done
Conjunto de critérios que devem ser atendidos para que uma história de usuário seja considerada concluída. Inclui testes, revisão de código, documentação, etc.
Definition of Ready
Critérios que uma história precisa atender antes de entrar em desenvolvimento — refinada, estimada, com critérios de aceite definidos.
Refinamento
Cerimônia ágil onde as histórias futuras são detalhadas, estimadas e preparadas para entrar em desenvolvimento.
Review
Cerimônia ágil onde o time demonstra o que foi entregue na sprint para os stakeholders, validando o incremento do produto.
Shift-Left
Estratégia de mover as atividades de teste para mais cedo no ciclo de desenvolvimento, reduzindo o custo de correção de defeitos.
Shift-Right
Estratégia de testar em produção ou ambientes próximos à produção, usando monitoramento, feature flags e canary releases.
TDD
Test-Driven Development — metodologia onde os testes são escritos antes do código de produção, guiando o design da implementação.
Three Amigos
Reunião entre PO, dev e QA para discutir uma história antes do desenvolvimento, alinhando entendimento e identificando ambiguidades.
🤖Automação
Assertion
Verificação programática que valida se um resultado obtido corresponde ao esperado. É o 'então' do Given/When/Then.
CI/CD
Continuous Integration / Continuous Delivery — prática de integrar código frequentemente e automatizar build, testes e deploy.
Contract Testing
Técnica que verifica se dois serviços concordam com o formato da comunicação entre eles, sem precisar subi-los juntos.
Data-Driven Testing
Abordagem onde o mesmo caso de teste é executado com múltiplos conjuntos de dados, separando lógica de teste dos dados de entrada.
False Negative
Teste que passa mesmo quando existe um defeito no sistema. O cenário mais perigoso — dá falsa sensação de segurança.
False Positive
Teste que reporta falha quando o sistema está correto. Indica problema no próprio teste, não no software.
Flaky Test
Teste que passa e falha de forma intermitente sem mudança no código, geralmente por dependência de timing, estado compartilhado ou recursos externos.
Framework
Estrutura base que organiza e suporta a automação de testes — define padrões, abstrações e ferramentas que compõem a solução.
Headless
Execução de testes de browser sem interface gráfica visível. Mais rápido e adequado para ambientes de CI.
Keyword-Driven
Abordagem onde os testes são descritos por palavras-chave em linguagem natural (ex: 'Fazer Login', 'Verificar Título'), implementadas como funções reutilizáveis.
Locator
Estratégia para identificar elementos na interface — CSS selector, XPath, ID, data-testid. A escolha do locator impacta diretamente a estabilidade dos testes.
Mock
Substituto de uma dependência real que simula comportamentos específicos durante os testes, controlando as respostas recebidas.
Page Object Model
Padrão de design que encapsula os elementos e ações de cada página em classes separadas, tornando os testes mais legíveis e fáceis de manter.
Pipeline
Sequência automatizada de etapas (build, teste, deploy) executada a cada mudança de código. Garante que defeitos sejam detectados cedo.
Service Virtualization
Simulação de dependências externas (APIs, mainframes, serviços de pagamento) para testes sem necessidade da dependência real.
Spy
Wrapper em torno de uma dependência real que registra chamadas sem substituir o comportamento original.
Stub
Similar ao mock, mas focado em fornecer respostas pré-definidas sem verificar como foi chamado. Usado para isolar dependências.
Performance
Latência
Tempo entre o envio de uma requisição e o recebimento da resposta. Diretamente ligada à experiência do usuário.
Load Test
Teste que simula a carga esperada em produção para validar se o sistema se comporta dentro dos critérios de aceite.
Percentil
Medida estatística usada em performance. p95 = 95% das requisições responderam em X ms ou menos. Mais representativa que a média.
Ramp-up
Período de aumento gradual de carga num teste de performance, simulando o crescimento orgânico de usuários.
SLA
Service Level Agreement — acordo formal que define os níveis mínimos de serviço esperados, incluindo disponibilidade e tempo de resposta.
SLO
Service Level Objective — meta interna de nível de serviço, geralmente mais rigorosa que o SLA. Ex: 'p99 < 500ms'.
Soak Test
Teste de carga sustentada por horas para identificar degradação gradual, memory leaks ou comportamento instável ao longo do tempo.
Spike Test
Teste que simula um pico súbito e intenso de carga, como o que ocorre em campanhas de marketing ou Black Friday.
Stress Test
Teste que ultrapassa os limites do sistema para descobrir o ponto de ruptura e como ele se recupera.
Throughput
Número de requisições processadas por unidade de tempo (req/s). Mede a capacidade do sistema.
Virtual User
Simulação de um usuário real num teste de carga. Cada VU executa o cenário de forma independente e concorrente.
🔌API e Técnico
Endpoint
URL específica de uma API que representa um recurso ou operação. Ex: GET /api/usuarios/123.
GraphQL
Linguagem de consulta para APIs onde o cliente define exatamente quais dados quer receber, diferente do REST que retorna estruturas fixas.
HTTP
HyperText Transfer Protocol — protocolo de comunicação base da web. QA precisa entender métodos (GET, POST, PUT, DELETE), status codes e headers.
Header
Metadados enviados junto com uma requisição ou resposta HTTP. Incluem informações como tipo de conteúdo, autenticação e cache.
JSON
JavaScript Object Notation — formato leve de troca de dados, amplamente usado em APIs REST. Legível por humanos e fácil de parsear.
OAuth
Protocolo de autorização que permite que aplicações acessem recursos em nome do usuário sem expor suas credenciais.
Payload
Corpo (body) de uma requisição ou resposta HTTP, geralmente em JSON ou XML. Contém os dados enviados ou recebidos.
REST
Representational State Transfer — estilo arquitetural para APIs que usa HTTP e opera sobre recursos identificados por URLs.
SOAP
Simple Object Access Protocol — protocolo mais antigo de comunicação entre serviços, baseado em XML. Comum em sistemas legados e bancários.
Schema
Definição formal da estrutura esperada de um dado — campos, tipos, obrigatoriedade. Usado para validar requests e responses.
Status Code
Código numérico na resposta HTTP que indica o resultado da requisição. 2xx = sucesso, 3xx = redirecionamento, 4xx = erro do cliente, 5xx = erro do servidor.
Swagger/OpenAPI
Especificação padrão para documentar APIs REST. Gera documentação interativa e pode ser usada para gerar testes automaticamente.
Token
Credencial de acesso gerada após autenticação, enviada em headers subsequentes para identificar e autorizar o usuário.
Webhook
Mecanismo onde um sistema notifica outro via HTTP quando um evento ocorre, em vez de o receptor fazer polling. Ex: notificação de pagamento aprovado.
📊Gestão e Qualidade
Acceptance Criteria
Sinônimo de Critério de Aceite. Condições definidas pelo produto que o software deve satisfazer para ser considerado pronto.
Bug Triage
Processo de revisão e priorização de bugs reportados, geralmente feito com QA, dev e produto para decidir o que corrigir e quando.
Débito Técnico
Custo acumulado de decisões técnicas subótimas tomadas para entregar mais rápido. Inclui falta de testes, código legado e documentação defasada.
KPI de Qualidade
Indicadores-chave para medir a saúde do processo de qualidade: taxa de defeitos escapados, cobertura de testes, tempo de ciclo de bug, etc.
MTTF
Mean Time To Failure — tempo médio entre falhas. Indica a confiabilidade do sistema.
MTTR
Mean Time To Restore — tempo médio para restaurar o serviço após uma falha. Métrica de resiliência operacional.
Prioridade
Urgência de correção do bug do ponto de vista do negócio. Um bug pode ser de alta severidade mas baixa prioridade (afeta funcionalidade pouco usada).
Quality Gate
Critério automático que bloqueia o avanço no pipeline se métricas de qualidade não forem atendidas — cobertura mínima, zero bugs críticos, etc.
Root Cause Analysis
Investigação para identificar a causa raiz de um defeito, não apenas o sintoma. Evita que o mesmo problema reapareça.
Severidade
Impacto técnico de um bug no sistema — quão crítico é o problema. Ex: Crítico (sistema parado), Alto, Médio, Baixo.
Shift-Right
Estratégia de testar em produção usando monitoramento, feature flags e observabilidade para detectar problemas que só aparecem em escala real.
Test Coverage
Percentual do sistema coberto pelos testes. Pode ser medido por requisitos, linhas de código (code coverage) ou funcionalidades.
🟣 Sênior · Módulo Final

Mentalidade QA: arquitetando a cultura de qualidade

O QA sênior não apenas pratica a mentalidade de qualidade, ele a institucionaliza. Seu impacto não é medido em bugs encontrados, mas em como o time inteiro passou a pensar em qualidade de forma autônoma e sustentável.

Princípio fundamental

O maior sinal de maturidade de um QA sênior é quando o time não precisa mais dele para garantir qualidade. Ele construiu processos, disseminou conhecimento e criou sistemas de feedback que funcionam de forma autônoma, e agora pode elevar o nível novamente.

🏛️

Arquitetando a cultura de qualidade

Cultura é o que as pessoas fazem quando ninguém está olhando. O QA sênior constrói sistemas que tornam a qualidade o caminho de menor resistência: padrões documentados que todos seguem, automação que detecta regressões antes do humano, feedback loops rápidos que ensinam sem punir, e cerimônias de qualidade como retrospectivas focadas em prevenção de defeitos.

🏋️ Exercícios Rápidos
  • Identifique um comportamento de qualidade que você quer que o time adote naturalmente. Como você pode tornar esse comportamento mais fácil do que o comportamento atual?
  • Crie um "Quality Manifesto" do seu time: 5 princípios que guiam as decisões de qualidade. Construa com o time, não para o time.
🔬

QA na estratégia de produto

O QA sênior participa das decisões estratégicas de produto: quais features têm maior risco técnico, quais débitos de qualidade ameaçam a velocidade futura, e quando é mais inteligente pagar a dívida técnica vs. avançar com novas features. Essa voz estratégica é conquistada com dados, escaped defect rate, custo de bugs por componente, correlação entre cobertura e incidentes.

🏋️ Exercícios Rápidos
  • Prepare uma análise de risco para o próximo roadmap de produto: quais features têm maior probabilidade de introduzir bugs? Qual é o custo estimado se isso acontecer?
  • Proponha ao time de produto um "Quality Budget" trimestral: reserva de capacidade para redução de débito técnico de qualidade, justificada com dados.
🌊

Qualidade de ponta a ponta: da ideia à observabilidade

O QA sênior mapeia o fluxo completo de qualidade: Ideia (análise de risco de requisitos), Design (testabilidade como atributo de arquitetura), Desenvolvimento (TDD, code review, pair testing), CI/CD (quality gates, feedback rápido), Deploy (canary, feature flags, rollback automático), Produção (SLOs, synthetic monitoring, observabilidade) e Feedback (bugs de produção como casos de teste de regressão).

🏋️ Exercícios Rápidos
  • Mapeie esse fluxo para um produto que você conhece. Onde estão os gaps? Em quais fases a qualidade é negligenciada?
  • Para cada fase, defina: quem é responsável, qual é o artefato de qualidade produzido e qual é o critério de saída.
📡

Observabilidade como cultura, não como ferramenta

Observabilidade não é instalar o Datadog, é fazer o time pensar em como o sistema se comporta em produção antes de escrever código. Práticas que o sênior institucionaliza: SLOs definidos antes do development, logging estruturado como padrão, alertas criados junto com a feature, e runbooks que qualquer pessoa do time consegue seguir quando um alerta dispara às 2h da manhã.

🏋️ Exercícios Rápidos
  • Audite as features lançadas no último trimestre: quantas têm SLOs definidos? Quantas têm alertas configurados? Quantas têm runbook?
  • Proponha um ritual de "observability review": antes de cada deploy, 15 minutos para garantir que logs, métricas e alertas estão configurados para a nova feature.
📚 Cursos e Recursos
🌱

Formando a próxima geração de QAs

O maior legado de um QA sênior é o crescimento das pessoas ao redor. Práticas de multiplicação de conhecimento: mentoria estruturada com plano de desenvolvimento individual, tech talks regulares sobre qualidade, pair testing como ferramenta de aprendizado (não só de eficiência), e documentação viva, não manuais que ninguém lê, mas wikis, ADRs (Architecture Decision Records) e runbooks que evoluem com o produto.

🏋️ Exercícios Rápidos
  • Identifique um QA júnior ou pleno no seu time. Proponha uma mentoria com encontros quinzenais de 30 minutos. Crie um plano de desenvolvimento personalizado.
  • Escreva um ADR (Architecture Decision Record) para uma decisão de qualidade que seu time tomou. Por que escolheram essa abordagem? Quais alternativas foram descartadas?
🧪

Laboratório, Construindo a Cultura de Qualidade no Time

Exercícios para institucionalizar a mentalidade QA de forma duradoura

1
Mapeando o fluxo de qualidade de ponta a ponta

Crie um mapa visual do ciclo de qualidade do seu produto, do requisito ao monitoramento em produção.

  • 1. Mapeie as 7 fases em um quadro (Miro, Figjam ou papel): Requisito, Design, Desenvolvimento, CI/CD, Deploy, Produção, Feedback.
  • 2. Para cada fase, responda: existe um artefato de qualidade? Quem é responsável? Há um critério de saída claro? Alguma fase está completamente ausente?
  • 3. Identifique as 3 maiores lacunas. Para cada uma, escreva: o risco atual (o que pode dar errado sem esse controle?), a solução proposta e o esforço estimado para implementar.
  • 4. Apresente o mapa para o time de engenharia e produto numa sessão de 30 minutos. Use os dados de bugs de produção dos últimos 3 meses para ancorar a conversa. Quais lacunas o time reconhece como prioritárias?
💡 Dica: O mapa de qualidade é mais valioso como ferramenta de conversa do que como documento. Use-o para provocar reflexão, não para apresentar uma solução pronta. Times que chegam às conclusões juntos são muito mais comprometidos com as mudanças.
2
Criando um Manifesto de Qualidade do Time

Facilite a construção colaborativa dos princípios que vão guiar as decisões de qualidade do time.

  • 1. Prepare uma dinâmica de 60 minutos. Divida em 3 blocos: (1) 20 min, cada pessoa escreve em post-its os maiores problemas de qualidade que vivenciou no último trimestre, (2) 20 min, o grupo agrupa os problemas e identifica padrões, (3) 20 min, para cada padrão, o time escreve um princípio que evitaria o problema.
  • 2. Consolide os princípios em 5 afirmações positivas. Exemplo: "Entregamos código que monitoramos, não código que esperamos funcionar."
  • 3. Documente o Manifesto num lugar visível: README do repositório, Wiki do Confluence ou poster no Slack. Revise trimestralmente.
  • 4. Após 30 dias, avalie: algum princípio mudou comportamentos reais do time? Qual foi mais desafiador de praticar? O Manifesto precisa de ajustes?
💡 Dica: Um bom princípio de qualidade é específico o suficiente para influenciar uma decisão real. "Priorizamos qualidade" é vago. "Não fazemos deploy sem smoke test automatizado passando" é um princípio que muda comportamento.
3
QA na estratégia de produto

Contribua com perspectiva de qualidade na definição do roadmap.

  • 1. Para o roadmap do próximo trimestre (ou 5 iniciativas hipotéticas), escreva para cada uma a perspectiva de qualidade: riscos técnicos, áreas impactadas e esforço estimado de validação.
  • 2. Identifique qual iniciativa tem maior risco de qualidade. Proponha que receba atenção de QA desde o discovery, não só na fase de testes.
  • 3. Apresente a perspectiva de qualidade para o PO e tech lead em 30 minutos. O objetivo não é aprovar ou reprovar iniciativas, mas garantir que os riscos sejam visíveis na tomada de decisão.
💡Dica: QA sênior que só aparece quando o código está pronto está 3 meses tarde. A influência real acontece quando as decisões ainda podem ser mudadas com baixo custo.
4
Observabilidade como prática cultural

Estabeleça observabilidade como responsabilidade coletiva.

  • 1. Conduza 'observability audit': quantas pessoas sabem acessar logs de produção? Quantas sabem interpretar um gráfico de latência? Quantas já usaram o Sentry para investigar bug?
  • 2. Organize 'on-call simulation': apresente um incidente real (anonimizado) e peça que cada pessoa investigue usando as ferramentas disponíveis. Observe quem sabe usar o quê.
  • 3. Proponha 'observability onboarding' para novos membros: roteiro de 2 horas que ensina a acessar logs, criar alertas básicos e interpretar dashboards. Documente como parte da integração.
💡Dica: Observabilidade não é ferramenta, é hábito. Times que consultam métricas e logs proativamente descobrem problemas antes que virem incidentes.
5
Formando e mentorando QAs

Estruture um programa de mentoria para desenvolver QAs menos experientes.

  • 1. Para um QA Júnior ou Pleno, conduza entrevista de desenvolvimento de 30 minutos: o que quer aprender nos próximos 6 meses, onde se sente inseguro e quais habilidades quer desenvolver.
  • 2. Com base na entrevista, crie plano de desenvolvimento de 90 dias: 3 objetivos mensuráveis, recursos específicos, projetos práticos e checkpoints quinzenais.
  • 3. Execute a primeira sessão de mentoria de 1 hora: revise o plano, esclareça dúvidas, defina as primeiras tarefas práticas e agende o próximo checkpoint.
💡Dica: O melhor indicador de um QA sênior não é o que ele faz sozinho, é quantas pessoas ele ajudou a crescer. Mentoria efetiva é o legado que permanece quando o sênior sai.
∞ Fundamentos Atemporais

Competências que não expiram

Estas habilidades acompanham toda a carreira: do primeiro emprego à liderança técnica. Não é uma trilha para "subir de nível": é um espaço de aprofundamento contínuo. Você pode começar em qualquer tema, em qualquer fase.

∞ Sem pré-requisitos de nível 🔁 Volte sempre que quiser aprofundar 🎯 Prática imediata em qualquer contexto
9Temas
14+Exercícios
20+Recursos
9Labs

Por que estes temas existem separados dos níveis?

Uma explicação honesta sobre o problema que esta trilha resolve.

O problema com estruturas por nível

Quando um tema como "qualidade no ciclo de desenvolvimento" aparece só no Júnior, o Pleno e o Sênior tendem a achar que já superaram aquilo. Quando aparece só no Sênior, o Júnior acha que ainda não é para ele. Temas transversais ficam sempre mal posicionados em estruturas hierárquicas.

O resultado é que competências essenciais são tratadas como check-boxes de um momento específico da carreira: quando na verdade precisam ser praticadas, revisitadas e aprofundadas continuamente.

O que muda em cada nível não é a relevância: é a profundidade

Comunicação é relevante no dia 1 do Júnior e continua sendo no trabalho do Sênior mais experiente. O que muda é o alcance: o Júnior aprende a escrever um report claro; o Pleno aprende a adaptar a mensagem para diferentes interlocutores; o Sênior aprende a criar padrões de comunicação para o time inteiro.

Cada tema aqui funciona assim: não existe "concluído", existe "mais profundo". Por isso estão nesta trilha separada: para você poder voltar quando sentir que é hora de ir mais fundo.

Como usar esta trilha

  • Sem ordem obrigatória. Comece pelo tema que faz mais sentido para o seu momento atual.
  • Volte com frequência. O mesmo tema lido com 1 ano de experiência a mais revela coisas que não eram visíveis antes.
  • Conecte com o que você já faz. Os exercícios são pensados para aplicação imediata no trabalho real, não para ambientes artificiais.
  • Leve para o time. Muitos destes temas ficam mais poderosos quando discutidos coletivamente: em retros, em one-on-ones, em refinamentos.
"Uma carreira sólida em QA não é construída só com ferramentas e frameworks. É construída com comunicação clara, integridade no reporte e uma mentalidade de qualidade que se recusa a se acomodar."
∞ Fundamento Atemporal

Comunicação e Colaboração com o Time

A competência que mais diferencia QAs em qualquer nível não é técnica: é a capacidade de se comunicar com clareza, adaptar a mensagem ao interlocutor e colaborar de forma que o time inteiro saia melhor.

📣

Escrita de Bug Reports de Qualidade

Um bug sem steps de reprodução, sem evidência e sem ambiente identificado não serve para ninguém. Report bem escrito é parte do trabalho: não é burocracia.

Como aprofundar por nível
  • Júnior: Aprenda a estrutura básica: título descritivo, passos, resultado esperado vs. obtido, evidência e ambiente.
  • Pleno: Adapte o nível de detalhe ao interlocutor: dev precisa de reprodução técnica, PM precisa de impacto no usuário.
  • Sênior: Crie templates e padrões de reporte para o time. Meça a qualidade dos reports como indicador de maturidade.
🤝

QA nas Cerimônias Ágeis

QA proativo entra nas conversas antes do desenvolvimento começar. Planning, refinamento e review são oportunidades de qualidade: não apenas obrigações de agenda.

Como aprofundar por nível
  • Júnior: Faça ao menos uma pergunta de qualidade em cada refinamento. "O que acontece se o usuário fizer X?"
  • Pleno: Influencie critérios de aceite antes de entrarem no sprint. Conecte testes ao valor entregue na review.
  • Sênior: Guie a agenda de qualidade nas cerimônias. Facilite discussões sobre débito técnico e riscos sistêmicos.
💬

Comunicação de Riscos e Trade-offs

Saber comunicar riscos com clareza: mesmo quando a mensagem é inconveniente: é uma das habilidades mais raras e mais valorizadas em QA.

Como aprofundar por nível
  • Júnior: Aprenda a distinguir severidade (impacto técnico) de prioridade (urgência de negócio) e comunicar a diferença.
  • Pleno: Documente riscos aceitos com justificativas. "Decidimos não testar X por Y razão" é informação importante.
  • Sênior: Crie processos formais de aceite de risco com rastreabilidade. Comunique tendências de qualidade em linguagem executiva.
🧪

Laboratório: Comunicação e Colaboração

Exercícios aplicáveis no trabalho real, em qualquer nível

1
Auditoria dos seus últimos 5 bug reports

Abra os últimos 5 bugs que você reportou (ou bugs reais do seu time). Avalie cada um contra uma checklist de qualidade.

  • 1. Para cada bug, verifique: tem título descritivo (não "Erro na tela")? Tem passos numerados para reproduzir? Tem resultado esperado vs. obtido? Tem evidência (print, vídeo, log)? Tem ambiente e versão identificados?
  • 2. Dê uma nota de 1 a 5 para cada bug. Identifique o padrão: o que está faltando com mais frequência nos seus reports?
  • 3. Reescreva o bug com pior nota usando os critérios de qualidade. Compare os dois.
  • 4. Se tiver um colega disposto, troque seus bugs para revisar. O que a outra pessoa conseguiu entender sem te perguntar nada?
💡 Dica: O teste definitivo de um bom bug report: um dev consegue reproduzir sem te fazer nenhuma pergunta?
2
Simulação de comunicação de risco

Pratique comunicar o mesmo risco para diferentes interlocutores: uma habilidade que diferencia QAs em qualquer nível.

  • 1. Escolha um risco real do seu contexto atual (um bug crítico não corrigido, uma funcionalidade sem cobertura, uma integração não testada).
  • 2. Escreva a comunicação para 3 interlocutores diferentes: (a) o dev que vai corrigir, (b) o PM que decide a prioridade, (c) um stakeholder de negócio.
  • 3. Compare as 3 versões. O que mudou em cada uma? O que ficou igual? Qual linguagem você usou em cada caso?
💡 Dica: Para o dev: seja técnico e específico. Para o PM: fale de impacto no usuário. Para o stakeholder: fale de risco de negócio. O risco é o mesmo: a linguagem muda.
3
Comunicando riscos e trade-offs

Pratique comunicação de riscos que gera ação, não paralisia.

  • 1. Identifique um risco real de qualidade no projeto: área sem cobertura, dependência sem fallback ou histórico de bugs recorrentes. Documente: descrição, probabilidade, impacto e mitigações.
  • 2. Prepare 3 versões da comunicação do risco: uma para o dev (técnica), uma para o PO (impacto de negócio) e uma para a gestão (custo e probabilidade).
  • 3. Comunique para o stakeholder mais adequado e observe a reação: gerou decisão consciente (aceitar, mitigar ou transferir o risco)? Se não, o que melhorar na comunicação?
💡Dica: Comunicar um risco sem propor opções de mitigação gera ansiedade, não decisão. Chegue sempre com o problema E com pelo menos uma opção de resposta.
∞ Fundamento Atemporal

Documentação de Testes

Documentar testes não é burocracia: é a diferença entre qualidade que existe só na sua cabeça e qualidade que o time inteiro consegue usar, manter e evoluir.

📋

Escrita de Casos de Teste

Um caso de teste bem escrito é aquele que qualquer pessoa do time consegue executar sem te perguntar nada. Clareza e completude são inegociáveis.

Como aprofundar por nível
  • Júnior: Domine a estrutura básica: ID, título, pré-condições, passos, resultado esperado, dados de teste.
  • Pleno: Estruture suítes de testes com cobertura de happy path, edge cases e fluxos de erro. Use técnicas como partição de equivalência.
  • Sênior: Defina padrões de escrita para o time. Sistematize a documentação como ativo vivo, não como artefato estático.
🔗

Rastreabilidade de Testes

Conectar testes a requisitos e histórias garante que você sabe o que está coberto, o que não está, e por quê. É visibilidade: não overhead.

Como aprofundar por nível
  • Júnior: Associe cada caso de teste à história ou critério de aceite correspondente. Simples, mas pouco praticado.
  • Pleno: Use rastreabilidade para identificar lacunas de cobertura antes de cada release. Apresente como mapa visual.
  • Sênior: Construa matrizes de rastreabilidade que deem visibilidade executiva sobre risco de release.
🗂️

Plano de Testes e Estratégia de Cobertura

Decidir o que testar, em qual profundidade e com qual abordagem é uma decisão estratégica: não uma lista automática de tudo que pode ser testado.

Como aprofundar por nível
  • Júnior: Aprenda a ler e executar um plano de testes. Entenda o porquê de cada decisão de escopo.
  • Pleno: Escreva planos de teste para features. Justifique o que está dentro e fora do escopo com base em risco.
  • Sênior: Defina a estratégia de testes da squad ou do produto. Conecte cobertura a objetivos de negócio.
🧪

Laboratório: Documentação de Testes

Pratique com exemplos reais e aplicáveis no seu dia a dia

1
Escreva 10 casos de teste para o OrangeHRM

O OrangeHRM (opensource-demo.orangehrmlive.com, login: Admin/admin123) é um sistema de RH open source ideal para prática. Use o módulo de Login.

  • 1. Acesse o sistema e explore o módulo de Login por 10 minutos sem testar: apenas observe os campos, comportamentos e mensagens.
  • 2. Liste todos os cenários possíveis: login com sucesso, senha errada, usuário inexistente, campos vazios, SQL injection no campo de usuário, acesso direto à URL após logout.
  • 3. Escreva os casos de teste com: ID, pré-condição, passos, resultado esperado e dados de teste. Use planilha ou ferramenta de sua escolha.
  • 4. Execute cada caso. Para cada resultado inesperado, abra um bug report com a qualidade praticada no lab anterior.
💡 Dica: Comece pelo happy path, depois teste os limites. Depois tente quebrar. Essa ordem é intencional: você precisa entender o comportamento correto antes de explorar o incorreto.
2
Construa uma matriz de rastreabilidade simples

Pratique conectar casos de teste a requisitos: uma habilidade fundamental que a maioria aprende tarde demais.

  • 1. Escolha uma história de usuário real do seu trabalho ou crie uma fictícia: "Como usuário, quero recuperar minha senha por e-mail".
  • 2. Liste os critérios de aceite dessa história (mínimo 5).
  • 3. Para cada critério de aceite, escreva ao menos 1 caso de teste. Crie uma tabela: Critério de Aceite → Caso de Teste → Status.
  • 4. Identifique: existe algum critério sem cobertura? Existe algum caso de teste que não cobre nenhum critério? Essas são suas lacunas.
3
Plano de testes e estratégia de cobertura

Produza plano que equilibra cobertura de risco com esforço disponível.

  • 1. Para uma release importante, escreva plano de 1 página: escopo, itens fora do escopo (e por quê), abordagem por área de risco, ambiente necessário e critérios de go/no-go.
  • 2. Mapeie a cobertura: crie matriz que cruza funcionalidades vs. tipos de teste. Identifique onde a cobertura é alta (baixo risco residual) e baixa (alto risco residual).
  • 3. Após a execução, compare plano com realizado: o que mudou? Quais riscos se materializaram? Quais áreas testadas não geraram bugs? Use para calibrar o próximo planejamento.
💡Dica: Um plano de testes é uma hipótese sobre onde os riscos estão. A execução é o experimento que valida ou invalida. O aprendizado entre os dois melhora o próximo planejamento.
∞ Fundamento Atemporal

Mentalidade de Qualidade

Qualidade não é uma fase do processo: é uma postura diária. Shift-left, quality as everyone's job e pensamento crítico sobre o que estamos realmente entregando.

🔀

Shift-Left Testing

Antecipar qualidade para o início do ciclo é a mudança de mentalidade mais importante de qualquer QA. Testar ideias e requisitos custa muito menos do que testar código pronto.

Como aprofundar por nível
  • Júnior: Faça perguntas de qualidade nos refinamentos antes do desenvolvimento começar. Questione ambiguidades.
  • Pleno: Revise critérios de aceite proativamente. Proponha cenários de teste junto ao time de dev antes do sprint.
  • Sênior: Institucionalizar práticas de shift-left no processo. Mensurar o impacto em métricas como custo de correção por fase.
🌍

Quality as Everyone's Job

Quando QA é o único responsável pela qualidade, o sistema está errado. Cultivar uma cultura onde todos se sentem donos da qualidade é trabalho de longo prazo: e começa no seu comportamento diário.

Como aprofundar por nível
  • Júnior: Celebre quando devs encontram bugs cedo. Nunca trate qualidade como território exclusivo do QA.
  • Pleno: Guie devs em práticas de testabilidade. Compartilhe técnicas de teste com o time. Pair testing com devs.
  • Sênior: Criar programas de capacitação de qualidade para o time. Medir maturidade e evolução coletiva.
🧠

Pensamento Crítico em QA

Testar é uma atividade intelectual. Questionar suposições, identificar o que não está sendo testado e pensar como um adversário do sistema são habilidades que se desenvolvem com prática deliberada.

Como aprofundar por nível
  • Júnior: Pergunte sempre: "O que pode dar errado aqui que ninguém pensou ainda?" Antes de qualquer sessão de testes.
  • Pleno: Use heurísticas de teste (SFDPOT, CRISP, etc.) para estruturar o pensamento crítico de forma sistemática.
  • Sênior: Ensine o time a pensar criticamente sobre cobertura. Crie checklists de perguntas de qualidade para cada tipo de feature.
🧪

Laboratório: Mentalidade de Qualidade

Exercícios para treinar o olhar crítico e a postura de shift-left

1
Sessão de shift-left em uma história de usuário

Pratique o shift-left fazendo perguntas de qualidade antes do código existir.

  • 1. Pegue uma história de usuário do seu backlog atual (ou crie uma fictícia: "Como usuário, quero filtrar produtos por categoria").
  • 2. Sem escrever nenhum caso de teste ainda, liste 10 perguntas de qualidade sobre essa história. Exemplos: "O que acontece se não existir nenhum produto na categoria selecionada?", "A filtragem é case-sensitive?", "Existe limite de categorias selecionáveis ao mesmo tempo?"
  • 3. Para cada pergunta, identifique: ela está respondida nos critérios de aceite? Se não está, é um risco ou uma decisão consciente?
  • 4. Leve essas perguntas para o próximo refinamento. Observe o impacto na qualidade da discussão.
💡 Dica: A meta não é ter todas as respostas: é descobrir as perguntas que ninguém fez ainda. Cada pergunta sem resposta nos critérios de aceite é um risco potencial.
2
Quality as Everyone's Job: implementando na prática

Conduza iniciativa concreta para distribuir a responsabilidade de qualidade.

  • 1. Mapeie a percepção atual: quem 'é responsável' pela qualidade? Quando um bug vai para produção, qual é a primeira reação? Esse diagnóstico revela se a cultura é de qualidade coletiva ou de QA como gatekeeper.
  • 2. Proponha e execute experimento de 1 sprint: cada dev adiciona 1 teste para cada história desenvolvida, e o QA revisa durante o desenvolvimento. Meça bugs encontrados em QA vs. durante o desenvolvimento.
  • 3. Apresente na retrospectiva. Se reduziu bugs em QA, use os dados para propor adoção permanente. Se não, investigue por quê e ajuste a abordagem.
💡Dica: Quality as everyone's job não significa que QA não é necessário. Significa que é uma responsabilidade coletiva onde cada papel contribui conforme suas competências.
3
Pensamento crítico sobre outputs de IA

Avalie criticamente saídas de IA e identifique onde o julgamento humano é insubstituível.

  • 1. Use um LLM para gerar casos de teste para o checkout do Sauce Demo. Sem questionar nada, receba os casos. Depois, revise cada um: faz sentido? Testa o comportamento certo?
  • 2. Identifique os casos que você rejeitaria e escreva o motivo. Identifique cenários importantes que a IA não gerou. Esse gap revela o que IA gera vs. o que QA experiente cria.
  • 3. Documente um guia de revisão de outputs de IA: critérios para aceitar ou rejeitar casos gerados por IA e como complementar com contexto de negócio que a IA não tem.
💡Dica: IA é excelente em gerar variações de cenários conhecidos. É péssima em cenários que dependem de histórico de incidentes e conhecimento tácito do produto. Esse é o valor do QA humano.
∞ Fundamento Atemporal

Ética e Reporte Honesto

Integridade no reporte de qualidade não é negociável: em nenhum nível. Pressão por releases, deadlines e expectativas de stakeholders nunca justificam omitir riscos conhecidos.

⚖️

Classificação Honesta de Bugs

Severidade é um critério técnico: não uma negociação política. Um bug classificado errado por pressão de prazo pode chegar ao usuário com consequências reais.

Como aprofundar por nível
  • Júnior: Aprenda a classificar com critérios objetivos: impacto no usuário, frequência de ocorrência, presença de workaround.
  • Pleno: Mantenha registro de decisões de risco aceitas. "Sabíamos deste bug e decidimos não corrigir antes do release por X razão" é documentação importante.
  • Sênior: Crie frameworks de classificação para o time. Estabeleça processos formais de aceite de risco com rastreabilidade e aprovação.
🛡️

Transparência na Cobertura Real

Dizer que algo está "testado" quando você sabe que a cobertura é parcial coloca usuários em risco. A cobertura real: com suas limitações: precisa ser comunicada.

Como aprofundar por nível
  • Júnior: Nunca afirme que "está tudo testado" sem embasamento. Documente o escopo e as limitações de cada ciclo de testes.
  • Pleno: Apresente métricas de cobertura com contexto. "70% de cobertura automatizada, mas os 30% restantes incluem o fluxo de pagamento" é uma informação muito diferente de "70% de cobertura".
  • Sênior: Construa dashboards de visibilidade de qualidade que retratem a realidade: sem maquiar indicadores para satisfazer stakeholders.
🏛️

Lidando com Pressão por Prazo

Toda carreira em QA vai passar por situações onde a pressão de prazo entra em conflito com a qualidade. Como você navega esse conflito define muito do seu caráter profissional.

Como aprofundar por nível
  • Júnior: Aprenda a separar "o que posso testar no tempo disponível" de "o que fica sem cobertura". Comunique a diferença explicitamente.
  • Pleno: Negocie escopo com dados: "Se fizermos o release agora, este risco não foi validado. A decisão de aceitar esse risco precisa ser consciente e documentada."
  • Sênior: Construa processos que tornem a aceitação de risco explícita e rastreável. O risco aceito de forma consciente é muito diferente do risco ignorado.
🧪

Laboratório: Ética e Reporte Honesto

Simulações de situações reais de dilema ético em QA

1
Simulação de pressão por prazo

Um exercício de role-play para praticar a comunicação de riscos em situações de pressão.

  • 1. Cenário: é quinta-feira, o release está marcado para sexta. Você encontrou um bug de severidade média no fluxo de checkout que acontece em 10% dos casos com cartões Visa emitidos fora do Brasil. O time de dev diz que não dá para corrigir hoje.
  • 2. Escreva como você comunicaria essa situação para: (a) o dev responsável pela feature, (b) o PM do produto, (c) um stakeholder de negócio que está esperando o release.
  • 3. Escreva o que você documentaria se o time decidir fazer o release assim mesmo (quais informações precisam estar registradas?).
  • 4. Reflita: qual seria a pior forma de lidar com essa situação? O que não deve ser feito?
💡 Dica: A decisão de fazer o release é do PM e do negócio: não do QA. Mas a comunicação clara do risco é responsabilidade do QA. Você não precisa impedir o release; você precisa garantir que a decisão seja consciente.
2
Comunicando cobertura real com honestidade

Pratique a transparência na comunicação de lacunas de cobertura.

  • 1. Para uma funcionalidade sendo testada, mapeie honestamente: o que foi testado, o que não foi e por quê. Inclua limitações de tempo, falta de ambiente e áreas de incerteza.
  • 2. Escreva relatório de cobertura honesto para o PO: 'aprovamos para deploy com as seguintes coberturas e as seguintes lacunas conhecidas'. Para cada lacuna, estime o risco.
  • 3. Simule conversa com o PO que pergunta 'está tudo testado?'. Pratique responder com honestidade sem criar alarmismo: 'testamos os cenários críticos. As lacunas têm risco baixo porque...'
💡Dica: QA que sempre diz 'está tudo testado' perde credibilidade no primeiro bug de produção. Transparência em coberturas e lacunas constrói confiança duradoura.
3
Lidando com pressão por prazo com integridade

Pratique tomada de decisão ética sob pressão.

  • 1. Escreva 3 cenários reais de pressão: 'aprova essa feature, temos que entregar amanhã', 'classifica esse bug como menor', 'não documenta essa limitação'. Para cada um, escreva a resposta e as consequências.
  • 2. Para o cenário mais difícil, prepare script de resposta: como recusar sem criar conflito, como propor alternativa (deploy parcial, feature flag, comunicado de limitação) e como documentar a decisão.
  • 3. Identifique situação passada onde cedeu à pressão. O que faria diferente hoje? Onde está seu limite de conforto com decisões éticas?
💡Dica: Ceder à pressão conscientemente e documentado (assumindo o risco explicitamente) é diferente de ceder implicitamente. O primeiro é decisão de negócio; o segundo é falha de integridade.
∞ Fundamento Atemporal

IA no Dia a Dia de QA

IA já faz parte do trabalho de qualidade: não como substituto do raciocínio crítico, mas como amplificador de capacidade. A base é universal; a profundidade cresce com a senioridade.

🤖

IA para Geração de Casos de Teste

LLMs são excelentes para gerar rascunhos de casos de teste: mas o output precisa ser avaliado criticamente. Usar IA bem é saber quando confiar e quando questionar.

Como aprofundar por nível
  • Júnior: Use IA para gerar rascunhos de casos de teste e compare com o que você escreveria manualmente. O que a IA acertou? O que ela perdeu?
  • Pleno: Use IA para revisão de cobertura: "Dado este conjunto de casos de teste, quais edge cases eu posso estar perdendo?"
  • Sênior: Avalie ferramentas de IA para QA para o time. Defina guidelines de uso que maximizem valor e minimizem risco de dependência.
🔬

IA para Análise de Logs e Diagnóstico

Analisar logs de erro, identificar padrões de falha e diagnosticar problemas complexos são tarefas onde IA pode acelerar significativamente o trabalho de QA.

Como aprofundar por nível
  • Júnior: Aprenda a colar um stack trace em um LLM e pedir explicação. Pratique formular perguntas sobre erros de forma eficiente.
  • Pleno: Use IA para analisar padrões em logs de CI/CD. "Estes são os últimos 20 erros de build: existe algum padrão que eu deveria investigar?"
  • Sênior: Integre IA na análise de flaky tests e na priorização de investigações de falha com base em histórico.
🧠

Pensamento Crítico sobre Outputs de IA

IA pode gerar casos de teste incorretos, coberturas ilusórias e análises superficiais. Saber quando não confiar é tão importante quanto saber quando usar.

Como aprofundar por nível
  • Júnior: Sempre verifique outputs de IA contra os requisitos reais. IA não sabe o contexto de negócio que você sabe.
  • Pleno: Identifique padrões de erro comuns: IA tende a gerar casos de teste redundantes, a ignorar dependências de estado e a subestimar edge cases de dados reais.
  • Sênior: Criar guidelines de uso responsável de IA para o time. Antecipar e mitigar riscos de dependência excessiva.
🧪

Laboratório: IA no dia a dia de QA

Experimentos práticos para calibrar quando confiar e quando questionar a IA

1
Duelo: você vs. IA na geração de casos de teste

Um experimento para calibrar o valor real da IA na geração de testes.

  • 1. Escolha uma feature que você conhece bem (real ou fictícia). Escreva você mesmo 10 casos de teste em 15 minutos, sem ajuda.
  • 2. Peça ao ChatGPT ou Claude os mesmos 10 casos de teste. Use um prompt simples: "Gere 10 casos de teste para [descreva a feature]".
  • 3. Compare lado a lado: quais casos a IA gerou que você não pensou? Quais você escreveu que a IA não cobriu? Quais casos da IA estão incorretos ou inaplicáveis no seu contexto?
  • 4. Agora use a IA de forma diferente: "Dados estes casos de teste que escrevi [cole os seus], quais edge cases importantes eu posso estar perdendo?" Compare a utilidade das duas abordagens.
💡 Dica: A segunda abordagem: usar IA como revisor dos seus testes: tende a ser mais útil do que usar IA como gerador primário. A IA não sabe o que você sabe sobre o contexto; você sabe o que a IA sabe sobre edge cases comuns.
2
IA para análise de logs e diagnóstico

Use IA para acelerar análise de logs e identificação de padrões.

  • 1. Colete log de erro real ou use logs do Sentry exportados em JSON. Cole num LLM com o prompt: 'Analise e identifique a causa raiz provável, componente afetado, padrão de frequência e 3 hipóteses de investigação'.
  • 2. Use IA para identificar padrões em múltiplos logs: cole 10 stack traces e peça 'agrupe por causa raiz provável e identifique quais compartilham a mesma origem'.
  • 3. Avalie criticamente: quais análises estavam corretas? Onde o conhecimento de domínio teria gerado análise melhor? Documente as limitações encontradas.
💡Dica: IA analisa padrões sintáticos nos logs mas não entende o contexto do negócio. 'Timeout no banco' pode ser bug crítico ou comportamento esperado em horário de pico.
3
Framework pessoal para avaliar outputs de IA

Desenvolva critérios claros para quando confiar e quando questionar a IA.

  • 1. Use IA para gerar plano de testes para funcionalidade complexa. Avalie cada seção: o risco identificado é real? As abordagens são adequadas para o contexto do seu sistema?
  • 2. Identifique 3 tipos de output de IA que você aceitaria sem questionar (boilerplate, formatação) e 3 que exigem revisão crítica (análise de risco, priorização, interpretação de requisitos).
  • 3. Crie checklist de revisão de output de IA para QA: perguntas que você faz antes de usar qualquer saída em contexto profissional. Compartilhe com o time e itere.
💡Dica: A habilidade mais valiosa na era da IA não é saber usar IA, é saber quando não usar e quando questionar o que ela diz.
∞ Fundamento Atemporal

Gestão de Tempo e Priorização

Priorizar o que testar, quando testar e quanto tempo investir em cada coisa é uma habilidade que nunca deixa de ser relevante: ela só fica mais complexa com o aumento de responsabilidade.

🎯

Priorização Baseada em Risco

Testar tudo com igual profundidade é impossível. Testar as coisas certas com a profundidade certa é uma habilidade estratégica que separa QAs táticos de QAs estratégicos.

Como aprofundar por nível
  • Júnior: Entenda os critérios básicos: impacto no usuário, frequência de uso, criticidade do negócio, histórico de bugs na área.
  • Pleno: Aplique análise de risco formal antes de cada sprint. Comunique explicitamente os trade-offs de cobertura quando o tempo é limitado.
  • Sênior: Defina frameworks de priorização para o time. Alinhe estratégia de testes com objetivos de negócio e OKRs.
📅

Estimativa de Esforço de Teste

Estimar quanto tempo de teste uma feature requer é uma habilidade que a maioria dos QAs subestima: e que tem impacto direto no planejamento do time.

Como aprofundar por nível
  • Júnior: Estime suas tarefas individualmente e compare com o tempo real. Construa seu histórico de estimativas para melhorar com o tempo.
  • Pleno: Estime por complexidade e risco, não só por tamanho. Uma feature pequena em área de alto risco pode demandar muito mais testes.
  • Sênior: Construa capacidade realista do time de QA. Defenda o tempo necessário para qualidade adequada nas negociações de sprint.

Foco e Gestão de Interrupções

Testes exigem concentração sustentada. Gerenciar interrupções, bloqueios e mudanças de contexto são habilidades práticas que afetam diretamente a qualidade do trabalho.

Como aprofundar por nível
  • Júnior: Desenvolva o hábito de documentar onde parou quando interrompido. Retomar testes no meio aumenta o risco de perder contexto e cobertura.
  • Pleno: Identifique seus padrões de bloqueio. O que interrompe seus testes com mais frequência? Ambientes instáveis? Falta de dados? Dependências de outros times?
  • Sênior: Estruture o trabalho do time para minimizar interrupções durante sessões de teste críticas. Defenda blocos de tempo protegidos no sprint.
🧪

Laboratório: Gestão de Tempo e Priorização

Exercícios para desenvolver instinto de priorização baseado em risco

1
Matriz de priorização para um sprint real

Pratique priorização baseada em risco com as histórias do seu sprint atual (ou fictícias).

  • 1. Liste todas as histórias do seu sprint atual (ou crie 6 histórias fictícias de diferentes complexidades).
  • 2. Para cada história, avalie de 1 a 3: Impacto no usuário se falhar (1=baixo, 3=alto) · Complexidade técnica (1=simples, 3=complexa) · Histórico de bugs na área (1=área estável, 3=área problemática).
  • 3. Some os scores. Ordene as histórias do maior para o menor score. Essa é sua ordem de prioridade de teste.
  • 4. Se você tiver só 50% do tempo para testar tudo, qual seria o corte? Documente o que fica sem cobertura e por quê.
💡 Dica: A matriz não é perfeita: é um ponto de partida para uma conversa estruturada com o time. O valor está no processo de pensar sobre risco, não no número final.
2
Estimativa com dados históricos

Calibre suas estimativas usando dados reais de sprints anteriores.

  • 1. Revise as últimas 3 sprints: quanto foi estimado para teste de cada história vs. quanto foi gasto? Calcule o fator de calibração pessoal.
  • 2. Classifique histórias por complexidade: simples (CRUD), média (lógica de negócio) e complexa (integrações). Calcule o esforço médio real para cada categoria.
  • 3. Na próxima sprint planning, use o modelo: classifique cada história, aplique o esforço médio e ajuste pelo fator de calibração. Ao final, compare e refine o modelo.
💡Dica: Estimativa de teste é mais fácil de calibrar do que de desenvolvimento porque o escopo é mais previsível: você sabe que vai testar happy path, erros e edge cases em qualquer história.
3
Gestão de interrupções e foco

Identifique seus padrões e implemente estratégias para proteger o tempo de teste.

  • 1. Durante 3 dias, registre todas as interrupções: reuniões não planejadas, perguntas no Slack, bugs urgentes, e-mails. Para cada uma: fonte, duração e se era realmente urgente.
  • 2. Analise: qual percentual do tempo de teste foi interrompido? Quais são as fontes mais frequentes? Quais eram verdadeiramente urgentes vs. poderiam ter esperado?
  • 3. Implemente proteção de tempo focado: blocos de 90 minutos no calendário marcados como 'teste focado', status 'não perturbe' no Slack e SLA de 2 horas para mensagens não urgentes.
💡Dica: Teste de qualidade exige foco profundo. Teste interrompido a cada 10 minutos não encontra bugs sutis. Proteger o tempo de teste é decisão de qualidade, não de conforto.
∞ Fundamento Atemporal

Qualidade no Ciclo de Desenvolvimento (SDLC)

Entender onde e como qualidade se encaixa em cada fase do desenvolvimento é essencial em todos os níveis. O que cresce com a senioridade é o escopo de influência: não a relevância do tema.

🔄

QA em Cada Fase do SDLC

QA não começa quando o código está pronto. Cada fase do ciclo: da concepção ao deploy: tem oportunidades específicas de qualidade que não existem em nenhuma outra fase.

Como aprofundar por nível
  • Júnior: Mapeie as fases do seu SDLC atual e identifique em quais você está presente. Em quais você deveria estar mas não está?
  • Pleno: Atue ativamente nas fases de design e desenvolvimento, não apenas em teste. Construa estratégias de teste integradas ao ciclo.
  • Sênior: Redesenhe processos para integrar qualidade de forma sistêmica. Meça a eficiência do ciclo completo de qualidade.
💸

Custo da Qualidade por Fase

Um bug encontrado em produção custa até 100x mais do que o mesmo bug encontrado nos requisitos. Entender essa matemática muda a forma como você defende investimento em qualidade.

Como aprofundar por nível
  • Júnior: Internalize o modelo IBM/Capers Jones de custo por fase. Use-o para justificar por que perguntas em refinamentos são mais baratas do que bugs em produção.
  • Pleno: Meça o custo real de bugs por fase no seu projeto. Use dados históricos para criar argumentos concretos por shift-left.
  • Sênior: Construa business cases para investimento em qualidade usando métricas de custo por fase. Fale a língua do negócio.
🚪

Definition of Ready e Definition of Done

DoR e DoD são contratos de qualidade do time. QA tem papel fundamental na definição e na manutenção desses critérios: não apenas na verificação do Done.

Como aprofundar por nível
  • Júnior: Entenda o DoR e DoD do seu time atual. Questione histórias que entram no sprint sem atender o DoR.
  • Pleno: Contribua ativamente para a evolução do DoD. Proponha critérios de qualidade concretos e mensuráveis.
  • Sênior: Lidere a construção e evolução do DoR e DoD. Use-os como alavanca de maturidade do processo.
🧪

Laboratório: Qualidade no SDLC

Exercícios para mapear e expandir a presença de QA no ciclo

1
Mapeamento do seu SDLC atual

Um diagnóstico honesto de onde a qualidade está presente: e onde não está: no seu ciclo atual.

  • 1. Desenhe (pode ser numa folha de papel) as fases do seu processo atual: Backlog → Refinamento → Planning → Desenvolvimento → Code Review → Testes → Staging → Deploy → Monitoramento.
  • 2. Para cada fase, marque: QA está presente? Existe alguma atividade de qualidade formal? Existe um gate de qualidade antes de passar para a próxima fase?
  • 3. Identifique as 2 fases onde a presença de QA traria mais valor e ainda não existe (ou é insuficiente).
  • 4. Para cada uma dessas fases, escreva 1 proposta concreta: o que você faria nessa fase, como seria feito e qual seria o critério de sucesso?
💡 Dica: Não tente mudar tudo de uma vez. Uma mudança bem implementada e com resultados visíveis abre espaço para a próxima. Comece pela fase onde a resistência é menor e o impacto é mais visível.
2
Custo da qualidade por fase no seu projeto

Calcule o custo real de bugs em cada fase do SDLC.

  • 1. Para os últimos 10 bugs de produção, rastreie: quando foi introduzido, quando descoberto e quanto tempo de dev foi gasto na correção. Calcule o MTTR por bug.
  • 2. Para os últimos 10 bugs encontrados em QA, faça o mesmo. Compare o MTTR: bugs em produção levam quanto vezes mais tempo para corrigir do que em QA?
  • 3. Calcule o custo mensal de bugs de produção (MTTR x custo hora x número de bugs) e compare com o custo do processo de QA. O QA é um custo ou um investimento?
💡Dica: Na maioria dos projetos, bug de produção custa 10 a 100x mais do que o mesmo bug encontrado em QA. Esse dado, calculado para o seu projeto, é o argumento mais poderoso.
3
DoR e DoD orientados a qualidade

Colabore com o time para criar critérios que embarcam qualidade desde o início.

  • 1. Revise o DoD atual. Para cada critério: ele é verificável objetivamente? Quem verifica? Com que frequência é violado sem consequências? Critérios não verificados não existem na prática.
  • 2. Proponha adições ao DoR focadas em qualidade: critérios de aceite testáveis, casos de regressão identificados e dependências de dados de teste mapeadas.
  • 3. Após 2 sprints com DoR e DoD revisados, meça o impacto: houve redução de stories voltando para o dev após QA? Menos bugs? Menor tempo de ciclo?
💡Dica: DoR e DoD são contratos sociais do time. Funcionam quando todos entenderam por que cada critério existe e os usam para tomar decisões, não para marcar checkboxes.
∞ Fundamento Atemporal

Estratégia de Qualidade de Ponta a Ponta

Qualidade não começa no teste e não termina no deploy. Uma estratégia sólida conecta cada fase do ciclo, da ideia ao monitoramento em produção, com a prática certa para o tipo de sistema que você está testando. Web, API, mobile, desktop, monolito, microsserviços: cada contexto muda as ferramentas, as prioridades e os riscos. A IA entra como amplificadora, não como substituta do pensamento estratégico.

🗺️

Leia o Contexto Antes de Definir Qualquer Estratégia

Não existe estratégia de qualidade universal. Antes de decidir o que testar, como automatizar e onde investir esforço, o QA precisa entender o tipo de sistema, a arquitetura e o perfil de risco do produto. Um monolito tem riscos diferentes de microsserviços. Uma API pública tem SLA diferente de uma tela interna. Mobile tem restrições que web não tem. A estratégia nasce dessa leitura.

🏋️ Mapeie seu contexto
  • Tipo de interface: Web (responsiva? SPA? SSR?) · API REST/GraphQL/gRPC · Mobile nativo (iOS/Android) ou híbrido (React Native, Flutter) · Desktop (Electron, WPF, nativo) · Sistemas embarcados ou CLI
  • Arquitetura de backend: Monolito (mudanças têm escopo amplo, regressão é crítica) · Microsserviços (contratos entre serviços são o maior risco) · Serverless (cold start, idempotência, limites de execução) · Event-driven (ordem de eventos, consistência eventual)
  • Perguntas que definem a estratégia: Qual tipo de falha causa mais dano ao usuário? Onde historicamente aparecem mais bugs? Qual é o custo de uma falha em produção? Quão rápido precisa ser o feedback do pipeline?
  • Com IA: Use um LLM para gerar um mapa de riscos inicial do sistema descrevendo a arquitetura. Pergunte: "Quais são os cenários de falha mais prováveis para um sistema com estas características?" Use como ponto de partida para discussão com o time, não como verdade absoluta.
💡

Fase 1: Descoberta e Requisitos

Qualidade na descoberta significa questionar antes de especificar. O QA transforma ideias vagas em requisitos testáveis, identificando ambiguidades, casos de borda e critérios de aceite verificáveis antes que qualquer linha de código seja escrita. O que muda por contexto é o tipo de pergunta que precisa ser feita.

🏋️ Perguntas por tipo de sistema
  • Web / SPA: Qual o comportamento esperado sem JavaScript? Como funciona em conexão lenta? Quais estados intermediários (loading, empty, error) estão mapeados?
  • API: O contrato está documentado (OpenAPI/Swagger)? Quais são os limites de rate limiting? O que acontece com payloads malformados ou campos ausentes?
  • Mobile: O comportamento muda com permissões negadas? Como a feature se comporta offline? Qual o impacto no consumo de bateria?
  • Microsserviços: Quais outros serviços são afetados por esta mudança? O contrato com serviços consumidores foi revisado? Há impacto em eventos publicados?
  • Monolito: Quais módulos compartilham a base de código alterada? Quais fluxos de usuário cruzam esta funcionalidade?
  • Com IA: Cole o texto da história de usuário num LLM e peça: "Liste edge cases, condições de erro e perguntas de clarificação que um QA deveria fazer antes do desenvolvimento." Leve o resultado para o Three Amigos, não substitui a conversa, acelera a preparação.
🎨

Fase 2: Design e Arquitetura

Na fase de design, o QA questiona a testabilidade da solução proposta. As perguntas variam radicalmente pelo tipo de sistema: numa API, o foco é no contrato e nos códigos de erro; numa aplicação mobile, é na estrutura de componentes e acessibilidade; num sistema de microsserviços, é no isolamento de serviços e nas fronteiras de falha.

🏋️ Checklist de testabilidade por contexto
  • Web: Componentes têm estados mapeados no Figma (default, hover, focus, disabled, loading, error, empty, success)? A hierarquia semântica do HTML suporta testes por acessibilidade?
  • API REST/GraphQL: Os endpoints seguem convenções REST? Os erros retornam códigos semânticos (4xx para cliente, 5xx para servidor)? Existe schema de validação definido?
  • Mobile: A navegação entre telas é testável sem UI (deep links)? Há separação entre lógica de negócio e camada de apresentação?
  • Microsserviços: Os contratos entre serviços estão formalizados (Pact, OpenAPI)? Há circuit breakers para dependências externas? Os eventos têm schema versionado?
  • Monolito: As camadas de negócio estão desacopladas o suficiente para testes unitários? Há acesso direto ao banco de dados que dificulta mocks?
  • Com IA: Descreva a arquitetura proposta para um LLM e peça: "Identifique pontos de falha potenciais e quais aspectos desta arquitetura dificultam a testabilidade." Use para complementar a revisão técnica.
⌨️

Fase 3: Desenvolvimento

Durante o desenvolvimento, a estratégia de qualidade se manifesta nos testes escritos junto com o código e nas revisões de PR. O que o QA observa e questiona muda pelo contexto: num sistema distribuído, a atenção vai para tratamento de falhas e retries; num app mobile, para gestão de estado e comportamento offline; numa API pública, para consistência do contrato.

🏋️ O que revisar no PR por tipo de sistema
  • Web: Os estados de erro estão tratados na UI? A funcionalidade é acessível por teclado? Há mensagens claras para o usuário em falha?
  • API: Os endpoints novos têm testes de contrato? As respostas de erro são consistentes com o restante da API? Há validação de input antes de chegar na regra de negócio?
  • Mobile: A feature funciona com permissões negadas? Foi testada em modo avião? Há memory leaks evidentes no ciclo de vida da activity/view?
  • Microsserviços: O serviço falha gracefully quando uma dependência está indisponível? Os logs incluem correlation ID para rastreamento distribuído? Os eventos publicados têm idempotência garantida?
  • Desktop: Funciona sem conexão de internet (se aplicável)? Recupera estado após crash? Comporta-se corretamente com múltiplas instâncias abertas?
  • Com IA: Cole o diff do PR num LLM e peça: "Como QA, que cenários de teste você criaria para esta mudança? Quais edge cases não estão cobertos pelos testes existentes?" Útil especialmente para PRs grandes ou em áreas de código desconhecidas.
🧪

Fase 4: Estratégia de Testes por Tipo de Sistema

A pirâmide de testes é um princípio, não uma receita. A proporção ideal entre unitários, integração e E2E muda radicalmente pelo tipo de sistema. Microsserviços dependem mais de testes de contrato. Mobile precisa de testes de dispositivo real. APIs são bem cobertas por testes de integração. Entender onde cada tipo de teste entrega mais valor é o coração da estratégia.

🏋️ Pirâmide adaptada por contexto
  • Web (SPA/SSR): Unitários para lógica de componente e regras de negócio · Integração para chamadas de API e estado global · E2E para fluxos críticos (checkout, onboarding, autenticação) · Ferramentas: Jest, Vitest, Playwright, Cypress
  • API REST/GraphQL: Unitários para lógica de negócio e transformações · Integração para chamadas ao banco e serviços externos (com mocks) · Contrato para garantir compatibilidade com consumidores · Ferramentas: REST Assured, Supertest, Pact, Postman/Newman
  • Mobile nativo/híbrido: Unitários para regras de negócio e ViewModels · UI para fluxos críticos em dispositivo real · Compatibilidade em diferentes versões de OS e tamanhos de tela · Ferramentas: XCTest, Espresso, Detox, Appium
  • Microsserviços: Unitários por serviço · Contrato entre serviços (Pact) · Integração com dependências reais em ambiente controlado · E2E apenas para fluxos de negócio end-to-end · Ferramentas: Pact, Testcontainers, k6
  • Monolito: Maior ênfase em testes de regressão de integração · E2E para fluxos críticos com maior abrangência · Atenção especial a módulos com alto acoplamento · Ferramentas: Selenium, Playwright, Cucumber
  • Desktop: Unitários para lógica de negócio · UI automatizada para fluxos repetitivos · Testes manuais exploratórios para interações complexas · Ferramentas: WinAppDriver, Pywinauto, TestComplete
  • Com IA: Use IA para gerar casos de teste a partir de critérios de aceite: "Dado este critério de aceite, gere uma suíte de casos de teste em formato Given/When/Then cobrindo happy path, edge cases e cenários de erro." Revise e complemente, a IA tende a cobrir o óbvio, o QA cobre o que a IA não imagina.
🚀

Fase 5: Pipeline e Gates de Qualidade

O pipeline de CI/CD traduz a estratégia em automação obrigatória. Gates de qualidade definem o que impede um deploy. A configuração ideal do pipeline varia pelo tipo de sistema: mobile tem o desafio do build de dispositivo; microsserviços precisam testar contratos entre serviços; aplicações web têm E2E lentos que precisam rodar de forma seletiva.

🏋️ Configuração de pipeline por contexto
  • Web: PR → unitários + lint (2min) → staging → integração + acessibilidade automatizada → E2E em headless → produção. Gate mínimo: testes passando + cobertura ≥ threshold definido.
  • API: PR → unitários + análise estática → testes de contrato (Pact) → testes de integração com banco em container → testes de performance básicos → produção.
  • Mobile: PR → unitários + lint → build de staging → testes de UI no emulador → testes em dispositivo real (Firebase Test Lab / BrowserStack) → produção via store.
  • Microsserviços: PR por serviço → unitários → testes de contrato com Pact Broker → deploy em staging → smoke tests de integração → canary release → produção.
  • Com IA: Use IA para manter os testes saudáveis: "Este teste falhou com esta mensagem de erro e este stack trace. Identifique se é flaky test, mudança de comportamento ou bug real." Economiza tempo de triagem de falhas no pipeline.
📡

Fase 6: Produção e Observabilidade

Em produção, a estratégia de qualidade se manifesta como capacidade de observar, detectar e responder. O que observar muda pelo tipo de sistema: APIs monitoram latência e taxa de erro por endpoint; mobile monitora crashes e ANRs; microsserviços rastreiam chamadas distribuídas; SPAs monitoram erros de JavaScript e Web Vitals. A IA começa a aparecer aqui como analisadora de logs e anomalias.

🏋️ O que monitorar por tipo de sistema
  • Web (SPA/SSR): Core Web Vitals (LCP, FID, CLS) · Taxa de erros JS (Sentry) · Fluxos com maior abandono (analytics) · Tempo de carregamento por região
  • API: Latência P50/P95/P99 por endpoint · Taxa de erro 4xx e 5xx · Throughput e saturação · SLA por consumidor
  • Mobile: Crash rate por versão de OS e dispositivo · ANR (Application Not Responding) · Tempo de inicialização frio · Rating na store como proxy de qualidade percebida
  • Microsserviços: Distributed tracing (Jaeger, Zipkin, Datadog APM) · Taxa de falha por serviço · Latência de chamadas entre serviços · Dead letter queues em sistemas de eventos
  • Com IA: Ferramentas como Datadog Watchdog, Dynatrace Davis e New Relic AI já usam ML para detectar anomalias automaticamente. Para times sem essas ferramentas: exporte logs de erros e peça a um LLM para "identificar padrões, picos anômalos e erros recorrentes neste conjunto de logs." Use como triagem inicial, não como diagnóstico definitivo.
🤖

IA no Processo de Qualidade: Onde Faz Sentido

IA não substitui o julgamento do QA. Ela amplifica: acelera tarefas repetitivas, sugere o que você pode não ter pensado e analisa volumes de dado que seriam impraticáveis manualmente. O erro mais comum é usar IA para substituir o pensamento crítico. O uso correto é usar IA para liberar tempo para mais pensamento crítico.

🏋️ Onde IA agrega vs. onde atrapalha
  • ✅ Geração de casos de teste: A partir de critérios de aceite, IA gera rapidamente happy path + edge cases + cenários de erro. O QA revisa, descarta o óbvio demais e adiciona o que a IA não imaginou (contexto real de usuário, bugs históricos, comportamento em condições de stress).
  • ✅ Análise de cobertura e gaps: "Aqui estão meus testes atuais e aqui está o código. Que caminhos de código não estão cobertos? Que regras de negócio parecem não ter teste correspondente?"
  • ✅ Triagem de falhas no CI: "Este teste falhou com esta saída. É flaky? É regressão? Que mudança recente pode ter causado?" Economiza tempo de diagnóstico.
  • ✅ Geração de dados de teste: "Gere 20 variações de payload para este endpoint de criação de usuário, incluindo casos com campos obrigatórios ausentes, valores no limite e caracteres especiais."
  • ✅ Documentação de bugs: "Com base nesta descrição e neste stack trace, escreva um bug report estruturado com passos para reprodução, comportamento esperado e evidências relevantes."
  • ❌ Onde não usar sem revisão crítica: Decisões sobre o que não testar (requer julgamento de risco) · Interpretação de requisitos ambíguos (requer conversa com stakeholders) · Diagnóstico final de causa raiz (requer contexto de sistema que a IA não tem) · Validação de experiência do usuário (requer empatia humana).
🔁

Fechando o Ciclo: Melhoria Contínua

Uma estratégia de qualidade sem retrospectiva é estática. O ciclo se fecha quando o que foi observado em produção alimenta as decisões do próximo sprint. O tipo de sistema determina onde focar: microsserviços tendem a ter falhas de integração; mobile tem regressões de compatibilidade; monolitos sofrem com efeitos colaterais de mudanças em código compartilhado.

🏋️ Como retroalimentar a estratégia
  • Quality retrospective mensal: Bugs escapados por fase do ciclo · Cobertura real vs. esperada · MTTD (tempo médio até detecção) · MTTR (tempo médio até correção) · Flaky tests acumulados no pipeline
  • Registro de "bugs que escaparam": Para cada bug crítico em produção, em qual fase poderia ter sido detectado? Havia cobertura de teste? O que foi adicionado para prevenir recorrência?
  • Revisão trimestral da estratégia: O produto cresceu em complexidade? Mudou de arquitetura? A equipe cresceu? A estratégia de qualidade precisa acompanhar a evolução do sistema.
  • Com IA: Consolide os dados de qualidade do trimestre (bugs por severidade, tempo de ciclo, falhas de pipeline) e peça: "Com base nestes dados, quais são os padrões mais preocupantes e que tipo de melhoria no processo teria maior impacto?" Use como insumo para a discussão de prioridades, não como decisão final.
🧪

Laboratório: Construa a Estratégia do Seu Sistema

Do diagnóstico ao plano de ação, adaptado ao tipo de sistema que você testa

1
Perfil do seu sistema e gaps atuais

Antes de definir qualquer estratégia, mapeie o que você está testando e onde estão os buracos.

  • 1. Classifique seu sistema principal: tipo de interface, arquitetura de backend, integrações externas críticas, volume de usuários e SLA esperado.
  • 2. Para cada fase do ciclo (descoberta, design, desenvolvimento, teste, pipeline, produção), responda: O que o time faz hoje? O que não faz? Qual o impacto percebido da ausência?
  • 3. Identifique os 3 tipos de bug mais frequentes nos últimos 3 meses. Em qual fase cada um poderia ter sido detectado? O que teria sido necessário para isso?
  • 4. Com IA: Descreva o seu sistema e os bugs recorrentes para um LLM. Peça sugestões de práticas de qualidade específicas para esse tipo de sistema. Compare com o que você já faz.
2
Defina a pirâmide de testes ideal para o seu contexto

A pirâmide certa depende do tipo de sistema. Defina a sua.

  • 1. Liste as ferramentas de teste que o time usa hoje em cada nível (unitário, integração, E2E, contrato, performance).
  • 2. Estime a proporção atual: quantos testes unitários, de integração e E2E existem? A proporção faz sentido para o tipo de sistema?
  • 3. Identifique o nível com menor cobertura em relação ao risco que representa. Defina uma meta concreta: "Nos próximos 30 dias, adicionamos X testes de [tipo] cobrindo [área]."
3
Estratégia em uma página com IA

Documente a estratégia do seu time de forma que qualquer pessoa entenda, e use IA como parceira na construção.

  • 1. Para cada fase do ciclo, escreva em uma frase: "Nesta fase, garantimos qualidade fazendo [ação] com o objetivo de [resultado esperado]."
  • 2. Liste as ferramentas que suportam cada fase e onde IA já entra (ou poderia entrar) no processo.
  • 3. Com IA: Compartilhe o rascunho da estratégia com um LLM e peça: "Que gaps você identifica nesta estratégia para um sistema do tipo [descreva o seu]? O que está faltando?" Use o feedback para revisar.
  • 4. Compartilhe o documento com o time. Uma estratégia que o time não entende é uma estratégia que não funciona.
💡 Dica: A melhor estratégia de qualidade é a que o time executa de verdade, não a mais sofisticada no papel. IA ajuda a construir mais rápido. Julgamento humano decide o que é certo para o seu contexto.
4
Estratégia de testes por tipo de sistema

Defina estratégia adequada para diferentes tipos de sistema.

  • 1. Para cada tipo: API REST pura, SPA React com BFF, microsserviços com mensageria assíncrona e mobile nativo, escreva estratégia de 1 parágrafo. Mencione quais camadas da pirâmide têm mais peso e por quê.
  • 2. Para um projeto real do seu portfólio, identifique qual tipo mais se aproxima. A estratégia atual está alinhada ou foi herdada de projeto anterior com características diferentes?
  • 3. Proponha 3 ajustes na estratégia atual. Para cada ajuste, estime: esforço de implementação, ganho esperado em cobertura de risco e melhoria no tempo de feedback.
💡Dica: Estratégia de testes de API sem estado é completamente diferente de sistema event-driven. Copiar estratégias sem adaptar ao tipo de sistema é causa comum de cobertura inadequada.
5
Pipeline, gates e qualidade no SDLC completo

Projete um pipeline de qualidade com gates adequados para cada fase.

  • 1. Mapeie o pipeline ideal: verificações em pre-commit, PR, build, staging e pós-deploy. Para cada uma, defina o que bloqueia vs. o que apenas notifica e o tempo máximo aceitável.
  • 2. Compare com o pipeline atual: quais verificações estão faltando? Quais estão no lugar errado? Quais deveriam bloquear mas apenas notificam?
  • 3. Implemente a mudança de maior impacto com menor esforço. Meça em 2 semanas: o gate bloqueou PRs problemáticos? Quantos bugs foram evitados?
💡Dica: Gate que leva 30 minutos para executar no PR vai ser ignorado ou desativado. O tempo de execução é tão importante quanto o que o gate verifica. Gates rápidos são gates usados.
6
IA no processo de qualidade: onde faz sentido

Avalie de forma crítica onde IA adiciona valor real.

  • 1. Liste todas as atividades de QA que você executa. Para cada uma, avalie: a IA pode fazer melhor, igual ou pior do que você? Com qual nível de supervisão?
  • 2. Para as atividades onde a IA pode ajudar, defina experimento: use IA por 1 sprint e meça o impacto em tempo economizado, qualidade do output e satisfação pessoal.
  • 3. Produza 'mapa de IA no QA': onde usar como assistente (você dirige, IA executa), como colaborador (juntos) e onde não usar (julgamento insubstituível). Compartilhe com o time.
💡Dica: Adoção acrítica de IA é tão problemática quanto rejeição acrítica. O profissional que define conscientemente quando e como usar IA é mais valioso do que o que usa para tudo ou recusa usar nada.
7
Produção e observabilidade na estratégia

Integre observabilidade como camada de qualidade em produção.

  • 1. Mapeie o que acontece com qualidade após o deploy: existe monitoramento sintético? Há alertas? Os logs de erro são revisados proativamente ou só quando o usuário reclama?
  • 2. Configure 'quality check' pós-deploy: script que roda 15 minutos após cada deploy, verifica métricas críticas e notifica o time se algo saiu do baseline.
  • 3. Defina os SLOs de qualidade do sistema: níveis mínimos de disponibilidade, latência e taxa de erro. Configure alertas para cada SLO. Apresente ao produto como critérios objetivos de qualidade.
💡Dica: Estratégia de testes que termina no deploy não é completa. Produção é onde a qualidade é validada pelo usuário real. Observabilidade é a camada de testes que nunca para.
8
Fechando o ciclo: melhoria contínua com dados

Estabeleça processo de melhoria que usa dados reais para evoluir a estratégia.

  • 1. Para os últimos 3 meses, colete: bugs por fase, tempo médio de correção, taxa de regressão e coverage delta mês a mês.
  • 2. Identifique a maior oportunidade: onde o investimento de 1 semana geraria maior impacto? Priorize com dados, não com intuição.
  • 3. Implemente a melhoria, meça e documente no formato: 'investimos X horas em Y, o resultado foi Z (redução de W% em bugs de produção / economia de N horas de correção)'.
💡Dica: Melhoria contínua sem dados é otimismo. Com dados é estratégia. A diferença entre 'trabalha duro' e 'gera impacto' está no ciclo: medir, agir e medir novamente.
9
Discovery: lendo o contexto antes da estratégia

Pratique a leitura de contexto que precede qualquer estratégia bem definida.

  • 1. Para um sistema desconhecido (ou fictício), conduza discovery de qualidade: entreviste PO, tech lead e dev. Perguntas essenciais: quais fluxos críticos de negócio, onde já houve incidentes, quais partes do código todos evitam mexer.
  • 2. Com base nas entrevistas, mapeie: áreas de alto risco (histórico de bugs + alto impacto), baixo risco (estáveis + baixo impacto) e incerteza (ninguém sabe bem como funciona).
  • 3. Escreva documento de estratégia de 2 páginas: contexto, abordagem por área de risco, distribuição da pirâmide proposta, ferramentas recomendadas e critérios de sucesso.
💡Dica: A pior estratégia de testes é a copiada de outro projeto sem adaptação. Cada sistema tem suas peculiaridades, história de bugs e contexto. O discovery transforma estratégia genérica em eficaz.
🟠 Pleno · Módulo 9

Segurança para QA

Segurança não é responsabilidade exclusiva do time de segurança: QA tem papel ativo em identificar vulnerabilidades antes que cheguem em produção. Este módulo cobre o essencial do OWASP Top 10 pela perspectiva do testador.

🔐

OWASP Top 10 pelo olhar do QA

As 10 vulnerabilidades mais críticas em aplicações web, traduzidas em casos de teste que um QA pode executar sem ser um especialista em segurança.

🏋️ Exercícios Rápidos
  • Para cada feature que você testa, pergunte: existe input de usuário não validado? Existe autenticação necessária que pode ser bypassada? Dados sensíveis são expostos em logs ou URLs?
  • Execute um teste de injeção básico: em qualquer campo de texto, tente inserir ' OR '1'='1 e observe o comportamento. Um erro de banco de dados visível é uma vulnerabilidade de SQL Injection.
  • Verifique se tokens de autenticação aparecem em URLs (ex: /reset?token=abc123). Tokens em URLs ficam em logs de servidor e histórico do browser.
🔑

Autenticação e Autorização: onde mais bugs aparecem

A diferença entre autenticação (quem você é) e autorização (o que você pode fazer) parece simples, mas é onde a maioria dos bugs de segurança de negócio vive.

🏋️ Exercícios Rápidos
  • Teste de escalada de privilégio horizontal: logue como usuário A, copie a URL de um recurso do usuário A, abra em sessão do usuário B. O usuário B consegue ver os dados do A?
  • Teste de sessão: faça logout e pressione "voltar" no browser. A página protegida ainda aparece? O sistema aceita requisições com o token antigo?
  • Verifique se todas as rotas da API têm validação de autenticação: não apenas as rotas de front-end.
🛡️

Testes de segurança no pipeline

DAST (Dynamic Application Security Testing) pode ser parte do pipeline de QA: não precisa esperar o time de segurança para ter cobertura básica.

🏋️ Exercícios Rápidos
  • Configure o OWASP ZAP em modo passivo apontado para o ambiente de staging. Execute os testes funcionais normais: o ZAP analisa o tráfego automaticamente e reporta vulnerabilidades detectadas.
  • Adicione um scan básico do ZAP como step no pipeline de CI. Não precisa bloquear: comece como gate de visibilidade antes de tornar bloqueante.
🧪

Laboratório: Seu Primeiro Teste de Segurança

Use o OWASP WebGoat para praticar sem risco

1
Testando vulnerabilidades no WebGoat

WebGoat é uma aplicação intencionalmente vulnerável criada pela OWASP para prática segura.

  • 1. Instale o WebGoat via Docker: docker run -p 8080:8080 webgoat/webgoat. Acesse em localhost:8080/WebGoat.
  • 2. Complete o módulo "SQL Injection (Intro)": entenda como a vulnerabilidade funciona e como um testador a detecta.
  • 3. Complete o módulo "Broken Access Control": teste o acesso a recursos que não deveriam estar disponíveis para o seu usuário.
  • 4. Para cada vulnerabilidade encontrada, escreva um caso de teste no formato que você usaria no seu trabalho real: pré-condição, passos, resultado esperado (sem vulnerabilidade) e resultado obtido.
💡 Dica: O objetivo não é se tornar especialista em segurança: é desenvolver o instinto de "isso pode ser um problema de segurança?" para levantar durante refinamentos e testes.
2
Testando autenticação e autorização

Identifique vulnerabilidades em mecanismos de autenticação.

  • 1. No OWASP Juice Shop, tente: login com SQL injection (admin' --), força bruta nas primeiras 5 tentativas e acesso a rota protegida sem token.
  • 2. Teste autorização horizontal: faça login como usuário A, obtenha ID de recurso do usuário B e tente acessar diretamente pela URL ou API. O sistema bloqueia?
  • 3. Para cada vulnerabilidade encontrada, escreva um caso de teste de regressão que poderia ser adicionado ao pipeline para garantir que a correção não regride.
💡Dica: Autorização horizontal (acessar dados de outro usuário) é mais comum e difícil de detectar do que autorização vertical. Teste os dois.
3
OWASP ZAP no pipeline

Configure scan de segurança automatizado no CI.

  • 1. Configure OWASP ZAP em modo baseline scan no GitHub Actions usando a action oficial zaproxy/action-baseline. Aponte para o Juice Shop ou similar. Analise o relatório.
  • 2. Categorize os achados por risco: High, Medium, Low e Informational. Para cada High, pesquise o impacto real no contexto da aplicação.
  • 3. Configure o pipeline para falhar com vulnerabilidades High. Para Medium, configure como warning. Documente a política de tratamento por nível de risco.
💡Dica: ZAP baseline scan é conservador e tem poucos falsos positivos. É o ponto de entrada ideal para segurança no CI.
🟠 Pleno · Módulo 10

Performance para QA

Testes de performance não são só para o Sênior. O Pleno precisa entender o básico de performance para identificar problemas cedo, interpretar resultados e colaborar com a estratégia de carga antes que o produto escale.

Tipos de teste de performance

Load test, stress test, spike test e soak test têm objetivos diferentes. Saber qual usar em qual situação é o primeiro passo para fazer testes de performance úteis.

🏋️ Exercícios Rápidos
  • Load test: comportamento sob carga esperada (ex: 500 usuários simultâneos). Stress test: encontrar o ponto de quebra (aumenta carga até o sistema falhar). Spike test: pico repentino de carga. Soak test: carga normal por período longo (vazamentos de memória).
  • Para o produto que você testa, qual tipo de teste de performance faz mais sentido agora? Um produto em lançamento precisa de load test. Um sistema de billing precisa de soak test. Um e-commerce em Black Friday precisa de spike test.
📊

Métricas que importam: tempo de resposta, throughput, error rate

Saber o que medir é mais importante do que saber como medir. Tempo de resposta médio esconde outliers. p95 e p99 revelam a experiência do usuário real.

🏋️ Exercícios Rápidos
  • Identifique os SLOs de performance do produto (ex: "95% das requisições respondem em menos de 500ms"). Se não existirem, essa é a conversa a ter com o PO antes de qualquer teste de performance.
  • Execute um teste simples com k6 ou JMeter na API mais crítica. Observe a diferença entre tempo médio, p95 e p99. O p99 costuma ser 3-5x maior que a média: é esse número que o usuário mais lento experimenta.
🔧

k6: testes de performance como código

k6 é uma ferramenta moderna de performance testing com scripts em JavaScript, integração nativa com CI/CD e outputs que se integram com Grafana. Ideal para QAs que já têm noção de automação.

🏋️ Exercícios Rápidos
  • Instale o k6 e execute o script de exemplo contra uma API pública: k6 run script.js. Entenda cada linha do output: VUs (virtual users), iterations, http_req_duration.
  • Escreva um script básico que simula 10 usuários fazendo login e consultando um endpoint por 30 segundos. Adicione um threshold: se p95 ultrapassar 1s, o teste falha.
🧪

Laboratório: Seu Primeiro Teste de Carga com k6

Do zero ao threshold em um script real

1
Load test completo em uma API pública
  • 1. Instale o k6: k6.io/docs/get-started/installation
  • 2. Crie o script load_test.js simulando 20 VUs por 60 segundos no endpoint https://test-api.k6.io/public/crocodiles/.
  • 3. Adicione thresholds: http_req_duration: ['p95 < 500'] e http_req_failed: ['rate < 0.01'].
  • 4. Execute e analise: o threshold passou? Qual foi o p99? Houve erros? Onde estava o gargalo?
  • 5. Repita com 100 VUs. Como as métricas mudaram? Esse delta é o comportamento de performance da API sob carga.
💡 Um teste de performance sem threshold definido não é um teste: é só uma observação. O threshold é o critério de qualidade que transforma o número em decisão.
2
Definindo e medindo métricas de performance

Estabeleça SLOs e meça o estado atual.

  • 1. Para a reqres.in, defina SLOs: P50, P95 e P99 para o endpoint mais crítico. Use Postman Runner para executar 100 requisições e calcule os percentis.
  • 2. Identifique o gap entre P50 e P99: se P50 é 200ms e P99 é 3s, 1% dos usuários tem experiência muito pior. Esse gap sinaliza problema intermitente.
  • 3. Documente os SLOs como parte do DoD: nenhuma feature entra em produção sem SLOs definidos e medidos em staging.
💡Dica: Nunca use apenas a média para medir performance. A média esconde outliers que causam a pior experiência. Use sempre P95 e P99.
3
Analisando resultados com k6

Execute teste de carga e interprete os resultados.

  • 1. Escreva script k6 que simula login + listagem de produtos. Configure: ramp-up de 0 a 50 VUs em 1 min, sustentado em 50 VUs por 2 min, ramp-down em 30s.
  • 2. Execute e analise: qual o throughput (req/s)? Quantas requisições falharam? O tempo de resposta aumentou progressivamente ou se manteve estável?
  • 3. Escreva recomendação de 1 parágrafo para o time: o sistema aguenta a carga atual? Qual o limite estimado antes da degradação? O que deve ser investigado primeiro?
💡Dica: Um teste de carga que só mostra números não tem valor. O valor está na interpretação: o sistema vai aguentar o Black Friday?
🟠 Pleno · Módulo 11

Testes de Contrato

Em arquiteturas com múltiplos serviços ou times, a pergunta mais difícil de responder é: "se o serviço A mudar, o serviço B vai quebrar?" Testes de contrato respondem essa pergunta de forma automática, antes do deploy.

📜

O que é um contrato entre serviços

Um contrato é o acordo sobre como dois serviços se comunicam: quais campos existem, quais são obrigatórios, quais os tipos e quais os status codes possíveis. Quando o contrato muda sem comunicação, integração quebra em produção.

🏋️ Exercícios Rápidos
  • Mapeie as integrações do sistema que você testa: quais serviços consomem APIs de outros serviços? Para cada integração, existe documentação do contrato? Está atualizada?
  • Pense no último bug de integração em produção: o contrato havia mudado sem atualização do consumidor? Esse é o problema que testes de contrato resolvem.
🤝

Consumer-Driven Contract Testing com Pact

No modelo consumer-driven, o consumidor define o contrato (o que ele espera receber) e o provider verifica que consegue satisfazê-lo. Isso inverte a responsabilidade: o consumidor especifica, o provider confirma.

🏋️ Exercícios Rápidos
  • No lado do consumidor: escreva um teste Pact que define as expectativas: "quando chamo GET /users/1, espero receber um objeto com id, name e email". O Pact gera um arquivo de contrato (pact file).
  • No lado do provider: configure a verificação Pact que testa se o serviço real satisfaz todos os contratos publicados pelos consumidores.
🔗

Contract testing no pipeline

O valor real do contract testing aparece no pipeline: o provider não pode fazer deploy se quebrar o contrato de qualquer consumidor. Isso cria uma rede de segurança automática entre times.

🏋️ Exercícios Rápidos
  • Configure o Pact Broker (ou PactFlow gratuito) para publicar e versionar contratos. O broker é o intermediário entre consumidores e providers.
  • Adicione a verificação de contratos como step no pipeline do provider. Se um contrato for violado, o build falha: antes de qualquer deploy.
🧪

Laboratório: Implementando Contract Testing do Zero

Consumer, provider e Pact Broker em um fluxo completo

1
Pact Workshop completo
  • 1. Clone o repositório de workshop oficial: github.com/pact-foundation/pact-workshop-js (ou a versão na sua linguagem).
  • 2. Siga os passos do workshop: escreva o teste no consumidor, gere o pact file, publique no broker, verifique no provider.
  • 3. Introduza intencionalmente uma quebra de contrato no provider (remova um campo). Execute a verificação. O que acontece?
  • 4. Corrija a quebra e execute novamente. O pipeline passa. Essa é a rede de segurança do contract testing.
💡 Contract testing não substitui testes de integração end-to-end: ele os complementa. Use testes de contrato para feedback rápido no pipeline e integração end-to-end para validação de fluxos completos de negócio.
2
Escrevendo e verificando contrato com Pact

Implemente um contrato consumer-driven e verifique no provider.

  • 1. No consumer, escreva um teste Pact para GET /users/1 esperando objeto com id, name e email. Execute: ele gera o arquivo de contrato JSON automaticamente.
  • 2. No provider, adicione verificação Pact: carrega o contrato e faz chamadas reais verificando que cada interação é satisfeita. Execute contra reqres.in.
  • 3. Simule quebra de contrato: adicione campo no consumer que o provider não retorna. Verifique que o teste do provider falha. Esse é o valor central do contract testing.
💡Dica: O contrato é gerado pelo consumer, não pelo provider. Garante que o provider é testado contra o que o consumer realmente usa, não contra o que o provider acha.
3
Pact Broker e can-i-deploy no pipeline

Configure o broker e use can-i-deploy como gate de qualidade.

  • 1. Configure PactFlow (gratuito para devs) como broker. Configure consumer para publicar o contrato e provider para verificar após cada build.
  • 2. Use pact-broker can-i-deploy no pipeline do consumer antes do deploy: verifica compatibilidade com todas as versões do provider em produção. Bloqueie se incompatível.
  • 3. Simule deploy arriscado: publique consumer com contrato quebrado. Verifique que can-i-deploy bloqueia antes de produção. Calcule o tempo economizado vs. um bug de integração em produção.
💡Dica: can-i-deploy responde em segundos a pergunta que antes exigia ambiente de integração completo: 'posso fazer deploy dessa versão com segurança?'
🟠 Pleno · Módulo 12

Shift-Left Testing

Shift-left é a prática de mover as atividades de teste para fases mais cedo no ciclo de desenvolvimento. Em vez de testar apenas o que foi construído, o QA Pleno participa ativamente antes e durante o desenvolvimento: prevenindo bugs em vez de só encontrá-los.

⬅️

Por que bugs custam mais quando encontrados tarde

O custo de corrigir um bug cresce exponencialmente conforme ele avança no ciclo. Um bug encontrado nos requisitos custa 1x. O mesmo bug em produção custa 100x. Shift-left é uma decisão econômica, não só técnica.

🏋️ Exercícios Rápidos
  • Para os últimos 5 bugs que chegaram em produção no seu time, identifique em qual fase eles foram introduzidos (requisito, design, código) e em qual fase foram detectados. Calcule o "custo de atraso" de cada um.
  • Apresente esse levantamento para o time em forma de dado: não de crítica. "Se tivéssemos detectado esses 3 bugs no refinamento, economizaríamos X horas de retrabalho."
🔍

QA no Refinamento: prevenindo bugs antes do código existir

O refinamento é o momento mais valioso para o QA. Uma pergunta certa nessa fase: "o que acontece quando o campo está vazio?": evita um bug que seria encontrado semanas depois em produção.

🏋️ Exercícios Rápidos
  • Para as próximas 3 histórias em refinamento, prepare 5 perguntas de qualidade antes da sessão: edge cases, fluxos alternativos, comportamentos de erro, integrações afetadas, impacto em features existentes.
  • Após o refinamento, verifique: quantas perguntas geraram mudança nos critérios de aceite? Cada mudança é um bug prevenido.
  • Proponha ao time que histórias sem pelo menos um ciclo de perguntas do QA não entrem em sprint. Isso cria um gate natural de qualidade.
✍️

Three Amigos: QA, Dev e PO no mesmo entendimento

A técnica Three Amigos reúne QA, desenvolvedor e Product Owner para revisar uma história juntos antes do sprint. Cada papel traz uma perspectiva diferente: e a interseção dessas perspectivas revela o que estava implícito.

🏋️ Exercícios Rápidos
  • Escolha a história mais complexa do próximo sprint. Antes do planning, reúna QA, dev e PO por 20 minutos. Cada um escreve em silêncio: "O que pode dar errado aqui?" Compare as listas: diferenças revelam gaps de entendimento.
  • Use Example Mapping: para cada critério de aceite, o QA sugere exemplos concretos (Given/When/Then). Exemplos que geram discussão são os que precisam de mais clareza.
🤝

Pair Testing com Desenvolvedores

Pair testing é QA e dev testando juntos durante o desenvolvimento: não depois. O dev entende o código internamente; o QA pensa como usuário e adversário. Juntos, encontram muito mais do que separados.

🏋️ Exercícios Rápidos
  • Proponha uma sessão de 1 hora de pair testing com um dev: ele explica o que construiu enquanto você testa ao vivo. A comunicação direta elimina o ciclo de "abre bug → dev questiona → QA esclarece → dev corrige".
  • Peça ao dev para mostrar os casos que ele mesmo testou. O que ele não testou revela seus pontos cegos: e os seus casos de teste mais importantes.
📋

Critérios de Aceite Testáveis desde o Backlog

Critérios de aceite vagos são bugs em potencial. O QA Pleno não aceita passivamente os critérios que chegam: contribui ativamente para torná-los testáveis, específicos e verificáveis antes do sprint começar.

🏋️ Exercícios Rápidos
  • Revise os critérios de aceite das histórias do próximo sprint. Para cada um, pergunte: "Consigo escrever um caso de teste automatizado a partir deste critério, sem perguntar nada ao PO?" Se não, o critério precisa ser reescrito.
  • Identifique padrões de ambiguidade nos critérios do seu backlog: verbos vagos ("deve funcionar bem", "deve ser rápido"), condições implícitas, edge cases não cobertos. Crie um template de qualidade de critérios para o time.
🔄

Testabilidade como Critério de Design

Shift-left inclui influenciar o design técnico para que seja mais fácil de testar. O QA Pleno participa de discussões de arquitetura com a perspectiva de quem vai ter que verificar o sistema.

🏋️ Exercícios Rápidos
  • Na próxima decisão técnica do time (escolha de biblioteca, design de API, estrutura de dados), pergunte: "Como vamos testar isso? O design atual facilita ou dificulta os testes de integração?" Essa pergunta sozinha muda o design.
  • Crie uma checklist de testabilidade para code reviews: a mudança tem testes unitários? As dependências são injetáveis? Os logs são suficientes para diagnóstico? Os erros são descritivos?
🧪

Laboratório: Shift-Left na Prática

Implementando shift-left em um sprint real

1
Sprint Shift-Left: da teoria ao processo

Um experimento para implementar shift-left em um sprint completo e medir o impacto.

  • 1. Antes do sprint (refinamento): Para cada história, prepare perguntas de qualidade e conduz uma sessão Three Amigos de 20 minutos. Documente os edge cases descobertos e os critérios de aceite que precisaram de revisão.
  • 2. Durante o sprint (desenvolvimento): Agende pelo menos uma sessão de pair testing por história complexa. QA e dev testam juntos durante o desenvolvimento, não após a conclusão.
  • 3. Ao longo do sprint: Registre cada bug encontrado com a fase em que foi introduzido e a fase em que foi detectado. Mantenha uma contagem simples: "bugs no refinamento", "bugs em pair testing", "bugs no teste formal", "bugs em staging".
  • 4. Na retrospectiva: Apresente os números. Compare com o sprint anterior (sem shift-left intencional). Quantos bugs foram encontrados mais cedo? Quanto tempo de retrabalho foi economizado? Use os dados para propor a adoção permanente das práticas.
💡 Expectativa realista: No primeiro sprint com shift-left intencional, você pode sentir que está "mais lento" porque há mais conversas antes de codar. O ganho aparece no meio e no final do sprint: menos bugs voltando do QA para o dev, menos retrabalho, menos surpresas na Sprint Review.
2
Mapeando o custo atual dos bugs no seu time

Um diagnóstico honesto para criar o argumento de negócio para shift-left.

  • 1. Pegue os últimos 20 bugs do seu sistema de rastreamento (Jira, Azure DevOps, etc.).
  • 2. Para cada bug, classifique: onde foi introduzido (requisito/design/código) e onde foi encontrado (refinamento/dev/QA/staging/produção).
  • 3. Estime o tempo de correção de cada bug. Some por fase de detecção: quanto tempo total foi gasto corrigindo bugs encontrados em produção vs. em testes?
  • 4. Calcule o "custo de atraso médio" do seu time: para cada fase que um bug avança sem ser detectado, quanto tempo adicional de correção ele gera? Esse número é o argumento mais poderoso para shift-left.
💡 Se o time resiste à ideia de shift-left por "não termos tempo para mais reuniões", esse mapeamento geralmente mostra que o time está gastando mais tempo corrigindo bugs tardios do que gastaria prevenindo-os cedo.
3
QA no refinamento: prevenindo bugs antes do código

Pratique o papel ativo do QA na fase de refinamento.

  • 1. Pegue 3 histórias do backlog. Para cada uma, escreva 3 perguntas que o QA deveria fazer para clarificar requisitos ambíguos.
  • 2. Identifique em cada história o critério de aceite mais vago. Reescreva no formato Given/When/Then sem ambiguidade.
  • 3. Calcule o custo teórico de encontrar o bug de requisito no refinamento vs. produção usando a regra 1x/10x/100x. Apresente ao time.
💡Dica: A pergunta mais valiosa no refinamento é 'como saberemos que isso está correto?'. Se ninguém responder, a história não está pronta para a sprint.
4
Three Amigos na prática

Simule a sessão e observe como perspectivas diferentes revelam gaps.

  • 1. Escolha uma história complexa. Dev, QA e PO leem separadamente e anotam o que vão construir/testar/aceitar. Comparem sem discussão prévia.
  • 2. Identifique onde as interpretações divergiram. Cada divergência é um bug em potencial evitado. Quantos bugs você estima que teriam escapado?
  • 3. Produza os critérios de aceite finais em conjunto. Compare com os originais: o que mudou? Adicione ao DoR a exigência de critérios revisados em Three Amigos para histórias complexas.
💡Dica: Three Amigos não é reunião formal. Pode ser uma conversa de 20 minutos. O valor está na diversidade de perspectivas, não na duração.
5
Pair Testing com desenvolvedor

Execute uma sessão de pair testing e documente os benefícios.

  • 1. Combine 1 hora com um dev: ele explora o que o QA normalmente testa, o QA explora o que o dev normalmente olha. Cada um documenta o que encontra.
  • 2. Durante a sessão, observe: quais perguntas o dev faz que revelam seu modelo mental do sistema? Quais partes ele testa primeiro?
  • 3. Ao final, compare achados. Quantos itens o dev encontrou que o QA teria perdido, e vice-versa? Documente como business case para institucionalizar pair testing.
💡Dica: Pair testing não é o dev substituindo o QA. São dois modelos mentais diferentes olhando o mesmo sistema. A sobreposição revela o que cada perspectiva isolada perderia.
6
Testabilidade como critério de design

Avalie e influencie o design técnico para facilitar os testes.

  • 1. Na próxima revisão de arquitetura, mapeie: quais partes são difíceis de testar, onde seria necessário mock, quais cenários de falha são difíceis de simular.
  • 2. Proponha uma mudança de design que melhore a testabilidade: parâmetro de configuração, health check exposto, função separada. Justifique com o custo sem a mudança.
  • 3. Após a implementação, valide: a mudança realmente facilitou os testes? Documente como aprendizado para a próxima revisão de arquitetura.
💡Dica: Testabilidade é propriedade de design, não de teste. QA que influencia o design economiza horas de automação frágil no futuro.
🟣 Sênior · Módulo

Shift-Right Testing

Se shift-left é testar mais cedo, shift-right é testar mais tarde: em produção, com usuários reais, com dados reais. Não como substituto dos testes tradicionais, mas como camada adicional que nenhum ambiente artificial consegue replicar.

➡️

O que é e por que importa

Shift-right é a filosofia de que produção é o ambiente definitivo de testes. Feature flags, canary releases, A/B testing, monitoramento sintético e chaos engineering são todas práticas de shift-right. O objetivo não é encontrar bugs antes do deploy: é aprender continuamente com o sistema em operação real.

🏋️ Exercícios Rápidos
  • Liste as práticas de shift-right que já existem no seu time: feature flags? Canary releases? Monitoramento de erros em produção? A/B testing? Qual a cobertura real de cada uma?
  • Identifique a última vez que um bug foi encontrado por um usuário antes do monitoramento alertar. O que uma prática de shift-right poderia ter detectado antes?
🚦

Feature flags como ferramenta de teste em produção

Feature flags permitem lançar para uma porcentagem dos usuários, observar o comportamento real e escalar gradualmente: ou fazer rollback instantâneo se algo der errado. É shift-right na sua forma mais prática.

🏋️ Exercícios Rápidos
  • Para a próxima feature, proponha um lançamento gradual: 1% → 5% → 20% → 50% → 100%. Defina os critérios de progressão: quais métricas precisam estar dentro do esperado para avançar para a próxima fase?
  • Configure alertas específicos para o grupo de usuários com a feature ativa. Diferenças de taxa de erro entre grupos A e B são sinal imediato de problema.
🔬

Monitoramento sintético: testes que rodam em produção continuamente

Testes sintéticos são scripts de teste que rodam em produção em intervalos regulares, verificando que os fluxos críticos estão funcionando. São a diferença entre "o sistema está funcionando" e "o sistema está funcionando para o usuário".

🏋️ Exercícios Rápidos
  • Identifique os 3 fluxos mais críticos do produto (login, checkout, geração de relatório). Implemente um teste sintético para cada um usando Playwright, Datadog Synthetics ou similar.
  • Configure os testes para rodarem a cada 5 minutos. Configure alertas para quando falharem. Agora você tem cobertura contínua em produção.
🔁

A/B Testing como estratégia de qualidade

A/B testing é frequentemente visto como ferramenta de produto, mas é também uma forma de validar qualidade: a versão B tem mais erros? Pior performance? Maior abandono? Esses dados são qualidade medida em produção real.

🏋️ Exercícios Rápidos
  • Na próxima mudança significativa de UX ou de fluxo, proponha um A/B test com métricas de qualidade além de conversão: taxa de erro, tempo de conclusão da tarefa, taxa de abandono.
  • Defina critérios de parada antecipada: se a versão B tiver taxa de erro 50% maior que A, o experimento é encerrado imediatamente.
🌪️

Chaos Engineering como shift-right

Chaos engineering é shift-right na sua forma mais deliberada: introduzir falhas controladas em produção para descobrir fraquezas antes que falhas reais as revelem. Não é irresponsabilidade: é responsabilidade proativa.

🏋️ Exercícios Rápidos
  • Antes de qualquer experimento de chaos em produção, documente a hipótese: "Acreditamos que o sistema se recuperará de X em Y segundos com impacto máximo de Z% nos usuários." Se não consegue formular a hipótese, ainda não está pronto para o experimento.
  • Comece com blast radius mínimo: um único serviço, em horário de baixo tráfego, com capacidade de rollback imediato. Escale só depois de ter confiança no processo de resposta.
🧪

Laboratório: Estratégia de Shift-Right para o seu Produto

Construa um plano de observação contínua em produção

1
Mapeando a maturidade de shift-right do seu time
  • 1. Avalie cada dimensão de shift-right no seu time de 0 a 3: Feature flags (0=não usa, 3=lançamentos graduais sistemáticos) · Monitoramento sintético (0=nenhum, 3=cobertura dos fluxos críticos) · Chaos engineering (0=nunca testado, 3=experimentos regulares com hipótese) · A/B testing com métricas de qualidade (0=não existe, 3=parte do processo de entrega).
  • 2. Para a dimensão com menor score, defina uma iniciativa concreta: o que você implementaria nas próximas 2 semanas para subir um nível?
  • 3. Implemente o monitoramento sintético para o fluxo mais crítico. Documente: qual fluxo, qual ferramenta, qual frequência, quais alertas configurados.
  • 4. Apresente o resultado para o time. "Agora temos olhos em produção 24/7 para o fluxo de pagamento" é uma mudança concreta de maturidade.
💡 Shift-right não substitui shift-left: os dois são necessários. Shift-left previne bugs conhecidos. Shift-right descobre o que você não sabia que não sabia.
2
Feature flags e rollout gradual em produção

Use feature flags para controlar o rollout com risco controlado.

  • 1. Configure flag para nova funcionalidade com 3 segmentos: 5% (canary), 25% (early adopters) e 100% (full release). Estabeleça métricas de saúde para cada etapa.
  • 2. Configure alertas que pausam o rollout se as métricas degradarem: taxa de erro acima de 0.5%, latência P99 acima do baseline ou NPS abaixo do threshold. Rollback em menos de 5 minutos.
  • 3. Documente o runbook de rollout: quais métricas observar, critério para avançar, critério para pausar e quem decide o rollback.
💡Dica: Feature flags sem métricas de guardrail são só feature flags. O valor de shift-right está no loop: ativar, observar, decidir. Sem observabilidade não há shift-right real.
3
Monitoramento sintético em produção

Configure testes que rodam continuamente e alertam em caso de degradação.

  • 1. Configure o Checkly com browser check que executa o fluxo crítico de compra a cada 5 minutos. Configure alertas por e-mail e Slack em caso de falha.
  • 2. Adicione API check para o endpoint de login a cada 1 minuto: verifica status 200 e tempo de resposta abaixo de 500ms. Configure alerta se P95 ultrapassar 1 segundo.
  • 3. Simule um incidente: bloqueie o acesso no hosts file. Em quantos minutos o alerta chega? Esse MTTD é a métrica que o monitoramento sintético otimiza.
💡Dica: Monitoramento sintético detecta problemas antes do usuário reportar. A meta é MTTD menor que o tempo que um usuário levaria para abrir um ticket de suporte.
4
Desenhando um experimento de A/B testing

Projete experimento completo com hipótese, métricas e critério de sucesso.

  • 1. Escreva a hipótese no formato: 'Acreditamos que [mudança] para [segmento] resultará em [resultado] porque [raciocínio]'. Uma hipótese vaga gera experimento inútil.
  • 2. Defina: métrica primária, métricas de guardrail, tamanho mínimo de amostra para 95% de significância, duração mínima e critério de parada antecipada.
  • 3. Analise os resultados: a diferença é significativa? Houve impacto nos guardrails? Documente a decisão e o aprendizado independente do resultado.
💡Dica: Experimentos que provam que a hipótese estava errada são tão valiosos quanto os que a confirmam. O aprendizado é o produto, não a confirmação.
5
Chaos Engineering em staging

Execute experimento de chaos com hipótese e rollback definidos.

  • 1. Defina a hipótese: 'O sistema continua aceitando login mesmo com latência de 2 segundos no serviço de autenticação?' Defina o estado estável antes de qualquer falha.
  • 2. Use Litmus Chaos ou Network Chaos do Docker para injetar 2 segundos de latência nas chamadas de autenticação em staging. Monitore as métricas durante a injeção.
  • 3. Documente: o sistema degradou graciosamente ou falhou? O timeout estava configurado? A mensagem de erro era adequada? Converta cada achado em melhoria de resiliência.
💡Dica: Chaos engineering sem hipótese é destruição controlada. A hipótese é o que transforma o experimento em aprendizado científico sobre a resiliência do sistema.
💻 Trilha Desenvolvedor

Qualidade começa no seu código

Esta trilha não é sobre se tornar QA. É sobre escrever código que quebra menos, que é mais fácil de testar e que chega em produção com mais confiança. Qualidade é sua responsabilidade também: e começa antes do QA ver qualquer coisa.

💡 Para devs de qualquer nível 🤝 Trabalhe melhor com QA 🚀 Entregue com mais confiança
6Módulos
12+Exercícios
15+Recursos
6Labs
💻

O dev que facilita o trabalho de qualidade: e entrega mais rápido

Por que qualidade é sua responsabilidade antes de chegar no QA.

O problema que essa trilha resolve

Existe uma divisão histórica e disfuncional entre "quem cria" e "quem verifica". O dev escreve, o QA testa, o bug volta para o dev, o dev corrige, o QA testa de novo. Esse ciclo tem custo: de tempo, de confiança e de qualidade final.

Devs que entendem qualidade quebram esse ciclo. Eles escrevem código mais fácil de testar, comunicam melhor os riscos, participam ativamente dos refinamentos e constroem uma relação de parceria com o QA em vez de uma relação de adversários.

O que muda na prática

  • Você escreve testes unitários não porque alguém mandou, mas porque sabe que código sem teste é código que você vai corrigir às 23h antes do release.
  • Você pensa em testabilidade enquanto projeta a solução: não depois que o QA apontou que não consegue testar aquilo.
  • Você faz code review pensando em qualidade: não só em "o código funciona?" mas em "esse código vai quebrar em produção de forma que a gente não vai perceber?"
  • Você loga o que importa: não logs inúteis que ninguém lê, mas informação que ajuda a diagnosticar problemas reais em produção.
  • Você não quebra o pipeline: porque você entende que um build vermelho não é "problema do QA", é problema do time.

Como usar esta trilha

Não tem ordem obrigatória. Se testes unitários já são naturais para você, comece pelo módulo de testabilidade ou code review. Se você raramente pensa em logs, comece por observabilidade.

Cada módulo tem exercícios práticos pensados para o código que você já escreve no trabalho: não para projetos fictícios. A ideia é que você termine cada módulo com algo concreto para mudar na próxima PR.

"O dev que entende qualidade não entrega mais devagar: ele entrega menos vezes com bug crítico. A velocidade real está em não ter que voltar ao mesmo código três vezes."
💻 Dev · Módulo 1

Escrevendo Código Testável

Código testável não é código com muitos testes: é código projetado de forma que testá-lo seja simples. Essa diferença de perspectiva muda como você escreve desde a primeira linha.

🔧

O que torna código difícil de testar

Antes de escrever código testável, você precisa reconhecer o que torna código difícil de testar: e por que essas características aparecem tão naturalmente.

🏋️ Exercícios Rápidos
  • Pegue uma função que você escreveu recentemente. Quanto tempo levaria para escrever um teste unitário para ela? Se a resposta for "mais de 5 minutos de setup", o código provavelmente tem problemas de testabilidade.
  • Identifique: a função acessa banco de dados diretamente? Chama APIs externas? Depende de estado global? Cada um desses é uma barreira para testar em isolamento.
🧩

Injeção de Dependência na prática

Injeção de dependência não é um padrão arquitetural complexo: é a decisão simples de receber suas dependências como parâmetro em vez de instanciá-las dentro da função. Isso muda tudo na hora de testar.

🏋️ Exercícios Rápidos
  • Encontre uma classe no seu codebase que instancia dependências no construtor com new. Refatore para receber as dependências como parâmetro. Quantas linhas de teste você consegue escrever agora que não conseguia antes?
  • Escreva um teste para uma função que chama uma API externa: sem fazer a chamada real. Use um mock/stub da dependência injetada.
✂️

Funções pequenas, funções puras

Funções puras: que para o mesmo input sempre retornam o mesmo output, sem efeitos colaterais: são trivialmente fáceis de testar. Quanto maior e mais impura a função, maior o custo de testá-la.

🏋️ Exercícios Rápidos
  • Escolha uma função com mais de 30 linhas no seu codebase. Identifique as responsabilidades distintas: geralmente há pelo menos 2 ou 3. Separe em funções menores.
  • Para cada função extraída, verifique: ela é pura? Se não, pode ser refatorada para separar a lógica pura dos efeitos colaterais?
🎭

Mocks, Stubs e Fakes: quando usar cada um

A confusão entre mocks, stubs e fakes é responsável por muitos testes ruins. Entender a diferença muda a qualidade dos seus testes unitários.

🏋️ Exercícios Rápidos
  • Stub: retorna um valor fixo para um input específico. Use quando precisa controlar o output de uma dependência.
  • Mock: verifica que uma chamada foi feita. Use quando o comportamento importante é que a dependência foi chamada corretamente.
  • Fake: implementação simplificada que funciona de verdade. Use quando um stub seria muito complexo (ex: banco de dados in-memory).
  • No seu codebase atual, identifique 3 situações e classifique qual abordagem faz sentido para cada uma.
🧪

Laboratório: Refatorando para Testabilidade

Transforme código real em código testável, passo a passo

1
Refatoração orientada a testabilidade

Pegue uma função real do seu trabalho (ou use o exemplo abaixo) e refatore para testabilidade.

  • 1. Encontre uma função no seu codebase que acessa banco de dados ou API diretamente dentro da lógica de negócio. Escreva como seria o teste para ela hoje: perceba o quanto de setup é necessário.
  • 2. Extraia as dependências externas para interfaces/parâmetros. A lógica de negócio deve trabalhar com abstrações, não com implementações concretas.
  • 3. Escreva o teste novamente. Crie um stub simples para a dependência. Compare o antes e depois: quantas linhas de setup foram necessárias em cada versão?
  • 4. Identifique 2 outras funções no mesmo arquivo que se beneficiariam da mesma refatoração.
💡 Regra de ouro: se você precisar iniciar um servidor, conectar a um banco ou fazer uma requisição HTTP para testar uma função de negócio, a função tem um problema de design, não de teste.
💻 Dev · Módulo 2

Testes Unitários que Valem a Pena

Existe uma diferença enorme entre ter testes e ter bons testes. Testes ruins dão falsa confiança, são difíceis de manter e quebram por razões erradas. Este módulo é sobre escrever testes que realmente protegem você.

🎯

O que um bom teste unitário testa

Um bom teste unitário verifica comportamento, não implementação. Se o teste quebra toda vez que você refatora sem mudar o comportamento, ele está testando a coisa errada.

🏋️ Exercícios Rápidos
  • Revise os últimos 5 testes que você escreveu. Quantos deles quebrariam se você renomear uma variável interna ou extrair um método privado sem mudar o comportamento externo? Os que quebrariam estão testando implementação.
  • Para cada teste que testa implementação, reescreva focando no comportamento: dado este input, qual é o output ou efeito esperado?
📐

Estrutura AAA: Arrange, Act, Assert

Todo teste legível segue a mesma estrutura: prepara o contexto (Arrange), executa a ação (Act) e verifica o resultado (Assert). Quando um teste é difícil de ler, geralmente é porque essa estrutura foi violada.

🏋️ Exercícios Rápidos
  • Abra um arquivo de testes do seu projeto. Separe visualmente cada seção AAA com comentários. Quantos testes misturam as três fases sem separação clara?
  • Um teste com múltiplos Asserts geralmente testa mais de uma coisa. Identifique 3 testes assim e quebre cada um em testes menores e mais focados.
🔢

Cobertura de código: o que significa e o que não significa

100% de cobertura não significa ausência de bugs. Significa que cada linha foi executada pelo menos uma vez: não que todos os cenários foram testados. Cobertura é um piso, não um teto.

🏋️ Exercícios Rápidos
  • Execute o relatório de cobertura do seu projeto. Identifique as áreas com menos de 60% de cobertura: essas são as mais arriscadas para mudanças.
  • Encontre um módulo com 90%+ de cobertura e verifique: os testes cobrem os edge cases importantes (valores nulos, listas vazias, valores negativos, strings vazias)? Cobertura alta com edge cases mal testados é ilusória.

Testes rápidos e determinísticos

Testes que demoram ou que falham aleatoriamente (flaky tests) destroem a cultura de testes. Se o time aprende a ignorar testes vermelhos porque "às vezes é instabilidade", a confiança no pipeline desaparece.

🏋️ Exercícios Rápidos
  • Meça o tempo da sua suite de testes unitários. Se demorar mais de 30 segundos, identifique os 3 testes mais lentos. Geralmente eles dependem de I/O, rede ou sleeps artificiais: todos evitáveis.
  • Identifique qualquer teste com sleep, Thread.sleep ou similares. Cada um desses é um flaky test esperando para acontecer.
🧬

Mutation Testing: seus testes testam de verdade?

Cobertura de código diz quantas linhas foram executadas durante os testes. Mutation testing diz se os testes realmente detectariam um bug. A ferramenta introduz pequenas mutações no código (troca + por -, > por >=, remove um return) e verifica se algum teste falha. Se nenhum teste pegar a mutação, aquele trecho de código pode ter um bug real sem que a suíte perceba.

Ferramentas: Stryker (JS/TS), PITest (Java), mutmut (Python). O mutation score ideal fica entre 70% e 85%: acima disso os testes começam a ser frágeis demais, abaixo os bugs escapam facilmente.

🏋️ Exercícios Rápidos
  • Instale o Stryker no seu projeto JS/TS: npm init stryker. Execute npx stryker run e analise o relatório HTML. Qual é o mutation score atual? Para cada mutante sobrevivente, entenda: que bug ele representa e por que seus testes não o pegaram.
  • Escolha uma função crítica de negócio (cálculo de desconto, validação de CPF, regra de elegibilidade) e trate o mutation score dela como meta: 80% mínimo. Escreva os testes necessários para matar os mutantes sobreviventes nessa função específica.
  • Compare o mutation score com a cobertura de linhas da mesma função. É comum ter 100% de cobertura e mutation score de 40%. Documente a diferença e use para argumentar com o time por que "cobertura" não é sinônimo de "qualidade de testes".
🧪

Laboratório: Escrevendo Testes que Protegem

Prática com exemplos reais de testes bons e ruins

1
Auditoria da sua suite de testes

Uma revisão crítica dos testes que você já tem: provavelmente mais valiosa do que escrever novos.

  • 1. Abra o arquivo de testes do módulo mais importante do seu projeto.
  • 2. Para cada teste, responda: (a) O nome do teste descreve claramente o comportamento esperado? (b) Eu consigo entender o que o teste faz sem ler o código de produção? (c) O teste quebraria se eu introduzir um bug real nessa funcionalidade?
  • 3. Classifique cada teste como: Bom / Precisa de melhoria / Deveria ser deletado. Testes ruins são pior que sem teste: eles dão falsa confiança.
  • 4. Reescreva os 3 testes classificados como "precisa de melhoria". Compare antes e depois.
💡 Teste do colega novo: Se um dev que acabou de entrar no time não consegue entender o que um teste verifica só pelo nome e pelo conteúdo, o teste precisa ser melhorado.
💻 Dev · Módulo 3

Testes de Integração

Testes unitários verificam peças isoladas. Testes de integração verificam que essas peças funcionam juntas. Os dois são necessários: e confundir um com o outro é um dos erros mais comuns de estratégia de testes.

🔗

Onde vivem os testes de integração

Testes de integração testam a interação entre componentes reais: seu código + banco de dados, seu código + API externa, seu serviço + outro serviço. Eles são mais lentos que unitários, mas revelam classes inteiras de bugs que testes unitários nunca vão encontrar.

🏋️ Exercícios Rápidos
  • Mapeie os pontos de integração do módulo em que você trabalha: banco de dados, filas, APIs externas, outros microsserviços. Cada um desses é um candidato para testes de integração.
  • Qual desses pontos de integração causou mais bugs em produção nos últimos 3 meses? Esse é o mais crítico para ter testes de integração.
🗄️

Testando com banco de dados real

Mockar o banco de dados esconde bugs de query, de mapeamento e de transação. Para testes de integração, use um banco real: mas isolado, com dados controlados e que seja fácil de resetar.

🏋️ Exercícios Rápidos
  • Configure um banco de dados de teste (pode ser SQLite em memória, Testcontainers ou um schema separado). Escreva um teste que insere um registro, busca e verifica o resultado: sem mocks.
  • Implemente um mecanismo de limpeza de dados entre testes. Transação com rollback ou truncate das tabelas são as abordagens mais comuns.
📜

Contract Testing: a fronteira entre serviços

Quando dois serviços se comunicam, quem garante que a API de um não quebrou o contrato com o outro? Contract testing responde essa pergunta sem precisar de um ambiente de integração completo.

🏋️ Exercícios Rápidos
  • Identifique uma integração entre dois serviços que você mantém. Documente o contrato atual: quais campos são obrigatórios? Quais os tipos? Quais os status codes possíveis?
  • Se você ou o time do outro serviço mudasse um campo sem avisar, como você descobriria antes de chegar em produção?
🧪

Laboratório: Seu Primeiro Teste de Integração Real

Configure e escreva um teste de integração com dependência real

1
Teste de integração com banco real

Escreva um teste de integração completo para uma operação de banco de dados, sem mocks.

  • 1. Escolha uma operação de repositório/DAO do seu projeto que faz uma query não-trivial (com filtros, joins ou agregações).
  • 2. Configure um banco de teste isolado. Se estiver em .NET, use SQLite in-memory ou Testcontainers. Se em Java, Testcontainers com a mesma imagem do banco de produção. Se em Node, SQLite ou um Docker compose dedicado para testes.
  • 3. Escreva o teste: insira os dados de entrada, execute a operação, verifique o resultado. Use transação com rollback para limpeza.
  • 4. Introduza um bug intencional na query (mude um operador, remova um filtro). O teste captura?
💡 Por que não mockar o banco: Mocks de banco validam que você chamou o método certo: não que a query retorna o resultado certo. Um mock nunca vai pegar um bug de SQL.
💻 Dev · Módulo 4

Code Review com Olhar de Qualidade

Code review é uma das ferramentas de qualidade mais poderosas que um time tem: e uma das mais subutilizadas. A maioria dos reviews foca em estilo e lógica. Os melhores reviews pensam em falhas silenciosas, edge cases e comportamento em produção.

👁️

O que revisar além do óbvio

Todo mundo verifica se o código faz o que deveria fazer. Poucas pessoas verificam o que acontece quando ele falha, quando recebe input inválido ou quando as condições de rede são ruins.

🏋️ Exercícios Rápidos
  • Na próxima PR que você revisar, adicione estas perguntas à sua checklist: O que acontece se esse serviço externo estiver indisponível? O que acontece se esse campo vier nulo? Existe retry ou timeout configurado?
  • Identifique uma PR recente que passou em review e que depois gerou um bug em produção. O bug era visível na PR? Por que não foi capturado?
🧪

Revisando testes junto com o código

Aprovar código sem revisar os testes que acompanham é aprovar metade do trabalho. Os testes são tão parte da entrega quanto o código de produção.

🏋️ Exercícios Rápidos
  • Na próxima review, leia os testes antes do código de produção. Os testes descrevem claramente o comportamento esperado? Se sim, o código de produção se torna mais fácil de entender.
  • Verifique: a PR tem testes para os edge cases mencionados nos critérios de aceite? Campos obrigatórios vazios, limites numéricos, permissões negadas?
💬

Dar e receber feedback de qualidade

O feedback de code review precisa ser específico, acionável e focado no código: não na pessoa. Feedback vago ("isso não está bom") é tão inútil quanto não dar feedback.

🏋️ Exercícios Rápidos
  • Revise seus últimos 5 comentários de code review. Cada um deles: (a) explica o porquê do problema? (b) sugere uma alternativa concreta? (c) distingue blocker de sugestão opcional?
  • Quando você recebe um comentário de review que discorda, como você responde? Praticar a frase "Entendo o ponto, minha razão para ter feito diferente foi X. O que acha de Y como alternativa?" é mais produtivo do que "isso está certo porque..."
🧪

Laboratório: Review com Checklist de Qualidade

Construa sua própria checklist de review orientada a qualidade

1
Construindo sua checklist de code review

Uma boa checklist de review é personalizada para o contexto do seu time. Este lab ajuda você a construir a sua.

  • 1. Liste os 5 bugs mais críticos que chegaram em produção nos últimos 6 meses no seu time. Para cada um, responda: era visível em code review? O que teria sido necessário para capturá-lo?
  • 2. A partir dessa análise, construa uma checklist de review com 8-10 perguntas específicas para o seu contexto. Exemplos de categorias: validação de input, tratamento de erros, cobertura de testes, segurança, performance, logs.
  • 3. Use a checklist nas próximas 5 PRs. Depois, revise: alguma pergunta nunca foi relevante? Algum tipo de problema aconteceu que não estava na lista?
  • 4. Compartilhe a checklist com o time. Um time que tem critérios explícitos de review tem reviews mais consistentes e menos debates sobre estilo.
💡 Dica: Separe explicitamente "blocker" (precisa mudar antes do merge) de "sugestão" (seria melhor mas não impede o merge). Isso evita reviews que parecem mais críticos do que são.
💻 Dev · Módulo 5

Não Quebre o Pipeline

Um pipeline vermelho não é "problema de CI/CD": é um sinal de que algo no código ou nos testes precisa de atenção. Devs que respeitam e entendem o pipeline entregam com muito mais confiança.

🚦

Por que o pipeline é sagrado

Quando o time aprende a ignorar builds vermelhos, o pipeline deixa de ser uma rede de segurança e se torna ruído de fundo. Um build vermelho ignorado por 2 horas pode esconder 3 problemas diferentes.

🏋️ Exercícios Rápidos
  • Verifique: no seu time, quando o pipeline fica vermelho, qual é o tempo médio até alguém agir? Se for mais de 15 minutos, há uma cultura de tolerância ao vermelho que vale a pena discutir.
  • Estabeleça uma regra pessoal: nunca feche o laptop com o pipeline do seu commit vermelho. O que você precisa mudar no seu fluxo para garantir isso?
🔍

Diagnosticando falhas de pipeline rapidamente

Saber ler um log de CI é uma habilidade. A maioria das falhas se enquadra em 4 categorias: falha de teste, falha de build, falha de lint/qualidade ou falha de infraestrutura. Cada uma tem um diagnóstico diferente.

🏋️ Exercícios Rápidos
  • Na próxima vez que o pipeline falhar, cronometre o tempo até você identificar a causa raiz. Onde você perdeu mais tempo? Nos logs? Na reprodução local? Na investigação do teste flaky?
  • Documente um runbook de diagnóstico para os 3 tipos de falha mais comuns no seu pipeline. Isso vai ajudar o time inteiro.
🌿

Trunk-based development e feature flags

Branches de longa duração são inimigos da integração contínua. Quanto mais tempo o código fica isolado, maior o risco de conflito e de surpresas ao integrar. Feature flags permitem integrar cedo e liberar tarde.

🏋️ Exercícios Rápidos
  • Qual é a duração média das branches no seu time? Se a maioria vive mais de 2 dias, explore com o time as vantagens de integração mais frequente.
  • Identifique uma feature em desenvolvimento que poderia ser integrada com uma feature flag. O que mudaria no processo de entrega?
🧪

Laboratório: Pipeline como Ferramenta de Qualidade

Configure gates de qualidade no seu pipeline

1
Auditoria e melhoria do seu pipeline atual

Analise o que o seu pipeline verifica hoje e o que deveria verificar.

  • 1. Mapeie cada etapa do seu pipeline atual: build → testes unitários → lint → análise estática → testes de integração → deploy. Quais etapas existem? Quais estão faltando?
  • 2. Para cada etapa existente, verifique: o que ela detecta? Qual o tempo de execução? Quantas falhas falsas (flaky) aconteceram no último mês?
  • 3. Identifique a etapa que mais vezes deixou passar bugs para produção. O que precisaria ser adicionado para capturar esses bugs antes do deploy?
  • 4. Proponha uma melhoria concreta para o time: adicionar cobertura mínima como gate, configurar análise estática de segurança, ou adicionar um teste de smoke automatizado pós-deploy.
💻 Dev · Módulo 6

Logs e Observabilidade para Devs

O código que você escreve vai falhar em produção em algum momento. A diferença entre resolver o problema em 5 minutos ou 5 horas é a qualidade dos logs e métricas que você deixou para trás.

📋

Logs que ajudam vs. logs que poluem

Log de tudo é tão inútil quanto não logar nada. A arte está em logar as informações certas, no nível certo, no momento certo: de forma que um investigador de incidente consiga reconstruir o que aconteceu sem precisar de você.

🏋️ Exercícios Rápidos
  • Abra os logs de produção do seu sistema e tente investigar um bug recente só pelos logs. Você conseguiu entender o que aconteceu? O que estava faltando?
  • Revise o código de um módulo crítico e classifique cada log: é DEBUG (desenvolvimento), INFO (operação normal), WARN (situação inesperada mas recuperável) ou ERROR (falha que requer atenção)?
📊

Métricas de aplicação úteis

Taxa de erros, latência de endpoints, tamanho de filas, taxa de sucesso de operações críticas: essas métricas contam a história da saúde do sistema em tempo real. Devs que instrumentam bem o código facilitam o trabalho de todos.

🏋️ Exercícios Rápidos
  • Identifique as 3 operações mais críticas do sistema que você mantém. Cada uma delas tem métricas de latência e taxa de sucesso? Se não, o que precisaria ser adicionado?
  • Configure um alerta simples: se a taxa de erro de uma operação crítica ultrapassar X% em Y minutos, você quer saber antes do usuário.
🔎

Tracing distribuído: seguindo uma requisição

Em sistemas distribuídos, uma requisição passa por vários serviços. Tracing distribuído permite seguir essa jornada de ponta a ponta: essencial para diagnosticar problemas de performance e erros intermitentes.

🏋️ Exercícios Rápidos
  • Verifique se o seu sistema tem tracing configurado (OpenTelemetry, Jaeger, Zipkin, Datadog APM). Se sim, trace uma requisição lenta recente: onde ela gastou mais tempo?
  • Se não tiver tracing, instrumente uma requisição com um ID de correlação manual: gere um ID único na entrada, passe para todos os serviços envolvidos e inclua em todos os logs. Isso já facilita imensamente a investigação.
🧪

Laboratório: Instrumentação que Salva Vidas

Adicione logs e métricas que realmente ajudam em incidentes

1
Simulação de investigação de incidente

A melhor forma de testar se seus logs são bons é simular uma investigação com eles.

  • 1. Escolha um bug real que aconteceu em produção nos últimos 3 meses. Tente reconstruir a investigação usando apenas logs: sem falar com ninguém, sem olhar o código.
  • 2. Documente o que você conseguiu e o que ficou faltando. O ID do usuário afetado estava nos logs? O timestamp era preciso? A causa raiz era rastreável?
  • 3. Com base nas lacunas, adicione os logs que estavam faltando. Não adicione logs genéricos: adicione informação específica que teria ajudado naquele incidente real.
  • 4. Compartilhe o resultado com o time. "Adicionei estes logs porque quando aconteceu X, não tínhamos Y para investigar" é uma justificativa muito mais poderosa do que "vamos logar mais coisas".
💡 Golden rule de logging: Cada log deve ter o suficiente para responder: o que aconteceu? quando? quem foi afetado? qual o contexto? Se falta algum desses, o log está incompleto.
🎯 Trilha PO / PM

Qualidade começa no produto que você define

Esta trilha não é sobre testar software: é sobre criar as condições para que o software seja testável, previsível e confiável desde a concepção. POs e PMs que entendem qualidade entregam produtos melhores com menos retrabalho.

📋 Para POs e PMs de qualquer nível 🤝 Trabalhe melhor com QA e Dev 🚀 Reduza o retrabalho de sprint
5Módulos
10+Exercícios
12+Recursos
5Labs
🎯

O PO que facilita a qualidade: antes que o QA veja qualquer coisa

Por que a maioria dos bugs começa muito antes do desenvolvimento.

O problema que essa trilha resolve

A maioria dos bugs de produção não é causada por código ruim: é causada por requisitos ambíguos, critérios de aceite incompletos e histórias que chegam no sprint sem as perguntas certas respondidas. O custo de corrigir um problema de entendimento depois que o dev já codou é 10 a 30 vezes maior do que antes.

POs e PMs têm um poder enorme de prevenir defeitos simplesmente escrevendo histórias mais claras, definindo critérios de aceite testáveis e participando ativamente das discussões de qualidade.

O que muda na prática

  • Você escreve critérios de aceite que o QA consegue testar: não critérios vagos que cada pessoa interpreta de um jeito diferente.
  • Você define o Definition of Done com clareza: para que "pronto" signifique a mesma coisa para dev, QA e para você.
  • Você prioriza bugs com critérios objetivos: não por pressão de stakeholder ou urgência percebida, mas por impacto real no usuário.
  • Você usa métricas de qualidade para tomar decisões: taxa de regressão, tempo médio para corrigir, densidade de bugs por feature.

A conversa que vale a pena ter com o time de QA

A maioria dos POs nunca sentou com o QA para perguntar: "O que eu poderia escrever de forma diferente para facilitar seu trabalho?" Essa conversa de 30 minutos geralmente revela lacunas que custam horas de retrabalho por sprint.

"Uma história com critérios de aceite testáveis não é mais burocracia: é menos reunião de esclarecimento, menos bug de interpretação e menos deploy que volta para o sprint seguinte."
🎯 PO/PM · Módulo 1

Critérios de Aceite que Prestam

Critério de aceite não é uma formalidade: é o contrato entre o que o negócio quer e o que o time vai construir. Quando esse contrato é vago, o retrabalho é inevitável.

O que torna um critério de aceite testável

Um critério de aceite testável responde: como eu sei que isso está pronto? Se a resposta depende de interpretação subjetiva, o critério precisa ser reescrito.

🏋️ Exercícios Rápidos
  • Pegue os critérios de aceite das últimas 3 histórias que você escreveu. Para cada um, responda: um QA consegue escrever um caso de teste objetivo a partir deste critério, sem te perguntar nada? Se não, reescreva.
  • Identifique os verbos problemáticos: "deve funcionar bem", "deve ser rápido", "deve ser fácil de usar". Cada um desses precisa ser substituído por algo mensurável.
🥒

Given / When / Then: a estrutura que o QA ama

A estrutura Gherkin (Given/When/Then) força clareza. Quando você escreve um critério nesse formato, as ambiguidades aparecem naturalmente.

🏋️ Exercícios Rápidos
  • Given (contexto): o estado inicial. When (ação): o que o usuário faz. Then (resultado): o que deve acontecer.
  • Reescreva 5 critérios de aceite de histórias recentes usando Given/When/Then. O que ficou mais claro? O que revelou gaps que não estavam visíveis antes?
🔍

Edge cases que o PO precisa pensar antes do dev

O dev vai implementar o happy path. O QA vai testar os edge cases. Mas se o comportamento nos edge cases não está nos critérios de aceite, ninguém sabe o que é "correto".

🏋️ Exercícios Rápidos
  • Para a próxima história, use esta checklist: O que acontece com campos obrigatórios vazios? Com valores no limite? Com usuários sem permissão? Com dados duplicados?
  • Não precisa escrever critério para todos: mas precisa ter a decisão documentada. "Campo vazio mostra mensagem X" é diferente de "campo vazio: não definido".
🧪

Laboratório: Reescrevendo Critérios de Aceite

Transforme critérios vagos em critérios testáveis

1
Auditoria de critérios do último sprint

Uma revisão retroativa que revela padrões de ambiguidade que se repetem.

  • 1. Pegue as histórias do último sprint. Para cada uma, verifique: quantos bugs gerados eram sobre comportamento não especificado nos critérios de aceite?
  • 2. Para cada bug de interpretação, identifique qual critério estava ausente ou vago.
  • 3. Reescreva esses critérios usando Given/When/Then. Perceba o padrão: qual tipo de situação você consistentemente não cobre?
  • 4. Crie uma checklist pessoal de revisão baseada nesse padrão. Antes de fechar uma história, passe pela checklist.
💡 Dica: Se mais de 30% dos bugs do sprint eram sobre comportamento não especificado, o problema principal não é de desenvolvimento: é de especificação.
🎯 PO/PM · Módulo 2

Definition of Done que o Time Respeita

DoD é o acordo sobre o que significa "pronto". Quando esse acordo não é claro, cada pessoa tem sua própria definição: e histórias chegam ao QA incompletas, voltam para o dev e nunca parecem realmente terminadas.

🏁

Construindo um DoD com o time

Um DoD imposto raramente funciona. Construído com dev, QA e design tem comprometimento real e evolui com a maturidade do time.

🏋️ Exercícios Rápidos
  • Qual é o DoD atual do seu time? Está escrito e visível? Se não, já é um problema.
  • Facilite uma sessão de 30 minutos com dev e QA: "O que uma história precisa ter para ser pronta?" Anote tudo, agrupe e crie uma lista consensual.
📋

O que o DoD deve incluir de qualidade

Um DoD que não menciona testes é um DoD incompleto. Testes unitários, revisão de QA, critérios de aceite validados: tudo isso pertence ao DoD.

🏋️ Exercícios Rápidos
  • Verifique se o DoD inclui: testes unitários passando, QA validou critérios de aceite, sem bugs críticos abertos, documentação atualizada.
  • Para cada item que falta, proponha ao time com justificativa. Mostre o problema que cada item previne.
🔄

DoD vs. Critérios de Aceite

DoD é universal (aplica a toda história). Critérios de aceite são específicos (definem o comportamento daquela história).

🏋️ Exercícios Rápidos
  • Revise histórias recentes. Algum critério de aceite era item de DoD disfarçado? Ex: "O código deve ter testes unitários" é DoD, não critério de aceite.
  • Mova esses itens para o DoD. Critérios de aceite devem falar sobre comportamento do produto, não como foi construído.
🧪

Laboratório: Construindo o DoD do seu Time

Facilite a criação de um DoD que o time realmente usa

1
Sessão de construção de DoD com dev e QA

Um exercício facilitado para criar ou revisar o DoD.

  • 1. Agende 45 minutos com dev e QA. Pergunte individualmente antes: "Qual foi a última história que foi para produção e você sentiu que não estava realmente pronta? O que faltava?"
  • 2. Compartilhe as respostas anonimamente. Agrupe em categorias: técnico, teste, documentação, validação de negócio.
  • 3. Para cada categoria, defina um critério mensurável. Não "código bem testado": mas "cobertura unitária ≥ 70% nos módulos novos".
  • 4. Documente, deixe visível e revisitem em 2 sprints: o DoD está sendo respeitado? Precisa de ajuste?
🎯 PO/PM · Módulo 3

Priorizando Bugs com Critérios Objetivos

Priorizar por pressão de stakeholder em vez de impacto real é uma das causas mais comuns de débito técnico acumulado: e de usuários afetados por problemas que "sempre eram para ser corrigidos depois".

⚖️

Severidade vs. Prioridade

Severidade é o impacto técnico. Prioridade é a urgência de negócio. Um crash numa tela nunca visitada pode ser severidade crítica e prioridade baixa.

🏋️ Exercícios Rápidos
  • Revise os últimos 10 bugs abertos. Para cada um, classifique separadamente: severidade e prioridade. Quantos têm prioridade inflada por pressão?
  • Crie um framework 2×2: Severidade × Frequência. Bugs de alta severidade e alta frequência são emergência.
👤

Impacto no usuário como critério

Quantos usuários são afetados? Com que frequência esse fluxo é usado? Existe workaround? Essas perguntas dão objetividade a uma decisão que costuma ser subjetiva.

🏋️ Exercícios Rápidos
  • Para o próximo bug a priorizar, responda: Qual % dos usuários ativos passa por esse fluxo? Com que frequência? Existe workaround? Qual o custo do workaround?
  • Compare a prioridade antes e depois de responder essas perguntas. A decisão mudou?
🗂️

Bugs vs. Features: o equilíbrio

Nenhum produto deve ter 100% do tempo em bugs nem em features. O equilíbrio depende da maturidade do produto. O que não pode acontecer é decidir sem critério.

🏋️ Exercícios Rápidos
  • Qual % do último sprint foi dedicado a bugs? Se não existe política explícita, o time tende a sub ou superinvestir.
  • Defina com o time uma política: "Se passar de X bugs críticos abertos, o próximo sprint tem 30% dedicado a bugs."
🧪

Laboratório: Framework de Priorização de Bugs

Construa critérios objetivos para o seu contexto

1
Criando o framework de priorização do seu produto
  • 1. Liste os 5 fluxos mais críticos do seu produto.
  • 2. Defina para cada fluxo: qual severidade de bug exige correção imediata (P0), no próximo sprint (P1) ou no backlog (P2)?
  • 3. Aplique o framework retroativamente nos últimos 10 bugs. A prioridade que você deu bate com o framework?
  • 4. Compartilhe com QA e dev. Eles concordam? Os critérios fazem sentido para quem está mais próximo da implementação?
🎯 PO/PM · Módulo 4

Métricas de Qualidade para PO/PM

Você não precisa entender de automação de testes para usar métricas de qualidade. Você precisa saber quais perguntas fazer e como interpretar as respostas para tomar decisões melhores.

📊

As métricas que importam para PO/PM

Taxa de escape de bugs, taxa de regressão, MTTR (tempo médio para corrigir), densidade de bugs por feature nova.

🏋️ Exercícios Rápidos
  • Qual é a taxa de escape de bugs nos últimos 3 meses? Se você não sabe imediatamente, essa métrica não está sendo monitorada: e deveria estar.
  • Compare densidade de bugs entre features. Alguma área consistentemente gera mais bugs? Isso é sinal de débito técnico ou especificação ruim.
📈

Usando métricas em decisões de produto

Alta taxa de regressão pode indicar que o ritmo de features está acima da capacidade técnica do time.

🏋️ Exercícios Rápidos
  • Na próxima reunião de planejamento, traga as métricas de qualidade do sprint anterior. Como elas influenciam o que deve entrar no próximo sprint?
  • Se a taxa de regressão aumentou 20% nos últimos 2 sprints, o que isso indica sobre a velocidade atual de entrega?
🎯

Qualidade como métrica de sucesso de produto

Velocidade sem qualidade cria débito que eventualmente para o time. Incluir métricas de qualidade nos OKRs não é overhead: é sustentabilidade.

🏋️ Exercícios Rápidos
  • Os OKRs do produto incluem alguma métrica de qualidade? Se não, proponha: "Taxa de escape ≤ X%" ou "MTTR ≤ Y horas para bugs críticos".
  • Como você mediria o impacto de uma melhoria de qualidade? Redução de tickets de suporte? Aumento de NPS? Redução de churn?
🧪

Laboratório: Dashboard de Qualidade para PO

Construa uma visão que ajuda nas suas decisões

1
Construindo seu painel de métricas de qualidade
  • 1. Defina as 4 métricas mais relevantes: taxa de escape, taxa de regressão, MTTR para bugs críticos, % de histórias que voltam do QA com bug.
  • 2. Colete dados dos últimos 3 meses. A tendência é: melhorando, estável ou piorando?
  • 3. Para cada métrica em piora, identifique a causa possível: ritmo alto demais? Débito técnico? Critérios insuficientes?
  • 4. Apresente na próxima retro. A conversa que ele gera costuma ser mais produtiva do que qualquer discussão abstrata sobre qualidade.
🎯 PO/PM · Módulo 5

Backlog com Qualidade Embutida

A qualidade começa na qualidade do backlog. Histórias mal escritas são a primeira fonte de retrabalho: antes do dev escrever uma linha.

🗂️

A história que o QA consegue testar

Uma boa história responde: quem quer? o quê? por quê? Uma história testável adiciona: como eu sei que funcionou?

🏋️ Exercícios Rápidos
  • Para cada história no backlog refinado, peça ao QA estimar em quantos minutos escreve os primeiros 5 casos de teste. Se demorar mais de 15 minutos ou exigir perguntas, a história precisa mais detalhamento.
  • Adicione uma seção fixa nas histórias: "Como testar": com os cenários principais que o QA deve cobrir.
🔍

Refinamento com QA presente

QA no refinamento não é overhead: é investimento. Cada pergunta que o QA faz é um bug que não aparece no sprint review.

🏋️ Exercícios Rápidos
  • Nos próximos 3 refinamentos, peça ao QA para levantar edge cases de cada história antes de estimar. Quantas histórias precisaram revisão?
  • Crie um acordo: histórias sem passar pelo QA no refinamento não entram no sprint.
🚫

O custo de uma história que volta do sprint

Cada troca dev→QA→dev tem custo de contexto multiplicado. Investir em clareza antes do sprint é mais barato do que pagar o custo de retorno.

🏋️ Exercícios Rápidos
  • No último sprint, quantas histórias passaram pelo ciclo dev→QA mais de uma vez? Qual foi a causa em cada caso?
  • Se mais de 50% são "comportamento não especificado", o problema está no refinamento, não no desenvolvimento.
🧪

Laboratório: Refinamento com Visão de Qualidade

Transforme o refinamento na sua principal ferramenta de prevenção

1
Três perguntas de qualidade para cada história
  • 1. Antes de cada refinamento, revise cada história com três perguntas: (1) O QA consegue escrever testes? (2) Os edge cases estão especificados? (3) Os critérios são objetivos e mensuráveis?
  • 2. Durante o refinamento, convide o QA explicitamente a levantar cenários não cobertos.
  • 3. Após 2 sprints, meça: quantas histórias voltaram do QA com bug de "comportamento não especificado"? Compare com os 2 anteriores.
💡 Se o QA não levanta nenhuma pergunta no refinamento, ou as histórias são excepcionalmente claras: ou o QA não está engajado. As duas situações merecem atenção.
⚙️ Trilha DevOps · SRE

Qualidade começa no pipeline que você mantém

Esta trilha é sobre usar o pipeline como ferramenta ativa de qualidade: não apenas como esteira de deploy. Gates, observabilidade, confiabilidade e resposta a incidentes são parte do trabalho de qualidade tanto quanto qualquer teste.

⚙️ Para DevOps e SREs de qualquer nível 🛡️ Qualidade além do teste manual 📡 Entrega com mais confiança
5Módulos
10+Exercícios
12+Recursos
5Labs
⚙️

O DevOps que torna a qualidade estrutural: não dependente de atenção humana

Como o pipeline pode ser a rede de segurança que o QA nunca consegue ser sozinho.

Por que qualidade é problema de DevOps também

QA testa o que foi construído. DevOps controla como e quando isso chega em produção: e com que visibilidade. Um pipeline sem gates pode levar código com bug para produção mais rápido do que qualquer processo manual consegue impedir.

O que muda quando DevOps pensa em qualidade

  • Você configura gates que bloqueiam deploys com qualidade insuficiente: cobertura abaixo do mínimo, testes falhando, vulnerabilidades conhecidas.
  • Você instrumenta o sistema para revelar problemas antes do usuário reportar: métricas, logs estruturados, alertas inteligentes.
  • Você constrói ambientes de teste que espelham produção: porque bugs que só aparecem em produção são bugs que os testes não encontraram por falta de contexto.
  • Você documenta runbooks de incidente: para que quando algo der errado, o tempo de resposta seja de minutos, não de horas.
"O pipeline ideal não é o que entrega mais rápido: é o que entrega com a qualidade certa, na velocidade sustentável. Velocidade sem qualidade é só acumular débito mais rápido."
⚙️ DevOps · Módulo 1

Gates de Qualidade no Pipeline

Um gate de qualidade é uma verificação automática que impede o avanço no pipeline se determinado critério não for atendido. É a forma de tornar qualidade uma propriedade estrutural do processo.

🚦

Quais gates fazem sentido em qual fase

Gates muito pesados no início criam fricção. Gates ausentes no final deixam passar problemas. A arte está em colocar o gate certo no momento certo.

🏋️ Exercícios Rápidos
  • Mapeie as fases do pipeline e liste os gates existentes. Existe fase sem nenhum gate? Existe gate tão lento que é ignorado?
  • Para cada problema que chegou em produção no último trimestre, em qual fase do pipeline poderia ter sido detectado com um gate adequado?
📏

Cobertura de código como gate

Cobertura mínima como gate é útil: mas só se o critério for pensado. 80% de cobertura num módulo crítico é diferente de 80% em código de infraestrutura.

🏋️ Exercícios Rápidos
  • Seu pipeline tem gate de cobertura? O threshold é baseado em evidência ou foi escolhido arbitrariamente?
  • Configure cobertura diferenciada por módulo: módulos de negócio crítico com threshold mais alto, infraestrutura mais flexível.
🔒

Gates de segurança e vulnerabilidades

SAST, SCA e secrets scanning são gates de qualidade que pertencem ao pipeline de qualquer produto em produção.

🏋️ Exercícios Rápidos
  • O pipeline verifica dependências com vulnerabilidades conhecidas? Dependabot, Snyk ou OWASP Dependency Check fazem isso automaticamente.
  • Existe secrets scanning? Um token vazado em commit é problema de qualidade e de segurança.
🧪

Laboratório: Auditoria de Gates do Pipeline

Mapeie lacunas e proponha melhorias concretas

1
Mapeamento e priorização de gates
  • 1. Desenhe o pipeline completo. Para cada etapa: o que é verificado, qual o critério de falha, qual o tempo de execução.
  • 2. Para os últimos 5 bugs em produção: em qual etapa poderiam ter sido detectados? Essa etapa existe?
  • 3. Priorize lacunas por: impacto × custo de implementação. Comece pelo quadrante alto impacto / baixo custo.
  • 4. Implemente um gate novo e meça: em quantas execuções ele capturou algo que antes passaria?
⚙️ DevOps · Módulo 2

Observabilidade como Ferramenta de QA

Observabilidade não é só para SRE. Com boa observabilidade, bugs são detectados antes do usuário reportar.

📊

Os três pilares: métricas, logs e traces

Métricas mostram o que está acontecendo. Logs mostram o que aconteceu. Traces mostram por onde a requisição passou. Os três juntos permitem diagnosticar qualquer problema rapidamente.

🏋️ Exercícios Rápidos
  • Para o sistema mais crítico: existe dashboard de métricas? Os logs são estruturados? Existe tracing? Qual dos três pilares está mais fraco?
  • Simule uma investigação de incidente usando apenas as ferramentas disponíveis. O que você conseguiu diagnosticar? O que faltou?
🔔

Alertas que avisam antes do usuário reclamar

Um alerta bom dispara antes do usuário perceber o problema. Um alerta ruim dispara tão frequentemente que o time o ignora.

🏋️ Exercícios Rápidos
  • Revise os alertas configurados. Quantos dispararam no último mês sem indicar problema real?
  • Identifique o último incidente que o usuário reportou antes do monitoramento alertar. O que precisaria estar monitorado?
🎯

SLOs e SLIs: qualidade em números

SLO é a meta de qualidade do serviço. SLI é a métrica que mede se estamos atingindo. Juntos, tornam qualidade mensurável e objetiva.

🏋️ Exercícios Rápidos
  • Defina um SLO para o serviço mais crítico: disponibilidade, latência e taxa de erro. O serviço está atingindo o SLO hoje?
  • Configure um error budget. Como você está gastando esse budget? Em deploys? Em dependências externas?
🧪

Laboratório: SLOs do seu Serviço

Torne qualidade mensurável com SLOs práticos

1
Definindo e monitorando SLOs
  • 1. Escolha o serviço mais crítico. Defina 3 SLOs: disponibilidade, latência p99 e taxa de erro.
  • 2. Configure os SLIs correspondentes no seu sistema de monitoramento.
  • 3. Verifique o histórico dos últimos 30 dias. O serviço atingiu os SLOs? Quando não atingiu, qual foi a causa?
  • 4. Configure um alerta que dispara quando o error budget estiver 50% consumido: para agir antes de violar o SLO.
⚙️ DevOps · Módulo 3

Confiabilidade como Qualidade

Um sistema que falha de forma previsível e recuperável tem qualidade superior ao que funciona 99% do tempo mas falha de forma imprevisível. Confiabilidade é uma dimensão de qualidade tão importante quanto funcionalidade.

🛡️

Design para falha: tudo vai falhar eventualmente

Sistemas resilientes não são os que nunca falham: são os que falham de forma controlada, se recuperam rapidamente e não propagam falhas para componentes adjacentes.

🏋️ Exercícios Rápidos
  • O que acontece quando o banco fica indisponível por 30 segundos? Falha silenciosa, erro amigável ou fallback? Cada um é um nível diferente de resiliência.
  • Mapeie os pontos únicos de falha (SPOF). Qual SPOF, se falhar, causa maior impacto? Qual é a estratégia de mitigação?
🔁

Deployments seguros: canary, blue-green e feature flags

Estratégias como canary release e blue-green deployment reduzem o raio de explosão de uma mudança ruim e permitem rollback rápido.

🏋️ Exercícios Rápidos
  • O deploy atual é tudo-ou-nada ou gradual? Qual é o plano de rollback quando uma mudança causa problema em produção?
  • Identifique o último incidente causado por deploy. Um deploy gradual teria reduzido o impacto?
⏱️

MTTR: a métrica que define a maturidade

Mean Time To Recovery é quanto tempo leva para restaurar o serviço após uma falha. Sistemas maduros se recuperam em minutos. Imaturos levam horas.

🏋️ Exercícios Rápidos
  • Qual é o MTTR médio dos últimos 5 incidentes? Se não existe esse registro, o primeiro passo é criar.
  • Onde o tempo é gasto na resposta: detecção, diagnóstico ou recuperação? Onde está a maior oportunidade de melhoria?
🧪

Laboratório: Simulação de Falha Controlada

Pratique resiliência antes que o problema apareça em produção

1
Game day: simulando falha em staging
  • 1. Em staging, simule a indisponibilidade de uma dependência crítica usando toxiproxy ou similar.
  • 2. Observe: o sistema falha silenciosamente ou com erro claro? O usuário recebe mensagem útil? Os logs capturam o problema?
  • 3. Documente o comportamento observado vs. esperado. Onde há divergência, abra uma melhoria.
  • 4. Cronometre: quanto tempo desde a simulação até a detecção pelo monitoramento? Esse é seu "tempo de detecção" atual.
💡 O objetivo do game day não é causar problemas: é descobrir problemas antes que a produção os descubra por você.
⚙️ DevOps · Módulo 4

Gestão de Incidentes com Qualidade

Como você responde a um incidente é tão importante quanto como você o previne. Um processo bem definido reduz o MTTR e gera aprendizado que previne o próximo incidente.

🔥

Runbook: o guia que salva às 3h da manhã

Um runbook é um conjunto de passos documentados para responder a tipos específicos de incidente. Quando o alerta dispara às 3h, o on-call não deve depender de memória.

🏋️ Exercícios Rápidos
  • Para os 3 tipos de incidente mais frequentes, existe runbook documentado? Se não, escreva o do incidente mais recente enquanto ainda está fresco.
  • Teste o runbook com alguém que não esteve no incidente original. Ele consegue seguir os passos e chegar à mesma resolução?
📋

Post-mortem sem culpa

O post-mortem blameless foca em sistemas e processos, não em pessoas. O objetivo é entender por que o sistema permitiu que o incidente acontecesse.

🏋️ Exercícios Rápidos
  • Para o último incidente, escreva um post-mortem: impacto, linha do tempo, causa raiz, contribuições do sistema, ações de melhoria. Sem mencionar nomes.
  • Verifique as ações dos últimos 3 post-mortems. Foram implementadas? Post-mortem sem action items implementados é só documentação.
📞

Comunicação durante incidentes

A comunicação é tão crítica quanto a resolução técnica. Quem comunica, por qual canal e com qual frequência precisa estar definido antes do incidente.

🏋️ Exercícios Rápidos
  • Existe protocolo de comunicação de incidentes? Se não, defina antes do próximo.
  • Crie templates para os níveis de severidade: P0 (crítico fora), P1 (degradado), P2 (isolado com workaround).
🧪

Laboratório: Runbook do Próximo Incidente

Documente antes que a urgência impeça

1
Runbook completo para o incidente mais provável
  • 1. Identifique o tipo de incidente mais provável: banco lento, serviço externo indisponível, spike de memória.
  • 2. Documente: (a) Como detectar: quais alertas/métricas indicam? (b) Como diagnosticar: quais queries/dashboards verificar? (c) Como resolver: passos ordenados. (d) Como verificar resolução.
  • 3. Compartilhe com o time. Alguém que não conhece o sistema consegue seguir sozinho?
  • 4. Defina data de revisão. A cada incidente real, atualize com o que aprendeu.
⚙️ DevOps · Módulo 5

Shift-Left no Pipeline

Shift-left no contexto de DevOps significa verificar qualidade no commit, no PR, no build: não apenas em staging ou produção.

⬅️

Pre-commit hooks: qualidade antes do commit

Pre-commit hooks executam verificações antes do código ser commitado: linting, formatação, testes rápidos, verificação de secrets. São a primeira linha de defesa.

🏋️ Exercícios Rápidos
  • O time usa pre-commit hooks? Se não, configure com Husky (JS) ou pre-commit (Python). Comece com linting: alto impacto, baixo custo.
  • Meça o tempo de execução dos hooks. Se demorar mais de 5 segundos, devs vão usar --no-verify. Hooks lentos são hooks ignorados.
🔍

Análise estática no pipeline

Análise estática detecta problemas sem executar o código: bugs comuns, violações de estilo, complexidade excessiva, vulnerabilidades.

🏋️ Exercícios Rápidos
  • Quais ferramentas de análise estática o pipeline usa? SonarQube, ESLint, Pylint? Se nenhuma, configure uma como gate que reporta mas não bloqueia ainda.
  • Execute no codebase atual. Categorize: bugs potenciais, code smells, vulnerabilidades. Priorize os de segurança.
🌿

Ambientes efêmeros para testes de PR

Ambientes criados automaticamente para cada PR e destruídos após o merge permitem testar a mudança em isolamento antes de tocar o branch principal.

🏋️ Exercícios Rápidos
  • O time tem ambientes de teste por PR? Se não, qual seria a solução mais simples: containers Docker, Kubernetes namespaces ou staging compartilhado com isolamento?
  • Calcule o custo de um ambiente efêmero vs. o custo de um bug que chegou em produção porque não havia onde testar isoladamente.
🐳

Containers como infraestrutura de qualidade

Docker e containers são a base de ambientes de teste reproduzíveis e pipelines confiáveis. Para quem cuida de operações e DevOps, entender containers não é opcional: é a linguagem comum entre dev, QA e infra. Ambientes efêmeros, testes de integração isolados, pipelines paralelas e chaos engineering dependem todos de containers rodando de forma previsível.

🏋️ Exercícios Rápidos
  • Mapeie quais etapas do pipeline atual dependem de containers e quais ainda rodam direto no runner. Para cada etapa sem container, avalie o risco: o ambiente do runner é garantidamente consistente? O que acontece se uma dependência do SO muda?
  • Configure um docker-compose.yml de ambiente de teste completo: aplicação, banco de dados e serviço de mock de API externa. Documente o comando para subir e derrubar tudo. Qualquer pessoa do time deve conseguir reproduzir o ambiente local em menos de 5 minutos.
  • Implemente health checks nos containers de teste: healthcheck no docker-compose garante que o pipeline só avança quando o banco de dados está pronto para aceitar conexões. Elimina as clássicas race conditions de "banco subindo enquanto a aplicação já tenta conectar".
  • Configure limpeza automática de containers e imagens antigas no CI: docker system prune -f antes de cada build evita acúmulo de camadas e disco cheio no runner, que é uma das causas mais frequentes de falhas intermitentes em pipelines.
🧪

Laboratório: Seu Primeiro Gate de Shift-Left

Adicione uma verificação automática que não existia antes

1
Adicionando análise estática ao pipeline
  • 1. Escolha a ferramenta para o stack principal: ESLint para JS/TS, Pylint para Python, SonarQube para qualquer linguagem.
  • 2. Configure com perfil de regras inicial conservador: apenas erros críticos como gate, o resto como warning.
  • 3. Integre no pipeline após o build. Configure para reportar mas não bloquear ainda: isso permite calibrar sem travar o time.
  • 4. Após 2 semanas, analise os reports. Configure como gate bloqueante apenas para bug/security. Warnings ficam como informativos.
💡 Nunca configure um gate bloqueante antes de entender o baseline. Bloquear com 500 issues no dia 1 vai gerar resistência. Mostre o valor primeiro.
🎨 Trilha UX · Design

Qualidade começa no design que você cria

Decisões de design criam ou evitam problemas de qualidade. Interface ambígua gera bug de interpretação. Design inacessível exclui usuários. Handoff mal feito cria feature diferente do que foi projetado. Qualidade é sua responsabilidade também.

🎨 Para UX e Designers de qualquer nível 🤝 Trabalhe melhor com Dev e QA ♿ Acessibilidade como padrão
5Módulos
10+Exercícios
12+Recursos
5Labs
🎨

O designer que reduz bugs antes que o código exista

Como decisões de design impactam diretamente a qualidade do produto final.

O design como fonte de bugs

Muitos bugs não são erros de código: são decisões de design que não contemplaram todos os estados possíveis. Tela que não define o estado de loading. Formulário que não especifica o comportamento de erro. Fluxo que não considera o usuário sem permissão. O dev implementou exatamente o que estava no design: e o design estava incompleto.

O que muda quando o UX pensa em qualidade

  • Você projeta todos os estados da tela: não só o happy path, mas loading, erro, vazio, sem permissão, limite atingido.
  • Você testa suas próprias ideias com usuários: antes de passar para o dev, porque retrabalho de design é muito mais barato que retrabalho de código.
  • Você faz handoff que o dev e QA conseguem seguir: com especificações claras e comportamentos documentados.
  • Você considera acessibilidade desde o início: porque retrofit de acessibilidade é caro e doloroso.
"Todo estado que o design não especifica é uma decisão que o dev vai tomar sozinho: e que o QA vai encontrar como bug."
🎨 UX · Módulo 1

Testes de Usabilidade como Qualidade

Teste de usabilidade não é só sobre "as pessoas gostam do design": é sobre encontrar pontos de confusão e frustração antes que virem bugs reportados em produção.

🧪

Quando testar com usuários (antes do dev)

Testar um protótipo com 5 usuários encontra 85% dos problemas de usabilidade. O mesmo teste no produto final encontra os mesmos 85%: mas já custou o tempo de desenvolvimento.

🏋️ Exercícios Rápidos
  • Para a próxima feature, teste o protótipo antes de passar para o dev. Use Figma com protótipo interativo e 3 a 5 participantes. Quantos problemas você encontrou que não estavam visíveis no design estático?
  • Categorize os problemas: navegação confusa, expectativa não correspondida, erro não comunicado, fluxo muito longo.
📋

Roteiro de teste focado em qualidade

Um bom roteiro não pergunta "você gostou?": pede que o usuário complete tarefas reais e observa onde ele trava, erra e tem expectativas não correspondidas.

🏋️ Exercícios Rápidos
  • Crie um roteiro com 3 tarefas: cadastrar, editar e excluir. Para cada tarefa, defina o que observar e o que constitui sucesso ou falha.
  • Após o teste, classifique por severidade: crítico (impede completar), moderado (confusão mas avança), cosmético (irritação menor).
🔄

Feedback loop com QA

QA encontra bugs técnicos. UX encontra problemas de experiência. Quando os achados são compartilhados, o produto melhora muito mais rápido.

🏋️ Exercícios Rápidos
  • Combine uma sessão mensal de 30 minutos com o QA: ele mostra os bugs de UI mais reportados, você mostra problemas encontrados em testes. Identifiquem padrões comuns.
  • Quando o QA encontrar bug de interface, investigue: era decisão de design não especificada? Como o handoff poderia ter prevenido?
🧪

Laboratório: Teste de Usabilidade com Foco em Qualidade

Encontre problemas antes do dev implementar

1
Teste em protótipo de feature próxima
  • 1. Escolha uma feature do próximo sprint. Crie um protótipo interativo no Figma.
  • 2. Recrute 3 participantes. Dê a cada um uma tarefa específica para completar sem ajuda.
  • 3. Observe sem interferir. Anote cada hesitação, erro ou confusão. Não explique o design.
  • 4. Liste os problemas, classifique por severidade e apresente ao time antes do dev começar. Quantas horas de desenvolvimento você economizou?
💡 O sinal mais valioso não é o que o usuário fala: é o que ele faz. Quando clica num lugar errado, esse é o design que precisa mudar.
🎨 UX · Módulo 2

Design que Reduz Bugs de Interface

A maior fonte de bugs de interface é design que não especificou todos os estados. Um componente com 5 estados possíveis precisa de 5 telas de design, não de 1.

🗂️

Projetando todos os estados da interface

Toda interface tem múltiplos estados: vazio, loading, com dado, com erro, sem permissão, limite atingido. Cada estado não especificado é uma decisão que o dev toma sozinho.

🏋️ Exercícios Rápidos
  • Abra o design de uma feature recente. Existe design para: estado vazio? Loading? Erro de API? Usuário sem permissão? Limite atingido? Cada estado faltante é um bug potencial.
  • Crie uma checklist de estados obrigatórios. Antes de passar qualquer tela para o dev, percorra a checklist.
⚠️

Mensagens de erro que ajudam o usuário

"Algo deu errado" não é só má experiência: é um bug de qualidade. O usuário não sabe o que fazer. O suporte não consegue diagnosticar.

🏋️ Exercícios Rápidos
  • Liste as 5 mensagens de erro mais frequentes. Para cada uma: ela explica o que deu errado? Sugere o que o usuário pode fazer? Tem código para suporte?
  • Reescreva seguindo: o que aconteceu + por que + o que fazer agora.
📏

Consistência como prevenção de bugs

Inconsistência de design gera bugs porque o dev implementa cada instância de forma diferente. Um design system padronizado reduz a superfície de bugs.

🏋️ Exercícios Rápidos
  • Existem botões com o mesmo comportamento mas nomes diferentes no Figma? Campos com estilos inconsistentes? Cada inconsistência tende a gerar implementação inconsistente.
  • Para os 3 componentes mais usados, verifique se existe documentação clara de comportamento no design system.
🧪

Laboratório: Auditoria de Estados do Design

Mapeie os estados não especificados antes que virem bugs

1
Mapeamento de estados faltantes
  • 1. Escolha uma feature em design ativo. Liste todos os componentes interativos.
  • 2. Para cada componente, verifique os estados obrigatórios: default, hover, focus, disabled, loading, error, success, empty. Marque os que têm design e os faltantes.
  • 3. Priorize: quais estados faltantes têm maior probabilidade de aparecer em uso real?
  • 4. Apresente o mapeamento ao dev antes do desenvolvimento. A pergunta "o que aparece quando X?" respondida agora evita a reunião de esclarecimento no meio do sprint.
🎨 UX · Módulo 3

Acessibilidade como Qualidade

Acessibilidade não é um checklist de conformidade: é qualidade de experiência para todos. Um produto inacessível tem bugs que afetam usuários reais.

Os princípios WCAG que todo designer deve conhecer

WCAG 2.1: Perceptível, Operável, Compreensível e Robusto. Para design, os mais críticos são contraste de cores, alternativas de texto, ordem de foco e tamanho de área clicável.

🏋️ Exercícios Rápidos
  • Use o Figma Accessibility plugin para verificar o contraste do design atual. Todos os textos atingem 4.5:1 (AA)? Se não, você tem bugs de acessibilidade no design.
  • Verifique os botões de ação: a área clicável tem pelo menos 44×44px?
🖥️

Design para screen readers e teclado

Fluxo de leitura, ordem de foco, labels de formulário e hierarquia de headings são decisões de design com impacto direto de acessibilidade.

🏋️ Exercícios Rápidos
  • Ative o VoiceOver (Mac) ou NVDA (Windows) e navegue pelo produto por 15 minutos sem usar o mouse. O que ficou confuso? Essa é a experiência de usuários cegos.
  • Navegue usando apenas Tab e Enter. Você consegue completar as tarefas principais? A ordem de foco faz sentido?
🎨

Cor não é o único comunicador

Usar apenas cor para comunicar estado cria problemas para usuários daltônicos. Sempre combine cor com outro indicador: ícone, texto ou padrão.

🏋️ Exercícios Rápidos
  • Use o modo daltonismo do Figma para simular daltonismo. Você ainda distingue os estados importantes?
  • Identifique todos os lugares onde cor é o único diferenciador. Adicione ícone ou texto como indicador secundário.
🧪

Laboratório: Auditoria de Acessibilidade

Encontre e corrija bugs de acessibilidade antes da implementação

1
Auditoria com checklist WCAG
  • 1. Selecione as 5 telas mais usadas. Para cada uma: (a) Contraste ≥ 4.5:1. (b) Imagens têm texto alternativo. (c) Campos têm labels visíveis. (d) Estados de erro não dependem só de cor.
  • 2. Para cada problema: crítico, moderado ou cosmético.
  • 3. Corrija os críticos antes de passar para o dev. Documente os moderados no handoff.
  • 4. Após a implementação, teste novamente com screen reader. O que ficou diferente do que o design especificou?
🎨 UX · Módulo 4

Handoff sem Surpresas

Handoff é o momento onde mais bugs de interface nascem. Um handoff bem feito não é só entregar o Figma: é garantir que dev e QA tenham tudo que precisam.

📦

O que deve estar no handoff além do design

Um handoff completo inclui: todos os estados dos componentes, comportamentos de animação, regras de responsividade, textos com regras de truncamento e edge cases.

🏋️ Exercícios Rápidos
  • Revise o handoff da última feature. O dev teve que te perguntar algo durante a implementação? Cada pergunta é um item que deveria ter estado no handoff.
  • Crie um template com seções obrigatórias: design (Figma), comportamentos, regras, edge cases, e "Para o QA".
🤝

Revisão de implementação com o dev

A revisão de implementação (design QA) não é microgerenciamento: é garantir que o que foi projetado foi construído. 15 minutos antes do merge previnem muitos bugs de UI.

🏋️ Exercícios Rápidos
  • Estabeleça um ritual: antes da feature ir para QA, o UX revisa a implementação por 15 minutos. Liste o que verificar: espaçamentos, cores, comportamentos de hover/focus/error.
  • Crie uma checklist de design review para o dev fazer auto-revisão antes de chamar o UX.
🗣️

Anotações que o QA consegue usar

QA precisa saber o que verificar. Anotações no Figma que descrevem comportamentos esperados são tão valiosas para o QA quanto para o dev.

🏋️ Exercícios Rápidos
  • Para a próxima feature, adicione uma seção no Figma "Para o QA": comportamentos a verificar, edge cases, animações com duração e tipo.
  • Pergunte ao QA: o que costuma faltar nos designs que dificulta a criação de casos de teste? Incorpore no processo de handoff.
🧪

Laboratório: Template de Handoff Ideal

Crie o handoff que dev e QA gostariam de sempre receber

1
Construindo seu template de handoff
  • 1. Entreviste dev e QA separadamente: "O que costuma faltar no handoff que causa problemas no seu trabalho?"
  • 2. Agrupe as respostas: comportamento, estados, responsividade, acessibilidade, textos, edge cases.
  • 3. Crie um template que cobre cada categoria. Defina o que é obrigatório vs. opcional por complexidade.
  • 4. Use nas próximas 3 features e meça: quantas perguntas o dev fez durante a implementação? Compare com as 3 anteriores.
💡 O melhor indicador de um bom handoff não é o quanto foi documentado: é quantas perguntas ele eliminou.
🎨 UX · Módulo 5

Feedback Loop com QA e Dados de Uso

O design não termina no handoff. Bugs de UI, user research pós-lançamento e analytics são a matéria-prima para melhorar continuamente a qualidade da experiência.

🔁

Bugs de UI como aprendizado de design

Cada bug de UI é uma oportunidade: o design não especificou um estado, o comportamento foi ambíguo, ou a expectativa do usuário não foi atendida.

🏋️ Exercícios Rápidos
  • Revise os últimos 10 bugs de UI. Para cada um: (a) design não especificou esse estado, (b) design foi implementado incorretamente, (c) comportamento do usuário não foi antecipado. Qual é mais frequente?
  • Para a categoria mais frequente, defina uma melhoria no processo.
📊

Analytics como teste de qualidade

Taxa de abandono de formulário, cliques em elementos não clicáveis, retorno frequente a telas específicas: esses dados mostram onde o design está criando fricção.

🏋️ Exercícios Rápidos
  • Identifique as 3 telas com maior taxa de abandono. O que o analytics sugere sobre o problema de design?
  • Configure um evento para cliques em elementos não interativos. Esses cliques frustrados revelam onde o usuário espera interatividade que não existe.
🔬

Sessões de observação pós-lançamento

Observar usuários reais usando a feature depois do lançamento é o teste de qualidade mais honesto que existe.

🏋️ Exercícios Rápidos
  • Para a última feature lançada, organize uma sessão com 3 usuários reais. O que eles fizeram diferente do que você antecipou?
  • Compare com os problemas do teste de usabilidade pré-lançamento. O que o teste detectou? O que passou? Use isso para calibrar os próximos testes.
🧪

Laboratório: Revisão Trimestral de Qualidade

Feche o loop: do design ao dado real

1
Revisão trimestral de qualidade de design
  • 1. Reúna: bugs de UI do período, dados de analytics e feedbacks de suporte relacionados a dificuldades de uso.
  • 2. Mapeie cada problema para a tela ou componente correspondente. Existe padrão? Alguma área consistentemente gera mais problemas?
  • 3. Priorize as 3 melhorias de maior impacto. Para cada uma: o problema atual, a hipótese de melhoria e como você vai medir se funcionou.
  • 4. Implemente, meça e compartilhe o resultado com o time.
📋 Trilha Analista de Negócio

Qualidade começa no requisito que você escreve

Requisitos bem escritos previnem mais bugs do que qualquer teste. Ambiguidade cria divergência entre o que o negócio quer, o que o dev entendeu e o que o QA vai verificar. Eliminar essa ambiguidade é trabalho de qualidade.

📋 Para BAs e analistas de qualquer nível 🎯 Requisitos que viram testes 🔗 Rastreabilidade de ponta a ponta
5Módulos
10+Exercícios
12+Recursos
5Labs
📋

O BA que elimina bugs antes que eles existam

Como requisitos bem escritos são a forma mais barata de garantir qualidade.

Por que requisitos são uma questão de qualidade

Corrigir um bug de requisito em produção custa 100 vezes mais do que na fase de especificação. O BA é a pessoa mais capaz de eliminar essa classe de problemas, simplesmente escrevendo requisitos que não admitem interpretação múltipla.

O que muda quando o BA pensa em qualidade

  • Você escreve requisitos que o QA consegue transformar em casos de teste sem te perguntar nada.
  • Você mapeia cenários de negócio: não só o fluxo principal, mas exceções, casos limite e comportamentos quando algo dá errado.
  • Você mantém rastreabilidade: para que qualquer mudança de requisito seja rastreada até os testes.
  • Você elimina ambiguidades ativamente: questionando requisitos vagos antes que cheguem no sprint.
"Um requisito ambíguo é uma decisão que foi terceirizada involuntariamente para o dev. Às vezes ele decide certo. Às vezes decide errado. Sempre é mais caro do que você ter decidido antes."
📋 BA · Módulo 1

Requisitos Testáveis

Um requisito testável pode ser verificado objetivamente. Se o QA não consegue escrever um caso de teste a partir dele, o requisito precisa ser reescrito.

Características de um requisito testável

Específico, mensurável, completo e não-ambíguo. Um único critério claro de verificação, sem julgamento subjetivo.

🏋️ Exercícios Rápidos
  • Para cada requisito do último projeto, pergunte: "Como eu sei que esse requisito foi atendido?" Se a resposta depende de julgamento subjetivo, não é testável.
  • Identifique os verbos problemáticos: "deve ser rápido", "deve ser fácil", "deve funcionar bem". Cada um precisa virar critério mensurável.
🔍

Técnicas para eliminar ambiguidade

Ambiguidade vem de pronomes sem referente, condições implícitas e quantificadores vagos como "muitos usuários" ou "frequentemente".

🏋️ Exercícios Rápidos
  • Para cada requisito com "ele", "eles", "isso" sem referente claro, substitua pela entidade específica. Essa mudança elimina grande parte da ambiguidade.
  • Para cada requisito com "exceto" ou "a não ser que", escreva explicitamente os casos de exceção como requisitos separados.
📐

Funcionais vs. não-funcionais

Os não-funcionais (performance, segurança, disponibilidade) são os mais frequentemente negligenciados: e os que geram mais surpresas em produção.

🏋️ Exercícios Rápidos
  • No último projeto, havia requisito de performance? De disponibilidade? De segurança? De capacidade?
  • Para cada requisito não-funcional ausente, escreva retrospectivamente o que deveria ter sido especificado. Use como base para o próximo projeto.
🖼️

Prototipação como validação de requisitos

Um protótipo é a forma mais barata de testar um requisito antes de ele virar código. BA e PO que usam protótipos para validar com usuários reais antes do desenvolvimento começar eliminam uma categoria inteira de bugs: os bugs de requisito, onde o sistema faz exatamente o que foi especificado, mas não o que o usuário precisava.

Tipos de protótipo por fidelidade: baixa (papel, Excalidraw, wireframe rápido) para validar fluxo e lógica; média (Figma navegável) para validar UX e critérios de aceite; alta (protótipo funcional) para validar integrações e regras de negócio complexas.

🏋️ Exercícios Rápidos
  • Para a próxima história com requisito ambíguo, crie um protótipo de baixa fidelidade em papel ou Excalidraw antes da reunião de refinamento. Use-o para guiar a conversa com o time: "é isso que você quer dizer?" Meça quantas perguntas o protótipo antecipou que seriam descobertas só no desenvolvimento.
  • Faça uma sessão de validação rápida com 3 usuários reais usando um protótipo Figma navegável. Observe sem interferir: onde eles hesitam, o que tentam clicar e o que não encontram. Cada hesitação é um requisito que não estava claro o suficiente. Documente os achados como critérios de aceite novos.
  • Compare duas histórias: uma desenvolvida com protótipo validado e outra sem. Quantos bugs de "não era isso que eu queria" apareceram em cada uma? Use os dados para propor prototipação como parte do Definition of Ready do time.
🧪

Laboratório: Transformando Requisitos Vagos em Testáveis

Reescreva requisitos reais com critério objetivo

1
Auditoria e reescrita de requisitos do projeto atual
  • 1. Selecione 10 requisitos do projeto atual. Para cada um: "Conseguiria escrever um caso de teste automático que verifique se foi atendido?" Se não, marque como ambíguo.
  • 2. Para cada ambíguo, identifique o tipo: vago, incompleto, múltiplas interpretações ou condições implícitas.
  • 3. Reescreva usando critérios objetivos. "O sistema deve ser rápido" vira "O sistema deve responder em menos de 2 segundos para 95% das requisições com até 1000 usuários."
  • 4. Peça ao QA para escrever casos de teste. O que ainda precisou de pergunta? Essa é a próxima rodada de melhoria.
💡 O teste definitivo: um dev consegue implementar e um QA consegue verificar sem perguntar nada ao BA. Se qualquer um precisar perguntar, o requisito ainda não está pronto.
📋 BA · Módulo 2

Rastreabilidade de Requisitos

Rastreabilidade é a capacidade de seguir um requisito até o código que o implementa e os testes que o verificam. Sem ela, mudanças de requisito quebram implementações sem que ninguém perceba.

🔗

Por que rastreabilidade previne bugs

Quando um requisito muda, a rastreabilidade mostra quais casos de teste precisam ser atualizados e qual código pode ser afetado.

🏋️ Exercícios Rápidos
  • Pense no último requisito que mudou. Você identificou rapidamente todos os casos de teste afetados? Todo o código a modificar? Se não, a rastreabilidade estava insuficiente.
  • Para um módulo pequeno, construa manualmente: Requisito → História → Caso de Teste. Quais lacunas você encontrou?
📊

Matriz de rastreabilidade na prática

Necessidade de Negócio → Requisito → História → Caso de Teste → Resultado. Cada coluna pode ser simples: o valor está nas conexões.

🏋️ Exercícios Rápidos
  • Crie uma matriz simples para a próxima feature: planilha com 4 colunas (Requisito | Critério de Aceite | Caso de Teste | Status). Atualize durante o sprint.
  • Use para identificar lacunas: requisito sem caso de teste? Caso de teste sem requisito? Ambas são problemas.
🔄

Gerenciando mudanças com rastreabilidade

Mudanças de requisito são inevitáveis. O problema não é a mudança: é a mudança sem análise de impacto.

🏋️ Exercícios Rápidos
  • Defina um processo que inclua: identificar casos de teste afetados, notificar QA e dev, documentar razão e impacto esperado.
  • Para a próxima mudança, siga o processo e meça: quantos itens foram afetados que você não teria percebido sem rastreabilidade?
🧪

Laboratório: Construindo Rastreabilidade do Zero

Crie a matriz que vai guiar análise de impacto

1
Matriz para feature em desenvolvimento
  • 1. Escolha uma feature em desenvolvimento. Liste todos os requisitos/critérios de aceite.
  • 2. Peça ao QA os casos de teste correspondentes. Mapeie: Requisito ↔ Caso de Teste. Identifique requisitos sem nenhum caso de teste.
  • 3. Para requisitos sem cobertura: não precisa de teste? Lacuna de cobertura? QA não sabia que existia?
  • 4. Após o desenvolvimento, atualize com o status de cada teste. Use para o relatório antes do release: "Todos os requisitos têm cobertura? Todos os testes passaram?"
📋 BA · Módulo 3

Regras de Negócio sem Ambiguidade

Regras de negócio são o coração do sistema: e a maior fonte de bugs quando incompletas. Uma regra óbvia para quem a conhece é completamente obscura para o dev que vai implementá-la.

📐

Tabelas de decisão para regras complexas

Quando uma regra tem múltiplas condições, texto narrativo cria ambiguidade. Tabelas de decisão tornam todas as combinações explícitas.

🏋️ Exercícios Rápidos
  • Identifique uma regra com 3 ou mais condições. Escreva como tabela de decisão: cada linha é uma combinação de condições. Você encontrou combinações que o texto original não cobria?
  • Compare com os casos de teste do QA. Alguma combinação na tabela sem caso de teste? Essa é uma lacuna de cobertura.
🌊

Diagramas de fluxo de processo

Um diagrama de fluxo é o artefato de análise mais universalmente entendido. É a linguagem comum que reduz interpretações divergentes entre dev, QA e negócio.

🏋️ Exercícios Rápidos
  • Para o próximo requisito complexo, crie um diagrama de fluxo antes de escrever o texto. Quantas decisões e caminhos alternativos você mapeou?
  • Valide com dev e QA: eles interpretam os caminhos da mesma forma? Onde divergem é onde o requisito precisa de mais clareza.
🚫

Documentando o que o sistema NÃO deve fazer

Requisitos negativos são frequentemente negligenciados. Mas segurança, validação de acesso e comportamentos proibidos são tão importantes quanto os positivos.

🏋️ Exercícios Rápidos
  • Para a próxima feature, adicione uma seção de "restrições": o que o sistema não deve permitir? Ex: usuário sem permissão não vê dados de outros, campo de preço não aceita valor negativo.
  • Peça ao QA para criar casos de teste a partir das restrições. Esses são os testes de segurança que mais frequentemente ficam sem cobertura.
🧪

Laboratório: Tabela de Decisão para Regra Complexa

Torne uma regra de negócio completamente inequívoca

1
Construindo tabela de decisão para regra real
  • 1. Identifique a regra de negócio mais complexa do projeto: aquela que mais gera dúvidas de implementação.
  • 2. Liste todas as condições. Para 3 condições binárias, existem 8 combinações (2³). Crie uma linha para cada.
  • 3. Para cada combinação, documente o resultado esperado. Combinações não definidas são perguntas que precisam ser respondidas antes do desenvolvimento.
  • 4. Compartilhe com dev e QA. O dev identifica o que implementar. O QA usa cada linha como caso de teste. Quantas combinações estavam faltando na especificação original?
💡 Uma tabela completa para uma regra com 4 condições tem 16 linhas. Se a especificação original tinha menos de 16 critérios de aceite, provavelmente estava incompleta.
📋 BA · Módulo 4

Cenários de Negócio que Viram Testes

Um cenário bem escrito é um caso de teste disfarçado. Quando o BA pensa em cenários com a perspectiva de quem vai testá-los, a distância entre especificação e verificação diminui.

🗺️

Mapeando cenários além do fluxo principal

Usuários reais desfazem ações, voltam atrás, têm dados incompletos, perdem a sessão no meio do processo. Cada um é um cenário que precisa ser especificado.

🏋️ Exercícios Rápidos
  • Para o próximo requisito, mapeie cenários alternativos: "E se o usuário não tiver X?", "E se o sistema estiver em estado Y?", "E se o dado Z for inválido?"
  • Compare o número de cenários alternativos com o número de critérios de aceite. Se há muito mais cenários, os critérios estão incompletos.
🥒

Escrevendo cenários em Given/When/Then

Cenários em Gherkin são simultaneamente especificação de negócio e base para automação de testes.

🏋️ Exercícios Rápidos
  • Reescreva 5 critérios de aceite no formato Gherkin. Onde você precisa de mais informação para completar o "Then"? Cada lacuna é um requisito não respondido.
  • Compartilhe com o QA. Ele consegue automatizar sem te perguntar nada? As perguntas revelam o que precisa ser melhor especificado.
⚠️

Cenários de exceção e tratamento de erros

O que o sistema deve fazer quando algo dá errado é tão importante quanto o que deve fazer quando tudo funciona.

🏋️ Exercícios Rápidos
  • Para a feature atual, liste os pontos onde o sistema pode receber input inválido, onde dependências podem falhar e onde o usuário pode estar em estado inesperado.
  • Para cada cenário de exceção, especifique: o que exibir para o usuário? O que registrar no log? O que notificar para o time?
🧪

Laboratório: Mapa Completo de Cenários

Especifique todos os caminhos, não só o feliz

1
Mapeamento exaustivo de cenários
  • 1. Escolha uma feature de média complexidade. Escreva o cenário de happy path em Gherkin.
  • 2. Para cada step do happy path, pergunte: "O que pode dar errado aqui?" Escreva um cenário de exceção para cada resposta.
  • 3. Adicione cenários de limite: valores mínimos e máximos, campos no limite de caracteres, usuários com permissão parcial.
  • 4. Compartilhe com QA e dev antes do sprint. Quantos cenários existiam antes? Quantos você adicionou? Os adicionados teriam virado bugs?
📋 BA · Módulo 5

Critérios de Aceite como Linguagem Comum

Critérios de aceite são a linguagem que negócio, dev e QA precisam compartilhar. Quando escritos bem, eliminam reuniões de esclarecimento e tornam a entrega mais previsível.

🤝

Construindo critérios com o time

Critérios escritos em isolamento são uma oportunidade perdida. Escrever com dev e QA transforma especificação em atividade colaborativa que já alinha o entendimento.

🏋️ Exercícios Rápidos
  • Nas próximas 3 histórias, compartilhe o rascunho de critérios com dev e QA antes do refinamento formal. O que eles adicionaram? O que questionaram?
  • Crie um ritual: critérios passam por revisão de um dev e um QA antes de entrar no sprint. Meça o impacto no número de bugs.
📏

Granularidade certa

Critérios muito granulares viram especificação técnica. Critérios muito genéricos são inúteis para o QA. O ponto certo: comportamento observável, verificável sem ambiguidade.

🏋️ Exercícios Rápidos
  • Classifique cada critério recente: está no nível de negócio ou no nível técnico? Os técnicos pertencem ao dev, não ao critério de aceite.
  • Para critérios muito genéricos, decomponha em critérios específicos de comportamento. Cada comportamento observável é um critério separado.
🔍

Verificação de critérios antes do sprint

Uma história não está pronta para o sprint se seus critérios não são testáveis. BA e QA devem fazer esse check juntos como parte da Definition of Ready.

🏋️ Exercícios Rápidos
  • Antes do próximo planning, percorra cada história com o QA: "Você consegue escrever casos de teste para esses critérios agora?" Se não, a história não está pronta.
  • Defina uma Definition of Ready que inclua: critérios revisados pelo QA, cenários de exceção documentados, casos de teste preliminares escritos.
🧪

Laboratório: Specification by Example

Use exemplos concretos para eliminar ambiguidade

1
Session de specification by example com o time
  • 1. Escolha uma feature para o próximo sprint. Reúna BA, dev e QA por 45 minutos.
  • 2. Em vez de apresentar critérios prontos, apresente o objetivo. Peça ao grupo: "Dê um exemplo de como deveria funcionar" e "Dê um exemplo de como NÃO deveria." Anote todos.
  • 3. A partir dos exemplos, derive os critérios de aceite. Exemplos são mais difíceis de mal-interpretar do que texto abstrato.
  • 4. Peça ao QA para transformar cada exemplo em caso de teste. Os que ele não conseguir sem perguntas ainda precisam de mais clareza.
💡 Specification by Example é uma das técnicas mais poderosas para alinhar entendimento. Exemplos concretos eliminam a ambiguidade que linguagem abstrata invariavelmente cria.
📖

Glossário de Qualidade

Todos os termos do Roadmap de Qualidade: QA, Dev, DevOps, UX, Agile e Negócio: em um único lugar, com busca rápida e definições em português.

150+ termos
📌Fundamentos de Teste
Baseline
Versão estável e aprovada de um artefato (código, documentação) que serve como referência para comparações futuras.
Bug
Um defeito no software que causa um comportamento inesperado ou incorreto. Tecnicamente, 'bug' é o defeito no código; 'falha' é o sintoma observado pelo usuário.
Caso de Teste
Conjunto de condições e passos que verificam se uma funcionalidade específica funciona conforme o esperado. Inclui pré-condições, passos, dados de entrada e resultado esperado.
Cenário de Teste
Descrição de alto nível de uma situação a ser testada, geralmente em linguagem de negócio. Ex: 'Usuário faz login com credenciais válidas'.
Cobertura de Testes
Medida que indica quanto do sistema foi exercitado pelos testes. Pode ser por requisitos, linhas de código, branches, etc.
Critério de Aceite
Condições que devem ser satisfeitas para que uma história de usuário ou funcionalidade seja considerada completa. Define o 'pronto' do QA.
Defeito
Imperfeição ou problema num artefato de software (código, documentação, configuração) que pode causar falha quando executado.
Erro
Ação humana que produz um resultado incorreto: geralmente o engano do desenvolvedor que originou o defeito.
Evidence
Evidência de execução de um teste: screenshot, log, vídeo ou relatório que comprova que o teste foi executado e qual foi o resultado.
Falha
O comportamento incorreto observado quando o sistema executa um defeito. É o sintoma visível do bug.
Massa de Dados
Conjunto de dados usados para executar testes. Pode ser gerado, importado ou anonimizado a partir de dados reais de produção.
Plano de Testes
Documento que descreve o escopo, abordagem, recursos, cronograma e critérios de entrada e saída de uma atividade de testes.
Rastreabilidade
Capacidade de vincular casos de teste a requisitos, histórias de usuário ou bugs. Garante que tudo que precisa ser testado está coberto.
Suite de Testes
Agrupamento lógico de casos de teste relacionados, normalmente por funcionalidade, módulo ou tipo de teste.
🗂️Tipos e Abordagens
Ad-hoc
Teste informal e não documentado, baseado na intuição do testador. Útil para investigação rápida, não substitui uma estratégia.
Caixa Branca
Abordagem onde o testador tem acesso ao código-fonte e testa caminhos internos, branches e condições lógicas.
Caixa Cinza
Combinação das duas abordagens: o testador tem acesso parcial ao sistema (logs, banco, DevTools) mas não ao código completo.
Caixa Preta
Abordagem de teste onde o testador não tem acesso ao código-fonte. Testa apenas entradas e saídas, como um usuário final.
Re-teste
Execução de um caso de teste específico após a correção de um bug, para confirmar que o defeito foi resolvido.
Regressão
Re-execução de testes existentes para garantir que mudanças recentes não quebraram funcionalidades que já funcionavam.
Sanity Test
Validação focada que verifica se uma correção ou mudança específica funcionou sem quebrar o entorno imediato.
Smoke Test
Suite enxuta (5 a 10 testes) que verifica se o build está minimamente funcional antes de testar em profundidade.
Teste Exploratório
Abordagem onde design e execução acontecem simultaneamente, sem script pré-definido. O testador aprende o sistema enquanto testa.
Teste Funcional
Verifica o que o sistema faz: se as funcionalidades atendem aos requisitos especificados.
Teste Não-Funcional
Verifica como o sistema se comporta: performance, segurança, usabilidade, compatibilidade, acessibilidade.
Teste Unitário
Testa uma unidade isolada de código (função, método) sem dependências externas. Responsabilidade primária do desenvolvedor.
Teste de Integração
Verifica a comunicação entre dois ou mais componentes do sistema: ex: API + banco de dados.
Teste de Sistema
Testa o software completo como um todo, simulando o comportamento real em ambiente controlado.
UAT
User Acceptance Testing: validação feita pelo usuário final ou representante do negócio para confirmar que o sistema atende aos requisitos.
⚙️Processos e Metodologias
ATDD
Acceptance Test-Driven Development: os critérios de aceite são escritos como testes automatizados antes do desenvolvimento começar.
BDD
Behavior-Driven Development: extensão do TDD que usa linguagem natural (Gherkin) para descrever comportamentos esperados, facilitando a colaboração entre negócio e tecnologia.
Definition of Done
Conjunto de critérios que devem ser atendidos para que uma história de usuário seja considerada concluída. Inclui testes, revisão de código, documentação, etc.
Definition of Ready
Critérios que uma história precisa atender antes de entrar em desenvolvimento: refinada, estimada, com critérios de aceite definidos.
Refinamento
Cerimônia ágil onde as histórias futuras são detalhadas, estimadas e preparadas para entrar em desenvolvimento.
Review
Cerimônia ágil onde o time demonstra o que foi entregue na sprint para os stakeholders, validando o incremento do produto.
Shift-Left
Estratégia de mover as atividades de teste para mais cedo no ciclo de desenvolvimento, reduzindo o custo de correção de defeitos.
Shift-Right
Estratégia de testar em produção ou ambientes próximos à produção, usando monitoramento, feature flags e canary releases.
TDD
Test-Driven Development: metodologia onde os testes são escritos antes do código de produção, guiando o design da implementação.
Three Amigos
Reunião entre PO, dev e QA para discutir uma história antes do desenvolvimento, alinhando entendimento e identificando ambiguidades.
🤖Automação
Assertion
Verificação programática que valida se um resultado obtido corresponde ao esperado. É o 'então' do Given/When/Then.
CI/CD
Continuous Integration / Continuous Delivery: prática de integrar código frequentemente e automatizar build, testes e deploy.
Contract Testing
Técnica que verifica se dois serviços concordam com o formato da comunicação entre eles, sem precisar subi-los juntos.
Data-Driven Testing
Abordagem onde o mesmo caso de teste é executado com múltiplos conjuntos de dados, separando lógica de teste dos dados de entrada.
False Negative
Teste que passa mesmo quando existe um defeito no sistema. O cenário mais perigoso: dá falsa sensação de segurança.
False Positive
Teste que reporta falha quando o sistema está correto. Indica problema no próprio teste, não no software.
Flaky Test
Teste que passa e falha de forma intermitente sem mudança no código, geralmente por dependência de timing, estado compartilhado ou recursos externos.
Framework
Estrutura base que organiza e suporta a automação de testes: define padrões, abstrações e ferramentas que compõem a solução.
Headless
Execução de testes de browser sem interface gráfica visível. Mais rápido e adequado para ambientes de CI.
Keyword-Driven
Abordagem onde os testes são descritos por palavras-chave em linguagem natural (ex: 'Fazer Login', 'Verificar Título'), implementadas como funções reutilizáveis.
Locator
Estratégia para identificar elementos na interface: CSS selector, XPath, ID, data-testid. A escolha do locator impacta diretamente a estabilidade dos testes.
Mock
Substituto de uma dependência real que simula comportamentos específicos durante os testes, controlando as respostas recebidas.
Page Object Model
Padrão de design que encapsula os elementos e ações de cada página em classes separadas, tornando os testes mais legíveis e fáceis de manter.
Pipeline
Sequência automatizada de etapas (build, teste, deploy) executada a cada mudança de código. Garante que defeitos sejam detectados cedo.
Service Virtualization
Simulação de dependências externas (APIs, mainframes, serviços de pagamento) para testes sem necessidade da dependência real.
Spy
Wrapper em torno de uma dependência real que registra chamadas sem substituir o comportamento original.
Stub
Similar ao mock, mas focado em fornecer respostas pré-definidas sem verificar como foi chamado. Usado para isolar dependências.
Performance
Latência
Tempo entre o envio de uma requisição e o recebimento da resposta. Diretamente ligada à experiência do usuário.
Load Test
Teste que simula a carga esperada em produção para validar se o sistema se comporta dentro dos critérios de aceite.
Percentil
Medida estatística usada em performance. p95 = 95% das requisições responderam em X ms ou menos. Mais representativa que a média.
Ramp-up
Período de aumento gradual de carga num teste de performance, simulando o crescimento orgânico de usuários.
SLA
Service Level Agreement: acordo formal que define os níveis mínimos de serviço esperados, incluindo disponibilidade e tempo de resposta.
SLO
Service Level Objective: meta interna de nível de serviço, geralmente mais rigorosa que o SLA. Ex: 'p99 < 500ms'.
Soak Test
Teste de carga sustentada por horas para identificar degradação gradual, memory leaks ou comportamento instável ao longo do tempo.
Spike Test
Teste que simula um pico súbito e intenso de carga, como o que ocorre em campanhas de marketing ou Black Friday.
Stress Test
Teste que ultrapassa os limites do sistema para descobrir o ponto de ruptura e como ele se recupera.
Throughput
Número de requisições processadas por unidade de tempo (req/s). Mede a capacidade do sistema.
Virtual User
Simulação de um usuário real num teste de carga. Cada VU executa o cenário de forma independente e concorrente.
🔌API e Técnico
Endpoint
URL específica de uma API que representa um recurso ou operação. Ex: GET /api/usuarios/123.
GraphQL
Linguagem de consulta para APIs onde o cliente define exatamente quais dados quer receber, diferente do REST que retorna estruturas fixas.
HTTP
HyperText Transfer Protocol: protocolo de comunicação base da web. QA precisa entender métodos (GET, POST, PUT, DELETE), status codes e headers.
Header
Metadados enviados junto com uma requisição ou resposta HTTP. Incluem informações como tipo de conteúdo, autenticação e cache.
JSON
JavaScript Object Notation: formato leve de troca de dados, amplamente usado em APIs REST. Legível por humanos e fácil de parsear.
OAuth
Protocolo de autorização que permite que aplicações acessem recursos em nome do usuário sem expor suas credenciais.
Payload
Corpo (body) de uma requisição ou resposta HTTP, geralmente em JSON ou XML. Contém os dados enviados ou recebidos.
REST
Representational State Transfer: estilo arquitetural para APIs que usa HTTP e opera sobre recursos identificados por URLs.
SOAP
Simple Object Access Protocol: protocolo mais antigo de comunicação entre serviços, baseado em XML. Comum em sistemas legados e bancários.
Schema
Definição formal da estrutura esperada de um dado: campos, tipos, obrigatoriedade. Usado para validar requests e responses.
Status Code
Código numérico na resposta HTTP que indica o resultado da requisição. 2xx = sucesso, 3xx = redirecionamento, 4xx = erro do cliente, 5xx = erro do servidor.
Swagger/OpenAPI
Especificação padrão para documentar APIs REST. Gera documentação interativa e pode ser usada para gerar testes automaticamente.
Token
Credencial de acesso gerada após autenticação, enviada em headers subsequentes para identificar e autorizar o usuário.
Webhook
Mecanismo onde um sistema notifica outro via HTTP quando um evento ocorre, em vez de o receptor fazer polling. Ex: notificação de pagamento aprovado.
📊Gestão e Qualidade
Acceptance Criteria
Sinônimo de Critério de Aceite. Condições definidas pelo produto que o software deve satisfazer para ser considerado pronto.
Bug Triage
Processo de revisão e priorização de bugs reportados, geralmente feito com QA, dev e produto para decidir o que corrigir e quando.
Débito Técnico
Custo acumulado de decisões técnicas subótimas tomadas para entregar mais rápido. Inclui falta de testes, código legado e documentação defasada.
KPI de Qualidade
Indicadores-chave para medir a saúde do processo de qualidade: taxa de defeitos escapados, cobertura de testes, tempo de ciclo de bug, etc.
MTTF
Mean Time To Failure: tempo médio entre falhas. Indica a confiabilidade do sistema.
MTTR
Mean Time To Restore: tempo médio para restaurar o serviço após uma falha. Métrica de resiliência operacional.
Prioridade
Urgência de correção do bug do ponto de vista do negócio. Um bug pode ser de alta severidade mas baixa prioridade (afeta funcionalidade pouco usada).
Quality Gate
Critério automático que bloqueia o avanço no pipeline se métricas de qualidade não forem atendidas: cobertura mínima, zero bugs críticos, etc.
Root Cause Analysis
Investigação para identificar a causa raiz de um defeito, não apenas o sintoma. Evita que o mesmo problema reapareça.
Severidade
Impacto técnico de um bug no sistema: quão crítico é o problema. Ex: Crítico (sistema parado), Alto, Médio, Baixo.
Shift-Right
Estratégia de testar em produção usando monitoramento, feature flags e observabilidade para detectar problemas que só aparecem em escala real.
Test Coverage
Percentual do sistema coberto pelos testes. Pode ser medido por requisitos, linhas de código (code coverage) ou funcionalidades.
💻Desenvolvimento e Código
Testabilidade
Característica do código que determina o quão fácil é escrever testes para ele. Código com alta testabilidade tem dependências injetáveis, funções puras e responsabilidades bem definidas.
Injeção de Dependência
Padrão de design onde dependências são fornecidas externamente em vez de instanciadas internamente. Essencial para testabilidade: permite substituir dependências reais por mocks em testes.
Mock
Objeto simulado que verifica se determinadas chamadas foram feitas. Diferente do stub (que apenas retorna valores), o mock também valida o comportamento esperado.
Stub
Implementação simplificada de uma dependência que retorna valores controlados. Usado em testes unitários para isolar a unidade sendo testada de suas dependências reais.
Fake
Implementação funcional simplificada de uma dependência (ex: banco de dados em memória). Mais elaborado que um stub, mas mais simples que a implementação real.
TDD (Test-Driven Development)
Metodologia onde os testes são escritos antes do código de produção. Ciclo: Red (escreve teste que falha) → Green (escreve código mínimo para passar) → Refactor (melhora o código).
Code Coverage
Métrica que indica qual porcentagem do código de produção é executada pelos testes. Alta cobertura não garante ausência de bugs: apenas que as linhas foram executadas.
Refatoração
Processo de reestruturar código existente sem alterar seu comportamento externo. O objetivo é melhorar legibilidade, manutenibilidade e testabilidade sem introduzir novas funcionalidades.
Code Review
Revisão do código de um desenvolvedor por outro antes do merge. É uma das formas mais eficazes de encontrar bugs, compartilhar conhecimento e garantir qualidade do código.
Technical Debt (Débito Técnico)
Custo acumulado de decisões técnicas ruins ou de atalhos tomados durante o desenvolvimento. Quanto mais débito, mais lento e caro fica fazer mudanças no sistema.
Flaky Test
Teste que falha de forma não determinística: às vezes passa, às vezes falha, sem mudança no código. Geralmente causado por dependência de tempo, estado externo ou concorrência.
AAA (Arrange, Act, Assert)
Estrutura padrão de um teste unitário bem escrito: Arrange (prepara o contexto), Act (executa a ação), Assert (verifica o resultado).
⚙️DevOps e Pipeline
Pipeline de CI/CD
Conjunto automatizado de etapas que levam código do commit ao deploy: build, testes, análise estática, staging e produção. CI (Continuous Integration) foca na integração; CD (Continuous Delivery/Deployment) foca na entrega.
Gate de Qualidade
Verificação automática no pipeline que bloqueia o avanço caso critérios de qualidade não sejam atendidos. Exemplos: cobertura mínima, testes passando, ausência de vulnerabilidades críticas.
SAST (Static Application Security Testing)
Análise de segurança do código-fonte sem executá-lo. Identifica vulnerabilidades como injeções SQL, XSS e credenciais hardcoded diretamente no código.
DAST (Dynamic Application Security Testing)
Análise de segurança da aplicação em execução. Simula ataques reais contra a aplicação rodando para encontrar vulnerabilidades que só aparecem em tempo de execução.
Canary Release
Estratégia de deploy onde uma nova versão é liberada para um pequeno percentual de usuários antes de ser expandida para todos. Permite detectar problemas com blast radius mínimo.
Blue-Green Deployment
Estratégia que mantém dois ambientes idênticos (blue e green). O tráfego aponta para um enquanto o outro recebe a nova versão. Permite rollback instantâneo redirecionando o tráfego.
Feature Flag (Feature Toggle)
Mecanismo que permite ativar ou desativar funcionalidades sem deploy. Usado para lançamentos graduais, A/B testing e separação entre deploy e release.
SLO (Service Level Objective)
Meta de qualidade de serviço acordada internamente. Exemplo: "99.9% das requisições respondem em menos de 500ms". Diferente do SLA (acordo com cliente), o SLO é a meta operacional interna.
SLI (Service Level Indicator)
Métrica que mede o desempenho real do serviço em relação ao SLO. Exemplo: percentual de requisições que responderam dentro do tempo definido no SLO.
Error Budget
Quantidade de "erro" permitida antes de violar o SLO. Se o SLO é 99.9%, o error budget é 0.1%: esse é o espaço disponível para deployments, incidentes e experimentos.
MTTR (Mean Time To Recovery)
Tempo médio para restaurar um serviço após uma falha. Métrica chave de maturidade operacional: sistemas maduros se recuperam em minutos; imaturos, em horas.
Observabilidade
Capacidade de entender o estado interno de um sistema a partir de suas saídas externas. Baseada em três pilares: métricas (o quê), logs (o que aconteceu) e traces (o caminho).
Chaos Engineering
Prática de introduzir falhas controladas em sistemas para descobrir fraquezas antes que ocorram em produção. A premissa é que sistemas complexos sempre vão falhar: melhor falhar de forma controlada.
Trunk-Based Development
Estratégia de branching onde todos os desenvolvedores integram ao branch principal (trunk) com alta frequência. Reduz conflitos de merge e facilita integração contínua real.
🎨UX e Design
Teste de Usabilidade
Método de pesquisa onde usuários reais executam tarefas no produto enquanto são observados. O objetivo é identificar problemas de usabilidade: não avaliar o usuário, mas o design.
WCAG (Web Content Accessibility Guidelines)
Conjunto de diretrizes internacionais para acessibilidade web, organizado em 4 princípios: Perceptível, Operável, Compreensível e Robusto. Os níveis são A, AA (padrão) e AAA.
Estado de Interface
Cada condição visual possível de um componente: default, hover, focus, disabled, loading, error, success, empty. Todo estado não projetado é uma decisão que o dev toma sozinho.
Handoff
Transferência do design do UX para o desenvolvimento. Um handoff completo inclui todos os estados dos componentes, comportamentos, especificações de animação e anotações para o QA.
Protótipo
Representação interativa do design antes do desenvolvimento. Testar um protótipo com usuários é muito mais barato do que testar o produto implementado.
Design System
Biblioteca de componentes, padrões e diretrizes que garantem consistência visual e comportamental em um produto. Reduz bugs de UI por padronização de implementação.
Taxa de Abandono
Percentual de usuários que iniciam um fluxo (formulário, checkout, onboarding) mas não o concluem. Alta taxa de abandono geralmente indica problemas de usabilidade ou design.
Contraste de Acessibilidade
Relação entre a luminosidade do texto e do fundo. O padrão WCAG AA exige proporção mínima de 4.5:1 para texto normal: essencial para usuários com baixa visão.
Monitoramento Sintético
Testes automatizados que rodam continuamente em produção para verificar que fluxos críticos estão funcionando. Detecta problemas antes do usuário real encontrá-los.
🎯Produto e Negócio
Critério de Aceite
Condições específicas e testáveis que uma história de usuário deve satisfazer para ser considerada completa. Deve ser verificável objetivamente: sem margem para interpretação subjetiva.
Definition of Done (DoD)
Acordo do time sobre o que significa uma história estar "pronta". Inclui critérios técnicos (testes, revisão de código) e de qualidade (QA validado, critérios de aceite atendidos).
Definition of Ready (DoR)
Critérios que uma história deve atender antes de entrar em um sprint. Garante que o time não começa a trabalhar em itens mal definidos que vão gerar dúvidas e retrabalho.
Requisito Testável
Requisito que pode ser verificado de forma objetiva e mensurável. "O sistema deve ser rápido" não é testável. "O sistema deve responder em menos de 2s para 95% das requisições" é testável.
Rastreabilidade
Capacidade de relacionar um requisito a todos os artefatos que o implementam e verificam: histórias, código, casos de teste, resultados. Essencial para análise de impacto em mudanças.
Taxa de Escape de Bugs
Percentual de bugs que chegam em produção em relação ao total encontrado. Alta taxa de escape indica que os testes não estão capturando problemas antes do usuário.
Taxa de Regressão
Percentual de features existentes que quebram quando novas mudanças são introduzidas. Alta taxa de regressão indica fragilidade do código ou cobertura de testes insuficiente.
Tabela de Decisão
Ferramenta para representar regras de negócio complexas com múltiplas condições. Cada linha representa uma combinação de condições e o resultado esperado: torna explícito o que o texto ambíguo esconde.
Specification by Example
Técnica colaborativa que usa exemplos concretos (Given/When/Then) para especificar requisitos. Produz documentação viva que serve tanto como especificação quanto como base para automação.
OKR (Objectives and Key Results)
Framework de definição de metas: o Objetivo é qualitativo e inspiracional; os Key Results são quantitativos e mensuráveis. Qualidade de software pode e deve ser representada como Key Result.
🔄Agile e Scrum
Sprint
Período de tempo fixo (geralmente 1-4 semanas) no qual o time entrega um incremento de produto. Dentro do sprint, o escopo não deve mudar: mudanças esperadas até o próximo sprint.
Backlog Refinement
Cerimônia onde o time detalha, estima e prioriza itens do backlog antes de entrarem no sprint. É o momento onde QA pode prevenir bugs fazendo perguntas sobre edge cases.
Velocity
Quantidade de trabalho (story points ou itens) que o time entrega por sprint. É uma métrica de capacidade: não de performance. Usada para planejamento, não como meta a maximizar.
Impedimento
Qualquer obstáculo que bloqueia o time de entregar valor. Responsabilidade do Scrum Master remover impedimentos que estão fora do controle do time.
Capacidade do Time
Quantidade de trabalho que o time pode realizar em um sprint considerando férias, feriados e outras obrigações. Comprometer mais do que a capacidade real gera qualidade sacrificada.
Incremento
Soma de todos os itens do backlog completados durante um sprint, mais o valor de todos os sprints anteriores. Deve estar em condição utilizável: mesmo que o PO decida não lançar.
Segurança Psicológica
Crença de que é seguro falar, questionar, assumir erros e propor ideias sem medo de punição ou humilhação. Base de qualquer time que aprende com falhas em vez de escondê-las.
5 Porquês
Técnica de análise de causa raiz que consiste em perguntar "por quê" repetidamente até chegar à causa sistêmica de um problema: e não apenas ao sintoma visível.
Retrospectiva
Cerimônia do Scrum para o time inspecionar a si mesmo e criar um plano de melhoria. Deve gerar action items concretos: retros sem ações concretas são conversa sem impacto.
Radiador de Informação
Qualquer artefato visível que transmite informação sobre o trabalho do time sem esforço ativo para consultá-lo. Quadro kanban, dashboard de métricas, gráfico de burndown.
🔒Segurança
OWASP Top 10
Lista das 10 vulnerabilidades mais críticas em aplicações web, mantida pela Open Web Application Security Project. Padrão de referência para testes de segurança básicos.
SQL Injection
Vulnerabilidade onde input de usuário não validado é interpretado como comando SQL. Um dos ataques mais comuns e devastadores: pode expor ou destruir toda a base de dados.
XSS (Cross-Site Scripting)
Vulnerabilidade onde scripts maliciosos são injetados em páginas web visualizadas por outros usuários. Permite roubo de sessão, redirecionamento e manipulação do DOM.
Autenticação vs. Autorização
Autenticação verifica quem você é (login). Autorização verifica o que você pode fazer (permissões). Confundir os dois gera vulnerabilidades de acesso não autorizado.
Escalada de Privilégio
Vulnerabilidade onde um usuário acessa recursos ou funcionalidades além de suas permissões. Horizontal: acessa dados de outro usuário do mesmo nível. Vertical: acessa funcionalidades de um nível superior.
Pen Test (Teste de Penetração)
Simulação autorizada de ataques a um sistema para identificar vulnerabilidades de segurança. Realizado por especialistas: diferente dos testes de segurança funcionais que QA executa.
Performance e Carga
Load Test
Teste que verifica o comportamento do sistema sob a carga esperada (número normal de usuários simultâneos). Responde: o sistema funciona bem no dia a dia?
Stress Test
Teste que aumenta a carga progressivamente até encontrar o ponto de quebra do sistema. Responde: qual é o limite do sistema e como ele falha?
Spike Test
Teste que simula um aumento repentino e intenso de carga. Responde: o sistema aguenta um pico inesperado (Black Friday, viral em redes sociais)?
Soak Test
Teste que aplica carga normal por um período longo (horas ou dias). Detecta vazamentos de memória, degradação gradual de performance e problemas que só aparecem com o tempo.
Percentil (p95, p99)
Medida estatística que mostra a experiência dos usuários mais lentos. p95 = 95% das requisições foram mais rápidas que este valor. p99 revela a experiência dos 1% mais prejudicados.
Throughput
Quantidade de requisições que o sistema consegue processar por unidade de tempo (req/s). Junto com latência, é a principal métrica de capacidade de um sistema.
Gargalo (Bottleneck)
Componente do sistema que limita a performance geral. Escalar outros componentes sem resolver o gargalo não melhora a performance: a corrente é tão forte quanto seu elo mais fraco.
📜Testes de Contrato e Integração
Contract Testing
Abordagem de teste que verifica se dois serviços que se comunicam respeitam o contrato (interface) acordado entre si. Detecta breaking changes antes do deploy.
Consumer-Driven Contract
Modelo onde o consumidor de uma API define o contrato (o que ele precisa) e o provider verifica que consegue satisfazê-lo. Inverte a responsabilidade tradicional de documentação de API.
Pact
Framework open-source para consumer-driven contract testing. O consumidor gera um "pact file" com suas expectativas; o provider verifica que as satisfaz. Suporta múltiplas linguagens.
Testcontainers
Biblioteca que permite iniciar containers Docker em testes de integração: banco de dados, filas, serviços externos. Garante que os testes usam dependências reais, não mocks.
Pact Broker
Servidor que armazena e versiona os pact files gerados pelos consumidores. Funciona como intermediário entre times: o provider consulta o broker para verificar todos os contratos.
🔄 Trilha Scrum Master · Agile Coach

Qualidade começa no processo que você facilita

Esta trilha não é sobre testar software: é sobre criar as condições para que qualidade aconteça. Scrum Masters e Agile Coaches têm influência única no processo, nas cerimônias e na cultura do time. Quando usam essa influência com foco em qualidade, o impacto é sistêmico.

🔄 Para SMs e Agile Coaches de qualquer nível 🌱 Cultura que sustenta qualidade 🚧 Impedimentos que você pode remover
5Módulos
10+Exercícios
12+Recursos
5Labs
🔄

O SM que transforma qualidade de responsabilidade do QA em responsabilidade do time

Por que o processo que você facilita define mais sobre qualidade do que qualquer ferramenta de teste.

O problema que essa trilha resolve

Em muitos times, "qualidade" é um tópico que aparece quando o QA fala: e desaparece do radar quando o QA não está na sala. O Scrum Master tem a posição única de facilitar conversas, remover impedimentos e moldar o processo de forma que qualidade seja uma presença constante, não um checkpoint de última hora.

Mas para fazer isso bem, o SM precisa entender onde no processo a qualidade se perde: e o que ele pode fazer a respeito sem assumir responsabilidades que não são suas.

O que muda quando o SM pensa em qualidade

  • Você facilita cerimônias que criam clareza: refinamentos onde o QA levanta edge cases, reviews onde a qualidade é evidenciada, retrospectivas que identificam causas de bugs sistêmicos.
  • Você remove impedimentos que bloqueiam qualidade: ambientes instáveis, histórias que entram no sprint sem critérios de aceite, tempo de QA que nunca é suficiente.
  • Você protege o tempo do time: qualidade requer atenção sustentada, e interrupções constantes são inimigas da qualidade profunda.
  • Você mede a maturidade de qualidade do time: e usa essas métricas para facilitar melhorias, não para cobrar resultados.

A fronteira importante

O SM não testa, não escreve critérios de aceite e não decide o que vai para produção. Mas o SM define se o processo cria ou sabota as condições para que essas coisas aconteçam bem. Essa é uma responsabilidade enorme: e frequentemente subestimada.

"Um time com processo maduro de qualidade não precisa de heróis que encontram todos os bugs: precisa de um sistema que torna os bugs visíveis cedo, baratos e raros."
🔄 SM · Módulo 1

Processo com Qualidade Embutida

Qualidade não emerge de um processo ruim por força de vontade. O SM é quem tem mais poder para moldar o processo de forma que qualidade seja a consequência natural, não o esforço heroico.

🏗️

Definition of Ready como gate de qualidade

Histórias que entram no sprint sem critérios de aceite claros são a fonte número um de retrabalho. O SM é o guardião do DoR: não para ser burocrático, mas para proteger o time de trabalho mal definido.

🏋️ Exercícios Rápidos
  • Observe os próximos 2 sprints: qual % das histórias que entram têm critérios de aceite testáveis? Qual % gerou perguntas de esclarecimento depois do planning? Essa diferença é o custo do DoR fraco.
  • Facilite uma sessão de 30 minutos com o time para definir o DoR. Inclua obrigatoriamente: critérios de aceite revisados pelo QA, edge cases documentados, dependências identificadas. Meça o impacto nos sprints seguintes.

Definition of Done que protege qualidade

Um DoD fraco permite que histórias sejam declaradas "prontas" quando não estão. O SM facilita a evolução do DoD: adicionando critérios de qualidade que o time aceita porque entende o valor.

🏋️ Exercícios Rápidos
  • Revise o DoD atual do time. Ele menciona: testes unitários? Revisão de QA? Critérios de aceite validados? Performance básica verificada? Cada item ausente é uma porta aberta para débito.
  • Para cada item que o time resiste em adicionar ao DoD, investigue a causa real: falta de tempo? Falta de habilidade? Falta de ferramenta? Cada causa tem uma solução diferente que o SM pode facilitar.
🔄

O fluxo de trabalho e os gargalos de qualidade

Em muitos times, QA é o gargalo porque recebe tudo no final do sprint. O SM visualiza o fluxo e ajuda o time a distribuir o trabalho de qualidade ao longo do sprint, não concentrá-lo nos últimos dias.

🏋️ Exercícios Rápidos
  • No próximo sprint, monitore o quadro diariamente. Em que dia as histórias tipicamente chegam ao QA? Se for na última semana, o fluxo está concentrado: e QA vira gargalo por design, não por incompetência.
  • Facilite uma conversa com devs e QA: "O que precisaríamos mudar para que QA pudesse começar a testar no meio do sprint em vez de no final?" As respostas vão revelar os impedimentos reais.
🧪

Laboratório: Diagnóstico do Processo de Qualidade

Mapeie onde a qualidade se perde no seu processo atual

1
Mapeamento de fluxo com foco em qualidade
  • 1. Desenhe o fluxo de trabalho atual do time: da história no backlog até o deploy em produção. Para cada etapa, marque onde há verificação de qualidade: explícita ou implícita.
  • 2. Identifique os pontos de handoff (quando o trabalho passa de uma pessoa para outra). Cada handoff é um ponto de potencial perda de contexto e qualidade.
  • 3. Para os últimos 10 bugs que chegaram em produção, identifique em qual etapa do fluxo cada bug poderia ter sido detectado. Existe um padrão? Uma etapa que consistentemente "deixa passar"?
  • 4. Apresente o mapeamento ao time em retrospectiva. Não como acusação: como dado. "Esses 7 bugs poderiam ter sido pegos aqui. O que precisaríamos mudar nessa etapa?"
💡 O SM não resolve o problema: facilita o time a resolver. Sua contribuição é trazer a estrutura de análise, não a resposta.
🔄 SM · Módulo 2

Cerimônias que Criam Qualidade

Cada cerimônia ágil é uma oportunidade de qualidade: ou uma oportunidade desperdiçada. O SM facilita cerimônias que criam clareza, detectam problemas cedo e constroem entendimento compartilhado sobre o que "bom" significa.

🔍

Refinamento como prevenção de bugs

Um refinamento bem facilitado é a forma mais barata de prevenção de bugs que existe. O SM cria o espaço para que QA, dev e PO cheguem a entendimento compartilhado antes do desenvolvimento começar.

🏋️ Exercícios Rápidos
  • No próximo refinamento, garanta que o QA tem espaço explícito para levantar cenários não cobertos. Uma pergunta simples do SM transforma a dinâmica: "QA, quais edge cases dessa história te preocupam?"
  • Após o refinamento, meça: quantas histórias precisaram revisão antes de entrar no sprint? Quantas geraram dúvidas durante o sprint? A diferença é o impacto do refinamento na qualidade.
📋

Sprint Review como evidência de qualidade

A Sprint Review não é só uma demo: é a evidência de que o que foi construído funciona e atende ao que foi prometido. O SM facilita reviews que vão além do "funciona" e chegam no "funciona corretamente para o usuário".

🏋️ Exercícios Rápidos
  • Nas próximas reviews, adicione um momento explícito: "O QA validou os critérios de aceite desta história? Existem riscos conhecidos que os stakeholders devem saber antes do release?"
  • Se uma história foi demonstrada mas não passou pela revisão completa do QA, o SM deve tornar isso explícito: não para envergonhar, mas para que a decisão de aceitar o risco seja consciente.
🔁

Retrospectiva focada em causas de qualidade

A retro é onde o time aprende com o que aconteceu. O SM facilita retros que chegam nas causas raiz dos problemas de qualidade: não nas sintomas.

🏋️ Exercícios Rápidos
  • Adicione dados de qualidade à retrospectiva: quantos bugs foram encontrados em produção? Quantas histórias voltaram para o dev depois de chegar ao QA? Quantas foram para produção com débito técnico conhecido? Dados mudam a conversa.
  • Use a técnica dos 5 Porquês para o bug mais impactante do sprint: não para encontrar culpado, mas para entender qual falha sistêmica o permitiu existir.
🧪

Laboratório: Retrospectiva com Dados de Qualidade

Facilite uma retro que vai além dos sentimentos e chega nas causas

1
Retro orientada por métricas de qualidade
  • 1. Antes da retro, colete os dados do sprint: número de bugs encontrados em QA, número de bugs encontrados em produção, histórias que voltaram do QA para o dev, histórias entregues com risco conhecido documentado.
  • 2. Apresente os dados sem julgamento: "Esses são os números do sprint. O que eles nos dizem?" Deixe o time interpretar antes de facilitar conclusões.
  • 3. Para o maior problema identificado, use 5 Porquês: "Por que esse bug chegou em produção?" → resposta → "Por que isso aconteceu?" → e assim por diante. O 4º ou 5º porquê geralmente revela uma causa sistêmica que o time pode realmente resolver.
  • 4. Defina um action item concreto, com dono e prazo. Action items vagos ("melhorar a qualidade dos testes") não funcionam. Específicos sim: "Incluir revisão do QA no refinamento de todas as histórias acima de 5 pontos a partir do próximo sprint".
💡 Se o time resiste a discutir dados de qualidade em retro ("isso é constrangedor"), é um sinal de que a cultura de segurança psicológica precisa de atenção antes das métricas.
🔄 SM · Módulo 3

Removendo Impedimentos de Qualidade

Muitos problemas de qualidade não são falta de habilidade: são impedimentos estruturais que o time não consegue remover sozinho. Ambientes instáveis, falta de tempo para refatoração, pressão constante por velocidade. O SM pode e deve atacar esses impedimentos.

🚧

Identificando impedimentos de qualidade

Impedimentos de qualidade são diferentes de bugs. São as condições sistêmicas que tornam difícil fazer um bom trabalho: processo que não dá tempo para teste adequado, ambiente que quebra frequentemente, histórias sem critérios claros.

🏋️ Exercícios Rápidos
  • Pergunte individualmente ao QA, a dois devs e ao PO: "O que mais impede que você faça um trabalho de qualidade neste time?" Compare as respostas. A interseção revela os impedimentos mais sistêmicos.
  • No daily dos próximos 2 sprints, observe quantas vezes alguém menciona um bloqueio relacionado a qualidade: ambiente instável, falta de informação, dependência não resolvida. Liste tudo. Esses são seus impedimentos.
⏱️

Protegendo tempo para qualidade

Qualidade requer tempo: para testes exploratórios, para refatoração, para escrita de testes automatizados. Quando o sprint está sempre superlotado, qualidade é sempre o que fica para depois.

🏋️ Exercícios Rápidos
  • Analise a capacidade dos últimos 3 sprints: o time estava supercomprometido? Qual % das histórias planejadas foi concluída? Se consistentemente abaixo de 80%, o planejamento está ignorando o tempo necessário para qualidade adequada.
  • Proponha uma política explícita com o time: "Reservamos X% da capacidade do sprint para débito técnico e melhoria de qualidade." Sem política explícita, esse trabalho nunca encontra espaço.
🌉

Facilitando a conversa sobre débito técnico

Débito técnico é um impedimento de qualidade de longo prazo: e frequentemente invisível para stakeholders. O SM pode torná-lo visível e criar o espaço para que o time invista na sua redução.

🏋️ Exercícios Rápidos
  • Peça ao time para mapear o débito técnico atual em 3 categorias: crítico (impede novas features), moderado (torna tudo mais lento), cosmético (irritante mas gerenciável). Apresente ao PO com impacto em velocidade e qualidade.
  • Negocie com o PO um "orçamento de débito": uma porcentagem fixa do sprint dedicada exclusivamente a reduzir débito. Mesmo 10% do sprint por mês faz diferença mensurável ao longo do ano.
🧪

Laboratório: Mapeamento de Impedimentos de Qualidade

Identifique, priorize e remova o impedimento de maior impacto

1
Workshop de impedimentos com o time
  • 1. Em uma sessão de 45 minutos, peça ao time para listar anonimamente (post-its ou Miro) tudo o que os impede de fazer um trabalho de qualidade. Sem julgamento, sem debate ainda: só listagem.
  • 2. Agrupe os impedimentos em categorias: processo, ferramentas, ambiente, pessoas, conhecimento. Qual categoria tem mais itens?
  • 3. Vote nos 3 impedimentos de maior impacto. Para cada um, classifique: o SM pode remover sozinho? Precisa da ajuda do PO? Precisa de aprovação da gestão?
  • 4. Para o impedimento de maior impacto que está no seu alcance, defina um plano de ação com prazo. Reporte o progresso no daily de impedimentos por 2 semanas. O time precisa ver que o SM remove impedimentos de verdade: não só os registra.
🔄 SM · Módulo 4

Cultura de Qualidade no Time

Ferramentas e processos importam, mas cultura é o que determina se as pessoas fazem a coisa certa quando ninguém está olhando. O SM é quem mais influencia cultura: não por autoridade, mas por comportamento e ambiente.

🧠

Psychological safety como base de qualidade

Em times com baixa segurança psicológica, as pessoas escondem bugs, inflam métricas e evitam reportar problemas para não parecer incompetentes. Qualidade real requer que seja seguro dizer "não sei", "isso pode estar errado" e "encontrei um problema".

🏋️ Exercícios Rápidos
  • Observe a próxima retro: as pessoas falam sobre o que deu errado? Assumem responsabilidade sem defensividade? Fazem perguntas "ingênuas"? A qualidade das conversas difíceis revela o nível de segurança psicológica.
  • Como SM, modele o comportamento desejado: assuma responsabilidade pelas suas falhas de facilitação, faça perguntas quando não entender, celebre quando alguém encontra um problema cedo: independentemente de quem criou o problema.
🤝

Quebrando o silos QA vs. Dev

Quando QA e dev operam como grupos separados com objetivos diferentes ("dev quer passar" vs. "QA quer reprovar"), qualidade sofre. O SM facilita a colaboração que transforma essa dinâmica.

🏋️ Exercícios Rápidos
  • Observe o próximo sprint: devs e QA fazem pair testing? QA está presente nas demos técnicas? Devs participam do refinamento junto com o QA? A ausência de cada uma dessas práticas é um silo ativo.
  • Proponha uma prática concreta de integração: "Vamos experimentar por 2 sprints ter o QA na daily de dev e um dev na daily de QA." Meça o impacto em comunicação e qualidade.
🏆

Celebrando qualidade: não só velocidade

Times tendem a celebrar o que é medido e visível: features entregues, velocity, story points. Quando qualidade não é celebrada, ela não é valorizada. O SM pode mudar isso.

🏋️ Exercícios Rápidos
  • Na próxima Sprint Review, inclua explicitamente: "O QA encontrou X bugs em testes e Y chegaram em produção. Isso significa que nossa cobertura capturou Z% dos problemas antes do usuário." Torne a qualidade visível como conquista.
  • Crie um ritual de reconhecimento para quando alguém encontra um bug crítico em testes antes do deploy. Encontrar bugs cedo é uma vitória: não um problema.
🧪

Laboratório: Avaliação de Cultura de Qualidade

Meça onde está a cultura atual e facilite uma melhoria concreta

1
Pesquisa de cultura de qualidade com o time
  • 1. Crie uma pesquisa anônima de 5 perguntas para o time, com escala de 1 a 5: "Me sinto seguro para reportar um problema de qualidade sem julgamento." · "Qualidade é responsabilidade de todo o time, não só do QA." · "Entendemos claramente o que significa 'pronto' neste time." · "Temos tempo suficiente para fazer um trabalho de qualidade no sprint." · "Aprendemos com os bugs que chegam em produção."
  • 2. Compartilhe os resultados com o time em formato de dados, não de avaliação. "Nossa média na pergunta 4 foi 2.3 de 5. O que está por trás disso?"
  • 3. Para a pergunta com menor score, facilite uma conversa de 20 minutos: o que causaria essa percepção? O que precisaría mudar para que a resposta fosse 4 ou 5?
  • 4. Repita a pesquisa em 2 meses. A evolução do score é o indicador mais honesto de se as iniciativas de cultura estão funcionando.
💡 Pesquisas de cultura só funcionam se o time acredita que as respostas geram mudança. Se você faz a pesquisa e nada muda, a próxima pesquisa vai ter respostas ainda piores: porque o time aprendeu que é inútil responder com honestidade.
🔄 SM · Módulo 5

Métricas de Time com Foco em Qualidade

Métricas que o SM acompanha definem o que o time valoriza. Quando as únicas métricas são velocity e story points, qualidade fica invisível. Este módulo é sobre como tornar qualidade mensurável sem criar overhead ou cultura de cobrança.

📊

Métricas de qualidade que fazem sentido para o SM

O SM não precisa de métricas técnicas complexas. Precisa de indicadores que mostrem a saúde do processo de qualidade: taxa de escape de bugs, histórias que voltam do QA, MTTR de incidentes.

🏋️ Exercícios Rápidos
  • Defina 3 métricas de qualidade para acompanhar nos próximos sprints: (1) % de histórias que voltam do QA para o dev (rework rate), (2) bugs encontrados em produção vs. em testes (escape rate), (3) tempo médio entre deploy e primeiro bug reportado em produção.
  • Adicione essas métricas ao seu radiador de informação (quadro físico ou digital). Visibilidade constante muda comportamento sem precisar de cobrança explícita.
⚠️

Métricas que sabotam qualidade: e como evitar

Algumas métricas comuns incentivam comportamento que prejudica qualidade: velocity como meta (incentiva pular testes), bugs encontrados pelo QA como indicador negativo para o dev (incentiva esconder bugs), cobertura de código como número puro (incentiva testes que cobrem sem proteger).

🏋️ Exercícios Rápidos
  • Revise as métricas que o time usa hoje. Para cada uma, pergunte: "Essa métrica poderia ser manipulada de forma que parece boa mas prejudica qualidade real?" Se sim, é uma métrica de risco.
  • Velocity é uma métrica de capacidade, não de sucesso. Se o time está usando velocity como meta a ser aumentada, facilite uma conversa sobre a diferença entre "fazer mais" e "entregar melhor".
📈

Usando métricas para facilitar melhoria: não para cobrar

A diferença entre métricas que melhoram times e métricas que criam medo está em como são usadas. O SM usa dados como ponto de partida para curiosidade, não como evidência de falha.

🏋️ Exercícios Rápidos
  • Compare como você apresenta métricas positivas vs. negativas. Uma taxa de escape de bugs alta deveria gerar curiosidade ("o que está causando isso?"), não culpa ("quem deixou passar?"). Observe sua linguagem e a do time ao discutir dados.
  • Experimente substituir "por que esse número está ruim?" por "o que precisaria ser verdade para esse número melhorar?" A segunda pergunta cria possibilidade; a primeira cria defensividade.
🧪

Laboratório: Construindo seu Radiador de Qualidade

Torne qualidade visível para todo o time sem criar overhead

1
Criando o painel de saúde de qualidade do time
  • 1. Com o time, defina as 4 métricas mais relevantes para o contexto atual. Use as sugestões deste módulo como ponto de partida, mas adapte ao que faz sentido para o produto e o momento.
  • 2. Defina como cada métrica será coletada, por quem e com qual frequência. Métricas que dependem de esforço manual tendem a ser abandonadas: automatize o que for possível.
  • 3. Crie o painel visível para o time (Jira dashboard, Miro board, quadro físico). Apresente-o na próxima Sprint Review e explique o que cada número significa e por que o time decidiu acompanhá-lo.
  • 4. Após 3 sprints, revise: as métricas estão revelando informação útil? Alguma está sendo ignorada? Alguma está criando comportamento indesejado? Métricas que não geram ação devem ser substituídas.
💡 O melhor radiador de qualidade é aquele que o time construiu e acredita. Um painel imposto pelo SM que o time não entende ou não confia é pior do que nenhum painel.