购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

【导读案例】臭名昭著的五大软件bug

我们知道,只要是软件就会有bug(错误)。因为再严格的测试也只是抽样活动,总会有bug被遗留下来。对于这些bug,我们要看它的影响程度是什么样的。对于生命周期比较长的系统,这些bug只要产生了影响就都是要修改的。

1.万“虫”之母,史上留名

1947年9月9日下午3点45分,历史上最早一批程序员格蕾丝·赫柏在她的记录本上记下了史上第一个计算机bug——在Harvard MarkII计算机里找到的一只飞蛾,她把飞蛾贴在日记本上,并写道“First actual case of bug being found(第一个发现错误的实际案例)”(见图3-1)。这个发现奠定了bug这个词在计算机世界的地位,甚至成为无数程序员的噩梦。从那以后,bug这个词在计算机世界表示计算机程序中的错误或者疏漏,它们会使程序计算出莫名其妙的结果,甚至引起程序的崩溃。

图3-1 软件史上第一虫

这是流传最广的关于计算机bug的故事。可是历史的真相是,bug这个词早在发明家托马斯·爱迪生的年代就被广泛用于指机器的故障,这在爱迪生本人1870年左右的笔记里面也能看得到,美国的电气电子工程师学会IEEE也将bug这一词的引入归功于爱迪生。

2.千年虫,炒作的狂欢

在20世纪,软件业者从来没有考虑过他们的代码和产品会跨入新千年。因此,很多软件业者为了节省内存省略掉代表年份的前两位数字“19”,或者默认前两位为“19”。

而当日历越来越接近1999年12月31日时,人们越来越担心在千禧年的新年夜大家的计算机系统都会崩溃,因为系统日期会更新为1900年1月1日而不是2000年1月1日,这样可能意味着无数的灾难事件,甚至是“世界末日”。

在今天,我们可以调侃这个故事,因为核导弹并没有自动发射,飞机也没有失控从天上掉下来,银行也没有把国家和用户的大笔存款弄丢。

千年虫bug是真实的,全球花了上亿的美金用来升级系统,而且也发生了一些小的事故:在西班牙,停车场计费表坏了;在法国,气象局公布了1910年1月1日的天气预报;在澳大利亚,公共汽车验票系统崩溃。

3.宰赫兰导弹事件,毫秒的误差

在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙特阿拉伯的宰赫兰基地,当场炸死28个美国士兵,炸伤100多人,造成美军在海湾战争中一次伤亡超过百人的损失。

在后来的调查中发现,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100小时(h),每工作一小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒(见图3-2)。

图3-2 宰赫兰导弹事件图解

对一般人来说,0.33秒(s)是微不足道的。但是对一个需要跟踪并摧毁一枚空中导弹的雷达系统来说,这是灾难性的——事件中的飞毛腿导弹空速达4.2马赫(每秒1.5公里,1.43km/s),这个“微不足道的”0.33秒相当于大约471米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。

4.公尺还是英尺(1英尺(ft)=30.48厘米(cm))?火星气候探测者号的星际迷航

火星气候探测者号在1997年发射,目的为研究火星气候,但是它没有能够达成这项花费3亿多美元的使命。

探测者号在太空飞行几个月以后,由于导航错误,最终在火星大气层解体。探测器的控制团队使用英制单位来发送导航指令,而探测器的软件系统使用公制来读取指令。这一错误大大改变了导航控制的路径。最后探测器进入过低的火星轨道(大约100公里(km)误差),在过大的火星大气压力和摩擦下解体(见图3-3)。

5.阿丽亚娜5型运载火箭,昂贵的简单复制

程序员在编程时必须定义程序用到的变量,以及这些变量所需的计算机内存,这些内存用比特(bit位)定义。一个16位的变量可以代表-32768到32767之间的值。而一个64位的变量可以代表-9223372036854775808到9223372036854775807之间的值。

1996年6月4日,阿丽亚娜5型运载火箭首次发射点火后,火箭开始偏离路线,最终被迫引爆自毁,整个过程只有短短37秒。阿丽亚娜5型运载火箭基于前一代4型火箭开发。在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一数值不会超过16位的变量,而5型火箭的开发人员简单复制了这部分程序,没有对新火箭进行数值的验证,结果发生了致命的数值溢出。发射后这个64位带小数点的变量被转换成16位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁,研制费80亿美元变成一个巨大的烟花(见图3-4)。

图3-3 公尺还是英尺?偏离100公里

图3-4 阿丽亚娜5型运载火箭自毁

资料来源:博客园,https://www.cnblogs.com/yangxia-test/p/5122833.html。有改动。

阅读上文,请思考、分析并简单记录:

(1)你觉得,为什么本文作者在文章标题中用了“臭名昭著”?请简单分析。

答:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

(2)作为学习计算机及相关专业的学生,你认为本文介绍的这5个案例给你带来了什么启示?请简述之。

答:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

(3)女性有机会成为一个优秀的程序员或者计算工作者、数据科学家吗?请结合本文第1个案例以及本书第7章“导读案例”所述的“人肉计算机”,谈谈你的看法。

答:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

(4)请简述你所知道的上一周发生的国内外或者身边的大事:

答:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ZhdcP1CGN5dMeJzQ+xvWIBgMnxn0oug6+IAckT95L8fXvYlLEcgBJZ9k9URv9kA7

点击中间区域
呼出菜单
上一章
目录
下一章
×