Ariane 5 Flight 501

folclore

programação

O voo inaugural de 1996 destruído por um estouro de inteiro em software reaproveitado do Ariane 4.

Trinta e sete segundos após a decolagem, em 4 de junho de 1996, um valor de velocidade em 64 bits estourou uma conversão para 16 bits dentro do código de alinhamento inercial herdado do Ariane 4, cujo perfil de voo tornava o estouro impossível; no Ariane 5, mais rápido, não era. A exceção derrubou as duas unidades redundantes, que rodavam código idêntico, o foguete desviou e se autodestruiu, e cerca de meio bilhão de dólares em veículo e carga caiu no Atlântico. O relatório Lions o transformou no eterno estudo de caso sobre reutilizar código fora do envelope validado.

Em 4 de junho de 1996 o voo inaugural do Ariane 5 saiu de rota trinta e sete segundos após o lançamento e se autodestruiu, perdendo o foguete e seus quatro satélites científicos. A causa foi a conversão de um valor de ponto flutuante de 64 bits para um inteiro com sinal de 16 bits que estourou, em código herdado do Ariane 4.

Três detalhes o tornam exemplar, e não apenas caro. O código fazia algo que só tinha sentido antes do lançamento e não cumpria função alguma em voo, então o cálculo que matou o foguete era desnecessário. O valor estourou porque o Ariane 5 seguia uma trajetória genuinamente diferente, com velocidade horizontal maior, que a premissa do Ariane 4 havia excluído. E a exceção resultante foi tratada desligando a unidade de referência inercial, o que a unidade reserva, rodando software idêntico, já havia feito pelo motivo idêntico.

A lição que a comissão tirou foi sobre reúso, não sobre aritmética. Código comprovadamente correto num ambiente carrega consigo suas premissas, e herdá-lo sem revalidá-las é herdar uma especificação não declarada. Redundância que roda o mesmo software é redundância apenas contra falha de hardware, e é por isso que existe a diversidade de projeto, e por que ela é cara o bastante para que as pessoas sigam decidindo que não precisam dela.

Todos os verbetes do glossário