为什么要code review

这篇具有很好参考价值的文章主要介绍了为什么要code review。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

本文将介绍 Code Review的相关内容,包含为什么要Code Review,以及Code Review主要review哪些部分的内容,之后讲述如何才能形成一套比较好的Code Review规则和流程。后续讲述了Code review中一些可以遵守的比较好的规则,最后讲述了如何才能让Code review流程跑起来。

本文为最近了解code review相关内容的总结,有问题/有建议可以在评论区帮忙指出,感谢!!!

2. 为什么要code review

代码审查(Code Review)是现代软件开发团队中非常重要的一环,因为它可以带来以下几个方面的好处:

  1. 提高代码质量: 通过代码审查,开发团队可以及时发现和修复代码中的问题,包括代码中的错误、潜在的安全漏洞、缺陷和性能问题等,从而提高代码的质量。
  2. 减少维护成本: 通过及时发现和修复问题,代码审查可以降低后续维护成本,因为修复问题的成本通常比在后期修复更低。
  3. 加强知识共享和团队协作: 代码审查可以帮助团队成员了解项目中其他成员的工作,从而促进知识共享和团队协作,提高团队整体的开发能力。
  4. 提高编码规范和标准的遵守: 通过代码审查,可以促进团队成员遵守编码规范和标准,统一团队的代码风格和代码质量要求,提高代码可读性和可维护性。
  5. 促进开发者的技能提升和成长:代码审查可以帮助开发者了解项目中的技术细节和最佳实践,从而促进开发者的技能提升和成长。

总之,代码审查可以帮助开发团队提高代码质量和开发效率,降低维护成本,提高团队协作和开发者技能,从而在软件开发项目中发挥重要作用。

3.review哪些部分的内容呢

Code Review整个流程中,比较重要的一个节点,是对代码进行Review,然后指出代码中可能存在的问题。具体主要关注哪些代码问题,应该是每个团队,在实践中总结出适合自己的一套规范。这里大概说明一些通用的Code Review可能需要关注的内容。

3.1 代码结构

  1. 代码的组织结构:代码应该按照一定的组织结构进行编写,例如按照功能模块进行组织、按照层次结构进行组织等等。在审查代码结构时,应该关注代码的组织结构是否清晰、是否符合设计原则等方面。
  2. 模块化和可重用性:代码应该具有一定的模块化和可重用性,以便于代码的复用和维护。在审查代码结构时,应该关注代码是否具有可重用的模块、是否具有良好的接口设计等方面。
  3. 代码的层次结构:代码应该按照一定的层次结构进行编写,例如分为界面层、业务逻辑层、数据访问层等等。在审查代码结构时,应该关注代码的层次结构是否清晰、是否具有良好的模块划分等方面。

3.2 代码逻辑

代码逻辑Review主要 包括条件分支、循环结构、异常处理、错误处理等方面的实现是否合理。

  1. 条件分支的检查。 判断条件是否覆盖了所有可能的情况,是否有重复的判断条件是否有不必要的嵌套。
  2. 循环结构的检查。 检查循环是否能够正常终止,是否存在死循环,是否有更简洁的循环方式。
  3. 异常处理的检查。 是否对所有的错误进行正确的处理,是否提供合适的错误提示,是否能够记录错误日志等。

3.3 代码的可读性和可维护性

Review代码时,需要关注代码的可读性和可维护性,包括代码的命名、注释、缩进、代码段的长度、函数和方法的参数和返回值等方面。

  1. 命名应该清晰,简洁,准确。代码中的变量、函数、类等命名应该具有清晰、简洁、准确的特点。而不是简单的字母或数字,且应该使用一致的命名方式,避免混淆。
  2. 注释应该清晰、准确地描述代码的含义和作用。不应该重复代码,也不应该存在无用的注释。注释应该保持最新状态,以便后续维护。
  3. 代码段的长度合适。:通常情况下,代码段的长度应该保持在一个比较合理的范围内,以保证代码的可读性。一些通用的建议是,每个函数或方法的长度应该控制在 100 行以内。
  4. 函数和方法的参数和返回值规范。 函数和方法的参数应该尽量少,入参和出参较多的情况下,可以考虑使用DTO来封装。函数和方法的返回值应该尽可能明确,避免使用不必要的返回值或无意义的返回值。
  5. 避免使用魔法数字或魔法字符串。

