如何入门测试开发?

在知乎上看到这个话题,想到自己也是半路出家转岗过来的,分享自己的一点看法,希望对大家有所帮助。

这里我参考 Google 对测试开发的定义将之称为 SET(Software Engineer in Test),纯开发称为 SWE (Software Engineer),业务测试称为 TE(Test Engineer),后面则用简写来描述。

我相信完全没有代码基础和测试基础的纯粹零基础想要入门 SET 的应该非常非常少,如果真的有,那么我的看法是这个岗位入门很简单,学一门开发语言,再学一点测试理论就算入门了

如何入门测试开发?

问题真正想了解的应该是,测试开发到底在做什么?而我应该怎么做才能拿到这个岗位的 offer?

如果对测试开发不甚了解的话,可以先看看我之前写的文章你真的了解什么是测试开发吗?

Basically,SET 是一种具备开发能力,并用开发技术去解决业务代码测试并提高测试效率的岗位

跟 SWE 相比,开发能力不一定弱,只是代码侧重点不同。SWE 更多是参与公司业务代码的开发,而 SET 则参与测试平台,测试工具,测试代码开发,两者在代码的要求上是不一样的。这也决定了平均而言,SWE 在代码的性能,安全性,架构设计上比 SET 更加深入。

在软件测试方面,SET 更注重的是代码级的测试,对白盒测试理论了解得更多,并且对单元测试,接口测试,自动化测试的方法及其测试框架用得更多;对测试数据的构造,MOCK 的方法和框架也颇为熟悉。

由于工作内容兼具开发和测试,因此转岗做 SET 的情况比较常见。比如某个 SWE 对测试更感兴趣,或者某个做自动化的测试想突出一些开发的工作。

SWE 转 SET

由于已经具备了一定的开发能力,了解软件开发过程等基本内容,因此需要加强测试相关的技能。

这方面包括但不限于单元测试,接口测试方法,以及它们常用的测试框架。

比如 Java 单元测试常用的 JUnit,TestNG。

如果是接口测试,开展测试的前提是对业务系统的了解。这要看你的业务场景是什么,如果是 Android,那么这里的接口指的是 API 接口;如果是 Web,那么是协议类接口。

测试接口时类似于写一个接口使用指南的 sample code,但比 sample 更加复杂,因为要考虑到数据的构成,接口使用的极端场景,健壮性,安全性等多个方面的内容。

所以说,测试技术并不是某些人口中的“点点点”,这太肤浅了,完全不懂测试的人才说得出这种言论。测试跟开发一样,也是一门很科学的技术,有着强大的测试理论做支撑,例如这本机械工业出版社《软件测试的艺术》,里面提到了软件测试的核心:“软件测试的心理学和经济学”,“白盒,黑盒测试用例设计”,“自顶向下测试,自底向上测试”,“极限测试” 等等。

只有掌握一些测试理论性的内容,才知道如何对测试工作进行设计,就像软件工程的 GoF 面向对象的设计原则做架构设计那样,而不只是凭感觉。

TE 转 SET

这里的 TE,前提是接触过完整的测试流程,例如从需求评审,测试需求设计,到测试用例设计,测试执行,测试结果分析等,对软件测试流程是比较熟悉的。

因此重点学习的则是开发技能。这需要先了解本公司的业务,产品是以什么语言开发为主。我相信国内还是以 Java 为主,这可以从拉勾网的数据上来看,到目前为止,需求量更大的还是 Java,所以首推它而非 Python。

尽管 Python 学起来的确很简单,有非常多第三方库,也能做大的工程开发。但从 SET 的角度看,应当首先以产品上的业务代码为自己的语言选择方向,让自己能尽快融合到公司业务中,而不是考虑用什么开发更简单。毕竟 SET 的工作职责是去覆盖 SWE 代码的质量,而不是自己去开发某个产品。

编程语言就是为逻辑而服务的,学语言的目的是能应用起来,所以学习语言的同时思考如何把手工用例自动化,是一种快速应用所学,展示成果的方法,也是 TE 转 SET 的入门之路。

同时,还要学习一门脚本语言,这里我推荐 shell。脚本语言的强大之处是显而易见的,在快速开发一个效率小工具上非常有用,而且依托系统平台提供的现成的工具包(grep,sed,awk等),能轻松专注在业务逻辑上,而不用在细节里纠结。

一门高级编程语言搭配一门脚本语言,已经是 SET 的标配了。

更多关于测试开发

SET 除了开发测试代码外,还要参与测试平台的建设。

比如服务端平台,要做一个监控系统,那么要掌握后台服务如何开发。

比如移动端平台,要做一个测试工具类 APP,那么要掌握 APP UI 开发。

虽然 SET 的开发技能要求没有 SWE 那么深入,但基本功的要求却完全不低。比如会考察算法,数据结构,数据库,JDK 的源码等。

另外,应该不断地灌输和培养自己提高效率,提高自动化的思维和意识,SET 之所以有存在的意义,不仅仅因为他能做业务测试覆盖不了的测试场景,更是因为他在编码目的上跟 SWE 思考的路径不一样,他要解决很多软件效率的问题。

看起来这也要会,那也要会,对入门者着实是吓到了,这些是一个高级 SET 的要求,作为入门或者进阶的话,先考虑把前半部分的内容练就扎实,其他的在工作中一点点积累,在工作外多学习。牛叉的 SET 或者 SWE,没有哪一个只是因为工作内容就能如此强大,少不了工作之外的努力和钻研。



留言