代码审查最佳实践与规则

news2024/9/20 10:32:46

当需要在现有项目中添加新代码时,应在主代码库(通常是 master/main/test 分支)的基础上创建功能分支。这样,个人或团队就可以对新功能或任务进行开发,直到完成为止,并将他们的提交推送到这个不受保护的分支。

开发完成后,就需要打开一个拉取请求(PR),将这些更改合并到主代码库中。这是为什么呢?因为代码审查必须由作者以外的人员执行,以检查源代码并查找问题,确保不良代码不会进入生产。此外,知识共享、提高安全性、降低开发成本和促进团队合作也是代码审查的好处。

下面概述了进行有意义、有效的代码审查的一些技巧和最佳实践,以及防止将拉取请求合并到主代码库的规则。

最佳实践与技巧


在进行代码审查时,可能需要考虑以下几个方面:代码的设计、风格、功能、复杂性、命名、测试...... 以下主题应能为执行代码审查提供一些指导:

验证功能需求--问问自己 "这段代码能满足最终用户的需求吗?验证 PR 和 Jira 问题描述中提供的信息以及定义的验收标准。是否存在功能缺失?是否有执行不力的功能?

评估可读性--代码不仅要满足最终用户的需求,还要易于理解。您能否轻松识别代码块的开始和结束位置?代码是否言之有物并表达了其目的?是否避免了晦涩难懂的语言?你能分辨出特定函数、方法或类的作用吗?开发人员是否将代码分成了易于理解的小块?

测试可维护性--正如代码需要易于理解一样,它也需要易于维护。代码是否易于测试和调试?能否配置代码以快速更改数据值?代码是否与其他系统或过时的程序绑定?代码是否依赖于您希望淘汰的功能或技术?

检查安全漏洞--虽然 SonarQube 可以在这方面提供帮助,但仍需要人工检查安全漏洞。代码是否使用过时的工具或存在已知安全问题的工具?如果你想窃取数据或访问系统,你能看到漏洞吗?代码是否利用身份验证和授权来保证安全?是否对用户输入进行了消毒以防止安全攻击?代码是否安全地存储用户数据?

考虑速度和性能--用户希望该功能能按照他们的需求运行,不存在安全问题,而且速度和性能可靠。因此,您需要提出这些问题: 代码中是否包含低效的字符串连接、日志记录或对象分配?是否存在不需要的重复代码?程序是否会对系统整体性能产生负面影响?代码是否依赖于优化不佳的资产或多个 API 请求?

确认有足够的文档--虽然代码本身应该能说明问题,但为了便于使用,可能还需要一些外部文档。那么,文档是否解释了代码的目的,并教会用户如何使用代码?任何新功能或代码变更是否需要额外的文档?文档是否清晰易懂?

检查命名约定--这是评估可读性的一个子话题,但拥有清晰的命名约定会让代码更容易阅读和理解。您可以通过查看变量、常量、类字段、属性和方法的名称来检查命名约定。这些名称是否简单易读?这些名称是否符合您企业的命名约定,或表达了函数或变量的含义?名称是否解释了整个代码库的上下文或范围?

合并拉取请求的规则


为了保护master/main/test 分支不会收到未经适当审核的代码,并最大限度地降低生产事故的风险,启用了以下规则:

要求 PR 中至少有两个批准,其中至少一个应属于代码所有者。打开 PR 的人不能是批准人之一。

在推送新提交时取消状态拉取请求审批,并要求审批最近一次可审查的推送。这样,我们就能保证在批准后没有任何更改,从而最大限度地减少将问题推送到生产环境的可能性。

要求在合并前通过状态检查,并要求在合并前更新分支。这能确保 PR 已使用最新代码进行了测试,并符合持续集成管道中定义的最低要求。

要求在合并前解决对话问题,确保不会忽略或忽视任何评论。

要求提交签名,以确保提交的真实性和完整性,证明提交是由推送到特性分支的人完成的。

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

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

相关文章

Linux系统加固:限制用户对资源的使用禁止IP源路由更改主机解析地址的顺序设置umask值

Linux系统加固:限制用户对资源的使用&禁止IP源路由&更改主机解析地址的顺序&设置umask值 1.1 限制用户对资源的使用1.2 禁止IP源路由1.3 更改主机解析地址的顺序1.4 禁止ip路由转发1.5 设置umask值 💖The Begin💖点点关注&#x…

NOIP 2007 普及组初赛试题及解析

