快刀斩乱麻,DevOps让代码评审也自动起来

​在 Dr.Michaela Greiler 的 How Code Reviews at Microsoft 一文中提到,微软有 140000 名员工,其中 44%员工是工程师。这意味着,有超过 6000 名的工程师同时在同一个代码库上开发 Office、Visual Studio、Windows 等产品。

想要确保不同子团队开发的代码能完美协作,并不是一件易事。 那么,如此大的工程师规模下,微软到底是如何确保代码质量的呢?秘密在于代码评审!

微软针对 900 多名开发人员的调查研究表明,有 36%的开发人员表示他们一天回进行多次代码评审。以天为单位和以周为单位的开发人员分别占比 39%和 12%,仅有13%的开发人员一周内未进行任何代码评审。
微软调查报告

(图片源自微软调查报告)

代码评审是指在软件开发过程中,对编写的代码进行系统检查和评估的过程。这是一种质量控制方法,旨在发现代码中的潜在 Bug。 由此可见,代码评审起到了不可忽视的重要作用,从而确保代码可以在如此大规模的开发人员内实现顺畅的协作。

一、是什么绊住了你的代码评审?

代码评审有着诸多好处,如提高代码质量、发现代码中的缺陷、知识转移等。

代码评审的步骤看似很简单,只需要“提交-修改-完善”,但实际过程往往会发生一些预期之外的事情,而这些事情则会降低整个代码评审的积极性甚至可能影响团队的工作效率。

  • 时间过长

《软件工程通史》的作者卡珀斯·琼斯(Capers Jones)分析了超过 12000 个软件开发项目,**从实验分析结果看,一般的代码评审速度约是一小时 150 行源代码。**但对于一些关键的软件(例如安全关键系统的嵌入式软件)来说,一小时审查数百行源代码的审查速度太快,可能无法找到其中的问题。

我们不难看出,虽然代码评审对于发现潜在 Bug 起到了重要的作用,但也需要投入大量的时间,像业务需求不稳定、时间要求紧迫的项目,就难以进行代码评审。

  • 效果难以衡量

代码评审的好处通常在长期和多次的实践中才能显示出来。通过代码评审,团队成员可以学习和应用更好的编码技巧和设计原则,从而提高自身的编码能力。这种个人和团队的成长需要时间和经验的积累,因此,代码评审的效果在短期内可能不容易观察到。

正是这些原因, **导致不少开发人员的代码会出现“管他有几个 Bug,能跑就行”的现象。**长此以往,就会出现“屎山代码”导致可读性差、可维护性差等情况。
当你把代码写成一坨屎,仍然能运行时

(当你把代码写成一坨屎,仍然能运行时)

二、DevOps 平台在代码评审中的作用

**代码评审并不是浪费时间,代码评审一般可以找到并消除约65%的Bug,最高可以到85%。**为了解决绊住代码评审的困难,越来越多的团队开始采用 DevOps 平台来辅助代码评审,DevOps 平台提供了一种集成和协作的环境,使得代码评审过程更加高效。

  • 可视化和协作

代码仓库通过版本控制系统(如 Git)管理代码的不同版本和变更历史。代码评审可以针对特定的代码版本进行,通过对比不同版本之间的变更,开发人员可以更好地理解代码的演变过程和改动内容。同时,代码仓库提供了一个协作平台,团队成员可以在同一个代码库中/共同开发和维护代码。

  • 静态分析工具

静态代码分析是一种在不执行代码的情况下对代码进行测试的方法,开发人员可以通过 DevOps 平台管理 SonarQube 等静态代码分析工具,自动检测潜在的代码 Bug,如空指针引用、未使用的变量等。

  • 纳入 CI/CD 过程

我们可以将代码评审纳入持续集成和持续交付过程。每当有新的代码提交时,自动触发构建、测试和评审流程。这样可以及早发现问题,并确保高质量的代码被纳入主干分支。

  • 数据分析和报告

DevOps 平台可以收集和分析代码评审的数据,提供有关代码质量和审查效率的指标和报告。这些数据可以帮助团队了解代码评审的效果,并进行持续改进。例如,通过分析代码评审的结果和 Bug 的修复时间,团队可以识别代码质量问题的瓶颈,并采取相应的措施进行改进。
DevOps让代码评审自动化

三、写在最后

一个成熟的团队中,代码评审是整个研发流程中不可或缺的一步。我们注重代码审查的前提是一定要注重代码规范,统一的代码规范才有助于项目研发有效推进。

在此分享一下,禅道团队的代码规范原则:

  • 是否是驼峰还是匈牙利方法不重要,重要的是执行;

  • 最重要的是命名,与其绞尽脑汁写注释,不如想象如何命名;

  • 好的版式易于阅读,学会用换行和注释做代码片段区隔;

  • 注释最重要是正确,一定要和代码保持同步。

