迷信自动化是测试人员的误区

2010-05-02  袁军 

先说说为什么做测试的人喜欢搞自动化。

  第一,自尊心。计算机科班出身的人都喜欢作开发(Dev)。做测试工作经常是身不由己,可是测试工作很多时间不需要编程,于是做测试的人想方设法写些程序,以显示自己也会编程。结果往往是欲罢不能,测试自动化程序越写越多,越写越复杂。后面我会谈谈测试自动化框架复杂的代价。

  第二,为了出成绩。很多测试组为了向管理层展示成绩,往往要拿出例如测试自动化达到80%,程序覆盖率达到90%。要我说,这些都是Bull Shit。就象小平同志说的实践是检验真理的唯一标准,我认为在测试中用户不出问题是检验质量的唯一标准。自动化做的再多,用户出了问题,也是白搭。另外,一个人就可以做的测试,自动化往往需要两个,三个。倒是解决就业的好方法。

  我对测试自动化的认识也有一个变化的过程。刚刚入行时也是很相信自动化,想方设法写一些从头到尾自动化的框架,觉得自动测试很过瘾。到微软Portal Media Center组后也是和另外两个人做了一个相当复杂的用户界面的自动测试。其实现在想想,用自动测试发现的问题基本上可以一个人用手工测试完成,最多写些简单的测试辅助工具就可以完成。有些人可能会说自动化可以为产品的下一个版本节省测试时间。其实Portal Media Center下一个版本出来时,所有户界面完全变了,80%以上的自动测试程序都需要改动。做完第一个版本,我们三个人全都走掉了。后面来的人往往宁可自己再写一套,也懒得改以前人的程序。自动化的浪费就是这样造成的。想说服别人用你开发的自动测试框架是很难的,所有人都想另搞一套。

  下面分几点讲讲为什么要放弃对测试自动化的幻想,和怎样进行低成本的有效测试。如果你还不能同意我对测试自动化的看法,可以去微软员工的Blog看看为什么Windows测试组用的WTT测试框架被称作“Waste of Tester Time"。我最基本的观点不是说测试自动化不能测出bug,而是想问:一个比较复杂的测试自动化框架所造成的人力浪费,值不值得最终的结果?如果不做测试自动化,能不能达到同样的效果。以我的亲身经历,去年我的测试组两个人对应开发组五个人,项目经理三个人的工作量,去年做了好几个ReleaseHotfix只有两三个。我们旁边的测试组七八个人对应五六个Dev。他们又是自动化,又是搞程序覆盖率,好不热闹,Hotfix也不少。按一个人的人工成本12万美元,我们组省至少三个人的成本36万美元。

  第一,不要指望自动化能帮你找bug。软件bug和生物的bug很像,测试的规律是bug少的地方bug越少,bug多地方越找越多。做测试自动化,往往在开发自动化的时候,该发现的bug就发现了。自动化开发完成,再想发现更多bug就很难了。这是无论你怎样跑你的自动化,也不会发现新的bug

  第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错。当程序出现变动时,只要针对变动的部分测试就可以了,以前测过的东西,如果和变动没有关联就不会出错。相反如果,程序出现很大变化,自动化可能完全不能用了。

  第三,自动化不如测试工具加手工测试。我不建议测试人员作全面自动化,相反我建议测试人员多做小巧灵活的测试工具。自动化往往需要自动判PassFail想想你如果测试用于生成www.microsoft.com的页面的产品,你如何判断页面框架生成的正确?很多东西是动态产生的,你很难确认所有的内容的正确性。如果你自己用这个产品手工做个页面,用肉眼很容易判断所有相关和不相关的内容生成的正确性。我就是用这个方法在工作中发现了网页上谁也想不到的bug,如果用自动化很难在测试阶段发现这个bug

  第四,软件项目的生命周期就定了自动化的无用。现在很多网络应用项目的生命周期都很短,一个项目从生到死不过两三年。死的定义是项目进入Sustain Engineering维持状态。自动化原来的一个主要目的是使软件测试的未来阶段越来越容易,成本越来越低。可是当一个项目死掉了,自动化还有什么用。而且最新的敏捷开发,软件的要求,程序,接口,界面在不断变化,自动化怎么可能跟得上变化。与其去搞自动化,不如多理解变化,直接测试变化的东西。

 

