测试右移实践的一些总结思考—稳定监控“及时雨”

随着项目开发的逐渐敏捷化,QA的职能早已不单单是曾经简单对功能的测试,在领域内测试左移和测试右移这两个概念被一再提及。

本文将分别从稳定发布、监控、风险控制三个方面,主要介绍一下目前测试右移概念在组内的落地应用、一些还没有落地的构想以及有意向采取的行动。

随着项目开发的逐渐敏捷化,QA的职能早已不单单是曾经简单对功能的测试,在领域内测试左移和测试右移这两个概念被一再提及。实践了左移和右移的QA团队,在项目组内往往能够获得更大的主动权,产品的质量也更加有保障。虽然项目本身可能更多采用敏捷的迭代增量型或适应型的开发模型,但是就具体功能而言,实际落地还是更多采用偏瀑布的预测型生命周期。测试左移和右移的基础概念便是在原本测试应有的阶段的左右延伸。

图片

测试左移与测试右移

左移和右移实际上是两个挺大的领域,展开来其实都有挺多可讲的。对于右移而言,笔者个人的定义更多是采取措施稳定线上生态、主动控制、发现并规避问题。笔者所在的天谕测试组是我认为在右移方面做得很不错的团队,我们有非常多的工具在线上问题的预警上发挥了不小的作用。但正巧最近产品出现了几个刷类事故,有未测试充分导致的回档问题,也有线上潜伏了数年但是一直未被发现导致被利用损失惨重的问题,也让我有机会对右移在项目组内的实践重新产生了一些思考。

本文将分别从稳定发布、监控、风险控制三个方面,主要介绍一下目前测试右移概念在组内的落地应用、一些还没有落地的构想以及有意向采取的行动。

01、稳定发布

稳定发布,类似灰度发布的概念,当新内容/新引擎上线时,先小范围测试,再在全服覆盖的做法。在功能层面,采取开关的形式,在每段功能逻辑入口增加开关判断后续逻辑是否能走到,这样可以在上线新功能时先小范围测试,稳定后再修改全服的开关状态;在引擎层面,客户端方面采取的是同一个客户端同时存在两套或多套exe,每次启动时根据配置的概率有低概率启动更新的偏不稳定的exe;概率文件可以在每次启动登录器时随时无感更新。服务端则是在引擎更新后,在小范围服务器优先发布,观察数周稳定后再推广至全服。

02、监控

1.LOG监控

LOG是玩家行为最直观的记录体现,也是我们分析线上问题、进行数据统计等行为的最基础数据来源。作为QA掌握项目LOG的主动权是很有必要的。

据我所知,有些项目的LOG主要由UX或其他第三方部门处理,策划需要时提出需求,由平台方进行处理后生成报表。相对而言,天谕端游对玩家行为LOG建立了一套相对完善的体系,这边先对我们的工具做一个简单介绍。

首先我们建立了LOG的基础展示页面即数据中心,将存储进mongo db的日志数据以字段详细内容的形式展现出来,可以对几乎每一条敏感操作做非常详细的记录和操作较为简单的可视化查询,即使是不懂得使用SQL的非技术岗也能够从这个平台获取到信息,对平时的运维工作提供了很大的便利。

图片

LOG数据中心界面

但是这种平台化的展示更多是针对微观的具体的数据,当想获取宏观的数据如统计类信息时,单纯的数据罗列会显得有些无力。

于是我们引入了第三方伏羲的数源平台,也就是针对技术岗人群可以直接对LOG进行SQL查询及脚本处理的平台。伏羲数源是在处理跨越时间较长、条件较明确的一次性需求时常用的平台。天谕的大部分LOG数据目前都寄存在伏羲的这个平台上,只要明确要查询的字段和条件,只需要简单的SQL语句便可以获得我们想要的结果。虽然从可视化的角度不及上面的工具,但是依然具有高度自由、门槛较低、查询范围较广等优点。

在此基础上,我们希望对SQL的结果能进行一些更复杂的脚本化处理,于是有了线上日志监控系统。该系统在获取db数据的同时还可以使用python脚本对数据进行个性化的处理,并且支持定时任务。这个平台是我们当前LOG自动化的基础,我们可以在写完针对某个系统的针对性监控脚本以后,让它定时执行并通过POPO(内部IM)机器人推送检查结果,确认这个周期内的数据是否存在异常,例如每两小时一次的洗属性的监控,就可以从洗炼次数(是否有异常突增)、洗出结果等多个层次供QA和策划确认是否可能存在异常。但是目前的缺陷在于这个平台的运行会消耗大量服务器资源,因此对CPU时间存在要求,很难处理大批量数据,目前而言支持的项目有限。理想有效的LOG监控体系,应该符合以下的模型:

