不要忽视代码审查的重要性

简介: 这是一篇译文,觉得它很不错就把它翻译了一下。原文名为 8 Tips for Great Code Reviews,这篇文章不管是对提升个人编程素养,还是协调团队间的合作都有一定的指导意义。 在学校里没有教给你的一项本领就是怎样做一个好的代码审查(CR)。

这是一篇译文,觉得它很不错就把它翻译了一下。原文名为 8 Tips for Great Code Reviews,这篇文章不管是对提升个人编程素养,还是协调团队间的合作都有一定的指导意义。

在学校里没有教给你的一项本领就是怎样做一个好的代码审查(CR)。你学习了算法、数据结构、编程语言的基础知识,但没有人会坐下来对你说:“下面是如何确保你能获得很好的反馈的方法。”

代码审查是创建优秀应用的关键过程。经过审查的代码往往质量更高,bug更少。健康的代码审查文化也提供了额外的好处:限制了巴士因子,它是培训新成员的一个很好的工具,代码审查是分享知识的好方法。

在我们深入讨论之前,有必要对这篇文章中的观点限制一下适用环境。限制条件是:

  • 你在一个信任的环境中工作,或者你和你的团队正在努力提高你的信任。
  • 你应该能够在非代码场景中交付反馈,或者在团队中交付反馈。
  • 你的团队希望生成更好的代码,并且理解完美是一个动词而不是形容词。我们明天可能会找到更好的做事方法,我们需要保持开放的心态。
  • 你的公司重视高质量的代码,并且理解事情可能不会“交付”得那么快。“交付”是用引号括起来的,因为很多时候没有经过测试和审查的代码可能根本无法工作。

既然我们已经指定了一些基本限制条件,那么让我们开始吧。

1. 我们终究还是人

要知道有人会在你要检查的代码上花时间。他们希望它是伟大的。你的同事的行为是出于好意的,没有人想要发布糟糕的代码。

保持客观很难。确保始终对代码本身进行评论,并尝试在上下文中理解所编写的代码。尽你所能的把偏见去掉,不要这样说:“你用一种使人困惑的方式写了这个方法。”,试着换一种说法,把事情说成是关于代码本身和你对它的解释:“这个方法让我有点困惑。这个变量有没有更好的名字?”

在这个例子中,我们解释我们作为读者对代码的感受,这与自身的行为或意图无关。它是关于我们和我们对代码的解释。

每一个拉请求(Pull Request)都是一个艰难的对话。试着与你的队友达成共同的理解,并一起朝着更好的代码努力。

如果你只是了解一个团队成员,并且你对拉请求(Pull Request)有关键的反馈,那么一起浏览代码。这将是开始与同事建立关系的好机会。和每位同事这样做,直到他们不再感到尴尬。

2. 自动化

如果电脑能决定并执行一条规则,就让电脑去做吧。在空格和制表符之间争论并不是对人类时间的有效利用,相反把时间花在就规则应该是什么达成一致上。这些机会可以让你看到你的团队,在低风险的情况下如何处理“不同意和承诺”。

现代的编译语言工具和语言可以开启语法检测功能,并反复使用它们。在Ruby中,有Rubocop;在JavaScript中,有eslint;在CSS中,有stylelint。找到你需要的语法检测工具,并将其插入到构建工具中。

如果你发现现有的语法检测工具动力不足,可以尝试写你自己的!

3. 每个人都是代码审查者

将所有代码审查责任都交给Shirley,咋一听来是很有诱惑力的。

虽然,在编写代码方面,Shirley是一个奇才,她总是知道什么是最好的,她了解公司制度的来龙去脉,而且她在公司工作的时间比你们团队的集体任期还要长;

然而,Shirley理解了这些事情,并不意味着她的团队中的其他人也都理解。年轻的团队成员可能会犹豫是否要在Shirley的代码评审中指出一些问题。

