每天一个摸鱼小技巧之「理解代码评审」

news2024/11/25 14:31:25

每个人的代码风格不同,在需要团队协作的项目里,如果没有统一的编程规范,那么会出现各式各样的代码,这对于团队成员来讲是个「灾难」。在需要对接协作模块时,要花费大量的时间去阅读代码,如果注释写的不明确,那么耗费的时间和精力就更多。因此,没有代码评审的项目注定会变得难以管理,尤其是大型项目中,没有代码评审或统一的编程规范行为是无法想象的。

代码评审为代码质量和风格的把关树立了一道屏障,能够保证团队整体的代码风格的一致性,提前发现代码质量问题和编程中可能存在的问题,防微杜渐,保证合入分支的代码是得到团队认可的。

概念

「代码评审」是指通过阅读代码来检查代码的规范性和准确性,是保证代码质量的手段。

检查内容

代码评审的检查内容根据语言的不同,侧重点有所不同。以JavaScript为例:

  • 命名规范:比如变量要采用camalCase的命名方式,类的命名则需要遵守PascalCase规则
  • 缩进规范:代码换行以4个空格为单位,if…else, switch…case等关键字后要空一格,表达式结尾要有一个分号
  • 代码结构:使用超过两次的代码视为重复代码,应当提取为公共代码;单个方法行数过长(比如超过了200行);一行代码的最大长度为120,超过应折行;
  • 第三方库的引用:长期没有维护的库或已知有明显bug的库不应引用到项目中
  • 质量问题:异常处理不规范、代码存在安全性问题、可读性差、扩展性低等

以上内容在代码评审的阶段被发现,能够在项目早期将缺陷问题指出来及早指正以降低损失、提高代码质量、在评审过程中的探讨有利于拓宽思路,加深评审双方对项目功能的理解、促进团队沟通,对个人和团队都是双赢的。

快速通过代码评审的秘诀

首先评审双方应该明白代码评审不是针对某个人,服务对象是代码,目的就是发现代码中可能存在的问题及时纠正,双方都要带着批判的态度去审查代码,「对代码不对人」,要注意方式方法。

合理使用注释

代码注释用于辅助程序阅读,方便程序员可以不用运行代码就可以快速理解代码作用,也方便日后查看。注释中一般需要包括作者、邮箱、内容这几个主要方面。

注释对代码起到补充说明的作用,在必要的地方可以使用注释,但是有一点要注意,注释不是万能的,滥用反而会起到反作用。

仔细斟酌变量/方法命名

一个合理的命名对理解代码起到很好的先入为主的作用。名字能告诉你它要做什么,能够很直观地表达代码意图,有利于理解代码。因此不要害怕在起名问题上浪费时间,花时间起一个合理的名字会比将时间用于区分大量不合理命名的方法和类上更有效率。

有效的提交信息

一段好的代码应该是可理解的,变量/方法的命名应仔细斟酌,尽管注释能提供上下文,但这并不充分。还要注意以下几点:

1.提交消息

使用git提交代码时需要填写一行提交信息,用于描述本次提交涉及的修改内容。可以用简洁的提交描述,如果有需要进一步说明的问题,就需要在 commit message的body中进行补充。

提交消息的描述有助于评审人员快速了解本次提交内容,对接下来的代码评审有个大概的了解。

2.Bug报告

若提交是Bug修复,那最好在提交信息中关联Bug报告,有助于评审人员快速定位到问题,对代码实现逻辑和缺陷进行审查。

重新评估代码

代码提交之后不要立即发送评审,先自己对比一下,重新思考一下代码的设计是否有可以改进的地方、代码中是否还有拿捏不准的地方,针对评审人给出的意见给出回答,同时思考一下是否可以改进代码,使其更加合理或易于理解

如何做好代码评审

评审前提

能为他人做代码评审的前提是评审人对团队规范是熟知的,在以往编程中践行着规范,所以才能指导他人。因此由于评审双方背景、能力、对功能点理解等方面的不一致性,需要沟通提问来加强理解。

有效评审

有礼貌的提出评审意见,关注点放在代码,而不是「人」上,会更加有利于对方接收自己发出的信号;相反,生硬、严厉、贬低的词汇不利于对方改进代码。

有效反馈

对不同重要程度的代码问题,要指明优先级,比如必须改正的、可选的,因为有些逻辑缺陷等有重大影响的问题是一定要修复的,属于各人不同编程风格的问题也不一定强求统一。

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

观点分享 | 冲量在线联合创始人CTO陈浩栋:基于可信执行环境构建更安全的数据流通方案

2022年12月28日,由中国信息通信研究院(以下简称中国信通院)、中国通信标准化协会指导,隐私计算联盟、中国通信标准化协会大数据技术标准推进委员会联合主办的2022可信隐私计算峰会在北京召开,本次峰会的主题为“推进隐…

IO多路转接 —— poll和epoll

文章目录1. poll1.1 poll的函数接口1.2 poll的简单测试程序1.3 poll的优缺点分析2. epoll2.1 epoll的函数接口2.2 epoll的工作原理2.3 epoll的工作模式(LT,ET)2.4 epoll的简易服务器实现(默认是LT工作模式)前言: 接上文讲述的select,它有缺点&#xff0c…

