开源软件社区知识协作网络核心开发者识别*
——以AngularJS为例

2021-04-06 10:48:28卢冬冬盛永祥
计算机工程与科学 2021年3期
关键词:参与度开发者开源

卢冬冬,吴 洁,刘 鹏,盛永祥

(江苏科技大学经济管理学院,江苏 镇江 212003)

1 引言

随着信息技术的进步,基于Web 2.0/3.0的各类在线社区孵化了一大批优秀的开源软件产品[1,2],这引起了社会各界的广泛关注:国务院曾发文要将开源软件社区发展纳入创新战略中;企业层面,诸如腾讯、阿里巴巴等也都积极地建设各自的开源项目社区。众多开发者通过开源软件社区参与到自己喜欢的项目中去,自发贡献知识、分享知识、创造知识[3,4]。与其他在线社区类似,开源软件社区中也存在着主导社区知识创造的核心开发者,这些核心开发者承担了项目中的大部分代码工作[5],维系着众多开发者之间的相互协作关系,促进了社区的集体智慧涌现[6]。因此,有效识别出核心开发者并施加保护手段对开源软件社区中的知识创新活动具有重大的意义。

目前已有的核心开发者识别方法主要包括早期的简单统计计数方法,Mockus等[7]通过统计代码工作量,简单、快速地识别出开源软件社区中的核心开发者和边缘开发者。也有相关学者关注到开发者的个体属性和行为,Oliva等[8]通过问卷调查和个人访谈的结果来总结和描述核心开发者行为特点,并以此作为识别标准。廖志芳等[9]通过构建用户行为分析模型OUBA-Model(Open source community User Behavior Analysis Model)识别开源软件社区的关键用户行为。这些方法虽然具有一定的优势,但是往往会忽略用户之间的交互行为。

近年来随着网络科学的发展,基于现实数据构建的社会网络能够较好地反映成员间的交互行为。众多学者通过复杂网络的方法发现了开源软件协作网络的中央边缘结构,并从不同的角度展开了大量研究[10 - 12]。夏昊翔等[13]在研究OpenStack协作网络演化时通过节点度的大小将开发者分成了核心开发者和一般开发者。李慧等[14]根据网络中的入度、出度和介数等指标,对社区中的成员进行划分。Joblin等[15]分析社区成员度和聚类系数,总结出核心成员在网络中具有高成员度值和低聚类系数。Zhou等[16]在研究网络鲁棒性时则通过度和介数的大小对社区成员进行重要性识别。徐冰村等[17]通过度中心性DC(Degree Centrality)、介数中心性BC(Betweenness Centrality)和结构洞指数识别出开源社区中的意见领袖。

从上述研究中可见,目前已有研究多是通过社会网络分析的方法进行评价指标的选取,但所选取的指标多是网络中节点的基本拓扑参数,如出度、入度和介数等。这些指标虽然能够反映节点在网络中对其他节点的影响能力,也能反映节点在整个网络中所处的位置特点,但尚未考虑到节点的局部特征,如节点之间的相互协作关系形成的社团结构是开源软件项目开发进程中必不可少的[13,18]。因此,本文拟通过对节点的基础指标做进一步处理,将节点局部特征即社团结构考虑进来,提出新的评价指标体系,识别出开源软件社区知识协作网络的核心开发者,从而对已有的指标体系进一步扩充,帮助项目管理者能够更有效地识别核心开发者,促进社区知识创新。

2 网络构建与指标分析

2.1 知识协作网络构建

本文选取开源软件社区GitHub的AngularJS项目作为研究对象,AngularJS是一款优秀的开源前端JS框架,已广泛运用于Google的多款产品中。该项目目前包括Angular、Angular CLI、Angular Material和Angular Fire等多个子项目。

数据来源于GitHub中AngularJS的子项目库,通过Git指令提取2010年8月(项目初始期)~2019年1月的7个主要子项目的代码提交记录,共计38 764条。记录内容包含开发者邮箱、代码提交日期、开发者姓名、修改文件数量和名称等。

