历史上被点名的恶名昭彰的软件bug有哪些?
(软件史上第一个bug)
1947年9月9日下午3点45分,格蕾丝·默里·霍珀写下了历史上第一个电脑bug哈佛马克2号电脑里发现的一只飞蛾。她在日记中写下了这种飞蛾,并写下了“第一个发现这种虫子的真实案例”。这个发现奠定了Bug这个词在计算机界的地位,也让它变成了无数程序员的噩梦。从此,Bug一词在计算机世界中表示计算机程序中的错误或疏漏,会使程序计算出莫名其妙的结果,甚至导致程序崩溃。Grace Murray Hopper是历史上最早的程序员之一,她也是一名女性程序员。她在美国海军服役,从军官到准将。
这是最流行的关于电脑Bug的故事,但历史真相是,Bug这个词早在发明家托马斯·爱迪生的时代就被广泛用来指机器故障,这一点在爱迪生自己1870左右的笔记中也可以看到。电气和电子工程师协会的IEEE也将Bug一词的引入归功于爱迪生。
2,千年虫,炒作的狂欢。
(1999给了哗众取宠的杂志和小报一个极好的题材)
在上个世纪,软件行业从来没有想过他们的代码和产品会进入新千年。所以很多软件公司为了节省内存,省略了代表年份的前两位数字“19”,或者默认前两位数字为“19”。
随着日历越来越接近1999 65438+2月31,人们越来越担心大家的电脑系统会在千禧年的除夕崩溃,因为系统日期将更新为1900 1,而不是2000年的1。
今天我们可以拿这个搞笑的故事开玩笑,因为核导弹没有自动发射,飞机没有失控从天上掉下来,银行没有损失国家和用户的大笔存款。
千年虫是真实存在的,全世界已经花费了数亿美元来升级系统。此外,还发生了一些小事故:
在西班牙,停车计时器坏了;法国气象局公布10月000+1天气预报1965438+65438;在澳大利亚,公交车检票系统崩溃。仅此而已。最后盘点的结果是,软件公司大赚了一笔,小报销量大增,很多程序员的千年聚会泡汤,中国几个不识字的老太太被骗了养老金,这还不算严重。
3,达兰导弹事件,毫秒误差。
在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中了美国在沙特阿拉伯达兰的基地,造成28名美军士兵当场死亡,100多人受伤,造成了美国在唯一一次海湾战争中100多人伤亡的损失。
在后来的调查中发现,由于一个简单的计算机bug,该基地的爱国者反导系统未能拦截空中的飞毛腿导弹。当时负责保卫基地的爱国者反导系统已经连续工作了100小时。每工作一小时,系统中的时钟都会有轻微的毫秒级延迟,这就是这次故障悲剧的根源。爱国者反导系统的时钟寄存器设计为24位,所以时间的精度限制在24位。工作久了,这种微小的精度误差逐渐放大。工作100小时后,系统时间延迟三分之一秒。
对于一般人来说,0.33秒可以忽略不计。但对于一个需要跟踪并摧毁空中导弹的雷达系统来说,这是灾难性的——侯赛因飞毛腿导弹的空中速度达到4.2马赫(1.5公里/秒),这“微不足道”的0.33秒相当于600米左右的误差。在达兰的导弹事件中,雷达发现了空中的导弹,但由于时钟误差未能准确跟踪,基地的反导没有发射。
(达兰导弹事件图解)
4.米还是英尺?火星气候探索者的星际旅行
火星气候探测器于1997年发射,用于研究火星气候,但未能实现这项耗资3亿多美元的任务。
在太空飞行了几个月后,由于导航错误,探索者号最终在火星的大气层中解体。探测器的控制团队使用英制单位发送导航指令,而探测器的软件系统使用公制单位读取指令。这个错误极大地改变了导航控制的路径。最终探测器进入火星低轨道(误差约100 km),在火星过大的大气压力和摩擦力下解体。
(米还是英尺?偏离100 km!)
阿丽亚娜5运载火箭,昂贵的简单复制
程序员必须定义程序中使用的变量以及这些变量所需要的计算机内存,这是由位定义的。
16位的变量可以表示-32.768和32.767之间的值。一个64位变量能代表什么?介于9.223.372.036.854.775.808和9.223.372.036.854.775.807之间的值。
1996年6月4日,阿丽亚娜-5运载火箭首次发射后,火箭开始偏离航线,最终被迫引爆自毁。整个过程只有30秒。阿丽亚娜5型运载火箭是在前一代4型火箭的基础上发展起来的。在四号火箭系统中,一个水平速度的测量值使用了16位的变量和内存,因为在四号火箭系统中已经反复验证过,这个值不会超过16位的变量,而五号火箭的研制人员在没有验证新火箭的值的情况下,简单地复制了这部分程序,导致了致命的数值溢出。发射后,这个带小数点的64位变量被转换成不带小数点的16位变量,导致一系列错误,从而影响到火箭上的所有计算机和硬件,使整个系统瘫痪,只好选择自毁,4亿美元成了巨大的烟火。
(耗资4亿美元的阿丽亚娜5号烟花,由软件bug制作)
彩蛋:Windows 98蓝屏死机(比尔盖茨在Windows 98 live展会上和观众一起见证了蓝屏死机)。