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.