代码审查 (Google牛人谈Code Review)
代码审查 (Google牛人谈Code Review)
在上一篇博客里我暗示自己将不在为Google工作。 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择。鉴于这段时间内我不受雇于任何公司,我想我可以写点和专业相关的东西,这些东西很有趣,但是如果我还在职,可能会导致与同事/老板的关系紧张。
Google是一个相当酷的公司。它们完成了一些非常让人吃惊的事情-包括外部用户可以看到的,也包括公司内的。有些关于公司内部的东西是非保密性的,但是在公司外部讨论的并不广泛,这些就是我想说的。
保证Google的代码质量如此之好的最大原因是代码审查。这不是Google专有的-这是被广为接受的好主意,而且很多人都在做。但是我从来没有见过另外一个大公司会应用的这么普遍,在Google,任何产品/项目的代码只有得到正面的审查才可以提交。
每个人都应该这么做,我不是指非正式的:这是一个严格的软件开发过程必备的普遍规则,其范围不只包括产品代码而是所有的代码。这并不需要做很多工作,但是产生的效果非常大。
你可以从代码审查里得到什么呢?
有一点很明显,在代码提交之前如果有很多双眼睛盯着看可以发现Bug.这是代码审查最广为人知的好处,但是以我的经验看这是价值最小的一点。人们的确可以在代码审查中发现Bug,但是这些Bug大部分都是显而易见的小Bug,开发者分分钟就可以发现,而那些真正需要花时间发现的Bug通常不是在代码审查中发现的。
代码审核最大的好处是纯社会性的。如果你编程的时候知道你的同事将要看你的代码,你的编程方式会不一样。你的代码会写的更整洁,注释更清楚,组织的更好-因为你知道其他人会看你的代码,他们的意见是你需要你关注的。如果没有审查,你虽然知道人们最后会去看你的代码,但是那样不会给你一种紧迫感,也不会给你同样的个人评判的感觉。
还有一个更大的好处就是代码审查可以传播知识。在很多的开发小组里,每个人都负责某一块核心组件,专注于自己的这一块,只要其他同事的模块不会破坏自己的代码就不会去关注。这种模式导致一个模块只有一个人熟悉对应的代码。如果一个人请假或离职,其他人对他负责的模块将一无所知。如果采用代码审核,那么至少有两个人熟悉代码-作者和审查者。审查者知道的代码不如作者多,但是他们都熟悉代码的设计和结构,这意义重大。
当然,没有什么事情会这么简单的,以我的经验,你需要花一些时间来做好代码审查。我已经见过一些坑导致的问题-由于他们在经验不足的审查者中出现的很频繁,这使得那些尝试代码审查的人们体验很不好,以至于成为了实践代码审查的障碍。
最重要的一个规则就是代码审查的关键是在代码提交之前发现代码存在的问题-你要找的是正确性。代码审查最常见的错误-每个初次接触代码审查的人都会犯的错误-就是判断代码是否是以审查者期望的方式编写。
给定一个问题会有一打不同的方’案来解决,给定一个方案,会有一百万种方式用代码实现。作为一个审查者,你的工作不是确保代码是以你所想象的那种方式编写-这是不会的。你的工作是确保代码是正确的。如果打破了这个规则,你会觉得代码审查很难,充满挫折感-这不是好事。
事实上,这是一个很自然的会犯的错误。如果你是一个程序员,当你看到一个问题的时候你会想到一个解决方案-而你会想当然的认为你所想到的就是那个解决方案。然而实际上不是-要成为一个好的审查者,你需要理解这点。
代码审查第二个主要的坑就是人们觉得有义务说点什么。你知道作者花了很多时间和精力写代码-你难道不需要说点什么吗?
不,你不需要。
只是说“哇,不错”从来都不是一个错误。如果你总试图费劲心思来找些什么东西批评一下,那么你所作的只会损害你的个人信誉。如果你只为了说点什么而不断的制造点东西来评判,那么找你做代码审查的人会觉得你所说的只是为了打破沉默,你的意见不会被认真考虑。
第三个坑和审查速度有关。你不应该匆忙的完成代码审查,但是你也应该立刻开始。你的同事正在等你的反馈,如果你和你的同事不愿意花时间来完快速成代码审核,人们会变得沮丧,这种方式只会带来挫折感。看起来代码审查会中断一些手头的事情,但是事实上不会如此,如果有人要求你做审查,你不需要马上放下所有事情,但是在接下来几个小时里,你总会稍停你当前的工作-比如喝杯饮料,去洗手间或者散步闲聊。当你回来的时候,你可以开始审查并完成它。如果你这么做,那没有人会因为等你而耽误很长时间。
[英文原文:Things Everyone Should Do: Code Review ]
代码审查 (Google牛人谈Code Review)的更多相关文章
- 程序员必备技能:代码审查 (Google牛人谈Code Review)
在上一篇博客里我暗示自己将不在为Google工作. 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择.鉴于这段时间内我不受雇于任何公司,我想我可以写点和专业相关的东西,这些东西很有趣,但是如果我 ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- Code Review 程序员的寄望与哀伤【转载】
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- 转: Code Review 程序员的寄望与哀伤
转自: http://www.cnblogs.com/mindwind/p/5639008.html 一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产 ...
- 项目管理系列--从零开始Code Review[转]
从零开始Code Review 这篇帖子不是通篇介绍Code Review的方法论, 而是前大段记录了我们团队怎么从没有这个习惯到每天都进行review的过程, 后小段给出了我的一些建议. 希望能对诸 ...
- iOS从零开始 Code Review
http://www.cocoachina.com/ios/20151117/14208.html 这篇帖子不是通篇介绍Code Review的方法论, 而是前大段记录了我们团队怎么从没有这个习惯到每 ...
- 代码审查 Code Review
为什么要做代码审查 代码审查最主要目的是保证软件质量,找出及修正在软件开发过程中的错误.同时,通过不同能力评审者对代码的分析和建议,可以很快提升编码能力和编码修养. 1. 保证软件质量 通常软件开发完 ...
- 谈一下我们是如何开展code review的
众所周知,代码审查是软件开发过程中十分重要的环节,楼主结合自己的实际工作经验,和大家分享一下在实际工作中代码审查是如何开展的, 笔者水平有限,若有错误和纰漏,还请大家指正. 代码审查的阻力 我想不通公 ...
- 探究代码审查(Code review)
Code review 是什么 对软件源代码的系统性检查,查找软件源代码质量,结构,漏洞等问题. PS:Code review ≍ Code inspections ≥ Code walkthrou ...
随机推荐
- Eclipse Maven构建Spring MVC项目
工作中项目开发使用Maven管理项目的构建.打包.编译,框架採用的是Spring MVC框架,而且实现了多模块.多项目的管理.自己也简单的參与了架构的设计.对于刚開始学习的人来说,使用Maven构建项 ...
- 关于继承modelDriven接口action的ajax来电参数
例如 Model类如下面,Teacher,public class Teacher{ private Integer id. priavte String name; private Sch ...
- 编写高质量代码改善C#程序的157个建议[1-3]
原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...
- SQL Server的还原
原文:SQL Server的还原 1.差异备份的还原 不备份结尾日志的情况下还原数据 创建差异备份的放在我们已经在前面一篇博客SQL Server的备份中提到了,这里我们不再赘述,下面我们给出差异备份 ...
- google面试题,男孩男女比例?
Google面试题: 在一个重男轻女的国家里,每一个家庭都想生男孩.假设他们生的孩子是女孩.就再生一个,直到生下的是男孩为止,这种国家.男女比例会是多少? 答案:1:1 分析: 出生男女概率是50% ...
- 【C++实现】HeadFirst策略模式设计模式
策略模式定义了算法家族.分别封装起来.让它们之间能够相互替换,此模式让算法的变化独立于使用算法的客户. Head First设计模式中介绍策略模式时以Duck类作为样例.当中用flyBehavior和 ...
- IOS新手教程(二)-控制流
int main(){ //2.控制流 //2.1 if语句 //1. if(expression){ } //2. if(expression){ }else{ } //3.能够有0个或是多个els ...
- 从WebBrowser中取得Cookie 和 WebClient设置cookie!
原文:从WebBrowser中取得Cookie 和 WebClient设置cookie! 从WebBrowser中取得Cookie 的代码 CookieContainer myCookieContai ...
- 搭建及修正Hadoop1.2.1 MapReduce Pipes C++开发环境
Hadoop目前人气超旺,返璞归真的KV理念让人们再一次换一个角度来冷静思考一些问题. 但随着近些年来写C/C++的人越来越少,网上和官方WIKI的教程直接落地的成功率却不高,多少会碰到这样那样的问题 ...
- XML的序列化与反序列化
开发时会把数据持久化成xml格式,当然可以用xmlwriter来实现,不过感觉不方便,而且很繁琐.推荐使用直接序列化.反序列化对象的方法来处理. 直接上代码: public static class ...