忙了很久,终于有点时间来写写自己的对于目前软件测试技术发展的看法了。

前段时间,一直忙于各个外包项目的对接,也接触了很多客户,做技术的人在一起聊的肯定基本都跑不了技术范畴,尤其现在很多人关注的全栈测试、敏捷测试、TestOPS等等,一听,好多时髦牛B的专业词语。

软件测试这个行业,我从2003年开始接触,至今已有16个年头。从起初的纯手工,到现在遍地都谈的自动化测试,发展还是挺快的,作为一个快40岁的人,紧跟时代潮流,还是有点累的:)

记得刚开始做软件测试的时候,就是纯粹的手工测试,号称点点测试,每天的工作就是配置好要测试的系统,然后根据软件的实现来验证,基本不写计划,不写用例, 测试环境都是与开发环境一起的,毫无质量监控可言,不过,也就这么过来了。在我的印象中,这种情况从2003年持续到2005年,那个时候,想学点更深层次的技术,挺难的。一是,行业没太多这么高的要求;二是,没什么渠道可以学习。

2005年,到广州工作后,接触了TestDirector、QTP、LoadRunner,当时工作要求,测试管理用TD,Web自动化回归用QTP,性能用LoadRunner,比如论坛,美食频道以及播放器等,逐步技能丰富了,要求高了,但是仍然没有对编程有太多的要求。比如Java编程,C语言、VBS也是因为测试工具需要用到,那个时候能够把测试工具玩得还可以,都可以称为“大神”,小白都这么理解。那时候我也热衷在各个群,论坛活跃,帮助别人,被别人称赞,也是一种荣誉,说到底,还是虚荣心,关键是还能遇到爱学好问的女测友:)

2007年进了华为,测试广东移动Boss平台的时候,发现华为不少的测试工具是自主研发的,可能很复杂,也可能很简单,比如EXCEL数据对比工具。那段时间的工作感觉,能够自定义开发测试所用的工具,感觉是极好的,但并不是大家都能搞定的。

软件测试

从此,我对软件测试工作有了一个全新的认识,用现在的话就是,以前的技术都是渣渣。不过从整个行业来讲,我个人感觉,还是没什么太大变化,但从技术而言,当时所用的,也是历史就有的,只是自己不会而已。

但从2009年以后,市面上流行出来的技术术语越来越多,我不知道是不是随着离岸外包越来越多的缘故,还是所谓的技术大咖故弄玄虚,各种奇形怪状的技术语言都出来了,比如探索测试、穿透性测试、玻璃盒测试等,我不是否认这些术语背后的测试意义,我只是不理解为什么一些相对通俗的技术,非要起一个比较唬人的名字呢?

从2014年移动应用飞速发展,敏捷开发大行其道,随之而来的各种测试术语很嚣张,什么敏捷测试、全栈到现在的TestOPS等,听上去很牛,很玄,但究其本质呢?

行业对测试人员的能力要求越来越高,这是IT行业发展趋势,是正常的。大型优秀的企业,也会因为其业务的复杂度,需要构建复杂高效智能的技术框架,这点是无可厚非的,但我不理解的是,为什么现在测试工程师在学习,进化的过程中,非要研究那些高精专的技术呢?

10多年来,我对软件测试技术发展的理解就是,在以后相当长的一段时间内,软件测试工作,仍然是劳动密集型工作,仍然需要测试工程师充分发挥自己的主观能动性,而不是依赖这样那样的测试工具或者框架,我们在学习、研究的时候,不要忘记了工作的本质,舍本逐末的想一步登天。

为什么这么说,其实是我看着目前行业内,有太多的人觉得自己不聊点、不靠点流行的概念,都不好意思说自己干IT工作了。以TestOPS来说,从技术发展来看,完全是从DevOPS延伸出来,就像敏捷测试的诞生一样。

DevOPS:我查到的解释是:DevOps是一种软件工程文化和实践,旨在统一软件开发(Dev)和软件运维(Ops)。DevOps运动的主要特点是在软件构建的所有步骤中极力提倡自动化和监控,从集成、测试、发布到部署和基础设施管理。DevOps的目标是缩短开发周期,增加部署频率,更可靠的发布,与业务目标紧密结合。

