本文的作者Sriram Krishnan是一名程序员,曾在Yahoo和微软工作过,开发过很多软件,曾被纽约时报报道,写过一本书,本文是他的一篇博客。
这些年来,我对测试工作、测试人员,以及整个软件质量管理体系形成了一些明确的观点。受一篇关于Facebook的测试的帖子的启发,我想把这些写下来,用以拿给人看。有些观点是有争议的。事实上,即使在交谈中稍微表现出这样的看法,都会招致人们的鄙视。
- 大多数的开发团队并不需要一个独立的测试角色。即使有一个,他的所有的开发时间比上所有的测试时间应该 >20:1。证据吗?光看看一些从古至今最成功的软件开发团队就知道了。不论是当今的Facebook,还是30年前最初的NT团队,很多伟大的产品都是出自没有或很少测试人员的团队。
- 开发人员应该测试自己的代码。没什么可说的。背后的道理并不重要。这包括单元测试,全覆盖的自动化测试或手工测试或组合测试。如果你的开发人员不能/不愿意或认为这“不归我管”,那你需要更好的程序员。
- 我有一些政治上不正确的话要说。一些大型的软件开发公司会从一些不能胜任开发工作的程序员中选择测试人员。我经历/听说过很多在面试开发人员过程中有人说“他/她做开发不行。也许可以做测试?”这导致了一个被广泛默认,但很少公开宣称的认识:做测试的不如做开发的聪明。正是由于这普遍的偏见,少数一些对质量和测试工作极具热情和天赋的人受到了不公平的待遇。我知道他们,因为我曾经和一些这样的人一起工作过。
- 追求代码测试覆盖率是危险的。因为它很容易测量,它经常会变成真正目标的替代品——开发有质量的软件。如果你的开发团队把功夫都用在写愚蠢的测试,来覆盖每一个罕有能用到的代码路径——因为这些数据会出现在一些报告里——你有问题了。测试覆盖率只是我们用的的很多指标中的一个,你需要使用它,但并不是因为它以自然的数字呈现,它就能压倒其它指标。它成了古德哈特定律的牺牲品。
- 我也曾看到有些公司里有独立的测试人员,他们写出非常好的测试代码。不幸的是,这被人们当成了一种常识,即使是在根本不需要这样的时候。
- 正像测试覆盖率被过度使用,有些质量指标是被忽略轻视了。比如:过程中产生了多少技术支持邮件?自己是否在任何时候都在真正的使用自己的产品,检测里面的问题?分析从生产环境和客户安装那里产生的日志文件。所有的这些策略都在上面的Facebook的帖子里有提到过。
- 技术领导的一个常见的减少测试队伍的体积的办法是做自动化测试。这是个巨大的错误。如果你有一个用户直接接触的产品,你绝对需要用人眼去测试它。如果你和微软Windows团队的人坐下来一起和咖啡,你会听到他们抱怨过度依赖自动化测试导致了Windows Vista大量的bug。这个错误说明的问题就是:你需要一个全职的测试人员来使用你的产品。
[英文原文:On testers and testing ]
同意。测试本来就应该是程序员工作的一部分。而且,程序员一旦认识到这点儿,他写代码时往往会更用心。把代码写得更好些,后面的测试工作就会少一些。
“””我也曾看到有些公司里有独立的测试人员,他们写出非常好的测试代码。不幸的是,这被人们当成了一种常识,即使是在根本不需要这样的时候。”””
这段如何理解?是说公司不需要独立的测试人员?还是测试人员不需要脱离开发工作?亦或不需要写”非常好“的测试代码?
我的理解:在需要的时候去写非常好的测试代码,而不要为了写出非常好的测试代码去写
还是一个无关紧要的小问题。我搜“古德哈特法则”没多少结果,搜“古德哈特定律”却有很多,是不是改成这种约定俗称的叫法
国内习惯(一般)说XXXX定律,而不是XXXX法则,
文中已给出Wiki中相关的链接.为什么你还要搜索呢?
英文 wiki 上还写了中文译名?你眼神真好,我怎么没看见
顺应民意,改了,谢谢提醒
程序员需要责任,不是把思想写出来,就放任不管了。
原文一个引用的http://www.quora.com/Is-it-true-that-Facebook-has-no-testers中,
最后一句话不可小觑,要知道不同的软件行业,对质量的要求还是有较大差别的。
十分赞同此文中的意思,不过…非管理人员没说话的分量
公司的运营部门把使用产品这部分兼了….
开始我认为开发人员和测试人员应该细分,但后来我自己亲自做了测试之后发现,这有个弊端,就是,开发人员会过度依赖测试人员,他们不会主动思考问题出现在哪里。当测试人员测出问题,他才会关注自己哪部分还有问题,并解决。这对公司运营来说是件好事,效率可以提高,但对自身职业发展不见得,思考总是被动的,没有主动意识,过分依赖别人。
遗憾的是,不是所有开发人员都具有测试人员穷追猛打的精神。。。。。
开发更多的认为是完成构建——这对成长为顶尖的开发专家是致命的。
也许你的想法很好,但是实际情况是:眼高手低啊
开发应该自己负责大部分的测试,这样可以让自己对问题的思考更加全面;不过专职的测试也是要的,因为还有集成各个模块的功能需要验证。
如果一个开发人员不测试自己的程序,他怎么知道他好不好那
作者提及的Facebook和NT涉及的领域都是面向个人的互联网和桌面软件,真正的工业级软件,尤其的是关键行业的底层软件,是不会出现这种情况的:“他的所有的开发时间比上所有的测试时间应该 >20:1”。
要搞清楚几件事,1 伟大的开发团队是特例,2 伟大开发团队开发的好并不是因为他们没有测试。简单的说,因为开发人员伟大,所以他们开发伟大的产品,即使没有单元测试,他们也在脑中跑了好多遍。早期打孔机编程,重来非常麻烦,当然程序也不复杂(不过相对打孔来说也不简单),写之前思考很多遍了。早期伟大的团队没有单元测试,没有debuger,都开发出来伟大的产品,因为他们专注代码,专注质量。产品质量不是由测试或调试提升的,而是由开发人员的态度决定的。靠测试人员保证质量那是把逻辑关系颠倒了。不过话说回来,我等都是凡人,或许是不求上进的凡人,现实中开发软件大都是这样的人,只能靠外在保证了。这个跟国情无关,哪儿都一样。
同意,说的很有道理!
同意,好的开发人员总是稀有的,所以人们就想办法提高那些不怎么好的程序员的效率。看着测试和开发人员一起工作如何如何不行。但是要了解,这是一群只造过小平房的工人造出的摩天大厦。
bbs.zgfeng.cn
baidu.zgfeng.cn
rc.zgfeng.cn
baike.zgfeng.cn
weixin.zgfeng.cn
bocai.zgfeng.cn
ailehui.com.cn
688td.com
jinse1hao.com
seo.seoseo.org.cn
seoseo.net.cn
zgh.mobi
google.zgfeng.cn
停车场道闸