Subcapability 04 de 05 · Software Engineering & Architecture

Testing Strategy

Estratégia de testes calibrada por risco, custo e velocidade que substitui pirâmide invertida por distribuição que dá confiança real para mudar e elimina a cerimônia do medo.

O que está em jogo

O pipeline sempre quebra por razão diferente. Os testes travam o CI por horas antes de mostrar resultado. Quando um bug chega à produção, a pergunta é por que o teste não capturou. E a resposta é sempre: o teste que capturaria esse caso nunca foi escrito. A estratégia de testes cresceu por acumulação, sem critério de onde cada tipo de teste agrega mais valor.

O que é, na prática

Alta cobertura no relatório não significa confiança real para mudar. Time com 80% de cobertura e medo de deploy na sexta-feira tem problema de estratégia, não de cobertura. Testes concentrados no lugar errado da pirâmide entregam aparência de segurança com feedback lento. Testes frágeis que quebram por mudança de implementação sem mudança de comportamento criam falso alarme que o time aprende a ignorar. Quando o pipeline está sempre quebrado, o pipeline deixa de ser sinal confiável.

Como atuamos

Ganhos mensuráveis

O que muda no resultado quando essa subcapacidade amadurece.

Perguntas frequentes

Qual a diferença entre Pirâmide de Testes e Testing Trophy?

A Pirâmide de Testes enfatiza unitários na base porque são rápidos e isolados. O Testing Trophy, proposto por Kent C. Dodds, desloca o peso para testes de integração porque em muitas aplicações modernas a falha real acontece na fronteira entre componentes, não na lógica isolada de uma função. A escolha entre os dois depende de onde os defeitos reais do seu sistema aparecem com mais frequência.

TDD vale para todo tipo de código?

TDD entrega mais valor em lógica de negócio complexa onde o teste guia o design e a interface. Em código de infraestrutura, configuração ou glue code simples, o custo de manter o ciclo de test-first supera o benefício de design emergente. A pergunta certa é: onde a clareza da interface importa mais? Nesses pontos, TDD justifica o custo.

O que é Consumer-Driven Contract Testing e quando usar?

Consumer-Driven Contract Testing formaliza o que cada consumidor de um serviço espera da sua API em um contrato versionado. O provedor verifica continuamente que atende esses contratos sem precisar de ambiente integrado. O padrão resolve o risco específico de microservices: mudança no provedor que quebra o consumidor sendo descoberta apenas no ambiente de integração ou em produção.

Como Mutation Testing difere de cobertura de código?

Cobertura de código mede quantas linhas o teste executa. Mutation Testing mede se o teste detectaria uma falha real. O framework introduz pequenas mutações no código (troca de operador, remoção de condição) e verifica se algum teste falha. Mutante que sobrevive indica que aquela linha é executada pelo teste mas o comportamento incorreto não seria detectado.

Como convencer o time de que testes lentos no CI são problema de estratégia?

Com o custo em tempo de engenharia: CI de 90 minutos em time de 20 pessoas que faz 5 commits por dia consome 150 horas por semana esperando feedback. Parte desse custo desaparece quando a distribuição da pirâmide é corrigida, com unitários em segundos cobrindo a maioria dos casos e E2E restrito aos fluxos críticos. O dado de tempo economizado por semana é o argumento que fecha a discussão.

Quer clareza sobre onde investir primeiro?

Diagnóstico completo de capacidades de tecnologia com roadmap de evolução conectado ao resultado financeiro.