软件测试者入门

近几年来,随着软件产业的发展,有越来越多的同学加入了软件测试的行业.软件产业一直被认为是所谓的"朝阳产业",但软件测试的岗位却又往往成为这轮朝阳的一缕余晖.我认识的很多人都是在欲做开发而不能的情况下才勉强委身于测试,而且在从事软件测试工作一大段时间后仍然认为软件测试只是小女生该做的事情或者把软件测试仅仅当做是一个踏板――一个通往开发或者管理岗位的过渡.
事实是这样的吗 软件测试到底是一项什么样的工作 软件测试者又应该如何规划自己的职业生涯 为解答这些问题,我根据自己从事软件测试工作几年来的经验作了这份总结,希望能给大家带来一些小小的帮助.
一,简介
本文 容与目的
如上所述,本文是一份我对自己多年软件测试工作的总结.在这份总结里,我想讨论以下的问题:
软件测试人员到底干什么;
如何才能做好软件测试的工作;我们需要那些知识和技能.
软件测试人员有哪些职业发展途径;软件测试人员应该如何规划自己的未来.
在本文的末尾,还附录了一些与软件测试有关的书目.
本文适用的对象
本文主要是面向刚刚参加软件测试工作的同学,因为这些同学对软件测试的岗位与这个行业还不是很清楚,属于大家所说的比较好"忽悠"的类型.不过我很希望有着多年软件测试工作经历的朋友们也能赐读本文,提出你的意见,并与大家分享你的经验.
不管如何,敬请大家权当本文为一块板砖,如果你觉得不错,请不妨献出你的玉来帮助大家共同提高;一旦本文使你看着心烦,也就恭请您大驾拍砖了.
二,软件测试者何许人也
中学的时候看过一本书上讲,人要么做专人,要么做博人.意思当然是说如果一个人知识领域有限,则必须专注;如果一个人不能在有限的知识领域专注,则他的知识领域必须足够广博.呵呵,经过我这些年的经验,我发现很多人恰恰认为软件测试这个行当既不需要精,也不需要博――这真是天上掉下来的好工作啊!
是啊,同开发人员比较起来,我们软件测试者确实不需要钻进某个系统的函数内部,也不需整天和队列,内存等等枯燥的东西粘在一起;同软件架构师比较起来,我们更不需要了解金融和财会等行业的知识, 也不需要知晓传输和通讯的协议.我们需要做的仿佛就是每天坐在计算机前面,不停的敲敲键盘,挪挪鼠标,哼着小曲儿寻找软件的bug而已……
真的是这样吗 在软件测试人员的队伍里肯定会有这样的幸运儿,但肯定不会是我们中的大多数,否则,这么好的差事怎么会轮到你我的头上 嘿嘿,如果真的这样,说不定软件测试者也可以自称为公仆了.
事实恰恰与之相反.要成为一名合格的软件测试人员,不仅要专,而且也必须博.道理不用多讲,仅举一例足矣.不知大家是否看过美剧《Prison Break》 剧中的Michael Scofield履行的其实非常类似一名软件测试者的角色――永不停息地在戒备森严的Fox River监狱里探寻着系统运行的规律,寻找着其中存在的种种缺陷,甚至于偶尔还进行一些类似于Stress Test 和Code Injection的非功能性测试(仅基于第一季的剧情).如果他对建筑技术不够专业,他能够在错综复杂的管道中找出通往自由的途径吗 或者他的知识不够丰富,他又焉能在搔首弄姿之间俘获Sara的芳心
要想成为一名优秀的软件测试者,就要向Scofield看齐!看齐的前提我们必须具备一些基础的知识和掌握一些基本的技能.
三,基础知识与基本技能
所谓基础,base也;所谓基本,basic也.
基础知识
跟软件精英们谈基础,恍若对公明仪谈牛――有谁不知道软件学科的那些基础知识呢 不就是数据结构,编译原理,操作系统etc吗
这当然是不错的.所以我们这里也不再跟大家谈牛了.我们要谈的是软件以外的东西:哲学,数学,逻辑 and 文学.
谈哲学,是因为它能提供给我们一整套观察世界和认识世界的方法;提供给我们一篮子思考问题和解决问题的法宝.
客观世界是复杂的,计算机的世界也是如此.尽管在计算机的内部一切都简化成为0与1的序列,但哲学却恰恰告诉我们,简单的东西往往更为复杂.就像下面这个简单的函数
int max(int I, int J)
大家测试它时,都知道一个测试用例是不够的.有很多复杂的东西都隐藏在这个公式简单的形式下面.什么能帮我们找出其中的奥妙 什么能帮助我们揭示个中的联系 什么又能帮助我们认识这整个世界 It's philosophy!
说数学,是因为它给我们提供了最简洁,最方便地描述这个世界的语言和工具.哲学让我们在简单中发现复杂,而数学却又帮我们把复杂归于简单.还如上面的函数
int max(int I, int J)
正是拜数学所赐,我们不需要将上面的函数验证成千上万次!边界值的确定,等价类的划分,都能把我们从数字的汪洋中拯救出来.是数学,让人类的大脑无需在大自然面前感到自卑.
学逻辑,是因为它让我们的思考更缜密.对于软件测试者而言,工作的本身仿佛只有两个方面:Pass or Fail.但在这Pass or Fail 的后面则是无穷无尽的Yes or No,是无尽的比较和判断――软件的实现符合设计的要求吗 软件的设计符合用户的需求吗 用户的需求能得到充分的满足吗 如果一名软件测试者不能掌握这环环相扣的逻辑链条,工作起来会很累,很苦――我说的是不仅仅是他本人,还包括他可怜的同事们.
习文学,是因为它给我们提供了一种长久有效的表达我们思想的方法.嘴上说的不录下来不足以长久,但录下来的则不利于交流.所以我们需要写作,写测试计划,测试用例,测试报告,必要时还要写要钱要人的请示.如果没有两把文字上的刷子,则要么写的驴唇不对马嘴,要么写的除了你懂大家都不懂.文学修养的提高,不仅仅是对文字表达有所裨益,它对口头交流水平的提高也大有帮助.而交流和沟通技能对软件测试人员而言则是一个大大地要求.
基本技能
要生存,就要有求生的本事;做测试,也要有测试的技能.出来混,迟早都是要还的;金刚钻不硬,瓷饭碗就有可能破哟!
测试人员第一技:硬件要硬
"硬件不硬,荆轲没命."
看官们可能感到纳闷,怎么没头没脑的来了这么一句 事情的起因是这样地:近日来,一位同窗一直向我推荐《荆轲》一书,偶不读.偶认为荆轲是在一个大失败者,行刺之人反被人刺,失败啊!不过荆轲失败的根源是什么呢 偶之同窗没有告诉偶,但是我可以告诉大家,那是因为荆轲硬件不硬!
荆轲的硬件是啥 荆轲做的是刺客,他的硬件就是杀人!可是他见了秦王,献了督亢的地图,奉了朋友的首级,与秦王也已经近在咫尺了,却没能将其手刃,看来是他杀人的本领不行.硬件不硬,荆轲没命.(当然有人也将荆轲失手怪罪于秦舞阳,我未能对此细细考究,恕暂不考虑)
要活命,硬件硬!对荆轲如此,对我们软件测试者也如此.但是我们的硬件该是什么呢 现在我们暂时对此先不展开.笼统言之,软件测试者的硬件,就是各种软件测试的技能.至于到底有什么技能,我们下文会有细细描述.
言归正传,我们还是回到荆轲刺秦的事情上.假如历史可以重写,我希望故事的结尾是这样的:
"大王你来看",随着荆轲手指的移动,赢政那硕大的脑袋("硕大"未经考证)慢慢伸了过来."哇!这都是朕的啦!将来分给谁好呢 苏儿还是亥儿 "秦王看着即将到手的燕国膏腴之地,不仅想入非非,垂涎三尺.哟,不好!秦王的口水怎么是红色的呢 等到大家缓过神来之际,才发现大王的颈部大动脉上不知何时挂上了一把短剑.大殿上一时间仿佛真空,卫士们顿时呆若木鸡.
"哎哟,荆轲你这个挨千刀的!你真扎啊!"原来是赵高哭喊着扑向了荆轲.突又听得"扑"的一声,赵高瞬间倒地,背上插着刚刚还在秦王脖子上挂着的短剑.原来竟是荆轲百步之外飞刀夺命."啊!一世六合霸主丧命,只怪荆轲硬件太硬."随着赵高临死前声嘶力竭的呼喊飘散出大殿,一切又归于沉寂.
测试人员第二技:善于沟通
讲完刺秦的故事,我的表已经跑到1:35AM了,看来我们真得言归正传了.下面我们谈谈软件测试人员的第二项重要技能,是为"善于沟通".
沟通的重要性自不待言,去餐馆吃饭点菜不就是一种沟通吗 我们所关心的是软件测试者在软件测试工作中所需要进行的沟通.
软件测试人员首先要善于与相关的开发人员,设计人员甚至市场人员以及客户进行有效的沟通.大多数软件的生产都不是由一个人单独完成的,软件测试人员只是生产团队里面的一部分.我们必须要和开发人员保持有效沟通,以其充分了解软件的实现方法;我们必须要和设计人员保持有效沟通,以其充分了解软件的设计目标;我们还必须和市场人员以及用户保持有效沟通,以期知晓软件的功能是否可以满足他们的需求.若不如此,闭门造车似的软件测试带来的只会是为软件测试人员自己设计,实现的软件,而不是为市场,为用户设计,实现的软件.
另一方面,软件测试人员还要注意同其他测试人员进行交流.若要取长补短,首先就要知人所长,晓己所短.但囿于每个人都有自己的思维习惯和观察问题的方法,自己都很难发现自身的不足.同其他的软件测试者的交流,则可以大大的帮助我们改正不足,发挥所长,取得不断的进步.在此,鄙人十分卑劣的王婆一下,希望大家能到俺的瓜地 www.homeoftester.com 留几个尊贵的脚印.这个论坛我已经开张快半年了,but unfortunately, 在那里注册的用户90%以上都是印度的GG\MM.呜呼,世间之不幸甚莫大焉!
测试人员第三技:英语
上面我们已经讲过沟通很重要,因此英语就会很重要.为甚 因为我们在软件测试工作中,不得不经常使用英语进行交流与沟通.英语已经成为了不争的计算机届国际通用语言.大部分MSDN的文章是英文的吧 大部分Google Search的页面是英文的吧 大部分开发或测试的论坛是英文的吧 大部分计算机论文是英文的吧 大部分的狂人,牛人也是讲英文的吧
离开了英文,软件测试者就会缺了一条腿.爬不快,也爬不稳.
另外一些不争的事实也表明,我们中国人学英语难度很大,一方面是语言环境不相宜,另一方面学校的教育方法有问题.但是,学英语毕竟不是"非不为也,是不能也"的难事.只要肯下功夫,方法得当,英语至少还是可以被中国人学得懂的.
从我个人的经验来看,要学英语,不要study, 而是要learn.;也就是不要研究英语,而是学习英语.通过模仿别人来学习.平时对看些英文原版的技术书籍,多到英文的论坛(比如非常好的 www.homeoftester.com )灌灌西洋水,多听听英语的广播和歌曲,甚至可以多玩玩英文原版的游戏.刚开始时候可能会有些许的不舒服,但是时间长了,耳濡目染,你肯定能会和英语暗送秋波,互生情愫的.
测试人员第四技:创新能力
前人开辟的道路,迟早要走到尽头.树立了远大志向的,从事软件测试的中青少年们当然不会自甘在路的尽头止步,更不会甘心永久的尾随.我们不仅要持续的进步,我们还要突破前人和自身.这突破来自于创新.
从石斧到铁斧,从铁斧到锯子,再从锯子到电锯,这所有的变化都来自于创新.软件测试就是寻求变化的工作,这是一项不太适合守旧者的工作.不能创新的人,每天只会读完一遍Spec后,再去读一遍Spec;或者每天做完一边测试用例后就再去运行一遍测试用例.这样日复一日的,就算是这样的仁兄们不烦,计算机也烦啊!
优秀的软件测试人员,必须要懂得如何创新,如何使AUT每天都面临来自于自己不同的挑战.在每天征服bug们的战争中,老态龙钟的case大可以丢到一边,新的idea随时都要参战.只有这样,软件测试才不会让我们的计算机们不觉得枯燥,才会让我们的测试生活色彩斑斓.
那么究竟该如何去创新呢 这可是个大命题,我们在这里不能详细的讨论.不过只要我们记住最重要的一条就足够了,那就是――让自己每天都是新的,做新人!
测试人员大补丸:自我学习
刀不磨要生锈,人不学要落后.如果放弃了自我学习,优秀如软件测试者的精英们也会逐渐落伍的.自我学习就是永葆我们测试事业常青的大补丸.
那么该学什么呢 答案当然要根据每个人不同的情况而定.但是generally speaking,结合我个人的经验,我认为以下几个模块是需要不断的充电的:
1.英语. 因为英语不是我们的母语,我们也不生活在国外,所以英语必须持续的学习和锻炼才能不至于退化,且有所提高.
2.专业技术.包括编程技术,测试技术以及新兴的软件领域知识.
3.People Skills.怎样说服别人,怎样领导别人,甚至怎样求得加薪,这一切都要通过学习和锻炼People Skills才能获得答案.
4.法律,经济,哲学,金融 等等你感兴趣的或者是与你工作行业相关的的任何东西.(呵呵,废话啊)
四,软件测试者的进阶途径
一个软件测试者的职业生命是一个不断进化的过程.从刷盘子开始,到或成为大厨,或成为老板娘结束.充满了艰辛,也充满了奋斗!
从小虾米变成小鱼
大部分软件测试人员的职业生涯是从小虾米开始的.小虾米爱在水里蹦啊跳啊,对周围的一切充满了好奇.但是为了保证在蹦蹦跳跳的时候不会呛水,小虾米们也必须学会虾米功,这门武功包括以下要领:
熟悉软件的生产周期
理解为什么要做软件测试
懂得常见的测试术语和流程
掌握基本的测试技术
掌握分析软件测试的成本与收益的核算方法
懂得如何根据测试用例对一般软件的功能进行测试
能够搭建常见的测试环境
懂得自动测试的基本知识
这些都是软件测试者入门的基本功夫,是基础,所以很重要.根据我的经验,对于软件开发和测试,大部分人都有一定程度的体会.但是好多人对分析软件测试的成本和收益的核算不太感冒,有的甚至根本意识不到这一点.这一点其实也是很重要的,一方面软件测试也是企业生产活动的一部分,其目标也是最求利润的最大化;另一方面只有对软件测试的成本和收益有了深刻地了解,以后才能准确地制订进度,评估效果以及控制风险.
在小虾米完全掌握了虾米功后,他的功力就会更上一层,变成了小鱼儿.
从小鱼变成大鱼
虾米变成小鱼后,他们就能一口气游得更远,看到更多的海底世界的奥秘了.终于在海底的一个火山口旁边,小鱼们又发现了能使他们升级为大鱼的神功――小鱼功.小鱼功的要领如下:
懂得使用黑盒测试的技术设计测试用例
了解如何使用系统的手段高效率的在软件中找到软件缺陷
掌握中级功力的软件测试设计方法,例如功能分析,用例驱动,等价类划分,边界值确定,状态机转换,决定节点测试,语法测试等方法
另一方面,知道如何开发和使用测试工具,通晓软件测试的流程,能编写常见的软件测试文档
练习这些功夫还是比较枯燥的,但是不经历这个强尾健鳍的阶段,小鱼就不可能经得起将来的大风大浪,更不可能游的远,窜得快.一旦小鱼精通了上述要领之后,他就会鳍鳞丰满,变成大鱼了.
从大鱼变成鲨鱼
在没有变成大鱼之前,小鱼一直在想成为大鱼后的风光.是啊,尾巴长了,鳍也更有力了,到中流击水,该是件多么惬意的事情啊!可是在变成了大鱼之后,原来的小鱼才发现:"TMD,作大鱼也这么辛苦啊!"
唉,没办法的事情,力量越大,责任也就越大.人家蜘蛛都明白的道理,咱能不明白吗 不过摆在大鱼面前的道路确实也多了.
一条是通往自动化测试礼堂的,一路上大鱼必须学会:
基本的自动化测试技术:录制\重放,脚本代码,数据驱动等等技术
基本的测试数据处理能力:使用Excel处理数据,使用系统脚本进行任务的批处理,使用VB Script, Perl等脚本语言编程或者使用SQL数据库进行大量的数据处理
基本的白盒测试技术,例如代码覆盖
设计开发测试工具的技术,并能熟练掌握C++,C#, VB等高级编程语言
第二条则是通向非功能性测试的花园,在这条路上,大鱼必须练成一些的杂派的功夫,诸如回归测试(Regression Test),性能测试,压力测试,安装测试,安全测试,本地化能力测试及兼容性测试等非功能测试的方法.
第三条路则看不到尽头的,一路上大鱼要学会如何建立测试团队,如何协调测试团队成员的工作,如何激励测试人员和调解矛盾,如何估计和控制测试工作的进度,如何控制风险,如何评估测试的结果,以及如何编写和发布测试报告.
一旦某条大鱼在各条路上都能游得随心所欲的时候,他就变成了一条鲨鱼.
从鲨鱼变成美人鱼
鲨鱼在三条路上游来游去,又游去游来,日复一日,年复一年,终于有一天他觉得烦了.于是他便朝着第三条路一直游下去.通道仿佛变得越来越窄,鲨鱼也觉得他逐渐失去了曾经拥有的一些本领――牙齿不再那么锋利,鱼翅也不再那么的强壮.但是为了摆脱作为鲨鱼独孤求败的痛苦,他坚持游了下去.
终于有一天,龙王告诉他:"小子,你已经爬过龙门了,继续努力啊!"――鲨鱼走上领导岗位了!
于是鲨鱼再也不需要抓bug充饥,再也不需要写code健身了.他已经是美人鱼了.每天只需要指导一下团队,召开几个meeting,写出几篇report,事情就结束了.日子过得既happy又清闲.
美人鱼是软件测试者的最高发展境界,至少在目前的中国是这样的.
五,持续改进
黎明即将再一次来临,我的总结也行将接近尾声.往前翻翻看了看,我对自己的成果真得是很满意,但是我相信您或许不愿苟同与我,所以相信未来我一定还要提高.
希望朋友们能参与提高本文质量的工作,把一篇大忽悠变成对刚刚加入软件测试行业的同学们更加有用的东西.
请不吝赐教!
六,祝福的话与声明
祝福大家什么呢 还是祝大家能够喜欢上软件测试行业吧!无论是朝阳还是余辉,软件测试总是一份充满的挑战与惊喜的工作.爱上它,让它把你的生活装满欢乐!
最后是我的免责声明,我对此文造成的一切后果不承担任何责任.
还有我的版权声明,我对此文的一切权利予以保留.
本文可以任意传播,但是不经作者本人(也就是在下)同意,请不要做任何改动.
你阅读本文即代表你接受了本文附带的所有约定.
附录
要读的书
哲学
冯友兰《中国哲学史》;罗素 《西方哲学史》;黑格尔《小逻辑》;任意本你喜欢的《自然辩证法》
数学
Victor J.Katz《数学简史》(英文影印版);Thomas L.Pirnot《身边的数学》(英文影印版)
英语
《剑桥商务英语》;《走遍美国》;在线英文广播,如BBC, NPR等等
软件测试
Elfriede Dustin《Effective Software Testing: 50 Specific Ways to Improve Your Testing》
Cem Kaner 《Lessons Learned in Software Testing》
James A. Whittaker 《How to Break Software: A Practical Guide to Testing》
Marnie L. Hutcheson and Cem Kaner《Software Testing Fundamentals: Methods and Metrics》
以及相关的计算机技术,编程语言书籍
其他
萨缪尔森《经济学》;任意本你喜欢的《会计学原理》;,[德]黑格尔著,朱光潜译《美学》;黄仁宇《中国大历史》;吴思《血酬定律》;呵呵还有《小王子》以及其他(
本文为1.0版,更新版本可在 www.homeoftester.com 下载文最新版本

你可能感兴趣的:(软件测试者入门)