bug的处理流程

 又属于一篇普及文,希望自己在被各种技术吸引的同时,能时常来整理和总结软件测试最基本的知识。

  从刚工作时接触的第一个缺陷管理工具禅道,到redmine、JIRA、bugzilla ,再到现在的QC,当然还有其它种的开源的或商业的缺陷管理工具,它们的本质是一样的,就是来管理缺陷的生命周期。

  其实,你理解任意的一款工具,其它的工具也一定能无师自通。这不谈某款工具,单把它本质的一些东西抽离出来与大家分享。

 

Bug的属性                                                     

 

Bug重现环境

这个应该是我们重现bug的一个前提,如果没有这个前提,我们可能会无法重现问题,或者跟本就无从下手。

操作系统

  这个是一般软件运行的一大前提,基本上所有的软件都依赖于操作系统之上的,对于一个软件来说,要想在某个操作系统上运行,必须要对这个操作系统支持,这就需要有真对性的设计与开发。对于不同的操作系统,其可能存在差异(如:win xp 与 win 7)或本质的区别(如 win 7 与 CentOS linux ),所以,操作系统环境是重现问题的一个重要前提。

浏览器

  对于B/S系统,或面向大众的互联网产品(网站,邮箱等),浏览器的兼容性也是必须测试的一个重点,对于现在的浏览器市场,各式的浏览器都有其用户群,要想使产品大众化,必须考虑这些产品的兼容性问题。

  不同的浏览器之间(IE、 firefox、chrome、opera 等),甚至同一系列不同版本(ie6/ie7/ie8/ie9等)都可能存在兼容性问题,所以,对于这类应用,浏览器环境重现bug前提条件之一。

 

其它(这个“其它”非常重要)

  对于不同的系统发现重现问题,都会有其特定的前提,拿我测试的邮箱来说,必须要描述其是在测试线还是现网环境,而且还要附带一重现问题的帐号等。

对于c/s软件,可能还要考虑与其它常用软的兼容等,例如,是在安装的某款软件后,对本软件的安装和使用造成影响。这些都是重现问题的必须描述的环境。

 

问题类型

  根据JIRA的管理系统的划分,bug 只是问题的一种,它可以用于跟踪多种不同类型的问题(其实,他只是将bug做为一子类而已)。

  JIRA系统缺省提供的问题类型(大部分的系统都可以自定义类型的,这样就增加了灵活性。)

  • Bug : 测试过程、维护过程发现影响系统运行的缺陷。(这就是一般测试人员所提交的bug)
  • New Feature :  对系统提出的新功能。(单个的小需求可以,如果大的话,就相当于一个需求,放到这里是不合理的。)
  • Task : 需要完成的一任务。(开发或测试任务指派。)
  • Improvement : 对现有系统功能的改进。(一般产品经理或产品体验师做的事)

  当然,不同的公司,他们的人员定位与职责是不太相同的,按照上面的分类,JIRA就不是简单的缺陷管理系统了,它涵盖一项目(或产品)所需要处理的任务、需求与缺陷。

 

Bug 类型

  这里缩小范围,单指我们测试人员在测试过程中发现的缺
陷,发现产品缺陷其实就是测试人员工作的主要目的。当然,你要确定一个问题的类型,也需要对项目(或产品)有比较深的理解。是代码缺陷还是设计缺陷有时候
就不太容易区分,当然,这个划分,对于开发定位问题影响很小,但对于问题类型的统计就比较重要了。

下面看一些常见的分类:

划分方式一:

  代码错误

  设计缺陷

  界面优化

  配置相关

  安装部署

  性能问题

  标准规范

  测试代码

  其它

划分方式二:

  功能类(function)

  性能类(performance)

  界面类(UI)

  易用性类(usability)

  兼容性类(compatibility)

  其它(else)

  这个分类当然是可以自定义的,具我接触的缺陷管理都是可以自定义的,既然是对问题的管理,那么你当然可以拿来做特定环境下的系统来使用,或我就想用这个系统来指派任务,那么我的自定义类型为前端任务、后端任务、测试任务、配置部署...

 

缺陷等级

  缺陷等级,这个划分也比较灵活,有分三级或四级,也有分五级的。

