进入测试行业也有两年半了,从一点不懂,迷惘的状态,到了现在也有些自己的理解了。常常听到有人问各种各样的问题,不同的人也对测试表达出不同的理解,甚至很多自相矛盾。比如,测试到底有没有前途,测试的待遇如何,测试与开发哪个好,哪个更重要。我们更看到有些人具有测试十几年的经验出口说“测试不需要懂编程”,可是我们又看到很多手工测试人员由于不懂编程而被公司所淘汰。我们常听到有些手工测试人员讲“自动化不是的,很多产品不适合自动化”,可是我们又看到很多大公司又只招自动化工程师。因此出现了测试,开发互相看不起,手工测试,自动化测试互相看不起的奇怪现象。正是因为有这么多的问题,这么多的疑惑,也没有人能给出一个很好的解答,或者大家的解答都各不相同,造成了如此的情景。到底隐藏在这些表面现象的深处,根本的东西又是什么呢?
    我认为,是大家没有真正理解什么是测试。测试不同于开发,开发经过几十年的发展已经到了很成熟的阶段了,因此大家对于开发不会有很多的争论与问题。测试发展才多久呢?有人说很长了,可是我们想想大学什么时候才开设有测试知识的课程呢?可能现在也不是所有计算机专业都能在大学接触到测试的知识吧?不然现在也没有这么多测试培训班了。测试是一个新兴的行业,它正在快速的发展着。
    因此,我们对于测试的理解,千万不能只是停留在某一个层次。对于测试人员来讲,不能妄自菲薄,也不能坐井观天,我们需要共同的努力去推动测试流程,测试技术的发展,充分发挥自己的主观能动性,发现或发明更好的测试方法,能在测试的发展上留下自己的足迹,自己的贡献。这里说一下测试相对于开发来说比较吸引我的方面。开发人员的工作实际上是比较死板的,一定要根据设计文档来实现,偏离了设计文档是bug了,甚至编程的风格也要按照公司的规范来,因此,工作中并没有太多创造性的东西。而测试人员相对来说会自由很多,因为测试没有什么固定的模式来做,我们的目标是保证产品的质量,而手段是找bug。具体怎样找,基本上你可以完全来自我控制,手工找,自动化,看代码。因此,测试工作给我发挥创造力,想象力的机会,所以,我喜欢他。
    说了很多闲话了,现在步入正题吧。我说一下目前我的状态对测试的理解,谈一谈测试职业发展的三步曲。说一下每一步的工作内容。
    第一步:手工测试/黑盒测试。这个大家都是太熟悉不过了,主要是设计测试用例,执行测试用例,发现bug,报告bug,验证bug fix。每一步都有junior, senior, architect的区别。junior刚入门,是熟悉学习这些东西,这些东西都搞熟了,加上对产品的较深理解是senior了。 senior要对一些较大的模块能够做计划,能够带领junior的一起工作。architect要能够对整个产品有深刻的理解,可以规划整个产品的测 试,包括需要多少硬件,需要什么软件,需要多少人力,需要多少时间,等等。
    第二步:自动化测试。手工测试人员和自动化测试人员大的区别在于懂编程。不过如果你只是会用script编写一些程序的话,还不能称之为自动化测试人员,至少还要有软件设计的能力。junior刚入门除了要学习手工测试的那些知识以外,还要能够使用某种高级语言,某种测试工具自动化自己所负责的测试用例。senior除了手工测试的那些要求以外,还要能够规划一个较大模块的自动化,能够解决各式各样junior在自动化过程中发现的问题。architect除了手工测试的要求以外,还要能够对整个产品进行自动化的设计,比如采用什么语言,采用什么工具,各个模块自动化的整合,自动化的schedule,自动化的report等等。
    手工测试人员的title,往往叫做SQAA(Software QA Analist),junior SQAA,senior SQAA,principle/staff SQAA。
    自动化测试人员的title,往往叫做SDET(Software Design Engineer in Test),junior SDET,senior SDET,principle/staff SDET。
    还有更常见的title,SQAE(Software QA Engineer),是处于这两者之间的,既要手工测试,也要懂得自动化测试。基本上大多数的测试人员都是发展在这条path上。因此,你可以看看自己,如果是SQAA,要往SQAE的方向发展,如果已经是SQAE了要往SDET方向发展。不同的path,虽然有不同的级别,但是工资也是有区别的。比如senior SQAA=junior SQAE, senior SQAE=junior SDET。而且,不同的path可能终能够发展到的级别也有区别,比如SQAA可能不会设有principle SQAA的级别。也是说,如果想达到architect的级别,只是会手工测试是远远不够的。
    达到Senior SDET应该是比较高级的测试人员了。编程序,自动化这些都是小菜一碟,是跟开发人员比起来也能做一个准senior的developer了。可是这还没有发展到头,以我现在的观点来看,还有第三步。
    第三步:安全测试。我们知道各式各样产品终发布出去头疼的并不是用户找到多少bug,而是安全问题。很多知名大公司发布产品后,还要投入大量的人力去进行安全漏洞的修补。安全漏洞严格来说也是质量问题,那么这些安全漏洞有没有可能在产品发布之前被测试人员所发现呢?答案是肯定的。因此作为我们测试人员的话,把手工测试,自动化测试精通之后,要努力向安全测试的方向发展了。具备有安全测试能力的工程师基本上都可以称之为测试专家了。这需要有非常强的编码能力,非常深的系统内核知识,甚至黑客的背景。更重要的是,要随时能够从安全的角度来分析产品的质量。我们要了解程序员实现的具体方法与步骤,结合review他们的代码,大量的试验来发现安全漏洞。这里举个例子,前不久学习一个文件加密的实现过程,发现它会把每个要加密的文件做一个备份,加密之后 再删除这个备份。备份的作用是一旦加密失败,数据可以被恢复。那么我当时考虑,这个备份删除之后,是否内容还留在硬盘呢?后来经过试验发现,确实内容还存留在硬盘上。这是个安全漏洞,虽然你的文件加密的,可是黑客还是可以通过找到以前备份文件的内容来得到敏感的信息。
    以上是自己对测试现状的理解,自己可以怎样发展?自己也正在有意识的向第三步发展。我觉得测试人员一定不要停留在自己目前的技术水平,技术没有尽头,上面的发展空间还非常的广阔,也许还有四步曲,五步曲……