图片

LOG监控模型

测试部目前应该正在调研开发更通用的log监控平台,届时各个项目应该都会有更加深入的支持。

对于QA而言,在有便捷工具的情况下,需要做的就是确保LOG的实用性。一般而言,LOG需求通常由策划和QA发起,策划会关注核心的参与数据,而QA的角度应该更加微观,需要关注到更细节的操作层面。符合有效性的LOG,我最常用的自检标准是,如果功能上线以后,有玩家反馈自己在这个玩法里丢了道具,你能否通过这个系统及关联系统的LOG整理去详实的数据去证实/证伪他的言论。在这个证明流程中,需要时间、人物、状态、操作、关键项变化前后状态等,这些都是各个系统LOG的基本组成要素。

这边还有另一个问题,例如战斗结算,产生的LOG量可能相当巨大,基于现实原因,我们可能没法记录下每次伤害的结算信息,那么当玩家反馈“某玩家的伤害/防御有异常,他们是不是利用了BUG?”,如果没有足够的信息量,我们进行判断时往往会陷入被动。所以这边我们引入了重要度分级的概念。以我前面提到的战斗结算LOG为例,对于一般玩家,我们每过一段时间记录一次玩家属性快照到数据库中,包括玩家在这个时间点身上的所有状态、所有属性。对于玩家反馈或者是系统监测到可能存在异常的玩家,这个频率可以在线实时提高。对于重点监测的玩家,在提高频率的同时,还会为其设置技能结算白名单,在各类结算方法处判断参与结算的玩家是否在白名单中,如果在的话便记录下本次技能结算的详细数据到LOG中以供查询。白名单可以随时调整。通过这样的方法,既保证了LOG数据量不会过大,又能做到精准监控。

2.舆论监控

舆论监控主要分为两块,一块是被动的由运营提交问题,一块是主动去各个渠道发现问题。

在运营提交问题愈发频繁的今天,如何处理运营问题本身也是一个问题。早期在运营BUG反馈群,运营可能在一个小时机关枪一样连续抛出十几个问题,其中有效的问题可能并不多,但是过多的问题会导致回应效率变低;早期我们曾做过一个运维BUG反馈平台,希望运维bug都提在这个平台上,我们方便处理和及时反馈。

但是在实践的过程中,运营迭代速度过快但流程没传承、大量外包运营无登陆权限、运营自己的网络访问限制等客观因素实际上阻碍了这个平台的有效性。

因此我们把POPO机器人和运营反馈BUG流程打通,运营提交BUG时增加一个关键词,我们就自动把提交内容收录到BUG反馈平台中,在处理完成后,由BUG反馈平台推送处理结果给运营,整个过程运营只需要接触POPO而无需接触其他平台,QA们有专门的平台处理线上问题,更加有条理性。

但是运维反馈bug依然存在一些问题,由于运营方面的多方位因素,对于拿不准的问题他们逐渐更偏向直接询问开发组,bug提交量近几年量级逐渐增加,除了提问类工单比例逐渐上升外,还有很多伪bug是玩家在诓客服想获取利益的;其中有些假bug往往处理起来需要耗费挺大的人力,有时候也挺为此头疼的……不过这倒是反向推动了不少系统log结构的完善,一方面足够完善、可读性强的LOG可以让运营人员自行筛选并解答玩家问题,另一方面也可以帮助我们拿到更多的事实依据,判别哪些问题是真实存在的BUG,避免后续人力的浪费。

至于另一方面,主动发现问题,曾经我们的习惯是版本发布后,由值班QA定期去贴吧、论坛、微博等渠道扫玩家言论,发现BUG或吐槽后给策划或技术开单处理。随着平台化的进步,现在的舆论监控主要由两部分组成,一部分是对游戏内的敏感言论做捕捉,另一部分是雷火渠道信息收集平台,主要用于监控各大平台(论坛、贴吧、taptap)的反馈,根据标题贴近BUG的程度计算风险系数并录入。

图片

雷火渠道信息收集平台

