代码走查和代码审查_这是经过1000多次代码审查后我学到的东西

2023-11-17

代码走查和代码审查

这个故事最初发表在我的博客上 。 如果您对这种内容感兴趣,请随时签出并订阅:)

在过去的三年中,我已经审查了1000多个请求(合并)请求。 在那段时间里,我学到了很多东西–主要是关于如何不审阅代码,如何减轻过程的痛苦,使高质量的代码产生什么等等。

拉取请求只需要做一件事

这是要提防的最重要的事情!

在进行代码审查时,您需要牢记很多事情。 “这背后的意图是什么?”“这如何与其余代码保持一致?”“效果会很好吗?” 只是需要回答的一些问题。 因此,当您有一个集中的拉式请求试图解决一个问题时,其中一些问题将变得更容易回答。

另一个重要方面是拉取请求的大小。 更大的请求需要成倍增加的时间来审查。 而且,当我知道我需要花15分钟以上处理请求时,您将不得不等待几个小时。

较大的拉取请求也会有更多的错误,因此获得批准的时间也会大大增加。 这意味着您可能需要等待几天才能批准代码。 而且,如果您的公司敏捷,那将增加合并痛苦的机会,而这仅仅是痛苦的。

最好的办法是将请求合并成有意义的部分–一个请求只能解决一件事。

因此,请注意常见的陷阱,例如重命名代码概括等。 尽管它是纯洁的,而且意图很好,但它使重点不再放在重要部分上,从而提高了代码质量并减少了错误计数。 只需在另一个请求请求中执行您的天才想法即可。

自动化尽可能多的检查

继续存在以下观点:审阅者必须牢记很多事情,其中​​还包括检查代码格式,是否存在适当的文档,可通过的测试等。 我记得当时我不得不考虑所有这些因素,那是分散精力和时间的。

好消息是解决方案非常简单–将所有检查集成到CI管道中。 基本上,每当有人提交拉取请求时,它就会运行所有检查,并且不允许在所有检查通过之前合并。 作为审阅者,您将不必担心再次格式化。

自动化测试   帮助确保作者没有破坏任何东西,并且测试仍在通过中。 根据您的测试方法,这很容易成为您的拉取请求CI中最重要的检查。

自动化的代码格式使理想行长或添加换行符附近的所有参数消失。 只需团队选择一组格式化规则,然后将其交给自动格式化程序即可。 这将使您摆脱很多麻烦。 如果您在同意格式时遇到问题,请查看Google,Facebook或其他一些大公司的做法。

自动化的棉绒检查器对于像Python这样的代码格式化会影响代码逻辑的语言也非常重要。 大多数适用于Python的代码格式化程序只会格式化他们肯定知道不会影响任何逻辑的代码。 通过添加棉绒检查器,您将涵盖所有内容。

值得一提的是类型检查器文档检查器 ,但最重要的是使对您和您的团队有意义的检查自动化。 如果您认为有帮助,请说出来并尝试一两个星期。

与作者坐在一起检查代码

由于您能够与作者一起快速遍历代码并分享您的观点,因此它使审核过程更快。 作者还可以更好地解释其方法背后的原因,例如是否尝试过某些东西以及为什么它不起作用。

这也是与人建立更多联系的绝佳机会,这非常重要。 当您的其他开发人员看到您在他们的个人和业务发展上投入了资金时,他们会感激的。 对于您和作者来说,这也是实践交流的好机会,这对于运作良好的团队至关重要。

但是请注意不要过度执行此操作。 一些拉取请求太小和太简单而无法进行任何有影响的对话。 在那种情况下,与作者坐下来可能是浪费时间。

写评论时要体贴

如果您比代码的编写者更有经验,则需要考虑您怎么说的事情很重要。 写得很好的批评可以使开发人员在将来变得更好,但也可能破坏某人的梦想。

我发现最有效的方法是提出开放性问题–这不是激进的做法,甚至鼓励开发人员进行批判性思考。 这会比告诉别人解决方案花费更多时间吗? 是的,短期的。 但是从长远来看,您正在帮助他们成长,他们重犯错误的可能性较小。

因此,下次有人在for循环中而不是在循环之前打开文件时,没有明确指出,而是问“您如何在这里降低复杂性?” 。 这将意味着很多。

添加一个名为“我在本地运行此代码”的标志

最让我感到困扰的是,在一些小的请求中发现了一个错误,因此该功能根本无法正常工作。 这意味着开发人员甚至没有运行代码-可能认为没有必要,因为更改很小。

发生几次之后,我添加了一个标记,称为“ 我在本地运行此代码”,从而完全解决了问题。 我停止查看不在本地运行的代码,人们对此也没有说谎。 没有难过的感觉,因为我们所有人实际上都知道应该这样做。

奖励:这是我们的模板,每个开发人员在创建拉取请求时必须填写:

Merge request description
What is new?

Implemented...
What has changed?

Changed...
Checklist
[ ] I ran this code locally
[ ] I wrote the necessary tests
[ ] I covered my code with type-hints
[ ] I updated CHANGELOG
Trello card
https://trello.com/c/

Should know about
Is there anything else that should be known?
Any deployment notes?
Any additional documentation?

翻译自: https://hackernoon.com/this-is-what-i-learnt-after-making-over-1000-code-reviews-ad4r3ujy

代码走查和代码审查

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

代码走查和代码审查_这是经过1000多次代码审查后我学到的东西 的相关文章

