揭秘百度智能测试在测试定位领域实践
作者 | intelligents
前几篇,分别介绍了测试活动测试输入、测试执行、测试分析、测试定位和测试评估五个步骤中测试输入、执行、分析、评估的智能化研究和实践,本章节重点介绍测试定位环节的智能化实践。
测试定位的主要作用是在构建失败或问题发生后,快速给出产生该现象的原因,以帮助现象处理者给出合理的处置措施,降低问题处理时长,降低人力定位成本和问题时长,根据原因进行分类一般也分为两种:
一、根因定位:即给出造成失败的真正原因(如代码问题);
二、行为定位:即给出造成失败的可能操作或变化,以快速进行处置,降低影响面。
测试定位智能化通过将数据、算法、工程等相关技术有机结合,从问题现象、问题关联数据、系统关联数据,利用策略或算法给出问题发生的操作项或根本原因,以最终给予问题处理者决策对应的处置行为。在该领域的实践相对较少,百度QA也一直在探索研究和实践。本章节将从多个实践的角度,本章节将从多个实践的角度,介绍相关领域的目标、思路、涉及到的技术点,希望能给到大家一定参考。
一、 基于频谱的问题根因定位
基于频谱的问题根因定位期望能通过定位分析技术手段,揭露出疑似代码问题范围,协助研发和测试人员在定位问题中快速修复,降低人效。基于频谱的问题根因定位在学术界研究已久,其思路是利用测试用例执行过程中的程序元素信息(如测试结果、代码覆盖率),对内部代码做逻辑差异分析,对代码行或代码块进行可疑度排序,从而去定位错误根源。其主要过程为使用插桩编译后的程序执行被测用例集合,对每一个测试用例的标记代码块/语句是否覆盖、是否通过进行分析,以语句/代码块为统计单位,采集<ef,ep,nf,np>四元组特征(ef:失败用例中,该代码块执行的次数;ep:成功用例中,该代码块执行的次数;nf:失败用例中,该代码块未执行的次数;np:成功用例中,该代码块未执行的次数),通过多种可疑度公式(如Tarantula,Ochiai,Overlab等),将每个标记代码块/语句计算出一个可疑度值,并根据可疑度分数排序得到最终高风险代码片段集合。该分析定位能力较为通用,可广泛应用到如单元测试、功能测试、diff测试等测试活动,大大降低人工排查定位成本,后续也将持续探索,结合更多代码白盒元素,尝试更多问题根因定位手段不断提升定位能力,目前百度正在将该定位能力集成到自动化测试流水线中。
二、基于错误码的构建系统定位方案
在测试人员的日常工作中,各种自动化任务量大,其中的异常构建数多,流水线执行完后,业务线同学需要花很多人力在问题定位&标注和红灯修复上;同时,很多问题没有彻底闭环,人工处理止于问题标注和手动恢复,导致同类问题反复出现。为了解决此类问题,我们希望对自动化异常构建进行自动标注、修复、问题闭环。错误码,是当前系统问题的一种较为直观反映。业务能结合代码注释、经验等,将错误码翻译为具体的错误原因;针对这原因一般有两种解决方案,一是可以依靠自动化恢复,二是需要人工介入处理。我们将以上过程概括为自动标注策略、自愈策略、问题闭环策略。自动标注策略指由错误码得出错误原因后,自动化标注错误分类,节省人工定位标注耗时。这要求业务线将任务日志接入统一的日志系统或使用我们规定的插件,并梳理一份错误码和错误分类的映射表,在插件中心进行注册。如此在问题发生时,工具便可以捕获错误日志,并提取其中的错误码,和错误分类做映射,并标注。自愈策略基础是自动标注策略。自愈策略接入需要先圈定自动重启的场景,即满足什么条件需要触发自愈,依赖工具产出的错误码,每一种条件为一种自愈子策略。判断当前满足自愈条件时,便触发自愈策略,如出现红灯时重启环境等。可根据业务线需要,配置超时时间、模块、内存等多个触发条件和自愈子策略,支持业务线自行定制,较为灵活。问题闭环策略同样基于自动标注策略,和自愈策略可以结合使用。在大概率需要人工介入的场景,自动创建问题的icafe卡片,卡片内容中描述问题、错误码和自动定位结果,由人工来确认问题的解决方式和处理结果。从问题出现到卡片创建再到卡片状态被修改为处理完成,才算完成闭环。在项目业务线试点中,异常任务问题上报率达到100%,问题闭环率达到94%。
三、商业收入变化大盘止损决策定位介绍
商业收入变化大盘止损决策定位过程由报警接收, 报警定位诊断、故障特征提取、止损决策、止损方案推荐组成,其核心是覆盖和诊断策略的有效性;其中覆盖又包含报警覆盖、指标覆盖两部分;报警覆盖首先需要覆盖产品线的各个子方向,指标覆盖是指对当前已覆盖报警的业务的监控指标完备性的覆盖,包含系统稳定性指标覆盖、用商指标覆盖、宏观指标&业务过程指标结合完备性指标的整体覆盖,通过完备的报警指标覆盖能第一时间感知商业大盘收入变化风险,基于报警信息制定一套故障特征标准数据结构来解析不同报警获得通用的故障特征;诊断策略对故障特征进行策略分析并最终给出有效的止损推荐方案,诊断策略的有效性对最终止损推荐的质量至关重要。当前诊断策略主要包含风险程度识别策略用于判断报警风险程度;风险指标&报警识别策略用于判断系统关联的风险指标/模块信息;异常点识别策略用于确认业务真实异常时间点;日志trace定位策略结合效果监控拓扑,对报警链路模块日志trace定位,实现精确定位到故障模块,进而对模块程序/词典变更暂停或回滚止损;根据监控影响pv计算当前报警预估损失pv指数,预估线上问题级别, 给出止损建议;通过止损库策略梳理给出完备的止损预案操作指导快速发起止损决策;为了更便于不同业务定制诊断策略,当前提供故障诊断、止损决策策略支持业务低成本自定义编写,其中故障特征可在继承通用策略的基础上自行编排、通知样式可在基本标准格式下进行子编排处理。目前商业收入变化大盘止损决策定位已完成报警触发、诊断、止损推荐的全流程机制打通,并可直接给出止损决策方案。
四、搜索UI展现case级定位方法
为了提升系统质量,质量保障同学一般会针对系统建设全方位的质量监控,虽然能召回的问题变多,但是随之而来的针对case级的定位,就会是一项耗时耗力的工作,ui展现case定位就是基于这个背景而来的。定位主要分为两个部分,一个是基础建设,二就是具体逻辑实现。基础建设是定位重要的一环,系统的复杂度会给我们定位带来极大的挑战,越是复杂的系统就越难定位。针对这个问题我们解决方案是建设完整的日志trace方案。首先为了节省资源,不单独存储日志,只存种子信息,所有日志保存一份;然后建设模块topo,将日志从上到下的进行递归检索,根据日志的内容生成请求链路。最后为了保证安全,建设流量管控,超时等机制。最终完成了秒级延迟和检索耗时的日志trace能力。二就是具体定位逻辑实现,主要是通过定位topo、结合case报警信息去触发整体的召回定位能力,然后通过日志里的进行进行正则化的匹配和提取,来判断在具体case的原因在哪些地方有体现,比如具体的资源为什么没有召回,在哪个地方被删除和修改,最终实现分钟级别的报警接收和自动定位。
---------- END ----------
推荐阅读【技术加油站】系列:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【开源之夏专访】热爱和努力永远不会被辜负——曹行行
夏天渐行渐远,秋天匆匆晃过,开源之夏2022在洁白如新的冬天如期收获了350 位同学的结项成果,这些同学也在开源软件社区留下了自己的足迹,感谢各位同学的支持。今年我们依旧按照最佳质量奖、突出贡献奖、最快进步奖、最具潜力奖四个角度评选出了具有代表性的20位优秀学生。 本次采访,我们邀请了最快进步奖获奖者曹行行,分享他的经验。 姓名:曹行行 性别:男 年龄:21 学校:北京工业大学 兴趣爱好:学习感兴趣的知识并加以实践 --自我介绍-- 1、首先,请简单地介绍一下自己。 大家好!我叫曹行行,来自北京工业大学新能源科学与工程(可再生能源利用)专业的大四学生,辅修专业计算机科学与技术。我在计算机方向的学习起步较晚,踏入计算机学科也是兴趣使然,但是我相信,永远都不会太晚,重要的是现在就去做。我付出了许多精力和时间去追赶科班生的水平,现在我认为我做到了,未来我也会继续努力下去。 2、我们了解到你的专业是能源动力类新能源方向,计算机类的知识是自学的吗?学习这些知识对本专业的学习有哪些帮助? 计算机类的知识并非完全自学,我在本校学习一个计算机科学与技术辅修专业,这是我在大学第二学年处于兴趣报名的,...
- 下一篇
Fastcms v0.0.9 版本正式发布:潜心之作,即插即用的插件化Java CMS建站王者
Fastcms是基于SpringBoot前后端分离技术,且具有插件化架构的CMS系统,系统具有高扩展性,易维护性,可以快速搭建网站,微信小程序,是开发微信营销插件的基石 Fastcms 是真正意义上的插件化开源项目,支付,搜索,订单催付,附件水印,微信自动回复,微信扫码登录,等等都可以做成插件,即插即用,无需重启服务器。 Fastcms 中的文章即是商品,通过插件可以轻松实现付费下载,付费阅读,付费观看视频。 v0.0.9-release版本日志: 文章价格体系扩展设计 CMS模板功能优化 优化CMS内置标签,增加使用说明注释 增加标签管理功能 修复重置密码功能 扩展用户注册功能 优化前端登录逻辑 修复一些已知BUG 版本更新日志 文档地址: fastcms 在线文档 fastcms官方网站
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路