美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的论文“Why do computers stop and what can be done about it?”中首次提出了程序bug的类型,比如玻尔bug(Bohrbug)、 海森堡bug(Bohrbug)等用著名科学家名称命名的bug。后来又出现了更多的bug类型。现在,让我们来看看它们都是什么bug类型。

美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(Jim Gray)

玻尔bug(Bohrbug)

大多数我们遇到的bug都是可以重现的,这些bug被统称为玻尔bug(Bohrbug)。它是用丹麦著名物理学家、诺贝尔获得者尼尔斯·波尔的名字命名的。波尔首先在1913年提出了一个简单、易于理解的原子模型概念。在波尔的模型中,原子中的电子的路径和动量是可预知的。同样的道理,玻尔bug(Bohrbug)也是可预知的。如果让软件在相同的条件下运行,你可以让bug再次显现。例如,如果程序遇到空指针异常会崩溃,那么,设定相同的输入条件,你可以轻易的让它们重新。

丹麦著名物理学家、诺贝尔获得者尼尔斯·波尔

海森堡bug(Bohrbug)

所有有阅历的程序员都遇到过这种情况:有个bug让程序崩溃了,但当程序重启后,这个bug消失了。不论你用多少的时间和精力来试图让bug重现,bug就是人间蒸发了。这样的bug被称为海森堡bug(Bohrbug),它是用德国物理学家、量子力学的创始人、“哥本哈根学派”代表性人物维尔纳·海森堡(Werner Heisenber)的名字命名,隐射其著名的“测不准原理”(又称“海森堡不确定性原理”)。根据他的这个理论,在某一个给定的时间点,一个电子所处的位置是无法确定的,也无法跟踪它的轨迹。当你去debug、探测、隔离一个bug时,你的这些动作会导致bug改变它们的行为表现,这些bug就叫做海森堡bug(Bohrbug)。这种事情是有可能的,比如,如果你使用未初始化的变量,这会导致一个bug出现。然而,当你试图debug这个程序时,程序却没有任何异常,因为很多的debug工具会自动初始化变量为0,所以这些bug将不会再现。

德国物理学家、量子力学的创始人、“哥本哈根学派”代表性人物维尔纳·海森堡(Werner Heisenberg)

曼德博bug(Mandelbug)

当bug产生的原因过于复杂而难以理解时,bug的出现也变得没有规律,这些叫做曼德博bug(Mandelbug)。它是用分形几何学之父本华·曼德博的名字命名。例如,操作系统中基于任务调度产生的bug就属于曼德博bug(Mandelbug)。

分形几何学之父本华·曼德博

薛定谔bug(Schroedinbug)

有时候,一个可以运行的程序,当你去看它的代码时,发现里面有一个bug或有某些问题,程序完全不可能在这样的bug下运行。但你再次运行这个程序时,bug突然就其作用了,程序崩溃的了!虽然这听起来很诡异,但这样的bug确实存在,而且被叫做薛定谔bug(Schroedinbug)。它是用奥地利理论物理学家、量子力学的奠基人埃尔温·薛定谔的名字命名。隐射薛定谔著名的薛定谔猫思想实验。在量子力学中,像原子这样的粒子可以存在于两种或两种以上的量子状态中,但薛定谔认为,在更典型的物体,例如一只猫——由很多原子构成——存在于两种状态下的可能性是没有的。他提出了一种思想实验:把一只猫、一个装有氰化氢气体的玻璃烧瓶和一个放射性原子核放进封闭的盒子里。当盒子内的监控器侦测到衰变粒子时,就会打破烧瓶,杀死这只猫。根据量子力学的哥本哈根诠释,在实验进行一段时间后,猫会处于又活又死的叠加态。可是,假若实验者观察盒子内部,他会观察到一只活猫或一只死猫,而不是同时处于活状态与死状态的猫。而在量子物理中,这被称作叠加态:猫同时处于生和死的状态。

奥地利理论物理学家、量子力学的奠基人埃尔温·薛定谔

回到我们的bug上,因为你在代码中发现了这个问题,你改变了程序的输出——程序要么就继续运行,要么崩溃。所以,这种bug就叫做薛定谔bug(Schroedinbug)。

还有几种其它类型的bug没有在这里列出,例如“成长的bug(aging-related bugs)”——只有在程序运行很久之后才会出现的bug

转自:http://***/a/zixun/2014/0623/104.html

