🚀 Capítulo 18: Bugs Famosos da História (Tema: Jurassic Park)

NOTE

Este capítulo utiliza a temática de Jurassic Park para falar sobre bugs reais. O programador Dennis Nedry desligou o sistema e os dinossauros fugiram. No mundo real, falhas de software já causaram desastres gigantescos!


1. 🎯 Objetivo da Aula

Conhecer casos reais e históricos de falhas de software (bugs) que causaram prejuízos bilionários ou perda de vidas, entendendo a importância vital da qualidade de software em sistemas críticos.

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

No filme Jurassic Park, o sistema de segurança falha e os dinossauros escapam. Além da sabotagem humana, o sistema tinha um bug de lógica bizarro:

  • Os computadores contavam os dinossauros na ilha.
  • Eles procuravam por exatamente 238 dinossauros (o número esperado).
  • Quando os dinossauros começaram a se reproduzir sozinhos e a população subiu para 250, o software continuava mostrando 238! Ele parava de contar quando achava o número que esperava.

Esse é um exemplo clássico de teste fraco: o software só testava o “caminho feliz”. Seu desafio é aprender com os erros do passado para não deixar os monstros do seu código escaparem!

3. 🧠 Fundamentos: A Teoria Traduzida

Estudar bugs do passado nos ajuda a entender por que investimos tanto tempo e dinheiro em testes hoje em dia.

📜 3 Casos Reais de Desastres por Software:

  1. O Foguete Ariane 5 (1996):

    • O Bug: O software tentou enfiar um número de 64 bits (com vírgula) dentro de um espaço de memória de 16 bits (inteiro). Deu estouro de memória (Overflow).
    • O Resultado: O foguete se autodestruiu 40 segundos após o lançamento. Prejuízo de 500 milhões de dólares.
  2. A Máquina de Radioterapia Therac-25 (1985):

    • O Bug: Um erro de concorrência (Race Condition) no software fazia a máquina disparar doses letais de radiação se o operador digitasse os comandos rápido demais.
    • O Resultado: Tragicamente, causou a morte de vários pacientes.
  3. O Bug do Milênio (Ano 2000):

    • O Bug: Antigamente, para economizar memória, os sistemas salvavam o ano com apenas 2 dígitos (Ex: 99 em vez de 1999). Quando chegasse o ano 00, os computadores achariam que estávamos em 1900.
    • O Resultado: Bilhões de dólares foram gastos no mundo todo para corrigir os sistemas a tempo. O caos foi evitado graças ao trabalho duro dos programadores de plantão!

4. 📖 Exemplo Guiado: O Bug do Overflow (JS)

Em linguagens antigas, se você tentasse salvar um número maior do que a variável suportava, o sistema quebrava ou o número ” dava a volta” e ficava negativo!

// Simulação conceitual de estouro de memória
let limiteMemoria = 32767; // Limite de 16 bits
 
function adicionarDados(valor) {
    if (valor > limiteMemoria) {
        console.log("💥 ERRO: Estouro de Memória (Overflow)!");
        // No caso do foguete, o sistema travou e os motores falharam!
    }
}

5. 🛠️ Prática Obrigatória 1: Analisando o Caso do Parque

No caso do Jurassic Park citado no cenário (onde o sistema parava de contar ao atingir 238):

  1. Que tipo de teste (Unitário, Integração ou E2E) poderia ter evitado esse bug se tivéssemos testado a função de contagem com um número maior que o esperado?
  2. Esse bug foi de lógica ou de estouro de memória?

6. 🛠️ Prática Obrigatória 2: O Custo Humano

Muitas vezes os chefes de projetos dizem: “Não temos tempo para testar, precisamos lançar o produto logo!“. Com base no caso da máquina Therac-25, qual argumento você usaria para convencer seu chefe de que sistemas que lidam com vidas humanas NUNCA podem ser lançados sem testes rigorosos?


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 18 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_18_monstros.md
│   └── codigos/
│       └── cap18/
│           └── monstros_historia.txt

9. 💡 Checkpoint de Lógica

Os piores bugs geralmente não são os que dão erro na tela (esses nós vemos e corrigimos). Os piores são os que calculam dados errados em silêncio e nós só descobrimos anos depois!

10. 🔥 Desafio de Fixação

Pesquise sobre o bug do jogo Pokémon Red/Blue que permitia encontrar o pokémon “MissingNo” (um monte de pixels bagunçados). O que causava esse bug?

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Um Teste Unitário na função de contagem passaria facilmente se testássemos o limite.
  2. Foi um bug de Lógica (O programador colocou a condição de parada errada: if (contagem == 238) break;).

Capitulo Anterior | Proximo Capitulo