我发现将评审分发给团队的不同成员会产生更健康的团队动态和更好的代码。一个初级工程师在代码评审中最有力的一句话是:“我觉得这很混乱”。这些都是使代码更清晰、更简单的机会。

推广这些评论。

4. 增强可读性

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

拥抱Markdown是让代码变得更加可读。GitHub或你选择的开发工具可能有语法高亮显示功能,这对于插入一些代码片段非常有用。对于内联代码使用单回勾()或者对于代码块使用 (``)可以更好地交流思想。

熟悉标记语法,特别是在注释中编写代码时。这样做将有助于使你的评论更加具体和集中。

5. 至少留下一句积极的评论

代码审查本质上是负面的。在把代码发送之前,告诉代码的作者这个代码有什么问题,这是基本。但有些人在这这个代码上面花了时间,他们希望你能指出怎样才能做得更好。

因此,至少留下一句正面的话。让它有意义和个性化。如果了解到他们一直在努力的解决问题,那就大声喊出来,这可以简单 `` 或 “Love this.”

在每个代码评审上留下一些积极的内容,可以微妙地提醒我们,我们是在一起的。如果我们创建更好的代码,我们都会受益。

6. 提供替代方案

我常常尝试着去提供一个可替代的实现方案。对那些只学习了一门语言或框架的人更应该如此。

当要注意表达的方式。如果表述不正确,可能会让人觉得你傲慢或自私。“尽量保持客观,并讨论你所提供的备选方案的利弊。”如果做得好,这将有助于扩展每个人的技术知识。

7. 审查延迟

保持一个极快的代码审查速度非常重要的。(实现这个规则很简单:保持审查代码足够小。)

长时间的代码审查延迟会扼杀生产力和士气。如:“3天前,你被分配去审查一份xxx的任务”,这听起来很刺耳。

如果你希望减少自己的审查延迟,我建议遵循以下规则:在编写任何新代码之前审查代码。

作为一种直接处理延迟的策略,尝试在代码评审上进行配对。启动一个屏幕共享来浏览和讨论评论。对解决方案进行配对,使代码达到批准的状态。

8. 对于发件人来说:保持内容尽量小

你在代码评审中收到的反馈质量将与拉请求(Pull Request)的大小成反比。

为了最大限度地保持反馈的尖锐和建设性,要知道较小的请求会让读者更容易接受。

如果你的拉请求(Pull Requests)很小,怎么办?这时你需要有一个不同的地方来进行详细的描述。如:这个单一的拉请求(Pull Request)如何适合本周或本月的工作?我们要去哪里,这个拉请求是如何让我们到达那里的?这种对话类型的方式在表现效果方面是很好的,因为对于较小的Pull请求,你很难记住它的编写上下文。

这个概念会因语言的不同和团队的不同而不同。对于我自己来说,我试图让Pull请求总数少于300行。

结论

希望这8个技巧能帮助你和你的团队有更好的代码审查。通过改进代码审查过程,你将拥有更好的代码、更快乐的团队成员,带来更好的业务。