致命

  一招毙命的缺陷,使你的系统无法运行,有造成数据泄漏的安全性问题。

严重

  可以引起易于纠正的异常情况、可能引起易于修复的故障或对产品外观难以接受的缺陷。

一般

  指不影响产品的运转和运行、不会成为故障起因,但对产品外观和下道工序影响较大的缺陷 

轻微

  轻微缺陷是指对产品外观和下道工序可能会有轻微影响的缺陷 

建议

  增加用户使用体验的建议性问题。(一般情况下,建议也为做为缺陷的一种。这个跟系统的类型与需求有关)

 

缺陷优先级(priority)

  当问题处理人员在面对许多问题需要处理进,就需要问题进行优先级排序。我们做事情的安排,操作系统有处理进程等都在使用着优先级。

优先级的划分:

低——>中——>高——>紧急

延迟处理——>正常排队——>优先处理——>紧急处理

  Bug 的严重程度和优先级是含义不同但相互联系密切的两个概念,它们从不同的侧面描述了软件缺陷对软件质量和最终用户的影响程序和处理方式。

  一般地,严重程序高的软件缺陷具有较高的优先级。严重程度高说明缺陷对软件造成的危害性大,需要优先处理,而来严重程序低的缺陷可能只是软件不太尽善尽美,可以稍后处理。

严重程度高优先级不一定高:

  如果某个严重的软件缺陷只在非常极端的条件下产生,则没有必要马上处理。

  如果某一个软件缺陷,需要重新修改软件的整体架构,可能会产生更多的潜在缺陷,而且软件由于市场的压力必须尽快发布,此时即使缺陷的严重性很高,是否需要修正,需要全盘考虑。

严重程度优先级不一定低

  如果是软件名称或公司名称的拼写错误,虽然说其属于界面错误,严重程度不高,但其关系到软件和公司的市场开解,必须尽快修正。

 

 

缺陷状态

  对于一个问题,其处理过程是一个周期,周期的不同阶段,其所处的状态也是不一样的。不同状态所对应的处理人也是不一样的。

打开 : 表示问题被提交等待有人处理。

重新指派 : 问题被重新指派给某人处理。 

处理 : 问题在处理中,尚未完成。

固定 : 确认此问题存在,但暂时不进行处理。

回归 : 对已经修复的问题进行回归确认。Reopened :

关闭 : 问题的最后一个状态。 

 

 

Bug处理流程                                                           

 

下面通过一个比较完整的bug的处理流程图,更深刻的理解bug的状态以一个bug的生命周期。

 

提交(打开)缺陷

  在提交一个缺陷的缺陷,首先尽量描述这个缺陷的属性。Bug重现环境,bug类型,bug等级,bug的优先级以及详细的重现步骤,结果与期望等。

  当然,我们在提交一个问题之前首先应该保证,这个缺陷是没有被提过的,以免造成重复缺陷单。

  如果是回归不通过的缺陷,其状态又会变为打开状态。

 

 

分配(转交)缺陷

  这一步不是必须的,跟项目模式有关,有些公司测试部门与开发部门独立,那么测试人员就不确定自己测试的模块是由哪位开发人员负责的,在这种情况下,测试人员统一把问题指派给项目组长或经理,由项目组长(或经理)对问题进行确认后再次分配给相应的开发人员。

  有些测试人员是穿插到不同研发团队中的,所以对不同的开人发员负责的开发模块非常清楚,这个时候就可以将问题直接指派给相应的开发人员。

  也有一种情况,本来此问题应该由A开发人员负责,但由于A开发人员的调离或辞职,些问题为转交给其它人员处理。“分配”强调是上级对下级;“转交”强调的是平级之间。

 

确认缺陷

  当开发人员接到一个缺陷时,首先是对其进行分析与重现,如果对其进行分析发现不是缺陷(可能由于测试人员不了解需求)或无法对此问题进行重现,那么就需要将此问题反回给测试人员,并注明原因。如果确认为缺陷则需要对其进行处理。

 

推迟处理

  在处理问题之后,还需要进行一次判断,是否需要推迟处理,有些需求已经确认了是问题,由于其可能在极端情况下才会出现,或需要对系统架构进行改动,或其优先级非常低,所以暂时不需要对此问题进行处理(或到下个版本进再进行修复)。

 

