`
天边一朵雲
  • 浏览: 36316 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

(CNBLOGS)谷歌是如何做代码审查的

 
阅读更多

本文是从 Things Everyone Should Do: Code Review 这篇文章翻译而来。

Mark CC and SS

本文的作者 Mark CC


在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前。因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。

Google是一个非常优秀的公司。他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。这就是我今天要说的。

让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情—代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。

所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序——所有东西。它不需要很多的工作,但它的效果是巨大的。

从代码审查里能得到什么?

很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。

代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。

还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或——但愿不是——辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。

当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦——尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。

最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每个新手都会犯的错误——是,审查者根据自己的编程习惯来评判别人的代码。

对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是我们想要的结果。

问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案作为标准答案。但事情不是这样的——作为一个好的审查者,你需要明白这个道理。

代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序——不该说点什么吗?

不,你不需要。

只说一句“哇,不错呀”,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。

第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但如果中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你可以继续下去,把事情做完。如果你真是这样,我想没有人愿意在那干等着你。

分享到:
评论

相关推荐

    CnBlogs_Com用到的CSS控制的代码折叠

    CnBlogs_Com用到的CSS控制的代码折叠! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/

    WindowsLiveWriter.CNBlogs.CodeHighlighter

    总的来说,Windows Live Writer CNBlogs CodeHighlighter 插件是提升技术博客质量的得力助手,通过其强大的代码高亮功能,不仅提高了代码的可读性,也提升了博客的整体专业度。对于那些经常在博客上分享代码的开发者...

    WLW插入着色代码块插件CNBlogs.CodeHighlighter

    《WLW插入着色代码块插件CNBlogs.CodeHighlighter:提升博客编程内容展示质量》 Windows Live Writer(简称WLW)是一款深受程序员喜爱的离线博客编辑器,它允许用户在本地环境中编写博客文章,然后发布到各种支持的...

    CnBlogs.Com用到的CSS控制的代码折叠

    在探讨"CnBlogs.Com用到的CSS控制的代码折叠"这一主题时,我们深入解析了如何通过CSS来实现代码的折叠功能,这是一种常见的代码展示优化技术,尤其在博客、论坛等分享编程经验的平台上非常实用。下面,我们将详细...

    cnblogs csdn 代码运行框实现代码

    在IT行业中,分享技术文档和代码示例是常见的交流方式,而`cnblogs`和`csdn`作为国内两大知名的技术博客平台,提供了方便的代码展示和运行功能。本篇文章将详细解析如何在这些平台上实现代码运行框的功能。 首先,...

    cnblogs 运行代码功能尝试

    在IT行业中,尤其是在技术博客平台如cnblogs上,能够直接运行和展示代码的功能极大地提高了读者的理解和学习效率。本文将详细介绍如何在cnblogs上实现这个功能,并提供一个简单的示例来帮助用户理解。 首先,要实现...

    cnblogs看到的富文本编辑器

    【标题】:“cnblogs看到的富文本编辑器” 在IT领域,富文本编辑器是一种用于创建和编辑含有格式化文本的应用程序,它允许用户在网页、博客、文档编辑等场景中进行文字处理,并能直接预览所见即所得的效果。在本...

    cnblogs 代码高亮显示后的代码复制问题解决实现代码

    cnblogs平台上的文章中代码块因为页面的排版需求,使用了pre标签包裹代码文本,并且在某些情况下代码会通过JavaScript和css样式进行高亮显示。这样的处理方式虽然能够提供良好的阅读体验,但同时也带来了用户复制...

    cnblogs:cnblogs文章

    在Cnblogs上的文章可能涵盖如何在Macbook上设置Python开发环境,包括安装IDE(如PyCharm)、集成开发环境的配置、虚拟环境的使用(如venv或virtualenv)以及代码调试技巧。此外,可能会有文章讲解如何利用Python的...

    cnblogs发帖工具

    在IT领域,尤其是对于博客作者和程序员而言,`cnblogs` 是一个非常受欢迎的平台,用于分享技术文章、心得体验和代码实践。为了方便用户更高效地发布内容,有人开发了一款名为“cnblogs发帖工具”的应用程序。这款...

    万一(cnblogs)不带评论.chm

    万一(cnblogs)不带评论.chm

    hexo-migrator-cnblogs:Hexo 的 cnblogs 迁移器插件

    hexo-migrator-cnblogs Hexo 的 cnblogs 迁移器插件如何使用安装模块: npm install hexo-fs npm install hexo-migrator-cnblogs 转到您的 hexo 文件夹,然后执行以下命令: hexo migrate cnblogs < username> 由于...

    基于PHP的将博客园(cnblogs.com)数据导入到wordpress的php代码.zip

    标题中的“基于PHP的将博客园(cnblogs.com)数据导入到wordpress的php代码.zip”表明这是一个使用PHP编程语言编写的程序,其目的是帮助用户将博客园(CNBlogs)平台上的博客数据迁移到WordPress系统中。这个过程通常...

    Android应用源码Cnblogs博客园安卓客户端.zip

    【标题】"Android应用源码Cnblogs博客园安卓客户端.zip"揭示了这是一个关于Android应用程序开发的源代码项目,特别地,它与Cnblogs博客园的安卓客户端有关。源码是开发者研究、学习或改进现有应用的重要资源,通常...

    About-Cnblogs:关于cnblogs

    Cnblogs平台不仅支持使用JavaScript编写和展示代码示例,还允许用户通过JavaScript插件扩展其功能,例如自定义页面样式、交互效果等。 在Cnblogs上创建博客,首先你需要注册一个账号,然后就可以开始撰写你的第一篇...

    安卓Android源码——Cnblogs博客园安卓客户端.zip

    【安卓Android源码——Cnblogs博客园安卓客户端】 这篇内容主要探讨的是关于安卓Android的源码分析,特别是针对Cnblogs博客园的安卓客户端应用。源码是软件开发的核心,它揭示了程序背后的逻辑和设计思路,对于...

    cnblogs-theme-silence::open_book:专注于阅读的博客园主题

    CNBLOGS主题静音专注于阅读的博客园主题|特性界面简洁优雅。响应式网页设计。容易使用和轻量。代码简单且可高度定制。支持多种色彩主题。支持日间/夜间模式。支持自定义导航栏菜单项。支持悬浮标题目录。支持生成...

Global site tag (gtag.js) - Google Analytics