构造反例样本的目的不是证明替换规则正确,而是主动找出它会在哪些页面上出错。做法是:先按替换规则可能失效的维度分组,再从每组里挑出最容易被误改的页面,组成一份十到三十条的样本清单,逐条人工核对替换后的文本。只有反例样本全部通过,才把规则应用到全站。
典型页面只能验证规则“能跑通”,反例样本要验证规则“不会跑偏”。判断一个页面是否值得进反例清单,看它是否满足下面任意一条:
这些条件里只要命中一条,该页面就应该进入反例样本,而不是等到全量替换后再去发现。
假设某站点因为业务调整,需要把全站正文里的“旧称”统一替换为“新称”,同时保留导航和页脚里作为历史品牌名出现的“旧称”。变化前提是:过去全站只有一种叫法,现在正文和品牌署名要分开处理。这个前提决定了替换规则不能简单地对全站做无差别替换。
第一步,按“旧称出现的位置”把页面分组:只出现在正文的、只出现在导航或页脚的、两者都出现的。第二步,从每组各取若干页面,加上边界情况——标题里含旧称、图片alt文本含旧称、面包屑含旧称——组成反例样本。第三步,在样本上执行替换,逐条检查正文改动是否符合预期、非正文区域是否被误改。
这里有一个实际动作值得单独说明:先在样本页面复制一份,在副本上执行替换,对比副本与原文的差异清单。如果差异清单里出现了导航或页脚被改动,说明替换范围需要收窄;如果正文该改的地方没改,说明匹配条件太严。这个对比结果直接决定下一步是调整范围还是调整匹配串,而不是直接推向全站。
反例样本不追求随机代表性,追求的是覆盖所有可能出错的模式。经验上,按“出错模式”分组比按“页面数量比例”分组更有用:
覆盖完整的十页样本,比随机抽取的一百页更能暴露规则缺陷。
逐条核对时,重点看四件事:正文里该替换的是否全部替换、不该替换的是否保持原样、替换后句子是否仍然通顺、替换是否影响了链接文字或结构化文本。任何一条不通过,都回到规则本身修改,改完重新跑全部样本,而不是只重跑失败的那一条。
全部样本通过后,先在小范围真实页面上线,观察一段时间再决定是否全量。这里要注意:改动前后的对比会受季节、搜索需求变化和数据采集差异影响,某段时间的流量或抓取变化不能单独归因于这次替换,也不能因为短期数字归零就断定处理正确。更稳妥的做法是把替换上线时间点和同期其他改动一并记录,便于后续区分原因。
如果上线后出现异常,优先回滚替换并保留样本清单和差异记录,用它们定位是哪种模式漏掉了反例,再补充样本重新验证。反例样本不是一次性工作,每次替换规则变化,都要按新的失效模式重新构造。