🚀 Capítulo 13: Testes de Carga e Estresse (Tema: Godzilla)

NOTE

Este capítulo utiliza a temática de Godzilla para explicar os Testes de Carga e Estresse. A ponte aguenta o tráfego normal, mas e se o Godzilla pisar nela? Descubra o limite do seu sistema!


1. 🎯 Objetivo da Aula

Compreender a diferença entre Testes de Performance, Carga e Estresse, aprendendo como simular milhares de acessos simultâneos para descobrir o limite do sistema.

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

Você é o engenheiro chefe da cidade de Tóquio.

  • A Carga Normal: A ponte foi feita para suportar 1.000 carros ao mesmo tempo. Você testa isso colocando 1.000 carros lá. Isso é um Teste de Carga.
  • O Estresse: O Godzilla aparece e pisa na ponte. O peso dele equivale a 50.000 carros. A ponte vai cair? Onde ela vai quebrar primeiro? Isso é um Teste de Estresse.

No software, o seu site pode funcionar perfeitamente para 1 usuário. Mas e na Black Friday, quando 100.000 pessoas tentarem comprar ao mesmo tempo? O sistema vai cair? O banco de dados vai travar? Seu desafio é simular o ataque do Godzilla no seu código!

3. 🧠 Fundamentos: A Teoria Traduzida

Estes são os chamados Testes Não-Funcionais (não testam o que o sistema faz, mas como ele faz).

📈 Os Três Tipos Principais:

  1. Teste de Carga (Load Test):

    • Objetivo: Verificar se o sistema funciona bem sob a carga esperada (Ex: 500 usuários simultâneos).
    • Foco: Tempo de resposta e uso de memória.
  2. Teste de Estresse (Stress Test):

    • Objetivo: Jogar uma carga muito maior do que o sistema suporta para ver ele quebrar.
    • Foco: Descobrir o ponto de ruptura e ver se o sistema se recupera sozinho quando a carga diminui.
  3. Teste de Pico (Spike Test):

    • Objetivo: Simular um aumento repentino de usuários (Ex: Um influenciador famoso postou o link do seu site agora!).

4. 📖 Exemplo Guiado: O Teste de Estresse (JS/K6)

Para fazer esses testes, usamos ferramentas que fingem ser milhares de usuários. Uma das mais famosas é o K6.

// Exemplo de script de teste com K6
import http from 'k6/http';
import { sleep } from 'k6';
 
export const options = {
    vus: 1000, // 1000 Usuários Virtuais ao mesmo tempo!
    duration: '30s', // Durante 30 segundos
};
 
export default function () {
    // O robô tenta acessar a página
    http.get('https://meusite.com/api/produtos');
    sleep(1); // Espera 1 segundo e tenta de novo
}

5. 🛠️ Prática Obrigatória 1: Carga ou Estresse?

Diga qual tipo de teste você aplicaria em cada situação:

  1. Você quer garantir que o sistema de matrículas da escola aguente os 500 alunos acessando no primeiro dia de aula.
  2. Você quer saber quantos acessos simultâneos são necessários para tirar o site do ar.

6. 🛠️ Prática Obrigatória 2: O Ponto de Ruptura

Imagine que durante um teste de estresse, o sistema começou a dar erro 500 (Erro Interno). Você olhou os gráficos e viu que o Banco de Dados estava usando 100% da CPU, enquanto o servidor web estava usando só 10%.

  1. Quem foi o gargalo (o ponto fraco) do sistema nesse ataque do Godzilla?
  2. O que você sugeriria para resolver isso?

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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 13 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_13_carga.md
│   └── codigos/
│       └── cap13/
│           └── estresse_test.js

9. 💡 Checkpoint de Lógica

Testes de carga e estresse custam caro se forem feitos na nuvem (AWS, Azure), pois geram muito tráfego. Por isso, geralmente são feitos em ambientes locais ou de homologação antes do lançamento.

10. 🔥 Desafio de Fixação

Pesquise sobre ferramentas de teste de carga famosas como JMeter ou K6.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Teste de Carga (Carga esperada e conhecida).
  2. Teste de Estresse (Forçar até quebrar). Gabarito da Prática 2:
  3. O Banco de Dados foi o gargalo.
  4. Sugestões: Aumentar o servidor do banco, criar índices nas tabelas ou usar cache (como Redis) para não consultar o banco toda hora.

Capitulo Anterior | Proximo Capitulo