View on GitHub

google_eng_practice

谷歌(Google)工程实践文档(Google's Engineering Practices documentation)

Emergencies

目录

有时候会有紧急的 CL。紧急情况发生时,必须尽快完成审核流程并提交。

哪些是紧急情况?

紧急 CL 应该是一个 修改:一个重要的发布版本需要包含某个功能(无法回滚),修复产品中严重影响用户的缺陷,处理紧迫的法律问题,关闭一个重要的安全漏洞,等等。

处于紧急情况时,我们应该关心整个代码审核流程的速度,而不仅仅是响应的速度。更准确地说,在这种情况下,审核者应该把审核速度与代码的正确性(代码是否解决了紧急问题?)放在首位。并且,当紧急情况发生时,它的审核优先级必须高于其他所有的代码审核。

当紧急情况处理完毕之后,应该回过头来再继续做一次更全面的审核

哪些不是紧急情况?

需要明确的是,如下情形 不是 紧急情况:

什么是硬期限?

所谓硬期限(hard deadline),就是错过了就会有灾难性的事情发生。例如:

推迟一周发布不是灾难性的。错过某次重要的会议可能是灾难性的,也可能不是。

大多数截止日期都是软期限(soft deadline),并非是不可改变的。这些软期限期望在某个时间节点得到需要的功能。它们很重要,但不应该为了达到目标而破坏代码的健康状况。

如果发布周期较长(好几个月),则很有可能会牺牲代码质量,以期在下一个周期之前实现某个功能。如果这种模式反复出现,那就为项目筑起了难以承受的技术债,这是项目开发中常见的问题。如果开发者经常在临近开发周期结束的时候提交代码,那么团队“必定”只能做表面上的代码审核。此时,团队应该修改开发流程,大型的功能修改应该在周期的早期进行,以确保有足够的时间做好代码审核。