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

【观点】代码审查:大家都应该做的事情(转)

 
阅读更多

导读:本文是从《Things Everyone Should Do: Code Review》这篇文章翻译而来。译文来自外刊IT评论《谷歌是如何做代码审查的》。

内容如下:

本文的作者Mark CC

 

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

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

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

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

 

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

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

 

代码审查的最大的功用是纯社会性的。

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

 

还有一个非常重要的好处,代码审查能传播知识。

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

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

 

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

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

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

 

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

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

 

第三是速度。

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

原文出自:scientopia

译文出自:外刊IT评论

分享到:
评论

相关推荐

    有效无痛苦的代码评审.pdf

    通过不断的代码审查,开发人员可以学习到不同的编程方法,并将其应用于未来的工作中。 #### 三、常见的误区 1. **多余且强制性的过程:** 开发人员有时会觉得代码评审是一个不必要的环节,是被迫参与的。 2. **...

    模块一unit2全单元短语与句型.doc

    56) **做得好 (do a good job in)**:在代码审查中,对他人工作的认可可以激励他们继续努力。 57) **对…感到紧张 (be nervous about)**:面试或公开演讲时,技术人员可能会对展示自己的技术知识感到紧张。 58) **...

    DevOps-版本控制进阶

    David说他的组织正在践行CI,他说:“是的,我们用Circle CI”,他描述了一个具有挑战性的场景,曾经在一个分支上工作了一段时间,大约修改了100个文件和7000行代码,然后在代码审查阶段就开始招架不住了,因为他要...

    how-to-be-a-programmer-cn.pdf

    - 定期审查日志以发现潜在问题。 - **如何理解性能问题:** - 使用性能分析工具定位瓶颈。 - 理解算法复杂度对性能的影响。 - 优化数据结构减少访问时间。 - **如何解决性能问题:** - 通过代码重构减少不必要...

    防止打架的承诺书.docx

    随着项目的复杂性增加,为保证项目能够按时按质完成,公司往往建立了一系列的行为规范和工作流程,例如代码审查、项目管理、代码规范等。遵守这些规定是保证团队效率和项目进度的必要条件。团队成员应自觉维护良好的...

    java工程师职业软实力

    在Java开发中,这意味着不断追求代码质量的优化,遵循最佳实践,如编写可读性高的代码,进行定期的代码审查,并且善于从失败中学习,持续改进。 其次,"程序员的职业素养"涵盖了对编程规范的理解和执行,以及对软件...

    软件测试随想

    但如何分工则是一个需要详细分析和调整的过程,以确保每个团队和成员能够在正确的时间做正确的事情,从而实现最佳的团队协作和生产效率。 在软件测试的实践中,测试人员需要了解和掌握多种测试技巧和方法,包括但不...

Global site tag (gtag.js) - Google Analytics