验证——做出来的东西是否符合预期
测试 = 自动化断言「代码按设计工作」(对不对)。验证 = 判断「做出来的东西是否符合预期、有没有价值」(好不好、能不能用、有没有意义)。 测试可以自动化,验证往往需要人、AI、Bot 参与。对普通软件,验证≈功能验收;对游戏,验证是另一套东西——可通关性、可玩性、新手体验、趣味性——这些不能靠 gtest 断言,必须有人玩、自动玩、模拟世界运行。
一、测试 vs 验证
1 2 3 4 5 6 7 8 9 10 11
| 测试:自动化断言「代码按设计工作」 → 单元测试、集成测试、E2E → 回答「对不对」——功能有没有实现 → 可以自动化,结果确定(通过/失败) → 依据:设计文档、功能点、接口
验证:判断「做出来的东西是否符合预期、有没有价值」 → 可通关性、可玩性、新手体验、趣味性、性能 → 回答「好不好、能不能用、有没有意义」——体验是否符合预期 → 往往需要人/AI/Bot 参与,结果有程度(好玩/一般/劝退) → 依据:设计意图、玩家体验、世界规则
|
游戏测试最核心的一点:普通软件主要验证「功能有没有实现」;游戏还要验证「设计的世界规则运行后产生的体验是否符合预期」。 这也是为什么游戏测试不能只靠 gtest,必须有人玩、自动玩、模拟世界运行。
1 2
| 测试:Damage = Attack - Defense → 断言等于 80 ← 对不对 验证:玩家能不能通关?好不好玩?新手会不会卡住? ← 好不好
|
二、游戏的验证标准(十个闭环)
游戏可玩性验证是分层的闭环——每一层都是「输入 → 处理 → 输出 → 验证」,只是验证的尺度越来越大:
1 2 3 4 5 6 7 8 9 10
| 1. 运行不崩 启动闭环 —— 程序能不能跑起来 2. 核心循环能玩 可玩闭环 —— 玩家能不能完成基本操作循环 3. 玩家能理解目标 引导闭环 —— 玩家知不知道要做什么 4. 操作有反馈 反馈闭环 —— 每个操作有没有视觉/声音响应 5. 难度曲线合理 挑战闭环 —— 挑战难不难、卡不卡 6. 有重复游玩价值 循环闭环 —— 玩完一遍还想不想再玩 7. 边界情况不出错 健壮闭环 —— 各种边界情况会不会崩 8. 手感符合预期 体验闭环 —— 移动、跳跃、攻击的手感对不对 9. 不同设备正常 平台闭环 —— 不同设备/系统上是否正常 10. 长期玩不腻 留存闭环 —— 长时间玩会不会腻
|
每一层都是验证的一个维度。 测试(自动化)覆盖 1/7 这类「对不对」的维度;2/3/4/5/6/8/10 这类「好不好」的维度要靠验证。
三、验证方法一:可通关性——AI/Bot 迭代规则通关
验证「游戏能不能被完成」。 这是游戏验证里最基础的、也是最容易被自动化的一层。
内部 AI 迭代规则通关
Code Agent 不擅长像人一样连续操作复杂游戏系统——需要实时观察、精确移动、判断时机、连续输入。于是让 AI 通过迭代规则自动通关:
1 2
| 通不过 → 修改物理 → 还是通不过 → 增加速度 → 还是通不过 → 调整碰撞 → Shift 加速 → 通关
|
这个测试的是「可通关性」——存在一条从起点到终点的可达路径,没有死路、没有卡死、没有穿墙、没有掉出地图。
Bot 测试 / 自动化游戏测试
1 2 3
| 模拟输入(Left/Jump/Attack)自动运行 10000 次 检查:是否卡死、崩溃、穿墙、掉出地图 大型游戏:AI 控制角色随机移动、随机攻击、随机探索,发现异常
|
可通关性验证的发现
- 死路:存在无法通过的关卡
- 卡死:角色卡在某个位置无法继续
- 穿墙/掉出地图:物理/碰撞边界问题
- 不可达出口:出口在逻辑上无法到达
- AI 找到的最低成本解:AI 只关心
goal = reach_goal,可能找到「Bug 通关路线」——这暴露了设计上「正常路径」缺失或过难
可通关性 ≠ 可玩性。 AI 通关只证明「存在一条路」,不证明「这条路对玩家是合理的、有趣的」。AI 的 Shift 加速通关,可能只是它找到的最低成本解——人类玩家未必能发现,也未必觉得好玩。
四、验证方法二:可玩性——玩法测试(人工)
验证「玩起来是否符合设计」。 这是游戏特有的验证——测「玩起来是否符合设计意图」。
1 2
| 例如设计「玩家获得二段跳可以到达隐藏区域」,测试实际是否真的到达 检查:路线是否可通、难度是否合理、奖励是否有价值
|
玩法测试通常人工测试——因为「好不好玩」没法用断言表达。
1 2 3 4 5
| 可玩性验证的维度: 路线可通 玩家能不能按设计路线走通 难度合理 挑战难度是否在玩家能力范围内 奖励有价值 收集/奖励是否值得玩家去拿 机制可探索 核心机制玩家能不能发现、能不能玩出花样
|
五、验证方法三:新手体验——新手测试(第一次玩的人)
验证「一个从没见过这个机制的人,第一次玩会经历什么」。 这是游戏验证最容易被忽略、也最重要的。
开发者疲劳 ≠ 玩家无趣
1 2 3 4
| 「开发者已经玩腻了」≠「玩家会觉得无趣」 「开发者觉得有趣」也≠「玩家一定会觉得有趣」
开发者没有办法恢复「第一次」,所以不能用自己的感觉判断游戏。
|
新手测试怎么做
拿一个完全没接触过的人,不要解释,让他直接玩,观察:
1 2 3 4 5
| 第一次看到新机制:会不会停顿?「嗯?」——如果有,这是好信号 会不会主动尝试:跳、走、Shift、碰撞——如果他开始实验,更好的信号 失败后会不会马上再试:「刚刚好像差一点,再来一次」——非常好 发现机制后:有没有出现「哦——原来是这样」?——这个瞬间特别重要 通关后:「还有下一关吗?」——这才是最有价值的反馈
|
新手体验的关键指标
1 2
| 第一次接触 → 理解成本 → 发现速度 → 第一次成功 → 失败后的重试意愿 → 机制掌握 → 掌握后的新鲜感还能持续多久
|
难 ≠ 卡
1 2
| 好的挑战让玩家产生:「我再试一次,这次应该可以。」 坏的挑战让玩家产生:「我不知道该怎么办。」
|
新手测试回答的不是「好不好玩」,而是「玩家能不能进入这个游戏」。 目的明确、反馈快、失败成本低、重试快、难度递进、机制新颖——这些是新手体验的验证指标。
六、验证方法四:趣味性——反馈密度
验证「单位时间内产生多少有效反馈」。 游戏趣味靠的不是「内容很多」,而是单位时间内不断产生有效反馈。
1 2 3
| 趣味 = 认知闭环的密度 → 玩家不断经历「发现 → 尝试 → 反馈 → 理解」的闭环 → 闭环越密,越有趣
|
趣味性的验证维度:
1 2 3 4 5 6
| 目的明确:玩家知道要做什么 反馈快:操作后立即有响应 失败成本低:失败不可怕,马上能重试 重试快:失败到重试的间隔短 难度递进:挑战逐渐增加 机制新颖:每个阶段只增加少量新信息
|
短篇机制制
1
| 机制 A(5~10分钟)→ 结束 → 机制 B(5~10分钟)→ 结束 → 机制 C……
|
每一章重新产生一次「我没见过这个」——比不停堆复杂系统更符合反馈密度原则。
七、验证方法五:性能与平台
1 2 3 4 5 6 7 8 9 10
| 性能验证(游戏非常重要): CPU:1000 个敌人 EnemySystem Update() 是否超过 16.6ms/帧(60FPS ≈ 16ms/帧) GPU:Draw Call、Shader、粒子数量 内存:加载地图、切换场景、释放资源——防止 Level1→Level2→Level3 内存越来越大
平台验证: 不同设备/系统上是否正常(Windows/Linux/不同 GPU)
兼容性验证: 不同分辨率、不同输入设备、不同驱动
|
性能验证可以自动化(基准测试),但「手感符合预期」这类体验维度仍需人工。
八、验证的层级(从自动到人工)
1 2 3 4 5 6 7 8 9 10 11 12
| 可自动化: 可通关性(AI/Bot 迭代通关) 性能(基准测试、FPS/内存) 健壮性(边界情况、压力测试) 平台(多设备运行)
需要人工: 可玩性(玩法测试——好不好玩) 新手体验(第一次玩的人——能不能进入) 趣味性(反馈密度——有没有意思) 手感(输入到感知的反馈回路——对不对) 留存(长期玩——腻不腻)
|
验证从「能不能跑」到「好不好玩」逐层递进,自动化程度递减、人工程度递增。
九、验证与测试的分工
1 2 3 4 5 6 7 8 9 10 11 12 13
| ┌─────────────────────────────────────────────┐ │ 测试(自动化断言) │ │ 单元/系统/数据/状态/关卡/集成/流程/E2E │ │ 回答:对不对(功能有没有实现) │ │ 依据:设计文档、功能点、接口 │ ├─────────────────────────────────────────────┤ │ 验证(体验判断) │ │ 可通关性(AI/Bot)/ 可玩性(人工) │ │ 新手体验(第一次)/ 趣味(反馈密度) │ │ 性能 / 平台 / 留存 │ │ 回答:好不好、能不能用、有没有意义 │ │ 依据:设计意图、玩家体验、世界规则 │ └─────────────────────────────────────────────┘
|
测试保证「做出来了」,验证判断「做得好不好」。 先测试(对不对)再验证(好不好)——一个功能连测试都过不了,谈不上验证体验。
十、与其他线的关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 本线 ←→ 测试(05-测试,同主题内) 测试 = 自动化断言「代码按设计工作」(对不对) 验证 = 判断「做出来的东西是否符合预期、有没有价值」(好不好) 先测试再验证
本线 ←→ 趣味设计(12-游戏/03-趣味设计) 趣味设计讲「什么让游戏有趣」——本线的趣味性验证用它的结论 开发者疲劳与新手测试、AI 测试通道 是趣味设计线里验证的部分
本线 ←→ 最小闭环(最小闭环/) 验证是闭环的最后一环(输入→处理→输出→验证) 十个验证闭环 = 最小闭环在游戏验证上的展开
本线 ←→ 游戏开发的最小闭环(最小闭环/03) 空窗口→方块→移动→碰撞→关卡,每一步都是可验证的闭环 可玩性验证分层:运行不崩→可玩→理解目标→反馈→难度→循环→健壮→手感→平台→留存
本线 ←→ 工程控制(07-工程控制) 工程控制讲「怎么保证工程不跑偏」——验证是其中「好不好」的手段 测试解决「对」,验证解决「好」
本线 ←→ 从输入到交互 用户流程测试(测试线)测「用户流程文档」;新手体验验证测「用户第一次接触」
|
收束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 验证 = 判断「做出来的东西是否符合预期、有没有价值」
测试回答「对不对」,验证回答「好不好、能不能用、有没有意义」
游戏的验证标准(十个闭环): 运行不崩 / 核心循环能玩 / 理解目标 / 操作有反馈 / 难度合理 / 重复价值 / 边界不出错 / 手感 / 平台 / 留存
验证方法: 可通关性 AI/Bot 迭代规则通关(存在可达路径) 可玩性 玩法测试(人工——好不好玩) 新手体验 新手测试(第一次玩的人——能不能进入) 趣味性 反馈密度(单位时间有效反馈) 性能/平台 基准测试、多设备(可自动化) 留存 长期玩(腻不腻)
从自动到人工:可通关性→性能→健壮性→平台(自动) →可玩性→新手→趣味→手感→留存(人工)
先测试(对不对)再验证(好不好)
|
测试保证「做出来了」,验证判断「做得好不好」。 游戏验证最独特的在于——它验证的不只是功能,而是「设计的世界规则运行后产生的体验是否符合预期」。