Skip to main content

协作开发指数

开源项目作为人类群体智能的典型表现,是否能够建立协作式的开发管理,是促成项目成功的关键要素。而代码,作为一个软件项目的最终输出件,是整个社区的核心内容。所以我们围绕一系列与代码贡献相关的间接指标,来评估开发流程管理,社区协作式开发做得如何。

评估模型中的指标

代码参与者数量

  • 定义:确定在过去 90 天内有多少活跃的代码提交者、代码审核者和 PR 提交者。
  • 权重:19.987%
  • 阈值:1000

这里我们重点关注的是与代码贡献直接相关的贡献者数量。作为这个模型的结果性指标,它标识协作开发指数优秀的社区,会聚集越来越多的活跃代码贡献者。我们相信部分 Issue 也与代码贡献相关,如漏洞类,Bug 类,新需求等,最终都会引入代码贡献。但作为通用指标,它很难用统一的方式(如 Bug 类型)来甄别 Issue 在每个项目的具体类型,因为每个项目对 Bug 类型的定义和理解是不同的。 所以我们做出了取舍,只选择 PR 相关和 Code Commit 相关的贡献者作为洞察对象。

代码提交频率

  • 定义:过去 90 天内平均每周代码提交次数。
  • 权重:16.363%
  • 阈值:1000

作为这个模型的结果性指标,它标识项目贡献的持续性和数量。指代项目的整体工作量大小。

是否维护

  • 定义:在过去 90 天内至少提交了一次代码的周百分比 (单仓场景)。在过去 30 天内至少有一次代码提交记录的的代码仓百分比 (多仓场景)。
  • 权重:13.853%
  • 阈值:100%
  • 注:单个仓库和多个仓库的定义是不同的。

这个指标用来判断代码仓是否得到了持续的维护。积极维护的代码仓对漏洞等风险的抵御能力可能会更高些。它与代码提交频率有相关性,但关注重点不同。前者关注周期内代码贡献的数量,后者关注代码贡献的持续性。但是我们不应该对该项指标偏低的项目给出任何直接的结论,需要进一步洞察。

代码提交关联 PR 的比率

  • 定义:在过去 90 天内提交的代码链接 PR 的百分比。
  • 权重:12.612%
  • 阈值:100%

这个指标用来考察是代码提交是否经过了 PR 的审核流程。判断一个项目是否开源,可能我们通过查验它声明的 License 即可。但开源项目是否使用开放式的社区协作模式来开展开发工作,社区是否与开源贡献者、组织合作伙伴共建社区的意愿,仅仅靠 License 是不够的。这里我们通过代码提交是否通过 PR,用公开、透明的方式,告知贡献者此次代码提交的目的,并接受评审,来考察项目的协作意愿程度。

PR 关联 Issue 的比率

  • 定义:确定过去 90 天内新建 PR 关联 Issue 的百分比。
  • 权重:11.319%
  • 阈值:100%

该指标是用来观察代码贡献是否都经过了开放的讨论,例如使用 Issue 的形式。需要注意的是,并不是所有 Issue 都会产生代码贡献,例如咨询类的 Issue,一般就不会产生代码修改。同时,我们也要注意到 PR 是否经历公开讨论,Issue 并不是唯一途径,可能来自于论坛的讨论。所以我们不能一味的追寻该指标的高比例。

代码审查比率

  • 定义:确定在过去 90 天内提交代码中,至少包含一名审核者 (不是 PR 创建者) 的百分比。
  • 权重:10.113%
  • 阈值:100%

如果一个 PR 没有经过其他人 review,就被合入,就会导致代码缺陷或者漏洞被有意或者无意的引入的概率大大提高。代码审查虽然不能全面防范这种风险,但大大改善风险的引入。

代码合并比率

  • 定义:过去 90 天提交代码中,PR 合并者和 PR 作者不属于同一人的百分比。
  • 权重:10.113%
  • 阈值:100%

该指标是与代码审查比率配套观察的指标。当我们引入第三方 review,但如果 PR 的建立者故意或者无意忽略了第三方给出的评审意见,自行合入了代码,风险同样存在。 需要注意的是,代码审查比率代码合并比率是我们观察到的业界最佳实践,而不是唯一标准,我们同样看到一些社区基于对一些优秀、长期贡献者的信任,授予了这些人自建代码合入的权力。

代码行数

  • 定义:确定在过去 90 天内平均每周提交的代码行数 (增加行数加上删除行数)。
  • 权重:5.640%
  • 阈值:300000

源代码行数与工作量确实是强相关的,但它与创造的价值相关性较差。另外什么形式的代码可以算入 LOC,都是不确定因素。我们不关注代码形式,只用其描述工作量,其权重在整个度量模型较低。

评估模型算法

权重

我们使用 AHP 来计算每个指标的权重。

AHP 输入数据

指标名称代码参与者数量代码提交频率是否维护代码提交关联 PR 的比率PR 关联 Issue 的比率代码审查比率代码合并比率代码行数
代码参与者数量1.0001.1111.2501.4291.6672.0002.0005.000
代码提交频率0.9001.0001.2501.2501.4291.6671.6672.500
是否维护0.8000.8001.0001.1111.2501.4291.4292.000
代码提交关联 PR 的比率0.7000.8000.9001.0001.1111.2501.2502.000
PR 关联 Issue 的比率0.6000.7000.8000.9001.0001.1111.1112.000
代码审查比率0.5000.6000.7000.8000.9001.0001.0002.000
代码合并比率0.5000.6000.7000.8000.9001.0001.0002.000
代码行数0.2000.4000.5000.5000.5000.5000.5001.000

AHP 分析结果

指标名称特征向量权重
代码参与者数量1.59919.987%
代码提交频率1.30916.363%
是否维护1.10813.853%
代码提交关联 PR 的比率1.00912.612%
PR 关联 Issue 的比率0.90611.319%
代码审查比率0.80910.113%
代码合并比率0.80910.113%
代码行数0.4515.640%

一致性检验结果

最大特征根CI 值RI 值CR 值一致性检验结果
8.0340.0051.4100.003通过

阈值

我们选择的阈值是基于不同类型开源项目的大数据观测。

参考文献

贡献者

前端

  • Shengxiang Zhang
  • Feng Zhong
  • Chaoqun Huang
  • Huatian Qin
  • Xingyou Lai

后端

  • Yehui Wang
  • Chenqi Shan
  • Shengbao Li
  • Huatian Qin

评估模型

  • Yehui Wang
  • Liang Wang
  • Chenqi Shan
  • Matt Germonprez
  • Sean Goggins
  • Vinod Ahuja

Copyright © 2022 开源指南针。保留所有权利。