摘要

fuzz(模糊测试)是让程序在随机合法动作下长时间运行,看会不会崩溃或违反规则。之前的长局 fuzz 找到的 4 个崩溃都来自两个机制的少见组合。于是新做了一个“覆盖引导”的 novelty 模式:每一步先用不计数的试探转移尝试最多 6 个合法动作,选能带来最少见机制标签和组合的那个。

在同样的 40 个种子上,novelty 覆盖了 812 个“标签×标签”组合,比现有 default 模式的 773 只多 5.0%,没有达到事先冻结的 20% 门槛,按标准判为没有明显优势。不过三种模式明显互补。

要回答的问题

novelty 是否比现有的 default(随机)和 family(按动作族)模式覆盖更多不同的机制组合?代价多大?

方法与设置(运行前冻结)

  • 规则版本 Core451、战斗输入 v5。
  • 种子 73900–73939,共 40 个未用过的种子;每局最多 20 回合、400 步。三种模式同一批种子,各一个进程。
  • “机制标签”是从每次转移的结果中提取的证据键,例如某种效果被触发;“组合”是同一次转移中出现的两两标签。
  • 冻结的判读:novelty 的标签×标签组合数比 default、family 中较高者多 20% 以上,判为“覆盖更广”;否则判为“没有明显优势”。只跑一次,不做显著性结论。任何崩溃都另行修复,不影响判读。

结果

模式 转移 标签 动作×标签 标签×标签 有效墙钟 每分钟新组合 崩溃
default 5910 77 198 773 385 秒 120.5 0
family 10488 75 233 737 673 秒 65.7 0
novelty 9842 82 265 812 989 秒 49.3 0

novelty 的总墙钟 2906 秒中有 1917 秒是因整机内存紧张而挂起,有效时间 989 秒。

失败与负结果

  • 按冻结标准未通过:812 对 773 只多 5.0%,远低于 20%;而且 novelty 每分钟新增组合最少。
  • 120 局三种模式都没有崩溃,这批种子上没有新故障可比较。

互补性

三种模式合计 1055 个组合。novelty 独有 126 个组合、44 个动作×标签和 5 个标签(例如“额外行动排队”“双重行动标记被驱散”);另两种模式有 243 个组合 novelty 没碰到。default 与 family 中只出现不超过 2 次的 323 个稀有组合,novelty 覆盖了 118 个。novelty 的动作明显偏向移动(3573 次),多目标法术和攻击地形物体也比随机模式多。

局限

  • 只跑一次;novelty 的选择依赖之前种子累积的覆盖,单凭种子不能复现。
  • 覆盖只说明证据键出现过,不证明规则正确。

结论与下一步

不用 novelty 取代现有模式,作为补充专门触达少见机制;长跑时建议 default 与 novelty 轮换并合并覆盖统计。可能的改进(降低常见系统标签权重、按“未出现的组合”打分、把试探数从 6 降到 3)需另立实验,不改变本次结论。