谷歌开源代码评审规范:好坏代码应该这样来判断

2023-11-18

谷歌开源了一套代码评审(Code Review)规范,它是谷歌一套通用的工程实战指南,几乎涵盖了所有编程语言与各种类型的项目,这个规范代表了谷歌长期发展以来最佳实战经验的集合,谷歌表示希望开源项目或其他组织能够从这套规范中受益。

 

代码评审,也称代码复查,如果一个团队正在使用任务分支工作流,那么在所有代码编写完成并通过自动化测试之后,在代码合并之前,就会启动代码评审。通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平,代码评审的所有工具和过程都是为了这个目的而构建的。代码评审对于敏捷团队来说的作用如下:

  • 代码评审共享知识

  • 通过代码评审可以更好的进行工作评估

  • 代码评审能让你享受休假

  • 通过代码评审指导新工程师

既然代码评审要进行众多的检查,那么找一个优秀的评审者就非常重要了。一般对于变更列表的不同部分,都会有不同的评审者进行细致的审查。当然如果是结对编程,且你的队友能进行高质量的代码评审,那么这样写的代码一般可以视为已经过评审了。此外,我们也可以进行面对面的评审,评审者会问开发者一些问题。

根据谷歌的项目描述,代码审核规范为两套独立文档组成,代表了两方面内容的最佳实践:

  1. 代码评审者的指南
  2. CL 作者指南

在其中一些文档中使用了一些术语,如下:

  • CL:表示“变更列表(changelist)”,意思是已经提交到版本控制或正在进行代码检查的一个独立的更改。其他组织通常称为“改变”或“补丁”
  • LGTM:意思是“在我看来不错(Looks Good to Me)”,这是代码审阅者在批准 CL 时说的

接下来我们来看看两份文档分别的主要内容是什么:

1.代码评审者的指南——如何进行代码评审

代码评审者指南本来是一个完整的文档,但作者将其分为了  6  部分,读者可根据需要阅读。

2.CL 作者指南——CL 作者批准代码的评审指南

CL 制定者指南包括一些进行代码评审的开发人员的最佳经验,这些经验能够帮助你更快、更高质量地完成评审。

在谷歌看来,代码审核的目的是确保谷歌代码库的整体代码健康程度。谷歌将以下规则作为代码评审的标准:

一般来说,一旦 CL 能提升整体代码的健康程度,那么即使 CL 不完善,评审者同样也应该倾向于批准该列表。这是所有代码评审指南中的高级原则。它也会有一些限制,例如,如果 CL 添加了一些评审者不需要的特性,那么即使代码做了不错的设计,评审者也应该不予通过。

没有所谓的“完美”代码,只有更好的代码。评审人员不应要求作者在批准前对 CL 的每一小部分过分完美。相反,评审者应该权衡向前继续开发的需求和修改建议的重要性。评审者要求的是持续性地改进,而不是追求完美的代码。CL 作为一个整体,如果它能提升系统的可维护性、可读性和可理解性,那么就不要因为它还不完美而推迟数天或数周更新。

评审者应该经常留下一些评论,以表达能导致更好性能的做法。如果这些做法并不是非常重要的,那么需要加上前缀「Nit:」,从而令代码作者知道这些内容是可以忽略的。

评审指导

代码评审有一个很重要的功能,即教开发者一些开发经验,不论是语言、框架还是一般软件设计准则。留一些评论总会帮助开发者学习一些新的知识,共享知识也是改善系统代码健康状态的重要部分。当然,如果评审者的评论仅仅只是教育性的,且对于标准要求不那么重要,那么还是要加上前缀「Nit:」的。

评审准则

技术事实和数据要优先于观点与个人风格。

在代码风格方面,谷歌的代码风格指南是最权威的参考资料。任何不在风格指南中的代码习惯,都属于个人风格,但我们应该保证基本的风格和谷歌风格指南是一致的。

软件设计方面几乎不会有纯粹的风格问题,或者纯粹个人的习惯问题。很多风格问题都基于一些基本准测,它们并不是简单地由个人观点决定的。此外,如果代码作者通过数据或基本工程原则证明了几种方法同样有效,那么评审者应该接受作者的风格。否则,偏好的选择还是取决于软件设计的标准原则。

如果没有其它适用规则,那么评审者可以要求作者的偏好与当前代码库保持一致,同时不对整体的代码健康水平产生影响。

解决冲突