通过上文,我们不难看出,DevOps 在代码评审方面发挥着积极作用,能够提高代码评审的效率。 **禅道积极响应市场,推出了禅道DevOps平台版,这不仅仅打通了从产品、需求、项目到开发、测试、运维环节,**还具有加快交付速度、提高交付质量、减少团队摩擦、实现快速反馈等优势。

禅道DevOps平台

(禅道DevOps平台)

“冰冻三尺非一日之寒,滴水石穿非一日之功”。虽然代码评审会耗费团队不少的精力和时间,但我们不能低估它的长期价值,坚持下去必然会让整个代码库、系统甚至团队更加健康。

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

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

相关文章

面试宝典(1)——数据库篇(MySQL)

面试宝典(1)——数据库篇(MySQL) 1.什么是索引? 索引是一种用于加快数据库查询速度的数据结构。 索引可以帮助数据库快速定位到数据库表中特定列的记录,从而加快数据检索和查询的速度。 通过在表的列上…

使用Azure AI Search和LlamaIndex构建高级RAG应用

RAG 是一种将公司信息合并到基于大型语言模型 (LLM) 的应用程序中的常用方法。借助 RAG,AI 应用程序可以近乎实时地访问最新信息,团队可以保持对其数据的控制。 在 RAG 中,您可以评估和修改各个阶段以改进结果&#x…

Web3钱包开发获取测试币-Base Sepolia(二)

Web3钱包开发获取测试币-Base Sepolia(二) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b0c0ac86b04a496087471388532bc54a.png) 基于上篇 Web3钱包开发获取测试币-Polygon Mumbai(一) :https://suwu150.blog.csdn.net/article/details/137949473 我…

Git 仓库内容操作

Git 仓库内容操作 | CoderMast编程桅杆Git 仓库内容操作 添加文件到暂存区 使用如下指令将工作区的文件添加到暂存区,告诉 Git 在下次 commit 时哪些文件做出了修改。 commit 指令详看后续 添加一个或多个文件到暂存区: 添加指定目录到暂存区 添加当前目…

使用 ArcGIS 对洪水预测进行建模

第一步 — 下载数据 所有数据均已包含在 Esri 提供的项目压缩文件中。我将创建一个名为“Stowe_Hydrology.gdb”的新地理数据库,在其中保存这些数据以及创建的所有后续图层。 1-0。斯托市边界 斯托城市边界是佛蒙特州地理信息中心提供的矢量要素类面。我将这一层称为“Stow…

2018年华三杯山东省赛决赛实验

2018年华三杯山东省赛决赛实验 拓扑图 配置需求 请考生根据以下配置需求在 HCL中的设备上进行相关配置。 网络设备虚拟化 数据中心交换机需要实现虚拟化。支持的虚拟化技术 IRF,所配置的参数要求如下: 链形堆叠,IRF Domain 值为 10; IRF1的 member ID 为 1,IRF2的 member …

【MySQL】Linux环境下MySQL基本操作

目录 一、登录进入MySQL 二、MySQL数据库的查看、创建、删除、重命名、拷贝操作 三、数据库下表的创建、删除、查看、修改(增加、删除、更新字段/列,修改字段/列名) 四、表中数据的插入、删除、查找、更新 一、登录进入MySQL mysql -u u…

Spring的过滤器、拦截器、切面区别及案例分析

Spring的过滤器、拦截器、切面 三者的区别,以及对应案例分析 一、三者的实现方式 1.1 过滤器 xxxFilter 过滤器的配置比较简单,直接实现Filter接口即可,也可以通过WebFilter注解实现对特定URL的拦截,Filter接口中定义了三个方法…

Java 网络编程之TCP(一):基于BIO

环境: jdk 17 IntelliJ IDEA 2023.1.1 (Ultimate Edition) Windows 10 专业版 22H2 TCP:面向连接的,可靠的数据传送协议 Java中的TCP网络编程,其实就是基于常用的BIO和NIO来实现的,本文先讨论BIO; BIO…

【STM32+HAL+Proteus】系列学习教程---RS485总线(收发仿真实现)

实现目标 1、掌握UART/USART/RS485等几个常见概念的区别 2、掌握RS485的逻辑电平、硬件接线等基础知识 3、具体实现目标:1、利用两个单片机组成RS485通信网络;2、两个单片机之间能实现正常收发数据。 一、串口、RS485等之间的关系 串口:是…

计算机网络学习day02|HTTP协议

目录 一、HTTP报文格式长什么样?是如何分割的? 请求行 状态行 头部字段 常用头字段 小结 二、HTTP提供了哪些方法?GET和POST的区别是什么? 1.HTTP有哪些方法 2.GET/HEAD 3.PSOT/PUT 小结 三、URI和URL URI 的格式 U…

『FPGA通信接口』串行通信接口-IIC(2)EEPROM读写控制器

文章目录 1.EEPROM简介2.AT24C04简介3.逻辑框架设计4.随机读写时序5.仿真代码与仿真结果分析6.注意事项7.效果8.传送门 1.EEPROM简介 EEPROM (Electrically Erasable Programmable read only memory) 是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。在嵌入…