那不是Bug,是新需求
自从我干上软件开发这一行。而且使用了Bug跟踪系统。我们在每个项目里都会纠结一个主要的问题:你怎么能把Bug与功能需求区分开来?
当然,假设程序崩溃了,这毫无疑问是Bug。
只是,那或许仅仅占你每天所处理问题的10%。
为了避免项目的彻底失败。真正的杀手级Bug——有它存在就不能发版的Bug——会非常快被消灭。
而在Bug跟踪系统里留下来的绝大部分Bug。就落入了没人管的灰色地带。
用户报告的是Bug吗?不全然是。用户在要求一个新功能或完好某个既有功能吗?也不全然是。好吧,那究竟是什么?
这是一个令人犯难的问题。进一步说,我觉得大部分Bug跟踪系统都在“坑”我们。由于它们让我们非要回答这样的无聊问题,逼着我们站队——要么海菲茨,要么麦考伊斯;要么可口可乐,要么百事可乐。要么是Bug。要么是功能需求——这是一个痛苦的抉择,选择哪一方均在一念之差。由于大部分时候两者皆可。从用户的角度看,Bug和功能需求是没有差别的。
假设你想用一个软件(或者站点)做某件事情,但由于某个功能没有实现而无法完毕。相比于你在使用过程中由于出错而不得不停下来,两者之间有差别吗?
译者注:美剧《Hatfields & McCoys》,又名《血仇》,聚焦于美国声名狼藉的两个家族(Hatfields和McCoys)之争。
两大家族的争执源自于美国南北战争时期,Anse Hatfield和Randall McCoy本是要好的哥们儿,但不想后来生变,二人结下仇怨,甚至引得弗吉尼亚州和肯塔基州都不安宁。
由此,这两大家族联手制造了美国史上最臭名昭著的血腥争端。
我们来看一个样例:在开发Windows应用程序的时候,Visual Studio没有使用正确的字体。
这算是一个Bug还是功能需求呢?
我个人觉得这是一个Bug。我猜微软也是这么觉得的(至少理论上是这样),由于那个问题已经在Microsoft Connect系统里存在了4年多。当你开发一个Windows应用程序。除非你刻意想要使用一种特殊字体,你难道不希望使用操作系统的默认字体吗?好吧,假设你在Visual Studio 2008里创建一个新的窗口。然后加入一个标签控件,看看会是什么情况吧:
仿佛一下子回到了1996年,由于你看到的是“可爱的”MS Sans Serif字体。
那是全部新窗口的默认字体。你也别见怪了,全部新开发的应用程序看起来都丑陋无比——我的措辞已经非常节制了!
以下是一个对照:一行标签用了默认字体,还有一行标签显式设置了默认的GUI字体。
纵观我所使用过的应用软件。我发现,大部分Windows程序猿根本不关心设计。这可不妙!
甚至更糟糕的是。这样的对设计的漠视被Visual Studio携带,从2002年開始不断地感染着每一位用户。
当然,设计方面的问题是非常主观的。在Windows图形用户界面的字体使用方面,要是我们能有一些參考资料。那该多好啊!
某种相似于标准的东西。就比方微软给Windows Vista用户体验定义的那些规范:
- 使用Aero主题和系统字体(Segoe UI)
- 使用通用控件和通用对话框
- 使用标准的窗口边框,慎用透明效果
- ……
这样的规范总共同拥有12条。只是,我想要找的恰恰就是第一条:应用程序应该使用系统字体。
我为Windows Vista的总体质量扼腕叹息。为此我也写过满满的一篇文章。上述这份清单看起来非常欢乐,事实上已经不言而喻。特别是第12条:预留时间提升“总体质量”,让我不禁大笑。在开发Windows Vista的时候。微软想必对这条规范耿耿于怀。值得注意的是,这些都出自于一个热爱Vista的家伙。
对不起。我跑题了。
虽然Visual Studio 2008里的窗口字体行为违背了微软自家的设计规范(中的第一条),这个“Bug”却4年多来一直没有被修正。它被悄悄地归类为“功能需求”。然后被束之高阁了。
毕竟,没什么恶劣影响——使用错误的字体不会让程序崩溃或减少生产力。还有一方面,想象一下,自从微软践踏自家的设计规范以来,有多少大公司的应用软件已经被开发出来了啊。要么由于开发者没有意识到应用程序的字体与操作系统不匹配的问题。要么他们没时间写一些必要的权变代码来加以纠正。
没错。这是一个小问题。
我相信,修正这个问题不会让Visual Studio更好卖。比方多卖给大公司几千个使用授权。这也是它没人管的原因吧。
问题依然:这是一个Bug,还是功能需求?
我非常喜欢用UserVoice(Stack Overflow採用的就是这个工具),它最让我心动的一点是,它有益模糊了Bug与功能需求之间的界线。
无论怎么说,用户搞不明确它们之间的差别。更糟糕的是。程序猿可能会据以搪塞用户。他们把不想做的事情归类为“功能需求”,从此以后就置之不理了。他们会据理力争。嚷嚷着说某个被报告为“Bug”的问题显然不是Bug。自然也就不必修复了。罢了吧,别再区分Bug和功能需求了。让它们都见鬼去吧。
我希望,我们全行业都能少花点时间在概念的口舌之争上,别再煞费苦心地把用户反馈区分成“Bug”或是“功能需求”。面对用户反馈,我们应该多花点时间做一些有建设性的事情。
那不是Bug,是新需求的更多相关文章
- OpenStack企业私有云新需求(1):Nova 虚机支持 GPU
作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...
- AI 一体机,满足新时代的新需求
AI 变革带来哪些 IT 的新要求? 深度学习的突破和硬件的突飞猛进,使得人工智能“第n春”焕发蓬勃生机.这是历史上第一次,机器可以在如人脸识别等‘人类’工作上做得比我们人类更好. 人工神经网络有许多 ...
- 【开发工具】 使用阿里的 Teambition 跟踪BUG修复及需求管理
刚入公司几个月,公司新项目一直没有用协作工具进行BUG管理,公司也没有专业的测试工程师. 第一阶段开发到了尾声,工作效率实在太低,随决定使用一个比较现代一点的管理工具. 在众多在线项目协作软件中,我选 ...
- iOS 产品新需求,要让collectionView 的背景跟着Cell 一块儿动!!!
标题如上!看如何解决 最近产品经理来需求了,就像标题上的一样,要求,给collectionView添加一个背景,并且这个背景,还能跟着cell滑动这么一个效果,这个需求把我看懵了,让我不知所措,这该如 ...
- SAP打印出库单 新需求
*&---------------------------------------------------------------------* *& Report Z_SD_CKD ...
- 发现了一个App拉新工具:免填邀请码
去年公司开始着手开发一个App项目,从调研到开发完成,前前后后历时快半年(没少加班),目前产品已经上架了各个应用市场,名字就不提了,省得说我打广告.今年开年说要开始做冷启动了,大家都知道,这才是最苦逼 ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 5分钟精通git教程
git是一个版本控制工具,就要先弄清楚什么是版本 版本: 对外发布的版本如v1.0.0,v1.1.0 叫version 内部代码的版本叫commit,如:修改了一个错别字 顾名思义一个version就 ...
- BugBash活动分享
此文已由作者夏君授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. BugBash源至微软概念,翻译为<缺陷大扫除>,顾名思义是集中大家力量全面清扫Bug,确保产品质 ...
随机推荐
- BeanUtils——JavaBean相互转换及字典翻译
JavaBean相互转换 在升级公司架构过程中,发现有大量Entity与DTO相互转换的问题,并且其中还伴随DTO中的数据字典翻译,所以特意写个工具类,主要利用spring提供的BeanUtils工具 ...
- JAVA常见算法题(十)
package com.xiaowu.demo; /** * 一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下……求它在第10次落地时,共经过多少米?第10次反弹多高? * * @au ...
- ylbtech_dbs_article_五大主流数据库模型
ylbtech_dbs_article 摘要:什么是数据模型? 访问数据库中的数据取决于数据库实现的数据模型.数据模型会影响客户端通过API对数据的操作.不同的数据模型可能会提供或多或少的功能.一般而 ...
- 图文介绍openLDAP在windows上的安装配置
目录 概述 测试环境 安装过程 配置启动 客户端介绍 多级DC的ldif文件的配置 [一].概述 什么叫LDAP呢,概念的东西这里就不多讲了,网上搜索下有很多,本文的重点是介绍如何在windows平台 ...
- 排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现
以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数 ...
- IP头,TCP头,UDP头,MAC帧头定义
一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER { char m_cDstMacAddress[6]; // ...
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...
- Java高级特性—并发包
1). java并发包介绍 JDK5.0 以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的, 主要包含原子量.并发集合.同步器.可 ...
- pl/sql(2)
1.存储过程 (1)存储过程的创建及改动 语法: CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | I ...
- Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例
server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http" ...