SuperAPI AI 工具集

auditing-gameplay-implementation-coverage

测试与质量

查看项目

更新于 10-15 10:17

技能介绍

用途

查找行为族中缺失的成员。游戏很少整体遗漏一个功能,而是遗漏代码已声明集合中的某一个成员——某个阶段从未获得第二个输入别名、某个角色变体被冻结路径跳过、某个存档字段无人恢复。每个遗漏看起来都像正常工作的代码,因为所有已存在的分支都是正确的。

该流程跨意图、代码、可观察输出和测试构建有证据支撑的覆盖台账,然后在不改变被审计行为的前提下验证高风险缺口。输出是义务及其状态的台账,而非修复。

何时使用

  • 变更或横切机制可能触及多个行为面,且只有部分被更新。
  • 发布前需要检查指定的高风险族。
  • 反复出现的遗忘用例缺陷指向某一个族——输入别名、角色变体、存档字段——需要确定还有多少成员缺失。

何时不使用

  • 小型孤立变更已被直接区分性断言覆盖。台账成本高于断言。
  • 语义分歧已被复现且需要 tick 索引;那是定位问题。
  • 已有补丁,问题是它是否为真正的修复;那是修复验证。
  • 问题是平衡性、难度或趣味性。
  • 需要穷尽正确性证明。

保持审计完整性

  • 记录被审计的构建或快照。
  • 列出审计者已知的缺陷和不一致。将其排除在新发现计数之外,但可作为已知项保留在报告中。
  • 在调查单个候选之前冻结审计方法和覆盖轴。
  • 审计期间不得修复生产代码。修复会改变对象并污染后续发现。
  • 将干净结果视为未发现已确认缺口,而非完整性证明。

构建行为清单

在构建清单前冻结有界审计范围。对于变更触发的审计,仅包含变更可能触及的面及其结构耦合的兄弟面。对于发布或反复缺陷审计,命名被检查的高风险族。其余记录在 unexamined_scope 中;不要默认将任一触发变成全项目审计。

先阅读仓库说明,然后阅读设计/意图文档、实际规格、入口点、状态/阶段机、调试/测试句柄和现有测试。在比较之前解决项目声明的权威顺序。

仅清点项目有证据支持的值:

  • 阶段、模式、屏幕、回合和转换边界;
  • 玩家动作、输入别名、按下/按住/释放语义和输入锁;
  • 角色、效果、来源/所有者、身份和生命周期状态;
  • 状态生产者和消费者,包括 HUD、动画、音频、持久化和遥测;
  • 重置、冻结、保存/恢复、死亡、重试和场景/回合转换行为。

使用 references/coverage-surfaces.md 路由清单。不要形成完整笛卡尔积;大多数组合无意义。

推导覆盖义务

为每个义务分配稳定的 OBL-<surface>-<number> 标识符。从以下证据类别之一推导义务并记录适用类别:

  • 显式:规格或仓库规则直接要求该行为。
  • 结构兄弟:代码或数据声明了一个族,其成员应获得相同处理,如输入别名、角色变体、阶段处理器、注册表条目或存档字段。
  • 蜕变:两条路径被声明为等价,应产生相同的观察结果。
  • 生产者-消费者:产生的状态/事件必须具有每个必需的消费者,或消费者必须具有生产者。
  • 边界:进入、离开、暂停、恢复、死亡或重启产生重置/冻结/持久化义务。

不要将视觉相似性或命名相似性静默转换为意图。如果兄弟等价性合理但非权威,创建 intent-unknown 问题而非缺陷声明。

优先使用关系型义务而非孤立示例:

  • observe(run(phase, alias_a)) == observe(run(phase, alias_b))
  • 所有计分生产者保留允许的来源标签
  • 每个改变决策的状态都有决策前呈现消费者
  • 每个声明的事件都被发出或显式声明为静默

映射覆盖台账

对每个义务,映射所有四个链接:

authority -> implementation path -> player/debug observable -> concrete test

记录“未找到”而非留空单元格。对行进行分类:

  • covered:所有必需链接存在且测试检查具体结果;
  • confirmed-defect:权威行为在可复现运行中失败;
  • implementation-gap:权威明确但不存在实现路径;
  • probe-gap:行为存在但没有测试直接将其与遗漏情况区分;
  • presentation-gap:行为改变玩家决策但缺少必需反馈;
  • spec-conflict:权威工件或规格与实现不一致;
  • intent-unknown:合理的兄弟关系缺乏权威;
  • unverified:证据不足或所需路径无法执行。

冒烟测试不是机制覆盖。只有当被审计成员被遗漏时其期望值或关系会失败的测试才算数。

搜索负空间

比较族成员资格,而非仅阅读已实现分支。使用快速文本和结构搜索对每个关系的两侧进行普查:

  • 阶段声明与阶段更新/绘制/输入/音频/重置分支;
  • 输入别名与接受该动作的每个阶段;
  • 角色/效果类型与碰撞、计分、冻结、绘制、音频和清理路径;
  • 事件注册表与发出者和显式静默声明;
  • 保存字段与初始化、序列化、恢复和迁移;
  • 改变决策的状态与持久化决策前显示;
  • 调试状态与机械检查所需的每个规则状态;
  • 规格规则与具体测试断言。

优先考虑单独实现的兄弟、负分支、边界 tick 和跨系统消费者。当两个以上独立轴交互时使用成对覆盖;仅当因果关系或代码路径需要时才升级到更大组合。

验证候选

按以下顺序验证,不编辑被审计行为:

  1. 确认义务的权威并引用其确切来源。
  2. 确认可疑路径在当前构建中可达。
  3. 使用现有调试句柄或测试框架创建最小状态设置和输入/事件序列。
  4. 在运行前陈述期望的具体值或关系。
  5. 捕获观察到的值、阶段、事件、截图或持久化记录。
  6. 运行义务不应适用的反向用例。
  7. 当任何必需证据缺失时降级为 unverified 或 intent-unknown。

对于视觉义务,检查到达的屏幕;仅状态遥测无法证明呈现。对于测试缺口,提供建议的断言及其将区分的遗漏,但除非用户同时请求实现,否则不要添加测试。

报告

返回 references/coverage-gap-report.md 中定义的 CoverageGapReport。先列出已确认的新缺陷,然后是实现/呈现/探测缺口、冲突、问题和已覆盖的高风险义务。包括已知排除项和未检查范围。

除非义务集在候选审查前已冻结且包含分母,否则不要报告覆盖百分比。在没有已知缺陷分母的实时构建上,报告已裁决发现的精确度和覆盖增量,而非召回率。

验证

  • 每个报告的缺陷都有权威、可达性、期望结果、观察结果,以及反向用例或不可能的原因。
  • 每个探测缺口都命名了建议断言将检测的具体遗漏。
  • 每个义务都源自证据而非想象的功能。
  • 冻结范围遵循触发条件,无关面被记录而非审计。
  • 已知发现被排除在新效应声明之外。
  • 重要的未检查组合出现在 unexamined_scope 中。
  • 审计不改变任何生产行为。