跳转到内容

四值判定模型

用途:给 Agent 的产出一个诚实的结论,避免“未验证”被折叠成“通过”

只有“通过/失败”时,系统会被迫把“没跑测试”“环境不可用”“命令超时”归入某一类。实践中它们常被归入“通过”(乐观默认),于是沉默的未知变成了成功。

值 含义 触发条件 后续动作
通过 PASS 要求的证据齐备且满足门槛 全部必需检查项成功且达阈值 允许合并/交付
失败 FAIL 有明确反证 编译错误、测试失败、断言缺失、规则违反 退回修复
阻塞 BLOCKED 无法执行(环境或依赖问题) 依赖服务不可用、命令超时、权限缺失、输入不完整 修环境或换路径,不计为完成
未验证 UNVERIFIED 执行了但证据不足 缺少必需检查、覆盖率低于阈值、测试被跳过、无法在干净环境复现 补证据,不得当作通过

核心纪律:只有 PASS 才是完成;BLOCKED 与 UNVERIFIED 都不得进入交付流水线。

verdict :=
if any(check.status == FAIL) -> FAIL
elif any(required check == BLOCKED) -> BLOCKED
elif any(required check missing
or metric below threshold) -> UNVERIFIED
else -> PASS

要点:

  1. 必需检查项显式声明(哪些检查是 required),否则“没做”会被当成“不需要”。
  2. 阈值可配置且版本化(覆盖率下限、最少断言数、基准倍数)。
  3. 缺失即未验证:检查未运行不等于通过——这是 fail-closed 与 fail-open 的分水岭。
  4. 不可降级合并:禁止把 UNVERIFIED 显示为“部分通过”或与 PASS 合并统计。
呈现方式 问题
只显示“完成/未完成” 折叠了未知
用绿色表示“没跑” 视觉误导
统计成功率时把 UNVERIFIED 计入分子 指标虚高

正确做法:四值各自计数与看板,报表里“通过率 = PASS / 总数”,并单列“未验证率”作为质量红线指标——未验证率高说明流程有洞,而不是模型好。

模型的自我置信度打分不能替代四值判定:置信度是主观声明,判定是客观状态。二者可以并列展示(用于观察校准情况),但绝不能互相折算。

误区 修正
“没报错就是通过” 没运行 ≠ 通过,归 UNVERIFIED
环境不可用算失败 应归 BLOCKED,责任在环境不是产出
用三值(加“部分通过”) 部分通过仍是不确定,拆成 PASS/UNVERIFIED 更清晰
阈值临时下调以放行 需审批并留痕,否则阈值失去意义
让 Agent 自己填判定值 判定必须由门禁工具产生
  • 本站:fail-closed 门禁设计、完成的证据层级
  • 可靠性工程中的 fail-safe / fail-secure 与 fail-open 讨论