• Bug的类型(转)


    原文出处:http://news.cnblogs.com/n/211012/

      英文原文:Types of Bugs 

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

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

    美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(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)

    德国物理学家、量子力学的创始人、“哥本哈根学派”代表性人物维尔纳·海森堡(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。

  • 相关阅读:
    2012航拍香港
    2012航拍香港
    论玩镜头的三种境界[转自无忌fruitbear]
    论玩镜头的三种境界[转自无忌fruitbear]
    认识镜头的MTF值
    认识镜头的MTF值
    宾得十大名镜
    宾得十大名镜
    两个输入通道怎么判断通道顺序
    增加新功能和未知的修改操作
  • 原文地址:https://www.cnblogs.com/m3Lee/p/3805937.html
Copyright © 2020-2023  润新知