Code Review 最佳实践

成功的同行评审策略要求严格记录的流程与非威胁性、协作性环境之间保持平衡。高度规范的同行评审可能会抑制生产力,然而,过于随意的流程往往效果不佳。经理们需要找到一种折中方案,使同行评审既高效又有效,同时促进团队成员之间的开放交流和知识共享。

10 条指导你进行同行代码有效评审的建议

1、每次审查的代码行数不超过 400 行

SmartBear对思科系统编程团队的研究表明,开发人员一次应该审查不超过200到400行的代码(LOC)。大脑一次只能有效地处理这么多信息;超过400LOC,发现缺陷的能力就会减弱。

在实际操作中,60到90分钟内对200-400LOC的审查应该能够发现70-90%的缺陷。因此,如果代码中存在10个缺陷,正确进行的审查将发现其中7到9个。

2、慢慢来。检查速度应该低于每小时500行代码(LOC)

在合理数量下,以较慢的速度,在有限的时间内进行代码审查,会获得最有效的代码审查结果。

 3、一次 Code Review 不要超过60分钟

正如你不应该过快地审查代码一样,你也不应该一次性审查过长时间。当人们从事任何需要集中一段时间精力的活动时,在大约60分钟后性能开始下降。研究表明,在一段时间内从任务中休息可以大大提高工作质量。进行更频繁的评审应该减少需要进行如此长时间评审的需求。

4、设定目标并获取指标

在实施流程之前,您的团队应决定如何衡量同行评审的有效性,并列出一些具体的目标。

使用SMART标准,首先从外部指标开始。例如,“将支持电话减少15%”或“将开发引入的缺陷百分比减半”。这些信息应该为您提供了您的代码如何改进的量化图像。“修复更多错误”不是有效的目标。

监视内部流程指标也很有用,包括:

  • 检查率:进行审查的速度
  • 缺陷率:每小时审查中发现的错误数量
  • 缺陷密度:每行代码平均发现的错误数量

实际上,只有自动化或严格控制的流程才能提供可重复的指标。以指标为驱动的代码评审工具可以自动收集数据,从而确保您的信息准确且不受人为偏见的影响。为了更好地了解有效的代码评审报告,您可以看看我们的代码评审工具Collaborator是如何做的。

5、作者应在审核前对源代码进行注释

在审核前,作者应对代码进行注释,因为注释会引导审核员查看更改内容,指出应先查看哪些文件,并解释每次代码修改的原因。注释应针对其他审核员,以简化过程并提供更多上下文信息。此外,作者通常会在同行评审开始前发现更多错误。在同行评审之前发现更多错误将降低缺陷密度,因为总体上存在的错误较少。

6、使用检查清单

团队中的每个成员很可能反复犯同样的 10 个错误。特别是遗漏是最难发现的缺陷,因为很难审查不存在的东西。检查表是消除经常出现的错误以及应对遗漏发现挑战的最有效方法。代码审查检查表还为团队成员提供了每种审查的明确期望,并有助于跟踪报告和改进流程的目的。

7、建立缺陷修复流程

即使通过限制审查时间、每小时审查的代码行数以及为团队命名关键指标来优化代码审查流程,仍然缺少一个关键的审查步骤。这些错误该如何修复?这似乎是显而易见的,但许多团队却没有系统的方法来修复他们千辛万苦找到的bug。

确保缺陷得到修复的最佳方法是使用协作式代码审查工具,让审查者能够记录bug,与作者讨论,并批准代码中的更改。如果没有自动化工具,审查中发现的bug可能不会被记录在团队的常规缺陷跟踪系统中,因为它们在代码发布到QA之前就被发现了。

8、培养积极的代码评审文化

同行评审会对团队人际关系造成压力。让同事评审你的每一行代码,以及让管理人员评估和测量你代码中的缺陷密度,都是一件困难的事情。因此,为了同行代码评审的成功,管理人员必须创建一种协作和学习的文化,这一点极其重要。

虽然很容易将缺陷视为纯粹的负面因素,但每个缺陷实际上是团队提高代码质量的一次机会。同行评审还允许初级团队成员从高级领导那里学习,甚至是最有经验的程序员也能改掉坏习惯。

在同行评审中发现的缺陷不能作为评估团队成员的一个可接受标准。从同行代码评审中拉出的报告绝不应用于绩效评估报告。如果个人指标成为补偿或晋升的基础,开发人员将对这一过程产生敌意,并自然而然地关注提高个人指标,而不是编写更好的整体代码。

9、接受同行评审的潜意识影响 

知道别人会检查自己的代码,自然会促使人们创造更好的代码。这种“自我意识效应”自然激励开发者编写更干净的代码,因为他们的同事肯定会看到。SmartBear 对思科系统的研究表明,抽查20%至33%的代码,就能以最少的时间投入降低缺陷密度。如果你的代码有1/3的机会被叫出来审核,那就有足够的动力去复查你的工作了。

10、轻量级代码审查实践

电子邮件、肩并肩、微软Word、工具辅助以及所有类型的混合协作代码评审方法不胜枚举。但是,为了充分优化团队的时间并有效衡量其成果,建议采用轻量级、工具辅助的流程。

