摘要: Code Review 可以提高代码质量。

Fundebug经授权转载,版权归原作者所有。

原文地址:https://kellysutton.com/2018/10/08/8-tips-for-great-code-reviews.html
更多内容请见译者 Blog:https://github.com/elevenbeans/elevenbeans.github.io

你在学校里不曾学到的东西中有一件是:如何才做出优秀的 Code Review。你学到了算法、数据结构、编程语言基础知识,但没有人坐下来说:“下面介绍如何确保你如何(对同事)提出很棒的反馈(Code Review)”。

Code Reviews 是开发出好软件的关键过程。经过审核的代码往往质量较高、错误较少。一个良性的 Code Reviews 文化也提供了额外的好处:

  1. Ta 可以对于 bus factor (和 key person risk 相近,意为少数关键的技术人员带队,一旦人才流失对团队是很大打击,团队抗风险能力弱)进行有效限制;
  2. Ta 是培训新成员的一个很好的工具;
  3. Ta 也是共享知识的好方法

假设

在我们深入研究之前,为这篇文章中的要点做一些假设是很重要的。 它们如下:

  • 你在信任的环境中工作,或者您和您的团队正在努力提高你对他们的信任度;
  • 您应该能够在非代码方案中提供反馈,或者正在努力在您的团队中提供反馈;
  • 你的团队希望产生更好的代码,并且理解完美是动词而不是形容词。 我们明天可能会找到一种更好的做事方式,我们需要保持开放的心态;
  • 你的公司重视高质量的代码,并理解业务可能不会快速“交付”。用引号是因为未经测试和未经审核的代码实际上可能无法正常工作;

现在我们已经制定了一些基本规则,让我们深入研究。

1. 我们是人类

很好理解,你即将审核的代码中,有人花了时间、付出了心血。他们会希望自己的代码写的很棒。你的同事会表现出最好的意图,没有人愿意发送蹩脚的代码。

保持客观是非常困难的。你需要始终确保批评代码本身,并尝试理解编写代码的上下文。尽可能多地取消除区隔。而不是说:

你以一种令人困惑的方式写了这个方法。

请尝试重新改写代码本身以及重新理清对 Ta 的理解:

这个方法让我有点困惑,我们能为这个变量找到一个更好的名字吗?

这里,我们会解释我们作为读者对代码的看法。这不是他们的行为或意图。这是关于我们和我们对代码的解释。

每个 PR 都是它自己的艰难对话。尝试与您的同事达成共识,共同努力实现更好的代码。

如果您刚刚结识了同事,并且您对 PR 有重要反馈,请一起浏览代码。这将是一个与同事建立关系的好机会。与每位同事一起做到这一点,直到这件事情让你不再感觉尴尬。

2. 自动化

如果计算机可以决定并执行规则,请让计算机执行此操作。无休止地争论 Space 与 Tab 并不能充分利用时间、提高任何效率。相反,应该花时间对于规则达成一致意见。在低风险情景中,这有机会可以让你了解你的团队在 “不认同但承诺”方面的表现。

语言和现代工具链不缺乏执行规则(linting)和复用它们的方法。 在 Ruby 中,你有 Rubocop; 在 JavaScript 中,Jslint/eslint。 找到你的语言的 linter 并将其插入你项目的构建流程。

如果您发现缺少现有的 linter,请自己编写! 编写自己的规则非常简单。 在 Gusto 中,我们使用自定义的 linter 规则来捕捉类的弃用或温和地提醒人们遵守一些 Sidekiq 的最佳实践。

3. 全员参与

将所有代码审查职责一股脑全交给 Shirley 是很诱人的。

Shirley 是一个关于代码的大师,她总是知道什么是最好的。她知道系统的来龙去脉,而且她在公司工作的时间超过了团队的集体任期。

然而,仅仅因为 Shirley 理解某些事情并不意味着她的团队中的其他人可以理解。年轻的团队成员可能会对指出 Shirley 的代码评论的问题而犹豫不决。

我发现将评论分发给团队的不同成员会产生更健康的团队互动和更好的代码。初级工程师在代码审查中最强大的一句是“我发现这令人困惑。”这些就是使代码更清晰,更简单的机会。

请传播这些评论。

4. 增加可读性

在 Gusto,我们使用 GitHub 来管理我们的代码项目。几乎 GitHub 上的每个<textarea>都支持Markdown,这是一种在评论中添加 HTML 格式的简单方法。