在代码评审中,如果发生了任何冲突,第一步应该是开发者和评审者基于本项目的 CL 指南达成共识。当达成共识非常困难时,开发者与评审者应该面对面地交流,而不只是通过审查中的评论来交流。如果开会讨论还解决不了,那么就要扩大会议了,我们可以通过与代码维护人员、工程经理等开发者的交流,达成最终的共识。

如果想要深入了解谷歌的这套代码审核规范,可查看该项目。地址如下:

https://github.com/google/eng-practices

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷歌开源代码评审规范:好坏代码应该这样来判断 的相关文章

  • Windows下修改VSCode工作区存储目录workspaceStorage

    VSCode会将每个工作区的一些配置 扩展 缓存等保存在一个默认的目录 在Windows下 此默认目录为 AppData Code User workspaceStorage 当存在多个工作空间或扩展时 需要使用大量的磁盘空间 而VSCod
  • 3个超好用的图片压缩软件,超高压缩比,保持图片清晰度

    分享3个好用的图片压缩工具 不仅可以大大压缩图片大小 还能保持图片分辨率 压缩后的图片画质也能保持清晰 1 一键抠图 一个智能抠图在线网站 支持人像抠图 物品抠图和证件照之外 除此之外 还有图片压缩 图片格式转换 图片编辑 照片修复等功能
  • 解决 kali换源之后签名无效

    报错问题 apt get update 报错 更新扩展知识 kali更新源 终端输入 vi etc apt sources list 中科大 deb http mirrors ustc edu cn kali kali rolling ma
  • C++ STL概述

    STL就是封装好的一些数据结构以及一些算法 C STL 标准模板库 是一套功能强大的 C 模板类 提供了通用的模板类和函数 这些模板类和函数可以实现多种流行和常用的算法和数据结构 如向量 链表 队列 栈 Standard Template
  • flink大数据处理流式计算详解

    flink大数据处理 文章目录 flink大数据处理 二 WebUI可视化界面 测试用 三 Flink部署 3 1 JobManager 3 2 TaskManager 3 3 并行度的调整配置 3 4 区分 TaskSolt和parall
  • App\led\led.h(6): warning: #1295-D: Deprecated declaration LED_Init - give arg types

    如图所示操作即可 如图所示操作即可 如图所示操作即可
  • 解决-画图程序无法读取-无效的位图文件

    辛苦画的图 今天一打开就看到这个 心情是呵呵的 搜了一下大概是图太大了 右击win10自带的图片 给裁剪小了就OK了
  • 第二届网刃杯--部分Re

    1 freestyle ida中分析有个两个fun atoi 将字符转换为整数 得到答案为3327105 MD5加密提交 2 Re function 没有提供密码 但是在右边看到熟悉的89 50 利用winhex保存出来 得到解压密码 解压
  • node版本管理工具nvm

    1 标题卸载nvm和node js 系统变量中删除nvm添加变量 NVM HOME和NVM SYMLINK 环境变量中 path 删除nvm自动添加的变量 Path NVM HOME NVM SYMLINK 删除自身安装node环境 参考图
  • Flutter踩坑笔记一——环境搭建的坑

    Flutter的环境搭建其实还是很简单的 当你把AndroidStudio升级安装3 5版本的时候 他已经默认为你安装了Dart和Flutter插件 可见Google对flutter的重视 所以也省了我们不少事儿 首先 打开 官方文档 获取
  • 为什么计算机中的整数要用补码表示?补码表示有什么好处?

    为什么计算机中的整数要用补码表示 补码表示有什么好处 在计算机中 补码可谓是十分神奇而又重要的存在 我们知道整数在计算机内部的机器数一般都是补码表示的 这里给出几个这样表示的好处 符号位可以和数值为一起参加运算 比如俩个负数相加 只要结果在
  • 不能安装64位office提示已安装32位的

    问题描述 安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装 但实际上之前安装的32位的office办公软件已经卸载了 问题现象截图如下 解决办法 从问题描述中 我们其实已经能够看出问题原因了 类似
  • Blender51个基本操作

    一 选择操作 编辑模式 1 右键 选择 2 A 全选 3 B 左键 矩形选择 4 B 中键点击 矩形移除选择 5 C 左键 圆形选择 6 C 中键点击 圆形移除选择 7 滚轮滑动 圆形选择框大小 8 Ctrl 左键 扇形选择 9 Ctrl
  • 解决Chrome浏览器左键双击没反应,无法启动

    打开任务管理器Ctrl aLT DEL 或是在任务栏图标空白处右击 解决Chrome浏览器点击没反应 2 然后 在进程列中 点击表头排序 之后找到chrome exe进程 解决Chrome浏览器点击没反应 3 右击选择后 结束进程 解决Ch
  • 鼠标右键添加git

    1 打开注册表 win R 输入regedit 2 找到HKEY CLASSES ROOT Directory Background目录 3 查看是否有shell这个目录 如果没有就添加 4 在shell目录下添加 项 鼠标右键点击新建 项
  • 远程控制 ToDesk

    ToDesk 远程控制软件 支持跨平台的远程控制 有且不限于PC对PC iOS Android也可以直接控制 最近发现的一个好用的远程连接软件 也是近些年非常火热的 远程控制软件 ToDesk 虽然 QQ 和 向日葵 也都可以满足我们实现的
  • fl studio2024水果21.3免费汉化版

    fl studio2024全称Fruity Loops Studio2024 这款软件也被人们亲切的称之为水果 它是一款功能强大的音乐创作编辑软件 拥有全功能的录音室 大混音盘以及先进的音乐制作工具 用户通过使用该软件 就可以轻松制作出自己
  • FAM amine, 6-isomer,1313393-44-0,含有纯6-异构体的荧光团,6-FAM NH2

    产品名称 FAM amine 6 isomer 6 FAM NH2 中文名称 6 羧基荧光素 氨基 CAS 1313393 44 0 分子式 C27H26N2O6 分子量 474 51 纯度 95 结构式 产品描述 荧光素衍生物具有胺基 含
  • 公抓抓:批量获取企业工商信息的办法

    网站产生数据的作用 企业公示系统的数据 目前网络上每天都有海量数据诞生 这些数据蕴含着巨大的价值 很多时候企业和政府都需要大量的企业数据用于自身的运营 分析等 这些时候往往需要全面的数据才能得出更加客观的结论 比如金融机构在进行业务合作时
  • 液晶偏振光栅

    1 偏振 光是横波 在垂直于光的传播方向的平面内光波振动 即E矢量振动 各方向振幅都相等的光为自然光 只在某一方向有光振动的光称为线偏振光 各方向光振动都有 但振幅不同的光叫部分偏振光 螺旋着振动的光称圆偏振光 分旋和右旋 2 庞加莱球表示

