GitHub开源软件开发过程中关键用户行为分析

2019-01-24 09:30廖志芳李斯江贺大禹赵本洪
小型微型计算机系统 2019年1期
关键词:度量开发者开源

廖志芳,李斯江,贺大禹,赵本洪

(中南大学 软件学院,长沙 410000)

1 引 言

在现代软件开发中,开源社区为软件开发提供了一个高效的合作平台.GitHub1作为新兴的开源服务平台,也受到了越来越多的人关注.此外,GitHub作为一个全球的开发者社交网络,吸引了数以千万计的开发者,以及承担了数以千万计的项目托管任务.为了让用户更加便捷地参与开源项目的开发,GitHub平台为用户提供了Pull Request机制(后文中简称PR)、Issue Tracker System等;其中PR机制允许任何用户参与到任何项目的开发中去,用户只需要将目标项目“fork”到自己的代码库,然后在自己的代`码库中完成更改,通过发起一个PR请求将自己的更改合并到目标代码库中.而Issue Tracker System主要被用来记录和跟踪新的功能需求、开发任务和bug等.在开源社区GitHub中,每一个用户都可以针对开启了Issue跟踪功能的项目创建一个新的issue,从而让其他用户间接的参与到项目的开发过程中.除此之外,开源服务平台GitHub也具有社交平台的功能,用户可以在该平台上关注自己感兴趣的人或者项目,然后GitHub平台会定期地向用户推送其所关注的人或者项目的最新动态,从而方便用户更加迅速地了解项目进展或者参与项目的开发.

在开源服务平台GitHub中,用户的行为主要围绕两个方面:软件开发与用户社交;针对GitHub上的用户行为特性进行分析,在一定程度上有助于软件开发过程中的资源管理以及人员分配等方面,最终帮助项目管理者更加有效地进行软件项目管理.

本文针对GitHub开源软件开发过程中产生的用户行为数据进行分析,提出了OUBA-Model来进行用户行为特性分析,主要针对以下两个问题:

1) GitHub开源软件开发过程中,哪些用户行为是重要的或者关键的用户行为?

2) 这些关键用户行为有什么特点,是否与项目的流行度之间存在相关性?

本文通过实验分析得到关键用户行为以及关键用户行为与项目流行度之间的相关性.

2 相关工作

当前,越来越多的研究者将研究目光投入到开源社区的研究中,其中对于GitHub的研究尤为火热.针对开源社区的研究主要从两个角度出发,第一个是从用户的角度出发,如通过针对开源社区中用户行为特性的分析,帮助用户更好地、更快地融入到开源社区中;第二个是从管理者的角度出发,开源社区管理者主要关注资源管理、资源分配、开发者的工作效率或者贡献度等.

在开源社区GitHub中,用户行为可以分为社交行为(follow、watch),生产行为(对项目的行为,比如fork、commit、comment)等.通过针对用户行为的分析,不仅可以帮助项目管理者进行开发者工作和贡献度评估,同时也能帮助新用户对开源社区中用户行为有了更加明确的知识概念上的了解.

针对用户行为的研究一直都是与人类相关的各个领域的一个研究重点.当然,在开源社区中也不例外,Xu Ben等人通过对开发者的行为进行综合分析,将开发者工作与项目整体工作进行比较分析,从而帮助管理者来评估开发者的贡献度[1].Brandon Heller等人利用用户的地理分布信息来分析用户之间的协作行为[2].Saya Onoue等人通过分析开发者的技术特性以及行为的活跃度来帮助将开发者进行分类,并指出活跃的项目开发者行为多样性更强[3].为了研究开源社区GitHub上的社会行为模式,Yue Yu等人构建开发者的follow关系网络,从该关系网络中发现四种社会行为模式[4].Yang Weicheng等人开发了一款Commit分析工具(CAT)自动分析Commit日志,利用可视化技术分析Commit行为与文件演变的关系[5].Lingxiao Zhang等人对每个项目建立用户的行为向量,以余弦相似性方法计算项目相似性,并分析了对项目相似性影响最大的行为[6].Bogdan Vasilescu等人通过综合调查、分析和回归模型等方法研究了开发者上下文的切换行为,发现在多个项目工作的开发者如果关注较少的项目将有更高的生产力[7].Kelly Blincoe等人通过项目分析结合用户调查分析对用户活动进行定量分析,发现在影响力方面,follow比contribution更重要[8].

从上述相关研究可以看出:许多研究者都已经对开源软件开发过程中的用户行为展开了研究,但是从整体研究内容可以看出大多数研究都只是对用户某种行为或者某一类行为进行研究分析,并没有相关研究对开源软件开发过程中的用户行为进行整体的度量与分析,本文将针对开源软件开发过程中的用户行为进行整体度量与分析,并利用可视化技术来辅助研究,最终帮助项目管理者更好地对软件项目的开发过程进行管理.

3 开源软件开发过程中关键用户行为分析

在本文第一章中提出了两个研究问题,为了分析并回答这两个研究问题,本文将数据可视化技术运用到数据分析中,构建了GitHub开源软件开发过程中关键用户行为分析的模型(Open source community User Behavior Analysis Model,下文简称OUBA-Model).

3.1 OUBA-Model

OUBA-Model主要由两个部分组成,其中第一部分主要是针对GitHub开源软件开发过程中用户行为重要性的度量,识别关键用户行为;第二部分主要是根据第一部分研究所得到的用户行为重要度,分析其中重要度比较高的关键用户行为.图1是OUBA-Model的基本框架图.

图1 OUBA-Model分析模型的基本框架Fig.1 Framework of OUBA-Model

如图1所示,OUBA-Model主要针对两个重要的点展开分析——用户行为重要度度量以及关键用户行为分析.针对这两个点形成了一套分析的流程,首先,本文提出一种基于用户行为频次特征的用户行为重要度度量的方法,简称LRF行为重要性度量方法,该方法以基于用户行为频次特征的LOF算法为基础,利用一种类随机森林特征重要性度量的方法来度量开源社区GitHub中用户行为的重要度,并利用可视化技术对各个开源项目中的用户行为重要度以及平均重要度进行可视化分析,从而综合评估GitHub开源软件开发过程中的关键用户行为.其次本文根据评估得到的关键用户行为,利用可视化技术分析关键用户行为与项目流行度之间的相关性.通过OUBA-Model最终完成对开源软件开发过程中关键用户行为的识别以及可视化分析.

3.2 LRF行为重要性度量方法

在开源社区GitHub中,每一个用户行为都在某种程度上对项目开发或者用户社交等方面产生不同程度的影响,每个用户行为在整体的度量过程中所起的作用是不一样的.例如项目开发过程中,Pull Request和Issue等发挥着非常重要的作用,那么无疑与Pull Request和Issue相关的用户行为在软件开发项目中就显得格外重要了;当然也不能否定其他用户行为对于项目开发的影响力,其他对项目贡献的行为同样也具有一定的影响力.在该部分,我们主要研究用户行为的重要度,进而评估得到关键用户行为,并对关键用户行为进行相关分析.

在该部分,本文提出了一种基于用户行为频次特征的用户行为重要度度量的方法;该方法主要分为两个主要部分,首先采用局部异常检测算法,并以用户行为频次为特征来计算项目中所有用户的局部异常值,然后使用一种类似随机森林特征重要性度量的方法来度量行为重要性.以下是该方法的详细介绍:

3.2.1 用户局部异常度量

在对开源社区GitHub用户行为进行异常检测时,并没有一个特定的模式来判定什么是异常.本文并不需要确定某个用户是否异常或者特殊,而是想通过分析用户行为对用户异常度的影响,从而去分析用户行为的重要性.因此,本文采用基于用户行为频次的局部异常因子(Local Outlier Factor,以下简称LOF)算法来进行用户行为的异常度度量.该算法是一个非监督的学习模型,并且该方法可以计算出一个异常值,方便后续进行行为重要性的定量度量.该算法有以下几点优势:

1)该算法是一个非监督的学习模型,其训练过程不需要训练数据.这很符合本文研究的需求,因为对于开源社区GitHub中的用户行为异常并没有明确的定义;

2)该方法可以计算出一个异常值,而不是给出是否异常的一个结果.所以可以根据异常值的结果对用户行为进行相关分析,符合本文研究的需求;

3)该算法计时间复杂度为O(NlogN),其中N为实验用户数目.

局部异常因子LOF是Breuning等人在2000年提出的概念.其意义是对于任何一个数据实例,LOF值等于该数据节点的k个最近邻的平均局部密度与该数据节点本身局部密度的比值.在LOF算法实现中,对于数据点p而言,有以下定义:

定义1.k-距离(k-distance)

对于任意自然数k,定义p的k-距离为p与其k个最近邻居的距离最大值,其距离为欧几里德距离.

定义2.k-距离邻域(Nk(p))

给定p的k-距离,p的k-距离邻域包含所有与p的距离不超过k-距离的对象.

那么对于一个用户p而言,用户p的局部异常度计算方法如公式(1)所示.

(1)

在公式(1)中,Nk(p)代表用户p的k最近邻居集,lrdk(p)代表用户p的局部可达密度,p的局部可达密度为用户p相对于所有k个最近邻居平均可达距离的倒数.lrdk(p)可由公式(2)计算得出.

(2)

在公式(2)中,reach_distk(p,o)代表用户p相对于用户o的可达距离,reach_distk(p,o)可由公式(3)计算得出.

reach_distancek(p,o)=max{k_distance(o),d(p,o)}

(3)

在公式(3)中,d(p,o)代表基于用户行为向量,用户p和用户o之间的欧几里得距离,代表用户o的k-距离.

3.2.2 行为重要性度量

用户行为重要度的度量主要是分析GitHub开源软件开发中用户行为的重要性,评估或者识别关键用户行为;本文提出LRF用户行为重要性度量方法,图2所示的是LRF方法度量用户行为重要性的详细步骤.利用LRF方法度量某个用户行为X的重要性的描述如下:

i. 将选中的用于计算用户异常度的用户行为全部选择,计算出数据集中每一个用户的异常度;

ii. 每次去除掉一个行为(只去掉当前度量的用户行为X),用剩余的行为再次计算用户异常度;

iii.将每次去除掉一个行为后计算出的用户异常度与全部用户行为计算出的用户异常度进行比较,并计算出两个值差的绝对值,并对所有结果进行排序.

图2 LRF方法度量用户行为重要性的详细步骤Fig.2 Overall steps of LRF

在最终求出的一组数据中,查看行为X的位置,就可以判断行为X的对于基于用户行为频次异常度计算的重要性.而之所以可以使用这个结果作为相应行为重要性的度量值是因为如果去掉行为X后,计算出的异常值有大幅度差异,则说明这个行为的重要程度比较高.

4 用户行为重要度度量及行为特性分析

在该部分,本文主要介绍实验数据集,基于用户行为实验数据集,利用LRF度量方法对用户行为重要性进行度量,并对度量结果进行分析;分析得到关键用户行为,进而对关键用户行为进行相关分析.

4.1 实验数据集

本文实验所选的数据集获取自第三方库GitHub Archive收集的数据集.GitHub Archive是一个网站,它使用GitHub API定期抓取GitHub事件数据并上传到Google Big Query进行研究和分析.此外,本文选择了GitHub中10个流行项目作为研究对象(包括Nodejs,JQuery,Bootstrap,Rails,D3.js,Three.js,Docker,React.js,ECharts,Angular.js),收集了项目中开发者产生的用户行为事件以及项目的watch数据.其中用户相关行为事件的描述可以从存储库webhooks中获取.在GitHub开源软件开发过程中,GitHub提供了20多种用户行为事件类型,包括新的提交和项目分支,对某一个对象进行的一系列操作,如评论和编辑等.

本文从webhooks中选择了15种与用户高度相关的行为事件进行实验分析,例如IssuesEvent、CreateEvent、FollowEvent、DeleteEvent、ForkEvent、WatchEvent、LabelEvent、PullRequestReviewEvent、PullRequestEvent、IssueCommentEvent等.在数据集中,这些项目可能有很多开发者,所以必须应用以下数据筛选条件来选择一部分开发者作为实验数据集.

条件1.实验所选开发者必须拥有本文所选的这15种用户行为事件的数据记录;

条件2.所选开发者的用户行为事件创建的时间必须在2013年01月到2015年01月之间;由于GitHub Archive数据记录的频率非常高,数据量非常大,所有本文对实验数据集的时间区域进行了一些限制;

条件3.如果选择的开发者拥有某种用户行为事件,那么他所拥有的该事件的数目必须高于100个.

本文从数据筛选的结果中,从每个项目中选取了300个开发者,总共3000个开发者来进行用户行为重要度的度量.并收集了实验所选的10个流行项目的watch数据用于项目流行度的分析.

4.2 用户行为重要性度量结果分析

在本文中,为了研究GitHub中用户行为的重要度,提出了LRF用户行为重要度度量方法来度量用户行为重要性;本文选择了10个流行项目来综合进行用户行为重要度度量,并从webhooks选取了15种行为事件来进行用户异常度度量,例如IssuesEvent、PullRequestEvent、IssueCommentEvent、FollowEvent、LabelEvent、ForkEvent、WatchEvent、PullRequestReviewEvent、CommitCommentEvent、PullRequestReviewCommentEvent、CreateEvent、DeleteEvent等;每个行为事件都包含了相应对象的一系列操作,例如IssuesEvent代表的就是一个issue被分配,取消分配,标记,取消标记,打开,编辑,建里程碑,取消里程碑,关闭或重新打开等等一系列对issue操作中的一种.表1即为在10个流行项目中,在利用LRF方法进行用户行为重要度度量后,各个行为事件的重要性的平均值.

表1 LRF方法处理后各个行为事件的平均重要度Table 1 Average value of each user behavior event

从表1中可以看到与项目贡献相关的用户行为事件的重要度普遍较高.例如与项目Issue相关的IssueCommentEvent、IssuesEvent,与PR相关的PullRequestEvent、PullRequestReviewEvent等;为了更好地分析各个项目中这些行为事件的重要度分布,本文选出平均重要度中的大小排名前8的行为事件做进一步分析.

如图3所示,本文将各个项目中的度量结果以热力矩阵图的形式进行展现,其中矩形的颜色深度值代表了用户行为事件的重要度值.图3展示了表1中平均重要度top-8的行为事件在10个流行项目中的行为重要度的分布(其中AVG代表的是用户行为事件的平均重要度).从图3中,可以看到在这10个流行项目的基础上,用户的以看到在这10个项目的基础上,用户的IssueCommentEvent、PullRequestEvent行为事件的重要性度量的结果都比较高,虽然有时候会有些许变化,但是总体上来说变化不大,这两个行为事件的重要度比较高.

图3 10个流行项目的行为重要性及平均重要性热力矩阵图Fig.3 HeatMap:the importance result often popular projects and its average value in each user behavior

结合表1和图3可以看出与Issue和PullRequest相关的用户行为事件基本都具有较高的重要度.从度量结果和分析过程中可以看出,在GitHub的流行项目中,用户行为中与issue和PR相关的用户行为都具有比较高的重要度,从而也反映出了Issue以及PR在项目开发中是非常重要的存在.

4.3 Issue及PR与项目流行度之间的相关性分析

在4.2节中,通过LRF用户行为重要性度量方法度量得到在GitHub开源软件开发过程中,与PR和Issue相关的用户行为具有很高的重要度,在研究Issue以及PR相关用户行为与项目流行度之间的相关性时,本文选择IssueCommentEvent和PullRequestEvent两个较为关键性的行为作为研究分析的对象,主要针对两个关键性的行为,利用可视化视图定性地分析它们与项目流行度之间的关系,然后计算这两个关键性的行为与项目流行度之间的皮尔逊相关系数,从而定量地分析这两个关键性的行为与项目流行度之间的相关性.

本文选用项目的watch数目作为项目流行度的指标;在开源社区GitHub中,如果一个用户对一个项目感兴趣,这个用户将会选择关注这个项目,即watch操作.在针对开源社区GitHub的研究中,通常选择watch这样一个指标来描述项目的流行程度.

在对IssueCommentEvent和PullRequestEvent与项目流行度之间的关系进行定性分析时,本文按照数据的时间信息对这两个行为以及项目的watch数目以月份为单位进行统计,得到其随时间的数据分布,为了观察它们之间的相关性,本文将针对其统计数据分别进行归一化,具体操作见公式(4):

(4)

在公式(4)中,Month_Value是基于时间信息统计的一个月份的数目;Max_Month_Value是所有月份统计中的最大值.M_V是一个月份的数目进行归一化之后的结果.

在对数据进行归一化之后,可以对IssueCommentEvent、PullRequestEvent以及项目Watch随时间的变化趋势进行更有效地分析.

如图4所示是流行项目Nodejs和JQuery中IssueCommentEvent、PullRequestEvent以及项目Watch随时间的变化趋势;从图中可以看出,在项目的开发过程中,绝大部分的时间周期内,项目的流行度与issue及PR相关的行为都保持着一致性,说明它们之间存在一定的相关性.

图4 项目流行度watch与IssueCommentEvent及 PullRequestEvent的时间趋势图(项目JQuery和Nodejs)Fig.4 Time trend diagram of IssueCommentEvent, PullRequestEvent and watch in JQuery and Nodejs

本文在相关性的定性分析中,发现项目的流行度与issue及PR相关的行为是存在一定的正相关性的,为了验证IssueCommentEvent、PullRequestEvent与项目流行度之间的相关性,本文利用皮尔逊相关性分析方法对其进行定量分析;本文在该部分主要计算用户行为数据变量与项目流行度之间的皮尔逊相关系数,在图形可视化呈现一定相关性的基础上,计算两者之间的皮尔逊相关系数验证其相关性.

皮尔逊相关系数(Pearson correlation coefficient)也称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient),它是一种线性相关系数.

皮尔逊相关系数记为r,用来反映两个变量X和Y的线性相关程度,r值介于-1到1之间,绝对值越大表明相关性越强.

(5)

相关系数ρ定义为两个变量X、Y之间的协方差和标准差的比值.在公式(5)中,cov(X,Y)表示变量X和变量Y之间的协方差,σX代表变量X的标准差.

本文基于数据集中10个流行项目计算IssueCommentEvent、PullRequestEvent与项目流行度之间的斯皮尔曼系数,通过计算得到IssueCommentEvent与项目流行度watch之间的皮尔森相关系数值ρ接近0.835,而PullRequestEvent与项目流行度watch之间的皮尔森相关系数值ρ接近0.793.这个定量结果再次证明了项目的流行度与issue及PR相关的行为是存在一定的正相关性的,说明了项目越活跃,项目受到的关注度越高,从而项目也会越来越趋于流行化.

5 总结与展望

为了对GitHub开源软件开发过程中关键用户行为进行分析,本文提出了OUBA-Model分析模型来进行用户行为分析,并提出LRF用户行为重要性度量方法来识别开源软件开发中的关键用户行为.通过七个流行项目的实验表明,在开源软件开发中与PR和Issue相关的用户行为显得尤为重要,且在开源软件开发过程中这些行为与开源项目的流行度之间存在相关性.同时,分析的结果可以更好地指导GitHub开源软件的管理与开发.

为了更进一步对关键用户行为的特性进行分析,未来可以对关键用户行为相关的评论信息及文本描述信息进行主题分析,并基于时间分布来研究用户行为的主题分布,寻找关键用户行为随时间的主题分布特性.

猜你喜欢
度量开发者开源
鲍文慧《度量空间之一》
五毛钱能买多少头牛
2019开源杰出贡献奖
突出知识本质 关注知识结构提升思维能力
度 量
三参数射影平坦芬斯勒度量的构造
“85后”高学历男性成为APP开发新生主力军
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
16%游戏开发者看好VR