大学毕业那会,正是全球经济危机,工作特别不好找,偶然的机会进入了软件测试行业。
头两年主要在小公司做软件测试,软件测试是主流之外的领域,测试人员不受重视、加班加点,测试也主要以手工为主,这应该是当时业界的主要氛围。有些善于编程的人也相继转做开发,因为做开发影响力更大。我当时也一度考虑转开发岗位,后来想一想测试行业还处于初级阶段,一定会被越来越重视,有幸进入了支付宝,成为一名测试开发工程师。
在支付宝工作的几年中,经历了大大小小的项目,无论是质量、性能、安全、稳定等都要求极高。多年的工作实战中,总结了一些个人感悟和大家分享:
1、当一个产品在概念上还没有成型的时候,不要过度的去考虑质量(因为如果测试方法不当,却会扼杀一个有可能成功的产品,至少会拖慢这个产品的速度),而是要以最快的速度投入市场验证,通过不断的迭代完善需求。注意这里是“不要过度”,而不是“不考虑”。初期要找到质量和快速发布的一个平衡点。风险总是相对的,如果产品太长时间没有测试投入,代码的质量会越来越差,后期也很难去改进,基本都会进行重构,这样的质量债会拖慢产品的发布。
2、质量不是测试出来的,如果产品最开始设计的时候就是错的,那这个产品无论如何测试也不会变的正确,除非推翻重来。虽然质量不是被测出来的,但是未经测试也不可能开发出有质量的产品。质量不等于测试,质量是把开发和测试放到一起,放在搅拌机里搅拌,直到不能区分彼此的时候,你就得到了质量。
如果开发是开发,测试是测试,永远得不到质量。
3、一个团队如果想能编写出高质量的产品,唯一途径是全体成员共同对质量负责,包括产品经理、开发人员、测试人员等。我认为,达到此目标的最好方式是把测试当做产品的另一种功能,测试功能的地位应该与真实客户看到的其他功能同等重要。
4、测试团队一定要提高对人员招聘要求,即懂得开发人员的技能又懂得测试人员的思维。同时推进开发人员负责测试,开发人员负责质量,测试团队负责帮助开发团队搞定这两项任务。质量从来就不仅仅是一些测试人员的问题,每个写代码的开发者就是测试者,质量由开发测试组合共同承担。如果你的职位上有测试的字样,你的任务就是使那些职位上没有测试的人可以更好的去做测试。
随着团队不断壮大,你会发现测试仅仅是工作的一部分,我们还会负责测试框架,缺陷工具等的开发工作,我们所做的非测试的工作对生产力的提升产生了巨大的影响力。
5、不同工程师的角色定位
测试工程师:把用户放在第一位思考,代表用户利益。组织整体质量实践,构建端到端的自动化测试。
测试开发工程师:工作重心在可测试性和通用测试框架的开发上,也会编写单元或者集成自动化测试。
软件开发工程师:关注客户使用功能的开发实现上。
6、对于所有类型的测试,能够自动化,并不需要人脑的睿智与直觉来判断(比如界面是否漂亮),那就应该实现自动化。自动化的粒度要细,可以根据实际情况分层实现:单元测试、集成测试、端到端测试。
我心中的测试乌托邦
一个完美的研发过程是在怎样进行的呢?
测试先行,在开始写代码之前,一个开发人员就要去思考如何测试即将编写的代码,这些测试代码会作为产品代码的一部分与功能代码放在一起,最适合且最有资格去做的就是编写代码的开发人员。在编写测试代码的过程中需要依赖外部基础设施服务,比如一个测试用例需要从远程数据源读数据,此时需要mock数据,在理想的情况下,这些服务都已经开发好,开发人员随时可以使用。
但是对于人的思维方式而言,在编写功能代码的时候与编写测试代码迥然不同,功能代码思维模式是创建,重点考虑用户、使用场景、数据流上;测试代码主要思路是破坏。理想情况下,需要雇佣不同的角色,一个写功能代码,一个写测试代码。产品的每个功能对应一个开发人员,整个产品配备一定数量的测试开发人员,测试开发人员开发测试工具与框架帮助功能开发人员解决单元测试问题,同时也编写一定的单元和集成测试代码。
除了上述的开发,测试开发人员,还需要第三种角色,真正关心用户的角色——测试员,把用户放在第一位思考,代表用户利益,组织整体质量实践,构建端到端的自动化测试。三种角色分工合作,达到完美,相互之间也可以平等合作。