本技能介绍一种名为“优先运行区分性实验”的调试方法,旨在避免在原因不确定时盲目修改代码。其核心思想是:当两个几乎相同的事物表现出不同行为时,应先列出它们之间仍然不同的变量;如果差异变量数量大于一,则不允许直接编写修复代码,而应设计一个区分性实验——例如交换两者的位置或交换某个属性——并在运行前明确写出“如果……那么……”的预期结果,使得无论结果如何都能排除至少一半的候选原因。
该方法通过一个记录案例说明其价值:在一个多平台媒体应用中,两个使用相同视觉特效助手的控件表现不同,一个显示玻璃边缘效果,另一个不显示。四次基于假设的验证均告失败,而第五次通过交换两个控件的位置,发现效果跟随的是控件形状而非位置,从而将原因锁定为控件自身的几何形状。案例还揭示了多个常见陷阱,例如在多个变量不同时进行修复、设计无法区分的测试、在“交换”中同时修改其他内容、在整理过程中删除实验、在昂贵构建中每轮只运行一个变体、将部分改善误认为确认、轻信注释或变更日志,以及委托他人进行本可自己完成的验证。
使用方式包括:首先通过命令行工具(如 grep)统计共享助手的所有调用点并比较差异;然后在变更描述中写下实验的预期结果;接着使用标记词(如 EXPERIMENT)标记实验变体,并通过 grep 和 git diff/log 命令确认实验未被清理;最后在结果出来后明确列出被排除的候选原因,并单独提交移除标记的变更。该方法适用于调试复杂界面效果、多平台应用问题定位等场景,但需要开发者具备基本的命令行和版本控制操作能力,且实验设计需严谨,否则可能无法达到区分效果。