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

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

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

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

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

•  严重程度低优先级不一定低

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

缺陷状态

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

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

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

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

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

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

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

一个Bug的生命周期

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

提交(打开)缺陷

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

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

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

分配(转交)缺陷

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

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

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

确认缺陷

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

推迟处理

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

固定

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

处理缺陷

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

回归缺陷

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

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

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

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

关闭缺陷

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

最后,“状态”和“指派人”的对应关系如果更加细化,对项目而言是有益的:

已关闭— —>指派给修复这个bug的开发工程师

无需解决,不是bug— —>指派给提交这个Bug 的测试人员

无需解决,迭代待解决— —> 指派给项目的产品经理

更多精彩详见 “http://www.testclass.net/software_test/

(四)一个bug的生命周期的更多相关文章

  1. 软件测试中Bug的生命周期以及Bug的严重等级

    软件测试中Bug的生命周期以及Bug的严重等级 我猜你们都会,但能说专业且全面不? 1.首先当测试人员接到一个项目或产品准备测试的时候,测试人员会根据测试用例一步步的来执行用例进行简单的功能测试.当测 ...

  2. BUG 的生命周期

    BUG 的生命周期 Bug-->软件程序的漏洞或缺陷 Bug 的类型:代码错误.设计缺陷.界面优化.性能问题.配置相关.安装部署.安全相关.标准规划.测试脚本....其他(功能类.界面类.性能类 ...

  3. [oldboy-django][2深入django]django一个请求的生命周期 + WSGI + 中间件

    1 WSGI # WSGI(是一套协议,很多东西比如wsgiref, uwsgiref遵循这一套协议) - django系统本质 别人的socket(wsgiref或者uwsgiref) + djan ...

  4. [转]ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

    在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll ...

  5. 基础总结篇之中的一个:Activity生命周期

    子曰:溫故而知新,能够為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就全然掌握,那基本不大可能,所以我们须要常常回过头再细致研读几遍,以领悟到作者的思想精 ...

  6. android学习四(Activity的生命周期)

    要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

    为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...

  8. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

    计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...

  9. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

    一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...

随机推荐

  1. java中保留两位小数的方法

    1.BigDecimal的setScale // RoundingMode 舍入模式: // 1.UP/DOWN ->基准为数字0: // 2.CEILING/FLOOR ->基准为正负无 ...

  2. waeshall算法原理和实现

    传递闭包Warshall方法简要介绍 ① 在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系.R的传递闭包在数字图像处理的图像和视觉基础.图的连通性描述等方面都是基本概念.一般用B表示定义 ...

  3. fork系统调用关于如何让子进程先运行{wait(),waitpid(),sleep()}

    在父进程里面调用wait()和waitpid()可以确保子进程先运行,因为当子进程运行完后会变成僵尸进程,此时会发送一个信号给父进程,父进程接受到信号才会运行. 有人或许会问如果在父进程调用wait之 ...

  4. mysql中数据类型DECIMAL(M,D)的说明

    本文转载自Boblim的文章http://www.cnblogs.com/fnlingnzb-learner/p/8108119.html 在MySQL数据类型中,例如INT,FLOAT,DOUBLE ...

  5. <连接器和加载器>——概述连接器和加载器

    0.涉及术语 (1)地址绑定 将抽象的符号与更抽象的符号绑定,如 sqrt 符号与地址 0x0020010绑定. (2)符号解析 程序相互作用通过符号进行,如主程序调用库函数sqrt,连接器通过表明分 ...

  6. linux文件的3个时间和7种文件类型

    linux文件的三个时间:  atime: access time --最近访问时间. ctime: change time --最近改变时间. mtime:modify time --最近修改时间. ...

  7. 阿里巴巴已offer:Java实习五面详细面经(附解答)

    1.岗位 Java后台开发实习生 2.时间表 2020/3/18 提交简历 & 测评 2020/3/23 笔试 2020/3/26 简历面 2020/4/11 技术一面 2020/4/14 技 ...

  8. Linux(CentOS6.8)配置Redis

    1.Redis简介 Redis:REmote DIctionary Server(远程字典服务器). Redis是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分 ...

  9. 为什么Redis是单线程?

    转载链接:https://cloud.tencent.com/developer/article/1120615 1)以前一直有个误区,以为:高性能服务器 一定是多线程来实现的 原因很简单因为误区二导 ...

  10. JVM中的常量池详解

    在Java的内存分配中,总共3种常量池: 转发链接:https://blog.csdn.net/zm13007310400/article/details/77534349 1.字符串常量池(Stri ...