当前位置: 首页 > news >正文

B站技术债务治理实战:存量修复加增量拦截的双轨治理体系

本文整理自QCon北京《何之真 - B站的存量修复和增量拦截》,通过AI音视频总结工具Ai好记视频转文字转录整理,以下为精炼整理后的会议笔记内容。

讲到技术债务治理,很多团队的第一反应是搞专项治理,短期把告警曲线降下来,过一阵子又反弹回去,然后再来一次专项。

B站工程技术团队的这篇分享提出了一个不同的思路:存量修复和增量拦截双轨并进,加上AI深度参与,构建一套可持续、自动化的技术债务治理体系。

整场内容对在中大型互联网公司做工程效能、开发者工具、代码治理的人都很有参考价值。

痛点:为什么技术债务治理这么难

B站除了视频,业务还包括直播、社区、生态、游戏、漫画、大会员、商业等,语言也很丰富,主力是 Java、Go、C++,移动端还有 Kotlin、Swift、鸿蒙等,代码仓库量级大且持续增长。

单以用户技助中心为例,整体代码量六七千万行,平均每人十几万行,每季度新增数百万行,而主站研发只有五六百人的规模。

传统治理有几个绕不开的问题:

  • 专项治理不治本:是临时性、阶段性的动作,无法常态化,还会打断正常开发节奏,人必须做优先级取舍。
  • 问题引入是持续过程:正常迭代、重构、bugfix 都会引入新问题,引入速度往往超过修复速度,债务越来越多。
  • 人工修复周期长:从定位、复现、理解、尝试修复、验证(编译、单测、lint,甚至部署测试环境),到 app owner review 和合入,每一步都靠人,每步都可能因优先级卡住。

核心矛盾在于:修复是单点、离散的行为,而问题引入是持续不断的。所以作者认为要做好治理需要四个能力:

  1. 稳定的修复产能(不依赖人工排期)
  2. 可信的验证链路
  3. 风险分层机制
  4. 有人负责兜底确认问题并处理

AI 在治理中的价值

  • 极大提高修复产能:人工一个一个修,AI 可以批量自动化,还包含验证步骤。
  • 拓展增量拦截:在 MR 阶段的增量拦截里发现更多问题,避免它们变成历史债务。
  • 知识沉淀:修复获得的经验转成 prompt 或 skill 及对应评测级,用于持续优化。
  • 降低修复门槛:原来人要理解规则再改代码,现在 AI 能根据自然语言描述直接修,人只需看修复对不对。

双轨治理总体架构与核心原则

存量修复解决如何清空历史债务,增量拦截解决如何避免新问题合入主干成为新债务。两条轨道互相依赖:

  • 存量修复的产出也是一个 MR,必须通过增量拦截再验证
  • 增量拦截发现的新问题又能作为存量修复的输入扩大范围
  • 存量端 AI 负责执行修复,验证交其他工具和角色
  • 增量端 AI 扩展发现问题的范围并持续提高准确率

四条核心原则:

  1. 双轨并进:存量修复和增量拦截必须同时进行
  2. 风险分层:减少人工介入但保持可控
  3. 职责明确:规则负责发现和验证,AI 负责修复,owner 兜底决策
  4. 回流优化:成功失败结果都回流优化规则、prompt 和策略

存量修复:约束下的批量自动化修复

背景

团队 2024 年做了全公司工程能力建设,为几乎所有应用都增加了增量拦截环节,配置了包含编译、单测、lint(静态代码扫描)的流水线,要求不能有新增 bug,有的团队还要求不能新增异位或漏洞,甚至配置接口测试流水线发现接口不兼容影响。

流程

存量修复流程从 sonar 扫描开始,每个 MR 合并后流水线自动扫描相关应用拿到最新问题数。达到修复阈值后触发自动修复流水线,AI 在约束下工作:

  • 只在自定义 linter 工具和 prompt 指定的问题类型内修复,不在全量问题上自由发挥
  • 只在指定文件范围内修改
  • 修复结果必须通过同一 linter 工具验证
  • 生成的 MR 必须通过增量拦截流水线再次检验,最后由 app owner review 决策合入

为什么是半自动化?