固定

  对于推迟处理的问题可以暂时进行固定(“固定”为QC中的叫法。)一般固定的问题需要经过项目经理与测试经理协商后才能固定。

 

处理缺陷

  开发人员在确认完一个问题需要处理时,那么就对其进行处理工作。(例如,redmine 是支持处理人时时更新问题处理进度的,如 已处理30% ,已处理80% 等,当然,对于短时间内可以修复的问题就没必要时时的去更新处理进度。)

 

回归缺陷

  回归缺陷对于测试人员来说是非常重要的工作,其有三个入口两个出口。

  确认非缺陷问题:对于提交的一个缺陷,开人员处理为非问题或无法重现,然后直接转交给测试人员回归。测试人员再次确认,如果真如开发人员所说,则将问题关闭。如果非开发人员所说,是由于问题描述模糊或其它原因喂重现问题,则再次注明原因转给开发人员。

  确认修复问题:对开发人员修复的问题再次进行确认,确认能过,则关闭问题。确认不通过,将问题再次打开并转给开发人员。

  确认固定问题:有计划的对固定问题进行确认,有些固定问题随着时间的推移,版本的更新或已经不存在了,对这类问题应该及时关闭。有些固定问题依然存在且变得紧急,对于这类问题应该及时打开交给开发人员处理。

 

关闭缺陷

  对于已经修复的缺陷进行关闭,这也是一个缺陷的最后一个状态。

 

 



 

注1:  文中提到了产品与项目,好多人分不清项目与产品,各自有各自的理解。我个人从用户群上来划分。如果面向的是特定客户的需求,那么称其为项目,如某医院的医疗系统,某公司的管理系统。面向大众用户且长期运营的需求,称为产品,如,某网站,某网络游戏。

  如果小A让我给他做一个网站呢?对于我来说,小A是我的客户,这个网站对我来说就是一个项目,对于小A来说,他的网站是面向大众用户的,那么对于小A来说,网站就是自己的产品。

  富士康带工苹果手机是一样的道理,富士康接到苹果的订单,那么对富士康来说是个项目,完成项目,拿到钱就算项目结束。苹果手机对苹果公司来说是一个产品,它长期持有这个产品的所有权,并且不段的更新自己的产品。

 

注2:  本文中用到了 bug、缺陷、问题等三个词语,用词比较模糊,本文中表示为一个事物。

 

时间: 2025-01-23 21:27:55

bug的处理流程的相关文章

软件测试过程中对bug的处理流程

又属于一篇普及文,希望自己在被各种技术吸引的同时,能时常来整理和总结软件测试最基本的知识. 从刚工作时接触的第一个缺陷管理工具禅道,到redmine.JIRA.bugzilla ,再到现在的QC,当然还有其它种的开源的或商业的缺陷管理工具,它们的本质是一样的,就是来管理缺陷的生命周期. 其实,你理解任意的一款工具,其它的工具也一定能无师自通.这不谈某款工具,单把它本质的一些东西抽离出来与大家分享. Bug的属性 Bug重现环境 这个应该是我们重现bug的一个前提,如果没有这个前提,我们可能会无法

软件测试中的BUG分析定位概述(QA如何分析定位BUG)

你是否遇到这样的场景? QA发现问题后找到DEV说: 不好了,你的程序出问题了! DEV(追查半小时之后): 唉,是你们测试环境配置的问题 唉,是你们数据不一致 唉,是你们**程序版本不对 唉,是**产品线的问题 当时的日志呢? 当时cpu有异常么? 可以复现么? 这里就应该是这样啊! 你是否期待这样的场景? QA发现问题后,经分析判断,胸有成竹的找到DEV说: 你的程序出bug了,初步断定是XX类的XX判断分支有问题,应该把某某的判断一改就好了!--==定位精准== 你的程序出bug了,过去某

一个BUG的发现、定位和解决

