作为一个在测试一线奋斗多年的老捉虫达人,经常会被人问道这样一个问题,「转行人员应该如何进入测试领域?」
今天,我就这个问题做一个完整的回答,顺便说一下进入软件测试这个行业后持续努力的方向,供各位想转行做测试还没转的、已经转行做测试但时间不久的、刚刚进入测试领域的,这几类的小伙伴都可以参考下。对于其中有疑问的,也欢迎持续探讨。
软件测试的门槛
软件测试,作为软件研发流程中的一环,是软件研发质量的重要保证,而随着互联网产业、软件等需求持续增加,这样的人才需求也持续旺盛,因此,有越来越多的人看准这个机会想进入这个行业。一方面,这一行作为信息基础行业,有着相比于其他行业更高的薪酬待遇;另一方面,随着信息技术更多的进入我们的生活,这方面的发展前景也得到了大家的认可。所以,这一切也都不难理解。
那么,想从事这一行业,都需要做哪些准备呢?在我看来,首先要了解的就是软件测试的基本概念和思想。软件测试在软件研发流程中处于怎样的过程,软件研发的基本原理,软件测试的基本方法,这些都是需要了解和掌握的。只有清楚了这些,才能很好的认识到软件测试是怎么一回事,才能够更好的参与到软件测试工作中,进而为软件的研发质量保证贡献出自己的一份力量。
软件测试的基本概念和思想,在这里我就不展开讲了。我想讲的是,在我多年的测试管理工作中,面试了不少候选人,有很多候选人对软件测试的概念和方法都不清楚,觉得软件测试就是将需求文档中的内容点点点,确定都实现了就算测试完成,这个回答是很糟糕的。
作为软件测试行业的从业人员,我们必须清楚,软件测试是需要用基本的测试方法来保障软件的质量的。还有很多面试者,谈起测试的基本方法来是头头是道,但真的给了一个需求文档让他去设计测试用例时,就完全不管测试方法中交给我们的东西了,而是天马行空的发散起来。这种理论与实际脱钩的情况,就会让面试官觉得还是没有很好的掌握测试方法,经过他测试的软件产品的质量是不可控的,因此也会存在很大的质量风险。
只有将软件测试的基本概念、方法进行很好的应用到日常工作中,只有能将我们在候选人简历中经常看到的「熟练掌握软件测试方法」转换成真正的掌握,那在我看来才是迈过了从事软件测试行业最基本的门槛。而要达到这一点,日常工作中积极的思考测试方法与被测试软件的测试用例的对照关系,在日常使用软件的过程中培养测试用例设计的意识,都能够很好的提高自己在这方面的能力。
测试的基本技能
在迈过软件测试的门槛后,接下来就是要掌握做测试的基本技能了。这个技能,包括对被测试软件的进一步了解和掌握,对测试工作中使用的测试工具的熟悉。
在面试中,我们看到候选人的简历中提到自己测试项目的基本介绍,包括使用的语言、框架,但真正问起来,对这些都没有基本的了解,那在我们看来就是不合适的。还有候选人对自己测试的项目所在平台的一些基本常识的缺乏,在面试中也是很致命的。比如,在面试中我经历过这样的候选人,做的是移动端的APP测试,但不清楚APP测试的基本特点,需要关注哪些方面,兼容性测试怎么做等,这都是日常测试中很基础的东西,如果都不能很好的讲出来,那就会说很糟糕的。
在我们日常的软件测试中,首先要关注的就是被测试软件所在平台的基本特点,是Web的还是APP?Web类的产品有哪些特点,实现的原理是怎样的,测试过程中需要考虑哪些东西,承载Web类产品的浏览器是怎样的工作原理,做兼容性测试的时候需要关注哪些方面。APP类的产品有哪些特点,所在的系统有哪些特点,与终端系统有哪些交互,需要考虑哪些方面的指标等。再此基础上,再去结合被测试软件的需求和功能特性去进行测试用例的设计,功能特性有哪些,边界值法怎么用,等价类怎么划分,异常场景有哪些,等等。
另外,我们在很多候选人的简历中看到「熟练使用XXXX测试工具」,但真的问起来,这个工具的原理是怎么样的,都有哪些基本操作,可以辅助我们做哪些测试等,他们就不知道了。更有甚者,只是知道点哪个按钮可以产生什么东西,多问一句产生的这些东西是怎么得到的,都包括哪些信息,就不知道了。这些就比较不应该了。这样的「熟练」更多的是对最常规、最基本使用的「重复性熟练」,而非真的对这个测试工具有更深层次的了解和掌握。
在我看来,使用一个测试工具,这个工具实现的基本原理是怎样的,这个工具能做什么,不能做什么,为什么能做这些,使用过程中能给我们提供哪些数据,我们可以用这些数据做什么,如何辅助我们进行测试,都是我们在拿到一个工具时首先可以去了解的。只有对一个工具有了这些了解,我们才能在日常的测试工作中更好的、更熟练的使用,最大化的辅助我们的测试工作。
测试的能力提升
当我们对基本技能有了一定的掌握后,我们就需要进一步的提升自己的软件测试能力。
这时候对测试能力的定义和范围就可以进一步的扩大化,当我们测试一个软件时,这个软件更底层的东西就需要我们去开始接触,使用的语言、框架的特点,软件的技术架构等。这些对我们更好的了解被测试软件,发现其中存在的问题,都有很大的帮助。
对于较大型的软件,我们还需要了解整个系统的模块划分是怎样的,模块与模块间的调用关系是怎样的,调用过程中是否困难存在异常,这里的用例该如何设计,对错误处理的用例该怎么构造,软件发布上线后,对应的数据是否有上报,上报的问题反应了怎样的问题,等等,都是我们需要去了解的。
在测试工具的使用上,也对我们有更高的要求,比如能实现类似功能的同类工具还有哪些,为什么我们要用当前工具,这个工具能得到哪些信息,这些数据是怎么得到的,准确率是多少,误差是否在我们可接受范围内,我们是否需要再此基础上去做优化,如此等等。
另外,随着我们对软件测试的要求越来越高,测试的粒度越来越细,一些基本的测试、常规的工具不能满足时,我们是否能够开发出一些脚本、工具来满足我们的测试需要,我们是否能够持续用工具来解决测试中的问题,用工具实现测试效率的提升,测试深度的加强,等等。
测试的职业发展
最后,简单谈下软件测试这个行业的职业发展。软件测试作为一个技术岗,不断的提升自己的技术能力是最核心的发展要素。在这个大前提的指引下,不断的沉淀自己技术领域的积累,扩充自己在技术解决测试问题上的知识面和能力,是关键。
从这个意义上讲,软件测试工程师的发展会从解决独立需求测试的初级工程师,向能独立负责较大系统测试的中级工程师,到能完成测试体系的建设的高级工程师一步步实现前进,在这个过程中,自己的技术能力也从对被测软件的基本实现,到掌握系统架构,针对系统架构进行完整测试,从用小工具实现测试效率的改进,到用测试平台、测试体系实现一整套测试架构的实现。
测试管理也是软件测试工程师发展的一个选项,从独立跟进需求测试,到带领小团队共同完成某个项目的测试,进而到带领更大的测试团队完成包括功能测试、工具建设等多领域的提升。
总之,软件测试是一个需要不断理解行业,不断提升自我,不断思考测试对于项目团队意义的工作。只有不断的前进,自己的职业生涯才会有更好的前途和更大的发展。