用户往往对产品中各种各样的bug抱怨不已,而测试人员往往认为自己的职责就是揪出这些所有的bug并把它们全都修复。然而,这是一个误区。微软卓越测试工程总监Alan Page近日撰文,再次解释了有哪些bug是不会被修复的。

AD:WOT2014:用户标签系统与用户数据化运营培训专场

本文来自微软中国官方博客,原文标题为《为什么Bugs没有被修复?》,作者Alan Page是微软卓越测试工程总监,译者为卢玥俪、陆梦嫣和汪宏。

近来我遇到越来越多的人对我们会发布还有bug的产品大为惊讶。而让我大吃一惊的是,这些人中还有许多是软件测试人员,我本以为他们应该对此早已经有所了解。建议大家先阅读Eric Sink较早写的(但是很棒的)文章。不知道我还能对此话题有多少贡献,但我想试试。

许多bug并不值得去修复。“你这也算是测试人员吗?”,你肯定会冲我大叫,“测试人员是产品质量的捍卫者。”我可以再重复一次(如果需要的话)许多bug并不值得去修复。“让我来告诉你原因。在大多数情况下,修复bug就必须要修改代码。而修改代码需要投入资源(时间)并会引入风险。这真是很糟糕,但这却是事实。有时,如果风险和投入远超过修复bug的价值,因此我们就不会被修复这些bug。

我们决定是否修复一个bug并不是,也不应该是靠“感觉”。我喜欢用“用户痛苦”的概念来帮助我做决定。我会用三个关键因素来考虑并确定“用户痛苦”:

1、严重性 —— 这个bug将产生什么影响 —— 它会让整个程序崩溃吗?它会导致用户的信息丢失吗?或者并不是那么严重?有更简单的解决方法吗?还是它仅仅是个无关紧要的问题?

2、频繁性 —— 用户碰到这个问题的频率高吗?它是程序主要工作流程中的一部分?还是隐藏在一个并不常用的功能中?在最常用的那部分程序中存在的小问题很可能是需要修复的,而一些不常用到的那部分程序中存在的大问题,也许我们会放在一边。

3、对客户的影响 ——如果你之前准备工作做得好,你应该已经知道你的客户是谁,你的每个客户群中会有多少(或者是你希望有多少)用户。这样你就需要判断,这个问题将会影响到每位用户一,还是仅仅一部分人。如果你能追踪出客户如何使用你的产品,你就能得到更准确的数据。

以上3点因素就构成了一个公式。给上面的每一个因素都分配一个数值范围,并且用一些计算 —— 你可以直接使用加法、乘法或是基于你的应用程序以及市场因素加上权值。打个比方,我们只需要执行加法并且对每个bug赋予10分的数值范围。

Bug #1:比如它是一个会让程序崩溃的bug(10分),它存在于程序的主要部分(10分),它影响了80%的客户(8分),因此这个bug的”用户痛苦“量值为28分,我们打赌我们肯定会修复它。

Bug #2:它仅仅是一个关于排列的bug(2分),它出现在二级窗口中(2分),这个bug所在的那部分程序只会在旧版本中被使用到(2分)。因此这个bug的“用户痛苦” 量值为6分,我们很可能不会去修复它了。

遗憾的是,很多情况并不像上面所说的那么简单。Bug #3是一个数据丢失问题(10分),它存在于一个应用程序的某个主要部分中,却只在某些特定的情况下才出错(5分)(顺便提一下,数据是主观编造出的)。客户研究证明它很少会被使用(2分)。因此它的 “用户痛苦”量值为17分,这是一个模棱两可的数据,修与不修都可以。一方面,修复它所需要的投入可能并不值得,只要这个问题能够被理解,并且它没有任何盲点,不再理会这个bug很可能是正确的处理方法。

从另一方面来看,你必须把它和系统中的其他bug进行权衡。我们在这里应用“破窗效应(Broken Window)”—— 如果应用程序中有太多此类中等阈值的bug,产品的质量(或者最起码,从质量的感觉上)一定大受影响。你在考虑系统中每一个bug的时候,还应该结合考虑系统中其他(已知的)bug,并且以此来分析、决定哪些bug是需要被修复的而哪些则不值得被修复。

正式发布的软件中有bug的确是一件十分糟糕的事 —— 但基于我们现有的开发工具和开发语言,我们还没有找到一个更加合理的解决方法。补充:

补充:

写出这篇文章的时候,我想我遗漏了公式中的第四个因素:发布日期。临近发布日期时,这个因素在修复/不修复bug的决定中也起了关键作用。然而我并不确定它是否是第四个因素,也无法确定在临近发布时期时,修复一个bug所需要的 “用户痛苦”量值的阈值是多少。