虽然舆情监控的的确确帮我们发现了不少隐藏BUG及疑难BUG复现的线索,但是在运营过程中可以发现,绝大部分少数人利用的危害比较大的BUG一般都不会通过游戏内渠道或公开渠道进行传播,很多都是通过公会QQ/微信群或YY群进行小范围传播,并且这种套路逐渐常态化,因此项目组内有人可以深入游戏生态,打入玩家内部依然是很重要的工作,当然最根本的还是完善面向数据的主动防御机制。

3.性能监控

即便有压测等环节,线上也经常会出现各种性能方面问题的意外情况。深度参与性能监控的流程和体系,有助于QA更深入了解系统瓶颈,对后续测试的思路拓宽和厘清侧重点帮助是很大的。

我们游戏对线上性能的监控需求改进动力来源于群战及各类复杂的PVP玩法或其他玩法。早期这类活动出现过不少性能问题,并且当时的性能监控比较被动,一般是当服务器负载高于某个阈值时,在服务端抛错群里抛出警告,然后由服务端手动连入线上服后台进行profile确认问题,这种做法往往响应较慢,容易错过关键时机,且只能由高权限服务端手动操作,生成的报告比较晦涩,整体参与度和实用性都不强。

现在线上的性能监控则主要通过SA那边维护的两套工具postman及monitor进行,postman以可视化的形式展现了线上服在各个时间段的服务端性能数据,并且可以就某一个具体的时段具体分析profile,让QA也能参与到线上性能的监控里来,并且能更方便地在生产环境找到性能瓶颈。Monitor则直观展现了各服的CPU、内存等基础性能状态。可以看到这两套工具都具有高度可视化的特征,在收到出现问题的推送时能够更快地确认问题。

图片

图片

线上的性能监控工具

这里再提一个例子,天谕端游前不久出过这样一个情况,部分服一直反应服务器一到某个时间点就很卡,邮件响应速度慢,或者读取角色速度慢等。但是我们调取了这些服的性能数据与其他服比较,发现并无明显异常,在玩家反馈的时间点监控服务端各个进程的CPU占用率,发现也非常稳定,mysql慢查询日志中也只有每天的计费扫描,并不会导致线上这种情况的产生。最后在引擎日志中,发现很多玩家的SQL队列非常长,有些队列已经排到了70多秒;我们从日志平台调取了玩家的操作序列,在这个服和其他服进行对比,发现相同的单次操作,在这个服写入需要1s,在其他服只需要0.1s,于是定位可能是硬盘写入性能问题。联系SA后得知其在近期的确更换了服务器的硬盘,后排查是SSD raid存在问题导致了写入卡顿,第二天更换硬盘后服务器状态即恢复正常。

这次事件后,我们注意到性能监控的指标事实上还存在不少缺失,例如这次dbmgr还存在不少性能相关的指标目前对我们QA甚至对开发而言还依然处于黑盒的状态,我们只能通过watcher的方式查看的数据,过于被动。针对这次问题,除了常规的服务端监控手段外,我们还额外增加了对dbmgr的监控,把sql运行超过一定时间的日志抓取出来并通过POPO报警,后续已经规划通过kibana等平台做成图表,以更直观的形式表现出来。

由于标准不一,设备各异,客户端的线上性能监控目前我们没有采取什么手段,更多的还是在内部机器上进行测试。也希望有这方面实践的项目组可以交流一下经验。

其实挺多的线上性能监控,看似是服务端或者是SA的问题,QA在处理起来可能会有比较无力的感觉,但性能问题的最终指向是线上功能及玩家体验受损,这与QA的职责是强相关的,QA除了具体分析问题原因外,能做的事情还有很多,包括但不限于前期预警方案的设计,监控系统有效性的保证,上线后的执行,出问题后的行为与场景分析等。

03、风险控制

纵使监控做得再完备,第三方检查发现问题也总会存在延时。例如天谕端游在20年底出现的一起刷道具导致的回档事故,19:00问题出现,日志监控并未对这个活动写单独脚本,就算写了也是跟着统一配置半小时执行一次;舆论监控最早在19:20暴露问题,在此之前问题已经得到了大范围传播。因此如何控制风险、规避风险依然是重要的课题。

从游戏机制设计层面,老QA可能都知道几条耳熟能详的原则,比如:

1、 多人玩法注意负载均衡,时间上分批、空间上分地

2、 道具获取先扣除后增加、先设标记位后发奖

3、 低门槛非绑道具谨慎投放,如果必须投放一定考虑工作室影响

4、 活动投放道具尽量用宝箱道具,宝箱配置限定使用次数

……

