下冰雹 · 2020年10月21日

历史上的重大软件BUG启示录 第3篇---价值5亿美元的简单复用

image.png
1996年6月4日,Ariane 5火箭第一次航行,一个软件错误便产生了灾难性后果。发射后仅仅37秒,火箭偏离了它的飞行路径,随后解体并且爆炸。火箭上载有价值5亿美元的卫星。

Ariane5是欧洲航天局推出的新一代重型航天运载火箭,它的上一代运载火箭Ariane4设计精良,享有很高的赞誉。

第一枚5代实验火箭代号为501,预计在1996年6月4日,从位于南美洲靠近赤道的库鲁发射场发射。在这之前,Ariane5已经研发了9年、花费了约80亿美元并多次推迟发射。

6月4日这天,气象良好,符合火箭发射条件。一切就绪后,火箭点火升空。虽然这是第一次测试发射,但还是携带了4颗卫星,这个冒进的决定导致了这次事故损失惨重。它的上一代Ariane4表现的十分稳定,Ariane5也吸取了Ariane4的很多设计精华,这使得管理层多少有些盲目自信。

火箭垂直上升,看上去一切正常。但是到主发动机点火36.7秒时,意外发生:首先是惯性导航系统出现故障,原因是惯性导航系统内的计算机不起作用。0.05秒之后,另一套惯性导航系统的计算机也同样失效。而自主式惯性导航系统的计算机向箭载计算机发送了一个无效数据,但箭载计算机却把它当成了飞行数据。结果,在箭载计算机的控制下,火箭的喷嘴偏移了6.6度。火箭开始倾斜,点火第39秒,在巨大的空气动力载荷作用下,火箭解体。紧接着,火箭进入异常处理程序,引爆自毁装置,在离地4000米的高空爆炸。

后来的调查显示,控制惯性导航系统的计算机向箭载计算机发送了一个无效数据。它没有发送飞行控制信息,而是送出了一个诊断位模式,表明将一个64位浮点数转换成16位有符号整数时,产生了溢出。

溢出值测量的是火箭的水平速率,这比早先的Ariane 4火箭所能达到的速度高出了5倍。设计Ariane 4火箭软件的时候,它们小心地分析了这些数字值,并且确定水平速率决不会超出一个16位数的表示范围。不幸的是,他们在Ariane 5火箭的系统中简单地重用了这一部分,而没有检查它所基于的假设。

设计Ariane 4火箭软件的作者,也没有把这个限制条件以警告的方式放在一个显而易见的位置。这应该引起我们深思和注意。

尽管惯性导航系统经过成千上万次测试,但没有一次测试包括了实际轨道上的测试!尽管火箭上有两套硬件冗余,但两套硬件的软件却是完全相同的!

技术评估和测试必须深入,但Ariane5的设计者们明显没有做到更好。

未经实际运行考验的系统,对其盲目自信可能是致命的。1997年10月30日,Ariane5第二次实验发射,终于取得成功。这次,他们携带的是模拟卫星。

相关阅读

历史上的重大软件BUG启示录 第1篇---"瞳"的陨落
历史上的重大软件BUG启示录 第2篇---心脏滴血

作者:朱工
首发博客:https://freertos.blog.csdn.net/article/details/52424077
关注FreeRTOS从基础到高级专栏,即时收取FreeRTOS系列文章。
推荐阅读
关注数
3260
内容数
54
介绍FreeRTOS的基本功能,移植与使用。主要介绍FreeRTOS的裁剪、任务、内存管理、队列、信号量、任务通知等基本组成,看完可以会用FreeRTOS,高级篇会深入介绍FreeRTOS的实现细节、方法、技巧。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息