额度有限时,样本挑选的目标不是覆盖最多的对象,而是优先找到能推翻你当前判断的那一批对象。具体做法是:先按“结果可能不同”的原因分层,再从每层里挑少量最可能暴露差异的对象;如果层内结果一致,就把该层结论保留到更大范围,如果出现例外,就缩小到例外所在的那一层继续查,而不是把额度平均撒在所有对象上。
快照更新软件返回的差异,通常来自几个可区分的原因:对象本身的更新频率不同、页面类型不同、访问路径不同、或者软件对某类结构的解析方式不同。额度有限时,按这些原因分层,比随机抽一批更有信息量。
假设你有三类对象:一类是每天多次变动的列表页,一类是很少改动的说明页,一类是带大量脚本渲染的详情页。随机抽十条,很可能大部分落在说明页上,结论只会告诉你“说明页没变化”,这个信息量很低。按类型各抽两三条,才能同时检验软件对高频更新、低频更新和脚本渲染三类对象的处理是否一致。
分层之后要问一句:这一层里,哪种对象最可能让结论翻转?优先查它。比如你怀疑软件对脚本渲染页解析不全,那就先挑一个脚本最重、结构最复杂的对象,而不是挑一个结构最简单的。
抽到样本后,结果会指向三种动作,各自成立的条件不同。
保留适用于:同一层内多个样本结果一致,且这些样本在结构上确实属于同一类。此时可以把该层结论暂时保留,并把额度转向尚未验证的层。保留的前提是“层内同质”,如果层内样本本身结构差异很大,一致只是巧合,不能保留。
改写适用于:结果不一致,但差异能归因到某个可控变量,比如某个字段的解析规则、某种跳转方式。此时应改写查询对象或比对口径,而不是直接判定软件有问题。改写的动作是:固定其他变量,只改这一个,再看结果是否随之变化。如果变化跟着这个变量走,说明它就是关键变量,下一步应围绕它设计样本。
退出适用于:多个层都出现无法归因的例外,且这些例外分布在不同类型上。这时继续加样本只会积累更多无法解释的差异,应该退出当前这批对象,先回到更小、更可控的一组上重新验证解析与比对逻辑。退出的判断依据是“例外是否可归因”,不是“例外数量多少”。
要区分“样本挑得不对”和“软件确实不适用”,可以看这几条证据:
这些证据只能说明“哪种解释更合理”,不能单独证明处理正确。查询量或抓取量归零,也可能只是额度用尽、对象临时不可达或查询条件写错,不能直接当作结论。
假设你有 200 个对象,额度只够查 20 个。不要平均每 10 个抽 1 个,而是先按“更新频率高/中/低”和“结构简单/复杂”分成六层,每层抽 3 个左右,留 2 个额度给最可疑的那一层补查。
如果六层里五层结果一致,只有“高频+结构复杂”这一层出现例外,那么下一步不是扩大总样本量,而是把额度集中到这一层,再多抽几个同层对象,确认例外是这一层的普遍现象还是个别现象。这个动作的结果会直接决定:是保留前五层的结论、只对第六层改写口径,还是整体退出重来。
上述分层方法成立的前提是:你大致知道对象之间可能有哪些差异来源。如果对象完全未知,分层本身就没有依据,此时更稳妥的做法是先花少量额度做一轮探索,找出差异来源,再进入分层抽样。
另外,样本结论只对“同类对象”成立。个别样本成立,不代表规模化后成立;规模化后出现例外,也不代表前面的样本白查了,它只是说明适用边界比预想的窄。把边界写清楚,比强行让结论覆盖所有对象更有用。
具体到某个快照更新软件是否支持某种解析方式、额度如何计算,需要以该工具当前的实际说明为准,不要用样本结果反推工具能力。