一个UML的例子

一、需求分析 1.概念定义 需求分析,要明确以下4个概念的具体内容: 资源是指使用或产生的对象,如人、物料、信息、产品等。 目标是指希望资源处于什么样的状态。 过程是指被执行的活动,这些活动会改变资源的状态。 规则是指在某些…

2023-02-09 - 3 Elasticsearch基础操作

本章主要介绍ES的基础操作,具体包括索引、映射和文档的相关操作。其中,在文档操作中将分别介绍单条操作和批量操作。在生产实践中经常会通过程序对文档进行操作,因此在介绍文档操作时会分别介绍DSL请求形式和Java的高级REST编码形式。 1 索引…

VIF原理

文章目录一、VIF公式和原理对于R方一般回归模型皮尔逊相关系数中的方差VIF原理:一、VIF公式和原理 所谓VIF方法,计算难度并不高。在线性回归方法里,应用最广泛的就是最小二乘法(OLS),只不过我们对每个因子…

锁的优化机制了解嘛?请进!

点个关注,必回关 文章目录自旋锁:自适应锁:锁消除:锁粗化:偏向锁:轻量级锁:从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量级的…

Open AI登录,可以使用ChatGPT!

目录 第一步:准备好上网工具 1、确认自己的IP 二、登录 三、无法登录的问题 第一步:准备好上网工具 1、确认自己的IP 先查看自己的电脑的IP,使用https://www.ip138.com/,看看,然后就可以将自己电脑的IP改成国外的IP&#x…

Word处理控件Aspose.Words功能演示:使用 C++ 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word处理文件…

利用 ChatGPT 回答 R 相关问题

最近小编也尝试使用了 ChatGPT,下面给出一些知乎上常见 R 语言相关问题的回答。供大家参考: 目录 文章目录目录经典问题预测数据科学软件排名数据科学的 10 个常用 R 包R 语言入门书籍和网站推荐回答专业问题绘图绘制正负柱状图动态散点图构建 Shiny 程…

Java学习笔记-03(API阶段)

前言 目前我们看到的是Java基础部分的一个新的部分API,这是个啥,又能做啥呢? 其实可以概括成一句话:帮助我们站在巨人的肩膀上,实现更加高效的开发,那么我们来一探究竟吧~ API API(Application Programming Interface,应用程序接口)是一些预…

如何使用HTTP远程连接DOCKER?

/etc/systemd/system/docker.service.d/override.conf 写入文件 ##Add this to the file for the docker daemon to use different ExecStart parameters (more things can be added here) [Service] ExecStart ExecStart/usr/bin/dockerd默认情况下使用 systemd 时&#xff0…

报表生成器 FastReport .Net 用户指南 2023(十):Band的属性

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。 FastReport.NET官方版…

HTTP协议基础知识(URL,请求响应格式,状态码,方法,cookie和session等)

目录 URL urlencode和urldecode http请求格式 http响应格式 http请求解析 http响应发送 http的方法 GET vs POST http的状态码 重定向 http常见报头属性 cookie和session URL 首先我们需要知道以下几点, 1.我们请求的图片,html,…

spring-webflux5 使用websocket

换做平常springboot程序中使用websocket的话是很简单的,只需要三步就能实现前后端的实时通讯。而在spring5中则更简单了,并且支持定点推送与全推送的灵活运用。在这里就分常规编程与响应式编程两种使用,进行记录下。一、非响应式编码1、引入W…

第十节 使用设备树插件实现RGB 灯驱动

Linux4.4 以后引入了动态设备树(Dynamic DeviceTree),我们这里翻译为“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。例如我们要在系统中增加RGB 驱动,那么我们可以针对R…

深入理解Android图形系统

一、图形系统简介图形系统是计算机中最重要的子系统之一。我们平时使用的电脑、手机都是图形界面的。对于普通人来说,没有图形界面的计算机几乎是没法用的,今天我们就来讲一讲图形系统背后的原理。1.1 图形系统的诞生早期的计算机是没有图形界面的&#…

一种基于深度学习的单导联心电信号睡眠呼吸暂停检测方法

在R峰识别的基础上,加入S峰的识别,并论正了该策略对检测结果的有效性。 1、大致方法 将数据集(ECG信号)划分为每五分钟的一个片段,为了减少噪声和信号伪影,首先对信号应用了一个有限脉冲响应(…

使用python加密主机文件几种方法实现

本文主要介绍了使用python加密主机文件几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧数据加密是一种保护数据安全的技术,通过对数据进行编…

你所不知道的Number()、parseInt()、parseFloat()转换细则

为什么要写这篇文章 最近在阅读《javascript高级程序设计》(第6版)这本书,以写代记。同时刚刚入职新公司,发现自己对于number类型转换的细节掌握不足 使用场景 我们常常对于很多字符串类型的数字需要转换成Number,一…

2023春节,蔚来高速免费换电累计达37万余次

2023年春节放假前,蔚来官方宣布高速换电免费消息: 在高速公路上(含高速出入口)的所有蔚来汽车换电站将为蔚来用户,提供不限次免费换电服务。 消息发布后,部分电动车企也进行了跟进,提供了特定区…