类似的规则相信有经验的项目组都已经有挺多总结,遵守这些守则的确可以规避很多问题。但事实上根据实际的复杂情况,很多事故的产生并不是几条通用的守则可以覆盖的。因此要寻找更加通用的控制机制。

一种我认为比较可行并且在逐渐推广的是预测型控制机制,即当系统产生了策划配置的预期外的数值时,由游戏逻辑直接采取报警或切断措施。

举个例子,在天谕端游已经上线的系统内,副本首杀监测、数值结算异常监测便是报警类的风控机制。当新服某个副本第一次通关时,会收到报警信息;当玩家结算时发现某个属性过高或者打出了离谱的伤害时,服务端也会推送报警信息;当玩家在某个场景内保持无敌状态超过一定时间后,推送报警信息……

另一步正打算做的机制是根据物品投放的系统来限制投放总量。策划对每个运营活动或新玩法在一个周期内针对每个基础产出道具限定一个警告数目和预期最高上限,当玩家在这个周期内通过此渠道获得的这个道具超出配置的报警数目后,向功能关联人员推送报警信息,超出最高上限后则直接拦截,并生成一个道具恢复指令供运营核实无误后快速恢复拦截的道具。

从可行性层面上,对于MMORPG类游戏而言,玩家获得物品投放的渠道最终都会归结于进包、发邮件等有限的渠道,所以控制起来相对轻松,具有一定的可行性;目前这个方案还在实现初期,如何协调玩家获得道具记录在不同周期需求下的存储方式和程序的运行效率还是一个问题,不过预期内这个系统能实现的话应该会是一个很好的防御手段,像本文开头所讲的两个BUG的例子也可以在这个系统下得到规避。

在这次事件的复盘会上,以及后续测试部的月会上,很多人都提到了一个其他游戏的做法,即把多刷出来的资源扣成负数,后续玩家获得这些道具时将其补充。这个做法的确是处理起来挺有效的做法,但是依然存在一些问题:无追责的贷款可能会降低玩家的活动参与意愿,如果玩家已经通过这个玩法获得了既有的数值收益,那么后续仅仅是扣除这部分数值奖励对他的惩罚也无足轻重了;不过这种业界常用的做法依然具有挺广阔的适用场景,已经在项目内推广使用了。

04、结语

右移的最终目标,是希望技术层比业务层更快地获得异常反馈,以达到极速响应处理问题的效果;或是从业务实践层面出发反推开发层面,预先解决掉导致问题出现的种子。右移的实践除了表现在形式上的环节中QA自己的行动外,在内涵上更重要的是思维和氛围的营造,这部分的内容更多地会穿插在功能的设计期和开发期。质量保障从来不只是QA的工作,我们要做的是把保障质量的观念灌输到其他职能的脑海中,让他们主动来配合我们,让策划在设计时就有意识考虑到风险和备案,让技术更加注重代码上线后的各个维度的表现。有效右移体系的建设需要QA能够给出有说服力的架构体系思路或系统设计思维方式,且能够与项目的实际情况融合,这同时也可以帮助QA在组内构建更大的话语权和推动力,反推组内产品质量意识的提高。

当然,目前项目组的实践依然存在很多不足,希望能够与各位一起讨论交流,分享经验。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)

0x01 产品简介 GutenKit 是一个WordPress的页面构建器,在 Gutenberg 设计您的下一个 WordPress 网站。借助 Gutenberg 的原生拖放界面、50+ WordPress 块、14+ 多功能模块和 500+ 模板,您可以在几分钟内创建专业、响应迅速的 Web 内容。 0x02 漏洞概述 Wordpress GutenKit…

vue-router钩子中调用ElMessage等样式出错

升级 vue3.5 时遇到奇怪的问题, 页面点击离开没反应 经过排查, 是以下几点相互作用导致此问题 vue 有应用上下文的概念, 例如 runWithContext API,vue-router 在调用钩子时会获取 vue 的应用上下文element-plus 在唤起弹窗时会从 parent 或 应用上下文上拿到 config 信息eleme…

OpenCV高级图形用户界面(20)更改窗口的标题函数setWindowTitle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,cv::setWindowTitle函数用于更改窗口的标题。这使得您可以在程序运行时动态地更改窗口的标题文本。 函数原型 void cv::…

浏览器实时更新esp32-c3 Supermini http server 数据

一利用此程序的思路就可以用浏览器显示esp32 采集的各种传感器的数据,也可以去控制各种传感器。省去编写针对各系统的app. 图片 1.浏览器每隔1秒更新一次数据 2.现在更新的是开机数据,运用此程序,可以实时显示各种传感器的实时数据 3.es…

