【知识整理】简述 Code Review - 代码审查

一、Code Review 简述

为保证上线代码质量,经研究决定0412版本起实行Code Review具体操作方式为组织 review 会。提出的优化点需立即执行更改,Review会要求给出调整方式方法。同时为了确保项目或迭代版本的时间,请各开发同学提前做好时间规划。此流程为试运行流程,在团队操作过程中 Code Review 方式方法会随之进行优化调整。

这里是来自维基百科的官方解释,CR,全称 Code Review,中文名 - 代码审查,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的过整个代码,或是正式的软件检查。

二、Code Review 目的

  • 交叉排查缺陷:通过团队成员相互审核,避免代码层面出现显而易见的问题
  • 提高代码质量:通过团队成员相互监督,在完成功能的基础之上不断完善代码结构
  • 建立团队意识:代码是团队财产,团队成员在相互督促与改进中共同成长

Code Review 也就是代码评审。代码评审有两种不同的方法,

一种是代码审查(比较正式)。

一种是代码组查(没那么正式)。

之所以需要代码评审,是因为通常自己对自己写的代码都难以发现问题,因此需要以第二双眼睛再次检查代码,帮助我们及时地发现潜在的问题。

1.确保整体代码标准化统一,在一定程度上避免编程引发的基础原则性问题

2.提高研发质量,为提测和交付上线提供双重保障

3.在满足审核标准的情况下,使PHP组整体代码健康状况随着时间的推移而改善

4.审核代码的质量,比如可读性、可维护性、以及基础程序的逻辑和风险点,针对业务逻辑的正常实现不进行深度review

三、Code Review GitLab操作流程

具体操作分支

第一步分支 test 更改为 保护分支,只有指定组长才有权限进行合并操作。具体开发人员只能指定人员发起合并请求。

具体操作通过 Gitlab平台主要Merge-Request机制进行代码审查

1. 开发人员(项目成员)在本地完成一个任务(编码)并通过本地单元测试(自测)。

2. 同步源仓库内容(release_product_hw)至本地仓库「如果跨版了,合并最新代码到本地分支」:可能需要解决冲突,再次进行本地单元测试,通过后push至个 人gitlab远程库。

3. 登录Gitlab,进入目标仓库(Project,后续统称目标仓库),发Merge Request,详见下面截 图:

选择准备申请合并的 Source Branch 与 Target Branch ,如下图:

输入此次合并的关键信息(功能、解决的问题等),指定代码审核人员并提交Merge-Request。提 交后Gitlab将会邮件通知相关的代码审核人员。

4. 相关人员收到邮件通知后登录Gitlab对M-R请求进行处理,也就是进行代码评审。

如果对准备提交的代码不满意,则可以在 有问题的代码行 或 讨论区 给出意见或建议。

如果觉得本次M-R的代码没问题,直接在评论区回复:通过 。并进行合并操作。若没有 Push 权限,则将此M-R请求 assign 给有 Push 权限的人。

5. 在上一步中,如果代码评审未通过,开发人员(M-R申请者)需要根据评审意见进行修改 (当然是得在本地开发环境进行修改测试),即重新根据 步骤1、步骤2 进行操作,最新的提 交信息会实时同步至此前提交的M-R申请单的信息流中。

6. 代码审查流程重新跳回 步骤4 。

7. 具有 Push 权限的开发人员收到M-R请求后,如果讨论区的回复内容为: 通过 ,则执行 Merge 操作。至此整个代码审查流程结束。

M-R申请者也可以提前关闭M-R请求:自己事先发现代码问题等。

如果错误点击了Merge操作,也可以 reopen 。

四、Code Review 时间轴

由 开发人员 根据开发情况,向即将上线版本(由发版人指定)分支发起 Merge Requests 请求,然后通知相关人进行 CodeReview,功能较大更改文件较多的,组织开 Code Review 会议,确定时间、地点、相关人员。

往往发生的实际场景是项目时间比较紧,尽管提出了问题,但是没有细究,CR 直接快速过了。后面果然有问题,花费了两三天去排查解决,整个模块几乎重写。
通常来说:开发 + CR讨论时间 < 不 CR,遇到问题后面修改,设计不合理的维护成本。所以这里的一个点,前期就接受他的存在,并将它计算在排期中。

场景说明:

你在认真的写代码,然后旁边的小菜开心的喊你帮我看个 CR。作为一个认真负责的你,当然是满口答应,准备点进去看看,过了一秒钟打开GIT网页,发现 365 个文件变更,此时求你的心里阴影面积。


这种场景,其实是一次性囤的代码太多导致的,很多同学觉得,我应该把一个功能完整的开发完毕,再提上去,大家才知道我在写什么,但是实际上,coding 是个循序渐进的过程,建议日常开发的同学控制 commit 粒度,尽可能保证每天提交,以及尽可能写好 commit message,还有就是 commit 跟卡片做好关联,也有助于 reviewer 能更好的理解你的意图。

