在 Code Review 中寻找什么?

当你审查别人的代码时,你会寻找什么?

无论你是通过像 Upsource 这样的工具来审查代码,还是在同事讲解他们代码的过程中进行审查,在任何情况下,有些事情都比其他事情更容易评论。比如:

  • 格式:空格和换行符在哪里?他们是否使用制表符或空格?大括号是如何布局的?
  • 样式:变量/参数是否声明为最终变量/参数?方法变量是在使用它们的代码附近还是在方法的开头定义的?
  • 命名:字段/常量/变量/参数/类名是否符合标准?名字是不是太短了?
  • 测试覆盖率:是否有针对此代码的测试?

这些都是需要检查的有效事项——您想要最小化不同代码区域之间的上下文切换并减少认知负载,因此您的代码看起来越一致,就越好。

然而,让人类寻找这些可能不是组织中时间和资源的最佳利用,因为其中许多检查可以自动化。有很多工具可以确保代码的格式一致,遵循有关命名和最终关键字使用的标准,并发现由简单编程错误引起的常见错误。例如,您可以运行 IntelliJ IDEA 从命令行进行检查,因此您不必依赖所有团队成员在其 IDE 中运行相同的检查。

你应该寻找什么?

人类真正擅长什么样的事情?在代码审查中,我们能发现哪些我们无法委托给工具的东西?

事实证明,有数量惊人的东西。这当然不是一个详尽的清单,我们也不会在这里详细讨论其中任何一个。相反,这应该是你的组织中关于你目前在代码审查中寻找哪些东西,以及你应该寻找什么的对话的开始。

设计
  • 新代码如何与整体架构相适应?
  • 代码是否遵循 SOLID 原则、领域驱动设计和/或团队喜欢的其他设计范式?
  • 新代码中使用了哪些设计模式?这些合适吗?
  • 如果代码库混合了标准或设计风格,那么这些新代码是否遵循当前的做法?代码是朝着正确的方向迁移,还是遵循即将被淘汰的旧代码的示例?
  • 代码是否在正确的位置?例如,如果代码与订单相关,它是否在订单服务中?
  • 新代码能否重用现有代码中的某些内容?新代码是否提供了我们可以在现有代码中重用的内容?新代码是否引入了重复?如果是这样,是否应该将其重构为更可重用的模式,或者这在现阶段是否可以接受?
  • 代码是否过度设计?它是否为现在不需要的可重用性而构建?团队如何平衡 YAGNI 的可重用性考虑因素?
可读性和可维护性
  • (字段、变量、参数、方法和类的名称)是否真正反映了它们所代表的事物?
  • 我可以通过阅读代码来理解代码的作用吗?
  • 我能理解测试的作用吗?
  • 这些测试是否涵盖了一个很好的 case 子集?它们是否涵盖快乐的道路和特殊情况?有没有考虑过的情况?
  • 异常错误消息是否可理解?
  • 令人困惑的代码部分是否被记录、注释或被可理解的测试所覆盖(根据团队偏好)?
功能性
  • 代码真的做了它应该做的事情吗?如果有自动化测试来确保代码的正确性,那么这些测试是否真的测试了代码是否满足了约定的要求?
  • 代码看起来是否包含细微的错误,例如使用错误的变量进行检查,或者不小心使用了 and 而不是 or
你有没有想过......?
  • 代码是否存在潜在的安全问题?
  • 是否有需要满足的监管要求?
  • 对于自动化性能测试未涵盖的领域,新代码是否引入了可避免的性能问题,例如对数据库或远程服务的不必要调用?
  • 作者是否需要创建公共文档或更改现有帮助文件?
  • 是否检查了面向用户的消息的正确性?
  • 是否存在明显的错误会阻止它在生产中工作?代码是否会意外指向测试数据库,或者是否存在应该换成真实服务的硬编码存根?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!

PCADBODBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper! 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…

zookeeper面试题

文章目录 ZooKeeper 是什么?ZooKeeper 提供什么?1. 文件系统2. 通知机制 ZooKeeper 文件系统四种类型的 znode1. PERSISTENT (持久化目录节点)2. PERSISTENT_SEQUENTIAL (持久化顺序编号目录节点)3. EPHEMERAL (临时目录节点)4. EPHEMERAL_SEQUENTIAL (临…

GIMP - GNU 图像处理程序 - 工具栏窗口 (Toolbox) 显示

GIMP - GNU 图像处理程序 - 工具栏窗口 [Toolbox] 显示 1. File -> Open2. GIMP 主面板里,右击弹出菜单 -> Tools -> New Toolbox3. Windows -> Dockable Dialogs -> Tool Options4. 工具选项拖动到工具箱里面5. Always On TopReferences GIMP 是跨平…

sqlite3嵌入式开发板命令行方式使用

如何在编译嵌入式版本的sqlite3,请看我上一篇文章 sqlite3 交叉编译-CSDN博客 一、sqlite3命令行方式使用 假如我将编译好的嵌入式的sqlite3放置在如下路径: 进入bin目录进行操作 1.运行sqlite3 运行sqlite3有两种方式 1)直接在内存里面…

