怎样做好Code Review

Code Review方案

定义

Code Review代码评审是指在软件开发过程中,通过对源代码进行系统性检查的过程。通常的目的是查找各种缺陷,包括代码缺陷、功能实现问题、编码合理性、性能优化等;保证软件总体质量和提高开发者自身水平

code review 的好处

    1. 提高代码质量。
    1. 及早发现潜在缺陷,降低修改/弥补缺陷的成本。
    1. 促进团队内部知识共享,提高团队整体水平。
    1. 评审过程对于评审人员来说,也是一种思路重构的过程。帮助更多的人理解系统。
    1. 是一个传递知识的手段,可以让其它并不熟悉代码的人知道作者的意图和想法,从而可以在以后轻松维护代码。
    1. 鼓励程序员们相互学习对方的长处和优点。
    1. 可以被用来确认自己的设计和实现是一个清楚和简单的。

code review形式

一般code review有两种形式,一种是代码评审会议,我称之为Code Review Meeting,就是将团队成员都组织起来开会,让代码Owner上去讲自己代码的实现和思路,其它人发表意见和进行讨论,也有把这种叫做team review。另外一种是一对一评审,我称之为Single Review,就是项目owner提交代码之后,让reviewer在空闲的时候帮忙评审代码,并且写出批注,owner收到批注后,进行修改或者回复。但注意这里的reviewer并不是只有技术主管或架构师之类的才能做,代码质量监管仅仅靠架构师是不够的,需要所有经验丰富或有专长的同学参与其中。也有人将这个形式叫peer review。 现在大部分公司都使用为Single Review形式,或者两者混合使用。

code review 工具

我们这里只介绍single review形式的工具。现在有比较受好评code review工具有Facebook的Phabricator,Google的Gerrit,他们都是开源的.另外微软也有他的code review工具TFS(Team Foundation Server),据说也挺好用,不过是收费的。不过现在大家用得最多的code review方式是基于Pull Request工作流方法,结合gitlab或者github来使用。现在Git是最流行的代码管理工具,结合gitlab的pull request,很容易实现code review。

Code Review流程

这里介绍一下基于gitflow+gitlab来做code review的流程。要在gitlab里做好code review需要有个前提,就是做好权限管理。每个成员在项目里都有对应的角色,例如owner,master,developer等。然后项目代码里设置受保护分支,master一定是受保护的分支,还可以根据需要设置其他分支为受保护分支。developer权限的成员是不能向master或者其他受保护分支push代码的。

所以结合code review,开发中的整个流程就是:建立feature分支-->编写代码-->push分支代码-->gitlab上发起一个合并请求(pull request)-->审核人员审核代码,如有需要,提出修改意见-->开发人员修改代码-->审核人员审核通过,合并代码,删除分支

下面介绍一下详细的流程,和对应的git操作命令:

1、根据开发任务,建立git分支, 分支名称模式为feature/任务名,比如关于API相关的一项任务,建立分支feature/api。 git checkout -b feature/api

2、运行git branch 确认切换到了feature/api分支

3、编辑代码完成开发任务, commit相关代码 git add -A git commit -m "implement api architecture"

4、将分支代码push到服务器 git push origin -u feature/api

5、登录到gitlab源代码库,如http://192.168.0.2/native/record-app ,点击合并请求(Pull request)按钮去创建一个合并请求(pull request)

6、再pull request详细页面, 填写相关标题/说明/reviewer, 目前请将reviewer设成相关人员

7、请提醒reviewer去审核pull request,系统也会发邮件提醒reviewer

8、Reviewer打开pull request页面,查看代码修改情况,也可以在相应的代码处添加注视,提示代码作者哪里应该修正。

9、代码作者根据reviewer的要求,调整代码后commit/push到服务器。 然后reviewer继续设置, 如此循环,知道没有问题。

10、当代码没有问题以后, 需要将任务代码merge到主代码库, 有两种方法: a、Reviewer可以在pull request页面点击Merge按钮, 把代码merge到主代码库 b、Reviewer手动本地merge, 并push到服务器。 git pull origin develop git log ..develop

如果看到develop里有修改没在当前分支, 那么运行git rebase develop来把develop的修改加入到当前分支 运行一下合并命令 git checkout develop git merge --no-ff feature/api git push

11、代码作者删除feature子分支。 git checkout develop git branch -D feature/api git push origin :feature/api

git pull origin develop

总结:核心流程就是 建立分支--发起PR请求--审核--合并,不断的循环反复。

code review注意事

cr中应该有的态度

待补充

觉得很好的一篇文章CodeReview正确的姿势是什么? - 知乎

参考资料

学习笔记_Git之CodeReview流程

使用gitlab做git flow及代码审查

Git工作流指南:Pull Request工作流

如何做好代码审查?Code Review Meeting还是Single Review

我们是怎么做Code Review的

如何进行高效迅速的CodeReview

如何有效的做Code Review

知乎上的讨论:

有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?

大家的公司的code review都是怎么做的?遇到过什么问题么?

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

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

相关文章