前言 在iOS 11发布之后,出现了一系列适配相关的问题,UIScrollView在pagingEnabled=YES时滑动手势不灵敏,UITableView的滑动删除功能变动,UIImagePickerViewController的取消按钮点击区域变小等,本文介绍其中一个UIAlertView问题,分享其发现.定位和解决. 正文 1.问题产生 问题的最初,是iOS 11正式版发布后不久,测试的同学提了一个iOS 11相关的BUG,表现是:在直播间内发送聊天信息,如果被禁言,会弹出"被禁言&qu

(翻译)编写优秀Bug报告的艺术及案例分析

  前言 在99年的Quality week上的一次演讲中,微软的一个测试经理,Roger Sherman指出了由于"不可重现"导致bug关闭的主要原因.这是一个非常可惜的情况,因为这样的bug report浪费了紧张的开发计划中的宝贵时间,增加了对产品质量完全是无关紧要的事情,同时导致了在开发人员和测试之间的挫败感和差的感觉.有时,bug report是由于短暂的或随机的事件,测试和开发之间不一致的工具和配置,或者在测试的环境下对正确的行为的模糊定义而产生的,但是许多的由于不可重现而

AOSP和Chromium的Android WebViewTest

AOSP的在$android4.2/frameworks/base/tests/WebViewTests/目录下,可用eclipse导入工程. 就几个文件.最下面的是Activity,没啥特别,就是在LinearLayout里面放了WebView. JavaBridgeTestBase是所有TestCase的基类,继承了ActivityInstrumentationTestCase2,也就是此测试需要命令行启动,使用Anrdoid的Instrument做测试. public class Java

测试之道--阿里巴巴八年测试专家倾情奉献

一.  前言 我从事测试工作将近八年了,从起初的不懂测试,怀疑测试,到相信测试,再到坚定测试,其中经历的辛酸.煎熬无法言表.在从事测试工作的这八年里,有人质疑,也有人追捧,唇枪舌剑,没完没了,貌似测试永远都是个站在舆论风口浪尖的角色.本文乃在下之精血所作,是我对测试的高度概括,旨在帮助大家了解测试,新人可以更好地从事测试工作,老人可以进行测试探讨,交流思想.为了尽量让更多的人理解测试,本文重在述道,少说测试之术,相信看完之后,各位自有论断,功过是非留于各位看官说. 二.  测试的万能模型 为什么

从单元测试到基于每日构造的自动测试

1.单元测试 XXXX作为一个新项目,和其他所有项目一样,在开发工作进行之初就在考虑如何保证代码开发的质量.答案很容易找到:充分的单元测试.但是以前真正做得好得项目却不多. 经过分析,总结了一下做好单元测试工作的四个要素: ――思想上的重视 ――计划上保证 ――测试手段保证 ――测试效果的可验证 1.1 思想上重视 从以往的开发过程总结了一些教训: ――开发人员模块在交付联调前,测试不充分,导致联调周期较长 ――代码进入维护期后,修改代码往往引起不可预期的错误.导致开发人员比较害怕在相对稳定的代

程序的bug排查流程总结

只要是人写的程序,不可能没有bug,那么解决bug,将伴随程序员的一生: Ø 只会写代码,但不会排查bug的程序员,只能算是业余程序员 Ø 能解决一般bug的,只能算是初级程序员 Ø 代码写的质量较好,还能查找较难bug的,中级程序员 Ø 代码写的质量好,注重性能,不但能排查疑难bug的,还能解决疑难bug的,高级程序员 Ø 代码写的质量好,注重性能,稳定性,可靠性,架构设计合理,能解决绝大部分疑难问题,属于资深程序员 以上的话引自某个论坛网站,不一定说的绝对正确,但基本是有道理的.   面对出

软件测试的Bug缺陷管理流程

流程说明 1.测试人员填写bug并提交给开发组长,Bug的状态为New: 2.开发组长次日工作前对bug确认是否有效.有效的bug,状态变化为open,并分配给开发人员:bug无效或者延期修改的,将bug状态变化为Rejected,同时也在comment中注明原因. 3.开发人员上班的第一件事情是查看自己有几个bug需要修改. 4.开发人员修改bug,修改完成并进行单元测试后,将bug的状态变为fixed,在comment中说明修改方法: 5.测试人员每天查看自己提交的bug的状态变化,应该成为