写给测试人员:不是所有的bug都需要修复的更多相关文章

  1. 作为测试人员,我是这么报BUG的

    在测试人员提需求的时候,大家经常会看到,测试员和开发一言不合就上BUG.然后开发一下就炸了,屡试不爽,招招致命. 曾经看到有个段子这么写道: 不要对程序员说,你的代码有BUG. 他的第一反应是:1.你 ...

  2. 如何避免测试人员提交重复的Bug

    我们在软件测试过程中,由于不同人员测试同一个项目,所以往往会出现Bug重复提交情况,导致对整个项目和人员产生影响: 浪费测试人员时间和精力,从而影响测试进度 浪费开发人员重复看Bug时间 若开发人员由 ...

  3. 测试面试话题8:测试人员如何让开发少写bug?

    在测试过程中和不同开发合作,往往会发现一些bug都是大多数开发人员常出现的错误,为了帮助开发人员,也减少测试的重复工作量,非常有必要将以往出现的bug做整理,分析原因,让开发知道这些bug, 避免再次 ...

  4. 软件开发项目组各职能介绍 & 测试人员在团队中的定位

    前言     接触了许多非测试和新入行的测试从业者,听到最多的问题就是:“测试是否被需要?“   团队职能介绍     <暗黑者1>中有句台词,“专案组有五个职能角色构成,侦探.网警.痕迹 ...

  5. 测试人员,今天再不懂BDD就晚了!

    首先,测试人员应该参与软件开发的全流程,这一点已经是软件行业的共识了. 其次,新技术.新框架.新思路不断涌现的今天,测试人员除了传统的功能测试,也要不断与时俱进,主动承担起自动化测试.性能测试等.除了 ...

  6. 测试人员遇到Android APP崩溃和无响应手足无措?

    这2天,在测APP兼容性时,遇到APP奔溃闪退的情况.将问题反馈给开发后,开发自己调试后,没有复现.由于又是远程,base地不在一块,我总不能把手机寄过去吧,那也太费事了. 所以就想到,提供明确的报错 ...

  7. 测试人员学Java入门指南

    目标读者 本指南特别适合有Python基础的同学学习Java入门,对于没有任何编程经验的同学可能会存在困难. 为什么测试人员要学Java 选择Java,应该不错.TesterHome测试论坛知名大佬基 ...

  8. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  9. 测试管理_测试人员招聘[持续更新ing]

    招聘之难,难于上青天. 如何招聘到一位称心如意的员工想必是每个公司和管理者都要面临而且头疼的问题.尤其在初建团队或团队缺人的情况下问题会显得更加严重. 作为一个测试管理者,如何招聘到合适的测试人员是必 ...

随机推荐

  1. JMeter学习笔记--详解JMeter定时器

    定时器的处理优先于同一作用域内的采样器,如果在同一作用域内有多个定时器,那么所有的定时器都会在每个采样器之前处理. 若定时器所在作用域内无采样器,那么定时器不会被处理 固定定时器,每个线程在请求之间间 ...

  2. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  3. JAVA:认识多线程

    曾经古老的DOS操作系统是单任务的.还没有线程的概念,系统在每次仅仅能做一件事情.比方你在copy东西的时候不能rename文件名称. 为了提高系统的利用效率,採用批处理来批量运行任务. 如今的操作系 ...

  4. 基于FPGA的5寸LCD显示屏的显示控制

    基于FPGA的5寸LCD显示屏的显示控制 作者:lee神 1,图像处理基础知识 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.图像处理最早出现于 20 世纪 50 年代,当时 ...

  5. 【Android】18.1 利用安卓内置的定位服务实现位置跟踪

    分类:C#.Android.VS2015: 创建日期:2016-03-04 一.安卓内置的定位服务简介 通常将各种不同的定位技术称为位置服务或定位服务.这种服务是通过电信运营商的无线电通信网络(如GS ...

  6. LeetCode242——Valid Anagram

    Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = & ...

  7. haproxy-1.6.11 make 报错

    # make TARGET=linux26 USE_OPENSSL= ADDLIB=-lz gcc -Iinclude -Iebtree -Wall -O2 -g -fno-strict-aliasi ...

  8. 常用的正则表达式C#工具类

    Regex类实现了一些特殊功能数据检查,正则表达式的一些常用的功能,集成至该类中. public class RegexDao { private RegexDao() { } private sta ...

  9. nginx学习之epoll

    https://blog.csdn.net/mmshixing/article/details/51848673 首先说一下传统的I/O多路复用select和poll,对比一下和epoll之间的区别: ...

  10. web-project的/WEB-INF/lib

    哪些jar包应该放到你的/WEB-INF/lib中?(目前为止,我的classpath只配置了dt.jar和tools.jar,也就是说,我的web-project所用的所有jar包都没有配置到cla ...