0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么diff审查的速度总是那么慢?

jf_WZTOguxH ? 来源:AI前线 ? 作者:AI前线 ? 2022-11-18 14:12 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

代码审查是软件开发过程中最重要的环节之一。如果这项工作做得好,代码审查能够切实帮助我们发现 bug,普及最佳实践并保障代码质量。

近日,Meta 技术团队宣布采用了几款工具和相应流程,很大程度提高了代码审查速率。

Meta 技术团队将针对代码库做出的一组独立变更称为“diff”。虽然 Meta 非常重视开发效率,但每条 diff 也必须经受严格审查,绝无例外。代码审查团队深知审查周期越长,留给开发者们完成工作的时间就会越短。

为此,Meta 技术团队研究了多项指标,希望更多了解哪些代码审查瓶颈最令开发者们感到不满,并积极利用这些结论探寻在不牺牲审查质量的前提下加快审查速度的办法。通过研究发现,缓慢的 diff 审查速度跟工程师们的不满情绪间存在相关性。另外,新研发的工具能够在审查周期的各个关键节点向相应审查人员展示 diff,由此显著改善审查体验。

为什么 diff 审查的速度总是那么慢?

为了回答这个问题,首先需要查看自己的数据。在跟踪了一项名为“审查时间”的指标后,Meta 技术团队发现,需要衡量的是 diff 在单一审查周期内等待审查的时长。这里只计算 diff 等待审查者操作的时间。

f2d3e92e-6702-11ed-8abf-dac502259ad0.png

审查时间(Time In Review)指标,计算的就是图中各蓝色部分(即无意义等待部分)耗费的时间总和。

最终的发现令人惊讶。回顾 2021 年初的数据,研发人员发现 diff 审查时间的中位数(第 50 百分位)只有几个小时,这样的结果还算不错。但如果把目光投向第 75 百分位(即最慢的那四分之一审查),就会发现diff 的审查时间延长到了一整天。

研发人员分析了审查时间跟用户满意度(通过全公司范围内的量化调查)之间的相关性。结果非常明确:速度最慢的那 25% diff 审查,才是决定人们实际体验的核心;这部分耗时越长,大家对代码审查过程的满意度就越低。于是也就得出了最值得关注的改进指标:第 75 百分位(P75)审查时间。

缩短审查时间不单能让人们对整个代码审查过程的满意度更高,也会提高每一位 Meta 工程师的工作效率。缩短 diff 审查时间,意味着工程师耗费在审查上的时间将大大减少、提升工作效率、改善审查体验。

在速度与质量间求取平衡

然而,简单粗暴地加快审查速度绝不是明智之举,甚至会将审查变成毫无意义的走过场。因此需要设置一项护栏指标,防止过快审查带来的负面后果。在这里,研究人员选择了“注视时间”,即审查者花在查看 diff 上的总时长。查看时间过短,即代表审查者很可能是在敷衍了事。

现在已经有了核心指标“审查时间”,也有了护栏指标“注视时间”,接下来要怎么办?

构建、试验和迭代

在 Meta,几乎每个产品团队都会使用试验加数据驱动的流程推进功能发布和迭代。但对于这些内部辅助团队,这样的流程仍然比较新鲜。因此人们需要克服一系列产品团队根本不需要考虑的挑战(样本量、随机化、网络效应等)。研发人员通过运行网络实验积累起数据基准,并利用技术减少方差、增加样本量。事实证明,这些努力都是值得的——通过奠定坚实的试验基础,使得研发团队最终拿出了具有积极影响且行之有效的新一代代码审查方案。

f2e6c1c0-6702-11ed-8abf-dac502259ad0.png

试验过程:根据对代码审查意义和体验设计的假设,选择了目标指标和护栏指标。此外还制定了一套选择不同实验单元以实现随机化抽样的机制,包括用户集群的随机化。

建立“下一可审查 diff”的概念

Meta 技术研发团队表示,关于这个概念的灵感,来自视频流服务。由于每集视频之间会无缝过渡,所以流媒体服务平台上的观看体验总是丝滑顺畅。那能不能把同样的体验引入代码审查当中?通过 diff 队列,他们建立起了类似的 diff 审查流体系,鼓励审查者们充分利用自己的时间和精力。

f31b3996-6702-11ed-8abf-dac502259ad0.png

