Perdendo a fé em testes

Papel dos Testes vs Design

  • Muitos argumentam que testes não conseguem resgatar uma arquitetura fundamentalmente ruim; simplificação e compreensibilidade importam mais.
  • Outros relatam sucesso usando testes de integração para primeiro “envolver” uma bagunça legada, depois refatorá-la com segurança, vendo testes como um facilitador de simplificação, e não um substituto.
  • Testes são descritos como uma ferramenta para confiança e mudança, não uma garantia de correção.

Onde os Testes Entregam Alto Valor

  • Componentes centrais, estáveis e estruturais (VMs, DBs, lógica de negócio central) se beneficiam muito de testes extensivos e fuzzing.
  • Testes de integração e ponta a ponta são elogiados por detectar bugs reais entre sistemas e permitir refatorações sem medo, especialmente em sistemas com múltiplos serviços e muita infraestrutura.
  • Testes são valiosos para atualizar bibliotecas/frameworks, prevenir regressões e preservar comportamento quando os autores originais saem.
  • Testes por propriedades e suítes robustas são apresentados como “endurecimento para batalha” para sistemas maduros.

Onde os Testes São Vistos com Baixo ROI

  • Funcionalidades de produto que mudam rápido e o polimento de UI em startups em estágio inicial podem ser excessivamente testados, matar a velocidade e levar a suítes frágeis que falham constantemente.
  • Ferramentas interativas (editores de texto, terminais) podem funcionar com menos testes automatizados se os caminhos principais forem exercitados continuamente pelo uso.
  • Algumas equipes relatam lançar produtos aceitáveis com pouca automação, confiando em testes manuais, métricas, deploys canário e reversões.

Questões Culturais e de Processo

  • Testes muitas vezes são tratados como religião: metas de cobertura, dogma de TDD e testes obrigatórios para cada linha produzem suítes pesadas em mocks e de baixo valor.
  • Lei de Goodhart: cobertura como KPI leva a testes triviais ou redundantes que não melhoram a qualidade, mas desaceleram mudanças.
  • Incentivos (throughput de tickets, falta de tempo) empurram devs para “porcaria improvisada”; culpar indivíduos em vez de sistemas é criticado.

Alternativas, Complementos e Estratégias

  • Sistemas de tipos fortes eliminam muitas classes de bugs e reduzem os testes necessários, mas não os substituem; tipos e testes são vistos como complementares.
  • Teste exploratório manual ainda é considerado crucial para problemas de UX, surpresas de performance e interações imprevistas.
  • Vários comentaristas defendem tratar testes como investimentos: focar em cenários de alto valor, invariantes centrais e proteção contra regressões; manter suítes rápidas, com pouca flakiness, e estar disposto a apagar ou evitar testes de baixo ROI.