代码审查是许多高效团队的工程实践。即使你的软件已经有很多优点了,但团队在做代码审查时仍然会遇到一些陷阱。

这篇文章我讲向你介绍一些需要特别注意的陷阱,以防代码审查工作拖累你的团队。知道可能遇到的问题或陷阱,将会帮助你进行更加高效、有效的的代码审查工作。这是我们调查了900名微软员工后得到的结论。

一个典型的代码审查过程

一个典型的使用工具进行的代码审查过程大致是这样的:开发者完成一段代码,她提交代码准备开始让别人review。然后她选择需要审查她的代码的人。审查代码的人开始查看代码并给出一些评论。作者按照这些评论完善代码。当所有人都觉得没问题了以后,代码就可以合并进代码库了。在另一篇中我详细介绍了微软的代码审查的过程。

我为我的邮件订阅读者们准备了一份代码审查电子书,书中包含了全部的代码审查最佳实践的清单。我还加了一些额外的见解,大家可以自行申请。

代码审查并不总是一个平稳的过程

这些步骤听起来像是 一个很平稳的过程,其实并不是,像其他所有事情一样,实际过程往往不如预期。在代码审查过程中,经常会遇到一些陷阱,这会降低整个审查代码的积极性。如果不能正确处理,代码审查会对整个团队的工作效率产生影响。所以让我们来看一下代码审查过程中究竟存在哪些坑。

关键问题主要有两种:代码审查花费的时间和代码审查所能提供的价值。

等待回复是一种煎熬

作者需要面对的一个最主要的陷阱就是及时收到回复。等待评论的过程中不能在代码中做其他工作是一个巨大的问题。即使开发者可以完成其他任务,如果代码审查工作耗时过长,也会对开发者对工作效率和满意度造成不好的影响。

开发者必须兼顾多项职责

代码审查并不是代码审查人员唯一的任务。相反,它只是开发者日常工作之一(即使需要每天花费大量时间来做)。所以代码审查人员很可能在做其他工作,并且必须在开始代码审查之前停下或完成这些工作。

如果时间不理想,或者代码审查人员在之前没有预料到这种变化,那么她可能在代码审查之前需要一点时间。远程团队还需要注意时差,这意味着代码审查可能花费更多的时间。

开发者会面对代码审查不被当作实际工作的问题

对于作者和代码审查人员来说,时间都是有限的,如果团队想要开发者做代码审查工作,但又不把它计入工作时间,这是有很大问题的。

代码审查工作和效果没有奖励

如果只是声称对代码审查工作进行评估而没有任何奖励,这将没有意义。大多数公司只会对开发者开发的功能或者写出的代码进行奖励,这减弱了开发人员在工作中帮助他人的动力和能力。代码审查应该成为绩效评估和晋升决策的基石。

社会因素和团队动力

等待代码审查并不总是和缺乏时间以及缺少奖励系统有关。由于社会性质,延迟审查可能是由于不安全感或团队动力。尤其是如果代码审查工作是压倒性的或者审查者是新手,那么代码审查会让人不知所措。

大量代码很难审查

大量的代码是审查工作的另一个巨大的陷阱。想象一下如果你是代码审查人员,当你需要审查一段代码时,你通常会想:我很快就能看完,但是当你打开的时候,发现这是一段巨大的改动,修改遍布整个代码库,你的第一反应是什么?

大概是:天呐!(译者注:也可能是我*!)

没错,这正是我们在分析了数千次代码评审中看到的。随着代码数量的增加,不仅是审核时间需要增加,评论的质量也会随之下降。这也是可以理解的。

大量的代码更改非常难以审核,另外,如果审核人员对这部分代码并不熟悉,那这将是一场噩梦。

理解代码修改需要一些指导

大多数审核人员会面临无法理解代码修改的动机的困境。如果没有任何对修改的描述和解释,代码审查工作将会非常难以进行。研究表明如果审核人员不理解代码修改的目的,或者由于量大而不堪重负,那么她很难给出良好的建议。

It’s just this big incomprehensible mess… then you can’t add any value because they are just going to explain it to you and you’re going to parrot back what they say.

没有得到有价值的反馈会降低开发人员审核代码的动力

毫无疑问,花费时间去等待代码审查,却没有得到有用的反馈是一个常见的问题。虽然团队可能从知识分享中受益,但这样仍会降低开发者的动力和收益。

审核人员不能给出有效建议的原因通常有这样几种

  1. 审核人员不具备这方面专业知识
  2. 审核人员没有时间去完整的审查代码
  3. 审核人员没有理解修改的目的

一旦主要讨论代码格式,你就需要采取行动

另一个在代码审查过程中很重要的问题叫做bikeshedding。它的意思是开发者专注于小问题的讨论(例如代码格式)而忽略了更严重的问题。导致这种行为的原因有很多,通常是由于审核人员并不理解改动的目的或者没有时间做代码审查。有时bikeshedding可能代表团队的动力出了问题。

达成共识可能需要面对面讨论

有时候会发生代码作者和审核人员或者是审核人员之间很难达成共识的情况。由于团队动力和这件事紧密相关,因此必须小心处理这种情况通过工具和书面形式只会加剧这种问题。如果要讨论有争议的问题,那么面对面或者视频也许是更好的方案。