拥抱 Markdown 是让事物变得可读的好方法。GitHub 或您选择的工具可能具有语法突出显示,这对于删除一些代码片段非常有用。使用内联代码的单反引号(`)或代码块的三重反引号(```)可以更好地传达想法。

熟悉 Markdown 语法,特别是在注释中编写代码时。 这样做有助于保持您的评论具体和专注。

5. 至少留下一个积极评论

代码评论本质上是负面的事情。在我要将此代码发布到线上环境之前告诉我这个代码有什么问题,这是挺伤人的事儿。有人花时间在这上面,并期望你会指出它会如何变得更好。

因此,请至少留下一个积极的评论。让它变得有意义和极具个性。如果有人终于掌握了他们一直在努力的掌握的事情,那么就请你把它 Ta 出来。 它可以像点个赞

8 个 Tips 让你更好的进行 Code Review的更多相关文章

  1. 什么是Code Review(转)

    Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...

  2. 什么是Code Review

    Code Review 是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节. 本文通过对Code Review的一些概念和经验的探讨,就如何进 ...

  3. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  4. Code Review(转)

    Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...

  5. Backend事后诸葛亮

    事后诸葛亮 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件想解决初学编程语言的入门困难.定义的不算太清楚,没有仔细地调查用户入门的困难之处. ...

  6. C++ Tips and Tricks

    整理了下在C++工程代码中遇到的技巧与建议. 0x00 巧用宏定义. 经常看见程序员用 enum 值,打印调试信息的时候又想打印数字对应的字符意思.见过有人写这样的代码 if(today == MON ...

  7. 分享总结:更好地CodeReview

            代码质量分享    2016_06_24_舒琴_代码质量.key    For 代码提交人     基本原则 Review时机: 对于普通bugfix或优化,CodeReview最迟要 ...

  8. Gogs:可能是比Gitlab更好的选择

    Gitlab是一个很棒的Git托管服务,几乎像GitHub一样强大. 但是,有没有能和Gitlab/Github媲美但操作更简单的项目呢?我认为 Gogs 是很好的选择. 简介 现在,GitHub已经 ...

  9. 如何使代码审查更高效【摘自InfoQ】

      代码审查者在审查代码时有非常多的东西需要关注.一个团队需要明确对于自己的项目哪些点是重要的,并不断在审查中就这些点进行检查. 人工审查代码是十分昂贵的,因此尽可能地使用自动化方式进行审查,如:代码 ...

随机推荐

  1. Elasticsearch logstash filter

    参照官方文档: https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html demo-pipeline.conf i ...

  2. ACM-ICPC 2018 焦作赛区网络预赛 I题 Save the Room

    Bob is a sorcerer. He lives in a cuboid room which has a length of AA, a width of BB and a height of ...

  3. 基于LAMP php7.1搭建owncloud云盘与ceph对象存储S3借口整合案例

    ownCloud简介 是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主要功能包括文件管理(内建文件分享).音乐.日历.联系人等等,可在PC和服务器上运行. 简单来说就是一个基于 ...

  4. GlusterFS 存储

    GlusterFS简介: 互联网四大开源分布式文件系统分别是:MooseFS.CEPH.Lustre.GusterFS. GluterFS最早由Gluster公司开发,其目的是开发一个能为客户提供全局 ...

  5. FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题

    FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题 此问题困扰我很近,终于在最近的项目调整中总结了规律并解决了. 因为之前对sdram并不熟悉,用得也不是太多,于是 ...

  6. Selenium使用方法整理

    我采用的是Python来使用selenium库,同时java也可以使用,但不如python操作起来方便.下文都会以python的操作为例子,整理我学习selenium过程中收集到的方法. 一:安装 首 ...

  7. 还不知道如何实践微服务的Java程序员,这遍文章千万不要错过!

    作者:古霜卡比 前言 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节. 要理解微服务 ...

  8. native C++ 动态调用.NET DLL

    关于这个问题找了好多地方,都只有第二种解决办法,可是我要返回一个字符串,没办法,继续找,最后还是在http://blogs.msdn.com/b/msdnforum/archive/2010/07/0 ...

  9. 使用where 过滤数据

    --本章主要内容是MySQL中使用where搜索条件进行过滤数据. where条件在from子句后面给出,如下所示: select name,price from shops where price& ...

  10. Python:日期和时间的处理模块及相关函数

    Python:日期和时间的处理模块及相关函数 Python 提供 time 模块和 calendar 模块用于格式化日期和时间. 一.时间戳 在Python中,时间戳是以秒为单位的浮点小数,它是指格林 ...