一听到初级Bug这个名字,很多开发工程师都会觉得很头痛,还有那个“初级Bug率”,让人随时受不了。

初级Bug这个概念,在多数缺陷跟踪工具中,是不存在的,可以说是淘宝研发部的特色。初级Bug对应Bug的一个属性:“Bug深度”,这个属性有三个选项:1很容易发现、2正常发现、3很难发现,其中“很容易发现”的Bug就是初级Bug。深度代表了发现Bug需要的成本和技术含量,初级Bug就是那些非常明显,通过简单的操作就能发现的Bug。

从初级Bug这个概念被提出,到现在大约有2年时间。最初的时候,在一次开发经理的周会上,研发部VP提出,开发工程师必须要提高代码质量,不要一提交测试,马上就被测试工程师找出一堆很低级的Bug。“低级Bug”这个概念因此诞生了,低级Bug的占比,也从此成为各个开发团队进行考核的一个重要KPI。

接下来,缺陷跟踪工具里很快添加了“Bug深度”这个属性,测试工程师在提Bug时也开始选择。一个月后,第一份低级Bug率的报告发了出来。当时这份报告引起了很大的争议,问题的焦点是:低级Bug到底是怎么认定的,怎么才算“很容易发现”,如果是测试工程师操作的步骤,那究竟是多少“步”以内呢?还有一个要命的问题是,“低级Bug”这个概念与生俱来就有一种让人不爽的感觉,简直是一种人身攻击,带有贬义的感情色彩。

为了解决大家的疑惑,我们做了很多沟通和说明,发邮件,写沉淀,可是效果并不理想,时至今日,还有人在问我,低级Bug是怎么判断的。如果一个概念无法让别人很简单的理解,那么可能这个概念本身就是存在缺陷的。另一方面,低级Bug这个概念确实很刺耳,后来我改成了初级Bug,稍微缓和了一些,听起来没那么难听了。细心的同志会注意到这个名称的转变。

随着时间推移,开发团队对于初级Bug这个概念,慢慢没那么抵触了,但是出现了一个更棘手的问题。每次的初级Bug率的报告,会按照不同的开发组进行分组统计,比如A产品线和B产品线,会比较谁的比例更高,但是这两个产品线对初级Bug的认定,可能是不一样的。这样虽然两条线的Bug质量差不多,但是其中一条线的数据会很难看,开发工程师觉得不公平。A产品线的测试工程师,很认真的选择“Bug深度”,这样初级Bug率会“偏高”,B线的测试根本不选,或者每次都选“2正常发现”,谁也不得罪。A线的开发就会对测试吐苦水:你们干嘛这么较真啊,你看B线的测试都不选,自己人何苦为难自己人呢?

在这种“劣币驱逐良币”的效应下,A线的测试工程师慢慢也妥协了。于是很多产品线的初级Bug率,都“自动”回落到正常值以下了。这里我完全没有责怪的意思,一个制度如果推行不好,首先问责的应该是制度的设计者。当然也有部分产品线的初级Bug率较高,说明Bug质量真的是出了很大的问题,能通过这个KPI识别出来,也算是起了点作用,不过大部分产品线横向比较的意义已经失去了。

这时我们再回头看看最初,研发部VP所提出的“开发要提高代码质量”的初衷。开发把代码提交测试以后,出现2类问题是最影响测试工作开展的:1、出现严重错误造成应用程序核心功能不可用;2、核心功能出现明显的错误,或者根本没实现。仔细看看这不就是“Bug严重性”里面1-Block和2-Major的定义么,是不是我们只要使用“Bug严重性”这个概念,就足够了,根本不需要初级Bug这样的新概念。

总结一下这两年在“初级Bug”上的工作,我觉得初级Bug在概念设计上是挺好的,但是在逻辑设计上存在较大的缺陷,因为始终无法准确判定“很容易发现”的具体逻辑,每个人理解都不同;而引出初级Bug的原始需求,其实和Bug严重性的概念也是很吻合的,所以建议大家根据自己的需要,选择是否使用初级Bug的度量分析。Bug严重性这种经典的Bug概念,其实还是很靠谱的。

