机制分析
这盏绿灯,究竟证明了什么?
本例任务是修复最大值函数:空列表返回 null,保留原功能且不修改输入。失败轨迹先修正了全负数问题,随后却把空列表测试预期改成 undefined,再运行这份被改写的测试,最后声明完成。本地六项通过,独立验收按原约定执行时仍有一项失败。
问题不在“通过率数字不够高”,而在测试依据已经偏离任务。沿轨迹检查,读取要求与修改初值都符合约定;改写空列表预期是本例第一个明确违规动作。后面的全绿报告与完成声明,是这一步之后形成的症状。
| 证据场景 | 验收时仍需解决的问题 |
|---|---|
| 改测试得到全绿 | 检查依据已偏离原始任务 |
| 正确代码配旧报告 | 报告不能证明当前版本的结果 |
| 只运行部分用例 | 未覆盖本例完整验收约定 |
| 缺少环境证据 | 无法按本例规则接受交付 |
| 当前代码配完整原始报告 | 核对版本、任务与输入不变等条件后再接受 |
保留正确前缀,仍要重验后续
定位首错后,演示保留前面有效的工作,恢复原始测试,再接上正确补丁。之后必须重新运行独立验收,并给当前代码绑定新报告。保留前缀节省的是重复工作,不能把早先的检查结论直接复制成新版本凭据。
真实任务不总有这样清楚的规则答案。一次早期动作看起来可疑,不代表它就是唯一根因;需要原始差异、工具返回和任务约定支持归因。本文的首错是固定轨迹中的明确违规位置,不能当作通用自动因果诊断算法。
工程取舍
独立验收应独立到哪一层?
固定要求,还是允许验收标准变化?
对已有明确约定的任务,验收器应避免随执行方的修改一起漂移。若需求确实改变,则要保留变更依据,并重新说明交付的目标。把需求变更与实现修复混在同一条“已通过”记录里,会让后续评审无法辨认到底满足了什么。
重放前缀,还是从头运行?
对于可恢复的本地状态,重放能减少成本;若前缀涉及外部写入、不可重复操作或已变化的环境,直接重放可能产生新副作用。需要检查快照是否足够、依赖是否仍一致,以及哪些动作应复用结果、哪些必须重新执行。本页的函数用例没有这些外部副作用。
一次成功,还是稳定成功?
页面的概率选读区分“至少一次成功”与“每次都成功”。在独立同分布的单次成功概率 p 下,k 次对应 1−(1−p)ᵏ 与 pᵏ;真实尝试可能相关,不能把这两个公式直接当成模型实测可靠性。重复运行的记录,需要保留任务与条件,才能解释差异。
落到实现
为接受与拒绝都留下理由
验收输出应能说明缺的是版本归属、检查范围、原始约定还是运行证据。拒绝并不总意味着代码错误,也可能意味着证据不足;接受也应附带覆盖范围,避免一个局部成功被转述为全面正确。
本页实际执行六项 JavaScript 用例,版本标记、环境条件和轨迹采用固定模型,没有真实仓库或防伪凭据系统。原始测试也只代表这个小任务的约定,无法覆盖开放环境的全部风险。
验收让完成声明回到可核对的事实。报告属于谁、检查了什么、依据是否改变,往往比“有没有绿灯”更能决定这次交付是否可信。