].v(d;QqO"@q}P0 一不留神,毕业后在软件公司里已经工作七年多了。期间经历了民企、国企、美国硅谷小外企和大型外企,做过正规软件开发(团队规模10人以上,有产品经理、开发人员、测试人员、文档工程师,客户为Cisco,出过2个以上的版本,代码量在20万行以上),功能测试、性能测试、测试自动化、测试辅助工具开发、国际化测试、本地化测试、兼容性测试、第三方测试、测试团队管理,对软件测试的理解也逐渐深入。特写下以下文字与大家分享。
xsI:_)Be#q1hN4U08R` Yc:TF0 l、软件测试的前途
K(J,L\:y5th?%M0)_w
C}8l_Af9J4F@0 软件测试在整个软件生命周期中是必不可少的重要一环,但是其在研发体系中的重要性要弱于软件开发和基础技术研究(如搜索引擎的搜索算法,图像的识别算法,统计分析模型等),要高于大多数外围工作(如安装部署、环境搭建等),很难拿高薪,工作强度适中。51Testing软件测试网@)^&jj!mb(dW
QR
Y$y0H5Ai0 做软件测试的同学们看了这个结论可能会很不爽,难以接受,但确确实实是我在工作多年、经历了多家公司后总结出来的切身体会。重要性不是某个人或者公司领导决定的,而是尤其工作自身的特点决定的。为什么测试工程师则经常抱怨自己的工作不受重视,而很少有架构师抱怨呢?因为他们的工作内容门槛高,可替代性低,一般人把他放到那个位置上也干不了。
UQ1a%]i.u/eM:o051Testing软件测试网zm9C
n
K"F*B*`l0i 拿大多数软件公司来说,软件开发和软件测试是两个最常见的工种,拥有最庞大的工程师群体。一般来说,开发工程师比测试工程师可以拿到更高的薪水。核心开发工程师的工作内容技术门槛比较高,可替代性比较低。一个明星产品的原型,或者内核,往往也就是一两个人写出来的,Linux内
核,JBoss,Struts,Spring,Hibernate...太多太多这样的例子。虽然说一个技术原型和成功商业化的产品之间还有很大的距离,
还需要不同工种的人互相协作,但是谁在扮演更重要的角色不言而喻。毕竟,软件是开发出来的,不是测试出来的。核心开发工程师做的工作,初中级工程师根本无
法染指。
8L-}&N FgO7af~051Testing软件测试网o;~CT+vA&F9G 大多数测试工程师拿到的都是行业平均薪水,差距不大。对一个产品进行测试,80%的工作量是功能测试,性能、可靠性、国际化、
易用性等等加一起一般也就占20%。道理很简单,如果一个产品的主要功能跑不起来,其他东西都白搭。由于种种原因(如需求变化大导致界面变化大),功能测
试又以手工测试为主。这部分是技术含量最低,替代性最强,个人知识积累最少的测试工作了。今天测试产品A,明天测试产品B,就好比今天当力工搬砖头,明天
搬木头,只要力气在,搬就是了,管他搬的是什么。甲做也可以,乙做也可以,经验丰富、耐心细致的可以发现更多、隐藏更深的bug,但是不存在做不做的了的
问题。3年下来,一名开发工程师可以掌握一门编程语言,懂点设计、架构、框架、UML,或者一个人前台后台持久层全部拿下。而一名手工功能测试工程师,只
能成为某个被测试产品的使用专家,不用去懂J2EE或者.Net,Flex或者Html5,MVC或者SSH。被测产品一换,一切重头再来。51Testing软件测试网^+d;L]8C
X1c
W7Z1^ M4cWb0 测试中比较有技术含量和门槛的是测试自动化开发、白盒测试和性能测试。
@r-BbW3C051Testing软件测试网T,U9\p%P 先说说测试自动化开发。测试自动化开发主要有两种,一种是用现成的工具如QTP、WinRunner编写测试脚本。还有一种是自己用Java或者C#编写辅助测试工具。现成的工具都基于某种语言,如QTP基于VBScript,WinRunner基于自己独有的类C语言,Selenium基于Java。自己编写的工具大多用于批量数据生成、导入、处理等。而这两者归根到底还是软件开发,而且大多数是比较简单的开发。51Testing软件测试网E0V^&FA.TZ
S&^5i(aS4mw0 测试脚本很多不需要界面,是命令行程序,这样GUI开发中的很多难点就不会遇到了。
2A \;^KWT\]9f0S`k$Jx#G0 大多数是单线程运行,因为是脚本,即使是上千个脚本,只要按照顺序跑就可以了,这样多线程的麻烦就不用去处理了。
:O.~WIu4cI,S6b051Testing软件测试网/o
bFz^+d/A 不需要访问数据库,因为测试结果一般记到文件中如html文件,并以表格或者简易报表的形式显示就可以了。这样,在软件开发中的一块重头戏-持久层开发和数据库设计就不用考虑了。
sKqJ&d sx Ct)B4c051Testing软件测试网.[j2K)vYKL6y^ 如此这般,对于一般的测试脚本或者工具开发,专业的软件开发人员即使没有什么测试经验,也可以轻松上手,做得游刃有余。
'D"J.rg jQ'Rt0v;l(\
\$j\0 白盒测试是相对于黑盒测试而言的,是通过写程序来测试程序,比较常见的如测试Web Service API,测试类库提供的API。和测试脚本开发类似,属于相对简单的开发。这类活儿没有编程基础的人做不了,希望深入钻研技术的资深开发人员又不愿意做,比较适合初级开发人员来做。51Testing软件测试网6mZ['X$s;p[+}
51Testing软件测试网;| {S"^CMlI 再说性能测试。51Testing软件测试网/_khu9~ ~lnw/u#I
K
])p,dhcv&g0 性能测试的主要目的就是验证一个软件产品可以允许多少用户并发访问,性能指标如响应时间、CPU和内存占用率是多少。一般来说这种测试无法手工做,需要借助于工具,如LoadRunner, QALoad,JMeter等等。首先,在录制的脚本基础上做一些编程是必不可少的。其次,在获取到基本的性能指标值后,如何去分析并解决问题,比如调整操作系统、
数据库、中间件的参数,做个集群啦啥的,或者对程序做代码级的优化,又远远超出了测试的范畴,是一般的性能测试工程师根本做不了的,需要架构、IT工程
师、开发人员协同攻关。可以看出,一位性能测试工程师所作的脚本开发工作,对于专业开发人员来说,没有什么门槛。而复杂的测试环境搭建的工作,又需要网络
工程师、数据库工程师的强有力支持,个人难以独自应付。
.h&?pq@.?+Ea~051Testing软件测试网;JS5o:u)d2_ 国际化测试的门槛一般。核心的东西,挤干了水分,也就两三个月,包括字符集、编码、字体、Bidirectional language、时间日期货币小数点排序布局等。换句话说,一位功能测试工程师,在经过好的导师三个月的专业培训和学习后,就可以基本胜任国际化测试的工作了。这里的门槛在于,市面上介绍国际化测试的书不多,很多东西需要在工作中去一个个知识点地学习,需要老员工来带。不像对java、数据库开发进行系统介绍的书那样满大街都是。
,u`naQ0N}+^(r0~Qy7hf0
兼容性测试是典型的没什么技术含量的人力密集型工作。本人曾经做过一个月的打印机兼容性测试,上百台打印机,一个接一个放入打印纸打印,看看对被测试的
国产Linux的支持程度。或者一个产品,测试对不同数据库的支持。让我想起在上大学的假期里给人发传单时,发一次挣30元钱,谁干都可以,卖卖苦力。后
来改行写游戏外挂,一个月轻松挣3000多块,让室友们羡慕得不得了。51Testing软件测试网g.|`^]-u/e
S
51Testing软件测试网NE%OH(v!C 手机/平板电脑应用的测试。手机或者平板电脑上的应用要么是单机应用如雷电游戏,要么是客户端程序如新浪微博客户端,特点是输入少,以浏览为主。客户端程序的开发难度要低于服务器端程序,其测试难度也相应得低一些。51Testing软件测试网`.s6N5e(rJf
f8n\1_XEH0 测试的另一大不利因素是缺乏成就感。设计人员、开发人员可以出去和人说,大家用的某某杀毒软件的小狮子是我的idea,某某输入法是我开发的,某某网站是我写的,里面存在只有我知道的某某漏洞。测试人员与之相比则会比较尴尬。
.N\7hKpI6L,H3l(|00|f.F2n8D+h]0 说了这么多,绝对没有轻视测试或者刻意抬高开发的意思。每一个工种都是不可或缺和重要的。但是,他们带给工程师本身的价值增值不一样,工作时间
越长越明显。打个不太恰当的比方,开发与测试工程师,就好比医生与护士,会计和出纳。医生越老经验越丰富,价值越高,每个年代都名医辈出,受人敬仰。而护
士,除了开创者南丁格尔外,没有几个能被大家所熟知和记住的。
ow6KmRp,G3g(C0NZ5n)L5M!y0 工作内容杂、重复性高是低价值工作的一个共同特点。而这是想在职业上有所发展的同学必须要注意的一点。51Testing软件测试网eYPHRL
(P({:Pb ?(P$wy7u0 说了这么多测试工作的局限性,下面接着说说从事软件测试这个行当的好处。毕竟,包括我在内的很大一个群体都在靠这个行当吃饭,全是缺点的话,谁还愿意干这行。而且,想干好测试的话,还是需要花费一番心思的。
4|O/w%Fl N7hlgX0 xav/k-A2|W0 劳动强度和工作压力适中。开发人员的一大压力是到了deadline能否做完分配的模块。技术难点是不可避免的,没有人能百分百地保证一个全新项目能按时开发完,能解决所有的技术难题。测试要好很多,测试工作主要是量的问题,大不了加加班,不存在完不成的问题。51Testing软件测试网Ny2V vr'LN*i
g1d4y8C2O{#k
g0 技术更新周期长。不管是Flex、Html5还是Jsp写的软件界面,对功能测试人员来说区别不大。而对于开发人员来说,技术的切换则是一件比较痛苦的事情。就像被人从一个热被窝里面揪出来,再从新捂一个冷被窝。其中的辛苦,经历过的人都知道。51Testing软件测试网8K^hc;R8I
vY
51Testing软件测试网F i~ \"kX~ 技术面、适用面比较广。开发人员讲究的是深度,测试人员讲究的是广度。测试人员在换工作时,从测试 .net 产品转向测试Java产品问题不大,而对开发人员来说则是个大问题。51Testing软件测试网,Xz'T X$Y&o
G#Ib4Qw(_r0 开发人员比测试人员 ‘轴’的更多。很多牛人技术很好,但是沟通能力很差,朋友少,这和工作性质有很大关系。长期的编程造成了不少开发人员呆板的思维方式。生活是丰富多彩的,远不是只有技术。
V$T
g:}(C9_3H3o\5fD0X.z/i4E.Yrq0 2、测试团队管理
PT XCp(Q07ML+@.x)Ik+JV0 1)谁在做软件测试?51Testing软件测试网q'[7Dy w
eQ5B&z%Q0 计算机专业毕业的女同学:软件测试的劳动强度和压力比软件开发小很多,还要求耐心和细致,很适合希望干本行的科班出身的女同学
j2Lc
b;hI051Testing软件测试网 C9uA*r7D5P.K"X*U 非计算机专业毕业的同学:软件测试的入行门槛比开发要低一些,很多学与计算机相关的理工科专业(如信息系统、数学、物理、电子)毕业,甚至是当年因为几分之差与计算机专业失之交臂,同时又对此行业很感兴趣的同学转行过来
Xa*q3W9DL0Q
z WX,t#Q9~0 软件开发、售前、售后技术支持工程师转行做测试:部分软件开发工程师在工作若干年后,不太喜欢太大的工作压力和强度,希望能够保持工作和生活的
平衡,多一些时间陪陪家人。他们强大的开发背景很快就能在测试组里显山漏水,鹤立鸡群,即便开发能力在开发组中只是一般般的;部分售前、售后工程师在结婚
生子后不希望太多的时间在外地出差,希望能多照顾家庭,他们的行业知识和沟通能力对测试工作也大有裨益。51Testing软件测试网;R5]`Fm0MF~ a0R
51Testing软件测试网-f@ bp)Qn$?,z 2)测试工程师的心里在想什么?51Testing软件测试网-Z&]
Eb8?o
D)K8UC{0 每个人的需求不一样,这就需要管理人员根据每个人的需求来做工作,因人而异,才能达到最好的效果。51Testing软件测试网s*`xd0k zCUxQ
51Testing软件测试网 t;aE5x5u 有的人冲劲很足,渴望挑战技术难点,提升技术水平,就让他多做核心工作,获得成就感。
#^[#By1_)_0?njfa2N0 有的人求安稳,不求职业有多大发展,但求多照顾家庭,少加班;或者阶段性的,比如家里刚要了小孩儿,希望能多照顾家庭,就分配一些没难度的工作给他
V[+k F.TK(y(s0kV|Zu Hh0 有的在工作若干年后对测试逐渐失去兴趣,会转行做开发或者技术支持。只要有心的话,在日常工作中都可以觉察的到。
)c(Uk[:B%k051Testing软件测试网!GUcTb 3)测试的技能要求51Testing软件测试网2ld_~VKF
51Testing软件测试网~3zsz%F R+^ 编程:编程能力是一切IT相关行业的基础,尤其对于软件测试来说,编程能力和功底越高越好。这样他就可以知道开发过程中哪些地方容易出问题,发现很多纯黑盒测试人员发现不到的深层次bug。51Testing软件测试网_T9m(? n7e
`-ZFW3pO/u_S0 数据库、中间件、操作系统:被测试的系统千差万别,测试人员很多情况下需要自己搭建测试环境,在测试过程中发现问题后需要甄别是测试环境的问题还是被测系统存在bug,所以常见的数据库、中间件、操作系统都要会装会用,至少要熟练使用一种。
4K_a+r&y'KaIz0