Skip to main content

基于熵的开源软件Fork副本多样性度量方法

汪亮1,2^{1,2},郑智文1,2^{1,2},吴向臣1,2^{1,2},桑百惠1,2^{1,2},张洁芮1,2^{1,2},陶先平1,2^{1,2}

1^1南京大学计算机科学与技术系,计算机软件新技术全国重点实验室 2^2开源指南针(OSS Compass)

摘要

本研究聚焦于开源软件(OSS)平台上的项目副本,围绕衡量和理解开源软件项目中副本多样性展开。本文通过构造基于 Rao 二次熵的新型副本熵,并基于项目文件的修改来衡量这种多样性。实证研究表明,开源项目的副本熵与不同的主效应之间存在显著相关性,其中包括项目的外部生产力(由外部贡献者的提交数量度量)、外部贡献者 pull-request 的接受率以及已报告的 bug 数量。此外,我们还观察到副本熵与其他因素(如副本数量)之间存在显著的交互作用。这些结果表明,副本熵作为一个有效指标,不仅丰富了当前关于开源软件项目副本的可用度量,还进一步加深了基于副本仓库开源软件发展过程的认识,并且有望支持进一步的研究和应用。

一、引言

在本部分研究内容中,我们在基于副本的开源群智软件开发场景中对副本多样性和开源项目的成长与健康之间的关联关系进行了研究。尽管已有许多研究关注产生副本的原因、副本间的通信和副本自身的特征与影响,但目前除了简单的副本数量外,很少有定量指标能简洁而深入的描述一个开源软件项目的副本发展状态。此外,现有围绕开源项目的工作主要聚焦于开源项目的主仓库,未包括副本仓库在内的全局视角上对开源项目进行深入地审视和分析,具有一定的局限性,不利于研究者和从业者更好地把握项目的现状以及引导项目的发展。综上所述,受生态学中的生物多样性理论(即一个生态系统的物种越多样,该生态系统的健康状态越好)的启发,我们尝试从副本多样性的角度对开源项目的成长和健康展开研究。具体而言,在本研究中,我们围绕以下三个研究问题开展研究:

  • RQ1: 副本多样性对于副本仓库向主仓库贡献的外部生产力有何影响?
  • RQ2: 副本多样性对于主仓库对副本仓库贡献的接收效率有何影响?
  • RQ3: 副本多样性与开源软件项目报告的 bug 数量有何关系?

具体的研究方法和实证研究结果如下所述。

二、基于熵的开源软件度量方法

如图 1 所示,在本工作中提出的指标计算过程包括三个步骤,数据预处理、构建文件修改矩阵和计算副本熵。

1.PNG

图 1. 所提出的方法总览

本研究过程的所有数据皆来自 OSS Compass、GHTorrent 中关于开源软件项目和对应副本集合的文件修改记录。首先,我们对原始记录数据进行预处理,包括基于副本的数据清洗与划分。数据清洗规则包括:副本仓库中至少由一个外围开发者创建过一个非空的 commit、非空的 commit 指至少修改或新建了一个文件的 commit。数据划分过程是基于时间窗口进行的。在本研究中,目前我们主要聚焦于在一个月的时间跨度中对由开源软件副本仓库创建的 commit 的多样性进行度量。数据预处理后的 commit 分布如图 1(a)所示,其中阴影区域是为一个有效快照,其中包含该时段内所有有效的 fork 和对应 commits 集合。

其次,我们根据每个划分后的快照构建文件修改矩阵。公式(1)表示的是文件修改矩阵的第ii行,其中下标ii表示的是有效副本编号,nn表示的是这个快照内所有副本的有效文件修改合集的编号,相应的分量取值ci1c_{i1}代表的即是在第ii个副本在位序为11的文件中修改规模的记录。我们将这个快照内的所有的修改向量通过堆叠的方式构成图 1(b)所示的矩阵MtM_t。需要注意的是,由于我们已经在数据清洗中去除了修改规模为 0 的文件对象,所以矩阵MtM_t不存在某一行或某一列全为 0 的情况。

ci=ci1,ci2,,cij,,cin\overrightarrow{\mathbf{c}}_i=\left\langle c_{i 1}, c_{i 2}, \cdots, c_{i j}, \cdots, c_{i n}\right\rangle^{\top} (1)

