一.前言
我发现很多程序员都在改bug,总在改bug。但是很多人没有思考过什么是修改bug的正确方法,如何高效率的修改bug,如何避免改了一个bug又被测出另外一个bug(我称为连环bug);还有就是,为什么我们的系统越做越不稳定了,bug越改越多了。
我总结了一下经验和大家分享。(本人一直在做windows平台下C++系统的工作,文章对C++更有针对性)
作为一个程序员,少不了要修改bug,甚至每天都要修改bug。也许你在维护一个老系统,也许你的专职就是修改bug或者你自己写的代码总是被测试人员测出问题,bug总是伴随在程序员的身边。
有的人对修改bug有抵触情绪,说:这么烂的系统,还不如重写了,要是我来写代码,哪里会有这些烂bug。
有的人麻木了,说:反正bug改不完,干一天算一天。
还有的人轻蔑的说:有bug,就改呗,哪有软件没bug的,立马动手改!
修改bug是一件非常能锻炼人的工作,一般不需要一个团队去修改一个具体的bug,所以修改bug更能提现一个人的综合能力。希望这个系列的文章能对那些天天和bug做伴的朋友有一些帮助。
二.bug的定义和分类
站在能改掉bug的角度上,我对bug做了如下分类:
我把bug分为三大类:
1.逻辑错误(有出现,不能重现)
只要是有出现的bug,不管是功能错误,内存错误的crash等,基本都是逻辑错误。那些不能轻易再现的错误都属于这一类。
要想正真改掉一个bug,请你重现它。不论用什么手段,重现它。否则,你不能对比验证你在之后修改的结果。不能验证修改的结果,你敢说你一定改对了吗。
这个系列的文章一个基本前提就是:bug一定能重现。
至于如何重现一个诡异的bug,我在以后其他系列的文章专门写点东西。
2.逻辑错误(有出现,能重现)
a.明确原因:
bug拿到手,就非常清晰的理解上下文逻辑,知道需要在哪里做什么样的修改;正确估计所做的修改对他相关模块、逻辑的影响(做到这点不容易)。
或者bug非常简单,比如:笔误、字符串拼写错误,界面图片对齐等。
b.不明原因:
这种bug的修改也是我在后面文章要大书特书的。
不明确bug产生的真正原因,只知道一个判断或者调用就有bug了,或者误解了bug产生的原因。看图中误改的箭头,这种情况下做的修改是工作效率低下的主要因素,连环bug也是这么诞生的。
一个不明确产生bug正真原因的修改,会造成无法预计的风险(看箭头)。
知道导致bug的表面调用,但是不理解代码上下文,对于直接修改表面调用造成的其他隐患没有正确估计的bug,也属于不明原因的bug。
一个只对bug表面调用逻辑做修改,不思考所有相关逻辑的行为,是要付出沉重代价的。
修改bug是非常简单的,但是明确一个bug的原因有时是很难的。
c.内存错误导致的逻辑错误:
内存错误是C++老生常谈的问题了:泄露,越界等。
由于A处的内存错误导致,即使本来正确的B处逻辑,也会出现异常状态。(有些新手可能不太理解这句话,有什么问题就问吧)
特别是那些检测不出来的内存错误:B处逻辑被你改穿了,A处还是有越界,等B处逻辑被你保护死了,又发现C处逻辑又坏了,多么可怕啊。严重影响工作效率。
内存错误的难点在于,如何认识到你手头的这个逻辑错误是由一个毫不相关的内存错误导致的。
后面的文章我会谈到怎么修改内存错误。
3.泄漏和越界,资源释放问题
a.能检测出内存错误:
有些泄露用IDE能检测出来,还可以借助boundschecker等工具。这些问题,在调试过程中就能体现。
b.不能检测出内存错误:
C++的数组越界。除非你用STL或者Boost库的数组来写代码。
C风格的数组的性格,我们改变不了。
一句话,C++是给明白人用的。
不明白的人拿起你的vc,建一个Dialog工程,定义一个成员int m_test[16];在构造函数写m_test[16] = 1;跑跑看吧。
三.修改bug的前提
再次强调,一定要重现bug,无论是谁反馈的,你要能亲眼见到bug。
有些特例:比如,前方做实施半夜1点电话你,说:重大事故啦,快改下什么什么的类型,不然人家数据要全没啦,你快改!!有经验的人,第一时间会利用vpn或者其他方式连到现场,亲眼看看。实在看不到现场的,除非你非常明确前方人员表达的意思;除非你对代码熟悉的能背诵了,早就预料到会有这一天,那你敢改就改吧。
2009-03-14
--------------------------------------------------(未完待续,下篇:bug的修改流程)----------------------------------------
欢迎大家访问我的博客,我会在博客中连载。
分享到:
相关推荐
本资料"Bug等级分类定义-超级细.zip"提供了一套详尽的Bug等级分类体系,帮助团队成员,尤其是初级工程师理解和处理各种类型的Bug。下面我们将深入探讨这个体系中的关键知识点。 首先,我们要理解什么是Bug。在IT...
bug 分类与优先级划分 在软件测试中, bug 分类是非常重要的一步,能够帮助测试人员更好地识别和处理 bug,从而提高测试效率和产品质量。在 CMM5 中,bug 分类被定义为致命、严重、一般和提示四种类型,分别对应着...
3.6实现与需求不符 7 3.7功能性错误 7 3.8出现调试代码 8 3.9页面格式错误 8 3.10关联性错误 8 3.11程序性能低下 8 3.12缺少容错性处理 8 3.13配置问题 8 3.14兼容性问题 8 3.15校检错误 9 3.16程序引起的安全问题 9...
测试bug定义规范是指对bug的严重程度进行分类和定义,以便更好地识别和解决问题。本规范涵盖了bug的定义、严重程度、修复时间等方面,旨在确保bug的解决符合公司的质量标准。 一、bug 严重程度定义 1. P-1:紧急...
### Bug严重程度与优先级定义详解 #### 一、Bug的严重程度等级定义 在软件开发过程中,功能测试是确保产品质量的重要环节之一。为了更好地管理软件中的错误(通常称为Bug),通常会对它们进行严重程度的分类。这有...
在软件测试过程中,BUG 级别定义标准是一份非常重要的文档,它用于指导测试人员对 BUG 的分类和评估。通过这份文档,可以确保测试团队对 BUG 的处理一致性,提高测试效率和质量。 一、主要分类 在 BUG 级别定义...
Bug 的分级:Bug 的分级是指根据 Bug 的严重性和影响范围对其进行分类。常见的 Bug 分级标准包括 Sourceforge 网站上的 1-9 级标准,在本项目中,Bug 分为 2-4 属于轻微 BUG,5 属于中等级,6-8 属于严重级,9 属于...
FindBugs的BUG分类 FindBugs是一个静态代码分析工具,旨在检测Java代码中的错误和坏的实践。根据FindBugs的分类,BUG可以分为以下几类: 一、Bad practice 坏的实践 Bad practice是指一些不好的实践,可能会导致...
1. **定义关键指标**:确定哪些类型的bug需要被统计,如按严重性分类(致命、严重、一般、轻微),或是按类型分类(功能、界面、性能等)。 2. **收集准确数据**:确保所有bug报告都准确无误地录入到系统中,避免...
### Bug严重等级分类详解 #### 一、引言 在软件开发过程中,Bug的存在是不可避免的。为了有效地管理和优先处理这些问题,通常会根据其严重程度对其进行分类。这有助于团队更高效地分配资源并确保最紧迫的问题得到...
首先,理解BUG的定义至关重要。BUG通常指的是软件中的错误、缺陷或不正常的行为,它可能导致程序崩溃、数据丢失或用户界面问题。在测试阶段发现并修复这些BUG可以显著提高软件的稳定性和可靠性。 BUG管理涉及几个...
缺陷等级等级名称等级定义P1严重缺陷应用系统崩溃或系统资源使用严重不足:1、系统停机(含软件、硬件)或非法退出,且无法通过重启恢复; 缺陷等级等级名称等级定义 P1严重缺陷应用系统崩溃或系统资源使用严重不足...
- **功能模块(Subject)**:在TD(测试管理系统)中定义的模块类别,用于分类Bug,便于管理和追踪。 - **处理意见**:开发组长/经理在审核Bug时提出的意见,如Fixable(可修复)、Duplicated(重复)、Postponed(延...
1. **BUG定义与管理流程** - BUG是指软件中导致程序错误、功能异常或性能问题的缺陷。 - BUG管理包括BUG报告、分类、优先级设定、分配、修复、验证和关闭等环节,确保问题得到及时解决。 2. **ASP基础** - ASP是...
同时,tester 需要与项目管理者和开发人员合作,确保软件缺陷的定义和分类符合项目的需求和目标。 微软公司的缺陷流程是指在软件开发项目中,tester 对所有已知 Bug 进行有效的跟踪和管理,保证产品中出现的所有...
1. **Bug的定义与分类** Bug通常指的是软件中导致程序运行错误、功能不正常或者性能下降的问题。在"BugTracking"系统中,Bug被按照严重程度、优先级和状态进行分类,如严重Bug、一般Bug、低优先级Bug以及待确认、已...
一、 BUG分类 根据BUG的不同特征,可以将其分类为六大类:功能、易用性、安全性、可靠性、性能和兼容性。 * 功能BUG:包括重复的功能、多余的功能、功能没有达到设计的要求、功能实现与设计要求不相符等。 * 易用...
该标准应包括BUG的严重程度分类、重现步骤、期望结果与实际结果的对比等内容,以便于开发人员准确理解和定位问题。 ##### 2. 建立高效的BUG沟通渠道 高效的沟通机制对于BUG管理至关重要。团队成员之间应当建立起...
- **作用**:明确Bug所属的产品,便于分类管理。 - **示例**:“X公司CRM系统”。 ##### 4. 功能模块名 - **定义**:指出Bug发生在软件中的具体模块或子系统。 - **作用**:帮助定位问题发生的区域,提高修复效率。...