O que é teste de regressão?
O teste de regressão reexecuta testes existentes após uma mudança para confirmar que recursos que funcionavam anteriormente não foram quebrados.
Uma regressão ocorre quando uma mudança quebra algo que costumava funcionar. O teste de regressão protege contra isso mantendo um conjunto de testes que capturam o comportamento conhecido como correto e executando-os sempre que o código muda. É menos um tipo de teste e mais um propósito: proteger o passado enquanto o presente evolui.
O que é uma regressão
Uma regressão ocorre quando um novo trabalho, um recurso, uma correção, uma refatoração, quebra inadvertidamente o comportamento existente. As regressões são insidiosas porque o desenvolvedor está focado na nova mudança e pode não pensar em reverificar a antiga. Os testes automatizados fazem essa lembrança por ele.
A suíte de regressão
Com o tempo, cada correção de bug e recurso pode deixar para trás um teste que trava o comportamento correto. Coletivamente, esses formam a suíte de regressão. Um bom hábito é adicionar um teste de regressão para cada bug que você corrige, de modo que o mesmo bug nunca possa retornar silenciosamente.
Um exemplo rápido
Depois de corrigir um bug de arredondamento, você adiciona um teste para o caso exato que estava quebrado, de modo que qualquer mudança futura que o reintroduza falhe imediatamente.
test("rounds 2.005 correctly (was a bug)", () => {
expect(round(2.005, 2)).toBe(2.01);
});Mantendo a suíte saudável
- Adicione um teste de regressão para cada bug que você corrige.
- Remova ou atualize testes que não refletem mais o comportamento pretendido.
- Mantenha a suíte rápida para que possa rodar a cada mudança.
- Trate testes de regressão instáveis como bugs, não como ruído de fundo.
Teste de regressão e CI
O CI existe em grande parte para executar testes de regressão automaticamente a cada push, de modo que uma quebra seja detectada em minutos. À medida que a suíte cresce, paralelizá-la em runners rápidos mantém a passagem completa de regressão veloz, e reexecutar automaticamente falhas transitórias mantém o sinal confiável. Essa velocidade e confiabilidade é exatamente o que os runners da Latchkey buscam oferecer.
Principais conclusões
- O teste de regressão confirma que recursos antigos continuam funcionando após uma mudança.
- Adicione um teste de regressão para cada bug para que ele nunca possa retornar silenciosamente.
- O CI executa a suíte de regressão automaticamente a cada mudança.