在此基础上,通过Python语言编程实现开发者知识协作网络的构建工作。为了排除数据噪声干扰,以开发者邮箱作为识别开发者的唯一标识,将开发者抽象为网络中的节点。同一版本时期内有针对同一文件进行代码提交行为的开发者视为存在协作关系,将协作关系抽象成节点间的边。网络构建方法和过程如图1所示。

表1为AngularJS项目知识协作网络拓扑特征,网络规模即网络中节点数量,为3 982,说明累积到2019年1月共有3 982名开发者为AngularJS贡献过自己的知识。平均聚集系数为0.656,平均路径长度为4.135,说明该网络符合小世界特性,开发者之间协作关系较为紧密。模块度为0.593则说明该网络中存在明显的社团结构,说明有必要对成员进行子模块划分。本文采用FUOCILN算法[19]对网络进行子模块划分。

Figure 1 Method and process of knowledge collaboration network construction

Table 1 Knowledge collaboration network topology parameters

2.2 评价指标分析

本文方法基于开源软件社区知识协作网络中开发者的结构特征,除了采用以往研究中提到的度中心性和介数中心性指标,还将考虑开发者节点的局部属性,即网络的社团结构。参照Guimera等[20]于2005年在生物新陈代谢网络的背景下提出的模块内参与度和模块间参与度进行综合分析,相关指标已被证实在探究网络稳定性方法具有较好的效果[21]。具体评价指标如下所示:

(1)度中心性DC。节点度是与该节点相连的边的数量,表示社区中与开发者形成协作关系的开发者人数,DC越大说明与该开发者形成知识协作行为的开发者人数越多,因此该开发者的影响力越大。目前已被广泛直接用于探究网络中节点的重要性排序问题。

在双对数坐标系中绘制节点度k分布和幂律拟合图(如图2所示,其中p(k)为度分布图中的概率分布),拟合优度R2=0.94907。拟合优度较高,说明该网络属于无标度网络,存在着较明显的中央边缘结构。网络中高度节点较少,低度节点多,说明社区中存在着较为明显的核心开发者,核心开发者间紧密协作关系能够促进社区源源不断地知识创新。因此,识别开源软件知识协作网络的核心开发者是具有重要意义的。

Figure 2 Degree distribution

(1)

表2所示为知识协作网络开发者节点的度中心性和介数中心性。从表2中能够明显看出开发者节点之间的度中心性和介数中心性均存在较大的差异,并且开发者的度中心性和介数中心性也存在明显的不对称性,度中心性最大的开发者并不是介数中心性最大的开发者,说明网络中协作关系最多的开发者并不一定是网络中最重要的“桥梁”,有必要将二者综合起来进行开发者的识别工作。

(3)模块内参与度。模块内参与度Zi用于度量节点i与其所处模块内其他节点的“良好连接”程度,如式(2)所示:

(2)

Table 2 Developer network topology parameters

(4)模块间参与度:模块间参与度Pi用于度量节点i与其他模块的连接程度,其计算方式如式(3)所示:

(3)

其中,NM表示整个网络中的模块数量,kis表示节点i在模块s中的连边数量,ki表示节点i在整个网络中的度。如果一个节点的连边在越多模块中有所分布,那么它的模块间参与度越大。如果它的所有连接都只在自己的模块内部分布,那么它的模块间参与度为0。

表3所示为开发者的模块内参与度Z和模块间参与度P的计算结果,可以明显看出开发者节点的度中心性DC和模块内参与度Z、模块间参与度P3者之间均具有一定程度的不对称性。度最大的开发者并不一定拥有最大的模块内参与度,也不一定拥有最大的模块间参与度。处在各自社团中心位置的开发者并不一定是网络中最重要的开发者,也不一定是与外界社团联系越广泛的开发者。

Table 3 Z and P of developers

图3所示为模块内参与度Z和模块间参与度P分布图。由图3可以看出,节点大多位于图的左半部分,说明网络中各节点的模块内参与度Z相对较小,仅有少数的节点具有较高的模块内参与度Z,而模块间参与度P则分布得较为均匀,但也能发现高模块间参与度P的区域较为稀疏。这种情况也能够说明社区中具有高模块内参与度Z和高模块间参与度P的核心开发者较少,所选指标能够拟合现实情况,具有一定的准确性。

