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

版权声明:本文为博主原创文章,未经博主允许不得转载。联系邮箱:[email protected] https://blog.csdn.net/zhzht19861011/article/details/52424077


(图片来源于网络)

        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第二次实验发射,终于取得成功。这次,他们携带的是模拟卫星。

猜你喜欢

转载自blog.csdn.net/zhzht19861011/article/details/52424077