# 二十、二不配备测试人员的五个首要(错误)原因
1992年,James Gleick正和一个多虫软件的各种问题周旋。科学作家Gleick认为 微软刚出的Word for Windows新版很可怕。他在星期天纽约时报杂志写了 一长篇 文章,这篇文章只能以激动来形容,整篇都在指责Word团队不理会客户的要求, 交付问题如此多的产品。
稍后,他以地区丨nternet供货商Pan ix(刚好也是我的I nternet供货商)客户的身 份,要求提供自动排序并过滤其邮件的方法。提供这个功能的是一个叫procmail 很神秘的UN IX工具,它的接口连最硬派的UN IX迷都觉得难用。
总之Gleick先生不小心在procmail里打错字,结果把他所有的信都删掉了。一气 之下就成立自己的Internet联机公司。他雇用了 Uday Ivatury当程序员,并且 建立了 Pipeline这个真的有点超越时代的公司:这是第一个有图形接口的商业 Internet联机供货商。
当然啰,Pipeline也有它自己的问题。很早期的第一个版本没有使用任何错误更 正的协议,所以很容易把数据弄乱或当掉。它就像所有的软体一样有臭虫。1993 年我去Pipeline找工作,面试中问到Gleick所写的文章。「现在你已经身在蓠笆 的另一边,」我问道:「有没有稍微体会到创造好软件的难处呢?」
Gleick恼羞成怒。他否认Pipeline有任何问题,他也否认这个软件有和Word—样糟。他告诉我说:「约耳,总有一天你也会恨微软的。」他做了一年的软件开 发而不再只是个使用者,这一年的经验却没有让他体会到无虫又易用的软件是多 么困难的事,这实在令我有点震惊。所以我就回绝那个工作机会逃掉了。 (Pipeline后来被一家世界上最奇怪的Internet供货商PSI买走,然后随随便便就 被关掉了。)
软件有虫。CPU异常的守规矩,它们绝对会/互绝处理没有被明确教过的东西,而 且通常会以最孩子气的方式拒绝。我的笔记本电脑在外头使用时常会当掉,因为 它找不到本来找得到的打印机,多么像个婴孩。不过原因可能是某一行程序有个 极微小却又很严重的问题。
这也正是你绝对要有QA部门的原因。每用两个程序员就需要一个测试人员(如果 软件需要用于多种复杂的组态或操作系统时还不只)。每个程序员都应该和某一 个测试人员紧密配合,尽可能频繁地丢出自己编译的版本给测试人员测。
QA部门应该要独立并拥有权力,绝对不可以对开发团队负责,事实上QA的主管应 该有否绝权,可以阻止发行不合格的软件。
我第一份真正的工作是在微软;这家公司并不以高质量的程序傾名,不过它还是 雇用了大量的测试人员。所以我曾经认为每个软件组织都会有测试人员。
虽然很多组织确实有,不过没有测试人员的组织还是多的令人惊讶。事实上很多 软件团队甚至不相信测试。 你可能会认为,现在的经理经过80年代的质量狂热洗礼,又有各种无意义的国际 「质量」认证(如IS0-9000)和「六个标准偏差」等术语,应该会了解高质量的 产品才能获得高质量的生意。事实上他们都了解,其中大多数人已经尽量把它塞 进脑袋,不过他们还是找出各种理由不用软件测试人员,而这所有的理由通通 都是错的。
我希望可以对你解释这些想法的错误。如果你赶时间剩下的就别看了,直接算人 头每两个全职程序员请一个全职测试人员就对了。
下面是我听过不雇用测试人员最常见的鬼叫:
1.问题是懒惰的程序员弄出来的。
这种幻想的内容是这样的:「如果你请了测试人员,程序员就会马虎而写出问题更多的程序。 不要请测试人员,就可以强迫程序员一开始就写出正确的程序。」哇!如果你会这样想, 那你不是没写过程序,就是把写程序这回事完全想歪了。由定义来看,臭虫会出现就是因为 程序员没看到程序代码里的问题。通常就是需要其他人才看得到问题。当我还在Juno写程 序时,每次都会用一样的方式执行我的程序。我会照我自己的习惯大量使用鼠标操作。我们 神奇的测试强者习惯有点不同:她比较常用键盘(而且会严厉地实际用所有可能的组合去测 试使用接口)。这样子很快就会找出丈量的问题。事实上有时候她还会说整个接口都不能用, 而且是沒分之百不簾用,可是在我的机器上一切正常。当我看着她重现问题才恍然大悟。Alt 键!你按住Alt键了!我怎么会没测到呢?
2.我的软件放在网络上。即使有问题也马上就能修好。
哈哈哈哈!好吧,你说对了,用网络分发软件的确能比以往软件包时代更快速的更新修正版 本。不过即使把软件放在网站上,也别低估在项目冻结后修正一个问题的代价。一来你可 能在修正第一个问题时产生更多的问题。更糟的是如果你检讨发行新版本的程序,就会了解 在网络上丢出修正版是个相当昂贵的建议。更别提会让人因为有以下感觉而造成坏印象了:
3.客户会替我测试软件。
啊,令人害怕的「Netscape防线」。这家可怜的公司借着独特的「测试」方法严重伤害了自 己的声誉。他们的测试方法是:
1. 当程序员写好一半时,不经任何测试就把软件发行到网络上。
2. 当程序员说完成时,不经任何测试就把软件发行到网络上。
3. 重复做六到七次。
4. 把其中某个版本称为「最终版」
5. 每次当c|net上爆出一个丢脸的问题时就发行.01、.02、.03版。
这家公司是「广泛beta」这个点子的先驱。意思是让教百?万人下载这些多虫的未完成版本。 最初几年几乎所有Netscape使用者都在用某个抢鲜版或beta版。结果大多数人都认为 Netscape软件的问题实在很多。虽然最终版通常问题都极少,可是Netscape己经让多到离谱 的人用过多虫的版本,所以大多数人对该软件的普体印象都很差。
另外让「客户」来测试的重点在于让他们找到问题然后由你来修正。不幸的是,Netscape 或任何其他地球上的公司都没有人力,可以处理两百万客户的问题回报并找出真正重要的 问题。当我要填报Netscape 2.0的问题时,问题回报网站一直当机,根本不让我回报(不过 反正问题回报最后都会丢进黑洞)。可是Netscape并没有学到教训,现在6.0「抢鲜版」的 测试人员就在新闻组里抱怨,说问题回报网站还是没办法送出报告。那么多年了!还是老问 题!
不过我敢打赌,在这些多得要命的问题回报中,绝大多数都在讲相同的5到10组很锻显的问 题。里面可能还埋有一两个有意思又难查的问题,是某人千辛万苦才成功送出的。不过反正 没人会看这些报告,所以也就等于不见了。
这种测试型式最糟的一点,就是公司会得到非常差的印象。当Userland推出主力产品 Frontie「的第一个Windows版时,我去下载并开始照着教学操作。不幸的是Frontie「当了好 几次。我完全照着教学上面的指令逐一照做,怎么样都没办法执行两分钟以上。我觉得 Userland可能连最基本的测试都没做,根本没有确认教学是能动的。产品质量低落的印象让 我有很长一段时间不再碰Frontier。
4.有资格可以胜任的人都不想做测试人员。
这是个很沈痛的理由。好的测试人员非常难找。测试人员和程序员一样,顶尖高手和一般 水平的人相差一个量级。Juno有一个测试人员Jil l McFar lane,她找到的问题是其他四个人 合起来的三倍。我是真的算过,绝对没有夸大其辞。她比普通测试人员的生产力好12倍。当 她离职时,我写了封电子邮件给执行长说道:「我宁愿只有星期一和星期二让Jill帮忙,也 好过让QA团队其他人全部一起测。」不幸的是,这么聪明的人大都容易对日复一日的测试 感觉厌烦,所以顶尖的测试人员通常只待三或四个月就会换工作。这个问题唯一的解法就 是面对然后想办法处理。下面列出几个建议:
把测试当作技术支持的下一个晋升工作。测试或许很沈闷,不过绝对比用电话处理愤怒的用 户好,而且可能也是消除某些技术支持人员骚扰的方法。
允许测试人员上程序设计课程拓展职业生涯,并且鼓励较聪明的测试人员,运用程序工具及 脚本语言开发自动化测试套件。这比不断重复测试相同的对话盒要有趣多了。
要有顶尖测试人员经常流动的认知。积极的进行招募以保持稳定的人员流入。不要只因为暂 时满额而停止招募,因为总会有下一波好景气。
找寻「非传统」的工作者:找聪明的青少年,大学里的小朋友还有退休人士来兼差。你可以 用两三位顶尖全职人员再搭配一群趁暑假赚学费的Bronx Science(纽约一流高中)学生,建 立出一个效果惊人的测试部门。
雇用临时人力。如果请10个临时工进来拿你的软件来玩个几天,就会发现很多很多的问题。 里头可能会找到两三个测试技巧不错,值得签约转成全职人员的人。要先有心理准备,里面 有些人可能做不了测试人员;这时只能请他回家再继续找新人。这也正是临时人力中介的功 用。
下面这种方法无法处理这个问题:
千万不要对来工作的计算机科系学生打歪主意,说什么「所有人都要在QA部门磨练一阵子才 能去写程序。」我看过太多例子了。程序员没法子当个好的测试人员,而且还会因而损失好 的程序员,而这就更难找了。
终于到了,这是人们不雇用测试人员的头号笨理由:
5.我请不起测试人员!
这是最笨而且也是最容易揭穿的理由。不管测试人员有多难找,还是比程序员要便宜,而 且便宜多了。另外如果不请测试人员,就得让程序员自己测。再来如果你认为测试人员大量 増加不太好,就想想这件事的代价吧:年薪十万美元的明星程序员受不了有人要他「在发 行前留几个星期测一测」,而换去比较专业的公司。光是为找新程序员而付给猎人头公司 就够你一年请三个测试人员了。吝啬请测试人员是如此的划不来,我实在不懂为什么有这 么多人认不清。
- 第一部分 位与字节:编程实践点滴
- 一、语言的选择
- 二、深入底层
- 三、joel测试:改进代码的12个步骤
- 四、每一位软件开发人员必须、绝对要至少具备UNICODE 与字符集知识(没有任何例外!)
- 五、轻松写就功能规格说明书 - 第1节:为什么烦心?
- 六、轻松写就功能规格说明书 - 第2节:什么是规格说明书?
- 七、轻松写就功能规格说明书 - 第3节:但是……如何?
- 八、轻松写就功能规格说明书 - 第4节:技巧
- 九、轻松制订软件进度表
- 十、每日连编是朋友
- 十一、难伺候的故障修复
- 十二、软件开发中的5个世界
- 十三、稿纸原型开发
- 十四、不要被太空架构师所吓倒
- 十五、开火与运动
- 十六、人员技能
- 十七、源于计算机学科的三个错误思想
- 十八、二元文化
- 十九、自动获取用户故障报表
- 第二部分 开发人员的管理
- 二十、面试游击指南
- 二十一、重金激励害多利少
- 二十、二不配备测试人员的五个首要(错误)原因
- 二十三、任务换人有害无益
- 二十四、绝不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序设计界的LordPalmerston
- 二十八、评测
- 第三部分 Joel对常态问题的遐想
- 二十九、RickChapman解读愚昧
- 三十、在这个国家狗是干什么的? 我们有多么天真?
- 三十一、作为哼哈二将,只管去做事
- 三十二、两个故事
- 三十三、巨无霸麦当劳与天才厨师JamieOliver
- 三十四、没有什么像IT看起来那么简单
- 三十五、提防非自主开发综合症
- 三十六、策略I:BEN&JERRY公司与AMAZON
- 三十七、策略II:鸡与蛋问题
- 三十八、策略III:让我回去!
- 三十九、策略IV:大件与80/20神话
- 四十、策略V:公开源代码的经济因素
- 四十一、墨菲法则肆掠的礼拜
- 四十二、微软公司是如何败北API之战的
- 第四部分 对.NET稍多的评说
- 四十三、微软精神失常了
- 四十四、我们的.NET对策
- 四十五、请问,我可以使用连接程序吗