代码审核的好处大于工作量

我希望这些陷阱不会改变你对代码审核的想法,因为如果你了解了这些陷阱并妥善处理它们,代码审核工作对于整个技术团队是非常有好处的,而且会有更有效的方法来做代码审核。

原文地址

https://www.michaelagreiler.com/code-review-pitfalls-slow-down/

最后,如果可以的话请帮忙填一下调查问卷。

【译】别让你的团队掉入Code Review的坑相关推荐

  1. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

  2. 一分钟看懂外卖O2O:小心!别掉入这三个坑里

    一边是融资不断登上新闻的头条:外卖O2O平台生活半径获得了3亿元的C轮融资,主打众包配送的邻趣宣布完成了千万美元的B轮融资,饿了么则干脆在F轮融了6.3亿美元-- 一边是对O2O创业唱衰声音不断:&l ...

  3. 告诉你外汇交易中心最有可能掉入的九个坑

    一.外汇真能赚钱吗?预期目标多少才算合理? 玩外汇的人越来越多,大部分人都是奔着暴利去的.但是现实很残酷,这个市场95%的人都是亏钱的,努力多年都不一定能赚多钱,所以想入坑的人,如果没有足够的经济支撑 ...

  4. 如何用 Gitlab 做团队内的 Code Review

    基于分支的代码 Review 新建 Issue (无论是 bug 还是 feature), 描述背景或问题, 本地创建分支 issue#123 (123是 issue 的 ID), 围绕关联 issu ...

  5. Code Review 在丁香医生前端团队的实践

    时间过得很快,转眼间 Code Review 机制在丁香医生前端团队已经运作一年多了.今年4月初时,将团队在 Code Review 方面的一些经验在丁香园前端团队进行了分享,各个业务线的前端同学们逐 ...

  6. 关于ESP8266+OLED显示网络天气+天气图标,我掉进过的一些坑

    就权当是给自己写的一个总结吧. 中间也走过不少的弯路,没人指导,只有自己慢慢摸索,网上看到的教程也是零零散散,或许是自己C代码功底不够硬,总之照搬别人的结果坑到最后还是自己,搞得一身疲惫,最后索性,按 ...

  7. 程序员掉入传销组织用“代码”求救,同事秒懂

    南京一家大型软件企业的年轻程序员小张(化名)万万没有想到,当他被传销组织控制.几近绝望之时,自己尝试利用计算机"代码"向同事传递求救信息,他的程序员同事们竟然"秒懂&qu ...

  8. 沐风:微信小程序火了,小心掉入陷井!

    2018年,小程序处在火山爆发的风口上.今天任何一个创业者,都要先做小程序.小程序成功了,再做APP,小程序不成功,APP基本也没希望. 各行各业都在尽快布局小程序,然而目前,小程序第三方开发市场鱼龙 ...

  9. 软文营销如何建立独特内容让读者自动掉入“圈套”

    企业对软文营销的需求在不断增加,因此必须利用策略来产生真正的效果.面对网络上日益激烈的竞争,各中小型企业可能选择正确的方式来增加他们的销售漏斗.只有寻找到最有潜力吸引读者参与的方式,证明自己了解目标行 ...

最新文章

  1. roya mysql_MySQL安装及基础知识
  2. LeetCode Two Sum III - Data structure design
  3. Oracle 11g安装步骤详谈
  4. jquery中$(document).ready(function(){//todo});window.onload时间线关系
  5. php js动态显示系统时间,PHP+JS动态显示服务器时间
  6. angular的性能分析 -随记
  7. HDU 1010 深搜+奇偶剪枝
  8. javascript 数组所有方法
  9. 深度优先遍历,广度优先遍历
  10. 二维数组指针,指针数组与数组指针的区别,一看就懂
  11. win7系统关闭蓝牙服务器,win7系统怎么打开蓝牙的两种方法
  12. 2008年java占有率_2008年中国城市GDP排名 目前最精确的数据(国家统计局排名):...
  13. html 小游戏 俄罗斯方块
  14. 大数据繁荣生态圈组件之实时大数据Druid小传(三)Druid入门实操
  15. 这份赏金任务,人人都能做,只要……
  16. python迭代法求极值_用Python实现最速下降法求极值的方法
  17. ipad4使用教程 ipad mini使用技巧
  18. TD源链:让区块链臻于完美
  19. 解析命运密码--由浅入深教你快速学会推断自己一生运气
  20. T 字头 大型国际新能源公司 急聘 待遇优厚

热门文章

  1. 试谈中国地理环境与中国文化的联系
  2. discuz教程:修改帖子详情页“来自: XX手机客户端”的链接地址
  3. 【JAVA程序设计】(C00067)基于SSM(非maven)图书馆座位预约管理系统
  4. nao机器人学习笔记2
  5. 精益案例:某阀门公司的精益生产应用
  6. hdu 4160 (Dolls)二分图的最小路径覆盖
  7. 侧重于讲述前端的网站开发流程
  8. 发信息服务器恢复,手机短信删除了怎么恢复?看完恢复原理你就懂了!
  9. PICE(1):Programming In Clustered Environment - 集群环境内编程模式
  10. 浅谈渠道运营及同期群数据分析法