Google 鼓励的 13 条代码审查标准,建议收藏!

简介: 以下为译文:在本文中,我们将简要介绍13条代码审查标准,希望能够通过这些标准极大地帮助改善软件的质量,同时让开发人员保持心情愉悦。

以下为译文:

在本文中,我们将简要介绍13条代码审查标准,希望能够通过这些标准极大地帮助改善软件的质量,同时让开发人员保持心情愉悦。

代码审查是开发过程中的一个环节,顾名思义,代码审查需要一位或多位开发人员审查另一位开发人员(即代码的作者)编写的代码,以确保:

  • 代码没有任何错误,没有bug,也没有问题;
  • 代码符合质量与样式指南的要求和标准;
  • 代码完成了所有预期功能;
  • 合并代码后,代码库仍然能够正常运行,且达到更好的状态。

这就是为什么代码审查是软件开发的重要环节的原因。代码审查者担当着把关者的职责,负责决定这些代码是否能够成为代码库的一部分并进入生产环境。

Google以其卓越的技术而闻名世界,他们拥有高效的代码审查标准,这些标准突出了审查代码时需要牢记的一些重点

在Google,“代码审查的主要目的是确保Google代码库内整体的代码运行状况能够不断提升。” —— Google工程实践文档

以下是审查代码时你需要牢记的一些重点。

代码审查标准:

这些代码能够提升系统整体的运行状况

每次代码变更(拉取请求)都能够提升系统整体的运行状况。重点在于,即便是很小的改进,合并代码后都会提升软件或代码库的运行状况。

快速审查代码,并给出积极地响应和反馈

首先也是最重要的一点,不可延误代码的合并。世上没有完美的代码。如果代码可以提升系统的整体运行状况,则应该立即交付这些代码。

“关键在于,世上没有完美的代码,只有更好的代码。” —— Google工程实践文档

如果手头没有紧急任务,那么请在代码提交上来后立即进行审查。响应拉取请求的时间最长不得超过一个工作日。一天之内,应针对一次拉取请求完成多轮的部分或完整的代码审查。

在代码审查的过程中开展教育和启发

在代码审查的过程中,应尽可能通过共享知识和经验提供指导。

审查代码应遵循标准

请始终牢记,样式指南、编程标准以及相关的文档应该作为代码审查的绝对权威。例如,制表符与空格的使用应保持一致,此时你可以引用编程约定。

