用途
科学方法(假设差分)用于在一个症状可能来自多个位置时,枚举相互竞争、可被证伪的假设,并把成本最低的观察花在区分能力最强的假设上。每次观察后,只保留仍然符合证据的假设,然后在幸存者中优先选择未获支持的假设最少的那个作为当前工作解释。
该技能的核心目标是:在动手修复之前,先定位出有问题的文件、函数、分支、配置或不变量。
何时使用
- 一个 bug、事故或异常存在不止一个可能的原因。
- 你现在就能观察代码、日志、diff、trace、测试、配置或数据。
- 在修复之前,必须先定位有问题的文件、函数、分支、配置或不变量。
- 多个相互竞争的解释都能符合现有表面事实,需要一个有区分力的检查。
何时不应使用
- 原因已从单一堆栈、失败测试或近期 diff 中显而易见——直接修复。
- 只存在一个可能的假设——直接测试它,不要为了走流程而虚构竞争假设。
- 目前无法做任何观察——先获得访问权限,不要凭空猜测定位。
- 需要数周的实验、产品 A/B 测试或政策试验——本技能针对的是智能体当下即可执行的检查。
- 故障已经被定位,需要系统性的根因与预防深度——应使用 five-whys-plus。
- 对于“只有这些对象/时间”出现的选择性缺陷,更适合用 IS/IS-NOT 对比——应使用 Kepner-Tregoe。
- 文档或仪表盘可能已经与现实不符——先用 map-territory 核对实际状态,再回到假设流程。
步骤
-
精确陈述症状。 记录失败行为、范围、时间、环境和约束。把观察与解释分开。
-
枚举 2–5 个相互竞争的假设。 指明具体的文件、函数、配置、输入条件或不变量。拒绝笼统的分类(如“后端问题”)。如果经过有意检查后不存在严肃的替代假设,则退出本差分流程,直接测试或修复唯一有证据的原因;绝不要为了继续流程而虚构一个竞争假设。
-
在查看之前先说出证伪条件和低成本观察。 对每个假设:什么结果会将其排除,以及现在可以执行什么读取、grep、diff、日志或测试检查。优先选择立即可用的观察,而不是部署、金丝雀或长时间等待。
-
按区分度 × 低成本排序观察。 运行最能区分首要竞争假设的最低成本检查。如果有低成本的交叉检查能排除其他假设,就不要先深入最喜欢的那个。
-
每次观察后更新。 删除被证伪的假设。在仍然符合全部证据的幸存者中,优先选择独立未获支持的假设(额外组件、罕见时序、外部依赖)最少的那个。简约性是在符合之后对幸存者排序;它绝不能拯救一个证据已经否定的更精简假设。只有当更简单的幸存者被排除时,才升级复杂度。
-
定位并停止。 当一个假设有直接支持证据、且关键替代假设已被排除时,指出要修改的文件/函数/配置以及定位它的证据。一旦定位是直接的,就停止分析。
输出
症状:<具体的失败行为、范围、时间>
假设:
H1:<具体原因> | 为何可信 | 观察 | 若……则被证伪
H2:...
H3:...
测试顺序:<成本最低的区分性检查>
结果:<每次观察显示了什么>
幸存者:<剩余的假设;在符合者中选择未获支持假设最少的工作假设>
定位故障:<文件/函数/配置 + 支持证据>
已排除:<被删除的假设及原因>
验证
在以下情况下,应否定该差分结论:你继续时严肃假设少于两个;不存在预先声明的证伪条件;跳过了更便宜的区分性检查;或者在证据已经否定某个“更简单”的解释后仍保留它。
当故障被直接定位、且重要的替代假设已被排除时就停止;不要继续推理。
过度应用防护: 不要在没有竞争原因的情况下叙述“观察→提问”;不要把假设最少当作证明;当单一明显原因已有证据时不要运行本技能。
限制
以上内容为技能本身的原则与流程说明。关于该技能的具体运行环境、依赖、安装方式、是否收费、支持平台等信息,资料中暂未提供。