《1-网易游戏实时代码染色系统-网易雷火游戏-王华兰.pdf》由会员分享,可在线阅读,更多相关《1-网易游戏实时代码染色系统-网易雷火游戏-王华兰.pdf(49页珍藏版)》请在三个皮匠报告上搜索。
1、网易游戏实时代码染色系统网易雷火 王华兰自我介绍目前在倩女幽魂手游项目中负责自动化测试、性能测试、工具开发等相关工作。从零开始,搭建了多个自动化测试框架、测试平台等,善于发现并解决问题。曾担任雷火游戏事业群性能组组长,负责并参与永劫无间、倩女幽魂手游、逆水寒等多个游戏产品的压测工作,对压力测试、性能优化等也有着丰富的经验。王华兰 网易游戏 雷火事业群 资深游戏测试开发工程师目录04 未来工作&总结01 背景介绍02 系统介绍03 架构搭建背景介绍线上事故1天降惊喜活动异常表现:玩家断线重连、顶号会导致重新计时原因:程序没有正确处理断线重连和顶号的情况,没有测到这两种情形影响:三级线上事故线上事
2、故2帮会仓库复制装备表现:出现多个百炼装备,除了词条,数值属性等一模一样原因:玩家通过外挂手段绕过客户端限制,服务器端没有进行正确的验证,没测到相关分支影响:二级线上事故线上事故总结在测试过程中已经修复过一个刷属性的bug,但是在验证测试用例的时候设计的还不够全面,覆盖度不够时间紧张的时候更多的是进行黑盒测试,有些逻辑上的漏洞还是需要从代码层面考虑.延迟触发AI易发生边界问题,在测试时要多考虑一些异常情况的发生测试未覆盖弱网情况下,登录同步协议丢失的情况当代码重构时,相关部分的内容要注意回归测试,避免有遗漏的部分没有测试这次是功能迭代,主要去测试新功能和旧功能是否都正常,没有测试这种条件复杂的
3、情况,测试覆盖面也不广,经过这次事故后及时补充了测试用例.BUG分类32%68%BUG分类覆盖不全其它考虑不全测试遗漏时间紧迫.最大影响范围:全服直接收入影响:10,000,000+常见修复代价:停服、回档、补偿测试痛点依靠经验、能力测试?个体差异大不易把控质量如何评估测试质量?游戏系统复杂不断开发迭代如何优化代码?占用内存空间快速了解边界及异常处理review代码有一定门槛?更有针对性地设计用例测试行为如何与代码联系?测试与程序同学无缝对接解决思路代码覆盖是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。系统介绍系统功能介绍实时代码覆盖率获取实时显示用户当前
4、操作所涉及的代码及覆盖率结果。多样化数据分析支持跨版本、跨平台、跨进程等多样性结果分析。可查看代码实现逻辑及覆盖详情了解产品的代码实现并通过颜色来确认该模块是否有测试到。历史结果追朔可查看历史测试记录。完善测试流程跟进QA,责任程序对相关提交的测试结果进行标记,测试结果进一步促进提升质量。代码测试结果验收自动验收测试是否覆盖程序每一次提交。使用场景黑盒测试黑盒测试白盒白盒化化灰盒灰盒化化黑盒测试转换:全员迈向灰盒化、白盒化,用最直观的方式呈现测试用例的效果,测试者可以是个对代码0基础的用户,用最“小白”的方式进行输入输出的观测。Code Review在做白盒代码Review时,采用实时代码染色
5、系统可以更高效的验证逻辑问题,同时也可以实时监控玩家操作对应的代码执行逻辑,加速整体Review效率。闭环链路黑盒测试可视化-测试行为与代码结合,所见即所得,快速上手。全链路保证质量-实时捕捉“服务器-客户端”结果,对用户无感知。精准锁定遗漏点-问题锁定在代码层,快速定位,使用零门槛。工具的定位代码覆盖率只是一种度量标准实时代码染色系统只是一种检测工具代码覆盖率100%!=无BUG代码覆盖率高!=测试质量高代码覆盖率低-测试质量低倩女幽魂手游永劫无间新倩女幽魂online逆水寒天谕手游忘川风华录接入项目流星群侠传接入项目10+检测版本1000+架构搭建覆盖率语言对象的确定某手游项目C+Lua/
6、PythonC#(C+)Lua某端游项目C+Lua/PythonC+Lua引擎层代码稳定,出BUG概率极低是否需要为稳定的引擎层代码增加测试工作量脚本语言如何收集代码覆盖率?自带库函数Luapythondebug.sethook(.)debug.getinfo(.)Coverage.py报告延迟生成-所有用例执行结束,再计算覆盖率结果产品质量挂钩-游戏产品的异常影响覆盖率结果的生成1.0版本流程1.0版本:自动化测试1.0版本:覆盖率报告1.0版本:使用结果难用拿到覆盖率数据有什么用?操作复杂,使用成本高每天报告没什么变化好卡啊客户端崩溃数据展示性能问题2.0版本结果展示:实时呈现2.0版本流
7、程实时采样实时计算实时展示性能问题:方案ALua_Debug性能分析C层与Lua层频繁交互严重影响性能不执行回调hook结果给Lua,直接在C层处理hook结果性能问题:方案Ahook结果处理C层缓存结果游戏工程重新打包文件记录hook结果LuaJit重新打包优点:大幅提升性能缺点:受限于现有的debug库函数的实现重新打包性能问题:方案B代码覆盖率收集自带库函数插桩性能问题:方案B代码插桩:即程序插桩,是在保证被测试程序原有逻辑完整性的基础上,在程序中插入一些进行信息采集的代码段,通过这些代码段的执行抛出程序运行的特征数据,然后通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到
8、逻辑覆盖等动态信息,从而达到测试目的。性能问题:方案B脚本语言执行流程解释型语言源代码解释器解释源代码操作系统Windows/Linux/MacCPU脚本文件词法分析语法分析生成指令集执行指令依赖语法分析结果性能问题:方案B(Lua)基于Lua虚拟机二次开发:语法分析时切入分析语法获取代码行及Token信息记录并发送-记录并处理插桩性能问题:方案B(Python)基于ast(Abstract Syntax Trees)模块实现代码插桩功能ast.NodeVisitor遍历ast记录代码行号信息ast.NodeVisitor修改ast节点代码插桩性能问题:方案B插桩前插桩后性能问题:方案B020
9、4060806789 10 11 12 13 14 15 16 17 18 19 20性能对比图正常版本库函数版本插桩版本正常版本:28%库函数版本:100%插桩版本:34%-测试场景:20个玩家跟随主玩家随机跑动,有AOI、寻路等开销性能问题:方案对比方法工作量性能消耗灵活性扩展性Lua_Debug.sethook少高低低优化Lua_Debug.sethook多低中低插桩多低高高包体处理流程适配项目打包方式:日常打包,有版本控制在工程里测试,无版本控制(svn/git等测试)适合游戏类型:使用脚本语言开发其它语言陆续支持中(C#)适合终端:Linux、PC、Androi
10、d、IOS等适配方式:服务器-客户端整体链路局部代码包体处理流程局部插桩额外处理包体-patch生成相应的插桩代码C#打包未覆盖代码进程启动/关闭时调用在测试期间未执行到保底性质代码防止策划表里漏填的防御代码给未来有可能扩展的功能预留的接口应用实践案例1应用实践案例2应用实践2023情人节活动结果记录框架优化大批量数据的实时处理延迟 2s系统完善历史数据-随时查看历史记录。版本合并-跨平台、跨版本、跨进程数据分析。系统完善平台建设-与测试中心其它工具数据打通svn 提交管理平台显示svn提交记录记录测试结果实践效果全员灰盒化、白盒化-黑盒测试人员对自己的模块更有信心。黑盒测试可视化-测试结果即时呈现,提升测试人员的工作效率。测试所见即所得-通过颜色区分遗漏点,精准定位问题。降低代码门槛-新员工也可以快速上手设计完善的用例,直观地review代码。未来工作&总结未来工作智能化精准化预测代码BUG自动化降低人工测试成本未来工作工具化一站式打造一体化全链路测试平台全栈化美术资源、策划数据总结背景介绍系统介绍框架搭建未来工作语言的确定如何收集如何处理引擎层逻辑层自带库函数插桩包体处理架构优化全局局部实时/历史/合并其它工具打通