协作开发指数
开源项目作为人类群体智能的典型表现,是否能够建立协作式的开发管理,是促成项目成功的关键要素。而代码,作为一个软件项目的最终输出件,是整个社区的核心内容。所以我们围绕一系列与代码贡献相关的间接指标,来评估开发流程管理,社区协作式开发做得如何。
评估模型中的指标
代码参与者数量
- 定义:确定在过去 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.000 | 1.111 | 1.250 | 1.429 | 1.667 | 2.000 | 2.000 | 5.000 |
代码提交频率 | 0.900 | 1.000 | 1.250 | 1.250 | 1.429 | 1.667 | 1.667 | 2.500 |
是否维护 | 0.800 | 0.800 | 1.000 | 1.111 | 1.250 | 1.429 | 1.429 | 2.000 |
代码提交关联 PR 的比率 | 0.700 | 0.800 | 0.900 | 1.000 | 1.111 | 1.250 | 1.250 | 2.000 |
PR 关联 Issue 的比率 | 0.600 | 0.700 | 0.800 | 0.900 | 1.000 | 1.111 | 1.111 | 2.000 |
代码审查比率 | 0.500 | 0.600 | 0.700 | 0.800 | 0.900 | 1.000 | 1.000 | 2.000 |
代码合并比率 | 0.500 | 0.600 | 0.700 | 0.800 | 0.900 | 1.000 | 1.000 | 2.000 |
代码行数 | 0.200 | 0.400 | 0.500 | 0.500 | 0.500 | 0.500 | 0.500 | 1.000 |
AHP 分析结果
指标名称 | 特征向量 | 权重 |
---|---|---|
代码参与者数量 | 1.599 | 19.987% |
代码提交频率 | 1.309 | 16.363% |
是否维护 | 1.108 | 13.853% |
代码提交关联 PR 的比率 | 1.009 | 12.612% |
PR 关联 Issue 的比率 | 0.906 | 11.319% |
代码审查比率 | 0.809 | 10.113% |
代码合并比率 | 0.809 | 10.113% |
代码行数 | 0.451 | 5.640% |
一致性检验结果
最大特征根 | CI 值 | RI 值 | CR 值 | 一致性检验结果 |
---|---|---|---|---|
8.034 | 0.005 | 1.410 | 0.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