美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的论文“Why do computers stop and what can be done about it?”中首次提出了程序bug的类型,比如玻尔bug(Bohrbug)、 海森堡bug(Heisenbugs)等用著名科学家名称命名的bug。后来又出现了更多的bug类型。现在,让我们来看看它们都是什么bug类型。 玻尔bug(Bohrbug)大多数我们遇到的bug都是可以重现的,这些bug被统称为玻尔bug(Bohrbug)。它是用丹麦著名物理学家、诺贝尔获得者尼尔斯·波尔的名字命名的。波尔首先在1913年提出了一个简单、易于理解的原子模型概念。在波尔的模型中,原子中的电子的路径和动量是可预知的。同样的道理,玻尔bug(Bohrbug)也是可预知的。如果让软件在相同的条件下运行,你可以让bug再次显现。例如,如果程序遇到空指针异常会崩溃,那么,设定相同的输入条件,你可以轻易的让它们重新。
海森堡bug(Heisenbug)所有有阅历的程序员都遇到过这种情况:有个bug让程序崩溃了,但当程序重启后,这个bug消失了。不论你用多少的时间和精力来试图让bug重现,bug就是人间蒸发了。这样的bug被称为海森堡bug(Heisenbug),它是用德国物理学家、量子力学的创始人、“哥本哈根学派”代表性人物维尔纳·海森堡(Werner Heisenber)的名字命名,隐射其著名的“测不准原理”(又称“海森堡不确定性原理”)。根据他的这个理论,在某一个给定的时间点,一个电子所处的位置是无法确定的,也无法跟踪它的轨迹。当你去debug、探测、隔离一个bug时,你的这些动作会导致bug改变它们的行为表现,这些bug就叫做海森堡bug(Heisenbugs)。这种事情是有可能的,比如,如果你使用未初始化的变量,这会导致一个bug出现。然而,当你试图debug这个程序时,程序却没有任何异常,因为很多的debug工具会自动初始化变量为0,所以这些bug将不会再现。
曼德博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。 [英文原文:Types of Bugs ] |
- 浏览: 667021 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (608)
- Java (125)
- Struts (16)
- Spring (19)
- iBatis (11)
- Hibernate (14)
- Oracle (33)
- Mysql (22)
- JBoss (4)
- JavaScript (46)
- Ajax (9)
- jQuery (5)
- web (25)
- Html (14)
- Exception (26)
- Linux (106)
- Vim (11)
- Python (12)
- ComputerTech (25)
- 文章 (50)
- Maven (20)
- FreeMarker (5)
- Json (0)
- Tomcat (6)
- ActiveMQ (2)
- Test (1)
- Git (5)
- Shell (1)
- 《Java并发编程实践》 (2)
- 产品设计 (1)
- xxx (0)
- diamond (1)
- dubbo (1)
- Raspbian (1)
- IDE (3)
- 并发编程 (1)
最新评论
-
mikzhang:
抱歉,写这篇文章时,博主开发的程序只面对IE浏览器,故没考虑其 ...
JS 中改变confirm默认按钮提示“确定""取消" -
poterliu:
测试过了,发现execScript方法只支持IE浏览器。目前已 ...
JS 中改变confirm默认按钮提示“确定""取消"
发表评论
-
<<将博客搬至CSDN>>
2017-04-06 14:03 435博客搬家 -
编程经验之谈
2016-01-20 18:17 0以下编码经验来自平时的程序编写和维护过程。 * ... -
Java互联网工程师要具备哪些技能
2016-01-20 17:43 01.Core Java,就是Java基础 ... -
程序员应该养成的良好习惯
2016-01-07 16:07 4601、总结自己一天任务的完成情况最好的方式是写工作日志,把自己今 ... -
CP vs SP
2015-11-10 17:46 5061.什么是SP? SP是英 ... -
关于文件放在ftp还是放在数据库
2015-11-10 17:08 0关于文件放在ftp还是放在数据库 服务器的文件夹: ... -
是什么造就了一个优秀的程序员
2014-12-03 14:04 524是什么造就了一个优秀的程序员?首先问问你自己吧,这会是个 ... -
Web开发在2015年及未来的发展趋势
2014-12-01 16:38 0via: http://www.iteye.com/news ... -
程序员什么时候该辞职
2014-12-01 16:15 643via: http://linux.cn/article-3 ... -
关于开源文档:程序员可能忽略的十件事
2014-11-25 15:26 555via: http://code.csdn.net/news ... -
导致程序员在工作中丢失激情的5件事
2014-11-25 15:22 714via: http://code.csdn.net/news ... -
给技术高管日常管理的五条小建议
2014-11-25 15:07 389via: http://www.iteye.com/news ... -
学好计算机英语
2014-11-13 21:51 0via: http://www.cnblogs.com/q ... -
项目管理缩略语英中注释表
2014-11-13 21:49 0via: http://www.cnblogs.com/qq ... -
浅析软件项目管理中十个误区
2014-11-13 21:47 0via: http://www.cnblogs.com/qq ... -
25个妙招儿,帮你每天挤出一小时
2014-11-13 21:43 025个妙招儿,帮你每天 ... -
项目管理风险控制及注意事项
2014-11-13 21:40 0项目管理风险控制及注意事项 作为项目经理要动态的去全局 ... -
测试驱动开发全功略
2014-11-13 21:27 541via: http://www.blogjava.net/b ... -
一些值得学习和补充的建议for程序员
2014-11-10 18:59 551via:http://linux.cn/article- ... -
程序员新人怎样在复杂代码中找bug
2014-11-07 09:39 695via: http://wmcxy.iteye.com/bl ...
相关推荐
解释测试bug分类的技术文档,可以帮助bug的初学者
3. **选择合适的图表类型**:根据需要传达的信息选择最合适的图表类型,比如用柱状图展示不同阶段的bug数量,用饼图显示各类bug的比例。 4. **定期更新图表**:随着测试活动的进行,持续更新图表,反映最新的bug状态...
3. **按BUG类型统计**:BUG类型包括UI界面设计、UE用户体验与易用性、FC功能问题、CK操作提示信息问题和IF接口问题。这有助于识别问题的根源,例如,如果大部分BUG都集中在UI上,那么可能需要对界面设计进行优化。 ...
* 在对 Bug 类型及严重程度进行描述时,规定程度等级分为四种,1 为最严重错误,4 为最轻微错误。 4.2 研发人员修复 Bug * 研发人员收到测试人员提交的 Bug 后,要及时对 Bug 进行处理。 * 处理后的 Bug 状态变更...
这里我们将深入探讨软件测试的重要性和常见的Bug类型。 首先,软件测试是为了发现并修复程序中的错误、遗漏、缺陷或不一致性,以提高软件的性能和用户体验。它涵盖了单元测试、集成测试、系统测试和验收测试等多个...
例如,高频率出现的Bug类型可能反映出设计或开发过程中的共性问题,需要针对性地改进。 对于BugZilla这样的Bug跟踪系统,它是Bug管理的利器。BugZilla提供了一个web界面,允许用户提交、更新和查询Bug状态。用户...
- **逻辑错误:** 程序运行无异常,但结果不符合预期,这是最常见的Bug类型。 - **性能问题:** 虽然程序能正常运行,但效率低下,如内存泄漏、CPU占用过高。 - **兼容性问题:** 程序在某些特定环境或设备上无法...
常见的Bug类型包括功能未实现、系统崩溃、不兼容等问题。RAID/BMS工具提供了完整的Bug数据库,强大的查询功能与报表能力,帮助团队有效跟踪项目状态。Bug记录包含了状态、负责人、问题种类等关键信息,以及缺陷的...
- **bug类型**:如界面错误、逻辑错误、性能问题等,分类有助于理解和处理。 - **严重程度**:如致命、严重、一般、轻微,用于优先级排序。 - **优先级**:根据业务影响和修复紧迫性来设定,决定修复顺序。 - **bug...
BugFree3.0版将浏览器、如何发现、Bug 类型等字段全部从基本字段移除,基本字段只保留标题、模块路径、指派给、抄送给、复现步骤等常用字段。其它都通过自定义字段来扩展。可以针对自定义字段设定可编辑阶段(新建、...
SonarQube是一款强大的静态代码分析工具,用于检测软件中的bug、漏洞和异味(Code Smell)。通过分析项目源代码,SonarQube能够帮助开发者找出潜在的问题,并提供修复建议,以提高代码质量和可维护性。以下是...
- **其他选项字段**:包括Bug类型、发现方式、操作系统、浏览器等,这些字段可通过编辑配置文件进行自定义。 #### 四、查询结果 - **设置查询条件**:用户可以根据需要设定查询条件,以便更精准地查找特定的Bug...
下面将详细讨论在游戏开发中可能遇到的bug类型以及修复它们的方法。 贪吃蛇游戏的基本机制是玩家控制一条蛇在有限的区域内移动,吃到食物后会增长,碰到边界或自己的身体则游戏结束。在实现这个游戏的过程中,可能...
首先,我们来探讨Java中的BUG类型。常见的错误大致可以分为语法错误、运行时错误和逻辑错误。语法错误,也称为编译错误,是程序员在编写代码时违反了Java语法规则,这些错误通常在编译阶段就能被检测出来。运行时...
6. **统计分析**:BugFree提供了丰富的统计图表,如bug类型分布、解决速度等,帮助管理层评估团队的工作效率,找出优化空间。 7. **版本控制**:系统可以关联代码版本控制系统,如Git或SVN,以便在修复bug后,直接...
以下是一些常见的易被忽视的bug类型,以及如何避免这些问题: 1. **安装缺陷**:在软件发布前的安装包打包阶段,测试人员可能过于专注于功能测试,而忽略了安装过程中的问题。这可能导致注册表导入错误、控件未注册...
1. **标题**: 应包括**功能模块**、**测试版本**和**bug类型**,标题应简明扼要。 2. **参数备注**:包括提单人、提单日期、提单版本、类型(如代码错误、设计缺陷)、严重程度(1到4,1为致命)、项目、系统及...
4. 数据可视化:系统提供了丰富的数据统计和分析功能,如Bug数量统计、Bug类型分布、Bug解决时长等,帮助团队更好地了解项目进展和问题所在。 5. 跨平台支持:系统采用Web方式访问,支持多种浏览器,方便团队成员...
本书的内容旨在帮助开发者了解和掌握在C++编程中常见的Bug类型,并给出排查和解决这些Bug的方法。 从描述中可以提取出几个关键信息点,即本书是一本个人收集的电子书,用于学习和教育目的,不应用于商业用途。此外...