随机推荐

  • 薅羊毛利器——青龙面板+ndjdc搭建脚本运行环境

    青龙面板 nvjdc 青龙面板是一个国人开发的 自持脚本运行的工具 官网是这么描述的 支持python3 javaScript shell typescript 的定时任务管理面板 我们这里看中是它可以定时执行javaScript脚本 那么
  • Kali Linux 2016 Metasploit连接postgresql数据库

    kali linux 2016版本中metasploit不能自动连接postgresql数据库 出现postgresql selected no connection 解决方案如下 输入命令 msfdb 输入命令 msfdb init 现在
  • 综合能源系统(10)——综合能源系统运行管控平台技术综合能源系统交易机制、商业模式

    综合能源系统关键技术与典型案例 何泽家 李德智主编 1 我国能源市场分析 我国是世界上最大的能源生产国与能源消费国 以化石能源为主体的能源消费结构使我们面临能源短缺 环境污染和气候变化等严峻挑战 能源结构转型迫在眉睫 我国能源转型向侧重于以
  • 深聊性能测试,从入门到放弃之:我只做了这几点,公司的架构师也对我刮目相看

    1 引言 2 执行步骤 2 1 测试确认 2 2 通过标准 2 3 测试设计 2 4 数据准备 2 5 处理问题 3 总结 1 引言 接着上一篇 深聊性能测试 从入门到放弃之 性能测试如何做 这篇我们看看 到底做到那几点 架构师也对我刮目相
  • python如何输入一个整数逆序输出_「每日一练」巧用Python识别输入的是几位数

    Python对于数字的处理能力是很强大的 那么你能让Python瞬间知道输入的是个几位数 并且逆序打印出所有的数字吗 往下看 就是这么简单 案例 识别输入的是几位数 并且逆序打印出所有的数字 先上代码 运行效果 题目详述 程序分析 要实现一
  • 数据结构与算法:KMP模式匹配算

    KMP模式匹配算法原理 如果主串S abcdefgab 其实还可以更长一些 我们就省略掉只保留前9位 我们要匹配的T abcdex 那么如果用BF算法的话 前5个字母 两个串完全相等 直到第6个字母 f 与 x 不等 如图5 7 1的 所示
  • VTK可视化工具库:编译与添加模块

    VTK 可视化工具库 一 编译 VTK使用CMake作为项目管理工具 在源代码根目录下有CMakeLists txt文件 1 编译过程 运行CMakeGUI 选择源代码目录和编译目录 不要使用相同目录 依次点击configure gener
  • 【第十届泰迪杯B题电力负荷预测代码】

    第十届泰迪杯B题电力负荷预测源代码及可视化数据图 包括全部问题的代码 现在的数据分析是根据官网暂时发布的数据进行的分析 后续会继续更新代码 import matplotlib pyplot as plt import seaborn as
  • 音乐人解密:究竟是如何一步一步成为音乐人的?

    音乐人解密 究竟是如何一步一步成为音乐人的 音乐是人类伟大的产物 近些年来越来越多的人都开始尝试学习音乐 成为一名音乐人 而艺术高考等途径也为许多想要学习音乐 成为职业歌手或者编曲师的人群提供了途径 然而想要成为一名合格的音乐人并不是那么容
  • 烧录的HEX文件大于flash存储空间问题

    一 背景 在用一款芯片NRF52832做项目 发现使用Keil编译后的文件大小达到了1M 但是片内flash资源只有512K 结果程序可以正常通过J link烧写 且运行正常 芯片资源如下 nRF52832 是 32 位 ARM Corte
  • A Survey on Metaverse: the State-of-the-art,Technologies, Applications, and Challenges

    本文是对 A Survey on Metaverse the State of the art Technologies Applications and Challenges 的翻译 元宇宙综述 现状 技术 应用和挑战 摘要 1 引言 2
  • vue生命周期mounted和activated使用、踩坑

    activated 说到activated不得不提到keep alive 你切换出去又切出来会调用到它 你可以理解为生命周期钩子函数 用法也一样 mounted 指的是实例被挂载后调用 如果没有keep alive每次切回来该组件都会触发一
  • 理解Spring的AOP和Ioc/DI就这么简单

    一 什么叫Ioc DI Ioc Inversion of Control 控制反转 DI Dependency Injection 依赖注入 其实这两个概念本质上是没有区别的 那我们先来看看什么叫做Ioc 假设这么一个场景 在A类中调用B类
  • 华硕重装系统键盘灯失效 =>重装ATK驱动

    1 点击网站华硕服务与支持 https www asus com cn support 2 输出笔记本型号 选择产品 3 下载驱动 3 1选择驱动程序和工具软件 3 2选择操作系统 3 3找到ATK驱动并且下载 4 安装驱动 4 1安装AT
  • 如何使用随机数实现自动发扑克牌?

    学习不止 问答不止 一 粉丝问题 二 相关函数说明 1 函数说明 产生随机数的方法很多 常用的是rand srand 来看一下这2个函数的定义 SYNOPSIS include
  • 如何导入符号 emdk?

    我在最新的 Android Studio 中创建了一个新的 android projekt 我想导入和使用 Symbol EMDK 包 虽然我像这样放入 gradle implementation com symbol emdk 9 1 1
  • 一文带您了解软件多租户技术架构

    1 多租户技术概述 随着近几年云计算技术的不断发展和成熟 云计算多租户技术在 SaaS 服务领域获得得快速的发展和广泛的应用 基于多租户技术的业务平台首先要保证不同租户业务的隔离 业务隔离主要包括下面 2 个方面 物理隔离 租户开展业务所依
  • 字符串的字体和显示 (3)

    安卓有三种字符串 String String Array Quantity String Plurals String和String Array容易理解 一个是字符串 一个是字符串数组 通过 String planets res getSt
  • Qt做发布版,解决声音和图片、中文字体乱码问题

    前些天做Qt发布版 发现居然不显示图片 后来才发现原来还有图片的库没加 找找吧 去qt的安装包 我装在了F盘 在F盘F QT qt plugins 找到了plugins 这里面有个 imageformats是图片的库 里面有jpg gif等
  • 谷歌开源代码评审规范:好坏代码应该这样来判断

    谷歌开源了一套代码评审 Code Review 规范 它是谷歌一套通用的工程实战指南 几乎涵盖了所有编程语言与各种类型的项目 这个规范代表了谷歌长期发展以来最佳实战经验的集合 谷歌表示希望开源项目或其他组织能够从这套规范中受益 代码评审 也