首页/开发/代码质量与评审速查/代码所有权与巴士系数
技术债与度量63 条

代码所有权与巴士系数

巴士系数指关键模块失去多少成员后会停摆:单点所有权(一人精通)风险高;用提交历史看模块的知识分布,通过结对、评审与轮岗降低集中度,而不是追求人人均等。

巴士系数与代码所有权

巴士系数指的是关键模块在失去多少名成员之后会停摆:数值为一说明该模块只有一个人真正熟悉。判断方式不是凭印象,而是看提交历史里模块的贡献者分布与集中度。风险不在于是否有多人提交过代码,而在于关键决策与细节是否只存在于一个人的记忆中。降低集中度的常见手段是结对、评审轮换与决策文档化。

观察与手段

度量对象模块级的贡献者分布与提交占比
风险表现唯一熟悉者休假或离职时,模块改动被阻塞
主要手段结对开发、评审轮换、关键决策文档化
注意目标是分散关键知识,不是追求数量上的平均

典型使用场景

  • 排期风险评估:接手需求前先看模块的知识集中度,评估阻塞概率
  • 人员变动应对:确认关键模块是否有第二熟悉人可临时接手
  • 新人融入:安排集中度高的模块作为结对学习对象
  • 评审人分配:让非主力贡献者参与该模块评审,逐步扩大熟悉范围
  • 文档补强:为仅一人熟悉的模块补齐设计决策与排障说明

分析思路

分析思路
# 按模块统计近 12 个月的贡献者与提交占比
主力贡献者占比超过 80%   → 标记为高集中度
第二贡献者占比低于 10%   → 缺少有效的备份知识

# 对应动作
指定第二负责人,安排结对任务与轮流评审
补齐设计决策文档与排障手册

集中度与动作

集中度风险建议动作
单人占比极高人员变动即停摆结对开发,指定第二负责人
两人分担短期可控,缺少第三人评审轮换扩大到其他成员
多人分散知识分布相对健康保持评审轮换与文档更新
挂名贡献者多看似多人实际无人深耕核对提交质量,避免用人数代替深度
关键模块无人维护变更时无人能评审明确归属并安排接手
判断标准应包含活跃度:仅统计提交过代码的人,会把早期参与或格式调整的提交也算进来,形成人数虚高的假象。按时间段与提交内容过滤后再看分布更有意义。
不要追求人人均等:让所有人平均参与所有模块,会导致没人真正深入。合理做法是在高集中度模块上确保至少有一名可接手的第二人,其他模块维持自然分工。

落地检查清单

  • 关键模块有明确的第二熟悉人
  • 结对与评审轮换有具体安排,而不只是口号
  • 设计决策与排障步骤有文档记录
  • 统计时过滤非实质贡献,避免人数虚高

易错点

  • 强推全员共担:人人参与所有模块,结果没人深入,模块失去真正的深耕者
  • 只看人数不看活跃度:挂名贡献者掩盖单点风险,人员变动时才发现无人可接手
  • 只做统计不做安排:知道哪里集中度高,但没有结对与轮换动作,风险依旧
  • 把文档当唯一手段:缺少动手机会时,文档无法替代实操经验

数据来源与参考

  • 软件团队风险度量实践(bus factor / knowledge distribution)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