3.4 代码的可靠性

  1. 入参合法性检查。 是否对输入参数进行了合法性检查,避免出现意外的输入错误。
  2. 单元测试检查。 是否进行了足够的单元测试,并且能够覆盖各种边界情况。

3.5 代码的可测试性

  1. 可测试检查。 代码是否容易编写测试用例,测试用例是否易于理解和维护。
  2. 单元覆盖率检查。 测试覆盖率是否足够,是否存在测试漏洞或者未考虑到的场景。

4. 制定cr的规则和流程是什么呢

  1. 确定团队的目标和需求

  2. 确定code review的规则和流程

    • code review的时间安排,确定审查时机,以及时间安排
    • 确定每次审查的代码量
    • 确定审查的内容: 定义一份可用的checklist,确保审查者可以根据标准和指导进行 review。
    • 确定用于进行 code review 的工具和环境
    • 确定审查后需要进行修改的代码如何重新提交,如何跟踪意见的处理过程。
  3. 开始实施

  4. 收集和分析数据

    • 收集数据

      • 收集问题类型和解决方式的数据,例如代码问题的类型、解决方式、处理时间等

        1. 记录代码问题,如代码可读性等内容
        2. 记录问题的处理时间
        3. 对问题进行分类
      • 收集code review的时间安排/代码量

        1. 收集每次code review的代码量
        2. 收集开始code review的时机
        3. 每次code review耗时,包含开发和reviewer的耗时
        4. 对项目发布是否有影响
    • 数据分析

      • 根据数据记录结果,获取到code review经常出现的问题

        1. 添加代码静态扫描规则,扫描出通用问题,减少code review问题
        2. 进行对应的分享,完成团队内的知识共享
      • 对code review的耗时进行分析,来改进流程

        1. 不同需求类型,每次code review的代码量是否合适
        2. code review开始的时机是否合适
        3. code review是否对项目发布造成影响,在排期过程中,是否增加对code review的考虑
        4. 对reviewer的工作安排是否受到影响,有的话,如何解决
    • 效果分析

      1. 代码质量的提升: 通过比较一段时间下来,发现的问题数量是否减少
  5. 规则和流程的优化

5. 可以遵守的比较好的code review的准则

  1. 每个提交的代码必须经过代码审查,以确保代码的质量和可维护性。
  2. 在代码审查之前,开发人员应该对自己的代码进行一次自审查,确保代码没有明显的错误和问题。
  3. 按照确定的规则进行审查:遵循指定的审查标准和流程,以确保一致性和准确性。
  4. 代码审查应该专注于发现代码中的问题和缺陷,而不是对开发人员进行评价或指责。
  5. 不要强制修改:审查人员应该将自己的建议视为建议而非命令,并与开发人员进行协商。
  6. 在代码审查中,开发人员应该积极参与讨论,提出自己的观点和想法,并接受他人的反馈和建议。
  7. 代码审查应该在合适的时间进行,以避免影响开发进度和项目交付时间。
  8. 代码审查结果应该被记录下来,并及时修复和追踪问题,确保问题得到解决和修复。

6. 如何让code review跑起来

6.1 通过checklist来做code review

通过checkList来做code review似乎是一个比较好的方式,下面是开发者和reviewer的一个checkList的示例。

6.1.1 开发者的checklist

  1. 需求评审需要邀请reviewer参加
  2. 代码被审查前,自己先review一遍
  3. 需要提前和reviewer协调好代码review的时间
  4. 每次合并代码前都需要通过代码审查
  5. 代码有必要做单元测试的位置,已完成单元测试的覆盖,单元测试已通过

6.1.2 reviewer的checkList

  1. 需要review的代码,需要参加需求评审/测试用例评审
  2. 需要预先留出code review的时间,排期时确定
  3. 代码review根据审查标准执行
    • 每次合并代码是否通过代码审查
    • 代码结构是否符合规范
    • 代码逻辑是否存在问题
    • 代码是否具有一定的可读性
    • 代码单元测试用例是否覆盖充分
  4. 代码review需要记录问题类型,方便统计数据

6.2 限制 Code Review 时间

限制单次code review的时间,能够避免待review的代码量过多,如果一次待review的代码量过多,此时整个流程很容易流于形式。因此,这里可以根据不同团队的实际情况,定义好单次code review的耗时,限制在一个时间范围内。