Bug的类型的更多相关文章

  1. MyEclipse项目的BUG修复错误类型

    一.The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .cla ...

  2. AIX6.1/11.2.0.3在有关数据库SWAP一个BUG

    昨天南京到客户服务数据库的优化调整,其中新上线,经过审查alert.log当日志现在是在过去一段时间内取得,每隔几个小时的时间滞后,班会报似的内容: Thu Aug 21 09:01:26 2014 ...

  3. bug生命周期&bug跟踪处理

    一.BUG BUG:软件的缺陷 1.BUG的定义:----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节.或 ...

  4. BUG描述规范管理

    BUG:软件系统中存在的可能导致系统出错.失效.死机等问题的错误或缺陷. 描述一个缺陷,需要以下核心要素 标题:用简洁的话描述该缺陷,主要让开发知道这是一个什么样的缺陷 参数设置:Bug的类型(功能/ ...

  5. 理解Flow静态类型检查

    一.为什么在JavaScript中使用静态类型 了解静态类型的最快方法是将其与动态类型进行对比. 有静态类型参数的语言被称为静态类型语言. 另一方面,有动态类型参数的语言被称为动态类型语言.核心区别是 ...

  6. ios 7 Autolayout bug

    ios 7 Autolayout bug 错误类型:NSInternalInconsistencyException(SIGABRT) 详情:Auto Layout still required af ...

  7. bug的分类和等级

    一.bug的定义 软件的bug,狭义指软件程序的漏洞或缺陷,广义指测试工程师或用户提出的软件可改进的细节.或与需求文档存在差异的功能实现等 对应三个测试目的:(3个为了) 1.为了发现程序的代码或业务 ...

  8. 提交bug的标准及书写规范

    Bug有效性 1.交付过程中测试者需按照专家设定好的模块,对Bug进行归类提交: 2.Bug的类型默认为UI问题.功能问题.崩溃问题,提交Bug时不能弄错: 3.需求是否明确.前提条件是否满足.输入数 ...

  9. BUG 的生命周期

    BUG 的生命周期 Bug-->软件程序的漏洞或缺陷 Bug 的类型:代码错误.设计缺陷.界面优化.性能问题.配置相关.安装部署.安全相关.标准规划.测试脚本....其他(功能类.界面类.性能类 ...

随机推荐

  1. Android使用文件管理器打开指定文件夹,浏览里面的内容

    Android下可以打开一些文件,带有.doc 等后缀的文件网上一般都有解释,这个写一个使用文件管理器打开指定文件夹的 private void openAssignFolder(String pat ...

  2. sublimetext3安装配置

    官网:http://www.sublimetext.com/ 中文官网:http://www.sublimetextcn.com/ 包管理器:https://packagecontrol.io/ins ...

  3. MySQL访问

    MySQL访问 1.介绍 python访问mysql数据库,需要安装mysql的python插件. 2.安装插件 通过pip命令安装mysql插件. # cmd>pip install PyMy ...

  4. pc端的动态效果

    一 图片围绕着某一个确定的圆心运动 几张图片在一个圆开始运动的几种情况 https://github.com/GainLoss/Plug-in-unit 这里面有两种情况

  5. python_图形界面编程示例

    "常用Tkinter组件的使用" #一.弹出消息框 #1 弹出提示消息框 from tkinter.messagebox import * showinfo(title='提示', ...

  6. Java环境变量搭建(Linux环境)

    1. 下载解压JDK压缩包 例如:解压到 /opt/jdk1.7.0_80 下 2. 添加环境变量到 /etc/profile 文件中 vi /etc/profile 在文件末尾追加如下内容: exp ...

  7. 【luogu P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀布】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3609 ### 看着标签什么记搜什么暴力点进来,读完题第一直觉DP? 还真是个\(DP\). 题目所描述的状态 ...

  8. C++手写快读详解(快速读入数字)

    众所周知,C++里是自带读入的(这不废话吗) 例如: int a; cin>>a; 这样的读入理解简单,适合初学者,但是非常慢. 再例如: int a; scanf("%d&qu ...

  9. nginx入门学习步骤(linux)

    一.nginx下载(nginx-1.9.9) http://nginx.org/download/ 二.解压到指定文件夹 tar -zxvf 解压缩文件 三.设置配置信息 在nignx解压文件夹内执行 ...

  10. Vimim是VI中最好的输入法

    Vimim是VI中最好的输入法 由于在VI中,normal和insert模式的存在,如果在insert模式下正在输入中文,在通过ESC键返回到normal模式后,系统的中文输入法会与VI的命令相冲突, ...