Figure 3 Distribution of Z and P

3 基于TOPSIS的核心开发者识别

3.1 识别方法

对于拥有多个评价指标的决策方法,本文拟采用基于TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution)的多属性决策方法[23]进行开源软件社区知识协作网络的核心开发者识别工作。其中,“熵”作为描述系统混乱程度的量,引入信息论后得到了广泛运用,熵权法[24]作为一种客观赋权方法,能够有效避免人为因素干扰,客观地为指标赋值,更加具有可信度。具体步骤如下所示:

网络中共n个节点,可以视为n个方案,每个方案都有m个评价指标,可构成n×m阶矩阵M。

(4)

将指标矩阵M标准化,其中指标类型不同,所使用的方法也不一样。

(5)

其中,I1为成本型指标集,I2为效益型指标,I3为固定型指标。成本型的指标认为指标数值越小越重要,效益型的指标则认为指标值越大越重要,固定型的指标认为越靠近某固定值r越重要。

用标准化后的指标构成新矩阵N。

(6)

假设第j项指标的熵记为Hj,j=1,2,…,m,其计算公式为:

(7)

根据式(7)进一步计算权重wj。

(8)

由此可得加权标准化的决策矩阵Y为:

(9)

将每个评价指标的最大值的集合作为正理想方案A+,最小值的集合作为负理想方案A-,计算各决策方案与正负理想方案的距离:

(10)

最后,按式(11)计算每个决策方案的贴近度Ti,可作为最终决策方案的评价指标,代表开源软件社区知识协作网络中的开发者节点重要性程度,即贴近度。

(11)

3.2 核心开发者识别

针对开源软件社区知识协作网络,本文采用考虑了开发者节点局部社团结构属性的“模块内参与度”和“模块间参与度”2个指标进行核心开发者的识别工作。除此之外,本文亦考虑到已有研究中的度中心性和介数中心性,通过指标间的不同组合方案进行核心开发者的识别,并进行相关识别效果的对比。

首先将这4个指标按照DC,BC,Z,P的顺序放在一起进行计算。上述4个指标均为效益型指标,其指标值越大,节点越重要,得到原始矩阵M和其标准化矩阵N如下所示:

(12)

(13)

由式(7)计算得信息熵为:

HDC=0.8669,HBC=0.6842,HZ=0.7406,HP=0.8051

接下来对指标方案进行分类讨论:

方案A:传统的识别方法,组合DC和BC2个指标。由式(8)计算可得各指标权重:wDC=0.297,wBC=0.703。根据式(9)~式(11)计算各节点的贴近度得分,取排序前10得到知识协作网络的核心开发者,结果如表4所示。

Table 4 Core developers identified by scheme A

方案B:组合本文提出的模块内参与度Z和模块间参与度P。通过计算各指标权重可得:wZ=0.571,wP=0.429。根据式(9)~式(11)计算各节点的贴近度得分,取排序前10得到知识协作网络的核心开发者,结果如表5所示。

Table 5 Core developers identified by scheme B

方案C:组合DC,BC,Z,P4个指标,通过计算能够得到各指标权重:wDC=0.1474,wBC=0.3496,wZ=0.2872,wP=0.2158。根据式(9)~式(11)计算各节点的贴近度得分,取排序前10得到知识协作网络的核心开发者,结果如表6所示。

Table 6 Core developers identified by scheme C

3种方案识别出的核心开发者具有较明显的重叠性,如Id编号为:1907,97,2756,632,2628等成员。将结果与GitHub网站中AngularJS项目的子项目库给出的贡献者(contributors)进行对比可见,3种方案识别出的核心开发者的贡献度(contribution)均超过了100。说明3种方案识别出的核心开发者均具有一定的准确性。但是,各方案内成员重要性排序具有一定的差异性,说明3种方案仍需进一步比较。

4 有效性检测

4.1 有效性检测指标

