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

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

 
阅读更多

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

内容如下:

本文的作者Mark CC

 

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

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

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

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

 

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

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

 

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

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

 

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

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

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

 

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

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

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

 

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

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

 

第三是速度。

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

原文出自:scientopia

译文出自:外刊IT评论

分享到:
评论

相关推荐

    代码审查:追求有效和高效的敏捷代码审查

    1. **轻量级审查**:并非所有代码都需要详尽无遗的审查。对于小的改动,可以采用快速过目或者自动化工具辅助审查。 2. **双向审查**:鼓励开发者互相审查对方的代码,促进团队合作和知识传递。 3. **使用工具**:...

    Python代码审查:提升代码质量的实践指南

    代码审查是保证软件质量和维护团队协作的重要环节。...通过本文的介绍,读者应该能够理解在Python中进行代码审查的重要性和方法。通过持续的实践和改进,我们可以不断提升代码审查的效果,构建更高质量的软件产品。

    代码审查表和代码审查实例

    一个有效的代码审查模板可以帮助审查者系统地检查代码,确保所有关键方面都得到评估。模板通常包括但不限于以下几个部分: 1. **代码结构**:检查代码是否遵循良好的编码规范,如命名约定、注释清晰、函数和类的...

    代码审查规范.doc

    代码审查规范 代码审查是软件开发过程中的一种质量控制机制,它旨在确保软件代码的质量、可维护性和可读性。代码审查规范是指在代码审查过程中需要遵守的一系列规则和标准,以确保代码审查的效率和效果。 代码审查...

    java代码审查表.pdf

    * 是否确认了所有关键代码都做了捕获异常处理?(重要60) * 是否确认了所有函数的所有分支都有返回值?(重要50) 七、可维护性规则 Java代码审查表中关于可维护性规则的重要性激活级别检查项有: * 是否确认了...

    Java代码审查工具

    5. **IntelliJ IDEA** 和 **Eclipse** 的内置代码审查功能:这两个流行的Java IDE都提供了内置的代码审查工具,允许开发者进行代码检查,发现潜在问题,并提供改进建议。 6. **Crucible**:Atlassian的Crucible是一...

    代码审查::sparkles:进行代码审查的清单

    代码审查::sparkles:进行代码审查的清单

    java代码审查V1.0.doc

    3. **审查者独立审查:** 会议结束后,审查者需要再次单独审查代码,确保没有遗漏。 4. **编写代码审查报告:** 审查者将发现问题和改进建议整理成文档。 5. **代码编写者根据报告进行修改:** 编写者需要根据报告中的...

    【软件测试】: 单元测试:桌面检查、走查方式、代码审查.doc

    3. 代码审查:通过检查代码的正确性和可靠性来检查软件的正确性和可靠性。 单元测试的工具: 1. JUnit:是一个流行的单元测试框架,用于 Java 语言 2. NUnit:是一个流行的单元测试框架,用于 .NET 语言 3. PyUnit...

    代码审查表1

    - 定时审查:避免长时间未审查的代码积累。 - 保持审查小组多样性:不同背景的开发者可能会发现不同的问题。 - 使用自动化工具:利用静态代码分析工具辅助审查,减少人为疏忽。 - 清晰的评论:审查者应提供清晰...

    静态测试-代码审查

    "静态测试-代码审查" 代码审查是静态测试的一种重要方法,它通过对代码的检查和评估来发现和修复错误。代码审查的测试内容包括检查代码与设计的一致性、代码对标准的遵循、代码的逻辑表达的正确性、代码结构的合理...

    如何执行Java代码审查

    Java 代码审查清单 一、代码整洁清单项分类 1. 使用有意义的名称:变量、函数和类名应该能够表达实际意图,使用描述性名称,避免使用单个字符或缩写。 2. 函数只做一件事:函数应该只有一个明确的任务,避免函数过...

    java代码审查.pdf

    在详细说明【标题】及【描述】中的知识点之前,需要明确这两个字段提供的是文件名和文件内容的描述,它们分别指出了文档的主题是关于Java代码审查的PDF文档,以及文档内容涉及到了Java编程语言中的代码审查技巧、bug...

    静态测试方法之代码审查(CodeReview)的清单

    下面列出的这些要点因该可以作为大部分代码审查的指导,如果是Java应用的话,这些建议应该被视作最佳实践。  代码审查可以帮助提高代码质量,避免由于代码习惯而造成的bug。下面列出的这些要点因该可以作为大部分...

    面试代码审查:与面试候选人一起审查的“不良”代码示例

    目标查看代码,找出可能会做得更好的错误或事情。 针对目标平台,着重于常见的编码错误,而不是逻辑/行为。评估什么这种锻炼的目的不是必须理解代码库,而是要发现不良的或不一致的编码行为。 这些代码示例旨在提供...

    代码审查:有关代码审查的资源列表

    代码审查是软件开发过程中的重要环节,它有助于提高代码质量,发现潜在的错误,改进设计,并促进团队间的知识共享。以下是一些关于代码审查的详细知识点: 1. **定义与目的**: 代码审查是一种同行评审过程,开发...

    一个简单的C#代码审查表

    C#代码审查表 C#代码审查表是对C#代码的检查和评估,以确保代码的质量、可靠性和可维护性。以下是C#代码审查表的重要检查项: 命名检查: * 是否采用 Pascal Casing + Camel Casing 规范? * 布尔型属性名称前缀...

    轻量级代码审查工具 JavaViwer1.0说明书

    JavaViewer 1.0 是一款专为Java源代码审查设计的轻量级工具,旨在提高代码审查效率并降低审查成本。这款工具集成了多种功能,为开发者提供了全面、高效的代码检查环境。 一、软件特点 JavaViewer 1.0 的主要特点...

    Coding Review Checklist(代码审查清单).pdf

    ### 代码审查清单详解 #### 一、背景与目的 在软件开发过程中,代码审查是一项至关重要的活动。通过审查代码,不仅可以确保代码的质量,还能帮助团队成员之间共享知识,提高整体的技术水平。本文将根据“Coding ...

    代码审查:已创建仓库以进行安全代码审查

    在这个“代码审查:已创建仓库以进行安全代码审查”的项目中,我们很显然关注的是通过代码审查来加强软件的安全性,并且已经建立了一个专门的仓库来存放和管理这个过程。 在Java开发中,安全审计是必不可少的步骤,...

Global site tag (gtag.js) - Google Analytics