专业书籍精读 · 持续交付 · 第 7 章

提交阶段

Continuous Delivery · Ch 7 · Jez Humble & David Farley · 2010

EN →

这一章讲什么?

你手机里那个 App,背后的程序员平均一天要往共用的代码库里交好几次「作业」。《持续交付》第 7 章讲的是:作业刚交上来的那几分钟里,该做一次什么样的检查。这道检查叫提交阶段,是上一章那条流水线的第一关,也是唯一一关每个程序员每天都要亲自面对

打个比方

把它想成医院的分诊台。人一进急诊,护士先花五分钟量体温、血压、心跳——不拍片、不动刀,只干一件事:用最快最便宜的手段,把明显有问题的挑出来。真正贵的检查排在后面,而且只留给通过分诊的人。

反直觉的地方在这儿:分诊台的价值不在于查得全,而在于快到你愿意站在那儿等结果。一个查得特别全但要等两小时的分诊台,等于没有。

旧世界为什么难

这道检查有三种失败方式,都要命。太慢:所有检查堆在一起要跑两个钟头,于是没人等——你交完就去干别的,两小时后报告红了,你早忘了刚才改过什么。没用:报告只丢一句「失败了」,不说哪儿错、怎么重现,大家慢慢学会无视它。会说谎:有些检查时灵时不灵,同一份代码这次红下次绿;几轮之后,团队对红灯的第一反应从「快去修」变成「再跑一次试试」——这道关自此作废。

它靠三条规矩把这事掰直

第一,给它一个时间预算:十分钟。这个数不是拍脑袋来的——它大致是人愿意站在原地等结果的极限。超过了,人的行为就变了:不等结果继续往下干,几个人的改动叠在一起,红灯归谁都查不清。所以十分钟是一条设计约束,不是一个性能指标。

第二,只做又快又准的检查。什么最慢?连数据库、点界面、等一等再看结果。这一章大半篇幅在教你怎么把这三样赶出去:给被测的那小块代码换上临时替身——假的数据库、说停就停的假时钟——于是它能在千分之一秒里跑完,一口气跑几千个也不过几秒。

第三,过关了就把成品封箱贴签存起来。这一箱之后一路往下走,谁都不许再重做一箱;检查报告也一并留档,全组随时能看。

真正难的地方

难点其实不在检查,在被检查的代码。一小块代码要能装上替身单独测,它就得和外面的东西分得开。分不开的老代码,你会发现根本写不出快测试——这也是这一章藏着的一句话:测试难写,多半不是测试的问题,是设计在报警。

当然它有代价:这道关跑得快,正是因为它没碰真实的数据库、真实的网络,所以「绿了」只代表没有明显砸锅,不代表能上线——那要靠后面又慢又贵的关卡。

一句话记住

提交阶段是流水线的第一道关:十分钟内给出一个可信的红或绿。它不求查得全,只求快到你肯等、准到你肯信;查得全那部分,留给后面。

想看具体该放什么、十分钟怎么算出来的、替身怎么选? → 切到精读版