Skip to main content

基于信息熵的开源社区演化行为度量方法

张洁芮,李颖,汪亮,陶先平,南京大学计算机科学与技术系,计算机软件新技术全国重点实验室 开源指南针(OSS Compass)

摘要:

本研究针对开源开发者社交网络中的演化行为认知这一主题,为克服传统社区演化行为分析技术偏重定性而非定量这一局限性,提出了一组基于信息熵的社区分裂、缩减、合并和扩大指数来度量开源开发者社交网络中的社区演化行为。实证研究表明,该组指数能够有效刻画开源社区的演化,通过简单的规则变化能够取得和现有定性工作相一致的结论,准确率达到 94.1%。同时,进一步的研究表明,所提出的社区演化指数与开源项目以 commit 数量为代表的生产力之间存在显著的关联关系。本研究所提出的基于信息熵的度量指数为我们定量认知和分析开源社区的演化行为提供了支持。

一、引言

开源软件的开发是一种社会化的软件生产方式,深入理解开源项目中开发者的社交网络(developer social networks, DSNs)及其演化过程对于理解开源群智现象具有重要意义。现有的研究开源社区和开源网络演化的方法可以分为两类:网络级和社区级统计模式。第一类工作中通过使用统计指标对社交网络的一系列快照进行量化。这类工作通常会采用包括网络直径、节点之间的最短路径、模块性、层次结构、中心性等的度量方式。虽然上述大多数指标从总体上衡量了社交网络的性质,但社交网络中的一个自然现象是:网络中相互作用的个体会自发形成复杂的社区结构。因此,了解 DSN 内部的社区模式可以提供有关开源软件开发的更深层理解。正如 Conway 定律所述,系统的架构反映了其实现者的组织结构。尽管已有一些度量方法涉及了对社交网络中的团体或社区的度量,但这些网络级统计数据在揭示 DSN 中社区的结构和演变方面的能力相对较弱。第二类方法采用社区视角来揭示 DSN 中社交网络的演变模式。现有方法提出使用社区的分裂、缩减、合并和扩大等模式来描述社区演化行为,这种方式能够提供丰富的语义信息,但仍存局限性:第一、一个社区的演变很难用一种模式来描述;第二、现有方法难以支持定量分析;第三、这些模式仅限于描述单个社区的演变,很难将这些概念扩展到整个 DSN 网络层面中。因此,我们需要一种针对社区演化行为的全面、定量的表示和度量方法,形成对这一普遍的现象的完整、深入、科学地认知。

二、基于信息熵的社区演化度量方法

在现有基于模式的定性社区演化表示方法基础上,本研究所提出的方法更进一步地提供了更全面和定量的分析结果,这可以帮助开源志愿者和维护人员了解开源社区的现状,比较不同项目的社区演化趋势,定量跟踪项目社区随时间的演化,并进行定量分析。

1.PNG

图 1 方法概述

在本工作中提出的指标计算过程包括三个步骤。首先如图 1(a)所示,我们综合 OSS Compass、GHTorrent 数据库和 GitHub GraphQL API3 检索 Issue 和 Pull-Request 相应的公开数据。记录 Issues 的参与者以提取联合讨论关系。这些记录用于构建 DSN 并在后续步骤中执行社区演化分析。接下来,如图 1(b)所示,我们使用窗口分割得到的数据,并使用加权无向图从片段中构建 DSN 快照。然后通过运用改良的 Clauset-Newman-Moore(CNM)算法用于执行社区检测。最后,如图 1(c)所示,我们提出了一组基于信息熵的指标用于度量社区演化行为,其中包括对社区分裂、收缩、合并和扩大行为的度量。在单个社区基础上,本研究方法还可以将这些指标值进行汇总,以量化 DSN 网络层面的社区演化行为。

构建 DSN 快照是后续度量其中包含社区的演化行为的必要前置工作。我们以tt时刻为起点,以 12 周为一个窗口,使用一个加权无向图 Gt= V,E,U,W G_t=\langle V,E,U,W \rangle 对该窗口内 issue 和 PR 参与者所构成的 DSN 结构进行建模(在不引起混淆的情况下,我们在下文中忽略时间下标tt)。其中顶点vj  Vv_j \in V表示存在于该 DSN 中的每一个用户,边ei,jEe_{i,j}\in E表示用户viv_ivjv_j之间存在社交互动。边权重wi,jWw_{i,j}\in W为边ei,je_{i,j}量化用户之间的社交互动的强度,计算方式如公式 (1)所示。节点权重ui  Uu_i \in U为顶点viv_i遵循等式(2)量化得到的用户活跃度。具体而言,给定 t 时间窗口内一对用户viv_ivjv_j对话(共同参与 issue 或 PR)的计数cnti,jcnt_{i,j},其对应的边的权重wi,jw_{i,j}计算方法如下:

wi,j = ln(cnti,j+1)w_{i,j} = \ln(cnt_{i,j} + 1) (1)

在上述边权重的基础上,我们进一步通过公式(2)为每个用户计算它的权重来量化在 DSN 中该用户的活跃度:

