纵观整个互联网发展历程,我们不难发现这样一个趋势:快!尤其是在“敏捷开发”的理念被越来越多的企业采用之后,“快”更是成为互联网企业工作及产品研发、交互迭代的重要特点。在这种“开发快”、“上线快”、“交付快”、“迭代快”的互联网发展背景下,系统质量保障该何去何从呢?
带着这个问题,飞马网记者深度采访了京东商城-POP平台-测试与质量管理部负责人张琪,听他讲述10+年对软件测试及质量保障的实践感悟及团队管理经验。
张琪,京东商城POP平台测试与质量管理部负责人,《京东系统质量保障技术实战》主编。拥有10年以上软件测试及质量团队管理实战经验。于2012年加入京东,曾先后主导了京东闪购项目、仓海项目、QQ网购融合项目、Sam's club 入驻京东等重大战略项目的测试与质量保障工作。
质量保障不仅仅是测试的事情
飞马网:目前国内系统/软件测试行业的现状如何?您怎么看待?
张琪:随着互联网软件行业的蓬勃发展,很多软件公司开始朝着互联网方向转型,随着软件规模的增大及复杂度的提升,软件测试行业对于人才的需求量增大,尤其是技能全面的人才。测试与产品、研发和运维的边界日趋模糊,这就要求测试人员成为“多面手”,测试行业在人才的技能广度上提出更高要求。
同时,随着互联网软件快速迭代、快速交付的需求日益凸显,软件测试人员渐渐从“幕后”走向“台前”,将承担软件过程中更多的工作与更大的挑战,为在质量和效率之间取得平衡,质量保障工作的技术性正在不断提升。
飞马网:在国内,大家经常对测试工作有一个误区:总觉得系统/软件开发要比系统/软件测试重要、技术高,而测试的技术门槛低,对此您怎么看呢?
张琪:这是一种软件行业的传统看法,已不能代表当下软件测试人员价值的体现。
先说说对于开发比测试重要的说法误区:
首先,开发和测试均为软件过程中两个重要的环节,二者相辅相成,并无哪个更加重要之说,开发和测试对于构建一个良好的软件系统同样重要。就目前行业整体现状来看,开发人员几乎无法较好地独立完成软件系统的开发及相关的质量保障工作,仍然有很多严重缺陷需要依靠测试工作来发现。其次,开发和测试对于软件产品的质量观念及挖掘缺陷的思路是不同的,这就导致很多系统问题在开发自测后还是需要测试人员来把关的。由此看来,软件开发与测试工作对于构建高质量的软件系统实为相互协作关系,测试工作与开发工作同样重要。
再来说说关于大家普遍认为的开发技术高,测试技术门槛低的误区:
对于刚毕业的学生或者初级测试岗位或开发岗位而言,开发岗位的门槛是略高于测试岗位的门槛的。但就开发工作与测试工作的任职者长远发展所需能力而言,开发工作对于技能深度有着较高要求,而测试工作在技能广度上有着较高的要求。众所周知,在软件过程比较成熟的企业中,软件开发、DBA、系统运维等工作都是由专门的人员来完成的。大家各司其职,各自完成自己的工作。但对于测试人员来讲,一旦发现bug,这还不够,还需要有效定位bug,这个bug究竟是什么原因引起的,这就需要广博的相关知识,除了一些代码知识外,是否和数据库相关,是否和系统部署或配置等运维因素相关,这些都需要逐一进行判断,这就对于测试人员的综合能力有着较高的要求。
综上所述,一个测试人员所需具备的技能广度其实是超过开发人员所需具备的技能广度的。我们之所以今天有开发门槛高,测试门槛低的误区,我觉得在实际工作中是由于两方面原因造成的,***就是目前大部分人有着传统的观念,认为开发是有创造性的,测试只是协助找找bug,然而并没有真正深入测试工作发现其所需技能;第二是大家对于“技术”的认知往往停留在开发技术的深度上,而忽略了质量保障工作对于技术的广度要求,所以导致大家有这样的认知。
飞马网:开发和测试对于发现软件产品缺陷的思路有哪些不同?
张琪:开发人员更加关注系统的内建质量,如系统架构,系统设计等。开发人员会写一些单测程序对系统进行测试,大多内容是验证基于代码实现的逻辑和模块业务主流程,关注的测试点相对比较少,并且不够系统化。
测试人员会根据系统的设计、实现方法、同时结合该软件产品的特性、用户群、对于软件产品质量从多个方面进行评估,如:系统功能及逻辑、系统易用性、系统可靠性、系统性能或效率、系统可维护性等。测试人员对于软件产品的缺陷挖掘及产品质量的保障更加系统化。
飞马网:测试人员在高质量的软件系统中扮演哪种角色?
张琪:对于高质量的软件系统,测试人员在整个软件生命周期中扮演着多种角色:
质量卫士:对整体软件系统的质量负责,这个是测试人员的基本角色。但质量不仅仅是没有bug,还包含良好的用户体验,系统稳定性、良好的性能等。
流程推动者:一个强大的企业或团队一定有一个经过历练和不断优化形成的流程。同样,构建一个良好的软件系统同样需要有一个高效的流程作为保障。软件质量保障工作贯穿于整体软件生命周期中的每一个环节。所以,测试人员就肩负起高效流程的构建及推动者的角色。
质量文化布道者:质量对于测试人员来说,是分内的事,但只有测试人员重视质量是远远不够的。一个优秀的产品,需要每个阶段的参与人员都要对其质量负责,这就要求测试人员肩负起“质量文化布道者”这一角色,将质量观念传播给项目中的各个参与者,使质量文化深入产品、开发、测试,让大家都有“质量”意识,共同为构建高质量的软件产品而努力。
飞马网:快速迭代的互联网研发模式下质量保障该如何突破?
张琪:我觉得首先应该改变观念,因为质量保障这个工作并不只是开发之后的一个环节,而应该贯穿软件生命周期始终。
其次,应该提升互联网质量保障人员的工作能力,提升知识技术的广度。因为互联网企业质量保障人员的要求其实是非常高的,不仅仅只是做好测试工作就可以了,还需要有一些产品思维、运维知识等。
第三点就是,随着互联网的发展,我们的工作模式也在发生着改变,所以对于一些比较新的工作模式或优秀实践,只要他有可能提高我们的工作效率或可能对团队带来正向引导,我认为我们就应该去尝试,比如敏捷流程,BDD,DevOps等。这种尝试可以先在小范围团队中试行,以此减小试错带来的风险,待检验真正适合团队后,即可大规模推广执行。
《京东系统质量保障技术实战》
飞马网:《京东系统质量保障技术实战》这本书的初衷是什么?请为我们介绍一下这本书。这本书适合哪类人群去看呢?
张琪:说到写这本书的初衷,我想主要是总结在质量保障工作中的技术并真实记录其实践内容、过程及经验,为读者呈现真正的、可落地的干货分享,让大家全方位了解电商快速迭代下测试与质量保障工作的方法、技术、及实践。
我在2017TiD质量竞争力大会上分享的时候,就有很多听众好奇地问到在快速迭代上线情况下如何保障系统质量的问题;曾经和我们合作的沃尔玛质量团队的负责人也曾经提出过这个问题。所以,想让这本书作为开启大家对电商质量保障工作的一扇窗,为大家抛砖引玉,让大家了解在电商快速迭代下是如何保障系统质量的。
本书包含:业务质量保障实战、SOA架构下的软件质量保障实战、自动化测试实战、测试环境管理实战、持续集成及代码扫描实战、质量保障工具开发实战、Web安全测试技术实战、测试团队管理实战等。
适合人群主要是:对软件系统测试及质量保障技术感兴趣的人员,包含但不限于测试相关从业人员或有志于从事相关工作的学生及社会相关人员。
飞马网:在《京东系统质量保障技术实战》这本书中您提出了“测试前置”的理念,请为我们解释一下“测试前置”。
张琪:测试或质量保障工作前移是快速构建高质量软件系统的重要实践,也是节约软件成本的要求。众所周知,软件缺陷越早被发现,其修复的成本也将越低,所以在行业内成熟的软件企业中会倡导质量保障工作前移,即在需求阶段质量保障人员就介入,以降低测试阶段发现BUG所带来的软件成本。在行业中测试与质量保障工作的前移要根据软件团队的成熟度来落地实施,质量保障前移主要表现在:在需求阶段就开始关注质量,在后续的设计及编码阶段也在关注质量,如项目前期的需求评审、代码规范的制定执行,严格执行设计评审、代码评审等工作。
飞马网:按照测试流程:测试前-测试中-上线后,不同阶段的测试工作需要重点注意的地方分别是什么?
张琪:测试前:
1、在排期时要重点关注:软件产品的重要时间节点,如:提交测试时间、期望上线时间等,另外,测试资源是否可以支持也是必要的评估项。
2、在需求评审时要重点关注:需求的实现内容(接口及方法、UI界面等)。在需求评审中要努力发掘需求缺陷,如业务逻辑与当前业务相冲突或存在促销叠加等业务逻辑漏洞等。
3、在设计评审时要重点关注:发掘软件设计中缺陷,如系统设计带来的稳定性风险、系统灵活性、可扩展性等因素。同时要关注实现技术,有时一些bug是由于采用的开发技术本身局限性所导致的。
4、测试用例评审时要重点关注:测试用例是否覆盖完整业务逻辑,在用例设计时应着重考虑边界值、程序的各个分支及逻辑判断尽量覆盖全面。另外,测试数据的设计也是非常重要的,对于一些新业务,尤其涉及数据库表结构变更的需求,一定要记得验证是否兼容历史数据,避免操作历史数据时系统出错。测试用例设计中还应覆盖可能出现的异常流程或情况。
5、如果业务需求有“提测”与“自测”之分,在测试前要与研发及产品充分沟通并识别需求风险,高、中等级风险的需求必须进行测试。
测试中:
1、测试中一定要有意识地考虑异常情况的场景,包含异常流程及异常数据等。
2、测试过程中进度及风险及时通报,有问题别憋着!测试过程中出现风险务必及时通知对应产品、开发及项目经理等周知并推动解决。(可采用邮件形式抄送项目所有相关人)
上线后:
1、做好线上验证:线上验证工作必须包含两部分:***是当前上线需求或项目的相关业务逻辑验证;第二是要验证该业务线的核心功能。为何要验证看似和上线业务无关的业务线核心功能呢?原因是在新业务程序设计及编码中,难免对于底层公共组件或方法进行修改,这样就有可能影响到看似和上线无关的业务,所以要进行验证。在条件允许情况下尽量执行全部测试用例,线上验证中的风险及时通报相关人员,这里的风险包含一些线上无法验证的操作,例如关停一个类目,这样的操作可以次日联系有相关权限的人员进行补充验证。
2、做好线上监控工作。
飞马网:请重点为我们介绍一下质量保障这一块。您认为该采取哪些质量控制手段来保证软件/系统质量?
张琪:总体思路是这样的:流程控制 + 测试深度 + 测试广度。
其中流程控制主要有:质量保障工作前置,越早发现问题修复代价越小。流程埋点,流程数据分析及改进,流程基本稳定后再着手将其系统化,以提升效率。
流程控制中的一些关键阶段的质量保障措施如下:
提测前质量保障:需求评审 +设计评审 +代码评审 +用例评审 +静态代码扫描;
测试中质量保障:分层测试 +自动化测试 +上线前checklist检查点 +产品试用机制 +基线压测机制;
上线后质量保障:线上验证 + 定期自动化回归 + 系统稳定性监控 + 线上压测;
测试深度包括:自动化测试 + 接口测试 + 少量白盒测试 + 探索性测试;
测试广度包括:功能 + 性能(线上压测 + 线下基线检测) + 安全 + 易用性 +
可维护性(注释 + 重要行为日志)。
飞马网:该如何快速构建一个质量保障工具呢?
张琪:关于快速构建一个质量保障工具,我想从下面四个方面来回答
***,成熟的技术栈沉淀,目前质量保障工具基本为Web方式,我们团队目前的开发架构基本与开发团队保持一致,后端框架使用:Spring、SpringMVC、Mybatis,前端框架使用:Velocity、JQuery、BootStrap等。这样通过现成的脚手架工程可以迅速搭建开发工程。
第二,灵活强大的中间件系统,在开发过程中,我们经常会碰到需要大数据量的存储空间、高性能的数据缓存等情况,依赖京东强大的中间件系统,我们可以将大数据量以及数据缓存进行托管,并无需考虑数据安全性及备份等问题。
第三,严谨公开的开发流程管理,借助看板方法等优秀的流程管理模式,我们可以做到开发过程对需求方公开透明,并随时了解开发进度和技术阻塞点,实时调整方案,及时应对,这样可以引导团队专注于解决问题以维持开发过程的稳定流动。
第四,全栈的工作模式,团队使用全栈的工作方式,避免很多的沟通和时间成本。
由于团队经历了几年多的技术沉淀,在技术选型以及中间件系统的结合方面有很多现成的***实践,再结合流程管理,使得构建一个中等难度的质量保障工具基本可以在一个月内完成用户验收。
电商测试与质量保障实践
飞马网:与其他行业相比,电商行业的质量保障工作有哪些特点呢?
张琪:电商行业中对于质量保障工作来说,主要有以下特点:
一、电商行业的项目周期一般较短,但业务逻辑非常复杂,这就要求一个字“快”,快速迭代,需求多变,质量保障工作时间紧、任务急,且必须随时响应变化。
二、更加注重稳定性与安全性。
三、更加注重易用性及用户体验。主要由于电商软件的用户量巨大,且用户弃用电商软件对于用户带来的成本很低,加之电商行业竞争很激烈,所以易用性及用户体验就成为电商质量保障中的一个重要课题。
四、电商系统业务流程长,系统间关联度大,这就对质量保障人员的业务知识有着较高的要求。
飞马网:作为用户群非常庞大的知名电商,安全对京东是及其重要的,请问在测试环节,是怎样实现安全测试的?
张琪:安全这一块,主要包括:代码安全规范执行、安全扫描、业务线的落地安全漏洞挖掘、SDL安全流程的执行。
代码安全规范执行:
要在代码诞生时就提升安全意识,即开发人员开发的代码要符合代码安全规范,例如:在写sql时要采用预编译方式防止sql注入;在引用jar包时要关注是否安全版本等,引用安全版本的jar包。
安全扫描:
采用AWVS及BurpSuite等安全扫描工具对程序进行扫描,以发现安全漏洞。
同时部门开发了基于Sonar的安全扫描插件,可以在代码环节就及时发现安全漏洞,及时修改。
业务线的落地安全漏洞挖掘:
业务线的安全漏洞挖掘是对安全软件扫描的极大补充,有些深入的与业务相关度大的安全问题很难通过通用的安全扫描工具发现,这就需要熟悉业务的测试人员在日常工作中对系统进行挖掘,在业务逻辑与系统之间更加深入地挖掘潜在安全风险,例如业务逻辑漏洞、越权访问等漏洞。
SDL安全流程引入:
重大项目安全保障引入SDL安全流程,主要包含:前期的培训、需求、设计、实施、验证、发布等环节,全面保障项目安全质量。
飞马网:请为我们介绍一下您的团队在自动化测试方面所做的研究,自动化程度如何?
张琪:团队在自动化测试方面所做的研究主要在三个方面:Web UI自动化、接口自动化以及在Mock系统辅助下的自动化测试等,并且产出了部门自研的自动化测试框架EAT(Easy Automatic Testing)及Mock平台。在WebUI测试框架方面,脚本的编写非常接近人类使用Web系统页面的思路,即:目标页面—目标控件—目标操作,可以很大程度降低脚本代码的编写难度,提升脚本产出效率。在接口测试框架方面,框架采用了注解解析测试数据方式通过简单配置即可进行自动化接口测试,大大提升了接口测试效率。Mock平台则可以在需要上游数据支持时模拟上游来为下游的接口测试传一些测试数据,使接口测试不再受到无上游数据的困扰。在实际工作中,我们发现接口自动化测试的ROI相对较高,脚本维护成本较低,在这里建议大家在测试资源有限的情况下优先考虑实施接口自动化测试。
说到自动化测试程度,我的团队目前采用“全员自动化”模式,目前团队的接口自动化测试覆盖率已经达到90%以上。说起“全员自动化”,今天想起来是我在团队自动化测试方面做出的一个最重要的决策。现在行业内有很多测试团队为了快速出成果,会让一小部分有着较强自动化脚本编写能力的测试开发人员来承担自动化测试工作,而其他真正接触业务线的测试人员却因为代码能力不足等原因无法参与进来,这样做看起来是能快速出成果,但是这些有较强代码能力的测试开发人员并非业务线的测试人员,他们对于业务无法更加精深的掌握,致使脚本的质量无法保障。所以,当初我团队做自动化测试初期,我就努力培养每一个业务线的测试人员都具备自动化脚本编写能力。这样,真正熟悉业务的人掌握了自动化测试技术,就可以通过其对业务熟知的优势设计出覆盖度高的脚本,使自动化测试更加有效地发挥其作用。而那些测试开发人员,他们的职责是做一些创新性的测试平台及框架开发,***程度地释放他们的创新思维和技术能力,为团队的效率提升做出贡献。
飞马网:对于市面上的大量测试工具,在京东的测试实践中,曾遇到过哪些挑战?
张琪:我们在测试工作中用到的工具,以自研为主,会结合一些较好的开源工具。比如selenium、jenkins、SoanrQube等等,都是非常好的开源工具。我想,是否要自研还是选择开源工具,主要考虑以下两个方面:
1、开源工具是否有成熟的方案,能够较好地应用在我们的实际项目中;
2、自研工具的成本与收益之间的平衡;
另外还有一种折中方案,就是基于开源工具的二次开发,插件的开发等等。上面提到的这些开源工具,我们在工作中都是做了一些二次开发或者封装改造的,目的就是使其更加适合我们的实际使用场景。
遇到的挑战:主要就是通用开源工具的落地问题,如何去落地?比如我们是仅仅针对开源工具包装一个外壳,还是说深入去修改一些内核的东西呢?我们的总体策略是基于使用者(也就是用户)考虑,比如SoanrQube这个工具,开发人员已经用习惯了他原生的界面和操作方式,那么我们在改造落地的时候,就尽量不对其的外观及操作方式做过多变更,而是针对大家非常关注的一些方面,比如规则自定义、统一认证插件、个性化代码质量数据的收集及展示等做一些开发工作。另外,我们针对一些开源工具比如SoanrQube,也正在致力于开源一些我们自研的插件出来,希望能够给广大的同行使用。
飞马网:目前京东POP平台测试与质量管理部的团队组成情况是怎样的?您是如何平衡测试及质量管理工作与团队管理的?
张琪:目前我所在团队的组成是由两支业务测试团队和一支测试开发团队组成。测试开发团队的主要任务是质量效能提升工具及平台、框架等的开发,业务测试团队的主要工作是为项目或产品质量保驾护航。
关于平衡测试及质量管理工作与团队管理,我目前在这两项工作上的时间分配几乎对等。在测试及质量管理工作中我主要参与流程制定及跟进执行、流程数据采集跟踪及分析、流程优化、以及一些优秀工程实践的引进及落地工作支持及跟进。另外,参与一些重大项目、需要多个部门合作项目的整体测试与质量保障组织工作等。
再此分享一个观点:作为团队管理者,应努力给下属创造更多的机会去历练。不要事必躬亲,给下属犯错的机会,让下属成长起来,这样团队管理者就可以有更多的时间去思考部门发展方向及未来战略方向等问题。
建议与展望
飞马网:您认为要成为一名优秀的测试工程师,需要具备哪些能力呢?
张琪:对于这个问题,我们总结起来一个词,叫做“软硬兼修”。作为一名优秀的测试工程师,不仅要提高自己过硬的技术能力,而且还要提升自身的软技能。
硬能力主要有:熟练掌握测试方法与测试理论、系统部署等运维知识、数据库相关知识、脚本及程序编码能力、产品设计知识、所处行业的业务知识、优秀测试思想及工程实践的技术的应用能力等。
在硬能力中,大家通常比较关心如何提升团队成员的代码能力,针对这个问题,我认为最有效的方法就是在工作真实场景中去学习和提升。最初可以先培养团队成员对于代码的兴趣和感觉,让团队成员愿意学习相关知识,再逐渐深入。加之固定周期的代码技术培训并跟进培训落地成果,即培训后根据培训知识安排一些相关工作,以此来使团队成员将所学代码知识迅速运用到工作中,这样就起到及时巩固所学知识的作用,让所学代码知识真正落地实践并沉淀下来。久而久之,团队成员的代码能力就会得到逐步的提升。
软能力主要包含:沟通表达能力、怀疑精神、足够的耐心、文档总结能力、分析能力、学习能力、创新能力等。这些都是一个优秀的测试工程师应该具备的软能力,软能力在一定程度上对测试人员的发展也会起到关键作用。
飞马网:您提到,未来测试人员技能全面化是一个趋势。但要求测试人员既要懂产品,又要懂开发,这对于要经常赶工期的测试人员来说应该是非常大的挑战,对此,您有哪些高效的学习建议呢?
张琪:针对这个问题,这里说的测试人员既要懂产品,又要懂开发,这里有个隐含意思,就是要提升测试人员的技能广度。测试人员可能在开发知识深度上不如真正的开发人员,但是你得懂,产品知识也如是。
关于学习建议,建议大家还是要重点在工作中学习,在工作中提升,或者挤出一些业余时间来学习。关于赶工期,大家普遍有这样的观点:因为测试时间少,大家就会赶工期,然后就拼命地去通过手工测试的方法赶工,因为手工测试来的直接哇,直接上手就测。长久看来就会发现,越这样,未来随着项目的增多就越需要赶工,时间就越不够用,长此以往,形成恶性循环。所以大家必须改变思维,解放思想,要在繁杂的工作中坚持学习。我们是否能够挤出一点时间来尝试新的实践呢?如:采用静态代码扫描的方式将大量低级错误在代码提交前就修复,采用自动化测试将一些重复的劳动用机器来代替。这些都是值得学习并实践的。
建议大家可以多参与到日常产品的设计方案讨论会议及开发的系统设计方案讨论会议中来,在真实场景下学习产品和研发的设计思路,加之自己的理解,久而久之,就逐渐培养起测试人员的产品思维和开发思维了。
飞马网:随着技术的不断更新换代,测试技术及工具也在不断更新迭代,如今在人工智能时代,测试工作将会有哪些变化,谈谈您个人对于测试行业未来发展的期许。
张琪:首先,根据软件规模的不断增加,测试技术的不断发展,对于测试人员的技能及发展路径也是一个极大的机遇与挑战。未来产品、开发、测试及运维人员的职能边界一定会日趋模糊,大家需要具备交叉技能,即:测试要懂产品、测试也要懂代码及运维知识。
其次,随着大数据及AI技术的普及和应用,测试人员也将有效地将大数据及人工智能技术应用到软件质量保障中来,例如:软件质量预测、智能测试用例生成、测试数据智能推荐等。
另外,随着质量保障技术的智能化以及大数据技术的应用,在软件团队中也将持续将提升质量作为贯穿整体软件生命周期的重要工作,进而形成一种“质量文化”,使整体团队运行更加高效。
综上,测试行业未来的发展将趋于技能全面化、平台及工具智能化,团队也将更加重视质量。
写在***
在整个采访过程中,张琪给记者***的感受就是其创新精神和务实的理念!每聊到一个关键点,他总是能够与最终的落地实践联系起来,从京东实实在在落地的实践案例为记者解答。谈到《京东系统质量保障技术实战》,张琪告诉记者:京东有足够大的平台和实践数据来不断完善整个质量保障体系的建设,也已经有足够多的成功案例来证明他们的质量保障技术产生的成效。在测试和质量保障方面,不需要用太多炫酷的“术语”和高大上的“名词”来包装,只希望将京东经过实践检验的成功经验分享出来,同时在未来会输出一些行业通用的质量保障工具及平台,为更多企业“赋能”