6.3 代码静态扫描规则的建立

对于一些常见的代码review的问题,可以制定代码扫描规则,在code review之前,先执行一次代码扫描,识别出其中比较常见的问题,减少代码review的时间。

这样对于也减轻了reviewer的负担,也利于开发者自行发现问题,自行解决,避免时间的浪费。

6.4 学习和分享

团队中的成员可以定期分享 Code Review 的经验和技巧,以便更好地提高审查的效率和质量。
有这样一个分享,那么code review这个过程可以作为一个输入,能够增加大家code review的参与度。

6.5 反馈和改进

code review的流程,在执行过程中,大概率会发现其中并不合理的地方,或者有待改进的地方,此时应该每隔1个月/2个月,来回顾整个流程,发现其中不合理的地方,让code review更好得进行下去。

同时,在code review过程中,也有收集一些code review的数据,可以对其进行分析,发现其中不合理的地方,针对不合理的地方进行改进。

7. 建立code review的流程的实践过程

7.1 确定团队目标

首先,团队建立code reviwe的目标和需求,为什么要code review,有目标了,后续才能评估code review是否达到了目的。

7.2 时间节点的确定

首先需要确定code review的时间节点的安排。是开发完成后,提测前开始code review还是其他时间节点呢。code review的时间安排是否包含到项目排期中。

reviewer是否得提前知会,在何时知会? 其是否要参加需求评审以及测试用例评审等项目相关需求的评审会? 以及reviewer在code review过程的所耗工时要怎么统计呢,是不是在项目排期时,也需要考虑到code review的耗时,然后耗时大致的排期,是否设定为开发时间的10%,还是其他,是否先执行,后续再根据实际情况调整呢?

7.3 review平台以及review形式的确定

上面code review的时间安排已经确定好了,之后便需要开始code review,这里需要团队内确定code review的工具,是使用开源工具,如reviewBoard,亦或者是直接gitlab平台提交mr的时候顺便review呢,这个也需要确定。

当平台确定好之后,我们需要确定review的形式,是开发和reviewer一起review,reviwer一边看一遍提问,亦或者是reviewer先整体看一遍,然后有疑问再提出,然后开发再当面说明,或者是其他形式,这个也是需要确定的。

7.4 review代码量的确定

之后比较重要的点,便是每次review的代码量的问题,我们可以想象,如果每次需要review的几千行的代码,此时往往review便会流于形式,其实并不会起到太大的作用。这里应该由团队内部协商好code review的形式,是单次少量,多次review; 还是项目开发完成之后,再整体review; 或者是两者的结合,一些项目整体开发完成之后再review,一些项目采取单次少量,多次review的形式,亦或者是其他。

7.5 review内容的确定

接着,就要开始代码review,这里就需要确定review主要review哪些内容,这个示例可以参考第三点所说的,review哪些部分的内容,不过还是需要团队自行确定。不过这里有个前置依赖,团队需要有一套统一的代码规范,如命名规范等。这里假设已经确定review的内容包含代码的可读性,如果没有一套统一的规范,review流程是比较难执行下去的。

7.6 数据收集方式确定

到这里,我们可以算是完成了一次code review的流程,但是一个流程如果只有执行,没有回顾,那是不太合适的,所以对于code review的流程是需要定时回顾的。当进行回顾时,需要有数据来做支撑的,才能识别出整体流程是否存在不合理的地方,那数据从哪里来呢?那只能从每次代码review的过程中获取。

所以,这里也需要定义每次review流程中,需要记录下来一些内容,方便后续回顾,具体记录的内容,可以参考第四点制定cr的规则和流程是什么呢 中第四点的内容,然后数据记录的方式也可以统一一下,比如使用飞书文档或者多维表格,亦或者是其他形式来存储。方便后续回顾使用。

7.7 code review如何更好得执行

当上面的内容都确定好之后,在我看来,一个code review的流程其实就已经完成了,这个时候便可以考虑如何让code review整个流程跑得更顺畅,这里可以参考第六点如何让code review跑起来中的内容,比如使用checkList来减轻心智负担,其次可以建立静态扫描规则集,能够减少code review的工作量等。

7.8 定时回顾

然后再定时回顾整个code review的流程,发现其中不合理的地方,再对其进行改进。

8. 总结

