在现今数字年代,计算机bug不但困扰着每个程序员,更会无可避免影响我们的生活,小到每个人的衣食住行,大到国家经济,世界局势。随着我们的生活方式渐渐的数字化、互联网化,数字世界的找虫和杀虫就变得越来越重要。
  软件史上有哪些著名的bug呢?让我们一起来回顾一下:
  1、万“虫”之母,史上留名
  
软件史上第一虫
  1947年9月9日下午3点45分,Grace Murray Hopper在她的记录本上记下了史上第一个计算机Bug——在Harvard Mark II计算机里找到的一只飞蛾,她把飞蛾贴在日记本上,并写道”First actual case of bug being found”。这个发现奠定了Bug这个词在计算机世界的地位,变成无数苦逼程序员的噩梦。 从那以后,Bug这个词在计算机世界表示计算机程序中的错误或者疏漏,它们会使程序计算出莫名其妙的结果,甚至引起程序的崩溃。Grace Murray Hopper是历史上最早一批程序员,而且还是个女程序员,服役于美国海军,官至准将。
  这是流传最广的关于计算机Bug的故事,可是历史的真相是,Bug这个词早在发明家托马斯·爱迪生的年代就被广泛用于指机器的故障,这在爱迪生本人的1870年左右的笔记里面也能看得到。而电气电子工程师学会IEEE也将Bug这一词的引入归功于爱迪生。
  2、千年虫,炒作的狂欢
  
1999年给了哗众取宠的杂志小报极好的题材
  在上个世纪,软件业者从来没想过他们的代码和产品会跨入新千年。因此,很多软件业者为了节省内存省略掉代表年份的前两位数字”19”,或者默认前两位为”19”。
  而当日历越来越接近1999年12月31日时,人们越来越担心在千禧年的新年夜大家的电脑系统都会崩溃,因为系统日期会更新为1900年1月1日而不是2000年1月1日,这样可能意味着无数的灾难事件,甚至是世界末日。
  到今天,我们可以调侃这个滑稽的故事,因为核导弹并没有自动发射,飞机也没有失控从天上掉下来,银行也没有把国家和用户的大笔存款弄丢。
  千年虫Bug是真实的,全球花了上亿的美金用来升级系统。而且,也发生了一些小的事故:在西班牙,停车场计费表坏了;法国气象局公布了19100年1月1日的天气预报;在澳洲,公共汽车验票系统崩溃。就这样而已。最后盘点的结果是软件公司赚了大钱,八卦小报销量大增,很多程序员的千禧年夜party泡汤了,几个中国文盲老太太被人骗了养老金,不可谓不严重。
  3、宰赫兰导弹事件,毫秒的误差
  在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙地阿拉伯的宰赫兰基地,当场炸死28个美国士兵,炸伤100多人,造成美军海湾战争中唯一一次伤亡超过百人的损失。
  在后来的调查中发现,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。
  对一般人人来说,0.33秒是微不足道的。但是对一个需要跟踪并摧毁一枚空中飞弹的雷达系统来说,这是灾难性的——侯赛因飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个”微不足道的”0.33秒相当于大约600米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。
  
宰赫兰导弹事件图解
  4、公尺还是英尺?火星气候探测者号的星际迷航
  火星气候探测者号在1997年发射,目的为研究火星气候,但是它没有能够达成这项花费3亿多美元的使命。
  探测者号在太空中飞行几个月以后,由于导航错误,最终在火星大气层解体。探测器的控制团队使用英制单位来发送导航指令,而探测器的软件系统使用公制来读取指令。这一错误大大改变了导航控制的路径。最后探测器进入过低的火星轨道(大约100公里误差),在过大的火星大气压力和摩擦下解体。
公尺还是英尺?偏离100公里!
  5、阿丽亚娜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型火箭开发。在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一值不会超过16位的变量,而5型火箭的开发人员简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。发射后这个64位带小数点的变量被转换成16位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁,4亿美金变成一个巨大的烟花。
  
花费4亿美金的阿丽亚娜5型烟花,软件bug出品
  彩蛋 Windows 98蓝屏死机
  比尔·盖茨在Windows 98现场展示会上与观众共同见证死机蓝屏...

史上最臭名昭著五大软件Bug的更多相关文章

  1. C语言中史上最愚蠢的Bug

    C语言中史上最愚蠢的Bug   本文来自“The most stupid C bug ever”,很有意思,分享给大家.我相信这样的bug,就算你是高手你也会犯的.你来看看作者犯的这个Bug吧.. 首 ...

  2. 史上最全PMP备考考点全攻略(上篇-五大过程组,附赠资料)

    一.这可能是一篇史上最全的PMP备考考点全梳理文章 写在前面,这可能是史上最全的PMBOK考点全书考点梳理,由PMP备考自律营呕心沥血整理,内容较长,分为上下篇,绝对值得所有正在备考PMP的学员收藏! ...

  3. 强烈推荐:Android史上最强大的自定义任务软件Tasker

    强烈推荐:Android史上最强大的自定义任务软件Taskerhttp://bbs.mumayi.com/thread-28387-1-1.html(出处: 木蚂蚁手机乐园) Android上的Tas ...

  4. 历史上的重大软件BUG启示录第9篇---微软的硬件尝试

    (图片来源于网络) 2001年苹果公司发布第一代iPod,它的推出在当时引起了轰动,它拥有大容量存储空间和全新的操作方式,并且还非常漂亮(在当时看来),因此在市场上大受欢迎,苹果公司也因此赚的盆满钵满 ...

  5. 史上最简单的排序算法?看起来却满是bug

    大家好,我是雨乐. 今天在搜论文的时候,偶然发现一篇文章,名为<Is this the simplest (and most surprising) sorting algorithm ever ...

  6. Java基础面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  7. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  8. 史上最详细的Android Studio系列教程一--下载和安装

    链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...

  9. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

随机推荐

  1. [转]crontab命令指南

    原文链接:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划 ...

  2. POJ 3061 (二分+前缀和or尺取法)

    题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...

  3. Leetcode Spiral Matrix II

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  4. 【noiOJ】p7914(..)

    08:不重复地输出数 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 输入n个数,从小到大将它们输出,重复的数只输出一次.保证不同的数不超过500个. 输入 ...

  5. jQuery 基本过滤选择器注意点

    $(".add_shuxing_ul > li:first")  选择class为add_shuxing_ul 的子级li元素的第一个li $(".add_shux ...

  6. SQLSERVER远程备份、恢复(转)

    SQLSERVER服务实例名称:192.168.0.2需要备份的数据库名称: a备份机器名称(Client端):192.168.0.3备份机用户:zf 密码:123备份机域名:domain备份机提供备 ...

  7. Eclipse 使用maven创建Dynamic Web Project

    今天看到spring的官网首页已经没有下载连接了,建议使用maven构建spring项目.虽然maven已经不是新技术,但是这个我还没用过,谷歌走起! 通常创建项目都是用Eclipse,前几年还是My ...

  8. 运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为:java <CLASS文件名>注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java ...

  9. Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解

    1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...

  10. Perform UPSERT / INSERT OR UPDATE against a SQLite Database

    Option 1: You can afford deleting the row In other words, you don't have foreign key, or if you have ...