代码审查的价值——为何做、何时做、如何做?

标签: 代码审查 价值 | 发表时间:2015-07-23 22:22 | 作者:
出处:http://kb.cnblogs.com/

  对于很多公司来说,代码审查是开发人员日常工作中的重要环节。通过代码审查,可以及早发现项目中存在的问题、促进同事之间的沟通与交流,并且可以在讨论中迸发出智慧的火花。但要想成功实施代码审查却并不是一件轻松的事情,为什么要进行代码审查、何时做、如何做,这是摆在我们面前的3个重要问题。针对于这3个问题,开发者 Lisa Tjapkes撰文谈到了自己的经验与教训。

在我最近的项目经历中,我们进行了广泛且正式的代码审查。这个过程极大地改进了项目的代码质量,降低了项目中新特性开发的等待时间,同时还促进了知识在整个团队间的传播与共享。我还发现代码审查并不会延误项目开发的时间,反而会提升开发人员的生产力。

   代码审查的好处

  我们发现代码审查对于项目的各个阶段都会带来很多好处:

  • 在项目起始阶段进行代码审查会帮助我们更好地使用已经建立起来的代码基,因为如果我们没有使用过某些现有代码,那么可以从当前的开发者中获得反馈信息。
  • 在项目进行过程中,我们会时不时地向团队增加新的开发人员,代码审查可以极大地降低这些新加入人员的熟悉时间。特别地,我们可以让新加入的开发人员很有信心地开发新特性,因为我们可以在合并前审查代码并且对于他们所编写的任何代码提供有价值的反馈信息。
  • 对于我们这个分布式团队来说,代码审查更加具有实际意义。团队协同在构建协作环境上会带来很大的帮助作用,我们可以即时提出想法,然后讨论,再进行开发。虽然由于不在同一地点我们会失去一些东西,不过我们却可以在代码审查过程中通过深入的讨论来获得好处。

   高效代码审查的技巧

  代码审查的方式如果处理不当可能会导致项目延期。使用正确的工具与技术可以防止在审查上浪费大量的时间,提升代码的品质。

   使用特性分支

  这个实践的好处就不用多说了,不过它对代码审查提供了更加具体的好处。特性分支意味着你可以将需要审查的代码隔离到只与某个具体的特性相关。在代码已经准备好了审查时,特性分支还考虑到了快速的上下文切换。在当前的代码进行审查时,你可以切换到新的特性上来,如果需要对审查特性的反馈进行讨论时还可以快速切换回来。

   将审查隔离为小的修改

  相对于大的修改来说,小修改的审查时间会更少。在审查大的修改时,你不仅要看很多行代码,还要查看大量的依赖代码才能真正理解,结果就是花在审查代码上的时间与修改的代码量之间并不是呈线性关系。将待审查的代码隔离为小的修改可以降低审查者的精神负担并让审查过程更加顺畅。

   使用专门为代码审查而设计的工具

  这看起来似乎很简单,但却非常重要。一些重要的特性需要包含差异比较、能够逐行注释修改,并且在审查的代码发生改变时通知大家。我所在的团队使用GitHub来管理项目代码,并且使用GitHub的pull request特性来管理代码审查。

   检查清单

  可能没必要使用非常复杂或是过于结构化的东西,如果突然出现了某些问题,使用检查清单或许是个不错的主意。

   有建设性的输入

  类似于“多加点注释”这样的话显得太没意义了,帮助也不大。假如某个接口没有注释,但也许有专门的文档用来说明呢。如果发现了某些不合理的地方,那就要明确指出来,判断设计上是否能改进或是逻辑上是否存在着错误。

  要把精力放在真正理解代码的行为上,确保当其他人需要维护它时也能够快速理解代码。

   人人参与

  即便是最有经验的架构师或是明星开发者也会犯错。因此,最好每个人都能参与到代码审查的过程中来。特别地,对于很多初级开发者或是新加入项目的开发者来说,这也是个很不错的学习机会。

   要有审查流程

  一开始,我们的项目并没有正规的审查流程。我们只是开启一个pull request,等待有人来审查,最后会有人合并修改。这种工作方式效率非常差,有时好几天都没人审查一个pull request,有时一个人给出反馈前其他人却合并了请求。此外,有些开发者审查的代码量要比其他人多不少。总而言之,没有流程导致我们的效率极低。

  最后我们认识到了这一点,创建了一个正式的结构来指导该如何进行代码审查,这加速了审查的效率。一个审查过程至少应该涵盖如下几点:

  • 如何将审查任务分派给不同的人
  • 期待审查者给出反馈的最迟时间
  • 如何标识某个审查已经完成
  • 谁负责合并已经完成审查的代码

   我在项目中是否应该进行代码审查?

  我认为代码审查对于很多项目来说都是一件好事,不过它也并非通用的解决方案。代码审查适合于如下这些项目:

  • 至少有5名开发人员
  • 在向团队增加新的开发人员时
  • 团队是分布式的
  • 项目有各种不同的组件构成,这些组件是由不同团队开发的
  • 当还处在为代码基设定约定以及最佳实践的阶段
  • 团队中有些成员对于当前所使用的技术栈还不太熟悉时

  相反,代码审查在如下的情形中并不会为项目带来更多的附加值:

  • 处理的是维护代码而不是添加新的特性
  • 团队很小且亲密无间