AI绘画探索人工智能的未来

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-8fL64RHWVzwpzR6m {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因

文章目录 一、引用1.1 引用概念1.2 引用特性1.3 常引用1.4 使用场景1.4.1 做参数1.4.2做返回值 1.5 引用和指针的区别1.6 小结一下 二、内联函数2.1 内联的概念2.2 内联的特性2.3 【面试题】 三、auto关键字(C11)3.1 类型别名思考3.2 auto简介 四、auto的使用细则4.1 基于范围的…

海外短剧系统国际短剧源码h5多语言版app挂载tiktok油管ins

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目 前言 一、海外短剧系统是什么? 二、海外短剧系统功能与运营方式介绍 1.系统功能 2.短剧APP运营方式 总结 前言 本文简单介绍海外短剧系统的功能&#xff…

leetcode hot100跳跃游戏Ⅱ

本题和上一题还是有不一样的地方,这个题中,我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念,但是我们需要两个,一个是在当前位置的覆盖范围,另一个是下一步的覆盖…

SpringCloud Gateway(4.1.0) 返回503:原因分析与解决方案

文章目录 一、环境版本二、原因分析三、解决方案 一、环境版本 Versionspring-cloud-dependencies2023.0.0spring-cloud-starter-gateway4.1.0Nacosv2.3.0 二、原因分析 在 Spring Cloud Gateway 的早期版本中,Ribbon 被用作默认的负载均衡器。随着Spring Cloud的…

Windows 7 x64 SP1 安装 Google Chrome 109.0.5414.120 (正式版本) (64 位)

1 使用 IE 浏览器 输入网址 Google Chrome 网络浏览器得益于 Google 智能工具,Chrome 现在更易用、更安全、更快速。https://www.google.cn/chrome/,点击下载 Chrome。 2 点击 接受并安装。 3 提示。 4 保存。 5 双击 运行 ChromeSetup.exe。 6 等待安…

【Spark系列1】DAG中Stage和Task的划分全流程

一、整体流程 每个Aciton操作会创建一个JOB,JOB会提交给DAGScheduler,DAGScheduler根据RDD依赖的关系划分为多个Stage,每个Stage又会创建多个TaskSet,每个TaskSet包含多个Task,这个Task就是每个分区的并行计算的任务。…

学习鸿蒙基础(2)

arkts是声名式UI DevEcoStudio的右侧预览器可以预览。有个TT的图标可以看布局的大小。和html的布局浏览很像。 上图布局对应的代码: Entry //入口 Component struct Index {State message: string Hello Harmonyos //State 数据改变了也刷新的标签build() {Row()…

PyFlink使用教程,Flink,Python,Java

环境准备 环境要求 Java 11 Python 3.7, 3.8, 3.9 or 3.10文档:https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/python/installation/ 打开 Anaconda3 Prompt > java -version java version "11.0.22" 2024-01-16 LTS J…

自动驾驶:Apollo如何塑造人类的未来出行

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言1. 什么是自定义指令?2. Apollo中的自定义指令2.1 查询中的自定…

7款免费的Midjourney平替平台

AI艺术生成器正在改变设计和内容的制作方式。像Midjourney这样的工具已经将困难的想法转化为令人惊叹的视觉效果,改变了创造力的运作方式。但是,AI艺术涵盖了许多风格和需求。这就是Midjourney替代方案变得重要的原因(特别是免费的替代方案&a…

2024年,AI 掀起数据与分析市场的新风暴

2024 年伊始,Kyligence 联合创始人兼 CEO 韩卿在其公司内部的飞书订阅号发表了多篇 Rethink Data & Analytics 的内部信,分享了对数据与分析行业的一些战略思考,尤其是 AI 带来的各种变化和革命,是如何深刻地影响这个行业乃至…

【极数系列】Flink环境搭建Linux版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…

python爬虫-多线程-数据库——WB用户

数据库database的包: Python操作Mysql数据库-CSDN博客 效果: 控制台输出: 数据库记录: 全部代码: import json import os import threading import tracebackimport requests import urllib.request from utils im…

【数据结构 08】红黑树

一、概述 红黑树,是一种二叉搜索树,每一个节点上有一个存储位表示节点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长上两倍,因而是接进…

-1- Python环境安装

1、Python安装 1.1、Windows安装Python 进入python官网:Welcome to Python.org点击 download——>all releases;建议选择3.7.2版本(网页链接:Python Release Python 3.7.2 | Python.org);下拉&#xf…

Unity 自动轮播、滑动轮播

如图所示,可设置轮播间隔,可左右滑动进行轮播 1.在UGUI创建个Image,添加自动水平组件 2.添加并配置脚本 3.代码如下,都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …

【RTP】webrtc 学习2: webrtc对h264的rtp打包

切片只是拷贝帧的split的各个部分到新的rtp 包的封装中。并没有在rtp包本身标记是否为关键帧FU-A 切片 输入的H.264 数据进行split :SplitNalu SplitNalu : 按照最大1200字节进行切分 切分后会返回一个数组 对于FU-A :split的数据总大小是 去掉一个字节的nalu header size …

C语言指针学习(1)

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

Apache Commons Collection3.2.1反序列化分析(CC1)

Commons Collections简介 Commons Collections是Apache软件基金会的一个开源项目,它提供了一组可复用的数据结构和算法的实现,旨在扩展和增强Java集合框架,以便更好地满足不同类型应用的需求。该项目包含了多种不同类型的集合类、迭代器、队…