文/ 曹超
大部分人是比较支持一个观点,开发转测试容易,测试转开发难。我不支持这种观点,也不反对。关键在于自身的学习积累和兴趣。
首先所谓互转,我很疑惑为什么要互转?如果你对开发不感兴趣,那就别做开发,否则哪里你都无法进步。其次,你对测试不敢兴趣,也就发现不了测试的乐趣。
国内大部分公司的开发人员对待测试人员的态度是,你们就是一群手工点点点的人,大不了用restclient测测webservice。
这样的理解还是比较片面和局限,我会定期分享一些内容,让大家更好地了解测试。
一、测试有很多方向,手工测试不可替代
测试也分很多方向,软件功能、性能、安全、界面UI和交互等都需要测试,测试工程师有足够的发展和成长空间。
首先,测试是有分工的。并不是说你做自动化测试就完全不做手工测试,手工测试你是无法摒弃的。因为它具有一定的不可替代性。至少在现在的大部分公司里是这样的。
测试是不是就只有自动化测试呢?也不是。还有安全测试等。 你说你开发写的代码,多么的强壮。对不起,可能分分钟你就被安全测试人员给干掉了。你说你写的sql 脚本很厉害,对不起,可能分分钟就会因为写的太耗时,被性能测试人员发现确诊为瓶颈而去重写。你说你写的功能很完善,几乎考虑了各种可能,那可能分分钟就被功能自动化测试人员发现了你漏掉的场景。
二、自动化测试要求高,需要你掌握开发语言
测试理论,测试工具和开发语言,是一个测试工程师必备的基础
一般情况下,我们会把自动化测试分为功能自动化和性能自动化。 方向不一样,需求也不太一样。 综合现在的公司需求,对功能自动化需求的数量多一点,性能自动化的少一点。
那是不是做功能自动化的就是写点功能测试的代码就完善了呢?其实不是的。 所谓功能自动化,有的人也会加入持续集成,也有的会加入持续发布,会加入API测试,也可能会加点webservice测试等。
我理解的功能自动化是需要你有自动化工具本身的知识(selenium,QTP,testcomplete等),单元测试的知识(testng,junit,nunit,mbunit等),框架设计知识(PO思想,类似设计模式的一些概念),持续集成工具的知识(Jenkins等)以及版本管理工具的知识(Gitlab,Github等)等。
另外,你需要掌握精通一门语言,Ruby,Python或者java,C#。 在这些大的背景知识下,你需要理解各类开发中经常用到的一些知识。 开发是开发一个软件一个项目,而测试,特别是作为一个自动化测试,偶尔我们也叫开发测试,你需要是理解开发的思想,运用工程学的思想去创建适合当前项目的一些框架进而填充框架完成自动化测试用例服务于测试工作。
项目进度紧张的时候,没有界面,你可能没法点点点。 你需要做webservice, API等的测试,有的会将这些集成到自动化测试的整个项目中,也有的会分离出来单独做。你可以同样的利用soapui去写webservice自动化的测试用例并沿用上面的思想。
三、开发和测试是产品的一体两面
测试不只是找出软件开发中的Bug,还会提出开发的解决方案,以及引入一些新技术的弥补。
对于发展终点,我能看到的测试的发展方向和开发的最终发展方向是一个终点,只是大家选择的路径不一样,每个节点的待遇会有所不同。你可以区分开,开发和测试,但是不能否认,开发和测试始终在一个团队。至于所谓的开发生命周期和测试生命周期,也是两相结合的。
当下各种新技术层出不穷,并不是所有的测试都在等着开发弄出来,然后去测试功能的,还有很多测试在和开发一起开发着,协作并发现漏洞予以修复。并不是所有的测试都是只提提bug,描述一下场景和重现步骤,给定重现条件的,还是有很多测试会提供开发解决方案,以及引入哪些新技术,新的dll或者jar能够弥补的。
人力有时穷,你想开发和测试兼顾,有点困难。 我从来不认为测试简单,若是你认为简单,可能需要你花些时间学习一下。对于多数想进入IT行业的同学来说,测试是一个相对容易和快速的路径,打好基础还是重点。
测试和开发相比,测试的开发能力弱于开发,而开发的测试能力也会弱于测试。不同的视角带来的是不同的经历和提升。
曹超老师,然学科技产品技术总监,曾任职世界500强测试经理、项目经理,在自动化测试、跨平台复合产品测试、云计算、测试团队管理等方面都有丰富经验。