Code Review,在当代的软件开发中占有重要的一环。虽然国内各大主流公司都已经参照国外同行设立了比较严格的Code Review机制,但是还是有好多大型软件公司以及中小型软件公司还未推行这一重要制度。那么在美国的科技企业中,Code Review推行的怎么样呢?本文就带大家来进行一个全面的了解。本文将主要探讨如下几个部分,在公司内部推行Code Review的必要性,以美国某大型公司的内部工具进行具体Code Review流程讲解,作为CodeReview的双方应该在这一过程中注意什么。

Code Review的必要性

在一次完整的代码提交过程中,我们需要经过以下步骤

  • 从主代码库中Check out出自己的分支

  • 在自己的分支中进行代码修改

  • 编写测试代码确保自己新增的代码逻辑不会破坏现有代码,以及新增代码被测试用例覆盖到

  • 如果测试用例检测出代码逻辑问题,对代码进行修改

  • 提交Code Review

  • 在获得了审阅者通过后,并且通过了所有自动化测试用例,才可以将代码放置到生产环境代码库中 由此我们可以看出,Code Review是将代码提交代码库中的最终也是最重要的环节。没有这一环的保证,代码库中将充斥着大量低质量,甚至是错误的代码。

相对于国内公司大部分公司并没有全面推行Code Review,在美国,基本所有的非外包科技类公司都对这一环节进行了很好的推行,几乎每个开发团队每天都需要进行Code Review。以作者的了解,像Google、微软这类大型公司往往对Code Review的把控比较严格,至少需要两个同事通过,你的代码才可以提交到最终生产环境代码库中。如果某些修改的代码比较大,可能需要组里级别比较高的成员——比如资深工程师甚至是工程经理,通过才可以。有的修改如果牵涉到其他组的代码,还需要对应项目组的工程师通过才可以。那么既然Code Review是这么一件繁琐的事情,为什么各个公司还是不遗余力的推行呢。作者认为主要是以下方面使得这一环节在现代软件开发中十分必要。

  • 有效的保证了代码风格的一致性 团队不需要再浪费时间去讨论个人喜好的代码风格,比如是用两个空格缩进还是四个空格,一行代码多长需要换行等等。编写代码的工程师只需要参照已有代码库中的编码风格即可,包括统一的命名规则,比如文件名和变量名,相似风格的代码注释。这一点其实对小公司更为重要,小公司相对大公司有更大的人员流动,从而更有可能出现各种风格的代码。另外,大公司内部工具相对完善,比如都会装有代码风格检查的工具,使得代码格式一致,而小公司可能需要更为严格的代码审查来保证这一点。

  • 预防可能出现的Bug 编写程序并不是简单的体力劳动,那么在代码的创作过程中工程师难免会出现一些考虑不周的情况,比如某些未考虑到的边界情况,可能会造成代码在某些情况下崩溃,又或者是工程师在某些疲劳状态下写出的一些显而易见的错误。Code Review就是三个臭皮匠顶个诸葛亮的最佳诠释,在这一过程中发现代码中的错误。

  • 相互讨论促进和谐友好的工程师氛围以及对代码库更完备的理解 在Code Review时,工程师之间并没有等级之分,即使你作为一个初级工程师,也可以给资深工程师审阅代码。作为被Review者,因为会和进行审阅的工程师不断沟通,从而对自己做的这一问题有了更深入的了解。有时,也会从资深工程师给出的代码评论中学到一些之前并不了解或者并不重视的技术细节,从而提高个人水平。而作为进行审阅的工程师,或许之前并没有接触过你代码的业务逻辑,通过审阅他也对这一领域有了了解。这一点非常重要,因为这可以帮助他在线上代码出现问题时,进行有效的排查。因为作者所在的公司每周一进行生产代码部署,所以我就会在Oncall(美国科技公司让工程师进行轮岗,以便线上代码出现问题时可以快速介入进行问题排查)前一周就会选择性对某些比较大的PR(Pull Request,指工程师将一系列文件修改提交到代码库中)进行Review,做到心中有数,一旦出现问题,可以找到对应的责任人对问题进行快速修复。

