APP下载

开源软件社区中开发者活跃度特性分析

2017-09-29刘雅新吴高艳何鹏

软件导刊 2017年9期

刘雅新 吴高艳 何鹏

摘 要:關注开源社区中开发者的活跃程度,研究随版本更迭开发者活跃度的变化情况。通过挖掘Tomcat项目10个版本的开发者邮件列表信息与版本提交日志信息,构建开发者合作网络,分别分析项目成员整体活跃度以及单个开发者活跃度的变化趋势。分析结果发现,项目在版本迭代更新过程中,开发者团队的整体活跃度保持稳定,但单个开发者的活跃度变化有所不同,存在4种基本模式:开发者先比较活跃,后期越来越不活跃;活跃度整体上先增后减;活跃度整体上呈下降趋势;活跃度不断增加,并稳定在活跃状况。

关键词:开发者合作网络;开源社区;活跃度;群体开发

DOI:10.11907/rjdk.171538

中图分类号:TP391 文献标识码:A 文章编号:1672-7800(2017)009-0164-03

Abstract:This paper focuses on developers′ activity in open-source community by analyzing the change of their activity with software evolution. Developer collaboration networks of Tomcat for ten versions were constructed based on the emailing-list and changelog, and an analysis of the team and individual activity was done respectively. The results show that the team′s activity keep stable during evolution process, but the trend of individual developer varies. There are four basic patterns among developers: active developers are becoming less active, activity increases first and then decreases, activity continues to decrease, and keep stable.

Key Words:developer collaboration network; open-source community; activity; collaborative development

0 引言

开源软件(Open Source Software,OSS)是一种源代码开放的软件,采用开源认证协议进一步允许用户学习、修改、二次开发及提高软件质量,表现出的是一种自由开放、对等交互、知识共享的群体协作开发新模式。它既是一种网络时代的软件生产方式,也已成为国家软件服务业的重要支撑,是国家安全战略的重要组成部分。据研究统计表明,开源软件的使用可为企业IT预算年均节省600亿美元。

开源软件的开发以社区为存在形式,社区内的成员可以自由、开放地交流沟通、共享经验、参与协作。目前,最具代表性的开源组织专有社区包括Linux社区、Apache社区、Mozilla 社区等,开源软件托管社区主要有Github和Sourceforge。近年来,围绕开源软件或开源社区开展的工作每年至少有上万篇论文,足见该方向已引起了广大爱好者的极力关注。

在Apache开源社区中流行一种观点,即社区比代码重要[1],Ye等[2]认为一个OSS的成功在于有一个适当规模的开发者社区。然而,在社区化群体软件开发中,开发者规模剧增,关系也愈加复杂,并时刻存在动态变化,这种关系的变动直接影响了软件的演化。分析开源软件社区中的群体行为特性,有利于挖掘开发者的合作行为、重要程度、贡献价值,时时关注开发者角色的变化,探究开发者擅长从事的工作,为管理者提供决策参考。

Meneely等[3]利用开发者合作关系成功预测了项目发布后可能出现的故障。Sureka等[4]从缺陷报告中抽取开发者的合作网络,通过网络分析发掘系统存在的风险与脆弱性。Crowston等[5]根据bug修复信息阐述了开源软件开发团队中的核心-边缘结构。同样,Sureka等[6]从开发者的组织结构角度,发现开发者合作之间呈洋葱层次结构。Gao等[7]对 Sourceforge.ne 社区开发者合作网络的一些网络指标进行了演化分析,发现社区网络直径有变短的趋势。Hahn等[8]也验证了一个开发团队的形成以及开发者之前的合作关系对团队形成的影响。一些研究者也尝试采用社会网络分析方法发掘社区中的一些重要成员,如“中介”成员识别[9]、团队带头人挖掘[10]。

根据开发者提交的日志信息,Huang等[11]构建开发者—模块网络来描述开发者之间的交互,并建立 LPP 边缘学习过程模型用于划分开发团队中成员的角色。Allaho和Lee[12]共同分析了开发者网络的交互关系,发现团队中专家与小角色成员之间有明显的交互行为,并且开发者的出入度与他们的贡献大小之间呈正相关。同时,社区中新加入的开发者更倾向于与(度数或介数)中心性更大的已有开发者建立合作[13]。

国内学者刘晓等[14]从网络规模、内部结构和人员流动方面分析了开发者合作网络的演化规律。笔者也曾分析过开发者的偏好合作模式,探析了4种合作方式下的差异,并重点分析了已有开发者之间的合作模式[15-16]。