相关文章
|
7月前
|
存储 安全 测试技术
软件测试:确保代码质量与用户满意度的关键步骤
软件测试:确保代码质量与用户满意度的关键步骤
|
3月前
|
机器学习/深度学习 人工智能 安全
软件测试中的探索性测试:一种高效发现软件缺陷的方法
本文将深入探讨软件测试中的一种关键方法——探索性测试。探索性测试是一种动态的、探索性的软件测试方法,它依赖于测试人员的直觉和经验,通过实际操作软件来发现潜在的问题和缺陷。与传统的基于预定义用例的测试方法相比,探索性测试更加灵活,能够更全面地覆盖软件的各个方面,从而更有效地发现难以预见的错误和漏洞。
43 2
|
3月前
|
测试技术 Python
软件测试的艺术:确保质量与性能
【9月更文挑战第19天】在数字化时代,软件已成为我们生活的一部分。然而,随着软件复杂性的增加,如何确保其质量和性能成为了一个挑战。本文将探讨软件测试的重要性,介绍常见的测试类型和策略,并提供实用的代码示例来帮助读者更好地理解和应用这些测试方法。无论你是开发人员、测试工程师还是项目管理者,这篇文章都将为你提供有价值的见解和技巧。
|
4月前
|
监控 测试技术 UED
软件测试的艺术:确保质量的五个关键实践
【8月更文挑战第28天】 在软件开发领域,测试不仅是发现错误的工具,更是确保产品稳定性、性能和用户满意度的基石。本文将深入探讨五个关键的软件测试实践,包括单元测试、集成测试、系统测试、压力测试和回归测试,以及它们如何共同构建起一个坚实的质量保证体系。通过这些实践,我们不仅能够提升软件的质量,还能更好地预测和应对潜在的风险,从而为最终用户提供更加稳定可靠的软件产品。
62 5
|
4月前
|
机器学习/深度学习 敏捷开发 人工智能
软件测试的艺术:确保质量的哲学与实践
【8月更文挑战第21天】在软件工程的世界中,测试不仅仅是一项技术活动,它更像是一门艺术和哲学。本文旨在探索软件测试的核心价值和基本原则,强调其在软件开发生命周期中的重要性。通过分析测试的不同阶段和策略,我们揭示了如何通过细致的测试规划、创造性的测试设计、以及持续的改进过程来提升软件质量和用户体验。文章将展示如何在不断变化的技术环境中保持测试活动的相关性和有效性,同时也会讨论测试团队如何适应敏捷开发模式,以及如何利用自动化工具来提高测试效率。最终,我们将探讨测试的未来趋势,包括人工智能和机器学习在测试中的应用前景。
|
4月前
|
监控 测试技术
软件测试中的风险管理:如何避免潜在缺陷
【8月更文挑战第5天】在软件开发的生命周期中,测试阶段扮演着至关重要的角色。本文将深入探讨软件测试中的风险管理,包括风险识别、评估和缓解策略。我们将通过具体案例分析,揭示如何在早期阶段预防和减少潜在的软件缺陷,以及如何通过有效的测试计划和执行来保障产品质量。文章旨在为读者提供一套系统的风险管理框架,帮助他们在软件开发过程中识别和应对各种测试风险。
210 3
|
4月前
|
敏捷开发 安全 测试技术
软件测试的艺术:确保质量的不二法门
【8月更文挑战第8天】在软件开发的海洋中,测试是指引航船安全前行的灯塔。本文将深入探索软件测试的核心价值和实施策略,揭示其对保障产品质量的重要性。通过分析测试流程、测试人员的角色以及面临的挑战,我们将展现如何在不断变化的技术环境中保持测试活动的有效性和前瞻性。
37 0
|
7月前
|
安全 测试技术 持续交付
深入探索白盒测试:提升软件质量的关键步骤
【4月更文挑战第9天】在软件开发的生命周期中,确保代码的质量和性能至关重要。白盒测试,作为软件测试的一个核心分支,提供了一种通过检查内部结构、设计和逻辑来验证程序正确性的方法。本文将深入探讨白盒测试的原理、方法和最佳实践,旨在帮助开发者和测试工程师提高测试效率,从而确保软件产品的可靠性与稳定性。通过对不同白盒测试技术的比较分析,我们将揭示如何更有效地利用这些技术来发现和修复潜在的缺陷。
|
7月前
|
安全 测试技术
【软件设计师备考 专题 】软件测试的原则与方法:确保软件质量的关键步骤
【软件设计师备考 专题 】软件测试的原则与方法:确保软件质量的关键步骤
143 0
|
7月前
|
SQL 缓存 开发工具
CodeReview对于一个企业的重要性
odeReview 是开发过程不可或缺的重要一环,如果将代码发布比作一个工厂的流水线,那么 CodeReview 就是流水线接近于终点的质检员,他要担负着对产品质量的保障工作,将“缺陷”从众多的“产品”中挑出,反向推动“生产方”改进生产质量。
90 1