Code Review的流程

我们以某公司内部的Code Review工具来看看一次完整的Code Review过程是怎么样的。在该工具中A处表示这一次提交的代码所涉及到的全部被修改的文件。B处说明了这次代码修改的作者是谁(author),哪些人是必须作为审阅者来审阅代码的(required),哪些审阅者是可选的(optional),对应审阅者是否通过代码,如果审阅者通过了你的代码,他的状态就会变成一个对勾符号。如果被标记为required的审阅者不通过,那么你的代码是不能进行最后的提交的。C表示作者做出的修改,图中红色部分为删除的代码,绿色部分为新增加的代码。D处是所有评论的概览,通过概览点击可以直接定位到评论对应的代码部分。E处是代码修改的次数,在作者第一次提交时被标记为1,当审阅者针对第一轮代码提出意见后,作者会对代码某些部分作出修改后再提交审阅。而每一次作者提交代码,上面对应的数字都会加1。当审阅者通过你的代码,你将代码提交到代码库中以后,那么这次Code Review也宣告结束,在数字旁边会标注完成(Completed)。F处是作者和审阅者交换意见的地方,比如审阅者Trevor提出了问题,那么作者Christian在其下方进行回复,如果Trevor觉得作者说的合理,那么审阅者就将评论状态设置为关闭(Closed),表示其对这一部分的异议已经消除。这一过程也是区分一个工程师是新手还是老手的过程,一个菜鸟工程师往往需要多达10几轮的Code Review,而一个老手往往在几轮之后就可以顺利将代码提交。

那么作为被review者和review者需要在Code Review中怎么做呢?

被Review者

工程师最好提前针对这次提交的代码设计跟进行Code Review的工程师进行讨论,确保自己的设计和思路没有偏离方向,否则后续需要进行好多修改。

在提交Code Review时,最好有一些文字进行解释,比如提交的代码解决了什么问题或者增加了什么功能,为了这些改进自己是怎么进行修改的,以及自己是怎么进行测试的。这样可以方便其他一些工程师主动参与进来,提出意见。

在自己的代码中尽量避免出现一些较为低级的,明显需要修改的代码。比如参照已有代码格式,命名等,确保自己的代码风格和已有代码是完全兼容的。

要对自己的代码有责任心,要确保自己了解做出的每一处修改,而不仅仅只是为了通过Code Review。不要过分依赖其他review代码的工程师,认为他们可以找出每一处潜在bug。

Review者进行Review的工程师在review别人代码时,尽量看到好的一面,这一点在给新人进行review时尤其重要。在给新人review时也是传授方法的好时候。授人以鱼不如授人以渔,当新人成长起来可以独挡一面,同时也减轻了你的工作量。

进行评论时要注意语气,尽量使用一些语气助词和Emoji符号表情,比如能否请你把XX改成XX?这里是不是用XX方法比较好。这样也更让对方易于接受。

积极主动参与Code Review可以让你对项目代码熟悉程度比较均衡,不会出现某个地方完全不了解的情况。而作为新人工程师,更需要积极参与Code Review,尤其尽量至少对每个组员的工作都进行review,这样也可以更为快速的了解组里其他工程师正在做的工作。

总结

本文通过美国某公司内部Code Review工具实例介绍了一次完整的Code Review是怎么样的,并对Code Review双方给出了建议。希望所在公司还没有推行Code Review机制的小伙伴能多多谏言推行,从而减少一些低质量代码带来的苦恼。

PS. 如果觉得文章还不错,欢迎点赞/分享/转发本文。如果你想加入号主的讨论群,可以在公众号的关于我们->技术讨论群中找到微信群组。