为了比较3种方案识别核心开发者的效果,将3种方案识别出的结果按照重要性排序依次从网络中移除,仿真模拟核心开发者的流失,并对网络进行抗诋毁性检测。

通常被用来衡量网络性能的指标有网络聚类系数、平均最短路径和最大连通图等[25,26]。而网络拓扑结构中最大连通子图能够衡量项目社区开发者之间协作关系的紧密性。当某些节点被移除后,会造成与其相连的一些节点与最大连通图之间的协作关系中断,从而脱离最大连通子图。因此,本文采用最大连通子图的相对大小S来衡量网络的抗诋毁性。最大连通子图相对大小S的计算如式(14)所示:

(14)

其中,n表示网络中的节点总数,n′表示最大连通子图中的节点数。最大连通子图相对大小表示知识协作网络的人员之间的紧密联系程度,S越大代表各社区开发者之间协作程度越高,关系越紧密,该网络的抗诋毁性也越强。若核心开发者的离开对网络影响较小,则说明该核心开发者在网络中并不一定是最重要的。

4.2 有效性检测分析

为了明晰各指标方案识别核心开发者的效果,需要对网络进行抗诋毁性检测。通过仿真模拟方案A(DC+BC)、方案B(Z+P)和方案C(DC+BC+Z+P)所识别的核心开发者流失对网络结构的影响,并将相关结果与DC排序、BC排序、随机性移除(RA)进行对照,结果如图4a所示。研究发现:相对于随机开发者的流失,不管是何种方案下识别的核心开发者,其流失后都会导致大量的与之存在协作关系的开发者脱离网络的最大连通子图,对网络结构的影响较大。说明核心开发者在网络中占据着重要的位置,扮演着重要的角色,有必要对其加以保护。同时也说明本文提出的指标体系和以往研究中提出的度中心性、介数中心性都具有一定的准确性。

对比不同方案识别的核心开发者流失对网络的影响能够发现:在图4a中,方案B始终都处于最下方,该方案识别的核心开发者流失将会导致网络受到最严重的破坏,说明当仅仅使用了模块内参与度和模块间参与度这2个评价指标所识别出来的核心开发者重要性顺序更优,效果最显著。其他几种方案识别的核心开发者流失对网络结构的影响整体相差不大,但也能看出综合考虑了4种指标的方案C略优于其他方案。因此,本文提出的考虑了开发者所处社团结构的指标体系(模块内参与度和模块间参与度)在识别核心开发者时具有一定的优势。

另外,在有关模块内参与度和模块间参与度的计算过程中,本文使用的FUOCILN算法进行网络模块划分,但Newman[27]也提出了相应的算法。由此,不同模块划分算法是否会对结果造成影响值得我们进一步探究。通过计算可以发现:2种算法下节点的模块划分结果和模块内参与度、模块间参与度初始值虽然具有一定的差异性,但经过归一化处理与指标权重计算后,所得到的核心开发者名单具有极大的相似性。方案B(仅考虑模块内参与度和模块间参与度)中,Newman算法得到的核心开发者Id分别为:1907,1933,2756,451,97,632,2628,1905,730,148。可以发现,名单中仅有148#开发者和885#开发者存在差异,并且在重要性排序上和FUOCILN算法的结果差距不大。同样地,综合考虑了度中心性和介数中心性的方案C也有类似的情况。另外,对照项目在GitHub社区公布的开发者贡献度可知,各开发者的贡献度均高于100。从图4b也能够发现:模块划分算法虽然对网络中节点的模块内参与度和模块间参与度的计算结果有影响,但是最终对于知识协作网络核心开发者的识别结果影响不大,并且方案B始终优于方案C。

Figure 5 Demonstration diagram of complex network

4.3 结果讨论

Figure 4 Anti-defamation detection of different schemes