把开发人员、QA、运维人员的工作要求、技能的交集部分,定义为DevOPS,一句话,就是将开发人员的技能要求再提升两个档次

软件测试
图片来源于网络,侵删!

 

TestOPS:与DevOPS相对,期望TestOPS工程师,把测试、QA、运维甚至开发人员的工作要求、技能的交集部分,定义起来,希望测试工程师具备这样的技能,我的天,要求太高了。

软件测试
图片来源于网络,侵删!

 

就上面的TestOPS构成图,朋友们可以看看,这个要求很高,不是说不能做到,而是不是人人都能做到。

我们每天都在接触新的事物,都在学习新的知识,但是我们要知道哪些是目前能够解决现实问题的知识,哪些是可以扩展的,而不是每出现一个新的事物,我们就义无反顾,逼迫自己去追随。

目前的软件测试行业,我个人觉得,仍然手工测试为主,自动化测试为辅,手工测试是基础,是自动化测试思想的源泉,如果这个基础都没有,根本谈不上未来的测试开发、全栈、TestOPS等等。立足眼前,才可能有未来。

我不是在批判现在流行的技术或术语,而是期望朋友们能够理解、识别这些概念的本质,理解了本质才有明确的判断,才有明确的方向。

以我的理解,软件测试工程师的核心技能可以下图来表示:

软件测试
测试核心技能

 

图很简单,要说的也很简单,理论是必须要学的,传统的软件工程理论、流行的敏捷开发流程,在这个基础上,一定要从基本的手工测试活动开始,不断提炼,深化思想,有了优化的思想,再去实现对应的思想,才会有这样那样的技能,比如selenium自动化、Appium自动化、接口自动化等,当然,我仅仅是从技术本身来讨论。

目前软件测试技术中,从51job,中华英才等招聘平台看到的测试开发工程师岗位要求,看到的主要要求如下:

1、测试理论;

2、开发语言能力:java、python、R语言、C++等;

3、数据库技能:Mysql、Oracle、MangoDB、Redis等

4、操作系统:基本都是Linux方面的;

5、测试工具:商用ALM、UFT、LoadRunner,开源:Selenium、Appium、JMeter、PostMan等

6、持续集成:基本Jenkins比较多;

7、容器:Docker等

还有其他技能,就不一一列举

一看这么多要求,想做一名合格的测试工程师得多难,掌握的技术,其实不亚于软件开发人员了,要求真的变高了很多。

但我想说的是:

1、这么些年来,软件测试的本质核心并没有太多变化,不要被那些唬人的术语吓到,即使真的那么复杂,至少90%的测试工程师无须担心;

2、不要因为这些变化,我们乱了阵脚,担心未来自己的职业发展,学习是个持续性的过程,把握学习的核心即可;

3、我们既然无法一口吃成一个胖子,那就围绕一个主题,逐步增肥,但要的是肌肉,而不是脂肪;

4、现在的技术太多,不要堆砌一堆无用的技能,时间是宝贵的, 定位好自己的方向,再专注学习提高

针对已经从业或即将从业软件测试的朋友们,我的建议是:

1、软件测试基础理论必须奠定好;

2、从软件测试的目的--发现缺陷这个本质着手,规划技术体系,然后逐步学习;

3、虽说技多不压身,但是学习这些技术是有时间成本的;

4、以眼前需求为切入点:学习Python的紧迫性要高于学习JAVA、C++等语言;

5、不要纠结于这样那样的框架,记住,所有的框架都是虚的,思想最有价值,思想怎么来,通过功能测试来;

6、不懂编程、不会编程别谈什么单元测试,仅会一些工具是远远不够的;

7、解决眼前工作中的问题是老板关注的,你的其他想法与他无关,所以,你的核心目标是伺候好你的老板,因为他舒服了,你才有梦想。

结束语

写完了,自己才觉得写的什么乱七八糟,这感想怎么来的?

源于目前很多的朋友问我什么是全栈,什么是TestOPS,也有朋友在研究,可惜都没有真正落地的,BAT、京东这些一些的企业已经在实施,可惜我们大部分人都进不了。立足眼下是现实的做法。

测试行业其实是浮躁的,正如频发的“割韭菜”现象,我期望的是踏踏实实的做技术,而不是跟着噱头浪费青春。