谷歌是如何做代码审查的
发布时间:2011-08-05 19:04:02
在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前。因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。
Google是一个非常优秀的公司。他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。这就是我今天要说的。
让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情—代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。
所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序——所有东西。它不需要很多的工作,但它的效果是巨大的。
从代码审查里能得到什么?
很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。
代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。
还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或——但愿不是——辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。
当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦——尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。
最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每个新手都会犯的错误——是,审查者根据自己的编程习惯来评判别人的代码。
对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是我们想要的结果。
问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案作为标准答案。但事情不是这样的——作为一个好的审查者,你需要明白这个道理。
代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序——不该说点什么吗?
不,你不需要。
只说一句“哇,不错呀”,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。
第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但如果中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你可以继续下去,把事情做完。如果你真是这样,我想没有愿意在那干等着你。


猜你喜欢
- 核心提示:用 Analytics 分析用户在站内的搜索行为,很简单但数据的参考作用较大。这次在石互动2008上海SEO大会上讲到通过“分析用
- 本例中以CentOS 7举例说明如何设置Linux开机自动获取IP地址和设置固定IP地址。自动获取动态IP地址1.输入“ip addr”并按
- 明天就是教师节,在此,我再为大家讲解如何利用教师节进行网站推广。首先,我们来分析一下教师节的特点。教师节虽然从意义上来讲是教师的节日,但对于
- 一、技术篇1.图片链接调用图片有个特别的属性就是替换文本属性标签,他可以将某一个图片的ALT标签内的信息替换为文本信息,如果这个图片在网页上
- 对于专有软件使用者来说,当需要升级到一个新版本的时候,并没有多少激动的感觉。因为这种升级通常是为一些补丁修复或微小的功能升级来掏钱买单。即使
- SQL Server 2000是微软公司最新版的大型数据库服务器,其性能指标在各方面都有赶超Oracle数据库的趋势。在经历了SQL Ser
- 小说站新手的经验,献给广大想作文学站的朋友,希望能有借鉴的作用。自从文学网站出现在互联网以来,这种新兴的文学形式很快就风靡了整个世界。网络小
- 1、保证VMware Network Adapter VMnet1是启用状态2、将可以连接外网的连接共享属性设置成如下图所示3、将VMwar
- 首先,出现错误不要急于重试,重试也没用处,只会让网站封你的ip地址。要根据提示,找出原因,选择正确的方法,解决问题。其次,确认网络可以使用,
- 我们经常被问到一个问题:我的域名值多少钱?这是一个很重要的问题,因为客户不愿意以低于实际价值的价格出售自己的域名。域名的价值是一个很抽象的概
- 前言pip类似RedHat里面的yum,安装软件非常方便。本节详细介绍pip的安装、以及使用方法,希望文章对各位了解pip的安装与使用带来帮
- PHPWind v7.3.2综合积分计算错误解决方法:打开:profile.php找到 $usercredit[$ke
- 美国域名注册商name.com发布了Cyber Monday域名注册优惠码,主要针对com和net新注册域名,原始价格是9.99美元,优惠价
- 由淘宝网TOP开放平台发起的以“赢在淘宝-TOP应用大赛”于2009年9月1日启动至今,吸引了包括杭州光云软件公司在内的众多国内顶尖优秀技术
- blog(部落格)Weblog网络日志(网志);从1993年NCSA和网景的“What’s New”栏目开始(博客网站的雏形),Blog诞生
- 有Godaddy主机用户咨询有关Cron的一些问题,今天我们就来一起讨论下吧,其实Cron是一个计划任务的标准的Linux特征,叫做&quo
- 最近横着走同学貌似在研究CDN.为了威望早点到200.特写一小文章.跟大家一起学习.我们先Google一下CDN的概念:CDN 是一个经策略
- 1) Aaron Wall - SEOBook.com 是在互联网上最好的搜索引擎优化博客之一.我真的喜欢他直接了当的文章风格.在他文章里,
- 北京时间10月16日消息,据国外媒体报道,火狐(Firefox)浏览器开发商Mozilla用户体验设计师简妮·博里斯(
- 由于Apache具有相当高的可移植性,它支持超过30种操作系统,包括Unix、Windows 及Darwin等系统,所以目前在网络上已注册的