零跳过与等价复用
用途:堵住门禁最常见的两个漏口——“跳过检查”和“重复劳动”
零跳过(zero skip)
「零跳过(zero skip)」小节链接规则:任何被跳过、注释掉、标记为忽略、被条件排除的检查项,都不算通过;门禁必须显式统计并报告。
| 跳过形态 | 检测方式 |
|---|---|
skip / xit / @Ignore / @pytest.mark.skip |
静态扫描测试源码 + 运行报告中的 skipped 计数 |
| 环境变量/标签排除 | 记录实际执行的用例集合与配置,比对声明的用例总数 |
| 断言被注释或删除 | diff 检查:测试文件断言数量不得减少(除非人工确认) |
| 覆盖率阈值被调低 | 配置文件保护,阈值变更需审批 |
检查步骤被 continue-on-error |
流水线配置审计 |
| 超时后“默认通过” | 超时归为 BLOCKED/UNVERIFIED,绝不归 PASS |
为什么重要:跳过是合法语法,Agent 在受阻时会自然选择它(这是最省力的路径)。如果不作为失败项处理,门禁会被无声掏空。
确需跳过时的正确流程:显式审批 → 记录原因与到期时间 → 计入未验证 → 看板统计例外率。
等价复用(equivalence reuse)
「等价复用(equivalence reuse)」小节链接问题:零跳过意味着“必须真跑”,但每次都全量执行代价高(大仓构建、长测试)。
做法:为一次执行定义输入指纹,指纹完全一致时复用既有结论:
fingerprint = hash( commit_tree_digest, # 源码状态(不是工作区) build_config_digest, # 构建与依赖配置、lockfile test_selection_digest, # 本次要跑哪些检查 environment_image_digest, # 镜像/工具链版本)命中指纹 → 复用 PASS 回执(标记“复用自 run X”);任一要素不同 → 重新执行。
安全边界:
- 指纹必须覆盖所有影响结果的因素,漏一项就会给出错误绿灯——这是复用机制唯一真正危险的点。
- 含外部依赖(时间、随机、远程服务、真实第三方 API)的检查不参与复用。
- 复用有有效期,过期重跑(依赖会漂移)。
- 复用记录可审计,且提供“强制重跑”入口。
两者的配合
「两者的配合」小节链接需要结论 → 指纹命中? ─是→ 复用 PASS(留痕) └─否→ 真实执行 → 有跳过项? ─是→ UNVERIFIED/FAIL └─否→ PASS/FAIL零跳过保证“不复用假绿灯”,等价复用保证“不必次次全跑”,两者共同把门禁做成既可信赖又可持续运行的机制。
常见误区
「常见误区」小节链接| 误区 | 修正 |
|---|---|
| 把 skip 当临时手段长期存在 | 例外必须有到期时间与统计 |
| 指纹只算源码哈希 | 配置、环境、选择集都要进 |
| 复用不标注来源 | 必须显示“复用自哪次执行” |
| 用重试掩盖不稳定 | 重试记录留痕,flaky 进修复队列 |
| 允许 ` |
延伸阅读
「延伸阅读」小节链接- 本站:fail-closed 门禁设计、回执与权威状态绑定
- 构建缓存与可重现构建(reproducible builds)公开资料