从上述研究可以明显看出:不管采用何种算法进行模块划分,考虑社团结构的指标体系识别出的核心开发者对网络抗诋毁性的影响显著高于传统指标体系的,识别效果更优。究其原因:一方面,基于复杂网络的相关知识,如图5所示,图5a中共计23个节点,可分为4个社团结构。通过计算网络中各节点的评价指标可知节点3的度中心性、介数中心性和模块间参与度均是最大的,分别为DC=7,BC=0.6124,P=0.6122;节点18的模块内参与度Z=2.2678,在网络各节点中模块内参与度值是最大的。当按照传统指标进行考虑时,节点3是网络中最重要的,将其移除后节点4和节点5将会脱离最大连通子图(如图5c所示);但如果考虑了社团结构,从模块内参与度来看,节点18是网络中最重要的,将其移除后节点19、节点21和节点22将会脱离最大连通子图(如图5b所示)。显然,考虑社团结构识别出的节点18相较节点3能够维系更多的节点保持在网络的最大连通子图之中。同样模块内参与度相对较大的节点6(Z=2.236),虽然度中心性和介数中心性都不是最大的,但其流失后也会造成节点8、节点9和节点10脱离最大连通子图(如图5d所示)。由此可见,考虑社团结构识别出的重要节点对网络结构影响更大。

另一方面,从现实角度来看,已有的大量研究也已经发现开发者协作网络社团结构和子项目协同演化的现象,子项目与社团之间存在着显著的关联性[13,28]。开源软件社区知识协作网络中也存在着明显的社团结构,当识别网络中的核心开发者时,若仅仅考虑开发者节点在整个网络中的结构属性,往往容易忽略掉一些在整个网络中并未占据重要位置但却是某些子项目的核心开发者。故而加上考虑社团结构的模块内参与度和模块间参与度指标,能够有效避免这类情况,识别效果更佳。

5 结束语

本文基于社会网络分析的方法,以开源软件社区AngularJS项目为实例,提出了一种开源软件社区知识协作网络核心开发者识别模型。在评价指标方面区别于以往只考虑度中心性和介数中心性,将开发者的局部特征即社团结构考虑进来,引入了模块内参与度和模块间参与度2个评价指标,基于TOPSIS多属性决策方法识别出核心开发者。最后通过与真实数据对照以及网络抗诋毁性的检测探究方法的有效性,并将传统的指标体系和本文提出的指标体系进行对比,验证考虑了社团结构指标体系的优越性。研究发现:各方案识别出的核心开发者均具有一定的准确性,与网站给出的核心开发者重合度较高;引入社团结构的指标体系识别出的核心开发者有效性最显著,识别效果最优。本文提出的指标一方面能够进一步丰富开源软件社区核心开发者识别模型的指标体系,具有一定的理论意义;另一方面也能够为社区管理者提供一种更有效的核心开发者识别方法。同时,管理者在社区管理过程中不仅要考虑全局,也要重点关注一些子项目的核心开发者。

网络科学飞速发展,在未来的研究中,我们将围绕以下几点进行探讨:(1)是否可以借鉴Kojaku等[12]的研究通过构建开源软件社区诸如知识网络和协作网络的多层复杂网络,进行多层中央边缘结构的相关研究;(2)借鉴Bertolero等[29]提出的复杂网络中的“多元俱乐部”,探究开源软件社区相关网络中是否也存在着背景多元化的开发者社团结构现象;(3)在核心开发者识别的指标体系方面,虽然本文已经探讨了社团结构的相关指标,但在此基础上是否可以进一步借助Xu等[30]提出的“网关系数”探讨开源软件社区中的维系不同开发单元之间的协同的“网关”节点,值得深入研究。

猜你喜欢
参与度开发者开源
提高学生课堂参与度 激活珠心算生命力
初中语文教学中如何有效提高学生的课堂参与度
甘肃教育(2020年24期)2020-04-13 08:24:40
五毛钱能买多少头牛
鼓励自主安全活动 提升员工参与度
劳动保护(2019年3期)2019-05-16 02:38:06
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
16%游戏开发者看好VR
CHIP新电脑(2016年3期)2016-03-10 13:06:42
开源计算机辅助翻译工具研究
iOS开发者调查
电脑迷(2015年8期)2015-05-30 12:27:10
iOS开发者调查
电脑迷(2015年4期)2015-05-30 05:24:09