初级Bug率,随时受不了的更多相关文章

  1. 关于BUG率的计算和它的实际意义的思考

    我的微信号是Shalayang,以下是我的二维码名片,欢迎添加. 问题1:bug率有什么作用? my opion:用处有很多,需要具体情况具体分析,不过主要作用一般是来评价工作产品的质量.如果bug率 ...

  2. 你的leader还在考核你的千行代码Bug率吗?

    管理学大师德鲁克说:你如果你无法度量它,就无法管理它.要想做有效的管理,就很难绕开度量的问题. 软件开发的过程或者技术团队的管理也存在着如何去合理的度量效率的问题.而度量是把双刃剑,度量具有极强的引导 ...

  3. Git 修复 bug 切换分支时,如何保存修改过的代码(即如何保存现场)?

    工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补.于是有了在两个分支之间游走切换的问题,最新改版的代码在分支 new 上,旧版本的代码在分支 old 上,我在 new 上开发了一半,忽 ...

  4. 程序员的踩坑经验总结(一):如何把Bug的偶现变必现

    程序员的踩过的坑也是可以分类的,很常见又很难解决的一类是偶然的现象,表现起来比较怪异. 而把一个问题Bug的偶现变成必现,是开发人员的一种能力.我认为也应该是测试人员的一种能力,但是各个公司要求不一样 ...

  5. 测试流程规范--测试准入、准出、停止标准、bug优先级定义

    一.背景 最近在推进组内流程规范专项建设,从"研发测试流程"."提测规范"."测试准入标准"."bug优先级标准".&q ...

  6. 送给使用phpstorm+thinkphp开发者的福利

    送给使用phpstorm+thinkphp开发者的福利   记得两年前的这个时候,我开始学习php.我选择了thinkphp入门,写了我的第一个简单的cms.当时我什么都不懂,但是这里的技术氛围好的, ...

  7. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

  8. 【腾讯敏捷转型No.6】如何打造称手的敏捷工具

    通常情况下,大家对于敏捷的感受就是:大家一起来开站立晨会啦!然后一大早,大家拿着早餐,围成一个圈,听一个人在讲话. 在很多公司,决定采用敏捷之后,都会从晨会开始,因为很多人觉得敏捷其它模块都很难学习, ...

  9. iOS 关于自动更新的分阶段发布(灰度发布)的相关简介

    前言:  AppStore 发布应用方式除了自动和手动,如今添加了分阶段发布(灰度发布).目的很明确,降低新版本骤然上升的bug率,不能挽回,只能发布新版本的风险.也也是针对禁止使用热修复,推出的相对 ...

随机推荐

  1. JUnit3的作用

    简要说JUnit的4大功能 1. 管理测试用例.修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试.这也就JUnit中所谓的TestSuite. 2. 定义测试代 ...

  2. 逻辑操作符“&&”的三层理解

    第一层:操作符“&&”可以对两个布尔值进行逻辑与运算,返回一个布尔值. 第二层:操作符“&&”可以对两个真假值进行逻辑与运算,并且返回一个真假值. 第三层:操作符“&a ...

  3. 《java编程思想》读书笔记(二)第五章(2)

    成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化. 对于方法的局部变量,Java会以编译时报错的形式贯彻这种保证,比如: void f() { int i; //这里编译时就会报错, ...

  4. 怎样彻底清楚Chrome缓存数据

    如下图所示: 1.鼠标放在刷新那然后点击右键 2.点击Empty Cache and Hard Reload (注意:一定要在点击F12的模式下)

  5. jd-gui报错INTERNAL ERROR 解决办法

    问题:我用dex2jar工具反编译了apk文件,但当我用jd-gui反编译前面操作获得的jar文件的时,能很完美地看到大部分类反编译后的代码,但有一部分类不能显示出来--constants类,仅仅显示 ...

  6. android development

    1. Supporting different devices 1) Supporting different screen size 主要有几点,首先是布局文件夹以及布局文件的命名 layout/m ...

  7. 基于 fuzz 技术验证移动端 app 的健壮性

    问题定义 app发布后经常容易出现各种诡异的crash, 这些crash固然可以通过各种崩溃分析服务去定位. 但是的确很影响用户体验. 在crash分类中有一类是后端接口引发的. 比如常见的引发app ...

  8. 简述jsp之EL表达式和jstl及其使用

    Jsp的指令之include指令include指令:代表的是页面的包含. 作用:可以把一些jsp的页面包含在一起,对外展示. 页面的布局,现在已经不用了,现在都用css+div进行布局.include ...

  9. Jquery 防止页面刷新

    1.禁止鼠标右键功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...

  10. IOS零碎技术整理(1)-后台运行

    这两天做关于离线通知的功能,总结了一点关于这方面的注意点:按Home键回到桌面后程序很快被挂起,系统将关闭程序的Socket监听,此时程序将不能继续执行网络请求等操作. 两种方式可以使程序继续存活一段 ...