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

简介: 这是一篇译文,觉得它很不错就把它翻译了一下。原文名为 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个技巧能帮助你和你的团队有更好的代码审查。通过改进代码审查过程,你将拥有更好的代码、更快乐的团队成员,带来更好的业务。

相关文章
|
3月前
|
测试技术 UED
软件测试中的心理学:提升效率与质量的非技术因素
【8月更文挑战第9天】 在追求代码质量和系统稳定性的技术赛道上,软件测试常被视为一项严格的技术活动。然而,隐藏在测试用例、自动化脚本和缺陷报告背后的是一群具有丰富情感和心理活动的测试工程师。本文将探讨影响软件测试效果的心理学因素,揭示非技术要素如何显著提升测试流程的效率和最终产品的质量。通过理解测试人员的心理动机、压力应对机制以及团队动力学,我们可以为测试团队打造一个更加健康、高效的工作环境,并激发他们的潜力。
|
3月前
|
监控 测试技术
软件测试中的风险管理:如何避免潜在缺陷
【8月更文挑战第5天】在软件开发的生命周期中,测试阶段扮演着至关重要的角色。本文将深入探讨软件测试中的风险管理,包括风险识别、评估和缓解策略。我们将通过具体案例分析,揭示如何在早期阶段预防和减少潜在的软件缺陷,以及如何通过有效的测试计划和执行来保障产品质量。文章旨在为读者提供一套系统的风险管理框架,帮助他们在软件开发过程中识别和应对各种测试风险。
151 3
|
3月前
|
大数据 测试技术
自动化测试在软件开发中的重要性
【8月更文挑战第6天】自动化测试作为软件开发过程中不可或缺的一环,能够显著提高软件质量,缩短交付周期,降低整体成本。随着技术的不断发展,自动化测试在各类软件项目中的应用也必将越来越广泛和深入。合理规划和实施自动化测试,将成为软件开发团队提升竞争力的关键所在。
|
3月前
|
测试技术
软件测试中的心理学:如何优化测试流程
【8月更文挑战第6天】本文深入探讨了软件测试过程中的心理学因素,揭示了测试人员的心理动态对测试效率和质量的影响。通过分析测试人员的压力源、动机以及团队间的沟通问题,提出了一系列改善策略,如建立积极的反馈机制、提供持续的职业培训和优化工作环境等,旨在提升软件测试的整体效能。文章最后提出一个开放性问题,邀请读者思考如何在不断变化的技术环境中维持测试团队的心理健康和动力。
|
3月前
|
测试技术 持续交付
探索式测试:软件质量的守护者
在软件开发生命周期中,确保产品质量是至关重要的一环。探索式测试,作为一种动态的软件测试方法,强调测试人员的个人技能和经验的运用,以发现那些可能被传统测试方法忽略的问题。本文将介绍探索式测试的核心理念、实施步骤以及它在现代软件开发中的不可替代性,同时通过具体案例分析,展现其在实际工作中的应用价值和对提升软件质量的重大贡献。
|
6月前
|
安全 Python
代码审查:保障质量之道
代码审查:保障质量之道
|
6月前
|
机器学习/深度学习 人工智能 大数据
自动化测试在软件开发中的重要性与应用
自动化测试是软件开发过程中不可或缺的一环,它通过编写脚本和工具来执行测试用例,提高了软件测试的效率和准确性。本文将探讨自动化测试在软件开发中的重要性、应用场景以及未来发展方向。
50 0
|
6月前
|
敏捷开发 测试技术 持续交付
深入探究软件自动化测试中的挑战与对策
【4月更文挑战第2天】 在软件开发的生命周期中,测试环节是保障产品质量的重要步骤。随着敏捷开发和持续集成的流行,自动化测试成为提升测试效率和质量的关键手段。然而,实施自动化测试并非没有挑战。本文将探讨自动化测试过程中常见的问题,包括测试用例设计、维护成本、框架选择、以及跨平台兼容性等,并针对每一挑战提出相应的解决策略。通过实际案例分析,本文旨在为软件测试工程师提供实用的自动化测试优化指南。
|
6月前
|
Java 测试技术 持续交付
自动化测试在软件开发中的重要性和应用
随着软件开发的迅速发展,自动化测试技术在软件开发生命周期中发挥着越来越重要的作用。本文将探讨自动化测试在软件开发中的重要性和应用,并介绍了一些常见的自动化测试工具和最佳实践。
|
6月前
|
SQL 缓存 开发工具
CodeReview对于一个企业的重要性
odeReview 是开发过程不可或缺的重要一环,如果将代码发布比作一个工厂的流水线,那么 CodeReview 就是流水线接近于终点的质检员,他要担负着对产品质量的保障工作,将“缺陷”从众多的“产品”中挑出,反向推动“生产方”改进生产质量。
79 1