`
grantbb
  • 浏览: 272349 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

转:google是如何做代码审查的

阅读更多

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

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

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

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

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

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

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

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

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

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

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

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

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

不,你不需要。

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

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

分享到:
评论

相关推荐

    提高C-C++代码质量的工具:静态分析、代码审查与单元测试.md

    提高C/C++代码质量的三种关键工具和方法:静态分析、代码审查与单元测试。首先,静态分析通过解析源代码,在不运行程序的情况下检测潜在的错误、规范违例和性能问题,推荐使用Clang-Tidy、Cppcheck等工具,并强调将...

    Java代码审查工具

    Java代码审查工具是提高软件质量和团队协作效率的重要手段。代码评审是一种系统性的源代码检查过程,旨在确保代码符合编程标准,减少错误,提高可维护性和可读性,同时也能促进团队成员之间的知识共享。在这个过程中...

    all-about-code-review:这是有关代码审查的精选资源清单:文章,工具,培训。

    2. Google的代码审查指南:Google 公布的一套全面的代码审查指南,涵盖了从开始到结束的整个审查过程。 3. Coursera 和 edX 上的课程:这些在线教育平台提供了专门的课程,教授如何进行高效代码审查。 五、Code...

    plumReview:Plum Analytics 的代码审查

    【标题】: PlumReview——基于 Plum Analytics 的代码审查实践 在软件开发过程中,代码审查是一项至关重要的质量保证活动。Plum Analytics 提供了一款名为 PlumReview 的工具,专门用于进行高效的代码审查。这款...

    asp 代码审查工具

    ### ASP 代码审查工具知识点详解 #### 一、代码审查概览 代码审查(Code Review)作为软件开发过程中至关重要的一个环节,旨在提高代码质量、减少缺陷并促进团队协作。通常,这一过程涉及代码创作者与审查人员之间...

    修改软件的艺术:构建易维护代码的9条最佳实践

    8. 代码审查:通过同行评审,团队成员可以互相学习,发现潜在问题,提高代码质量。代码审查也是传播最佳实践和团队知识的重要手段。 9. 持续重构:随着项目发展,代码可能变得复杂。定期进行重构,以保持代码的简洁...

    谷歌的代码审查.txt

    谷歌的代码审查.txt

    代码审查CodeReview的最佳实践

    包括像Google、微软这些公司,CodeReview都是基本要求,代 我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,...

    Gerrit代码审查工具是一个基于Git项目的代码审查和项目管理工具 .rar

    Gerrit代码审查工具是一个基于Git项目的代码审查和项目管理工具。 Gerrit允许任何授权用户向主Git存储库提交更改,从而简化了基于Git的项目维护,而不是要求所有已批准的更改由项目维护者手动合并。 Gerrit利用网页...

    Gerrit代码审查工具 v3.0.12-源码.zip

    Gerrit代码审查工具是一款基于Web的开源代码审查系统,主要设计用于Git版本控制系统。它提供了方便、高效的代码审查流程,使得开发团队可以更有效地协作,确保代码质量。Gerrit v3.0.12是该工具的一个稳定版本,包含...

    谷歌是如何做代码审查的

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

    google代码规范检查工具

    **谷歌代码规范检查工具——cpplint** 谷歌是一家在软件开发领域有着极高影响力的公司,它不仅贡献了众多开源项目,还制定了严格的编程规范,以确保代码的可读性、可维护性和团队协作效率。其中,`cpplint.py`是...

    代码审查清单:带有示例的代码审查清单(仍为WIP)

    代码审查是软件开发过程中的重要环节,它有助于提高代码质量,确保遵循良好的编程实践和设计原则。本资源是一个工作中的代码审查清单,包含了对代码进行有效审查的关键点,特别是针对Java编程语言。以下是对该清单中...

    Google的代码审核指南.pdf

    Google的工程实践文档 ...[Google的代码审核指南 (Google’s Code Review Guidelines)],它包含两部分: - 代码审核者指南 (The Code Reviewer’s Guide) - 代码提交者指南 (The Change Author’s Guide)

    代码格式转换工具 转换代码风格

    - 代码审查前:在提交代码审查之前,先进行格式化,便于审查者快速理解代码结构。 - 代码整合:在合并多人代码时,统一代码风格可以减少冲突。 - 个人习惯调整:对于个人而言,可以将代码格式化成自己习惯的风格...

    Gerrit代码审查工具 v3.7.2

    Gerrit是一个基于Git项目的代码审查和项目管理工具。 Gerrit允许任何授权用户向主Git存储库提交更改,从而简化了基于Git的项目维护,而不是要求所有已批准的更改由项目维护者手动合并。 Gerrit利用网页浏览器,使...

    CodeReviewRepo:该存储库将用于代码审查演示

    CodeReviewRepo是一个专门为代码审查演示而设立的存储库,它主要关注的是软件开发中的一个重要环节——代码审查。在软件工程中,代码审查是确保代码质量、发现潜在问题和提升团队协作效率的关键步骤。通过这个存储库...

    eng-practices:谷歌工程实践文档-https:jimmysong.ioeng-practices

    Google代码审查指南,实则两套指南: 代码审查者指南 代码开发者指南 在线浏览: : 译者序 此仓库翻译自 ,目前为止的主要内容为Google总结的如何进行代码审查(代码审查)指南,根据原Github仓库的标题判断以后会...

    google_eng_practice:谷歌(Google)的工程实践文档(Google的工程实践文档)

    1. **代码审查**:Google高度重视代码审查,认为这是确保代码质量的关键环节。代码审查不仅检查语法错误和逻辑漏洞,更注重设计决策的合理性、代码的可读性和可维护性。通过同行评审,新进工程师可以从资深同事那里...

    谷歌开源项目Python风格指南与编写简洁可读代码的建议.zip

    10. **代码审查**: 谷歌项目强调代码审查的重要性,这是一个检查代码质量、发现潜在问题和分享知识的有效过程。 通过遵循这些指南,开发者能够写出更整洁、更可读的Python代码,提升项目的整体质量,同时也便于团队...

Global site tag (gtag.js) - Google Analytics