本文结合复杂网络理论与软件开发实践,通过软件库(Software Repository)挖掘,分析开源社区中开发者的活跃度情况,发掘开发者的角色变化模式,提炼多种开发者角色演化规律,为软件工程实践提供决策指导。endprint

1 研究方法

1.1 開发者合作网络

在构建开发者合作网络过程中,将所有开发者表示为一个节点,如果两个开发者在同一时间从事同一个项目工作的开发(如对同一个提交请求进行了评论),则他们之间被视为存在一条合作连边,用网络形式表示为ColNet=(V,E),V代表网络的所有节点集,E为所有合作连边。本文没有考虑两个开发者间的合作次数,以及合作的方向。图1是一个简单的开发者合作网络,根据开发者的合作强度给每个节点设置不同的大小,节点面积越大表示它和其他开发者的合作强度越大,且具有相同合作强度的开发者被赋予同一种颜色加以表示。

1.2 开发者活跃度

ColNet合作网络中节点代表开发者,边为开发者之间的合作关系,网络指标便是基于ColNet中节点之间的关系得到的度量指标。本文引入开发者强度、开发者中心性、活跃度等指标,度量开源软件社区中开发者的群体行为。

合作强度是指ColNet合作网络中节点的度数,也即与开发者有直接合作的其他开发者数,可用式(1)表示,其中M(i)是ColNet=(V,E)中与节点i直接相连的节点集,当且仅当节点i、j之间有直接连边时aij=1,否则aij=0。开发者强度能反映开发者在社区与其他成员的相处情况,是衡量开发者重要性的指标。Di=M(i)=∑j∈M(i)aij

(1) 活跃度(Activity)度量开发者的交际范围,在合作强度基础上进行了丰富。具体而言,活跃度是指开发者与多少人进行过交互。在开发者合作网络中,相比其它节点,如果一个节点拥有很多条边,那么该节点所代表的开发者的活跃度很高。反之,活跃度很低的开发者与其他人建立的链接就非常少。因此,活跃度与节点的度息息相关。若用Activityi表示开发者i的活跃度,活跃度的定义可表示为:Activityi=∑j∈N(i)1DjActivityj

(2) 式(2)中,N(i)是开发者i的合作成员集合,Dj是开发者j的合作强度。考虑到开发者的合作会随时间的推移发生变化,需要对开发者的Activity进行迭代更新。利用典型的PageRank算法进行计算,当相邻两次迭代的开发者活跃度变化程度小于0.001时,停止迭代。

2 实验分析

2.1 数据集

为确保选择的项目具有代表性,选用知名社区Apache中的Tomcat。Tomcat是目前非常流行的Web 应用服务器,是开源社区ASF中Jakarta项目中的一个核心项目,相关信息如表1所示。使用Tomcat从2006年11月-2011年12月共10个版本的开发者交互数据(包括邮件列表信息和修改日志),核心开发者数量由38人发展到144人,合作网络的连边规模也由116人增长到484人,对应版本下提交的修改日志也由495个增加到11 175个。

本文整体流程框架如图2所示,可概括为:首先,分别抓取构建项目开发者合作网络所需的邮件列表信息,并利用Git工具获取它们的开发者提交日志信息;其次,利用获取的开发者交互信息,按照前面所述方式构建开发者合作网络;最后,基于开发者合作网络,进行开发者活跃度分析。

2.2 实验结果

软件需求的变更促使软件发生演化,随着软件版本的更迭,开发者的活跃度也可能随之发生变化。从项目成员的整体活跃度情况分析,图3结果显示,项目开发者在10个版本中的平均活跃度随版本的更迭,表现出相对稳定,范围分布为0.312~0.324,这意味着Tomcat项目团队整体结构变更不大。

虽然,软件项目演化过程中开发者整体活跃度变化不大,但开源软件自由开发、自愿参与的原则,使得项目演化过程中不可避免地存在成员的加入与离开情况。因此,进一步对单个开发者的活跃度演化情况进行分析。此处以在10个版本中都出现了的开发者作为分析对象,发现开发者活跃度的变化趋势可归纳为4类:①开发者先比较活跃,后期越来越不活跃;②活跃度整体上先增后减;③活跃度整体上呈下降趋势;④活跃度不断增加,并最后保持稳定在活跃状况。

