案例库 · 软件与 IT · 技术决策 · 1962
「海员 1 号」:美国首个金星探测器因制导代码错误被销毁
1962 年发射后几分钟,海员 1 号偏离航线,被范围安全官下令炸毁。原因追溯到制导方程里的抄写错误。
NASA · 喷气推进实验室 · 1962-07-22
怎么回事
海员 1 号是 NASA「海员」计划的首艘航天器,原本要成为美国首个飞掠金星的探测器。它于 1962 年 7 月 22 日从卡纳维拉尔角搭载「宇宙神-半人马座」火箭发射升空。几分钟内,火箭开始偏离航线,范围安全官在它威胁到地面人员之前下令将其销毁,任务在起飞不到 5 分钟后就丢了。
调查把故障指向制导系统。火箭飞行轨迹由一组手写进规范、再人工抄入计算机程序的方程控制。这个抄写过程中出了错——少了一个符号,或者符号抄错了——于是制导软件把火箭的运动算歪了,导引方向也跟着翻车。亚瑟·克拉克帮着传播后,公众把它说成「历史上最贵的连字符」,但技术上更接近于手工抄写方程时漏掉了一个平滑项,而不是字面上的连字符。
这次损失大约 1800 万美元,还搭进去一个发射窗口;不过它的姊妹飞船海员 2 号在几周后成功发射,并成为首个飞掠另一颗行星的探测器。海员 1 号后来成了软件工程里的经典警示:在控制昂贵又不留情面的系统时,单个抄写错误就可能让一切栽了,而且手工复制公式这件小事,检查力度不该比公式本身更松。
为什么会这样
- 制导方程先手写,再人工抄入计算机程序,几乎没有防止抄错的自动保护。
- 方程里一个符号被漏掉或抄错,导致制导软件把火箭轨迹算偏。
- 写成规范的内容与真正飞行的代码之间,没有独立校验去抓住差异。
- 系统很不宽容:飞行中的小软件错误,几分钟内就变成不可挽回的损失。
教训
火箭代码里,错误越小,杀伤面越大。一个抄错的符号就能把一艘 1800 万美元的探测器带偏。对转写和数据录入的检查,必须和设计本身一样严。
后来呢
备用飞船海员 2 号在次月发射成功,并顺利飞掠金星,科学上把计划救了回来。但海员 1 号成了软件史上最有名的故事之一,被包装成「历史上最贵的连字符」(这只是对真实制导方程错误的简化说法)。它常被拿来讲软件验证为什么重要、为什么关键代码手工转写很危险,以及为什么在软件负责把一枚 1800 万美元的火箭送向另一颗行星时,最小的笔误也可能带来最大的后果。
资料来源
- Mariner 1 — Wikipedia (22 July 1962 launch failure, guidance-equation transcription error)
- Mariner 1: a missing hyphen destroyed an $80M spacecraft — Science Blog
发现哪里写错了?告诉我们。
类似的案例
这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →

Comments · 0
登录 后就能评论。