代码审查过程

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

   英文链接: Code Review Processes

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

   编程团队规模已经超过了你的掌控能力

  我在 Think Through Math(下文简称 TTM)的工作有18个开发者组成的工程团队,其中有两位是QA专家。这算是有挺多人(相对而言)在同时编码了。我们的架构中有好几种不同的服务,所以不是每个人都能对代码的每个角落了如指掌。我们中有些人偏重于前端的工作,有些人侧重于数据仓库和报表,还有些人则在后端折腾Ruby代码。我们都会经常重新搭配分组以相互传播知识,不过始终还是有相当多的人在为不同的项目工作,而没有一个人能把整个系统吃透。

  我知道在这种事上我们并不孤单——有其他开发者也处于差不多的情况。一些人只是按部就班开发着应用,一些人则尝试把庞大的Rails应用拆分成小粒度的服务,还有一些人在处理遗留代码拯救项目。不管是什么类型的项目,都可以从某种恰当的代码审查流程获得很大收益。对按部就班的开发项目而言,可以确保做修改,添加新特性时一切正常;对大型系统拆分而言,是可以在代码质量改进并正确分解的时候确保每个新服务都仍保持功能;而对于拯救项目,则是可以确保代码适配新标准时,所需的功能都正常。更棒的是,流程合理的话这些都可以自动完成。

   TTM当前审查流程

  在我们TTM的整个审查流程的迭代中,我不记得有哪次是不好使的,不过总有一些比其他更有效。最新的一代似乎是目前为止最好的(如人所愿),不过仍然存在改进空间。下一篇帖子里我会很乐意解释我们针对审查流程达成共识和改进的新方法,不过这不在本帖讨论范围。下面是我们当前审查流程执行的要点:

   代码审查流程

  首先,开发者(通常是一组结对),完成了bug修改,新特性或重构,把代码提交给Github。如果他们只是想要CI服务器在他们提交的代码分支运行测试套件,他们会打上我们的WIP(半成品)标签,这样其他开发者和机器人就知道这次什么都不用做。这时(还有每次代码提交PR时),我们的Hound服务器会运行来检查我们的代码风格,以确保提交的代码的风格满足我们所选用的代码风格。

  代码一旦就绪,开发者就为PR打上“需要代码审查”标签(Needs Code Review label)。他(她)还会附上完备的清单形式的关于QA该如何检测PR的指南。在预设的时间以后,我们的能干的聊天机器人,mathbot会来检查带着“需要代码审查”标签”的PR(Pull Request),给它们分配一两名其他的开发人员来审查代码。若是某个代码审查者觉得审查自己不熟悉领域的代码不太舒服,他们只需在聊天室里请求熟悉相关代码的人来替换。

  我们通常会要求开发者仔细检视代码,而不是简单地做个人肉 lint 工具或者编译器。从我们的流程定义页面照搬的对审查风格的要求是:

  • 保持好奇,审查PR的作者为何如此实现;
  • 查找逻辑上的瑕疵,写反了的布尔判断,潜在的对象的错误选择,类型不匹配;
  • 寻求代码命名和动机的清晰;
  • 寻找可以优化的地方。太细的优化并不常需要,主要是能够避免的东西如:
    • 循环内部的偶发DB调用
    • 循环内部可以避免的繁重工作
    • 频繁使用和代价高昂的操作,却没有使用缓存或记录的机制

  如果审查者或其中一人认为代码可以调整,他们就会在Github的PR添加简短评论,开发者就能获得一个很清楚的标注,说哪些地方有问题。之后审查者移除“需要代码审查”的标签并替换成“需要修改”的标签,提醒开发者关注评论,并修改实现,或者申辩这样编写代码的原因。

  有一件重要的事情需要注意,这里所有的评论都是以尊重和积极的态度完成的。我们不是为了对别人评头论足。我们是为了帮助彼此尽可能写出最好的代码,让整个系统更完善。自我提升是我们整个团队共有的目标,作为一个学习型的团队,我们总是在技术和实践上互相帮助。

  要求的修改完成后,或者代码被证实合理后,开发者移除“需要修改”标签,重新标记为“需要代码审查”,这样审查者就可以继续干活儿了。一旦他们都签发(sign off)了本次改动,“需要代码审查”标签就翻成了“完成代码审查”,也就是不需要再做代码审查了。如果不需要用户体验评估,那么”需要QA”标签就会打上。

   用户体验评估

  我们的产品有广大受众——学生、学校的教职员、管理员等。所以我们非常关注我们版本的变化和用户界面/体验的变化。据此,一旦我们的系统前端做出了任何可能使站点上某项外观变化的改动,我们都需要为PR加上“需要UX”标签,以使UX小组的某人可以审查我们的变化。因为UX要改变通常也影响到代码,所以这个步骤一般和代码审查流程并行完成。如果需要再修改,审查者移除标签并设置为”需要修改“,如同之前代码的流程。一旦都好了,他们会移除”需要UX“标签并带上”需要QA“标签。

   QA审查

  QA小组很小,不过职责重大,要确保我们的代码满足业务需求,别上来就崩溃了。我们使用项目管理工具把PR链接到故事,做QA工作的人进行审查时,就可以快速地参考相应的验收标准,以及目标和偏差。他们使用开发者提供的关于测试内容的说明,动用他们自己的能力尝试去击垮系统。如果有什么地方不对了或者没有满足验收标准,他们还是移除所有标签,加上”需要修改“标签,这样在开发者实施修改之后几乎总是会强制带来新一轮的代码审查(通常只是修改部分)。当所有事情都做完,运行良好,代码会得到一个”Passed QA“标签,然后会被合并到我们的发布候选分支。到此代码会最终提交给项目master,并在QA和产品团队决定发行版中应该包含的特性和bug修复后提交产品化。

  如果这些标签的玩意让你迷惑,请看下面的流程图。

   为什么?

  流程看起来很多,其实在真实世界里使用起来真的算极其简单了。如果是一次小审查,一个需要尽快完成的特性,整个工作流甚至可以在十分钟内完成。不过通常来说时间会长些,并没有那么急。一切都自然地协作,这套流程确保了我们有三类不同的人群,从不同视角看待我们的代码,确保它有很高的质量并完成应有的功能。这有助于保持我们的代码库和测试的整洁、可读,以及自我文档化。

  好处可不只是你有了一个流程。我们发布更少的bug,我们对进入代码库的代码满怀喜悦,而且还有人帮助我们每天提高。我无法强调有多少次第二双眼睛阻止了我代码中愚蠢的错误或性能下降。还有QA,在我没有检查的时候,他们救了我无数次。我从未觉得有评论或者批评是带着怨恨或者审判心态的,它们只是坦率的呵护,为了保持代码整洁,为了帮助我修正错误,清理代码,或者学习新的东西。

   总结

  在你实际工作中做一些审查的流程吧,或者花点时间去分析,回顾并改进你既有的策略。迭代你的流程,拥抱潜在的变化,因为下一个主意就可能更好地改善结果。软件和真人同时审查你的代码,能避免你把愚蠢的错误发布到产品中去,能让你的代码仓库中堆砌的不再是无法管理的代码。

相关 [代码审查] 推荐:

代码审查过程

- - 博客园_知识库
   英文链接: 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.

[原]代码审查审什么

- - 阿朱=行业趋势+开发管理+架构
看着很多人做代码审查重点审格式和命名,制定的代码规范也主要偏重代码格式和命名,我真想骂一句操蛋,这真是浪费时间又解决不了问题. 此篇文章就是骂完操蛋后奋笔快速敲下来的,有不妥之处请大家谅解. 一、目的:为啥要花费时间要搞人工代码审查. 1、有些问题是工具检查不出来的,需要人工审查. 2、有些问题是不希望花大代价来发现、或者上线后才知道.