听我的!美国科技公司这样做Code Review相关推荐

  1. 一笔百亿美元军方订单,引发了美国科技公司大混战

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kXYOnA63Ag9zqtXx0/article/details/83542963 硅谷Live / ...

  2. 商业周刊评出08年增长最快的美国科技公司

    商业周刊评出08年增长最快的美国科技公司 最新一期的<商业周刊>杂志评选出了2008年增长最快的美国科技公司,生物制药公司Gilead Sciences.西部数据和苹果分列前三强. 由于美 ...

  3. 美国科技公司纷纷陷裁员潮

    昨日,有消息称,戴尔在完成对EMC公司的收购后,由于债务压身,将采取裁员措施来节省开支.而戴尔也只是今年以来众多进行裁员的美国科技公司之一. 据了解,戴尔在收购EMC公司后,员工总数达到了14万人,又 ...

  4. 美国科技公司在中国面临斯诺登效应

    路透社近日发布文章称,美国科技公司在中国面临"斯诺登效应".由于面临政府怀疑和价格调查,美国科技公司们得重新思考如何在该全球第二大的经济体销售硬件与服务.包括IBM.思科和高通在内 ...

  5. 万字详文告诉你如何做 Code Review

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|机器学习实验室 前言 作为公司代码委员会 golang 分 ...

  6. 在腾讯,如何做 Code Review?

    作者:cheaterlin,腾讯 PCG 后台开发工程师 前言 作为公司代码委员会 golang 分会的理事,我 review 了很多代码,看了很多别人的 review 评论.发现不少同学 code ...

  7. 在腾讯,如何做 Code Review

    作为公司代码委员会 golang 分会的理事,我 review 了很多代码,看了很多别人的 review 评论.发现不少同学 code review 与写出好代码的水平有待提高.在这里,想分享一下我的 ...

  8. 万字详文告诉你如何做 Code Review!

    作者:cheaterlin,腾讯PCG后台开发工程师 来源:腾讯技术工程 前言 作为公司代码委员会 golang 分会的理事,我 review 了很多代码,看了很多别人的 review 评论.发现不少 ...

  9. 在腾讯,我们如何做 Code Review

      推荐关注 扫码关注"中生代技术",选择"星标"公众号 重磅干货,第一时间送达!责编:架构君 | 作者:cheaterlin,腾讯 PCG 后台开发工程师 | ...

最新文章

  1. web安全简介_Web安全:HTTP简介
  2. vue的插槽slot
  3. 5233杨光--第十一周学习总结
  4. DynamicsCompressorNode
  5. java获取系统dpi_java中如何获得打印机的dpi
  6. 剑指offer面试题[24]-二插搜索树的后序遍历序列
  7. Rainmeter,让你的桌面更精彩~
  8. Android腾讯微博开放平台入门(五)综合测试
  9. 拼多多被“薅羊毛” 交千万学费学到了什么?
  10. 花生壳域名绑定动态IP原理浅析
  11. 根据域名快速查询IP
  12. MOS管开关使用方法
  13. 什么东西能够改善睡眠,拯救失眠的助眠好物推荐
  14. Pytorch函数之topk()方法
  15. 4GL是什么?计算机辅助软件工程CASE是什么?
  16. 第一次写策划书的感想
  17. html实现折叠面板,js轻松实现折叠面板
  18. 实践丨GaussDB(DWS)资源管理排队原理与问题定位
  19. 计算机函数Dmax怎么算,【Excel函数】DMAX函数 - 曹海峰个人博客
  20. [乡土民间故事_徐苟三传奇]第卅六回_比梦好商人失肉酒

热门文章

  1. 国外网站评出对程序员最具影响的书籍清单
  2. javascript一些常用的代码
  3. 终于收到HacktoberFest的奖品啦
  4. windows10加载动画_如何关闭动画并使Windows 10看起来更快
  5. 网格自适应_ANSYS 非线性自适应(NLAD)网格划分及应用举例
  6. NetCore2.0Web应用之Startup
  7. chrome开启touch屏幕点击事件
  8. 本文主要总结关于mysql的优化(将会持续更新)
  9. 10.2.0.5启动enterprise manager
  10. Laravel 学习笔记之 Query Builder 源码解析(下)