我是程序员,学测试干什么?

周末布置了一个实践作业:黑盒测试实践,要求大家使用自动化功能测试工具,对一个web系统做自动化测试。作为一门测试课程,这样的作业要求看起来很自然。不过,这项作业仍然遭到了部分同学的反对。有同学提到,”大多数程序猿不需要很强的测试能力,一般代码写多了就会测试了。如果开发需要独当一面的测试能力,做完所有的的活,那要测试工程师来干嘛?“ 这让我想起另外一句经常听到的话:”我是学软件的,不是学硬件的,我干嘛要学计算机组成原理“。二者是何等相似。我不由得陷入沉思:程序猿不需要懂太多测试吗?为了让测试工程师不要失业,所以程序猿一定不要懂太多测试吗?

朋友推荐了林锐的一本书《软件工程思想》,在这本书中,林锐讲了一个有关微软公司的故事。他是这样描述的:

在80年代初期,Microsoft公司的许多软件产品出现了“Bug”。比如,在1981年与IBM PC机一起推出的BASIC软件,用户在用“.1”(或者其他数字)除以10时,就会出错。在FORTRAN软件中也存在破坏数据的“Bug”。由此激起了许多采用Microsoft操作系统的PC厂商的极大不满,而且很多个人用户也纷纷投诉。

Microsoft公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对,他们固执地认为在高校学生、秘书或者外界合作人士的协助下,开发人员可以自己测试产品。在1984年推出Mac机的Multiplan(电子表格软件)之前,Microsoft曾特地请Arthur Anderson咨询公司进行测试。但是外界公司一般没有能力执行全面的软件测试。结果,一种相当厉害的破环数据的“Bug”迫使Microsoft公司为它的2万多名用户免费提供更新版本,代价是每个版本10美元,一共化了20万美元,可谓损失惨重。

痛定思痛后,Microsoft公司的经理们得出一个结论:如果再不成立独立的测试部门,软件产品就不可能达到更高的质量标准。IBM和其它有着成功的软件开发历史的公司便是效法的榜样。但Microsoft公司并不照搬IBM的经验,而是有选择地采用了一些看起来比较先进的方法,如独立的测试小组,自动测试以及为关键性的构件进行代码复查等。Microsoft公司的一位开发部门主管戴夫·穆尔回忆说:“我们清楚不能再让开发部门自己测试了。我们需要有一个单独的小组来设计测试,运行测试,并把测试信息反馈给开发部门。这是一个伟大的转折点。”

但是有了独立的测试小组后,并不等于万事大吉了。自从Microsoft公司在1984年与1986年之间扩大了测试小组后,开发人员开始“变懒”了。他们把代码扔在一边等着测试,忘了唯有开发人员自己才能阻止错误的发生、防患于未来。此时,Microsoft公司历史上第二次大灾难降临了。原定于1986年7月发行的Mac机的Word 3.0,千呼万唤方于1987年2月问世。这套软件竟然有700多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft名声扫地。公司不得不为用户免费提供升级版本,费用超过了100万美元。

 在这个微软公司故事的基础上,林锐指出:

从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。

小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。

由此来看,似乎同学的论断是正确的:我热爱编程,我要当程序员,你让我去学测试干什么?特别是功能测试,那是测试工程师的工作,与我何干?

可是,转头想想,还是觉得有问题。刘国梁,作为一名曾经的优秀乒乓球运动员,他每天也需要艰苦的训练,我相信,跑步肯定是训练内容之一,可是,跑步有啥用啊,比赛的时候又不是比谁跑得快,为啥要训练跑步呢。专门练接发球不就完了吗?道理是一样的吧。

 

于是,我又去百度了一把。看到一篇测试员的吐槽:http://bbs.tianya.cn/post-funinfo-6581702-1.shtml,恐怕这个程序员是个不做测试的程序猿吧。

还发现了可译网的一篇文章:不学测试怎么能成为一个好的程序员

这是百度的一篇文章:新手程序猿要知道的几个事。文中提到:测试,测试,测试,还是测试。测试你的代码。不要等到已经做完程序之后再来测试,否则当你发现一个巨大的bug,却不知道它来自于哪里来的时候,你会追悔莫及。还要学会自动化测试,它们的存在通常都是有价值的,它还有助于节省大量重测试和回归测试的时间。

一位程序猿关于测试的小秘密,这篇文章中提到:那我们写的代码为什么还非常容易出现BUG,明明我们写的没有问题,整天被同样的功能或者相同的问题纠缠着,心理上都快崩溃了,有的甚至认为自己是不是开发的那块料。这是为什么呢?因为我们没有掌握必要的测试技术。

而在这篇知道为什么程序员都要做单元测试吗的文章中指出:所以我希望每个人都开始使用单元测试,我甚至认为单元测试是现代软件开发人员的必备技能。当然,你做单元测试并不意味着你就是一个优秀的开发人员,但如果你不用单元测试,那么你一定不是。

觉得该说的都说的差不多了。

posted @ 2017-11-27 23:13  wujianjie  阅读(1526)  评论(0编辑  收藏  举报