SmartBear对思科系统的研究发现,轻量级代码评审所需时间不到正式评审的20%,而发现的错误数量则一样多!正式或重量级的检查平均需要每200 LOC(Lines of Code,代码行数)9小时。虽然这种方法通常有效,但这种僵硬的过程需要多达6名参与者,并且需要数小时的时间来浏览详细的代码打印输出。

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

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

相关文章

特斯拉铺路 小米SU7稳了

文 | AUTO芯球 作者 | 李逵 我把特斯拉的销售拉黑了 拉完又后悔了 因为我欠他一个人情啊 具体怎么回事 看完你就会明白了 今天一大早 特斯拉的销售就发信息给我 说从4月1号开始 特斯拉就要涨价了 我以前去看的Model Y 要提价5000块 而且之前的补贴 什么保险补贴、…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接: https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站: https://chat.xutongbao.top

「媒体宣传」媒体邀约几种常见方法!-51媒体

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约的常见方法确实包括电话邀约、邮件邀约、社交媒体邀约以及通过媒体公关公司代邀约等。 电话邀约:这是一种直接且高效的方式,可以通过电话与媒体记者沟通&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示: Keral指令对应的基础用法如下所示: 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试:

强化安全防护:升级桌面网管软件提升医院信息系统安全

在当今信息化发展的时代,医院作为重要的医疗服务机构,对终端设备的管理尤为重要。然而,随着国家对医院终端管理的要求日益提高,传统的桌面网管软件已经难以满足现代医院的需求。针对这一现状,升级桌面网管软件已成为当…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resol…

HCIA-Datacom实验_03_实验一:华为VRP系统基本操作

1.运行eNSP,设置-界面设置-自定义界面-设备标签,“总显示接口标签” 打钩。 2.按照实验拓扑添加设备 注:如果是真实环境,需要接两条线: (1)串口线:电脑USB口到网络设备Console口&am…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象(AD Impression)第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

网络安全-提权篇

我们在文件包含的时候可以将错误的用户名包含进日志,但是权限问题让人很烦恼,今天的侧重点主要是跟大家聊一聊提权 用户名包含进日志参考:RCE with LFI and SSH Log Poisoning - Hacking Articles 目录 一、环境 二、看看权限(…

17、GateWay和Sentinel继承实现服务限流

注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、需求说明 cloudalibaba-sentinel-gateway9528 保护 cloudalibaba-provider-payment9001 2、启动nacos服务器8848 startup.cmd -m standalone 3、启动sentinel服务器8080 java -jar sentinel-dash…

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springbootmybatislayui】 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

深入Facebook的世界:探索数字化社交的无限可能性

引言 随着数字化时代的到来,社交媒体平台已经成为了人们日常生活中不可或缺的一部分,而其中最为突出的代表之一便是Facebook。作为全球最大的社交媒体平台之一,Facebook不仅仅是一个社交网络,更是一个数字化社交的生态系统&#…

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注:本文来自Flexera2024年的云现状调研报告的翻译。原报告地址: https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司,有30年发展历史,5万名客户,1300名员工。Flex…

鸿蒙OS开发实例:【工具类封装-http请求】

import http from ohos.net.http; import promptAction from ohos.promptAction; 封装HTTP接口请求类,提供格式化的响应信息输出功能。 使用 DevEco Studio 3.1.1 Release 及以上版本,API 版本为 api 9 及以上。 示例: import { MyHttpUtil…

代码随想录 Day59 单调栈

42接雨水问题,很巧妙,我一开始的思路是需要两个单调栈,一个是递增,一个是递减,分别遍历,从而得到当前方块的与两边的高度差,但是看过卡哥的思路,就会明白其实另一次的比较已经在入栈…

Docker中常见的命令行

1 docker的全部命令 docker attach #连接到正在运行中的容器 docker build #使用 Dockerfile 创建镜像 docker builder #管理builds docker builder prune #清除build缓存 docker checkpoint #管理checkpoints docker checkpoint create #从正在运行的容器创建检…

3d放上模型为什么渲染不出来---模大狮模型网

如果在3D软件中放置模型后无法正确渲染出来,可能有几个常见的原因导致这种情况发生: 材质设置问题:确保所放置的模型具有正确的材质和纹理,并且材质设置正确。如果材质设置有误,可能会导致模型无法正确显示。 光照设置…

【面试题】数据底层原理:Elasticsearch写入流程解析

前言:本篇博客将介绍Elasticsearch的数据底层原理,涉及数据写入的过程以及相关概念。我们将深入探讨buffer、translog、refresh、commit、flush和merge等核心概念,帮助您更好地理解Elasticsearch的数据存储机制。 写入数据的基本过程 Elast…

BaseDao封装JavaWeb的增删改查

目录 什么是BaseDao? 为什么需要BaseDao? BaseDao的实现逻辑 什么是BaseDao? Basedao 是一种基于数据访问对象(Data Access Object)模式的设计方法。它是一个用于处理数据库操作的基础类,负责封装数据库…

不显示excel中零值方法

excel中想让数字0不显示的方法如下: √去掉则数字格式0不再显示 。若找不到此项,运行以下代码即可: Sub 去除excel中零值() ActiveWindow.DisplayZeros False 不显示零值 End Sub altf11打开vba idea,插入->模块&#xff…