结论是:先不要急着改组件,而是把“组件本身”和“组件所处的页面条件”拆成两组变量,再做交叉验收样例。只有当同一组件在两种页面条件下出现可复现差异,并且差异随某个页面条件变化而消失或出现时,才能把问题归到该条件上。否则,改组件很可能只是掩盖了页面级差异。
同一个组件在不同页面表现不同,常见原因不一定在组件内部。更值得先排查的是页面级条件:容器宽度、父级样式、内容长度、加载顺序、数据来源、权限状态、语言或地区设置。验收样例要能区分“组件自身缺陷”和“页面条件触发”。
可以把样例分成两层:第一层固定页面条件,只改变组件参数;第二层固定组件参数,只改变页面条件。如果第一层稳定、第二层不稳定,问题更可能在页面条件;如果两层都不稳定,才需要回到组件实现本身。
假设一个筛选组件在列表页正常,在详情页侧栏出现错位。若只把详情页的侧栏宽度调大后错位消失,不能直接判定“组件没问题”。反例是:把同一组件放回列表页,但把列表页容器也缩到同样宽度,如果错位复现,说明触发条件是容器宽度,而不是详情页这个页面本身。
这个反例的价值在于:它把“页面不同”拆成了可测量的条件。若反例不复现,才需要继续检查父级样式继承、异步数据到达时机或页面脚本执行顺序。
下面是一组假设的验收样例写法,用于说明比较方法,不代表任何真实项目结果。每条样例只改变一个条件,并记录观察结果。
执行后,如果A正常、B异常、C异常,则容器宽度是更可疑的条件;如果A正常、B异常、C正常、D异常,则数据到达时机更可疑。下一步动作应针对被锁定的条件做最小修复,而不是重写整个组件。
实际动作可以这样安排:先复制出问题页面,只保留组件和必要容器,再逐项还原页面条件。每还原一项就记录一次表现。若还原到某一项时差异出现,该项就是候选触发条件;若还原完所有条件差异仍不出现,说明原页面还有未复制的因素,例如脚本顺序、样式加载顺序或权限状态。
这个动作的结果会直接决定下一步:候选条件明确时,下一步是围绕该条件补验收样例;候选条件不明确时,下一步是继续缩小页面范围,而不是先改组件样式。这样能避免把页面级问题误判为组件缺陷。
这套方法适用于组件可独立渲染、页面条件可被逐项复制的情况。若组件依赖登录态、地区数据或第三方接口,且这些条件无法在验收环境中稳定复现,样例结论会受限。此时应先把不可复现的条件列为已知限制,再在可复现范围内做比较,不要用单次观察替代交叉验证。
另外,请求量或抓取量归零、页面短时无响应,也不能单独证明组件处理正确;它们还可能是缓存、网络或权限变化造成的。验收样例要围绕可观察的组件表现和页面条件展开,而不是把某个统计现象直接当成因果证据。