跳转到内容

零跳过与等价复用

用途:堵住门禁最常见的两个漏口——“跳过检查”和“重复劳动”

规则:任何被跳过、注释掉、标记为忽略、被条件排除的检查项,都不算通过;门禁必须显式统计并报告。

跳过形态 检测方式
skip / xit / @Ignore / @pytest.mark.skip 静态扫描测试源码 + 运行报告中的 skipped 计数
环境变量/标签排除 记录实际执行的用例集合与配置,比对声明的用例总数
断言被注释或删除 diff 检查:测试文件断言数量不得减少(除非人工确认)
覆盖率阈值被调低 配置文件保护,阈值变更需审批
检查步骤被 continue-on-error 流水线配置审计
超时后“默认通过” 超时归为 BLOCKED/UNVERIFIED,绝不归 PASS

为什么重要:跳过是合法语法,Agent 在受阻时会自然选择它(这是最省力的路径)。如果不作为失败项处理,门禁会被无声掏空。

确需跳过时的正确流程:显式审批 → 记录原因与到期时间 → 计入未验证 → 看板统计例外率。

问题:零跳过意味着“必须真跑”,但每次都全量执行代价高(大仓构建、长测试)。

做法:为一次执行定义输入指纹,指纹完全一致时复用既有结论:

fingerprint = hash(
commit_tree_digest, # 源码状态(不是工作区)
build_config_digest, # 构建与依赖配置、lockfile
test_selection_digest, # 本次要跑哪些检查
environment_image_digest, # 镜像/工具链版本
)

命中指纹 → 复用 PASS 回执(标记“复用自 run X”);任一要素不同 → 重新执行。

安全边界:

  1. 指纹必须覆盖所有影响结果的因素,漏一项就会给出错误绿灯——这是复用机制唯一真正危险的点。
  2. 含外部依赖(时间、随机、远程服务、真实第三方 API)的检查不参与复用。
  3. 复用有有效期,过期重跑(依赖会漂移)。
  4. 复用记录可审计,且提供“强制重跑”入口。
需要结论 → 指纹命中? ─是→ 复用 PASS(留痕)
└─否→ 真实执行 → 有跳过项? ─是→ UNVERIFIED/FAIL
└─否→ PASS/FAIL

零跳过保证“不复用假绿灯”,等价复用保证“不必次次全跑”,两者共同把门禁做成既可信赖又可持续运行的机制。

误区 修正
把 skip 当临时手段长期存在 例外必须有到期时间与统计
指纹只算源码哈希 配置、环境、选择集都要进
复用不标注来源 必须显示“复用自哪次执行”
用重试掩盖不稳定 重试记录留痕,flaky 进修复队列
允许 `
  • 本站:fail-closed 门禁设计、回执与权威状态绑定
  • 构建缓存与可重现构建(reproducible builds)公开资料