417°/4058 人阅读/12 条评论 发表评论

刘俊  2010-05-03

在这里第二次看到这篇文章了,不说别的,里面的这句“第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错。”前面说的再好,看到这句我就对作者的能力很怀疑了,简直是胡说八道啊。


朱斌  2010-05-04

我觉得说的很好啊


熊志男  2010-05-04

自动化还是有用的 国内大部分企业做的不好罢了


张挺  2010-05-04

刘俊: 在这里第二次看到这篇文章了,不说别的,里面的这句“第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错。”前面说的
其实这句话是对的,但是问题是没法确定是不是一次做对了,只能说我们认为它对了并且在目前的条件下没有暴露出问题。所以我也赞同你的观点,因为他这个假设“一次做对了”根本不成立。但是,这个自动化脚本能否测出bug确实也是一个问题,很多时候自动化脚本不能测出问题来或者会误报一些问题,可以说对回归测试的贡献也要看具体项目对自动化的适用程度。


袁军  2010-05-04

刘俊: 在这里第二次看到这篇文章了,不说别的,里面的这句“第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错。”前面说的
"第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错"
首先:我要说的是,这句话没有问题,看看国内的情况就应该知道,一般软件做完了(测试也已经完成),还会有人去回想以前的问题吗?这里说的软件就是投入使用的软件,并非是测试中的软件
其次:一个软件除非是要升级,否则是不会出现什么问题,问题大多都是出现在软件的兼容、硬件环境等
第三:软件的特点是如果一次做对了,以后永远不会出错,这句话不会错,除非是这里引入了新的功能。否则是不会出现错误。


刘俊  2010-05-04

袁军: "第二,不要指望自动化对Regression Test的测试的贡献。软件的特点是如果一次做对了,以后永远不会出错"
首先:我要说的是,这句话没有问题,看看国内的情况就
如果你这样肯定的话,那我只能说你遇到的问题太少了


袁军  2010-05-04

刘俊: 如果你这样肯定的话,那我只能说你遇到的问题太少了
可能吧,谢谢你提出自己的观点!


刘俊  2010-05-04

张挺: 其实这句话是对的,但是问题是没法确定是不是一次做对了,只能说我们认为它对了并且在目前的条件下没有暴露出问题。所以我也赞同你的观点,因为他这个假设“一次做对了
作为专职从事自动化的我来说,这样的问题不说碰到很多次,但是绝对是存在的。不能盲目的相信开发人员,他们也有马虎的时候,所以这篇文章的作者说一次做好,以后不会出错是不成立的,起码从我个人的经历来说,是错误的说法。


刘俊  2010-05-04

袁军: 可能吧,谢谢你提出自己的观点!
因为我自己碰到很多次了,之前pass的脚本,结果因为开发优化代码或者其他什么操作导致功能不能使用,不过这个也和公司的开发流程存在一定的关系,whatever,问题肯定是有的


张东升  2010-05-04

我赞同第三点


陈健  2010-05-06

刘俊: 因为我自己碰到很多次了,之前pass的脚本,结果因为开发优化代码或者其他什么操作导致功能不能使用,不过这个也和公司的开发流程存在一定的关系,whatever,问题肯定是有的
同意。特别是在研发没有一个掌握整个框架的产品经理在负责的话。研发人员修改程序完全是拿到需求以后随意讨论一下修改方案就开始写代码。结果往往就是修改了一处功能却对其他功能产生了影响,更可恨的是不但程序员自己没有考虑到这些影响,而且一些代码上的优化都不在文档中说明。提过多次意见还是一样。弄得我们每次都要纠结要不要把所有业务都重新测试一遍。全部测试的话工作量很大,不全部测试又经常出现提交的功能测试通过却影响了其他功能的情况。让人很是火大


黄海舟  2010-05-06

支持下~!


登录 后发表评论