早期试点时对所有有问题的应用每天全量跑修复,但研发正处于紧急新功能迭代,没时间 review,加上主干频繁合入导致 MR 一直冲突、最后不得不用 MR。

后来改成先收集扫描得到的问题数据做报表(按应用等级、部门、问题严重程度),同步给应用负责人,再根据应用重要程度和问题严重程度商定修复阈值,达到阈值才批量触发修复流水线,owner 也更有动力去 review 合入。

效果数据

  • 用户技助中心代码异位从第一季度最高 1 万 4 千多降到接近平缓的 1 千 1 百多
  • 叠加上其他业务整体一个季度下降约 90%
  • bug 数因为工程能力建设加增量拦截,长期维持在个位数

增量拦截:在主干之外拦下新问题

AI 是对原有 CI 流程的补充增强。MR 的增量拦截流水线必跑编译、单测、lint,部分开启 AI 能力的仓库还会跑 AI 相关的流水线,比如 AI CodeReview、单元测试补充、接口测试补充。

所有流水线跑完后汇总结果,参考配置判断哪些弱软性失败不阻塞合入,综合得到 MR 是否 ready 合入的状态。

研发能看到问题描述和修复建议;对 AI 部分的问题可据建议修复,其他常规编译问题自行处理或暂缓。最终 owner 再做一次 review 决定合入。

AI CodeReview:对传统 lint 的补充而非替代

传统 lint 的局限:

  • 要把经验固化成规则由工具执行,确定性极强
  • 只能发现能形式化表达的问题
  • 基于单行或局部模式匹配

AI CodeReview 的优势:

  • 可以用自然语言描述审查意图
  • 能理解代码上下文、函数模块调用链,甚至变更意图
  • 从而发现难以规则化的逻辑和规范问题
  • 具备需求视角,能对照需求、接口约束、预期行为判断实现有没有偏差
  • 可构建数据闭环,审查结果(人工反馈、误报分析、问题归因)回流去迭代提示词、更新规则,提升识别能力和准确度

分层处理很关键:

  • 对代码本身的审查是高置信度结论,作为阻塞合入的门槛,有问题必须修复
  • 对需求实现的理解和评估是低置信度结论,只作为提示不阻塞,供研发参考

目前 AI CodeReview 只对一部分仓库开启,开启范围内准确率在 85% 以上。

AI 补充单元测试:围绕 MR 变更函数

流程:

  1. 从 MR diff 获取变更函数
  2. 用代码图谱加静态分析梳理这些函数的下游依赖
  3. 先去远端存储找现成单测执行并看覆盖率,超过阈值就结束
  4. 否则生成新测试
  5. 生成时在 prompt 里提供整条函数链路信息
  6. AI 生成的测试文件可能编译不过,会有修复编译循环(把编译报错、堆栈喂给 AI 修)
  7. 之后做两轮分析:
    • 第一轮用变更函数及下游依赖信息对失败 case 归因,把非代码问题(环境、框架)的失败去掉,但不简单丢弃而是人工收集处理
    • 第二轮给 AI 完整代码库梳理上下游依赖,去除无效 case(比如针对防御性编程的失败用例)
  8. 最终保留 AI 认为有效并经部分人工确认的用例保存云端复用

当前状态:

  • 上线不到一个月,增量覆盖率约 85%
  • 正确率还没到门槛(AI 标注有效 28 条、人工标注完成 22 条里 12 条有效、准确率 54.5%)
  • 暂时不把它作为合入门槛,等正确率提到 80% 到 90% 再考虑

AI 补充接口测试:覆盖率驱动的迭代闭环

整体设计:
整体是两层循环。外层循环生成测试用例,内层循环修复测试用例执行中的问题。

设计原则:

  • 尽可能覆盖未覆盖的链路
  • 一轮只生成一个测试用例(避免批量生成互相干扰)
  • 内层也一次只修一条问题(批量修容易出现级联问题、排查困难)

执行过程:

  1. 基于 mock 回放工具,发现下依赖缺失或 mock 内容不对就修
  2. 对时间戳、随机值这类高波动内容通过策略忽略
  3. 最后一轮数据链路复盘,比较接口实际响应和预期是否一致
  4. 不一致时让 AI 根据应用日志做完整归因复盘,输出交人工确认

