当前位置: 首页 > 科技观察

【NCTS峰会回顾】360Search彭兴强:360Search质量保障体系介绍

时间:2023-03-12 22:47:13 科技观察

2019年10月26日,由Testin主办的第二届NCTS中国云测试产业峰会在京召开。以“AI+未来”为主题,汇聚国内外测试领域知名专家学者、领先企业决策者、高级技术管理者、媒体从业者等,共同探讨高端云测试技术并帮助测试从业者了解最前沿的行业趋势,以及最新的行业实践。会上,360搜索测试主任彭兴强作了介绍《360搜索质量保障体系介绍》。彭兴强分享360搜索业务,通过CI/CD全流程自动化,功能、性能、接口测试自动化,加上业务监控,在线产品质量自动分析,AB实验和一整套数据分析系统保障质量在线服务。以下为彭兴强演讲实录:大家早上好!360刚刚举办了一场测试嘉年华。当时有很多同学参与,问了一个问题,未来测试的方向在哪里?今天听了徐坤老师的分享,觉得Testin确实走在了行业的前列,这对我很有启发。下面与大家分享360搜索在质量保证体系建设中的一些经验。我在阿里巴巴工作了四年,然后去了360,在360呆了七年。这期间,我一直负责测试搜索业务。七年后,我创建了质量保证体系。今天的介绍主要分为三个部分:业务介绍、质量保证体系实践经验、问答环节。一是经营情况。在搜索领域,大家应该都接触过360搜索。搜索的基本过程如下。首先,我们会积累一批链接库。蜘蛛通过链接库中的链接获取在线网页数据,进入网页库。经过筛选过滤,最终成为我们的在线索引数据。用户通过前端搜索框查询访问索引库数据,获取所需结果。搜索业务的特点是什么?首先,系统庞大。整套服务需要上万台服务器,几十个在线业务模块,日PV上亿,核心业务单实例需要上百台服务器和多个团队开发维护;其次,业务逻辑复杂,大型Online业务相互依赖,一套完整的业务流程需要经过十几个业务模块,结果展示需要经过几十个算法策略模块;在更新的实时数据、特殊类型展示的结构化数据、垂直领域的特殊数据等方面,所有数据都必须能够及时、准确地满足用户需求;第四,测试场景复杂,庞大复杂的系统导致相关服务几十个。需要管控,很多模块是不同团队开发的,线上查询的多样性导致案例场景千变万化。对于这样的企业,我们如何保证质量?让我简要地告诉你。首先,我们在流程自动化方面构建了全流程自动化体系。在项目管理方面,我们也做了很多事情,比如把时间轴、项目时间节点和数据关联起来。它有自己的一套功能自动化、前端自动化和界面自动化的平台。专项测试有性能测试平台和DIFF平台。最近有人问我一个问题,人工测试能代替吗?经过这么多年的实践,我们发现没有办法替代人工测试。自动化过程只是一些固有的和已实现的过程的自动化。手动测试在新功能的验证中仍然必不可少。在整个编译、打包和发布过程中,由于系统的复杂性,需要上百台机器单排运行核心功能。开发和测试一个项目要熟悉所有模块是非常困难的。我们在测试开始时遇到了一个问题。在很多同学尤其是新人对项目不熟悉的情况下,部署环境非常耗时。他至少花了一周的时间才理解了整个模块。通过自动化的搭建实现了全流程的自动化后,任何一个新同学只需要关心自己模块的变化,通过自动化系统部署自己需要的环境,就可以快速切入业务,大大提高整体工作效率。另外,现有很多功能的自动化,包括自动发布,整个发布基本上不需要人工干预,也有功能自动回归的平台。另外,线上还会出现一些badcase,其中很多并不是漏试造成的。数据,或者新产品类型的出现,导致无法满足用户需求的结果,这是由在线质量自动化分析系统来保证的。最终衡量产品质量的是用户。通过A/B实验分发,先让部分用户使用,快速上线,对比多个实验版本,然后通过详细的数据指标分析,了解实验产品的用户使用情况,找出一些不良版本,推送在线高质量版本。还有监控。我们的业务那么复杂,接口那么多,流程那么长。靠人来监控是不现实的。我们必须有一个自动化的监控模式,通过一个完整的监控系统来发现整个过程中的问题。我们的测试开发比率是比较高的。如此高的试开发比如何保证质量?首先是项目管理。刚才有老师提到了预考。最终的测试是没有测试,质量完全靠开发自己来保证。但由于开发水平参差不齐,业务复杂,不同开发团队之间开发难度较大。要自己保证质量,就需要进行测试,建立一套完整的测试程序。在项目管理方面,项目要规范、审批。我们发现在测试前期的沟通过程中会出现很多问题,比如需求不明确,低级问题不断出现,中间反复沟通消耗大量精力。事实上,大多数项目都在整个项目中。周期内留给测试的时间不多了。如果前期规划不好,就会浪费很多时间。因此,项目的合规性非常重要。有必要建立标准化的流程、项目描述和项目文件。此外,全周期平台管理,任何节点,任何项目,都可以在平台上追溯,所有项目都有一个时间轴,可以回溯到任何节点,暂停,回调,bug修复,或通过测试,我们都可以看到可以快速定位到某个节点,比如项目延期,为什么延期,哪个环节出了什么问题,我们可以通过平台上的记录一目了然。通过绑定项目管理平台和数据分析平台,可以了解项目上线后的情况,进一步把控上线产品的质量。测试的极限是不测试。保证质量,减少后期测试的投入,需要尽可能加强自身质量建设的开发,不能出现低级的bug,为前期的质量建设做铺垫.在流程上,我们做了很多事情,比如编译打包自动化,环境部署自动化,基础功能测试自动化,前端,性能,接口。整个系统由自动化建设支撑。传统的过程是开发。开发完成后,有自测、测试、冒烟测试。如果失败,它将被回调。如果冒烟测试通过,则进入QA测试环节。我们做了一件事,将之前的所有部分都抽象出来,放到一个全自动化的测试流程中,编译打包,测试,冒烟测试,自动化测试,全在一个全自动化的测试流程中。此链接目前不需要测试即可参与。现在它已经成为开发的全自动测试。测试了这两个链接。那么有两种情况。如果是性能测试QA直接确认结果同意上线,另一种就是有新功能需要验证,测试同学完成新功能的测试,比如某个版块的新优化,因为我们整个过程是完全自动化的,测试同学不需要参与,我们只需要经过所有的自动化验证,以及我们可以支持自动化在线。一个完全自动化的过程。一个项目提出后,首先会检查公共代码,因为它可能会影响到其他模块。公共代码是我们必须检查的,其次是配置文件检查。在配置文件方面,很多开发者存在修改不需要测试的误区。后来我们发现这是一个很大的误会,因为修改导致项目出现了很多问题。因此,我们把准备工作的验证作为自动化建设中的一个基础环节。另外就是功能、功能、接口、模块、离线建库、性能测试、DIFF测试、兼容性测试等的回归,因为线上可能会有不同的版本。版本上线后,支持当前版本和上下版本。需要测试兼容性,所有环节都在自动化流程中实现。接口自动化,我们收集在线数据,成为我们的测试用例。当然,这些还不够。我们还需要在特定场景下构建自己的测试数据。公共层封装了常用的功能,比如抓取功能、日志等。分析、写入数据、发送邮件等基本功能,配置层管理配置项,通过该平台实现接口的自动化测试。服务器还有一套自动化程序,完成测试架构和基本功能的封装,实现业务测试人员不需要关心测试架构的代码。他们只需要根据格式输入案例并运行它就可以得到自动化的结果。将测试框架与用例分离,降低测试人员参与自动化测试的难度,让大众参与。前端自动化平台主要通过python+shell+selenium实现。自动化性能测试。搜索有一个特性,对性能要求特别严格。我们的很多工作都涉及测试系统性能。之前的所有性能测试都是由同行测试人员完成的,工作量比较大,工作内容也差不多。我们开发了自动化性能测试平台,发布测试人员,让开发者自己做性能测试。我们只做平台功能和数据分析和最终结果的确认和检验,减少测试人员的工作量。一般性能测试平台的测试结果主要集中在机器的资源消耗上。该平台易于使用。您只需提供相应地址,选择所需数据,平台全自动运行。我们也有定制的,比如引擎,有时会专注于特定的指标。我们将基准版的数据指标集成到自动化中,将基础指标标准化并与原始数据进行对比。如果有变化,需要人工分析定位问题出在哪里。性能测试自动化平台是数据定制的。对于每个业务,我们可以自定义数据。我们不需要关心开发的数据。我们只需要选择要做什么业务,选择什么样的数据,点击确定即可。平台支持数据上传,有具体数据需要验证,需要的数据可以自行上传。另外支持多机多机房的压力。我们需要向不同的机房发送压力,平台也可以支持。另一个是实时日志。如果测试需要观察实时数据的状态,有些性能测试不需要在整个测试完成后读取结果,比如10分钟或者20分钟。如果发现问题,可以停止测试并解决问题。我们支持秒级数据查看。此外,平台还可以查看历史任务管理和指标变化。进程监控,需要关注某个特定任务中某些进程的情况,需要填写进程名称,可以通过平台查看。由于Diff,搜索引擎的案例很多,很难全部覆盖。每次测试应该注意哪些查询?我们只关注变化的部分,只关注当前版本发生的不同变化,比如Diff中不同位置的比例。前面说了,搜索业务线很长,不仅是现场流程,线下流程也很复杂,如何保证?业务监控是一个非常重要的环节。我们将以下几个方面分为以下几个方面。一是基础数据监测。从万亿级网页库爬取到百亿级网页库,是一个非常复杂的过程。整个数据的状态如何?中间可能出现链接问题,数据突然停止更新,或者突然消失。我们需要监控以确定数据是否存在。另外,每条新的数据都有一个时间戳,我们需要判断这个时间戳是不是最新的。另外,如果数据的大小变化比较大,也需要引起注意。另外,字段值是否发生变化,必须通过监控才能发现。接口的监控,接口的变化率,接口的正确性也需要注意。还有就是查询失败率,我们控制在百分之一甚至千分之一以内。如果超过,可能会出现问题。还有及时性,新闻查询有最新结果。泛时效性,比如新的购房政策,会有最新消息。我们只关注最近几年的结果,如果你发布几年前的数据就没有用了,所以这个信息也是需要判断的。还有特殊显示结果的事件查询。比如国庆阅兵这样的题材是非常新鲜的活动,需要特别展示,给客户更好的体验。另外,官网和优质网址,比如淘宝、京东,如果最好的结果没有排在第一位,可能是我们的数据链接、索引链接,甚至是数据筛选环境有问题,这也是需要注意的。以上就是在测试的基础部分应该做的事情。测试后会发生什么?效果如何?最后,用户说了算。如果你觉得自己做的产品很好,但用户却不使用,可能说明产品质量还是有问题的。如何验证?A/B实验是一种很好的检查方法。AB实验是一个很重要的环节,一是分流,二是数据。把我们整个搜索流量分成不同的桶,按照实验配置来划分流量,确定某个实验命中了哪些用户,然后再分析后续的数据,看整体效果好坏。AB实验也是一个全自动化的过程,全方位、多角度分析产品数据指标。以上都做完了,质量可能还是得不到充分保证,为什么呢?因为我们还是会收到用户的反馈,在使用过程中会出现各种各样的问题,不是因为漏测试,而是因为产品复杂,查询千变万化,很难覆盖到每一个场景,所以我们开发了在线自动化分析系统。从效果来看,我们做了一些尝试,比如截图聚类,拦截我们的页面,去除机器学习训练的无关信息,筛选出一些特征较好的结果,过滤掉特征不好的结果。过滤掉它并发现我们的设计质量问题。另一个是sug,是我们的智能推荐,也可能有badcase。我们会对语料进行处理,进行主题向量变换,计算相似度,找出推荐的badcase。比如推荐里面有重复,比如2399小游戏,有很多重复数据。经过数据处理,发现去掉了一些非常相似的。整个自动化分析涉及到一些比较好的技术,比如图像处理,机器学习,包括算法。现在大家都在讨论测试左移。左移最重要的是在正式测试前更好的提升版本质量,减少测试不必要的消耗。还有测试的右移,左移是提升开发质量,右移是根据用户数据进行分析、预测、质量自动化。今天就说这么多,谢谢大家!