返回档案库

案例库 · 软件与 IT · 技术决策 · 1962

「海员 1 号」:美国首个金星探测器因制导代码错误被销毁

1962 年发射后几分钟,海员 1 号偏离航线,被范围安全官下令炸毁。原因追溯到制导方程里的抄写错误。

NASA · 喷气推进实验室 · 1962-07-22

怎么回事

海员 1 号是 NASA「海员」计划的首艘航天器,原本要成为美国首个飞掠金星的探测器。它于 1962 年 7 月 22 日从卡纳维拉尔角搭载「宇宙神-半人马座」火箭发射升空。几分钟内,火箭开始偏离航线,范围安全官在它威胁到地面人员之前下令将其销毁,任务在起飞不到 5 分钟后就丢了。

调查把故障指向制导系统。火箭飞行轨迹由一组手写进规范、再人工抄入计算机程序的方程控制。这个抄写过程中出了错——少了一个符号,或者符号抄错了——于是制导软件把火箭的运动算歪了,导引方向也跟着翻车。亚瑟·克拉克帮着传播后,公众把它说成「历史上最贵的连字符」,但技术上更接近于手工抄写方程时漏掉了一个平滑项,而不是字面上的连字符。

这次损失大约 1800 万美元,还搭进去一个发射窗口;不过它的姊妹飞船海员 2 号在几周后成功发射,并成为首个飞掠另一颗行星的探测器。海员 1 号后来成了软件工程里的经典警示:在控制昂贵又不留情面的系统时,单个抄写错误就可能让一切栽了,而且手工复制公式这件小事,检查力度不该比公式本身更松。

为什么会这样

  • 制导方程先手写,再人工抄入计算机程序,几乎没有防止抄错的自动保护。
  • 方程里一个符号被漏掉或抄错,导致制导软件把火箭轨迹算偏。
  • 写成规范的内容与真正飞行的代码之间,没有独立校验去抓住差异。
  • 系统很不宽容:飞行中的小软件错误,几分钟内就变成不可挽回的损失。
代价一艘约 1800 万美元的探测器,发射时被销毁代价高昂

教训

火箭代码里,错误越小,杀伤面越大。一个抄错的符号就能把一艘 1800 万美元的探测器带偏。对转写和数据录入的检查,必须和设计本身一样严。

后来呢

备用飞船海员 2 号在次月发射成功,并顺利飞掠金星,科学上把计划救了回来。但海员 1 号成了软件史上最有名的故事之一,被包装成「历史上最贵的连字符」(这只是对真实制导方程错误的简化说法)。它常被拿来讲软件验证为什么重要、为什么关键代码手工转写很危险,以及为什么在软件负责把一枚 1800 万美元的火箭送向另一颗行星时,最小的笔误也可能带来最大的后果。

资料来源

发现哪里写错了?告诉我们。

Comments · 0

    登录 后就能评论。

    类似的案例

    这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →