🚀 Capítulo 12: Testes de Regressão (Tema: De Volta para o Futuro)

NOTE

Este capítulo utiliza a temática de De Volta para o Futuro para explicar os Testes de Regressão. Mudar uma linha de código no passado pode quebrar todo o futuro do seu sistema!


1. 🎯 Objetivo da Aula

Compreender o conceito de Testes de Regressão e entender como garantir que novas alterações ou correções no código não quebrem funcionalidades que já estavam funcionando perfeitamente.

2. 🏢 O Cenário Prático (Seu Desafio)

Marty McFly viajou para 1955 no DeLorean e, sem querer, impediu que seus pais se conhecessem. Quando ele olha para a foto da família, seus irmãos começam a desaparecer!

  • Ele alterou algo pequeno no passado.
  • Isso quebrou o futuro!

No desenvolvimento de software, isso acontece todo dia. Você mexe em uma linha de código para consertar o botão de “Comprar” e, sem querer, quebra a página de “Login”. Isso se chama Regressão. Os Testes de Regressão são os testes que rodamos de novo (repetimos) para garantir que o passado do sistema continue funcionando após uma mudança! Seu desafio é não deixar os recursos do sistema desaparecerem!

3. 🧠 Fundamentos: A Teoria Traduzida

Regressão significa “voltar a um estado anterior”. No software, significa que um bug que não existia ou que já tinha sido corrigido voltou a aparecer.

🚗 O que são Testes de Regressão?

São os mesmos testes que você já escreveu antes (Unitários, Integração, E2E). A diferença é o momento em que você os roda. Você os roda inteiros toda vez que:

  1. Adiciona uma nova funcionalidade.
  2. Corrige um bug existente.
  3. Atualiza uma biblioteca ou versão da linguagem.

🤖 A Automação como Aliada

Se você tiver 1.000 testes manuais, fazer testes de regressão toda semana será impossível. É por isso que os Testes de Regressão PRECISAM ser automatizados! O robô roda todos os 1.000 testes em minutos para garantir que o “futuro” está seguro.


4. 📖 Exemplo Guiado: O Efeito Borboleta (JS)

Você tem um sistema que calcula o preço com imposto:

function calcularPreco(valor) {
    return valor + 10; // Imposto fixo de 10
}

Um belo dia, você decide mudar para imposto de 10%:

function calcularPreco(valor) {
    return valor * 1.10; // Mudança feita!
}

Essa mudança parece boa. Mas se você tiver um teste de regressão antigo que esperava que calcularPreco(100) retornasse 110, ele vai passar. Mas e se o valor fosse 10?

  • Antes: 10 + 10 = 20.
  • Agora: 10 * 1.10 = 11. O teste de regressão vai falhar e te avisar: “Ei, você quebrou o cálculo para valores pequenos!“.

5. 🛠️ Prática Obrigatória 1: Identificando a Regressão

Imagine que você trabalha no sistema do Spotify.

  1. Você adicionou a função de “Letras de Música”.
  2. No dia seguinte, os usuários reclamam que o botão de “Pausar” parou de funcionar.
  3. Isso é uma regressão? Qual teste falhou em pegar esse erro antes de ir para produção?

6. 🛠️ Prática Obrigatória 2: Seleção de Testes

Se o seu sistema tiver 50.000 testes e demorar 5 horas para rodar tudo, e você só alterou a cor de um texto na tela de ajuda, você precisa rodar os 50.000 testes de novo? Como você escolheria quais testes rodar nesse caso de regressão?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 12 Qualidade) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_11_qualidade_e_testes_de_software/
├── capitulos/
│   ├── capitulo_12_regressao.md
│   └── codigos/
│       └── cap12/
│           └── efeito_borboleta.js

9. 💡 Checkpoint de Lógica

Os testes de regressão servem como uma rede de proteção. Eles dão coragem ao programador para alterar o código sabendo que, se ele quebrar algo antigo, o teste vai avisar na hora!

10. 🔥 Desafio de Fixação

Pesquise sobre ferramentas de IC (Integração Contínua) como GitHub Actions ou Jenkins, que rodam os testes de regressão automaticamente toda vez que você faz um commit.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1: 3. Sim, é uma regressão! O botão de pausar já funcionava e quebrou por causa da nova função. Os testes de regressão (provavelmente E2E ou de Integração que testavam o player) falharam em ser executados ou não existiam.


Capitulo Anterior | Proximo Capitulo