
上周四下午四点,离上线还有两小时。老周要给报销单导出加一个"含税不含税"的开关,这个开关得从页面上传进来,导出那个函数就得多收一个参数。
他把这句话和导出那个文件一起丢给工具,回车。四分钟后回来,改动四处,看着干净,就合了。
晚上八点,财务点报销单导出,转圈,白屏,接着发票页、差旅页、审批页、月结页、历史页跟着白,六个页面一个接一个。事后数了一遍:那个函数在项目里被九处调用,它只改了三处。剩下六处,它凭什么以为改完了?
为什么会这样
一句话:它读得懂每个文件里写了什么,读不懂这个文件跟那个文件之间,谁在叫谁。
你递给它一个文件,它就把这个文件从头读到尾。这个文件里正好有三处调这个函数,加上函数本身那一处,四处全改了。
另外六处在别的文件里,它一份都没拿到。九减三,剩下六处还在按老样子传三个参数。
那它为什么不自己去找?因为搜的是字。九处一样的函数名,在它眼里是九段相似的文字,不是同一函数的九个调用方。
这就像公司换了总机号码。你通知了三个常联系的人,另外六个人手机里存的还是老号码。号码没错,是他们存的没更新。
它交活时手边也没有那本账。真正知道"谁在调谁"的是编译器:整个项目过一遍,对不上的调用当场标红。人改完参数,编辑器会标红,因为背后有那本账;工具不编译,六个红点就没亮。
账很简单:九处调用,改三处,漏六处,六个页面就白了。从发现到修完一百一十分钟——定位三十、补六处四十五、重新上线三十五。

怎么解决
三条,从最便宜的排起。
先问一句谁在用。 动手前让它列出这函数被哪些文件调用,两分钟。改完手上就有份九行名单,跟它实际改的文件一对,少五个文件一眼看出来。
改定义和改调用分两次做。 先只改定义,别合并,跑一遍编译,把报错的文件名抄下来,再让它按名单逐个改,半小时。改完,漏的六处自己会冒出来。
能加默认值就别改参数。 新开关给个默认值,老九处调用一行不用动,一小时。改完,白屏根本不会发生。
第三条最贵,贵在得判断默认值填什么。含税默认开还是关,得去问财务,不是问工具。
别踩的三个坑。
改动四处、看着干净就合了。干净说的是改过的地方,漏的都不在改动里。
拿一个页面点一遍就算验过。你点的那个页面,正好是它改过的。
出问题就怪模型不行。换一个,它照样只有文本,没有那本账。
平台怎么管这些问题
改动登记。 改公共函数前先填一格:改哪个、加什么、谁在用。在这个场景里,"调用方九处"是必填,填零不让提交。
影响面清单。 按调用关系列出所有调用方,生成一份要改的文件清单。在这个场景里,清单是五个文件六处,工具只能照清单改。
构建门禁。 提交前必须编译一遍,报错就拦下。在这个场景里,那六处没改的调用在这里全部报错,一个不漏。
两份清单对差集。 把"该改的文件"和"实际改了的文件"做减法。在这个场景里,差集是五个文件,直接拦住。
灰度发布。 先放一个页面出去,看十分钟错误率。在这个场景里,先放一个页面,白屏最多坏一个,不是六个。
上线后盯报错。 按接口聚合报错数,突增就喊人。在这个场景里,晚上八点那一波两分钟内喊到人,不用等财务打电话。
这些功能平时谁管,四件事。
谁能改规则:像"改公共函数必须先填调用方"这条,只有技术负责人一个人能改,改完记个版本号,别人只能提。
谁能批例外:赶工期想跳过编译,技术负责人和项目经理两个人签字,写明到哪天,到期自动收回。
出事能不能倒查到人:每次合并记提交人、审核人、时间,从报错那一行能查到是哪次提交改的。
告警发给谁:导出接口报错突增的消息,发给当周值班的那个人,名字贴在值班表上,不发群里。
这笔钱值不值
掏钱的是公司。这次返工算得出来:一百一十分钟,按一小时一百五十元算(假设),二百七十五元。
动手前问那两句,两分钟,五元。差二百七十元,只差两分钟。
回本门槛:五元一次,五十五次才等于一次返工。一个月改公共函数五十五次,挡下一次就够了。
第三条更划算:花一小时设计默认值,一百五十元,一次就省下二百七十五元,净赚一百二十五。
工具本身按月按人买,各家价格不一样,这里不算,只算人力。
行业规则怎么管这件事
这条线没有对口的国家办法。最近的是版本号约定,因为改参数,本质是动了别人要用的接口。
接口就是函数对外那张脸:叫什么名、要几个参数、返回什么。脸改了,用的人就得跟着改。
《语义化版本 2.0.0》(SemVer),Tom Preston-Werner 提出,2.0.0 版规范 2013 年发布,原文在 semver.org。
摘要的头一条写着:主版本号,当你做了不兼容的接口修改。
意思是:动了接口的形状,就把版本号头一位往上抬,让所有用这个接口的人看见"不能照旧用了"。
老周那次改参数,按这条规矩,版本号该从 1.4.2 抬成 2.0.0。抬那一下,等于把"接口变了"公开喊了一遍。
他没抬,还停在 1.4.2。这一格没动,等于把这件事按住了。
回到晚上八点那六个白屏的页面。工具没骗他,改的三处确实对。它只是不知道还有六处在叫这个名字,而这件事编译器一秒就能说清。
Token工厂:贰号token工厂
Codex、Claude Code、Trae、Qoder 要用的模型 token,统一接入、统一计费。
点这里看详情 →