当前状态:
目前是内部试点,效果波动较大,好的应用两三轮就能到 60% 覆盖率。

总结与展望

核心观点:

  • 技术债务治理本质是持续运行的系统,不能靠一两次专项完成
  • 存量修复和增量拦截必须同时做
  • 验证要优先,AI 或人工修复都先通过验证再人工 review 合入

当前局限:

  • 存量修复主要覆盖少部分低风险类型的规则
  • 补充单测和接口测试都还处于小规模试点

未来方向:

  • MR 合入最终还是由 owner 决定,后续可以尝试更精细的分层机制让某类问题自动修复
  • 持续优化成本
  • 总体落地思路是:先证明局部成立,再平台化扩张

以上内容由 Ai好记 转录整理。
Ai好记是一款支持音视频转图文笔记的AI知识库工具,支持B站、小红书、抖音、小宇宙等平台链接及本地音视频文件,视频转文字后自动生成精华速览、思维导图和结构化图文笔记,帮助你把几小时的视频内容变成可搜索、可复习的图文笔记。

http://www.jsqmd.com/news/1347968/

相关文章:

  • 重庆PC光扩散板生产供应|重庆连创新型建材匀光照明与广告灯箱 - 滚动商讯
  • 2026博客转文字对比评测,过来人整理了实操经验
  • 河南哪个武校口碑好?新乡 2026 文武学校实力**,家长收藏备用 - 全国文武学校招生
  • 深度算力成本拆解:Seedance2.5降本75%,AI影视工作室如何通过RunningHub实现利润翻倍? - 资讯报道
  • 终极指南:如何使用PoeCharm中文版轻松构建《流放之路》完美角色
  • OneNote到Markdown迁移终极指南:使用onenote-md-exporter实现无损笔记转换
  • Ryujinx:在PC上开启Switch游戏世界的完美旅程
  • Ubuntu环境 快速安装nginx1.26.2(一)
  • 透过 Agent Skills、MCP 到 Playwright:QA 全链路智能化测试的工程实践
  • azure-cheat-sheet最新更新(2026年4月):新增服务与功能详解
  • 实测盘点:2026 配电柜监控厂家推荐,稳定性、兼容性、售后大对比 - 商业新知
  • 解放双手!这款FGO全自动助手让你告别重复刷本,轻松获取材料
  • 山东格瑞德集团有限公司企业简介 - 滚动商讯
  • 我把B站收藏夹里800个视频转笔记存到了Obsidian,教程来了!
  • Ryujinx Switch模拟器终极指南:免费畅玩4000+款Switch游戏
  • 2026深圳香港留学中介机构评测:博明程、新东方、新航道横向对比 - 品牌深度评测
  • 嘉兴新注册的人力资源公司涉及社保和用工问题,工商财税一体化机构找哪家?|5项专项能力 - 资讯报道
  • Unity Prefab Mode安全修改指南:掌握覆盖管理与自动更新
  • 快速上手apng-canvas:5分钟实现Canvas动态APNG渲染
  • 终极跨平台游戏模组管理指南:5分钟掌握Reloaded-II的强大功能
  • 抓包鹰 端口扫描与子域发现, 主动探测加被动情报的资产盘点
  • 通达信缠论插件:3分钟实现专业缠论分析,告别手动画线烦恼
  • 2026年广东客服外包公司热门**,十大**全新出炉 - 官方资讯
  • 5分钟快速上手:免费开源地图编辑器geojson.io完全指南
  • ABAP2XLSX终极指南:如何在SAP系统中快速生成专业Excel报表
  • 2026 重庆铝合金压铸选型指南:为何新能源零部件优先选择全产业链协同制造工厂? - 市场沸点
  • Snatch常见问题解决:从OpenSSL依赖到线程数优化的全面方案
  • Sonic性能测试报告:9小时音频文件变速仅需50秒的优化技巧
  • 【免费下载】 Windows Auto Dark Mode 安装和配置指南
  • node-tesseract核心原理:揭秘Node.js与Tesseract OCR的无缝集成