一个AI能把游戏从头打到尾,很多人会顺理成章地觉得它已经具备了测试能力。爱游戏测试AI不这么看:通关和测试是两种目标完全相反的能力。通关Agent要的是又快又稳地走到胜利条件,路上会主动避开一切可能失败的分支;测试Agent恰恰要往那些分支里钻——装备栏溢出、任务状态冲突、存档读档之间的数值错位,这些普通玩家几乎不会主动触碰的角落。爱游戏为什么把“玩家Agent”和“测试Agent”分开说的就是这件事。
这个栏目关心的是自动游戏测试和游戏QA Agent怎样在真实项目里落地:测试机器人应该执行什么样的动作序列、遇到异常之后怎么判断这是不是BUG、怎么把一次偶发故障整理成可以复现的步骤,以及这套体系和爱游戏玩家AI、爱游戏AI大模型之间的边界在哪里。这里不承诺“自动化能发现一切问题”,AI测试可以承担真人测试员很难长时间坚持的重复探索,但替代不了真人的主观体验判断。
会通关,不代表会测试
把一个擅长通关的Agent直接拿来做测试,最常见的问题是它会像玩家一样“绕开麻烦”:遇到卡视觉的角落就走开,遇到看起来无意义的操作就跳过。可是很多BUG恰恰藏在这些被绕开的地方。测试Agent需要一套不同的奖励设计:走到没人走过的状态比走到终点更值钱,触发一次异常比顺利过关更值钱。这也是爱游戏把玩家Agent和测试Agent分成两套目标、两套评价标准的原因,而不是给同一个模型换个说法。两套Agent甚至可以共用同一份地图和规则数据,区别只在于“走到终点”和“走到没人验证过的状态”,哪一个才是它的加分项。
主动制造异常,而不是模拟正常玩家
普通玩家的操作大体是一条向前的路径;测试机器人更像是故意找茬:重复点击同一个交互点、在过场动画中途读档、把任务A做到一半再去接任务B、在资源耗尽的边界状态下切换装备。测试机器人应该像普通玩家一样玩吗?答案可能恰恰相反把这类探索策略拆得比较细:为什么要专门去撞边界、为什么要在中途退出,以及这些“反常操作”覆盖的其实是最容易被开发过程遗漏的状态组合。
长任务链里,BUG往往在很晚才出现
假设一个测试脚本沿着一条很长的任务链持续运行了数小时,中途一切正常,直到某个不起眼的数值累积到某个临界点才出现状态错位——这类问题很难靠短流程复现,必须依赖持续记录的行动轨迹(Action Trace,即按时间顺序保存的操作与状态记录)。游戏测试机器人为什么最怕“跑了8小时以后才出BUG”讨论了状态覆盖和轨迹压缩:怎么在不无限增加日志体积的前提下,把出问题之前的关键几步提炼出来,变成可以直接交给开发的复现路径。
先有测试Oracle,才谈得上“这是BUG”
AI测试真正的难点往往不是探索,而是判断:角色穿墙一瞬间,是关卡设计允许的瞬移机制,还是不该发生的碰撞穿透?没有一套判断标准,再多探索也只是收集了一堆截图。测试Oracle(用来判断当前结果是否符合预期规则的判定层)需要结合关卡规则、任务状态和角色能力表来裁决。爱游戏为什么需要“测试Oracle”说明了这层判定为什么不能省略,以及规则库覆盖不到的模糊地带该怎样标注成“待人工复核”而不是硬判对错。规则写得太严格,会把设计师故意留下的“隐藏机制”误报成BUG;写得太宽松,又会漏掉真正的异常,这个尺度需要和关卡设计反复对齐,不是一次配置就能定死的。
平衡性问题,可以先让机器人分层跑一遍
一个关卡对新手太难还是对高手太简单,靠人工试玩很难覆盖足够多的组合。游戏平衡能不能让机器人先测?介绍了一种思路:用新手、普通、高手三种不同水平设定的AI玩家(Skill Agents)各跑若干轮,对比通过率和死亡位置的分布差异,把明显失衡的区域提前标出来,再交给真人设计师复核和调整,而不是拿机器人的结果直接当结论。假设某个区域里高手Agent和新手Agent的死亡位置几乎重叠,这通常提示问题出在关卡结构本身,而不是难度曲线;如果只有新手Agent频繁卡死,则更可能是引导信息不够,两种情况对应完全不同的修改方向。
测试Agent发现的异常状态,很多来自玩家真实行为里没被覆盖到的组合,这部分内容可以参考爱游戏玩家AI;而测试Agent需要的长期记忆和多模型协作方式,则在爱游戏AI大模型栏目有更完整的讨论。