缺陷大扫除(Bug Bash)是一项短期的全员测试活动。在微软,许多开发团队会在里程碑(milestone)的末期执行缺陷大扫除。程序员、测试员、程序经理、内部用户、市场人员在1~3天的时间窗口中,运用各自的技能和职业背景,集中精力来搜寻软件的缺陷。通常,每位参与者会获得一个小礼品,发现缺陷数目最多的冠军会获得一份大奖。

  一般认为,缺陷大扫除的优势在于引入了“更多的眼睛”。程序员更了解程序逻辑和实现细节,有可能发现隐蔽的缺陷;测试员更擅长缺陷猜测和持续攻击,有可能发现其他测试员遗漏的缺陷;程序经理能够从业务角度考察软件,有可能发现业务流程、整体设计上的缺陷;内部用户是软件的使用者,有可能发现易用性、可达性上的缺陷。总之,参与者在技能和角色上的差异性有助于发现不同类型、不同层次的缺陷。

  如果只有测试人员参与,缺陷大扫除还有意义吗?以我的观察,测试团队定期组织所有成员执行缺陷大扫除,是一项非常好的实践,有助于团队建设(team building)和个人成长。

  在我的部门,测试团队有近20名测试员工。每个员工会负责一个子系统或独立模块的测试,这些子系统和模块会组成整个业务系统。我们大约2~3个月做一次发布(release),每次发布之前都会执行缺陷大扫除。其大致流程和要点如下:

  缺陷大扫除持续一个完整的下午(大约3~4个小时)。这是一个天然的时间窗口,让测试员可以集中精力工作。超过这个窗口,测试员很有可能分心去做其他工作。

  所有的测试员带着自己的笔记本电脑,在一个大会议室围桌而坐,一起测试。团队建设的一个手段就是团队成员协作去完成一个有挑战性的任务。缺陷大扫除就是测试团队一起工作去搜索整个业务系统的缺陷。

  测试员测试一个陌生的子系统时,他可能不了解该系统的业务目标和使用方式。这时,他可以询问负责该系统测试的同事。由于所有人都坐在一个会议室,绝大部分业务问题都可以得到立即解答。这使得测试可以顺畅地推进,也强化了相互协作的团队精神。

  测试主管(test lead)参与缺陷大扫除,他也在会议室执行测试。领导重视是团队建设的必要基础,它体现为领导亲自做那些他宣称是非常重要的事情。

  测试主管会不定期通报测试进度:已经发现了多少缺陷、目前的冠军发现了多少缺陷等。这是对测试团队士气的鼓舞,也推动了测试员之间的良性竞争。

  在“缺陷大扫除”会议结束之后,每个子系统的开发团队立即举行“缺陷分拣(triage)”会议。程序员、测试员、程序经理一起检查缺陷列表,决定哪些缺陷需要立即修复、哪些缺陷可以延迟修复、哪些缺陷不必修复。

  在一周内,测试团队举行“缺陷检讨”会议,对有教益的缺陷进行深入分析。团队识别出有代表性的缺陷,分析根本原因,枚举错误症状,总结适用的测试方法,并提出避免再犯的建议。这个会议是缺陷大扫除最重要的一环,它使得测试技巧、开发知识、有效实践可以在团队中分享并沉淀,是团队学习、个人成长的有力工具。

  对缺陷大扫除的冠亚季军给予适当奖励,奖品可以是运动装备、购物劵、书劵等小礼品。这是为了提高整个活动的趣味性,因此奖品不宜过于贵重。在我的团队,冠军奖品大约为150元,亚军奖品为100元,季军奖品为50元。

  缺陷大扫除是常规测试的有效补充。测试团队将各个子系统连成业务系统,执行端到端(end-to-end)的系统测试,能够发现个人在子系统测试中难以发现的缺陷。此外,测试员在测试不熟悉的子系统时,没有任何先入为主的“偏见”,往往能立即发现那些被”熟视无睹“的缺陷。而资深测试员还可能发现一些初学者难以察觉的隐蔽问题。

  不过,相比找到的缺陷,我认为缺陷大扫除在以下两个方面更有价值。

  团队建设。在日常工作中,测试员更多的时间在独立地工作,彼此之间的联系并不紧密。在缺陷大扫除中,测试员进行渗透式交流,互通情报,一起嘲笑那些拙劣的设计、滑稽的缺陷,甚至说一些无关的笑话以相互逗乐。全部这些“小事”都在潜移默化中逐步构建一个团队。

  团队学习。团队举行“缺陷检讨”会议,总结缺陷模式(bug pattern),完善测试策略,补充测试检查列表(check list)。这是一种积极的集体学习行为。在此过程中,测试员可以积累经验、分享技能,测试团队可以沉淀知识、凝聚士气。

