O que é um regression test?
Um regression test verifica que uma funcionalidade que costumava funcionar ainda funciona após uma mudança, detectando bugs que fazem o comportamento antes correto "regredir".
Código novo pode quebrar silenciosamente features antigas, uma regressão. Regression tests são o conjunto acumulado de verificações que protegem contra exatamente isso, garantindo que a mudança de hoje não desfaça o comportamento funcional de ontem.
O que é
Um regression test confirma que o comportamento existente e esperado ainda está correto após o código mudar. Com o tempo um projeto acumula uma grande suíte desses, frequentemente incluindo um teste específico adicionado para cada bug já corrigido, de modo que o mesmo bug não possa voltar silenciosamente.
Como os regression tests crescem
Uma prática comum é: quando você corrige um bug, primeiro escreve um teste que o reproduz. Esse teste falha antes da correção e passa depois. Ele então permanece na suíte para sempre como um regression test, então se alguém reintroduzir o bug, ele é detectado imediatamente.
Um exemplo
Um bug de cálculo de desconto é corrigido. Antes de corrigi-lo, o desenvolvedor adiciona um teste que verifica o total com desconto correto. Meses depois, um refactor não relacionado acidentalmente reintroduz o cálculo errado, mas o regression test falha no CI, detectando-o antes do release.
Como se encaixam no CI
Regression tests tipicamente rodam como parte da suíte automatizada a cada mudança, de modo que qualquer bug reintroduzido é detectado minutos após o commit ofensor. Como a suíte pode crescer bastante, os times frequentemente a paralelizam entre runners para manter o feedback rápido.
Por que geram confiança
Uma boa suíte de regression é o que permite a um time mudar código sem medo. Você pode refatorar agressivamente, sabendo que se quebrar algo que costumava funcionar, um teste vai avisar. Essa rede de segurança é o que torna possíveis releases frequentes e confiantes, o objetivo do CI/CD.
Principais conclusões
- Regression tests garantem que o comportamento antes funcional ainda funciona.
- Adicionar um teste para cada bug corrigido impede que ele retorne.
- Uma suíte de regression forte permite que times mudem código com confiança.