随机推荐

  • FPGA开发流程

    流程 设计定义 设计输入 分析和综合 功能仿真 modelsim altera 布局布线 时序仿真 modelsim altera 时序约束 IO分配以及配置文件的生成 配置 烧写FPGA 在线调试 设计定义 二选一多路器 两个输入IO a
  • Amazon SDE实习机会面试经验分享

    我通过大学申请了Amazon SDE实习 在线回合 有一个在线回合 其中包含技术性MCQ和2个编码问题 编码部分非常简单 面试过程中有7 8人入围 第一轮面对面访谈 这一回合持续了一个小时 首先 面试官要求自我介绍 后来有3个编码问题 对包
  • HTML img 强制刷新加载

    img刷新机制为url变化则刷新 当url不变时想要刷新可做如下处理 let url http pic27 nipic com 20130321 9678987 225139671149 2 jpg const time new Date
  • 浏览器默认行为(原生事件)、浏览器中网页渲染顺序

    一 浏览器的原生事件 1 浏览器中存在一些默认行为 比如 文本可复制 图片可 拖拽 这是伪拖拽 实际并没有移动 松开鼠标后 会弹出新的链接 右键会出现菜单 a标签单击会跳转等 2 为什么要阻止默认行为 如某些时候 我们需要写一个a标签 但是
  • docker的联合文件系统(UnionFS)

    docker最大的贡献就是定义了容器镜像的分层的存储格式 docker镜像技术的基础是联合文件系统 UnionFS 其文件系统是分层的 这样既可以充分利用共享层 又可以减少存储空间占用 联合挂载系统的工作原理 读 如果文件在upperdir
  • vue常用标签

    一 内容绑定 1 v text 会替换掉html的内容 eg p p 2 插值表达式占位内容 放在html中 eg p username p 3 v html 可将html内容渲染到页面 v text和 不支持 eg div div con
  • 用于通过声波捕获显示视觉,触觉和音频的全息显示(A volumetric display for visual, tactile and audio presentation using acous)

    Ryuji Hirayama Diego Martinez Plasencia Nobuyuki Masuda Sriram Subramanian 2019年1月31日接收 2019年8月15日收录 2019年11月13日网上公开 摘要
  • java token redis生成算法_java秒杀系列(1)- 秒杀方案总体思路

    前言 首先 要明确一点 高并发场景下系统的瓶颈出现在哪里 其实主要就是数据库 那么就要想办法为数据库做层层防护 减轻数据库的压力 一 简单图示 我用一个比较简单直观的图来表达大概的处理思路 二 生产环境中秒杀抢购的解决方案 1 前端 1 动
  • Qt自定义滑动条

    最近要用到滑动条 Qt自带的QSlider虽然能满足需求 但是操作起来有很多不舒服的地方 于是在它的基础上改了改 分享给大家使用 先放效果图 在QSlider的基础上 改变了样式 绘制了刻度 增加了取整功能 只需要微调就能适应各种需求 头文
  • JavaWeb12(实现基础分页&模糊查询的分页)

    目录 一 效果预览 编辑 二 实现基本分页 2 1 分页sql 每页3条 取第二页 由于伪列不能作用与大于符号也不能作用于between and 因此需要将伪列 gt 名列 2 2 万能公式 2 3 首页 上一页 下一页实现 前端代码 2
  • [论文阅读笔记36]CASREL代码运行记录

    论文阅读笔记33 CASREL 基于标注与bert的实体与关系抽取 https blog csdn net ld326 article details 116465089 总的来说 文档都还是写得很好的 按文档 readme md 来就行
  • 必备技能22: 安装VISIO时,出现64、32版本冲突

    问题描述 安装visio时 遇到如下错误 安装错误 无法安装 64 位版本的 Office 因为在您的 PC 上找到了以下 32 位程序 Office 16 Click to Run Extensibility Component 请卸载所
  • Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

    前言 大麦网 是中国综合类现场娱乐票务营销平台 业务覆盖演唱会 话剧 音乐剧 体育赛事等领域 但是因为票数有限 还有黄牛们不能丢了饭碗 所以导致了 很多人都抢不到票 那么 今天带大家用Python来制作一个自动抢票的脚本小程序 知识点 面向
  • linux安装mysql5.7

    Linux下安装Mysql5 7 超详细完整教程 以及云mysql连接 linux mysql5 7 清香可口柑的博客 CSDN博客 grant all privileges on to root identified by 123456
  • 无人机数据集调研

    最近在研究无人机检测相关领域的内容 因此对目前开源的无人机数据集做一个整理 目录 无人机数据集 一 VisDrone2019 二 UAVDT 无人机数据集 一 VisDrone2019 数据集下载地址 比赛官网 VisDrone2019数据
  • 1分钟免费开通IDaaS云服务

    2020 Zero trust 零信任 持续火热 零信任不仅仅是技术 更是理念的转变 会成为未来十年主流的网络安全架构 企业如何快速构建自己的零信任 SDP防护架构 背景 国内现状 大多数企业尚未建立企业的身份认证和授权中心 能够管理企业内
  • 获取 gps信息_ROS传感器之GPS简介

    一 传感器分类 在自动驾驶或者机器人领域 传感器的使用按照测量对象划分 可分为两大类 一类是测量自身状态 另一类测量环境状态 前者主要包含GPS IMU和编码器 后者主要有激光雷达 毫米波雷达和相机 这里的状态主要是指位置和速度 有些传感器
  • android 登陆界面

    LoginActivity java package com example ruian import android app Activity import android app AlertDialog import android c
  • 用python将结果存进csv文件中

    def writeCsv File species row File species out open data test csv a newline csv writer csv writer out dialect excel csv
  • 代码走查和代码审查_这是经过1000多次代码审查后我学到的东西

    代码走查和代码审查 这个故事最初发表在我的博客上 如果您对这种内容感兴趣 请随时签出并订阅 在过去的三年中 我已经审查了1000多个请求 合并 请求 在那段时间里 我学到了很多东西 主要是关于如何不审阅代码 如何减轻过程的痛苦 使高质量的代