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

周末布置了一个实践作业:黑盒测试实践,要求大家使用自动化功能测试工具,对一个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,明明我们写的没有问题,整天被同样的功能或者相同的问题纠缠着,心理上都快崩溃了,有的甚至认为自己是不是开发的那块料。这是为什么呢?因为我们没有掌握必要的测试技术。

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

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

时间: 2024-08-17 06:26:53

我是程序员,学测试干什么?的相关文章

我是一样说我是程序员

初中以前,从大山里走出来的我,不知电脑为何物. 高考完后,第一次跟同学去网吧看爱情动作片,才第一次接触网络,感觉网络是有点污的东西. 家里三代务农的我,那个时候对商机这个东西没有任何概念,要是知道去申请QQ,去搞网站,去做SEO,去搞域名,可能现在的我就不是现在的我了,有时候想想,时间能够倒回就好了,把现在的经验给以前的自己用. 第一次高考,其实未达到二本线,其他学校也没有多想,向贫困的家里强烈要求复读. 进了瑞金一中复读,果然教学质量非常好,在自己努力和老师的教导下,从刚进入复读班的倒数第几名

郑漂一族,我是程序员,我的未来我做主

程序员,在外人看来不是很好的工作,熬夜加班改bug,一脸青春痘一头枯发,不,你错了,每个岗位每份工作都有自己的不好,程序员的困扰只有bug,需求,外加产品经理的梗.我是一名程序员,在郑州为自己的梦想奋斗. 作为一个程序员,一个码农,我的生活过得平淡无奇.前段时间去医院看一哥们,曾经的大学同学也是好久不见,见面之后自然少不了问工作的事情,同为程序员,每天上班打码下班对着电脑加班,本来每天八小时的工作不算长,在郑州这样的二线城市也是月月光,虽然没有大城市的高昂的租房费,但是消费水平也很高,收入不高的

.Net程序员学用Oracle系列(1):导航目录

原文:http://www.cnblogs.com/hanzongze/p/oracle-catalog.html .Net程序员学用Oracle系列(1):导航目录 .Net程序员学用Oracle系列(2):准备测试环境 .Net程序员学用Oracle系列(3):数据库编程规范 .Net程序员学用Oracle系列(4):四个基本概念 .Net程序员学用Oracle系列(5):三大数据类型 .Net程序员学用Oracle系列(6):表.字段.注释.约束.索引 .Net程序员学用Oracle系列(

[转] Java程序员学C#基本语法两个小时搞定(对比学习)

Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Per

我是程序员,我要妹子!

要说博主最早知道计算机,那是在比尔盖茨成为世界首富的时候.博主当时欣喜的看到老比富可敌国的风采,以及大大的微软logo,觉得这个外国人太牛逼了,一个看不见摸不到的产品(windows系统)就可以积累大量的资产.尤其是当时新闻报道对老比的儿时经历大肆宣传,什么智商超高,什么十几分钟就看完一本杂志而且清晰的记得文章信息,什么能完整的背下来几万字的圣经,真是让我确立了当时的崇拜对象.也因为这样,博主的高考志愿毅然决然的选了软件工程. 大学时代是真正意义上了解IT,我们那会的学习编程语言也比较混杂,C,

CSharp程序员学Android开发---3.Android内部元素不填充BUG

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C# 程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序

09应用输入管理器转动场景--《程序员学Unity3d》

为什么极品飞车等等游戏,都可以通过系统设置很方面地根据自己喜欢设置操作方式,有人喜欢用箭头来控制没有喜欢用用"W,S,A,D"来控制,这就说明了程序员不会把控制方式写死在程序里面,来看看Unity3d如何让用户可以随时修改"快捷键". 优点:不仅方便后期维护,也可以减少很多代码. Edit --Project Settings -- Input 打开输入管理器 前面17组是系统配置的,可以修改或删除. 将Size改为18,新增一组.(名称为Test,对应按键为 a)

PHP程序员学Objective-C之后的变化

趣味坎谈,不一定100%准确,以自己的实际情况为准; 如题,我2008年开始学PHP,PHP是我学的第二门编程语言,一直用到现在,2010年初开始做iOS开发,学习了Objective-C,学这2门语言之间间隔了2年; 最近翻到了2008-2010年之间自己写的PHP代码,结合现在的项目编码风格,总结变化如下:; 1.现在喜欢用又臭又长的类名,方法名,参数名,只要写的不够长,怎么都要想办法补充到很长,所以现在写PHP就非常依赖能自动补全的IDE(被xcode宠坏了),因为真的很长; 以前用php

CSharp程序员学Android开发---2.个人总结的快捷键

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C#程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序员