【计算机网络 - 基础问题】每日 3 题(四十七)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质)

Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质) 核心代码完整代码在线示例Cesium 给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求; 但是作为 WebGL 引擎,肯定不够丰富,尤其是动态效果样式。 对于实体对象(Entity),可以通过自定义材质,实现各种…

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布:https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本,结合了尖端的准确性、速度和效率,用于目标检测、分割、分类、定向边界框和…

esp32-c3 Supermini 驱动ds3121的问题

c3 驱动ds3121 ,始终有问题,但把程序用esp32上,一点问题都没有,难道c3 的i2c库是另外的库, 下图只读取秒显示的 错误数据,更换了scl频率,针脚,还是错,但换成esp32 输出是正确连续秒…

字节跳动实习生投毒自家大模型细节曝光 影响到底有多大?

10月19日,字节跳动大模型训练遭实习生攻击一事引发广泛关注。据多位知情人士透露,字节跳动某技术团队在今年6月遭遇了一起内部技术袭击事件,一名实习生因对团队资源分配不满,使用攻击代码破坏了团队的模型训练任务。 据悉&#xf…

鸿蒙开发 四十七 Promise async await

1、Promise是接口 鸿蒙sdk提供的ProPromise版本有点多,是泛型接口,用interface修饰,官网给出的解释是“Represents the completion of an asynchronous operation”,翻译大概意思是:异步操作的完成的处理,总…

全球知名度最高的华人改名大师颜廷利:世界公认的三大哲学家思想家

颜廷利教授,一位享誉全球的思想巨擘与现代国学泰斗,以其卓越的哲学地位和深远的影响力,成为当代思想界的璀璨明星。他的哲学思想深邃而广博,不仅涵盖了人的全面发展、自然社会的深度融合,更在教育理念上独树一帜&#…

2.2机器学习--逻辑回归(分类)

目录 1.算法介绍 2.算法原理 3. API 介绍 4.代码示例 本章节我们来学习线性分类问题,在有监督学习中,最主要的两种学习任务是 回归(regression) 和 分类(classification),而其中线性回归和线…

JR_T0213—2021 金融网络安全 Web应用服务安全测试通用规范.pdf

预览 内容太多,自己下载看吧 https://www.mhtsec.com/667/

精选20个爆火的Python实战项目(含源码),直接拿走不谢!

今天给大家介绍20个非常实用的Python项目,帮助大家更好的学习Python。 完整版Python项目源码,【点击这里】领取! ① 猜字游戏 import random def guess_word_game(): words ["apple", "banana", "cherry&quo…

1. 安装框架

一、安装 Laravel 11 框架 按照官方文档直接下一步安装即可 1. 安装步骤 2. 执行数据库迁移 在.env文件中提前配置好数据库连接信息 php artisan migrate二、安装 Filament3.2 参考 中文文档 进行安装 1. 安装 拓展包 composer require filament/filament:"^3.2" -W…

双十一有啥不能错过的好物清单?真心为你带来2024最值好物分享!

双十一购物狂欢节即将到来,许多朋友们都在期待着这一天,希望能够在这个特别的日子里为自己添置一些日常用品。今天,我特意为大家精心挑选了五款在生活中都会用得到的好物,希望能够帮助大家在双十一期间做出明智的选择。 最值好物…

【java面经thinking】四

目录 悲观锁synchronized synchronized的用法 只能锁引用类型 对象的内存布局(引用型) JDK1.6之前的锁----重量级锁 1.6之后---偏向锁,轻量级锁(自适应自旋锁) 偏向锁 轻量级锁 区别 某些场景使用重量级锁的原因 synchronized是不公…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题,它可能由多种原因引起,以下是一些主要的因素: 不完全的软件卸载 在卸载程序时,如果相关的 DLL 文件没有被正确移除,可能会导致文件…

ASP.NET Core8.0学习笔记(二十二)——单向导航属性

一、单向导航属性引入 1.双向导航属性存在的问题:数据库中存在一些“基础表”,这些表会被其他各种表来引用。比如有一张User表,另有请假表(请假人、审批人)、采购表(采购员、审核员)等多个表的…

H-TCP 的效率和公平性

昨晚带安孩楼下玩耍,用手机 desmos 作了一组 response curve 置于双对数坐标系: 长肥管道的优化思路都很类似,cwnd 增长快一点: BIC TCP:二分查找逼近 capacity;CUBIC TCP:上凸曲线逼近 capa…