相关 [代码审查 价值] 推荐:

代码审查的价值——为何做、何时做、如何做?

- - 博客园_知识库
  对于很多公司来说,代码审查是开发人员日常工作中的重要环节. 通过代码审查,可以及早发现项目中存在的问题、促进同事之间的沟通与交流,并且可以在讨论中迸发出智慧的火花. 但要想成功实施代码审查却并不是一件轻松的事情,为什么要进行代码审查、何时做、如何做,这是摆在我们面前的3个重要问题. 针对于这3个问题,开发者 Lisa Tjapkes撰文谈到了自己的经验与教训.

代码审查过程

- - 博客园_知识库
   英文链接: Code Review Processes.   对我而言,把代码产品化而没有合适的审查流程,就像是一场抽抽乐游戏. 代码当然也有可能会挺好,不过总还是有一定概率某人的哪块积木没抽好,然后一切就轰然崩塌. 无论是采用持续集成服务、结对审查、QA审查,还是所有这些方案的组合,都可以大大降低引入风险的概率.

Google 是如何做代码审查的

- litefy - python.cn(jobs, news)
在上一篇文章中提到过,我已经不在Google工作了. 我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前. 因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西. Google是一个非常优秀的公司. 他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部.

代码审查中应该做的事

- China Moon - Solidot
威客 写道 "Mark Chu-Carroll从Google离职后,虽然已经收到了很多offer,但还没有决定去哪里. 他在其博客中分享了一些关于代码审查的趣事(中文). Google确实是一家很酷的公司. 不论是在公司内部或是外部,Google都做了很多让人赞叹的的事情. 这里我想介绍一些不涉及商业机密,但鲜为外人所知的事情.

敏捷代码审查指南

- - 博客 - 伯乐在线
“通过一次真正彻底地代码审查(code reviews),仔细阅读你的代码,找出问题,这是我知道的最好的方式去检测早期的bug,但是他们很少去这样干过. 某种意义上是因为他们花了大量的时间去写好代码,但是我认为主要是因为绝大部分 程序员害怕其他人审查自己的代码. 作为专业的程序员我们要克服阻力,如果你不愿意别人阅读你的代码,然后只是按照自己的意愿写,如果其他人没法读懂它,又怎能让别人使用呢.

代码审查(Code Review)清单

- - 博客 - 伯乐在线
代码审查可以帮助提高代码质量,避免由于代码习惯而造成的 bug. 下面列出的这些要点因该可以作为大部分代码审查的指导,如果是 Java 应用的话,这些建议应该被视作最佳实践. Javadoc 应该在每一个类和方法中添加. 如果是修复某个 bug,应该添加 bug ID. 走捷径的方法或者复杂的逻辑要有解释.

我所钟爱的代码审查

- - 译言-电脑/网络/数码科技
This is pretty standard fare for developers in the "real world", but I have never heard of an academic research group using them, and had never done code reviews myself before joining Google..

代码审查不是用来……

- - 外刊IT评论
提示:如果您在阅读器里点击订阅本站的文章链接时发现有一个中转页,这说明你的订阅地址有误,本站的订阅地址(RSS)是:. http://www.aqee.net/feed/,请及时纠正. 事实上,今天的我们正是从这种一直坚持探索的漫长道路上走出来的. 我们尝试各种技术、方法和工具,直到我们走到今天的成就(但这并不是说我们就此停步).

我们如何进行代码审查

- - CSDN博客研发管理推荐文章
本文来源于我在InfoQ中文站原创的文章,原文地址是:. Jim Bird是一位经验丰富的软件开发经理、项目经理与CTO,专注于软件开发与维护、软件质量与安全等领域中疑难问题的解决. 在过去的15年间,Jim曾管理过团队建设并主导过高性能的财务系统的建设. 他的主要兴趣在于如何提升小团队的效率以构建真正的软件:高质量、安全、可靠、高性能及适应性强.

你们公司做代码审查吗?

- - 外刊IT评论
每当从各种公司听到他们正在尝试自动化部署/测试的事情,我都非常关注,但通常会很吃惊,他们很少会考虑去实行代码审查制度. 看到这种情况,我通常想问: 如果代码没有经过其它人的审查,你如何知道你要测试的是什么. 这答案(如果有的话)通常是捏着手指头说 有几个人在做代码审查或“正在考虑中”. 不论你采用什么形式的测试过程,什么形式的部署过程,没有代码审查——game over.