Bug的类型

美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(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://www.itxxz.com/a/zixun/2014/0623/104.html

Bug的类型

时间: 2024-08-24 14:47:28

Bug的类型的相关文章

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

昨天南京到客户服务数据库的优化调整,其中新上线,经过审查alert.log当日志现在是在过去一段时间内取得,每隔几个小时的时间滞后,班会报似的内容: Thu Aug 21 09:01:26 2014 WARNING: Heavy swapping observed on system in last 5 mins. pct of memory swapped in [8.42%] pct of memory swapped out [2.16%]. Please make sure there

AIX6.1/11.2.0.3数据库上关于SWAP的一个BUG

昨天去南京某客户那里调优新上线的业务数据库,在查看alert.log日志时发现在过去的一段时间里,每过几个小时或间隔一段时间,就会报类似以下的内容: Thu Aug 21 09:01:26 2014 WARNING: Heavy swapping observed on system in last 5 mins. pct of memory swapped in [8.42%] pct of memory swapped out [2.16%]. Please make sure there

itest(爱测试) 4.4.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

itest 简介 test 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试工作,也有测试环境管理,还有很常用的测试度量:对于发版频繁,需求常变,itest还可导出用例,线下修改.执行,新增后再导入(同步)到线上:且可根据测试策略来设置测试流程,并可实时调整:在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,具体介绍详见下面开源中国连接:itest 入围2019 最受欢迎国产开源软件

每周工作进度及工作量统计

项目:寻找各组项目bug 项目类型:团队项目 项目日期:2016.11.21 类别C 内容C 开始时间S 结束时间t 间隔时间I 净时间T 分析 寻找各组项目bug 14:00 16:00 0 120 项目:寻找各组项目bug 项目类型:团队项目 项目日期:2016.11.22 类别C 内容C 开始时间S 结束时间t 间隔时间I 净时间T 分析 寻找各组项目bug 20:00 22:00 0 120 代码行 1910+0=1910 随笔字数 4592+320=4912 知识点 winform编程

第七课 GDB调试 (下)

1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前所说的没有任何一个程序员敢打包票自己写的代码是没任何bug,bug总会有意无意的出现在我们眼前,当程序运行结果于我们预期结果不一样的时候这时候我们就应该调试,总的来说bug分为:语法错误.逻辑错误.硬件异常: 3原理: 3.1 语法错误:一般情况下出现在编译的时候会有提示编译错误这时候我们就可以马上

如何管理好测试团队

如何管理好测试团队 1.作为一个团队的管理者,最起码的是要自己懂自己产品或项目的业务.这一点很重要,第一这样有助自己分配工作给团队中的成员,要不然自己都搞不清楚业务难度和业量就分配工作给team member是件很让人难以接受的事情.第二,有助于自己和其它team或department的合作和沟通,不至于其它team提出的问题,自己还不清楚就答应或否定要做. 2.作为一个管理者,要懂更多的技术,至少是了解更多的测试技术,要了解其工作原理,这样有助于自己帮助团队成员research或者说技术的应用

测试缺陷分析务实篇

测试缺陷分析务实篇 作者:罗耀秋 来源:网络 摘要: 测试活动作为IT项目和产品开发一个重要的环节,通过发现产品或组件的缺陷,并反馈给开发组修复验证这些缺陷,从而在一定程度上保证了外发产品的质量.对这些测试活动发现的缺陷进行深入的分析,可以有助于我们进行质量预测.进行过程改进.量化的衡量产品质量. 关键词: 测试分析.过程改进.质量预测.过程能力.缺陷 正文: 项目研发过程中,我们通过单元测试.集成测试.系统测试发现了大量的缺陷.我们把这些Bug输入到Excel或者其他测试管理系统中,跟踪其解决

上周热点回顾(6.2-6.8)

热点随笔: · 为生活可以忍,侮辱技术行不行?(沈逸)· 程序员跳槽注意事项(麒麟子(Alex))· 中国的程序员们是否要声援微软小冰?(徐少侠)· 让 asp.net 在 mac 上飞(linli8)· 一次由注释引发的"血案"(Antineutrino)· WWDC2014:留给微软的时间不多了!(令狐葱同学)· 高大上!手把手教你在京东云擎上部署个人应用!(Chandler Qian)· 程序员的无奈(三):对不起,我不是重装电脑的(螃蟹(itxxz))· Swift学习笔记(一

昨天太晚了,今天教你用Debug模式来分析程序执行顺序

还是以昨天的XML文件解析来做栗子,希望通过这个好吃的栗子可以举一反三 学会用debug来看源码和找Bug 事件类型主要有五种START_DOCUMENT:xml头的事件类型    = 0END_DOCUMENT:xml尾的事件类型       =1START_TAG:开始节点的事件类型  = 2 END_TAG:结束节点的事件类型   = 3TEXT:文本节点的事件类型 = 4 我们的XML文件: <?xml version="1.0" encoding="utf-8