百度测试架构师眼中的百度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工程师的职责和发展路线上目前来看已大致分为QADQAT,至少我在进行职称评定的评审时,已会有意识的区别评估。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玩得还挺“风生水起”的,希望国内其他公司的测试人员们能跳出原有思路,扩大自己的影响范围。

badcase挖掘的评测方法

今天我先分享下在百度学到的如何自动进行badcase挖掘的评测方法,因为我觉得这是我在百度遇到的最有趣的一种新测试类型,很好地解答了我内心关于算法效果测试方法的疑惑。

先介绍下什么是badcase——“badcase是一个不符合用户心理预期的产品输出结果集”,例如:搜索结果中出现的“文不对图”现象,以及低质量的输出结果排在前面等现象。传统测试方法中并没有对此类问题现成的技术或方法,因此为了从数千万的输入数据中找出那些输出结果集质量不满足用户体验的问题,靠人工的方式对每个输出结果进行人眼判断显然是不行的。

百度的QA应用了大数据思想从数据的相关性入手,从大量的badcase中找到A现象与B结果的相关性,当我们得到一个可以达到80%以上相关性的准确率时就可得到一个靠谱的测试模型,当然这个测试模型天生就是自动化的,从而支持我们从海量的数据中自动地挖出海量badcase,而测试人员要做得就是设计这个自动挖掘badcase的测试模型。

以前我们应用人工的方式进行相关性测试模型的规则抽取与验证,后来开始应用机器学习的思想和方法,实现先自动训练相关性测试模型达到一定准确性后,再应用这个测试模型自动的进行badcase挖掘。以前此类产品评测的最大困难是靠人工方式进行产品效果评估,一个PM一天能评估的输入数据也就最多几百个,而现在我们可以实现一天评估数十万的输入数据,工作效率提升上千倍。而这一切就是大数据思想和机器学习新技术应用到测试设计中的效果,自动化测试的概念又提高了一个新的层次。也许未来测试人员的工作方式会像我们的工作方式一样:先基于业务专家经验设计一个测试模型的架构和主要因子,然后通过真实数据集自动训练测试模型得到测试模型中每个变量因子合适的取值范围,最终自动得到一个测试结果高准确率的测试模型。未来是大数据时代,我认为利用大数据思想不去追求精准的因果关系,而是追求相关性的准确性,将是未来测试设计师们必须要掌握的一种IT技能。

在过去挖出足够数量的badcase是QA最大的挑战,现在的新挑战则变成了我们如何用最快的速度和最低的成本完成这些大量badcase的分析定位工作。通常第一步会自动地针对挖掘出来的badcase进行影响严重度的评级(依然是使用大数据思想和机器学习的方法),这样可自动选出影响较严重的badcase集。第二步:如果产品形态支持通过构建决策树模型自动地定位分析问题根因,那么将通过设计自动分析定位系统对badcase集进行处理。如果某些产品形态不支持通过构建决策树实现自动分析定位,则会通过百度的众测平台,引入用户资源通过一些众测活动来对badcase再次进行标注,这样也能大大降低工程师分析定位的成本与时间。

我先简单介绍下:百度众测是国内第一个基于众包思想实现的一种“人工测试云”,它充分发挥公司产品爱好者的资源价值,不仅帮助发现产品bug还可以为产品优化设计体验提供用户数据,例如:通过百度众测用户对badcase的标注可帮助QA收集大量标注数据为改善产品效果贡献价值。目前网页搜索、地图搜索、图片搜索等产品都已通过众测的用户标注活动优化产品的效果设计质量和降低badcase的分析定位成本。

Badcase的自动挖掘和分析工作对于强算法类产品的用户体验改进帮助很大,而对于弱算法类产品如一些应用APP产品而言,百度QA则通过建立各自产品的评测体系的技术活动以量化方式对产品进行用户体验评测,产品经理和开发人员将根据评测结果输出产品改进的story和非功能质量属性的优化方向。

产品评测报告与传统测试报告

产品评测报告与传统测试报告的区别在于:传统测试报告是测试用例执行结果和bug数据的分析材料是用于分析软件存在的实现错误。而产品评测报告更多是产品在不同用户功能应用场景和非功能属性应用场景的评价数据(例如不同用户场景下的性能响应值和不同用户环境场景下的兼容性表现),以及与同类产品的对比数据,因此对产品设计者(PM)会更有用户体验提升的指导价值,通过更直观的产品用户体验数据支撑产品设计决策。QA则通过设计产品的评测体系对产品价值的贡献不仅在于发现bug,还扩展延伸到直接为产品设计和产品用户体验提升提供有量化数据支撑的改进方向。在百度内部移动APP的评测工作中会对APP在不同网络质量、不同机型、不同软件平台版本下进行产品基础功能、APP响应性能(业务级和系统级)、APP资源消耗性能(耗电量/流量/OS资源等)、UI流畅度等领域进行评测数据收集,QA会在评测数据基础上先进行第一轮的数据分析给出定性的结论,给出改进的建议和技术方案提供给PM或RD参考。为了最大化的提升移动APP的评测效率在内部除了各产品组独立开展的评测活动外、还有支持一键评测的百度评测平台对内部评测技术进行技术共享与重用帮助各产品QA提升评测工作效率。

可靠的用户体验评测体系

测试人员要设计出一个靠谱的产品用户体验评测体系,必须先要对所负责产品的主要用户场景(功能和非功能)有充分的了解和理解,以及用户对产品体验的需求有足够完善的整理,才能对产品整体的用户体验进行科学客观地评价。然后评测体系还需要做“横向”同类产品、“纵向”历史版本的对比测试,并根据产品的“设计思想”进行评测验证是否达到预期的设计定位。最后通常一个好的评测体系一定是一个松耦合的产品测试平台,在这个测试平台上无论是自有产品还是其他公司的相似产品都能得到统一标准的测试数据评估,这样能帮助QA/PM/RD对产品用户体验数据的价值进行更好的分析,从而提升产品竞争力。从某种角度看QA要做好产品评测体系就必须拥有至少“半个产品经理”的用户需求场景知识,从这方面来看对QA的要求又提高了,不仅要懂软件技术会挖掘程序错误,还要有丰富的产品领域用户场景的知识(功能的/性能的/兼容性/稳定性等)。虽然对QA的技能要求提高了,但是无论对产品竞争力的提升还是对QA自身价值的提升都是有着很积极地作用。

另外我认为在公司内只有QA最适合做产品评测体系设计这件事,产品经理PM更擅长功能性需求的设计和创新,对如何设计严谨和完善的测试系统并不是很专业(QA出身的PM除外)。RD则更擅长产品架构的设计和实现,擅长从白盒层面来理解产品,对于用户应用行为黑盒层面的理解则相比QA有限。而QA却因为长期从事功能和非功能的黑盒测试活动的经验积累了很多产品在用户体验方面的知识,因此QA相比PM和RD更适合设计一个用户体验层面严谨的产品评测体系,而这也是QA在公司中独特价值之一的体现。最后我的感慨是大数据思想、机器学习、众包、基于用户体验量化的产品评测这些所谓时髦的名词已不只是虚幻的理论或概念,把这些新的IT技术和理念应用到质量保障工作中为产品用户体验提升提供测试方法论,改变旧有的测试模式是已被实践证明可行的、是有价值的。希望我此次分享的百度QA在用户体验提升领域的实践经验能帮大家更好地提升产品用户体验和测试人员在公司中的产品价值。

推荐阅读更多精彩内容