开篇先说说百度QA们的特点:
从组织结构上百度所有的QA都归属于一个大部门百度质量部统一管理,在一个大部门下的好处是很容易一起跨产品线的协同作战,各种测试技术和测试工具能以最快的速度得到传播,避免重复造轮子的浪费。同时QA们能有一种更强的组织归属感、有着专业的发展通道与空间、关键能交到更多在QA领域与自己志同道合的朋友,扩展视野,所有QA都能从这种大资源池中获益。这一点对所有做测试的人而言更有利于测试专业技能的持续提升。
从我工作所见和感受来看,百度QA有四个主要的工作挑战:职责范围广(覆盖完整的产品生命周期全流程)、 面对产品技术新(如移动互联网、WebOS、推荐引擎)、研发速度快(互联网的节奏)、大数据系统的复杂(百度本质是一个分析处理数据的公司)。这些挑战长期影响着QA日常的工作方式,使得与传统的tester有着工作模式的不同。
百度QA的工作范围覆盖了百度所有形态的产品从基础架构的分布式系统、搜索架构系统、到搜索算法、Web前端、Windows客户端、手机客户端,以及最新的多媒体技术、机器学习等这些前沿的IT业务,因此在这里我能最广泛的接触到各领域测试的QA同行,听听他们的分享,扩展我的测试视野。当然我也有机会到各领域进行测试实战,从我到百度算起,我已在web前端、windows客户端、手机客户端、搜索架构系统、搜索算法、图片搜索领域进行了各种测试实践工作,大大丰富和完善了我的测试技术知识体系,受益不少。
另外百度QA会更完整参与到产品研发流程的周期,从最早的MRD,到设计评审、到产品发布后的效果评测是端到端的参与完整的产品生命周期。与我过去经历最大的区别在于,QA与PM(产品经理)打交道的时间非常多,在整个产品生命周期中几乎是同步一起从头到尾密切配合,同时QA还会为PM设计并开发用于产品评测的平台对产品设计的影响会更多。对于QA与RD的关系,QA不仅只是响应RD提交代码的测试,还会主动去帮助RD如何更好地做好UT(单元测试)、如何做好code review。基于百度QA职责范围的扩大,在百度QA工程师的职责和发展路线上目前来看已大致分为QAD和QAT,至少我在进行职称评定的评审时,已会有意识的区别评估。QAD就是QA中的软件开发者更多侧重测试工具和测试系统的软件开发,我在参加QAD任职评审1对2活动时,基本是以一个对软件开发者和软件产品设计者的角度来进行review,关注其代码质量、软件架构设计思路和产品设计思路的能力。QAT则是标准的Tester,偏重如何尽早的发现更多软件质量问题,要求精通产品的应用场景以及各种测试类型。因此各种风格和兴趣的QA都可以在百度找到自己希望和喜欢的角色,当然有时QAT和QAD也会互换,我个人而言,认为相对而言QAT转QAD容易,QAD转QAT要难些,因为百度的QAT大多具备一定的软件开发能力,平时也会根据工作需求自己做一些自动化测试开发和工具开发的工作。而QAD要转QAT则还需要补充多种测试类型的知识技能,以及产品的业务知识。我在这里目前算是QAT路线,大多时间在思考如何设计更完整的测试避免问题遗漏,以及如何让测试人员在短时间内发现更多的深层次问题,当没有QAD资源来帮助你时,也会自己设计与实现一些小规模的测试系统或测试工具。如果未来某天我的兴趣转换到了QAD的工作内容了也是比较容易获得机会转换的。所以当QA工作的平台足够大时,个人的兴趣也会得到最大化的满足。
在日常的工作中很多百度QA常常还会面对很多新产品技术的挑战,这里的“新”是指新形态的互联网产品(机器学习、推荐系统、多媒体搜索)以及新的软件应用场景(移动互联网和Webos),这些新的被测对象所带来的直接挑战主要是业界很难有现成的完整的测试方案及测试技术,于是不得不逼迫百度的QA比传统软件测试的Tester更加持续地进行测试技术的创新才能满足“新”产品的质保需求。例如:我今年参加的整个百度质量部层面的移动互联网测试技术专项topic组的工作,就不得不去填补诸多业界在移动APP稳定性测试领域、性能测试领域、自动化测试领域技术的空白,否则无法达到真正对高质量用户体验的追求。当业界大多数APP的稳定性测试只依赖Monkey测试工具时,Monkey测试已只占百度最新APP稳定性测试用例类型不到10%的覆盖面,其他90%的稳定性测试方法大多是业界还未知但APP应用又必须要考虑的,否则就会出现“为什么用户会碰到而我无法重现的问题”。当业界还靠移动机型穷尽进行兼容性crash问题的覆盖时,百度的QA已设计实现了基于静态代码自动扫描的兼容性crash问题的快速测试。当很多QA还在为如何在不稳定的2G网络下得到稳定的测试结果而苦恼时,百度QA已靠不到1000元的低成本技术方案很好地解决该问题。同时在完善移动APP测试方案的过程中QA内部还设计开发了不少APP测试工具填补了业界在移动APP测试领域的很多空白。经过我对内部信息的了解,之前官方对外宣传较多的移动云测试MTC只代表了百度QA在移动互联网领域测试技术积累的一部分而不是全部。所以我希望下一步有机会百度质量部能逐渐给业界分享出来,让大家都能受益从而减少移动互联网测试的烦恼和困难。据我在百度的观察我个人总结了一个规律:中国人并不缺创新能力,而是缺逼迫自己去持续创新的压力和平台。正是由于百度QA所处的工作环境和测试对象的特点,逼迫他们不得不去创新,结果QA个人的创新能力在不断提升并形成了创新的习惯。我在这样的环境下,一年下来自己的创新效率感觉比以前也提升了一倍以上,发现原来测试很多领域都有着创新的可能与空间。有朋友问我在百度累吗?我说相比过去身体不累但脑子累因为经常都在思考如何创新地解决所遇到的各种没有现成方案的测试问题。
曾有多位互联网的测试友人网上问我:“百度是如何进行面向互联网的快速测试的?”对于这个问题,我最大的感受是互联网研发速度与质量的平衡让百度的QA必须持续通过测试技术的改进来实现该目标,靠智慧的测试而不是加班来同时满足进度与质量的需求。为了满足这些需求百度质量部有大型测试平台如百度TIP(Test in production)系统、百度众测平台、百度MTC、分布式并行自动化测试等支持大多数产品组同时获得研发速度加快和研发质量提升的收益。我个人认为百度TIP应该是国内在beta测试领域做得非常智能和系统的beta测试系统,可大大提升beta测试的效率和质量。而百度众测平台则是国内第一个也是规模最大的众测社区,依靠互联网上的热心用户资源帮助产品尽早发现更多用户场景特有的问题,减少了百度QA测试时间资源和测试物料的投入,值得国内各公司借鉴如何更好地把用户吸引进来参与beta测试,花点钱是必须的,空手套白狼是不可能的,但是投入产出比是值得的。百度移动云测试MTC平台则通过对已有测试物料和测试资源的共享管理及自动化应用帮助各产品APP测试缩短了在兼容性测试领域和性能测试领域的测试时间,并且让各产品APP获得更广的测试覆盖从而获得更高质量的APP。
除了这些公司级的测试平台帮助各产品QA加快测试速度外,在日常的测试工作中一线百度QA还会主动积极学习和广泛地应用业界优秀的测试技术:持续集成、code review实践、静态代码自动测试工具、环境一键搭建、监控系统、分布式并行测试、探索测试等都在大多数产品组普及落地,希望靠先进的技术手段生产力来提升测试效率,缩短研发测试周期。据我所知百度质量部的探索测试在国内应该是应用产品范围最广的,从windows客户端、移动APP、web产品都在例行应用,探索测试几乎覆盖百度所有产品线,应用和实施探索测试的QA数达到上百人以上,涌现出不少内部探索测试教练,实施了探索测试的产品在没有增加测试周期和测试人力的前提下能提前发现更多问题减少漏测,部分产品探索测试发现的问题数所占比例已达30%以上,提升了发现单个缺陷的测试效率。
我个人认为对比靠延长工作时间和减少必做测试类型来加快研发速度的做法,靠主动持续应用各种新测试技术实践和成果是一种更可持久更科学更人性化的做法。关于百度如何进行“快测试”的咨询,我想这里已给出了一个已验证的解决方案了,希望值得各位同行借鉴和思考。
对于当前很热门的“大数据”及大数据如何测试?我觉得百度有些实践值得大家了解,给大家一些大数据测试的启发思路。 因为百度天生就是一个大数据公司,百度大数据系统的复杂度很高导致一直要求百度的QA既要保证高负载数据处理系统的稳定性、还要挖掘大数据中的badcase,尤其要擅长算法的测试。在保障高负载数据处理系统的稳定性领域,既有“线下百度”这样集系统化的稳定性测试方案与监控系统为一体的专项测试系统,也有不少申请了专利的可靠性测试工具来解决稳定性测试中异常构造和测试流量构造的问题。同时几乎所有产品线都通过百度的大型后台系统的稳定性测试实战培养起了该领域的测试高手。当然我也受益于百度的稳定性测试工作,通过为某百度第二大流量的产品进行稳定性测试方案的改进,在这里真正地把我过去在可靠性测试、压力测试、长时间测试领域的经验系统地结合起来形成了我自己完善的稳定性测试模型,并通过大数据处理系统的测试应用检验了我的稳定性测试模型的完整性,确保有各种测试方法可提前发现所有可产生稳定性问题的风险。
另外为了更好地对大数据时代的数据挖掘和推荐效果算法进行效果评估,而不仅仅只是进行新算法程序正确性验证,百度的QA们还积极应用机器学习的思想、算法和工具对诸多产品的推荐效果算法进行产品算法集有效性的自动化评测,各产品线QA们设计的badcasse自动化挖掘系统在很多产品都能达到85%-95%的准确性,提供大量的量化数据帮助产品的算法设计者重新优化算法,而不只是修改算法的程序bug。同时为了更早更快更准地体现算法效果测试的价值,有的QA还积极进行该领域的其他创新,诸如:网页搜索的QA把badcase自动化挖掘系统与百度众测结合后大大减少了研发人员大规模分析与定位badcase的成本。图片搜索的QA甚至实现了线下badcase自动挖掘的算法,突破了搜索业界传统依靠线上用户数据进行用户体验测试的限制,能在大数据产品上线前未获得用户数据前就提前自动发现大量的badcase数据,为用户提供更好的推荐结果。大数据领域的测试涉及很多,由于我个人所见有限,就先给大家分享到这里。
如果非要我用一句话来总结百度QA的特点那就是:“持续技术创新与积极学习”。
平时在微博上测试同行们常讨论QA的核心价值是什么,甚至常有开发领域的老兵也来参与辩论。当然在百度内部也会有关于QA核心价值的讨论,从我了解的情况来看百度QA的核心价值在内部已得到了一些共识和不可替代性的证明。
百度QA的第一个核心价值是:全流程质量保障中心
全流程质量保证确保所有百度产品的程序质量。从需求/设计/编码/产品发布的全流程都会有QA介入并提供各类质量保障手段。从尽早发现问题,到缺陷预防,到减少发布后遗漏问题的影响都是百度QA投入和支撑的目标。百度产品的全生命周期的质量保障是百度QA的首要工作目标,也是在百度不可或缺的核心价值,大部分的QA都一直为将漏测率降低到千分之几,甚至是零漏测长期进行着持续的测试创新和技术改进工作。
百度QA的第二个核心价值是:公司用户体验测试技术能力中心
前面所介绍的百度QA的工作范围和工作目标不只是传统tester所涉及的内容,他们被要求不仅要发现程序的错误,还要发现产品效果的问题,要求对用户体验质量全面负责。所以,百度QA除了广泛应用各种软件测试技术帮RD找bug还会积极进行产品的应用效果评测工作为PM提供用户体验方面的缺陷,badcase自动化挖掘系统、百度众测平台等都是这方面的典型代表。我觉得从这点来看百度QA的用户体验定义的覆盖含义远超过了很多人所认知的易用性感受。百度QA不只关心程序错误这一点突破了许多公司目前对tester的限定,因此我建议各公司的tester们应该更积极主动的行动起来,在公司内部开展对产品业务有效性的评测而不仅是正确性的评测,因为只有这样才是真正的产品测试,而不仅是软件测试,测试者的价值能够获得更多的体现。
百度QA的第三个核心价值是:公司研发效率提升能力中心
百度QA们从最开始关注如何提升测试过程的效率,到现在考虑如何通过提供研发辅助工具和流程改造,提升公司整体的研发效率。我看到的是除了百度质量部层面的质量工程中心、还有产品线层面的EP专职团队、以及分布在各产品组的QA们都在积极贡献各种提升测试效率和开发效率的工具及系统。百度TIP系统、持续集成等是研发流程层面的典型代表,分布式并行测试系统、各种代码自动扫描工具等是测试效率提升的典型代表,提供给UE的单测工具FIS、提供给RD的UT技术支持服务则是研发效率能力提升的另一种形式。我认为在研发效率提升方面,百度的QA们担负起了最大的职责和贡献了最大的价值。因此各公司的tester们如果要跳出测试价值的狭义定义,可以考虑参考百度QA的工作模式,积极担负起公司研发效率提升的担子。
百度QA的第四个核心价值是:百度技术部的人才“黄埔军校”
在很多公司测试部或质量部都是向各部门培养人才的输送部门,这是因为测试工作的综合性让很多测试者获了全面的锻炼。成为一个懂技术的产品经理,成为一个懂质量的研发人员都是测试人员转岗的优势。不过在百度我看到这里的QA在质量部内部得到了更多综合性的锻炼,不依靠转岗也能在质量部内部专注做产品研发、做产品经理。因为有的QA团队本身就在做产品,承受着做产品的质量标准压力,如百度移动云MTC本身就是百度移动云战略产品的一部分,百度众测也是一个完整的互联网产品,QA们在其中担任起了互联网产品经理,互联网产品运营,互联网产品研发角色,能参与这些项目的QA是比较幸运的,这些经历对他们未来的发展都是一次很全面的锻炼。同时前面谈到QA从MRD到产品发布后的全程介入工作,也使得QA能掌握大多数PM的技能和更深入的了解产品的完整生命周期成为“半个PM”。因此QA的发展空间和路径是很广阔的,关键看自己在公司内部如何去推动,如何去影响周边团队,让自己的工作范围扩大的更多。没有人说“你不能做什么?”只有自己内心限制了自己“不能做什么”。从这点来看,百度的QA玩得还挺“风生水起”的,希望国内其他公司的测试人员们能跳出原有思路,扩大自己的影响范围。
第一篇文章就先写到这里,关于博客中提到的一些测试平台和测试观点,意犹未尽的地方很有很多,我会尽快在后续的篇章中给大家进行更详细地干货介绍。最后说明下:此次分享我没计划介绍百度的自动化测试框架怎么做的,不是因为百度没有自动化测试,而是因为自动化测试的各种技术已不是百度QA的主要能力瓶颈和测试技术短板。至少我看到百度内部最优秀和最有能力的高阶QA们目前大多都投入在非自动化测试领域的其他测试难题的解决上与测试技术创新上,这个共性倒和华为的测试专家们很像,因为华为内部的高阶测试专家们近些年大多也都重点关注在非自动化测试领域。在一个务实重视产品优先、真正理解工程技术的公司中QA的工作和价值不仅仅是自动化测试,还有更多非自动化测试技术领域值得测试牛人们去研究和探索,百度是这样,华为也是这样