先把“结果不同”改写成“条件不同”:为这次核对指定一个基准对象、一条固定查询语句和一组冻结的筛选条件,再由第二个人按同一份记录复现。只有复现失败,才继续追工具或数据源。
多个角色对同一事实有不同理解,往往不是工具出错,而是各自查的对象不同:有人看首页,有人看栏目页,有人看带参数的落地页,还有人把移动端结果当成桌面端。固定条件的第一步是只选一个基准对象,并把它写成任何工具都能识别的唯一形式。
以你手上的一个页面为例,记录时可以包含这些字段:
对象:完整地址,去掉会话参数和追踪参数,保留会改变内容的路径参数。查询语句:逐字记录,包括空格、大小写和标点。地区:写到城市或地区层级,而不是“国内”“海外”。设备与语言:桌面或移动、浏览器语言、界面语言。时间:记录到分钟,并注明时区。动作上,先让每个人用自己惯用的方式查一次,把上述字段填进同一张记录。结果通常是:分歧从“谁对谁错”变成“哪一列不一样”。接下来只允许改动其中一列,其他列冻结,这样变化才可归因。
查询结果反复变化,常见来源是查询语句本身在漂移:同义词替换、单复数变化、加了地区词、去掉了品牌词,都会让返回集合不同。冻结的做法不是禁止调整,而是规定一次只改一处,并保留改动前后的记录。
可以用一个最小记录格式,让不同角色都能核对:
如果两次结果只在个别条目的先后顺序上不同,先检查是否触碰了结果数量上限或分页边界;如果候选改动让一批同类条目整体消失,才更可能是查询语义变化。这里要说明一个假设例子:假设冻结版返回三十条,候选改动只返回二十八条,其中消失的两条属于同一类页面,那么优先怀疑查询语句改变了匹配范围,而不是数据源当天少收录了两条。这个判断仍需用第三组条件复核,不能只凭一次比较下结论。
同一份记录交给第二个人,要求他不看第一次结果,只按记录复现。复现结果分三种,对应完全不同的下一步:
这一步的实际动作是让复现者只回报差异字段,不回报结论。若复现者说“我这边结果更多”,要追问多出的条目属于哪一类、是否出现在同一位置区间。把差异落到条目和字段上,才能判断是查询条件问题还是工具覆盖范围问题。
查询结果突然变少甚至归零,容易被直接解释为“对象被处理了”。但同一现象至少有几种合理解释:查询语句变化、地区或设备切换、结果数量上限被触发、数据源更新延迟、对象地址发生跳转。请求量或某项统计归零,不能单独证明处理动作正确,也不能单独证明对象状态改变。
处理顺序可以这样安排:先核对基准记录是否被改动,再用冻结版重查一次,最后才检查对象本身是否可访问、内容是否变化。若冻结版能返回结果,而候选改动不能,问题在查询条件;若两者都不能返回,且第二个人复现同样为空,才把对象状态列入待查项。每一步的结果决定下一步查什么,而不是一次性把所有可能都当成结论。
固定条件的终点不是让所有人接受同一个数字,而是让分歧变成一张可核对的项目表。表里每一行是一个变量,每一列是不同角色的取值,差异处标出是谁、在什么时间、用什么方式得到的。这样后续无论换人还是换工具,都能从同一份基准继续,而不是重新争论。
需要提醒的是,不同工具对同一对象的覆盖范围、更新节奏和结果上限并不相同,具体表现需要以你实际使用的工具为准去核对,不能把某一款工具的当前行为当成通用规则。固定条件的价值在于:当结果再次变化时,你能先判断是条件动了,还是对象动了。