如果你选用的是Java,那么以下文章可能会有所帮助,文中总结了大型科技公司Java编程的最佳实践:《Java编程最佳实践摘要》(https://rhamedy.medium.com/a-short-summary-of-java-coding-best-practices-31283d0167d3

解决代码审查冲突

解决代码审查冲突时,应遵循样式指南以及编程标准中商定的最佳实践,并征求其他拥有更多产品领域知识和经验的人的建议。

图片

如果你的意见是可选或不怎么重要的,请在注释中说明,然后由作者来决定是解决还是略过。

作为代码审查者,在没有样式指南或编程标准的情况下,你至少可以建议此次代码变更与其余代码库保持一致。

演示UI变更是代码审查的一部分

如果代码变更涉及用户界面变化,则除了代码审查外,还需要提供演示,确保界面符合预期且与界面设计一致。

对于前端代码变更,你需要进行演示,或确保代码变更包括必要的UI自动化测试,以验证添加或更新的功能。

确保代码审查中包含了所有测试

除非遇到紧急情况,否则拉取请求应包含所有必要的测试,例如单元测试、集成测试以及端到端测试等。

这里所说的紧急情况指的是,某个需要尽快修复的bug或安全漏洞,而测试可以等到以后再添加。在这种情况下,请确保创建了适当的票证/问题,并确保有人负责在完成热修复或部署后立即完成测试。

图片

我们绝对不可以跳过测试。如果时间有限,某些目标有无法实现的风险,那么解决方案不是跳过测试,而是限定可交付成果的范围。

不要为了代码审查打断手头的工作

如果你正在专心致志地工作,那么请不要打断自己,因为你需要花费很长时间才能重新投入工作。换句话说,打断专心工作的开发人员所付出的代价远远超过了让开发人员等待代码审查。你可以在休息(午餐或咖啡等)过后,进行代码审查。

图片

大多数时候,整个代码审查以及代码的合并无法在一天内完成。重要的是迅速给作者一些反馈。例如,虽然可能无法完成完整的审查,但你可以快速指出一些有待探讨的地方。这可以极大地降低代码审查期间的挫败感。

审查所有代码,不要做任何假设

你需要审查提交上来的每一行代码。不要对人工编写的类和方法做任何假设,而且应该确保你理解代码在做什么。

图片

确保你理解正在审核的代码。如果不理解,则请作者澄清或提供代码演示和解释。如果你不具备审核部分代码的资格,则请其他有资格的开发人员代为审查。

审查代码时需要保持大局观

从更广阔的视野来看待代码变更会更有帮助。例如,某个文件被修改,并添加了4行新代码。请不要只看这4行代码,你应该考虑审查整个文件,并检查新添加的内容。它们是否会降低现有代码的质量?它们是否会导致现有功能成为重构的候选对象?

如果不在函数/方法或类的背景下审查添加的代码,则随着时间的流逝,你将会得到一个面临无法维护、纠缠不清、不易于测试等问题的类,而且这个类很难扩展或重构。

请记住,即便是微不足道的改进,随着时间的推移,也可能导致产品出现缺陷,同样,即便是轻微的代码降级或技术负债也可能在日积月累下导致产品难以维护和扩展。

在代码审查期间认同和鼓励出色的工作

如果看到出色的代码变更,请别忘了大力表扬和鼓励作者。代码审查的目的不仅仅是发现错误,而且还应该鼓励和指导开发人员出色的工作。

在代码审查期间应保持谨慎、尊重、友善和思路清晰

在代码审查期间,你应该保持友善、思路清晰、有礼貌和尊重别人,这一点至关重要,同时也要给予作者清晰的反馈和积极的帮助。在审查代码时,你需要做到对事不对人,即对代码做出评论,而非开发人员。

详细解释代码审查的意见,并注意尺度

每当代码审查意见提出替代方案或指出某些问题时,重要的是你需要解释其中的原因,并根据个人的知识和经验提供示例,以帮助开发人员理解为何你的建议能够提升代码质量。在建议修改或变更代码时,你需要在如何指导作者修改代码方面找到适当的平衡。例如,我更喜欢指导、解释、提示或建议,而不是整个解决方案。

相关文章
|
安全 网络安全 数据安全/隐私保护
网站为何会显示“不安全”?又该怎么办呢?
这篇文章概述了导致网站显示为“不安全”的常见原因,并提供了相应的解释和建议。了解这些信息对于网站管理员和普通用户都是重要的,因为它有助于提高网络安全意识和保护个人信息不被泄露。
4840 0
如何将Markdown文章轻松地搬运到微信公众号并完美地呈现代码内容
相信有很多童鞋跟我一样,热衷于用Markdown来编写文章。由于其简单的语法和清晰的渲染效果,受到广大码农朋友们的推崇。但是,当我们想维护起自己的公众号时,公众号编辑器往往让我们费劲了脑汁。本人尝试了各种工具,比如:秀米一些在线提供多种不同样式的编辑器。虽然这些编辑器都能够完成编辑任务,但是效果并不理想。与我们所追求的简洁、清晰风格总是格格不入,尤其是对于代码的展示非常的不友好。所以,这里给大家推荐一个本站的在线工具,可以帮助大家快速地把Markdown文章转换成微信公众号支持的漂亮格式。
837 0
如何将Markdown文章轻松地搬运到微信公众号并完美地呈现代码内容
|
6月前
|
人工智能 缓存 运维
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
本文介绍联调造数场景下的AI应用演进:从单Agent模式到多Agent协同的架构升级。针对复杂指令执行不准、响应慢等问题,通过意图识别、工具引擎、推理执行等多Agent分工协作,结合工程化手段提升准确性与效率,并分享了关键设计思路与实践心得。
1007 20
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
|
机器学习/深度学习 人工智能 API
解锁HarmonyOS新姿势:金融风控中的AI类目标签实战
在金融行业中,风险控制是保障稳定与安全的核心。随着业务复杂化和数字化加深,传统风控手段难以应对新挑战。AI类目标签技术凭借强大的数据处理能力,为金融风控带来全新解决方案。本文探讨基于HarmonyOS NEXT API 12及以上版本,如何运用AI类目标签技术构建高效金融风控体系,助力开发者在鸿蒙生态中创新应用。通过精准风险识别、实时监测预警和优化信用评估,提升风控效果;结合鸿蒙系统的分布式软总线和隐私保护优势,实现无缝协同与数据安全。具体应用场景如信用卡欺诈防控和贷款审批风险评估,展示了技术的实际效益。
406 0
Java 异常处理下篇:11 个异常处理最佳实践
本文深入探讨了 Java 异常处理的最佳实践,包括早抛出晚捕获、只捕获可处理的异常、不要忽略捕获的异常、抛出具体检查性异常、正确包装自定义异常、记录或抛出异常但不同时执行、避免在 `finally` 块中抛出异常、避免使用异常进行流程控制、使用模板方法处理重复的 `try-catch`、尽量只抛出与方法相关的异常以及异常处理后清理资源。通过遵循这些实践,可以提高代码的健壮性和可维护性。
393 4
|
编解码 人工智能 并行计算
阿里妈妈技术开源FLUX图像修复&蒸馏加速模型
本文介绍了阿里妈妈技术团队基于FLUX开发的Controlnet修复模型和蒸馏加速模型,填补了社区空白并提升了FLUX的实用性和效率。
|
关系型数据库 MySQL Linux
linux mysql 自动安装脚本
linux mysql 自动安装脚本
266 0
|
人工智能 NoSQL 机器人
MongoDB Atlas与YoMio.AI近乎完美适配:推理更快速、查询更灵活、场景更丰富
随着MongoDB的新发布和革新,YoMio.AI的“闪电式发展”值得期待。
|
达摩院 供应链 调度
【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】
本文探讨了使用阿里巴巴达摩院的MindOpt工具解决FlowShop流水线作业排班的数学规划问题。FlowShop涉及到多台机器、多个工序和多个作业,目标是通过优化排班最小化总生产耗时。MindOpt通过数学规划方法,如线性或混合整数线性规划,将问题建模并转化为代码,利用云建模平台MindOpt Studio和MindOpt APL建模语言进行求解。案例中详细介绍了参数定义、变量解析、约束设置和目标函数,展示了如何通过MindOpt进行建模和求解,以达到最优化的生产调度。此外,文章还提供了代码示例和结果解析,帮助读者理解如何实际应用MindOpt解决这类问题。
|
小程序 数据安全/隐私保护
微信小程序:wx.login和getPhonenumber获取手机号解密失败问题
微信小程序:wx.login和getPhonenumber获取手机号解密失败问题
1601 0

热门文章

最新文章