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 开源指南针。保留所有权利。