最后,对于以上所得的每个文件修改矩阵 Mt,我们皆计算了相应的副本熵,其计算过程构造如下:

  • 计算平均差异程度

    我们基于 Rao 二次熵(Rao’s Quadratic Entropy),计算了一个快照中各个副本在这个时段上对文件集合修改的平均差异程度,如公式(2)所示。

    QE(M)=1m2i=1mj=1mD(ci,cj)\mathrm{QE}(M)=\frac{1}{m^2} \sum_{i=1}^m \sum_{j=1}^m \mathcal{D}\left(\overrightarrow{\mathbf{c}}_i, \overrightarrow{\mathbf{c}}_j\right) (2)

    其中,QE(M)QE(M)表示 Rao’s Quadratic Entropy,其估算了从副本集合中随机选择的两个副本之间的期望差异,MM是与快照对应的文件修改矩阵(时间索引tt被省略),mm是一个快照中副本的数量,ci\vec{c_i}cj\vec{c_j}分别是MM中的第ii行和第jj行,D()\mathcal{D}(\cdot)是一个度量两个向量差异程度的距离函数。

  • 选择距离函数

    在本研究中,我们将距离函数表示为拉普拉斯核函数,1||\cdot||_1是 1-范数,γ\gamma是用于调整函数对差异敏感性的超参数。我们选择拉普拉斯核函数,因为它是一种对微小变化敏感的非线性变换,在多个检测任务中表现卓越,如字符识别。这一性质的选择源于我们对研究对象的实际考察。通过对副本集合实际文件修改过程的分析,我们发现许多副本只对项目文件进行了轻微的修改,甚至有些只修改了单个文件中的一行。基于拉普拉斯核函数在实际性能方面的表现,并经过与各种距离函数的对比测试,我们最终选择了公式(3)中呈现的距离函数。

D(ci,cj)=1exp(γcicj1)\mathcal{D}\left(\overrightarrow{\mathbf{c}}_i, \overrightarrow{\mathbf{c}}_j\right)=1-\exp \left(-\gamma\left\|\overrightarrow{\mathbf{c}}_i-\overrightarrow{\mathbf{c}}_j\right\|_1\right) (3)

  • 构建副本熵

    通过将公式(3)代入公式(2),我们得到了副本熵的公式(4):

Hfork (M)=1m2i=1mi=1m(1exp(γcicj1))\mathcal{H}_{\text {fork }}(M)=\frac{1}{m^2} \sum_{i=1}^m \sum_{i=1}^m\left(1-\exp \left(-\gamma\left\|\overrightarrow{\mathbf{c}}_i-\overrightarrow{\mathbf{c}}_j\right\|_1\right)\right) (4)

根据上述定义,可以清晰地看到Hfork(M)\mathcal{H}_{fork}(M)的取值为(0,1]。与大多数熵的性质一致,当由不同副本修改的所有文件的更改行数相同时,Hfork(M)\mathcal{H}_{fork}(M)取得最小值。

通过一定的数学推演可以得到,通过以上过程得到的副本熵具备以下的基本性质:

  • 对称性:副本熵与计算过程中副本的组织顺序无关
  • 连续性:副本熵是一个连续函数
  • 单调性:添加一个冗余(或独立)副本将减小(或增加)副本熵

三、基于副本熵的开源软件的实证研究

在本节中,我们以副本多样性作为自变量,总结部分项目的发展指标作为因变量,以其他影响项目发展的重要因素作为控制变量,运用统计分析方法对这些变量之间的关联性进行了分析。具体而言,我们使用三个变量对基于副本的开源软件项目的发展状态进行度量,包括副本仓库向主仓库贡献的外部生产力(external productivity)、主仓库对副本仓库贡献的接收效率(acceptance efficiency)以及开源项目报告的 bug 数量(number of reported bugs)。

对于已定义的每个研究问题,我们运用混合效应回归模型(mixed-effect regression model)对每个研究问题中的自变量(包括控制变量)对因变量的影响进行了分析,同时考虑了不同项目之间可能存在的随机效应。为防止潜在的多重共线性问题,我们对变量间的方差膨胀因子进行了检查,结果显示所有值均低于 4,表明变量之间不存在明显的多重共线性。此外,我们通过 QQ 图检验了模型拟合后的残差分布,发现其符合正态分布,这进一步验证了我们的分析结果的可靠性和稳健性。

3.1 RQ1:副本多样性对于副本仓库向主仓库贡献的外部生产力有何影响?

在这个问题下,我们借用并微调了外部生产力的定义,即:在一个单位时间内由副本仓库创建并由主仓库合并的 commit 的数量(NumAcceptedCommit)。此处与以下研究问题的单位时间被皆设置为一个月,与度量副本多样性的时间长度保持一致。

表 1. 外部生产力模型的固定效应

1.PNG

如表 1 所示,通过回归分析可得开源软件项目的副本熵与其外部生产力呈显著正相关。具体而言,副本熵的增加与外部生产力的提高关联紧密,这表示具有更大且更多样化副本群体的项目更有可能吸引外部贡献者,从而促进项目的外部生产力增加。此外,模型中的控制因素与外部生产力也存在显著关联。根据表 1,除了项目年龄外,所有控制变量均与开源软件项目的外部生产力呈正相关。因此,这表明拥有更多副本和修改文件、更高受欢迎度、年龄较小以及更高比例有经验的外部贡献者的开源软件项目通常对应着更高的外部生产力。

1.PNG

图 2. 外部生产力模型中的交互作用