五、PHP 代码规范参考

【知识整理】PHP研发组代码规范要求-CSDN博客

六、常规Review List

1.测试代码类

  1. podfile、podspec是否修改了本地仓库路径
  2. 测试类代码,假数据 需要移除

2.版本计划类

  1. 是否有不在此次版本计划内的逻辑被错误提交
  2. 是否有偏离本次需求的其他模块代码被误修改

3.数据安全类

  1. 空安全
  2. 数组、字典安全
  3. 线程安全
  4. 内存安全

4.架构设计类

  1. 按照组件化标准,基础组件功能不能冗余在业务里;业务不能冗余在基础组件里
  2. 鲁棒性满足基本要求
  3. 可抽象的重复基础逻辑

5.审核合规类

  1. 用户隐私明文传输
  2. 未加入用户协议隐私协议的隐私功能
  3. 保证最新版本,低版本兼容性
  4. 减少使用即将过期,废弃的api
  5. 敏感词屏蔽
  6. 其他已知政策风险

6.可读性类

  1. 不使用特殊字符表情中文
  2. 建议过长的方法需要拆分
  3. 复杂难懂方法需要添加注释 (适当注释,言简意赅)

七、业务型必要Review

增加新老版代码偏移量检测

  • 通过代码修改对比,发现主Type类型相关逻辑修改,需要研发二次确认。

(例如旧代码type=0跳转详情页,新代码type=1跳转详情页,类似情况需要找研发再次确认逻辑)

  • 通过代码修改对比,发现城市ID逻辑有大量修改,需要研发二次确认。

享受Code Review,相互尊重,相互学习,相互进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】第五届电子通讯与人工智能国际学术会议(ICECAI 2024)

第五届电子通讯与人工智能国际学术会议&#xff08;ICECAI 2024&#xff09; 2024 5th International Conference on Electronic communication and Artificial Intelligence 第五届电子通讯与人工智能国际学术会议&#xff08;ICECAI 2024&#xff09;将于2024年5月31日-6月…

Linux小程序--进度条

目录 1.知识补充 1.1回车和换行 1.2缓冲区 2.实现倒计时 3.实现进度条 1.知识补充 1.在制作小程序进度条之前&#xff0c;我们先了解一下&#xff0c;回车换行和行缓冲区的概念。 2.动态效果&#xff0c;在同一个位置刷新不同的图像&#xff0c;实现一个倒计时的效果。…

【Flink状态管理(八)】Checkpoint:CheckpointBarrier对齐后Checkpoint完成、通知

文章目录 一. 调用StreamTask执行Checkpoint操作1. 执行Checkpoint总体代码流程1.1. StreamTask.checkpointState()1.2. executeCheckpointing1.3. 将算子中的状态快照操作封装在OperatorSnapshotFutures中1.4. 算子状态进行快照1.5. 状态数据快照持久化 二. CheckpointCoordin…

什么是伪数组 以及伪数组转真数组的方法

什么是伪数组呢&#xff1f; 1.我们先来看看用于接受实参的方法 arguments , 执行代码如下&#xff1a; function fn() { console.log(arguments);}fn(1,2,3,4,5) 这里可以看到&#xff0c;Arguments显示的也有方括号 [1,2,3,4,5...] &#xff0c;但是后面多了一些其他方法&a…

c++类和对象新手保姆级上手教学(中)

前言&#xff1a; 类和对象中篇&#xff0c;这里讲到的前4个默认成员函数&#xff0c;是类和对象中的重难点&#xff0c;许多资料上的讲法都非常抽象&#xff0c;难以理解&#xff0c;所以我作出这篇总结&#xff0c;分享学习经验&#xff0c;以便日后复习。 目录 6个默认成员…

新算法UoT助力AI提问——主动寻求信息,任务完成率提高57.8%

引言&#xff1a;信息寻求在不确定性环境中的重要性 在不确定性环境中&#xff0c;信息寻求的能力至关重要。在许多实际应用中&#xff0c;如医学诊断和故障排除&#xff0c;解决任务所需的信息并非一开始就给出&#xff0c;而需要通过提问后续问题来主动寻求&#xff08;例如…

MobaXterm的SFTP文件上传/下载

一、MobaXterm的简介 MobaXterm是一款功能强大的远程计算工具&#xff0c;集成了诸多网络工具和便利功能&#xff0c;包括SSH、X11服务器、SFTP等&#xff0c;支持Windows系统。用户可以使用MobaXterm来轻松管理远程服务器&#xff0c;进行文件传输&#xff0c;远程桌面显示等操…

Rocky 8.9 Kubespray v2.24.0 在线部署 kubernetes v1.28.6 集群