测试杂感:Bug Bash的更多相关文章

  1. Alpha Version Release Of Teamwork: Appendix 1 BUG BASH

    在为期一周的发布周中,我们将app本身最后的细节完善,功能代码到位,UI不断改进和优化,团队在开始准备发布之前,对整个APP进行了一次BUG检查,每个人都部署了app在自己的android设备上进行测 ...

  2. 生活就像测试, BUG会越来越少,生活会越来越好!

    生活就像测试, BUG会越来越少,生活会越来越好!

  3. 测试对bug如何分析和定位

    如何去区分一个功能测试工程师的水平高和低? 可以从很多个方面去检查,比如测试的思路, 比如测试用例的覆盖度?,比如测试出bug是否能够定位到根因? 上面说的各个方面都很合理,那我们平常如何如更深的定位 ...

  4. 【测试方法】Web测试中bug定位基本方法

    知识总结:Web测试中bug定位基本方法 涉及知识点:测试方法 在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出 ...

  5. Bug Bash in Personal Photo Experience 1/11/2016

    In the process of our Personal Photo Experience Project, There are some bugs which hinder our forwar ...

  6. Alpha版本BUG BASH

    在本次软件开发的第一轮迭代中,我们团队遇到了很多问题.首先是和学长联系不上导致拿到项目前一版本的代码的时间延后了一个星期. 拿到代码后发现由于安装环境的问题代码无法移植.在这一阶段我们就耗费了大量的时 ...

  7. iOS之利用腾讯Bugly程序调试,测试代码bug、卡顿等情况

    1.自己先写一个 Demo 演示一下利用bugly测试崩溃的具体情况. 在ViewController里面实现崩溃代码如下:  运行后 毫无疑问程序报错了! 2.使用到第三方的框架Bugly,官方下载 ...

  8. itest(爱测试) 4.0.0 发布,开源敏捷测试管理 &BUG 跟踪管理软件

      v4.0.0 下载地址 :itest下载 itest 简介:查看简介 V4.0.0 根据用户反馈,共增加了29个更新:其中有15 个功能增强和14个BUG修复 :UI更加清爽,用例执行和用例复制粘 ...

  9. itest(爱测试) 3.3.5 发布,开源敏捷测试管理 & BUG 跟踪管理软件

    v3.3.5 下载地址 :itest下载 itest 简介:查看简介 V3.3.5 有 6个功能增强,2个BUG修复 ,详情如下所述. 用户反馈并强烈要求增强的功能实现:    1: 测试用例管理可线 ...

随机推荐

  1. ssh 客户端远程vi文本文件中文乱码(亲测)

    由于是生产环境,且非笔者控制,为了避免影响系统全局,仅对本session有效 export LANG="zh_CN.UTF-8"export LANG="zh_CN.GB ...

  2. 「C语言」int main还是void main?

    从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```. ...

  3. 【GOF23设计模式】状态模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_状态模式.UML状态图.酒店系统房间状态.线程对象状态切换 package com.test.state; public ...

  4. javascript宿主对象之window.location

    location属性是一个用来存储当前页面URL信息的对象. 下面我们通过循环来列出location对象的完整属性列表: for(var i in location){ if(typeof locat ...

  5. 任意类型转换为IntPtr

    之前,将数组.结构体等转换为IntPtr使用的是Marshal.Copy().Marshal.StructureToPtr(),但是有个问题自定义的结构体数组没法这样转化,一般网上给出的解决方法就是通 ...

  6. GitHub 基本常用知识解答

    1.Fork.Watch.Star 是什么意思? fork的意思是从别人的代码库中复制一份到你自己的代码库,与普通的复制不同,fork包含了原有库中的所有提交记录, fork后这个代码库是完全独立的, ...

  7. C语言指针的长度和类型

    本文地址:http://www.cnblogs.com/archimedes/p/point-length-type.html,转载请注明源地址. 如果考虑应用程序的兼容性和可移植性,指针的长度就是一 ...

  8. 原生JS获取各种高度宽度、浏览器窗口滚动条的位置、元素的几何尺寸名

    1)关于 pageX, clienX,offsetX,layerX pageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位 ...

  9. [Derby]数据库操作说明

    1. 创建新数据库 connect 'jdbc:derby:mydb;create=true'; ij> connect 'jdbc:derby:mydb;create=true'; ij> ...

  10. Effective Java 48 Avoid float and double if exact answers are required

    Reason The float and double types are particularly ill-suited for monetary calculations because it i ...