于是乎,“下一可审查 diff”的概念由此诞生。研发团队使用机器学习识别出审查者当前最可能想要审查的 diff,并在其完成当前代码审查之后,立即把感兴趣的下一 diff 呈现出来。通过这种方式,我们就能轻松把 diff 审查循环起来,同时避免审查者接触到与其不相干的 diff。

新方案上线之后,研发团队发现,日均审查操作(包括 diff 接纳量、提交量等)总体增长了 17%,而使用此流程的工程师们执行的审查操作比未使用的审查员多出 44%!

改进审查者匹配效果

可以看到,新方案的关键在于为 diff 选择适当的审查者。提交者当然希望审查者能够更好、更快地审查自己的代码,特别是要得熟悉相关 diff 的内容和作用。从以往的情况看,Meta 的审查者推荐器会根据一组有限数据给出匹配建议,但这往往无法适应新 diff 的需要,而且在工程师们轮换岗位后又得重新适配。

为此,研发团队建立了新的审查者推荐系统,将工作时间感知和文件归属信息结合起来,这就让有空审查 diff、擅长审查特定 diff 的审查者更可能被选中。我们重写了建议支持模型,添加了回溯测试和自动再训练等功能。

f32b41f6-6702-11ed-8abf-dac502259ad0.png

结果就是,一天之内 diff 审查量增加了 1.5%,而且前三条推荐的准确率(即实际审查者来自前三条推荐)的概率也从不到 60% 增长至近 75%。除此之外,新模型还将推荐速度(第 90 百分位延迟)提升了 14 倍!

用 Nudgebot 解决 Diff 积压问题

我们知道工程师们最不喜欢的就是 diff 积压问题。这不仅让人不爽,而且审查速度过慢还会令代码过时,导致开发者在不同上下文间来回切换、影响整体生产力。为了解决这个问题,Meta 研发团队构建了 Nudgebot,其灵感来自微软所做的相关研究。

对于需要额外长时间审查的 diff,Nudgebot 会首先确定最适合的审查者子集,然后向他们发送一条聊天 ping,其中包含 diff 的部分上下文和快速跳转至审查流程的操作选项。

Nudgebnot 试验也取得了不错的效果。所有 diff 的平均审查时间缩短了 7%(不含周末时段),审查周期超过 3 天的 diff 比例也下降了 12%。

目前此功能已经单独发布:

https://users.encs.concordia.ca/~pcr/paper/NudgeBot2022FSE-preprint.pdf

f339cdd4-6702-11ed-8abf-dac502259ad0.png

这里就是审查者在屏幕上看到的积压 diff 通知,下方还有“稍后提醒我”按钮。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据驱动
    +关注

    关注

    0

    文章

    149

    浏览量

    12618
  • 代码
    +关注

    关注

    30

    文章

    4907

    浏览量

    71240
  • Meta
    +关注

    关注

    0

    文章

    308

    浏览量

    11958

原文标题:Meta 提出代码审查新方案:杜绝代码 Bug,日均代码审查总量增长 17%