Django——Ajax请求

Django——Ajax请求 一、响应 Json 数据 path(str/ , views.str_view), path(json/ , views.json_view), path(jsonresponse/ , views.jsonresponse_view), path(ls/ , views.ls),from django.shortcuts import render , HttpResponse from django.http import JsonResponse …

文心一言指令词宝典之职场效率篇

作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅…

基于SpringBoot和Vue的车辆管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的车辆管理系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&#x1f…

设计模式(3):工厂模式

一.工厂模式 实现了创建者和调用者的分离。 二.分类 简单工厂模式 用来生产同一等级结构中的任意产品。(对于新增产品,需要修改已有代码。用的最多) 要点: 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收…

Git相关命令(二)

三、Team协作 分支概念:由于多人贡献于同一个仓库,但是又不能同时直接再仓库上修改,所以就需要从主仓库分支,每个人在自己对应的分支上操作,最后在合并到主仓库即可 1、fork 仓库。这是 github 的操作,而…

【Java面试题】操作系统

文章目录 1.进程/线程/协程1.1辨别进程和线程的异同1.2优缺点1.2.1进程1.2.2线程 1.3进程/线程之间通信的方法1.3.1进程之间通信的方法1.3.2线程之间通信的方法 1.4什么是线程上下文切换1.5协程1.5.1协程的定义?1.5.2使用协程的原因?1.5.3协程的优缺点&a…

Android-AR眼镜屏幕显示

Android-AR眼镜 前提:Android手持设备 需要具备DP高清口 1、创建Presentation(双屏异显) public class MyPresentation extends Presentation {private PreviewSingleBinding binding;private ScanActivity activity;public MyPresentatio…

后缀名是safetensors和pt、h5有什么区别

后缀名为.safetensors、.pt(PyTorch tensor)和.h5(HDF5)的文件都是用于存储深度学习模型的文件格式,但它们在设计目的、压缩效率、安全性和兼容性方面有所不同。 .safetensors 设计目的:.safetensors格式专…

大模型如何通过token进行推理?

大型模型通过token进行推理的过程通常涉及以下步骤: 1、Tokenization(分词):首先,输入文本或序列被分割成tokens,这些tokens通常是单词、子词或字符的序列。这一步通常由预训练模型的tokenizers完成。 2、…

计算机网络:物理层 - 编码与调制

计算机网络:物理层 - 编码与调制 基本概念编码不归零制编码归零制编码曼彻斯特编码差分曼彻斯特编码 调制调幅调频调相混合调制 基本概念 在计算机网络中,计算机需要处理和传输用户的文字、图片、音频和视频,他们可以统称为消息数据&#xf…

[GXYCTF2019]StrongestMind

web请求类题目,要求1000次 import requests from bs4 import BeautifulSoup import time urlhttp://ad7bc925-bc7a-4881-8a75-9045b60d4ab2.node5.buuoj.cn:81/index.php srequests.session() #维持会话 datas.get(url) for i in range(1001):soupBeautifulSoup(d…

探究 HTTPS 的工作过程

目录 1. HTTPS 协议原理 1.1. 为什么要有HTTPS协议 1.2. 如何理解安全 1.3. HTTPS 协议是什么 2. HTTPS 的前置概念 2.1. 什么是加密 && 解密 2.2. 为什么要加密 2.3. 常见的加密方式 2.3.1. 对称加密 2.3.2. 非对称加密 2.4. 数据摘要 && 数据指纹…

MyBatis3源码深度解析(二十四)级联映射与关联查询(一)级联映射的使用

文章目录 前言第十章 MyBatis级联映射与懒加载10.1 MyBatis级联映射的使用10.1.1 简单查询10.1.1.1 数据准备10.1.1.2 编写实体类10.1.1.3 编写Mapper接口及XML配置文件10.1.1.4 编写MyBatis主配置文件10.1.1.5 编写单元测试 10.1.2 一对多级联映射10.1.2.1 外部Mapper方式10.1…

怎麼實現Nginx反向代理?

Nginx是一款開源軟體,可以作為Web伺服器、負載均衡器和反向代理使用,是高性能的HTTP和反向代理伺服器。其中反向代理是Nginx的一項重要特性。接下來,我們詳細講一下Nginx反向代理的實現和應用。 反向代理是什麼? 代理一詞通常指的…

使用第三方远程连接工具ssh连接vagrant创建的虚拟机

vagrant默认密码都是vagrant 密码认证默认是关闭的,进入虚拟机,打开密码认证 1、使用命令vi /etc/ssh/sshd_config进入配置,注意要切换到root用户,这个配置root有权限 2、找到PasswordAuthentication默认为no,改为yes 3、重启虚…

Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的: 请求访问缓存,缓存有数据就返回,缓存无数据就去数据库里面查数据写入到缓存中。 1、缓存穿透问题 但是如果由恶意请求,短时间内大量的访问不存在的数据,这时每个请求…