文章目录 1. 简介2. 预备条件3. 基础配置3.1 配置hostname3.2 配置互信 4. 配置部署环境4.1 在线安装docker4.2 启动容器 kubespray4.3 编写 inventory.ini4.4 关闭防火墙、swap、selinux4.5 配置内核模块 5. 部署 1. 简介 kubespray​ 是一个用于部署和管理 Kubernetes 集群的…

掌握array_walk()函数:解锁PHP数组操作的神奇力量!

掌握array_walk()函数&#xff1a;解锁PHP数组操作的神奇力量&#xff01; 在 PHP 开发过程中&#xff0c;我们经常需要对数组进行遍历和处理。array_walk() 函数是 PHP 函数库中的一个重要工具&#xff0c;它提供了一种便捷的方式来对数组中的每个元素执行自定义操作。本文将深…

【EI会议征稿通知】2024年第四届计算机视觉与模式分析国际学术大会(ICCPA 2024)

2024年第四届计算机视觉与模式分析国际学术大会&#xff08;ICCPA 2024&#xff09; 2024 4th International Conference on Computer Vision and Pattern Analysis (ICCPA 2024) 第四届计算机视觉与模式分析国际会议&#xff08;ICCPA 2024&#xff09;将于2024年5月17日至1…

Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)

想要批量化是否勾选项目预制体资源中Text组件BestFit属性&#xff08;此篇教程也可以操作其他组件的属性&#xff0c;只不过需要修改其中对应的代码&#xff09;&#xff0c;可以采用以下步骤。 1、在项目的Editor文件中&#xff0c;新建一个名为TextBestFitBatchProcessor的…

忘记管理员密码

1、在/home/jenkins/config.xml中删除&#xff1a; <useSecurity>true</useSecurity><authorizationStrategy class"hudson.security.FullControlOnceLoggedInAuthorizationStrategy"><denyAnonymousReadAccess>false</denyAnonymousRea…

html+css+jquery实现轮播图自动切换、左右切换、点击切换

pc端也好、移动端也好&#xff0c;轮播图很常见&#xff0c;今天用htmlcssjquery实现小米商城轮播图&#xff0c;套UI框架更容易实现 步骤1&#xff1a;把静态轮播图用divcss布局出来&#xff0c;采用盒子模型、相对绝对定位实现 代码如下&#xff1a; <!doctype html>…

leetcode:无重复字符的最长字串(详解)

文章目录 一、题目描述&#xff1f;二、题解方案一&#xff1a;容易理解&#xff08;时间复杂度O(n)&#xff09;方案二&#xff1a;滑动窗口&#xff08;时间复杂度O(n)&#xff09; 一、题目描述&#xff1f; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最…

十二:枚举与注解

文章目录 01、枚举类的使用1.1、枚举类的理解1.2、自定义枚举类1.3、使用enum关键字定义枚举类1.4、Enum类中的常用方法1.5、使用enum关键字定义的枚举类实现接口 02、注解的使用2.1、注解的理解2.3、如何自定义注解2.4、jdk中4个基本的元注解的使用12.5、jdk中4个基本的元注解…

补-代码随想录第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

二叉树最后一天 ● 669. 修剪二叉搜索树思路一&#xff1a;递归递归三部曲代码&#xff1a; 思路二&#xff1a;迭代代码&#xff1a; ● 108.将有序数组转换为二叉搜索树思路&#xff1a;递归代码;[左闭右闭] ● 538.把二叉搜索树转换为累加树思路&#xff1a;递归 代码&#…

java基础训练题(2)

一、题目 1. 以下程序输出&#xff08;D&#xff09; public static void main(String[] args) {int num 2;switch (num) {case 1:num;case 2:num;case 3:num;default:num;break;}System.out.println(num);} } A&#xff1a;2 B&#xff1a;3 C&#xff1a;4 D&#xff…

解决本地googleapis 谷歌统计 nodejs 遇到 ECONNRESET和 ETIMEDOUT

在本地通过谷歌分析接口, 获取网站的访问量统计, 用于在管理端面板世界地图显示 获取分析数据的部分代码,这部分很简单示例有 // 获得前10个页面浏览量与页面标题在过去30天 const {BetaAnalyticsDataClient} require(google-analytics/data); const analyticsDataClient ne…

62-JS-canvas画布高斯模糊之图像操作

将一张图片放到canvas画布上 1.绘制图像drawImage <img src="./3.webp" alt=""><canvas></canvas><script>var canvas = document.getElementsByTagName("canvas")[0];canvas.width = 500;canvas.height = 500;var a …

“薪”的一年程序员裁员潮技术变革情况下 程序员就业机会在哪里?

引言&#xff1a;一对来自中国的工程师夫妻在美国的不幸身亡&#xff0c;疑似与谷歌的裁员有关&#xff0c;这一事件再次引发了人们对技术变革下裁员对程序员影响的关注。 一、针对裁员潮的一些看法 在我看来&#xff0c;技术变革对程序员的影响是双面的。一方面&#xff0c;…