第1章引论 年美国宇航局的火星探测飞船在试图登陆火星地面时突然坠毁失踪。质量管理小组观测到故 障,并认定出现误动作的原因极可能是某一个数据位被意外更改。什么情况下这个数据位被 修改了?又为什么没有在内部测试时发现呢? 从理论上看,登陆计划被设计成这样一一在飞船降落到火星的过程中,降落伞将被打开, 减缓飞船的下落速度。降落伞打开后的几秒钟内,飞船的3条腿将迅速撑开,并在预定地点着 陆。当飞船离地面1800m时,它将丢弃降落伞,点燃登陆反推进器,借助反推力来不断降低速 度,从而可以使飞船能缓缓降落地面。 美国宇航局为了省钱,简化了确定何时关闭推进器的装置。为了替代其他太空船上使用 的贵重雷达,在飞船的脚上装了一个廉价的触点开关,在计算机中设置一个数据位来关掉燃 料。很简单,飞船的脚不“着地”,引擎就会点火。不幸的是,质量管理小组在事后的测试中发 现,当飞船的脚迅速摆开准备着陆时,机械振动在大多数情况下也会触发着地开关,设置错误 的数据位。设想飞船开始着陆时,计算机极有可能关闭推进器,而火星登陆飞船下坠1800m 之后没有反推进器的帮助,冲向地面,必然会撞成碎片。 为什么会出现这样的结果?原因很简单。登陆飞船经过了多个小组测试。其中一个小组 测试飞船的脚落地过程(legfold-downprocedure),但从没有检查那个关键的数据位,因为那 不是这个小组负责的范围;另一个小组测试着陆过程的其他部分,但这个小组总是在开始测 试之前重置计算机、清除数据位。双方本身的工作都没什么问题,就是没有合在一起测试,其 接口没有被测试,而问题就在这里,后一个小组没有注意到数据位已经被错误设定。 1.1.4人类容易得健忘症一再次忽视了集成测试 2019年12月20日,波音公司的新一代载人飞船“星际客机”发射升空,执行其第一次飞 行任务一—为宇航员送上圣诞礼物。 火箭的发射本来一切正常,但是就在与火箭分离后,“星际客机”飞船上的一个关键设备出 现了异常一—飞船的一个时钟错误,让飞船误以为自己正处于提升近地点的变轨过程中。在 预设程序里,变轨需要极高精度的姿态和轨道控制,所以此时飞船的 48台姿轨控推力器开始 疯狂工作,在短时间内消耗了大量燃料,如图1-2所示。在发现异常后,任务控制人员第一时 间尝试向飞船注人正确指令,手动消除影响。但不巧的是,当时飞船正好处于两颗中继卫星的 覆盖交接区,因此指令没有注人成功。 MEssIOnCONTROXCeTER 图1-2 任务控制中心显示飞船的多台推力器正在工作