谷歌是如何做代码审查的
发布时间:2011-08-05 19:04:02
在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前。因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。
Google是一个非常优秀的公司。他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。这就是我今天要说的。
让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情—代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。
所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序——所有东西。它不需要很多的工作,但它的效果是巨大的。
从代码审查里能得到什么?
很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。
代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。
还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或——但愿不是——辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。
当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦——尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。
最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每个新手都会犯的错误——是,审查者根据自己的编程习惯来评判别人的代码。
对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是我们想要的结果。
问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案作为标准答案。但事情不是这样的——作为一个好的审查者,你需要明白这个道理。
代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序——不该说点什么吗?
不,你不需要。
只说一句“哇,不错呀”,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。
第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但如果中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你可以继续下去,把事情做完。如果你真是这样,我想没有愿意在那干等着你。
猜你喜欢
- 虽然说亡羊补牢可以将木马后门造成的损失降至最低,但最好的方法显然是防患于未然。1.后门防范基本功首先要关闭本机不用的端口或只允许指定的端口访
- 目前,服务器管理中的最热门话题是管理虚拟服务器的问题。服务器虚拟化能够让较少的硬件资源运行多个应用程序和操作系统。这对于希望提高服务器利用率
- 是否选择了好的主机商,这对博客是至关重要的,如果博客经常因主机关系,而导致无法访问,不仅仅是访问者,我想你自身也失去去写博客的信心了。下面来
- 一、WSUS 安装要求1、硬件要求:对于多达 500 个客户端的服务器,建议使用以下硬件:* 1 GHz 的处理器* 1 GB 的 RAM2
- 做网络好几年了.对中国站长(特别是那些象我一样以网络为生的站长)的生活真的是有自己的体验.我从00年开始在网络上小打小闹,到后来毕业后跟朋友
- DNS就是Domain Name System,它能够把形如www.21php.com这样的域名转换为211.152.50.35这样的IP地
- 本人经过几次的测试,就用DEDECMS系统进行了几次的测试,发现百度对DEDECMS系统改版痛下杀手。我用的是DEDECMS系统,第一次是修
- 可能很多人看到这个标题感觉疑惑:一个日IP几百的网站真的一天能Google Adsense月收入300美元?不信?那也很正常,说完了就信了。
- 一项专业的运动团体买了一个名牌服务器,但是它刚开始工作时就出问题。该网络管理员向操作系统厂商和硬件厂商提出帮助请求。6.设备转手次数太多,内
- 以前自己弄的东西,现在帖出来,希望对大家有点用:)1.1 什么是FTP:文件传输协议原理1.1.1 命令选择1.1.2 命令格式1.2 wu
- 今天打开邮箱看到了这封来自Google AdSense 小组的信《有关推介用户注册 AdSense 的更新》,讲的是关于AdSense推荐即
- 据BizReport报道 日前Google向他们的AdWords客户提供了新工具--活动优化者(Campaign Optimizer )。该
- 博客的未来是什么?很多专业人士都在思考这个问题,不过今天我这里要说的话题不是博客会发展成为什么样子(博客的未来一定是消亡,这是毋庸置疑的),
- 许久没发这类日志了今天在戒聊的帮助指导下终于将Gravatar整合进了PJBlog3的评论中~话不多说,修改教程奉上!(不知道什么是Grav
- 交换链接对象包括:1. 已经加入搜索引擎分类目录的相关网站所有主要搜索引擎中的与你的行业相关的目录下的网站,都是理想的链接对象。2.与你的竞
- 网上流传的很多关于windows server 2003系统的安全配置,但是仔细分析下发现很多都不全面,并且很多仍然配置的不够合理,并且有很
- 实际上,没有一个人敢说谁是真正的优化高手,因为做SEO这块没有谁敢说他是高手,只能说是经验。每一个人的经验不同所有方法也不同,其实目的只有一
- 一般的FTP服务器是以明文方式传输数据的,安全性极差,信息很容易被盗,即使它提供了SSL加密功能,默认情况下也可能没有启用,如大家常用的Se
- 前段时间,看麦田博客有一篇文章在探讨mayi首页的功能问题,大意为:假设首页为一扇门,这扇门是敞开的好还是半掩着的好,敞开的门能让人一眼的看
- 裸设备,也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20例。