8 个 Tips 让你更好的进行 Code Review
摘要: Code Review 可以提高代码质量。
- 原文:Elevenbeans
- 作者:前端小智
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 文化也提供了额外的好处:
- Ta 可以对于 bus factor (和 key person risk 相近,意为少数关键的技术人员带队,一旦人才流失对团队是很大打击,团队抗风险能力弱)进行有效限制;
- Ta 是培训新成员的一个很好的工具;
- 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的更多相关文章
- 什么是Code Review(转)
Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...
- 什么是Code Review
Code Review 是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节. 本文通过对Code Review的一些概念和经验的探讨,就如何进 ...
- 如何在python脚本开发做code review
在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...
- Code Review(转)
Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...
- Backend事后诸葛亮
事后诸葛亮 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件想解决初学编程语言的入门困难.定义的不算太清楚,没有仔细地调查用户入门的困难之处. ...
- C++ Tips and Tricks
整理了下在C++工程代码中遇到的技巧与建议. 0x00 巧用宏定义. 经常看见程序员用 enum 值,打印调试信息的时候又想打印数字对应的字符意思.见过有人写这样的代码 if(today == MON ...
- 分享总结:更好地CodeReview
代码质量分享 2016_06_24_舒琴_代码质量.key For 代码提交人 基本原则 Review时机: 对于普通bugfix或优化,CodeReview最迟要 ...
- Gogs:可能是比Gitlab更好的选择
Gitlab是一个很棒的Git托管服务,几乎像GitHub一样强大. 但是,有没有能和Gitlab/Github媲美但操作更简单的项目呢?我认为 Gogs 是很好的选择. 简介 现在,GitHub已经 ...
- 如何使代码审查更高效【摘自InfoQ】
代码审查者在审查代码时有非常多的东西需要关注.一个团队需要明确对于自己的项目哪些点是重要的,并不断在审查中就这些点进行检查. 人工审查代码是十分昂贵的,因此尽可能地使用自动化方式进行审查,如:代码 ...
随机推荐
- 小白学 Python 爬虫(17):Requests 基础使用
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- Xcode9 gitHub管理代码
https://www.raywenderlich.com/153084/use-git-source-control-xcode-9 首先上一个参考链接 在xcode9 创建工程时勾选git管理.利 ...
- linux google protobuf
说明: protobuf已经全面迁移到github,地址:https://github.com/google/protobuf 直接下载2.6.1版本:https://github.com/googl ...
- windows安装apache+mysql+php
文件打包下载,包括apache.mysql.php,地址如下: 链接: https://pan.baidu.com/s/1Mcm4OxJV45UWsktBycw7mQ 密码: dwy6 安装apach ...
- 第一个boot项目
一.打开网址https://start.spring.io/ 进去springboot官网,根据自己实际情况选择所需组件,点击生成. 二.导入maven项目,但是pom.xml报Line1未知错误,检 ...
- 开局一张图,学一学项目管理神器Maven!
Maven强大的Java工程构建工具,做Java开发时少了跟Maven打交道,之前在知乎上看到有人提问:"学Java开发需不需要学习Maven?",个人认为是必需要学的,这和工欲善 ...
- 建议3:正确处理Javascript特殊值---(1)正确使用NaN和Infinity
NaN时IEEE 754中定义的一个特殊的数量值.他不表示一个数字,尽管下面的表达式返回的是true typeof(NaN) === 'number' //true 该值可能会在试图将非数字形式的字符 ...
- Maven使用教程二:nexus私服搭建及使用
nexus安装 从nexus官网 下载最新的安装包 1.打开命令行,切换到nexus-3.2.1-01/bin目录下,回车.例:C:\Nexus\nexus-3.2.1-01\bin 2.输入:nex ...
- Logstash组件详解(input、codec、filter、output)
logstash组件详解 logstash的概念及特点. 概念:logstash是一个数据采集.加工处理以及传输(输出)的工具. 特点: - 所有类型的数据集中处理 - 不同模式和格式数据的正常化 - ...
- 添加junit和spring-test还是用不了@Test和@RunWith(SpringJUnit4ClassRunner.class)注解
pom.xml依赖如下 <!-- spring 单元测试组件包 --> <dependency> <groupId>org.springframework</ ...