ui=ln(j=1Vwi,j+1)u_i=\ln(\sum_{j=1}^{|V|}w_{i,j}+1) (2)

接下来,针对每一个 DSN 快照,我们使用社区检测算法来挖掘其中所形成的社区。在本工作中,社区指的是在 DSN 快照中彼此之间有密切且密集的交互的一组用户。给定 DSN 的第tt个快照GtG_t,我们采用改良的 Clauset-Newman-Moore(CNM)算法来检测快照中可能存在的社区。对于GtG_t来说,社区检测的结果是一组不重叠的社区,其中包含社交网络中联合讨论关系内的用户子集。通过对按时间排列的所有快照应用社区检测,我们获得了一系列随时间变化的社区表示。基于检测到的社区,我们可以构建相邻时间,即,ttt+1t+1时间的两个 DSN 快照中所体现出的社区成员的迁移矩阵,如图 2(a)所示。

1.PNG

图 2 迁移矩阵以及社区成员在连续时间片之间的迁移

以上述社区成员迁移矩阵作为表示基础,我们可以针对tt时刻的任一社区ct,ic_{t,i}t+1t+1时刻的任一社区ct+1,jc_{t+1,j}计算如图 2(b)和(c)所示的权重分布;进而通过信息熵这一数学工具,度量连续时间片内单个社区包括社区的分裂、缩减、合并和扩大在内的演化行为模式。相比现有的研究大多将单一模式分配给匹配社区对的做法,我们的方法能够全面、定量地刻画每一个社区在演化过程中的所有行为模式及其程度,从而实现对 DSN 演化行为的完整认知。我们以在 t 时刻的 DSN 快照中检测到的第ii个社区,即ct,ic_{t,i},来阐述如何计算分裂和收缩指标。假设下一个时间片,即t+1t+1时刻的 DSN 中检测得到mm个社区,我们可以计算ct,ic_{t,i}社区中在t+1t+1时刻仍然留存在项目中的活跃用户迁移到该时刻中mm个社区的人员的比例分布:

ψi,j^ = ψi,jj=1m ψi,j\hat{\psi_{i,j}} = \frac{\psi_{i,j}}{\sum_{j=1}^m \psi_{i,j}} (3)

并通过公式(4)计算分布所对应的信息熵:

Hct,i =  j=1m ψi,j^log2(ψi,j^)\mathcal{H}_{c_{t,i}} = - \sum_{j=1}^m \hat{\psi_{i,j}}\log_2(\hat{\psi_{i,j}}) (4)

直观地,上述信息熵度量了ct,ic_{t,i}中的成员在下一时刻转移到不同社区的分散程度。基于上述信息熵,我们可以通过公式(5)和(6)计算ct,ic_{t,i}在向下一时刻演化时的分裂与缩减指数:

分裂指数 Ict,iψ = (1ηi)Hct,i\mathcal{I}_{c_{t,i}}^\psi = (1-\eta_i)\mathcal{H}_{c_{t,i}} (5)

缩减指数 Ict,iη = ηi(Htt+1 Ict,iψ +σηi)\mathcal{I}_{c_{t,i}}^\eta = \eta_i(\mathcal{H}^*_{t\rightarrow t+1} - \mathcal{I}_{c_{t,i}}^\psi + \sigma_{\eta_i}) (6)

与上述计算社区分裂和缩减指数的过程类似,以图 2(c)所示的成员迁移分布为基础,我们针对t+1t+1时刻的一个社区ct+1,jc_{t+1,j},通过观察其成员自tt时刻到t+1t+1时刻的汇聚过程来度量其如公式(7)所示的合并指数,和如公式(8)所示的扩大指数。

合并指数 Ict+1,jϕ = (1μj)Hct+1,j\mathcal{I}_{c_{t+1,j}}^\phi = (1-\mu_j)\mathcal{H}_{c_{t+1,j}} (7)

扩大指数 Ict+1,jμ = μj(Htt+1 Ict+1,jϕ +σμi)\mathcal{I}_{c_{t+1,j}}^\mu = \mu_j(\mathcal{H}^*_{t\leftarrow t+1} - \mathcal{I}_{c_{t+1,j}}^\phi + \sigma_{\mu_i}) (8)

以社区的分裂和缩减指数为例,上述指数具有以下性质:

  1. 给定0<ηi<10<\eta_i<1 , 并假设ψs\psi's为均匀分布,社区的分裂和缩减指数都是后续社区数量 mm 的单调递增函数;
  2. 假设 ηi > 0\eta_i > 0, m>1m>1 , 并固定留存成员的迁移分布,社区的分裂和缩减指数分别是离开成员比例 η_i 的单调递减和单调递增函数;
  3. 当留存人员的迁移分布ψs\psi's为均匀分布时,分裂指数取得最大值,缩减指数取得最小值;
  4. 当留存人员的迁移分布ψs\psi's极不均匀(都迁移向同一个后续社区)时,分裂指数取得最小值,缩减指数取得最大值。

通过上述性质,我们认为所提出的社区演化指标能够正确反映我们对社区演化行为的直观理解。