文章出处:【微信号:AI前线,微信公众号:AI前线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MySQL查询终极优化指南

    作为一名在生产环境摸爬滚打多年的运维工程师,我见过太多因为查询导致的线上故障。今天分享一套经过实战检验的MySQL查询分析与索引优化方法论,帮你彻底解决数据库性能瓶颈。
    的头像 发表于 08-13 15:55 ?109次阅读

    科普|公司的Wi-Fi,为什么这么

    好了,也搞不定。这是为什么呢?公司的Wi-Fi,到底有什么“苦衷”?█Wi-Fi速率为什么这么?Wi-Fi速度慢,其实说白了,就两种原因:一是北向的出口带宽小。水
    的头像 发表于 06-20 06:06 ?638次阅读
    科普|公司的Wi-Fi,为什么这么<b class='flag-5'>慢</b>?

    华益精点闪耀第91届CMEF 引领病管理新时代

    2025年4月11日,第91届中国国际医疗器械博览会(CMEF)圆满落下帷幕。在这场全球医疗行业的顶级盛会上,华益精点以“病管理全场景解决方案”为主题盛大登场,引发业界广泛关注与热议。 互联互通
    的头像 发表于 04-17 16:20 ?316次阅读
    华益精点闪耀第91届CMEF  引领<b class='flag-5'>慢</b>病管理新时代

    SMT贴片前必知!PCB设计审查全攻

    一站式PCBA打样工厂今天为大家讲讲PCB贴片加工厂家对PCB设计进行审查和确认需关注哪些问题?SMT贴片加工前的PCB设计审查流程。在SMT贴片加工中,PCB设计的审查和确认是确保加工质量和生产
    的头像 发表于 04-07 10:02 ?393次阅读

    MCUXpresso_24.12.148/FRDM-K22F调试会话启动速度非常,怎么解决?

    任何错误消息。加载速度非常。加载 Debug 会话后,调试似乎以正常的响应速度进行。 如果我构建并调试一个 NXP 示例项目,则 Debug 会话几乎立即出现 - 只需几秒钟。 我在 Ubuntu 22.04 上构建。 请
    发表于 04-02 08:26

    使用Diff-Amp Calculator软件计算时得出的反馈电阻RF,再根据RF计算增益和软件计算的增益相差较大,怎么解决?

    使用Diff-Amp Calculator 软件计算时得出的反馈电阻RF,再根据RF计算增益和软件计算的增益相差较大。求各位工程师解答。
    发表于 03-24 06:56

    使用iic对mpu9250进行读取数据,读取磁力计数据时采用的是主控iic方式,但是读取的速度特别,为什么?

    使用iic对mpu9250进行读取数据,读取磁力计数据时采用的是主控iic方式,但是读取的速度特别,几秒一次,网上说磁力计数据输出的速率最快是100hz,几秒一次也太慢了;另外在初始化函数中开启了延时,但是一次读取6个字节的数据,只能读到前两个字节,后四个字节全为0,请
    发表于 03-14 07:40

    在CM32M433R MCU上调用riscv_sqrt_f32()函数的计算速度比直接调用sqrtf()要,为什么?

    在CM32M433R MCU上调用riscv_sqrt_f32()函数的计算速度比直接调用sqrtf()要, 计算一次riscv_sqrt_f32大概54 cycles;sqrtf()大概29 cycles,FPU宏已打开,求助是什么问题。
    发表于 03-07 14:18

    为什么PMOS关断时这么

    请大佬指点一下为什么PMOS关断时这么
    发表于 03-04 17:16

    OpenAI尝试减少对ChatGPT的审查

    ,这一政策的实施将使得ChatGPT能够回答更多的问题,提供更多的视角。在过去,由于审查机制的存在,ChatGPT对于一些敏感或争议性话题往往保持沉默,不愿过多涉及。然而,随着新政策的推行,ChatGPT将逐渐减少对这类话题的回避,以更加开放和包容的态度面对
    的头像 发表于 02-17 14:42 ?3187次阅读

    调试ADS1299 EEG开发板,读取寄存器的速度特别,为什么?

    大家好,我最近在用ads1299作开发,原来实验室有留下一套ADS1299 EEG 开发板,现在拿来调试,但是发现读取寄存器的速度特别,读一次数据要十几分钟,而且通过GUI看不到波形,读取
    发表于 12-25 07:37

    Altium 365解决方案解锁高效设计审查之道

    大量的工程设计审查:无论是在项目的前端还是在制造的后端,每一个环节都需要反复核查。
    的头像 发表于 12-20 15:56 ?963次阅读
    Altium 365解决方案解锁高效设计<b class='flag-5'>审查</b>之道

    ADS1258 DIFF0在检测500uV及以下电压时产生严重失真的原因?怎么解决?

    ADS1258 DIFF0在检测500uV及以下电压时产生严重失真。
    发表于 11-22 09:32

    ADS1258设置BYPASS = 0 , DIFF0通道offset较大是怎么回事?

    自己做的测试板,MUXOUTP/MUXPUTN 后面无添加任何器件,直接连接至ADCINP/ADCINN,AVDD= 5V, DVDD = 3.3V, BYPASS = 0 时,测量DIFF
    发表于 11-19 08:27

    TLV320AIC33模拟输入端口电压上升怎么解决?

    可以说话出去。速度有点,之前设计的产品我有过对比,一般都是在初始化完成后立即可以到达1.3V。 搞了两个星期没有任何进展,求帮助。
    发表于 10-12 08:34