软件已经成了人们生活的一部分,且无处不在。有一个残酷的现实摆在人们面前:软件是人写的,这个世界上没有完美的人,因此也没有完美的软件。
在1994年的秋天,迪士尼公司发布了它给孩子们的第一款多媒体光盘游戏:狮子王动画故事。这是迪士尼公司在儿童游戏领域的第一次尝试,它大肆促销及进行广告推介,使该游戏销量巨大。在节日期间,该游戏是孩子们的“必买游戏”。结果在12月26日,圣诞节的第二天,迪士尼公司的客户服务热线开始响个不停。很快,负责电话支持的技术人员被来自愤怒的父母和哭喊的孩子们的电话淹没了——软件不能使用。报纸和电视对此次事件进行大量报道。
原来迪士尼没有在当时市场上可以买到的不同型号PC上做足够的测试。软件只能在迪士尼公司的程序员开发游戏的系统上,而不是一般大众所拥有的最常用的系统上运行。
2.“火星极地登陆者号”探测器
1999年12月3日,美国国家航空航天局(NASA)的“火星极地登陆者号”探测器(图7-2)试图在火星表面着陆时消失了。失败审查委员会认定发生故障最可能的原因是一个数据位未按预期设置。最令人吃惊的是为什么问题没有在内部的测试中被发现。
图7-2 “火星极地登陆者号”探测器
理论上,登陆的计划是:当探测器落到火星表面时,它会打开一个降落伞以减缓下降的速度。降落伞打开几秒钟后,探测器的3个腿会迅速伸展开并锁定到位,用于着陆。在探测器离火星表面1 800 m时,它会释放降落伞并点火着陆推进器,慢慢下降到火星表面。(www.xing528.com)
为了省钱,NASA简化了决定何时关闭推进器的机制。NASA去掉了用于其他航空器的昂贵的雷达,在探测器的腿上安装了便宜的触点开关,在计算机中设置一个数据位来控制触点开关,命令它关闭燃料。简单地说,发动机会一直运行直到探测器的腿“触地”。
不幸的是,失败审查委员会在测试中发现,在大多数情况下,探测器的腿会迅速打开着陆,机械振动也会触动开关,设置决定性的数据位。非常可能的是,探测器着陆时计算机关闭了推进器,探测器从1 800 m的高空摔到了火星表面,成了碎片。
结果是灾难性的,但其背后的原因却很简单。多个小组测试了探测器。一个组测试探测器的脚折叠的过程,另一个组测试之后的着陆过程。第一个组从没有检查触地数据位是否设置,因为那不是其测试范围;第二个组在开始测试之前,总是重置计算机,清除数据位。两个部分单独工作非常完美,但一起工作就不同了。
在1991年海湾战争期间,美国的爱国者导弹防御系统(图7-3)因为基于内部时钟的时间计算缺陷,不能够在沙特阿拉伯的达兰成功拦截伊拉克发射过来的一枚飞毛腿导弹。该飞毛腿导弹击中了一个美军军营并导致28个士兵阵亡。美国审计总署提供的GAO/IMTEC-98-26号报告文件描述了拦截失败的原因,其标题为“爱国者导弹防御:软件缺陷导致防御系统在沙特阿拉伯达兰的拦截失败”。
图7-3 美国的爱国者导弹防御系统
原来拦截失败是因为系统启动时不够精确的时间运算导致的错误。一个软件缺陷导致一个很小的计时错误,积累14小时后,跟踪系统就不再准确,而在这次袭击中,系统已经运行了100多个小时了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。