NOIP 2007 普及组初赛试题及解析 一. 单项选择题 (共20题,每题1.5分,共计30分。每题有且仅有一个正确答案.)。二. 问题求解(共2题,每题5分,共计10分)三. 阅读程序写结果(…

【测试工具】Fiddler

1.Fiddler简介 Fiddler是位于客户端和服务器端的HTTP代理,能够记录客户端和服务器之间的所有 HTTP请求,是web调试的利器。既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器&#xff0c…

​LeetCode解法汇总235. 二叉搜索树的最近公共祖先

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给定一个二叉搜索树, 找到该树中两个指定…

selenuim【1】($x(‘xpath语法’)、WebDriverWait())

文章目录 初学selenuim记录1、执行driver webdriver.Chrome()后很久才打开浏览器2、浏览器多元素定位 $x(‘xpath语法’)3、打开浏览器driver.get("网址")执行了很久才开始定位元素:等待(1)driver.set_page_load_timeout(t)&#…

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作: 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解,可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

为什么网络安全缺口这么大,还是这么缺网络安全工程师?

为啥网安领域缺口多达300多万人,但网安工程师(白帽黑客)却很少,难道又是砖家在忽悠人??? 主要原因为这三点: 首先是学校的原因,很多学校网络安全课程用的还都是十年前的老教材&…

NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准

AEC-Q101认证标准详细解读: AEC-Q101是一种汽车电子元件可靠性标准,由汽车电子委员会(Automotive Electronics Council,简称AEC)制定。该标准旨在确保在汽车环境中使用的电子元件具有足够的可靠性和耐久性。 AEC-Q10…

C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码

1 双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循…

Docker:开启访问端口 || IDEA开发工具快速部署到服务器

参考文档:Docker开启远程安全访问-腾讯云开发者社区-腾讯云 一、Linux服务器环境 1.1、安装Linux 1.2、安装docker 二、Linux服务器配置docker开放端口 2.1、首先进入docker配置文件打开 /usr/lib/systemd/system/docker.service 或运行以下命令 vi /usr…

1950-2022年各省逐年平均降水量数据

1950-2022年各省逐年平均降水量数据 1、时间:1950-2022年 2、指标:省逐年平均降水量 3、范围:33省(不含澳门) 4、指标解释:逐年平均降水数据是指当年的日降水量的年平均值,不是累计值&#…

matlab工具包

matlab安装yalmip和cplex出错 - 知乎 (zhihu.com) Cplex的安装和使用实例-CSDN博客 一条龙教程:Matlab下使用yalmip(工具箱)cplex(求解器)_使用yalmip和cplex求解器进行建模和求解的步骤如下:-CSDN博客 啊啊啊,好开心&#xff…

C/C++ Zlib库调用Minzip来封装MyZip压缩类

文章目录 1、C/C Zlib库调用Minzip来封装MyZip压缩类1.1、类的功能实现1.1.1、ZIP压缩函数 Compress1.1.2、ZIP解压函数 UnCompress1.1.3、代码如下1.1.4、如何使用类 1、C/C Zlib库调用Minzip来封装MyZip压缩类 Zlib是一个开源的数据压缩库,提供了一种通用的数据压…

JVM调优,调整JVM参数

JDK8之后把-XX:PermSize和-XX:MaxPermGen移除了,取而代之的是XX:MetaspaceSize128m (元空间默认大小) -XX:MaxMetaspaceSize128m (元空间最大大小) JDK 8开始把类的元数据放到本地化的堆内存(native heap)中&#xff0…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护: 查看ida: 这边其实看反汇编没啥大作用,需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题: 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码,然后让我们输入密码,用st…

就业班 2401--3.1 Linux Day9--文件查找和压缩

一、文件查找与打包压缩 grep: 文件内容过滤 [rootqfedu.com ~]# grep root /etc/passwd #从/etc/passwd文件中过滤root字段 grep ^root root$ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 查找命令 [rootqfedu.com ~]# which ls ali…

Linux系统中安装redis+redis后台启动+常见相关配置

1、下载Redis Redis官网:https://redis.io/ 历史版本: http://download.redis.io/releases 2、连接Linux(或者VMwear) 我们安装的是linux版本的redis 打开xftp我们需要先将我们的Redis上传到服务器上 解压到这里 解压的指令 …

Python错题集-4:NameError:(变量名错误)

1问题描述 Traceback (most recent call last): File "D:\pycharm\projects\1-可视化学习\8.3更改小提琴图的中位数、均值、颜色等.py", line 8, in <module> violin_parts plt.violinplot(data, showmediansTrue, showmeansTrue) …

071:vue+cesium 实现下雨效果

第071个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中实现下雨效果,这里使用着色器来实现实例特效。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共120行)着色代码实现心得:专栏目标示例效果

物体检测-系列教程19:YOLOV5 源码解析9 (Focus模块、Model类构造函数)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 13、Focus模块 13.1 基本流程 原始输入图像的格式为&#xff1a;tensor: float32[1,3,64…