潘在亮,现任腾讯社交网络质量部测试开发中心组长。加入腾讯之前,先后任职甲骨文、微软公司测试开发工程师,参与企业级搜索和VisualStudio产品的测试开发工作。于2009年加入腾讯,参与了企点、PCQQ、手机QQ、QQ空间、QQ音乐、腾讯云等产品的测试技术改进工作。在测试开发领域拥有超过10年的丰富项目经验,擅长测试自动化、测试工具开发、研发工具开发和静态代码扫描等领域。
访谈内容:
相对于开发人员(也要写测试代码),测试开发人员在测试方面有哪些更高的要求?
各个公司甚至公司内部各小组对“测试开发”这个角色的定义各有不同,对测试开发人员的要求也各有不同。从我个人来说,测试开发角色主要负责测试效率乃至研发效率的提升,而效率的提升一般是通过自动化和流程的方式来实现的,所以从这个角度来说测试开发人员跟开发人员没有太大的差别。不过,测试效率主要由测试开发人员负责,需要对被测业务的技术方案和测试方法都有比较深刻的理解。
一个合格的测试人员,理解被测试产品的技术特点和功能特性是必须的,否则就不能有效地测试产品。但测试人员对技术的理解跟开发人员的角度又是不一样的,开发人员需要了解技术从而能够高效地开发出性能良好的代码,测试人员理解产品的技术是为了更高效地进行测试。除了理解产品的技术外,测试人员还需要掌握测试的方法,比如等价类、边界值、敏捷测试、探索性测试方法等,这些都可以通过相关图书的学习进而掌握。
如果用类比方式描述测试开发人员的日常工作,您会怎样描述?
如果业务开发人员是特工007詹姆斯邦德,测试开发人员就是里面的Q博士,专门给业务提供黑科技装备。我们的一款产品曾时不时地跟后台的传输协议产生严重的问题,造成crash,但仅仅通过界面的黑盒测试很难将相关的场景构造出来。对此,测试开发人员开发出该产品的协议抓取工具,来修改协议内容,相关的测试场景才得以顺利进行。
测试开发人员是不是要有一些“找茬”“搞坏”的心态?
腾讯的测试开发人员一般不会直接负责查找产品的bug,所以不会存在其他测试人员的“找茬”心态。我个人并不鼓励测试人员的“找茬”“搞坏”心态。团队作为整体都是对研发的产品负责、对客户负责,应该站在客户的角度思考问题而不是一味追求团队中个别的成绩。测试工作中,测试人员应该遵守相关的业务规范,即使这些规范有时候会对个别人产生一些困扰。
在设计测试计划、测试用例、操作步骤、重现步骤等工作中,您有哪些特别的经验和教训要和大家分享?
腾讯的测试开发人员一般不会直接参与测试计划、测试用例等工作,这里没有什么特别的分享。
我们的测试开发人员负责测试工具、自动化框架、持续集成方面的开发建设工作。我个人在这方面的经验也想分享下,希望能对行业内人士有些帮助。首先,测试开发人员的工作需要得到团队和公司领导的认可并给予足够的耐心,因为任何的开发建设性工作,都需要在初期投入成本。这些建设都是很基础的、很必要的,部门内最好能有统一的规划和实施。缺少必要的沟通的话,你搞你的,我做我的,重复的轮子到最后只能变成浪费。
另外,业界一些人认为测试自动化不就是写写简单的用例,这样简单的事情随便派个人搞搞就好了。如果存在这样的想法,测试自动化基本上是搞不起来的。测试工具和框架的开发跟其他的产品开发一样,都需要比较好的开发技术和工程化实施。
自动化测试更适合哪些测试场景?
像Google这样的一些国外公司会采用自动化测试应对绝大部分的测试场景。国内的实际情况下,一般不建议在产品初级阶段、产品形态变化较大的情况下进行自动化测试。产品初级阶段和产品形态变化大的时候,虽然也可以使用自动化测试来提升研发效率,但实施的前提是研发团队具有很高的研发水平,能够保证应用接口很好地扩展,保证接口的稳定性,否则每更新一次版本,大部分的自动化测试用例就要推倒从来。
过多地依赖自动化测试工具,而减少人工测试的投入,是否会导致产品的某些缺陷不易被发现?
就目前的自动化测试技术水平来看,它还不能替代人工测试,尤其是在主动发现bug方面,人的灵活性还是非常重要的。自动化测试更多地用于防止bug的回归,以及提升发布的效率。自动化往往也是其他深层测试的基础,像压力测试、性能测试、MTTF测试等,没有自动化框架的支持深层测试就比较难做到。
随着机器学习领域技术的逐步成熟,机器学习算法应用到自动化测试只是时间的问题,到时候很多的手工测试会被人工智能所替代。
PC端、Web、移动端以及后台Server端的测试工作有哪些不同?
几个端的测试从本质上讲没有什么不同,都是测试一个或多个进程的应用。PC端的界面会比较复杂,因为PC的显示器较大,允许产品在界面上有更复杂灵活的设计,对测试的要求也更高。移动端需要注意碎片化的问题。这个碎片化主要是指Android系统的碎片化问题,测试人员需要在Android的不同版本、不同手机厂商间做多次测试。另外还要更加注重性能、电量等问题。Web端的测试需要面对比较多的的技术栈,js,php,HTML,json等。Server的测试则会面对比较复杂的网络拓扑结构、复杂数据存储,以及高可用等挑战。这些对后台应用的测试环境搭建会产生很大的挑战。要解决这个问题需要对后台程序有更高的可测性要求,在刚开始开发的时候后台应用就要将可测试性考虑到后台应用中。
麦思博主办的上海MPD软件工作坊即将在5月中旬开幕,我知道您将在会上讲授“跨多端测试自动化体系”。可以先给我们透露一下,腾讯内部是怎样打造跨越多端的全栈自动化测试体系的吗?
腾讯的很多产品都涉及多端,产品的自动化测试自然需要跨越多端的自动化体系。不过,腾讯内部并没有一个全公司统一的多端自动化体系。就我所在的社交网络质量部而言,多端自动化体系的搭建主要从两个方面入手。一个是统一的多端驱动来驱动被测试的应用,另一个是统一的用例编写、管理方式和系统。这两个方面涉及的技术点和难点是非常多的,但这两个方面是不可或缺的,是一个完整的多端自动化体系最重要的两个组成部分。
我们在社交网络事业群打造的QTA自动化测试平台主要也是从上面的两方面入手。Android、iOS端的驱动类库QT4A、QT4i都是我们自己研发的,这保证了驱动接口的一致性。在UI控件的定位和管理方面,我们也都采用了统一的做法。Android端和iOS端的UI控件采用QPath格式进行描述。各个端的用例统一采用python编写,此外用例的编写格式、代码风格也是统一的。
为应对校招的测试开发面试,在校生应该做哪些准备?
我觉得在校生需要做好三方面的准备,一个是需要有比较好的心态,积极的心态。自动化测试会存在失败的情况并且失败的次数不止一次,这需要积极的心态才能迎难而上,最终克服困难。二是需要对测试有一定的了解,例如边界值测试等。这里倒不是要求在校生对测试方法有很深地掌握,毕竟学校里并没有这样的课程。对测试有一定的了解主要是希望在校生能有较好的场景分析能力,设计出测试要素。例如分析一个简单的登录窗口,除了考虑登录密码的正确与否,还要考虑到用户名的不同格式、不同字符的编码,不同的字符串长度。除了功能之外,是否还能考虑到性能因素。三是要有比较好的编程基础,能够掌握基本的数据结构算法。如果不能很好地掌握数据结构算法,测试工作中就很难理解操作系统、数据库、网络等方面的技术要点,这对掌握团队的技术方案更是困难。
对话知名作译者,品味精彩技术人生
微信公众号:ituring_interview
长按二维码识别关注我们!
你听得见他们,他们也听得见你!