O que se perdeu
O Mars Climate Orbiter foi lançado em 11 de dezembro de 1998, para ser o primeiro satélite meteorológico interplanetário e um retransmissor de comunicações para uma sonda de pouso que chegaria mais tarde naquele ano. Voou 286 dias. Em 23 de setembro de 1999 a queima de inserção em órbita começou no horário; cinco minutos depois, cerca de quarenta e nove segundos antes do previsto, a espaçonave passou atrás de Marte. Nunca mais se ouviu falar dela. A missão valia 327,6 milhões de dólares.
A comissão de investigação da NASA concluiu que a causa raiz foi a falha em usar unidades métricas na codificação de um arquivo de software de solo, "Small Forces", usado em modelos de trajetória.
O mecanismo
A espaçonave acionava propulsores periodicamente para descarregar o momento angular acumulado. Depois de cada um desses eventos, um programa de solo chamado SM_FORCES processava a telemetria e produzia um arquivo para a equipe de navegação, registrando quanto impulso cada acionamento entregara.
A especificação de interface entre os dois sistemas dizia que os valores de impulso naquele arquivo deviam estar em newtons-segundo. O programa os fornecia em libras-força-segundo.
Uma libra-força-segundo equivale a cerca de 4,45 newtons-segundo. O software de navegação, confiando na especificação, leu os números como métricos - e portanto modelou o efeito de cada acionamento como cerca de vinte e dois por cento do valor real. Ao longo de 286 dias de correções pequenas e frequentes, o erro acumulado afastou a trajetória prevista da real.
Estimativas feitas depois, com os valores corrigidos, puseram a maior aproximação da espaçonave em cerca de 57 quilômetros. A altitude considerada sobrevivível era 80.
Por que a versão famosa é a menos útil
"A NASA esqueceu de converter para o sistema métrico" é exato e não explica quase nada, porque faz a falha soar como desleixo que gente melhor teria evitado.
Nenhuma das unidades estava errada. Libra-força-segundo e newton-segundo medem impulso; as duas são legítimas; cada programa era internamente consistente e correto nos próprios termos. O perigo era que o mesmo número nu significava duas grandezas físicas diferentes em lados opostos de uma fronteira - uma fronteira que era ao mesmo tempo interface de software e fronteira organizacional, entre a empresa que construiu a espaçonave e o laboratório que a navegava.
E havia uma especificação. Ela dizia newtons-segundo. A especificação estava certa e a espaçonave se perdeu assim mesmo, que é a parte que vale demorar: um documento enunciando a convenção correta não a faz cumprir. Alguma coisa precisa conferir. A recomendação da própria comissão foi conduzir uma auditoria de software para conformidade com a especificação em todos os dados transferidos entre as duas organizações - o que é um jeito de dizer que ninguém vinha comparando o que a interface prometia com o que a atravessava.
O presidente da comissão enunciou o achado mais amplo sem rodeios: a revisão identificara outros fatores significativos que permitiram àquele erro nascer, e então o deixaram permanecer e se propagar até produzir um erro grave na compreensão da trajetória da espaçonave na aproximação de Marte. As causas contribuintes listadas foram consideração inadequada da missão como sistema total, comunicação e treinamento inconsistentes dentro do projeto, e ausência de verificação completa de ponta a ponta do software de navegação e de seus modelos.
Os quatro meses
Este é o elemento que tira o caso do pacote de unidades e o põe na companhia da Target e do Knight Capital.
O erro não era invisível. Ao longo da primavera e do verão de 1999, pessoal de nível operacional levantou preocupações sobre discrepâncias entre onde a solução de navegação dizia que a espaçonave estava e onde outros métodos sugeriam que ela estava. Uma correção de trajetória foi proposta e discutida à medida que o encontro se aproximava. Não foi executada - e a investigação registrou a razão: a equipe estava despreparada para este cenário fora do nominal.
Isso não é incompetência. É o formato comum de uma organização encontrando uma situação para a qual não tem resposta ensaiada. Alguém notou. A preocupação circulou, no registro informal em que preocupações circulam. Não havia procedimento que transformasse "várias pessoas estão inquietas com a solução de navegação" numa decisão com prazo, e assim o padrão - seguir como planejado - venceu por não ter sido escolhido.
Lido contra o relógio, todo estágio depois da detecção falhou, ao longo de meses em vez dos quarenta e cinco minutos que o teve.
O que um profissional deve tirar disso
Toda fronteira carrega premissas que não estão nos dados. Um número que atravessa uma interface vem acompanhado de um significado que mora em outro lugar - num documento, numa convenção, na cabeça de alguém. Unidades são o exemplo vistoso; os banais estão por toda parte em redes. Aquela taxa é em bits ou em bytes? Aquele carimbo de tempo é local ou ? Aquilo é comprimento de prefixo ou máscara? A é a carga ou o quadro? Aquele contador é cumulativo ou por intervalo? Cada um deles já causou uma interrupção real em algum lugar, exatamente pela razão que perdeu o orbitador: os dois lados estavam internamente corretos.
Os formatos que carregam essas premissas por uma fronteira - JSON, , XML, carimbos de tempo, codificações de texto, - estão reunidos em os formatos do meio, que é esta falha generalizada.
Especifique, e verifique separadamente. O documento de interface estava correto. O que faltava era qualquer coisa que comparasse o documento com o tráfego - uma auditoria, uma checagem de ordem de grandeza, uma asserção de que os valores caem numa faixa plausível. Um valor 4,45 vezes menor não é detectável por um programa que não tem opinião sobre quanto o valor deveria ser, e dar-lhe uma opinião é barato.
Teste o caminho, não os componentes. O achado da comissão foi a ausência de verificação completa de ponta a ponta. Cada programa funcionava. O teste de integração através da fronteira organizacional era onde a falha morava, e é o teste mais frequentemente pulado, porque exige duas equipes e não pertence a nenhuma.
E construa o caminho para o engenheiro inquieto. A lição mais transferível aqui não é sobre unidades. Alguém esteve preocupado, por meses, e não havia mecanismo que convertesse preocupação em decisão. Se a sua organização não tem um jeito definido de uma preocupação de nível operacional forçar uma resposta explícita - mesmo a resposta "consideramos e vamos prosseguir" - então o padrão sempre vencerá, e o padrão será escolhido por ninguém.
Fontes
- Registro de lições aprendidas da NASA sobre a comissão de investigação do Mars Climate Orbiter: o objetivo da missão era orbitar Marte como primeiro satélite meteorológico interplanetário e servir de retransmissor para o Mars Polar Lander; o MCO foi lançado em 11 de dezembro de 1998 e perdido após a entrada em ocultação durante a manobra de inserção em órbita, com o sinal visto pela última vez por volta das 09:04:52 UTC de 23 de setembro de 1999; a comissão determinou como causa raiz a falha em usar unidades métricas na codificação de um arquivo de software de solo, "Small Forces", usado em modelos de trajetória, com dados de desempenho de propulsor em unidades inglesas usados na aplicação SM_FORCES; a comissão reconheceu que erros acontecem em projetos espaciais mas que normalmente há processos suficientes para pegá-los, e recomendou conduzir auditoria de software para conformidade com a especificação em todos os dados transferidos entre o JPL e a Lockheed Martin Astronautics
- Comunicado da NASA de 10 de novembro de 1999, citando o presidente da comissão Arthur Stephenson: a causa raiz foi a tradução malsucedida de unidades inglesas em métricas num segmento do software de missão de solo relacionado à navegação; a comissão identificou outros fatores significativos que permitiram àquele erro nascer, e então o deixaram permanecer e se propagar até resultar num erro grave na compreensão da trajetória da espaçonave na aproximação de Marte; as causas contribuintes incluem consideração inadequada da missão inteira e de sua operação pós-lançamento como sistema total, comunicação e treinamento inconsistentes dentro do projeto, e ausência de verificação completa de ponta a ponta do software de navegação e dos modelos relacionados
- Servidor de relatórios técnicos da NASA, comissão especial de revisão do JPL: a queima de inserção em órbita, manobra de 16 minutos, começou no horário; cinco minutos depois e cerca de 49 segundos antes do momento previsto para a perda de comunicação a espaçonave foi ocultada por Marte, e daí em diante nenhum contato pôde ser estabelecido
- Sobre o mecanismo e os números: depois de cada evento de dessaturação de momento angular o software de solo SM_FORCES processava dados da espaçonave e gerava um arquivo AMD; a especificação de interface exigia os dados de impulso naquele arquivo em newtons-segundo, e o software de solo os reportava em libras-força-segundo; como uma libra-força equivale a cerca de 4,45 newtons, o processamento de navegação subestimava o efeito dos acionamentos por um fator de 4,45; a falha foi de controle de interface e de verificação, em que um número de aparência válida carregava a unidade errada; estimativas pós-perda com valores corrigidos puseram o periapse inicial em cerca de 57 km, julgado baixo demais para a sobrevivência
- Space Daily, sobre por que a versão comprimida engana: libra-força-segundo e newton-segundo medem impulso, mas uma libra-força-segundo equivale a cerca de 4,45 newtons-segundo, e o algoritmo de navegação receptor confiou que o arquivo seguia sua especificação, lendo os números como métricos e modelando o efeito de cada acionamento como cerca de 22 por cento do valor real; o número atravessou uma fronteira entre o software da contratada e o sistema de navegação do JPL com um significado e foi consumido com outro; libras-força-segundo não eram uma unidade tola e newtons-segundo não eram magicamente mais seguros - o perigo era o mesmo número nu significar grandezas físicas diferentes em lados opostos de uma fronteira de software e organizacional
- Sobre os meses de aviso: o limite de sobrevivência do veículo era 80 quilômetros; uma queima de correção foi proposta, os engenheiros a discutiram, e a equipe decidiu não executá-la porque, como o relatório de investigação documentou, estavam "despreparados para este cenário fora do nominal"; 286 dias de voo e uma missão de 327,6 milhões de dólares terminaram depois de uma anomalia de navegação que estivera visível por meses