图4(a)显示,在前5个版本以内,开发者Hanik和Shapira的活跃度保持稳定,且属于较活跃状态。然而,随着项目版本的更迭,他们的活跃度呈下降趋势,由原来的0.8以上降低到0.2以下。由图4(b)可见,起初两个开发者Barker和Truk的活跃度随着版本的更新而不断升高,而当版本序号达到第4或5个时,开发者的活跃度随着版本序号的变大而减小;图4(c)结果与图4(a)刚好相反,表现为开发者的活跃度先随版本序号的增大而升高,随后,开发者的活跃度保持稳定趋势,表明开发者最后成为社区中稳定的核心力量;最后,在图4(d)中,随着版本序号的递增,开发者活跃度持续下降,这类开发者有可能是处于图4(a)和图4(b)中的后期阶段。

分析发现,还存在部分开发者并不是在10个版本中出现,比如开发者Arcand就只是在版本3-6中出现过,Gomez则自版本4之后才开始加入,但这些开发者活跃度的变化均满足以上4类典型的变化趋势。因此,本文没有单独对这类开发者的行为进行分析。

本文也存在一些不足之处:①实验数据只选取了知名Apache开源社区中的Tomcat开源项目从2016年11月—2011年12月的数据,实验结论还有待在更多开源项目数据集上加以验证;②本文只考虑了开发者活跃度指标下,群体行为的演化分析,更多行为特征指标比如中心性等有待进一步探索。

3 结语

本文以开源社区中开发者合作行为为研究取向,分析开发者在社区中的活跃度变化情况。通过挖掘Tomcat项目10个版本的开发者邮件列表信息与版本提交日志信息,构建开发者合作网络,发现项目在版本迭代更新过程中,开发者团队的整体活跃度表现较为稳定,但单个开发者的活跃度表现出4种基本变化模式,分别为:①开发者先比较活跃,后期越来越不活跃;②活跃度整体上先增后减;③活跃度整体上呈下降趋势;④活跃度不断增加,并最后稳定在活跃状况。endprint

参考文献:

[1] 李德毅.大数据时代的位置服务[R].第七届中国电子政务高峰论坛,北京,2013.

[2] YE Y, KISHIDA K.Toward an understanding of the motivation of open source software developers[C].Proceedings of 25th Intl Conf. on Softw. Eng. (ICSE),2003:419-429.

[3] MENEELY A, WILLIAMS L, SNIPES W, et al. Predicting failures with developer networks and social network analysis[C]. Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering,2008:13-23.

[4] SUREKA A, GOYAL A, RASTOGI A.Using social network analysis for mining collaboration data in a defect tracking system for risk and vulnerability analysis[C].Proceedings of the 4th India Software Engineering Conference,2011:195-204.

[5] CROWSTON K, HOWISON J.Assessing the health of open source communities[J].Computer,2006,39(5):89-91.

[6] SUREKA A, GOYAL A, RASTOGI A.Using social network analysis for mining collaboration data in a defect tracking system for risk and vulnerability analysis[C]. Proceeding of the, India Software Engineering Conference,2011:195-204.

[7] GAO Y, FREEH V, MADEY G.Analysis and modeling of open source software community[C].North American Association for Computational Social and Organizational Science(NAACSOS) Conference,2003.

[8] HAHN J, MOON J Y, ZHANG C.Emergence of new project teams from open source software developer networks:impact of prior collaboration ties[J].Information Systems Research,2008,19(3):369-391.

[9] TORAL S L, MARTNEZ-TORRES M R, BARRERO F. Analysis of virtual communities supporting OSS projects using social network analysis[J]. Information and Software Technology,2010,52(3):296-303.

[10] CROWSTON K, WIGGINS A, HOWISON J. Analyzing leadership dynamics in distributed group communication[C]. Proceedings of the Annual Hawaii Int l Conf on System Sciences(HICSS),2010:1-10.

[11] HUANG S K, LIU K M.Mining version histories to verify the learning process of legitimate peripheral participants[J].Acm Sigsoft Software Engineering Notes,2005,30(4):1-5.

[12] ALLAHO M Y, LEE WC.Analyzing the social ties and structure of contributors in open source software community[C].Proceedings of Intel Conf. on Advances in Social Networks Analysis and Mining,2013:56-60.

[13] HE P, LI B, HUANG Y.Applying centrality measures to the behavior analysis of developers in open source software community[C]. International Conference on Cloud and Green Computing (CGC),2012:418-423.

[14] 劉晓,李兵,何鹏.开源软件社区开发者合作网络的演化分析[J].小型微型计算机系统,2015,36(9):1921-1926.

[15] 何鹏,李兵,杨习辉,等.开源软件社区开发者偏好合作行为研究[J].计算机科学,2015,42(2):161-166.

[16] 陈丹,王星,何鹏,等.开源社区中已有开发者的合作行为分析[J].计算机科学,2016,43(6A):476-479.

(责任编辑:孙 娟)endprint