🚀 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:
-
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.
-
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.
-
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:
99em vez de1999). Quando chegasse o ano00, os computadores achariam que estávamos em1900. - 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!
- O Bug: Antigamente, para economizar memória, os sistemas salvavam o ano com apenas 2 dígitos (Ex:
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):
- 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?
- 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 18 Qualidade) e clique em Commit to main. - 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.txt9. 💡 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:
- Um Teste Unitário na função de contagem passaria facilmente se testássemos o limite.
- Foi um bug de Lógica (O programador colocou a condição de parada errada:
if (contagem == 238) break;).