图 2(a)描绘了在副本熵的低、中、高水平下,随着副本数量的增加,外部生产力的趋势。首先,在副本熵的各种水平下,随着副本数量的增加,外部生产力提升。此外,交互作用项表明,在较高水平的副本熵下,外部生产力相对于副本数量的增长率较低。同样,图 2(b)展示了副本熵与项目年龄之间的交互作用。首先,我们可以看到在副本熵的各种水平下,随着项目年龄的增加,外部生产力普遍减小。但是,随着副本熵水平的提高,随项目年龄增加而减小的比例增加。对于这一结果的可能解释是,处于积极发展阶段的年轻项目可能更愿意接受来自外部贡献者的多样化贡献,而年龄较大的项目可能已进入稳定维护阶段,或因缺乏处理多样外部贡献的能力而逐渐凋零。

3.2 RQ2:副本多样性对于主仓库对副本仓库贡献的接收效率有何影响?

在本小节中,我们通过使用混合效应 logistic 回归模型进行分析,考虑了副本多样性以及其他因素,包括副本数量、修改文件数量、项目年龄、星标数量、有经验贡献者比例、包含测试的拉取请求比例和触及热门文件的拉取请求比例。模型中还包括副本多样性与每个控制变量之间的交互作用。

表 2. 外部拉取请求接受率模型的固定效应

1.PNG

如表 2 所示,尽管副本多样性的估计效应较小,副本多样性与外部拉取请求的接受率存在显著且正相关的关系。除了触及热门文件的拉取请求比例外,其他四个控制变量与外部拉取请求的接受率呈正相关。

1.PNG

图 3. 接受率模型中的交互作用

在模型的交互作用项方面,只有副本多样性与拉取请求中触及热门文件的比例显示出显著且正相关的关系。其余交互作用项与响应之间显示出显著且负相关的关系。如图 3 所示,当副本熵处于中位或低水平时,接受率随 RatioPRsTouchHotFiles 下降而下降,而在副本熵高时则上升。这里存在可能的解释是,当副本熵处于中位或低水平时,拉取请求很有可能触及相同或相似的一组热门文件,导致它们之间存在冲突和重复,从而降低了接受率。相反,当副本熵处于高水平时,拉取请求可能触及不同、重叠较少的热门文件。因此,RatioPRsTouchHotFiles 的增加同样也带来了接受率的增加。

3.2 RQ3: 副本多样性与开源软件项目报告的 bug 数量有何关系?

如表 3 所示,副本熵与开源软件项目报告的缺陷数量呈显著的负相关关系。具体而言,我们发现副本熵水平较高的项目通常报告的缺陷问题数量较少,与副本数量、项目年龄等因素形成对比。这表明在具有更多且多样化副本的项目中,缺陷问题的报告相对较少,估计系数为-0.086。此外,结果还表明,修改文件的数量与报告的缺陷问题数量呈显著负相关,而其他受控因素与响应呈显著正相关。所有交互项均显示出显著性,副本熵与副本数量的交互作用与响应呈负相关。

表 3. 已报告 bug 数量模型中的固定效应

1.PNG

图 4 显示了副本熵和 NumForks 之间的交互作用。我们发现,在副本熵处于各种水平下,随着副本数量的增加,报告的 bug 数量同样增加。当副本熵水平较高时,随着副本数量的增加,已报告缺陷问题增长较慢。结合 RQ1 和 RQ2 的实验结果,对上述结果的一个可能解释是:在潜在缺陷报告之前,已增加副本熵可能与更多的提交和拉取请求相关,其中包括修复 bug 的提交。根据以上结果,在较少的已报告 bug 表示更高的软件质量的假设条件下,我们可以得到结论,副本熵水平较高与改进的软件质量呈正相关。

1.PNG

图 4. 副本熵和 NumForks 之间的交互作用

四、结论

在本项研究中,我们基于开源软件(OSS)开发过程,提出了一种名为“副本熵”的新型度量标准,并将其用于衡量围绕 OSS 项目的副本群体的多样性。通过实证研究,我们发现副本熵与这些项目的外部生产力、外部拉取请求的接受率以及报告的缺陷数量之间存在显著的相关性。此外,我们还发现副本熵与其他已发现与 OSS 项目的生产力和质量相关的影响因素之间存在显著的交互作用,如副本数量、项目年龄、触及热门文件的拉取请求比例等。最后,本文提出的副本熵度量不仅丰富了当前关于理解 OSS 项目副本的可用度量指标,还为进行基于拉取请求的开源软件过程的进一步研究提供了支持。

论文发表情况

Liang Wang, Zhiwen Zheng, Xiangchen Wu, Baihui Sang, Jierui Zhang and Xianping Tao, "Fork Entropy: Assessing the Diversity of Open Source Software Projects' Forks," 2023 38th IEEE/ACM International Conference on Automated Software Engineering (ASE), Luxembourg, Luxembourg, 2023, pp. 204-216, doi: 10.1109/ASE56229.2023.00168.

致谢

感谢 OSS Compass 社区和平台,特别是华为技术有限公司的王晔晖老师为本项研究工作所提供的支持。本研究工作得到了国家自然科学基金面上项目(No. 62172203),华为技术合作项目《开源生态评估技术合作项目》,以及南京大学软件新技术与产业化协同创新中心的支持。

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