该文档是一篇关于Code Review的输出,介绍了Code Review的规则和流程需要包含的内容,以及具体需要Review的内容。此外,还描述了一些在Review过程中需要遵守的原则,如尊重,建议等,以保持Review的积极性和有效性。
最后,列举了一些方式,如定期进行Review、使用静态代码扫描工具、checklist来进行code review,进行学习和分享,能够让Code Review更好地执行下去。文章来源地址https://www.toymoban.com/news/detail-414374.html

到了这里,关于为什么要code review的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 1...

    [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 10038 错误以及如何解决该错误。 在计算机网络编程中,套接字是一个端点,用于发送和接收网络数据。它可以是客户端或服务器端,并与

    2024年02月16日
    浏览(57)
  • 【VS Code 与 Qt6】QCheckBox的图标为什么不会切换?

    本篇专门扯一下有关 QCheckBox 组件的一个问题。老周不水字数,直接上程序,你看了就明白。 QCheckBox、QRadioButton、QPushButton 都是 QAbstractButton 的子类,所以这几个家伙都归属于按钮组件。在 QAbstractButton 类中已定义有 checkable 属性,表示按钮是否支持 check 操作。这种按钮就类似

    2024年02月07日
    浏览(38)
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

    一、Redis是什么 Redis 是一种 基于内存的数据库 ,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于 缓存,消息队列、分布式锁等场景 。         Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    浏览(66)
  • HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍

    目录 引言 一、HTTPS工作过程 二、Tomcat 在访达中找到下载好的Tomcat文件夹(这个要求按顺序) zsh: permission denied TOMCAT的各部分含义: 在密码中一般是:明文+密钥-密文(加密) ,密文+密钥-明文(解密) 那么为什么大家放弃了原有的http换为https呢? 这我们就要先介绍一下H

    2024年02月08日
    浏览(51)
  • 【ROS2】为什么要使用ROS2?《ROS2系统特性介绍》

    2010年,ROS1首次发布正式版本,其研发的初衷是为设计PR2(个人服务型机器人)共用的软件架构。但随着ROS1技术的普及,ROS1开始广泛融入各领域无人系统的研发,陆续暴露了系统的诸多问题。为了适应新时代机器人研发的需要,2022年5月,ROS开发者团队推出新版本ROS2。 2007年

    2024年02月09日
    浏览(38)
  • review 11

    整理chmod、chgrp、chown指令: chgrp: 只能修改文件的所属组 chgrp 新的组 文件名 要求:修改的目标组已经存在 chown: chown 新的用户名 文件名 例: sudo chown root :1            将文件1的所属组用户和所属组用户都改为root sudo chown root:ubuntu 1      将文件1的所属用户改为root,

    2024年02月20日
    浏览(27)
  • Idea Git Review插件

    idea git plugin 添加了一些常用的小插件 可以右键打开git bash窗口  可以右键选中文字点击baidu fanyi    可以通过搜索git用户名 指定开始时间查询某个版本自己提交的所有代码文件 可以通过点击蓝色行数,跳转到指定的改动代码块 资源地址: git-plugin: idea git plugin

    2024年02月20日
    浏览(34)
  • Algorithem Review 5.2 图论

    设源点为 s s s ,汇点为 t t t ,每条边 e e e 的流量上限为 c ( e ) c(e) c ( e ) ,流量为 f ( e ) f(e) f ( e ) 。 割 指对于某一顶点集合 P ⊂ V P subset V P ⊂ V ,从 P P P 出发指向 P P P 外部的那些原图中的边的集合,记作割 ( P , V /   P ) (P, V / P) ( P , V /   P ) 。这些边的容量被称为割的容

    2024年02月12日
    浏览(42)
  • 网络编程——RPC与HTTP基本介绍、历史追溯、主流应用场景、对比分析、为什么还需要使用RPC

    HTTP协议(Hyper Text Transfer Protocol) 超文本传输协议 : 一个用于在网络上交换信息的标准协议,它定义了客户端(例如浏览器)和服务器之间的通信方式。如平时上网在浏览器上敲个网址url就能访问网页,这里用到的就是HTTP协议。 明确 HTTP 是一个协议,是一个超文本传输协议,

    2024年02月16日
    浏览(41)
  • 鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)

    鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。 鸿蒙系统定位为面向未来、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。它通过分布式技术,将各种

    2024年01月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包