三、面向开源软件社区的实证研究

我们在由 32 个开源仓库所构成的数据集上开展了实证研究,以评估所提出的社区演化指标的有效性和有用性。这项研究旨在回答以下两个研究问题:

  1. RQ1 有效性:这些指标是否能够量化 DSN 中的社区演化?我们通过分析指标得到的社区演化行为与现有工作的检测结果之间的一致性,以及指标之间的因素独立性来验证所提出指标的有效性。
  2. RQ2 有用性:所提出的指标是否与团队生产力相关?我们通过使用回归分析研究了所提出的指标与项目团队生产力的相关性来说明所提出指标的有用性。

3.1 RQ1:有效性的验证结果

我们通过比较所提出的方法和现有方法的社区演化模式检测结果来评估所提出的指标的有效性。我们采用中提出的过程来检测 DSN 中的定性社区演化模式,这些模式作为评估的“基本事实”。更具体地说,对于连续的时间步骤ttt+1t+1,我们首先计算在两个 DSN 快照中检测到的每对社区之间的相似度。DSN 快照的生成和社区的检测与上述表述相同以进行公平比较。我们采用参考文献中的阈值 0.3 来执行社区匹配。

1.PNG

图 3 混淆矩阵,将现有方法和建议的方法进行比较

图 3(a)显示了比较现有方法结果和本研究所提出方法检测结果的混淆矩阵。对于我们所涉及的六种模式和未定义模式的总体准确率为 89.2%。由于现有工作中未明确定义某些社区演化情况所对应的模式,因此我们将其定义为“未定义”模式。我们还通过移除未定义的标签(即,移除混淆矩阵中的最后一列和行)来评估准确性。当没有未定义的标签时,总体准确率为 84.7%。从图 3(a)中,我们可以观察到 52%的收缩案例被我们的方法分类为分裂案例。45.8%的扩张案例被检测为合并。这是因为现有方法中存在 0.3 的阈值来过滤匹配但不太相似的社区。从结果上,与我们不执行过滤的方法相比,真实数据被估计为偏向于收缩和扩展。由于没有证据表明现有 0.3 的阈值是最佳的,我们通过设置 0.1 的阈值来重复测试,以增加获得真实社区匹配的机会。如图 3(b)所示,我们可以观察到,使用和不使用未定义模式的检测精度分别提高到 92.7%和 94.1%。上述结果表明,通过一套简单的规则,所提出的指标可以准确区分不同的开源社区的演化模式,这与现有方法得出的结果一致。

在因素独立性方面,由于所提出的指标并不总是遵循正态分布,所以我们通过计算给定项目的每对指标的 Spearman 相关系数来衡量它们之间的相关性。

表 1 聚集指标的成对相关性(Spearman’s Correlation Coefficient)

1.PNG

表 1 列出了所有项目的 Spearman 相关系数及其显著性水平。我们还将混合所有项目数据的结果附加到表的最后一行。可以观察到,在我们研究中涉及的 32 个项目中,有 4 个项目,即项目 4、10、13、31,在所有指标对之间显示出弱相关性或无相关性,这些指标涵盖了活跃和非活跃项目。另外,从实验结果中还可以看到,分裂和合并指标对大多数项目显示出中度相关性,只在五个项目中显示出较强相关性。分裂和合并之间的总体相关系数为 0.68。

3.2 RQ2:有用性展示

在本实验中,我们通过研究所提出的指标与开源项目团队生产力的相关性来体现社区演化指标的有用性。我们参考现有工作,将推送到开源仓库的 commit 数来表示团队生产力。接着,我们使用线性混合效应模型(LMM)进行回归分析,以研究指标与团队生产力之间的相关性。对于按照上文中提取的每个快照,我们获得一个由以下变量组成的样本:结果变量是快照中的提交次数;使用社区分裂、收缩、合并和扩展的聚合指数作为自变量。我们对上述变量进行对数变换以稳定方差并减少异方差性。最后,项目名称包含在每个样本中,作为随机效应的指标。结果如表 2 所示。

表 2 对数转化后的社区演化指标与团队生产力之间的相关性

1.PNG

结果表明,在对数转换之后,所有的指标都与团队生产力有显著的相关性。包括分裂、收缩和合并在内的三个指标与团队生产力呈正相关。回归模型的准确度(即结果的实际值和预测值之间的相关系数)为 0.718,这表明社区演化的聚合指数是团队生产力的有用预测指标。

四、结论

在本项研究中,我们针对开源开发者社交网络中所自然形成的社区进行分析,提出了一组基于信息熵的社区演化行为度量指标。该指标体系能够准确度量开源社区的演化行为,同时与社区以 commit 数量为代表的生产力之间存在显著的相关性。该指标体系能够为我们深入认知开源开发者的社交行为提供支持。

论文发表情况

Liang Wang, Ying Li, Jierui Zhang, and Xianping Tao. 2022. Quantifying community evolution in developer social networks. In Proceedings of the 30th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2022). Association for Computing Machinery, New York, NY, USA, 157–169. https://doi.org/10.1145/3540250.3549106

致谢

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

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