趙佳斌,趙海燕,曹 健,陳慶奎
1(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海市現(xiàn)代光學(xué)系統(tǒng)重點(diǎn)實(shí)驗(yàn)室光學(xué)儀器與系統(tǒng)教育部工程研究中心,上海 200093)2(上海交通大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,上海 200030)
E-mail:cao-jian@sjtu.edu.cn
伴隨社交網(wǎng)絡(luò)與軟件開發(fā)技術(shù)的逐步融合,形成了一種以開源社區(qū)為平臺(tái)的社交化軟件開發(fā)形態(tài),原本集中封閉式的軟件開發(fā)模式向開放、分布的軟件開發(fā)模式轉(zhuǎn)變.諸如GitHub這樣的自組織、自愿參與的開源社區(qū)平臺(tái)吸引了大量來自不同國家和地區(qū)、擁有不同開發(fā)經(jīng)驗(yàn)的開發(fā)者參與到開源軟件的開發(fā)中.
GitHub采用git來托管項(xiàng)目,支持基于pull-request[1]的開發(fā)方式,允許社區(qū)內(nèi)的開發(fā)者分叉(fork)任意公開的軟件項(xiàng)目,該操作會(huì)復(fù)制原始的項(xiàng)目進(jìn)而允許開發(fā)者完成新功能編寫或錯(cuò)誤修復(fù),從而為潛在的貢獻(xiàn)者提供了低準(zhǔn)入門檻.開發(fā)人員通過創(chuàng)建和分叉開源項(xiàng)目,推送修改的代碼,審查合并他人推送的代碼,收藏和關(guān)注感興趣的開源項(xiàng)目和開發(fā)者等以便了解最新的開發(fā)動(dòng)態(tài).同時(shí),開發(fā)者之間也通過評(píng)論、提問、@等機(jī)制相互交流、共享開發(fā)經(jīng)驗(yàn).這種開放化、社交化的協(xié)同開發(fā)方式支撐了群體性軟件開發(fā)活動(dòng),使得開源社區(qū)不斷壯大,也為軟件開發(fā)提供了強(qiáng)大的生產(chǎn)力.截止到2018年,GitHub上托管的開源項(xiàng)目已經(jīng)超過了9600萬,開發(fā)者人數(shù)也突破了3100萬.
GitHub鼓勵(lì)軟件開發(fā)活動(dòng)的透明性[2],它指的是開發(fā)者身份及其活動(dòng)對(duì)其他用戶是可見的.因而,開發(fā)者在開源社區(qū)的開發(fā)活動(dòng)會(huì)留下大量的用戶行為數(shù)據(jù),這些行為數(shù)據(jù)能夠反映開發(fā)者的意圖、能力和經(jīng)驗(yàn)等.GitHub平臺(tái)上項(xiàng)目開發(fā)活動(dòng)數(shù)據(jù)的公開和透明,為研究大規(guī)模軟件協(xié)同開發(fā)平臺(tái)的開發(fā)模式、協(xié)作方式和人員特點(diǎn)等提供了良好的條件.
開發(fā)人員通過參與某一項(xiàng)目可以提高其能力,了解技術(shù)的最新動(dòng)態(tài)、乃至實(shí)現(xiàn)其自我價(jià)值.出于不同的目的與動(dòng)機(jī),多數(shù)開發(fā)者在一段時(shí)間內(nèi)會(huì)同時(shí)參與到多個(gè)項(xiàng)目中,同時(shí),在結(jié)束或者退出某一個(gè)項(xiàng)目后,又會(huì)選擇另一個(gè)項(xiàng)目,這種同時(shí)或者依次在不同項(xiàng)目中的參與行為,本文稱之為跨項(xiàng)目行為.在GitHub上,跨項(xiàng)目非常普遍,然而,對(duì)這一普遍性行為目前還缺乏研究.圍繞這一行為有許多問題值得探討,例如,開發(fā)者的跨項(xiàng)目行為有怎樣的特點(diǎn)?開發(fā)者同時(shí)參加的項(xiàng)目或者依次參加的項(xiàng)目之間存在什么樣的關(guān)聯(lián)?回答這些問題對(duì)于設(shè)計(jì)和改善開源項(xiàng)目的推薦系統(tǒng)有著重要的意義.開源項(xiàng)目需要找到感興趣的開發(fā)者,而開發(fā)者也需要找到感興趣的項(xiàng)目,目前的推薦系統(tǒng)中忽略了開發(fā)者當(dāng)前的項(xiàng)目參與狀態(tài),因此,對(duì)跨項(xiàng)目行為的理解能夠有助于開發(fā)更好的推薦算法.
本文旨在通過分析開發(fā)者的行為數(shù)據(jù),理解開發(fā)者跨項(xiàng)目行為特點(diǎn).具體來說,我們嘗試回答以下5個(gè)研究問題:
1)開發(fā)者在短期內(nèi)是否會(huì)參加多個(gè)不同的項(xiàng)目;
2)開發(fā)者是否會(huì)在一個(gè)項(xiàng)目中長期貢獻(xiàn);
3)時(shí)間間隔對(duì)開發(fā)者再次回歸項(xiàng)目有何影響;
4)一個(gè)開發(fā)者同時(shí)活躍參與的多個(gè)項(xiàng)目的相似性如何;
5)在某個(gè)項(xiàng)目中不活躍后新加入的項(xiàng)目與原來項(xiàng)目是否存在相似性.
本文組織如下:在第二節(jié)中介紹相關(guān)的研究工作,第三節(jié)中介紹研究所用的數(shù)據(jù)集,第四節(jié)介紹了本文的研究方法,第五節(jié)中對(duì)結(jié)果進(jìn)行討論,最后總結(jié)全文并對(duì)未來的研究進(jìn)行了展望.
近年來GitHub開源社區(qū)不斷壯大,研究人員也對(duì)其展開了大量的研究,其中就包括對(duì)社區(qū)中開發(fā)者的分析.開源社區(qū)的開發(fā)團(tuán)隊(duì)成員多為自發(fā)組織的,具有較高的流動(dòng)性和多樣性[3].文獻(xiàn)[4,5]對(duì)開源社區(qū)中新加入的開發(fā)者面臨的問題做了總結(jié)并給出了解決方法的參考指南.文獻(xiàn)[6,7]將開發(fā)者在開源社區(qū)中的角色分為項(xiàng)目負(fù)責(zé)人、核心成員、活躍開發(fā)人員、臨時(shí)開發(fā)人員、錯(cuò)誤修復(fù)者、錯(cuò)誤報(bào)告者、讀者和被動(dòng)用戶等,并將這種結(jié)構(gòu)稱之為“洋蔥結(jié)構(gòu)”.不同角色的開發(fā)者承擔(dān)著不同的任務(wù).值得注意的是流行項(xiàng)目的貢獻(xiàn)者中48.9%都是臨時(shí)貢獻(xiàn)者[8].
開發(fā)者在一個(gè)項(xiàng)目中的角色并不是一成不變的,文獻(xiàn)[9]分析了開發(fā)者從新加入人員逐步成為長期貢獻(xiàn)者甚至是核心人員的原因,包括參與動(dòng)機(jī)和整體開發(fā)環(huán)境,與普通加入者相比,他們?cè)陧?xiàng)目中的狀態(tài)表現(xiàn)更為積極因而也更受關(guān)注.文獻(xiàn)[10]對(duì)活躍項(xiàng)目中的開發(fā)者進(jìn)行了研究,發(fā)現(xiàn)其中的開發(fā)者類型往往是混合型的,即開發(fā)者在各自的開發(fā)活動(dòng)中表現(xiàn)出不同特征.例如一些貢獻(xiàn)者在代碼,評(píng)論和問題解決上表現(xiàn)相對(duì)均衡,而有的貢獻(xiàn)者側(cè)重其中的一方面.文獻(xiàn)[11]以訪談的方式分析了影響開發(fā)者參與狀態(tài)轉(zhuǎn)變的因素.文獻(xiàn)[12]研究了如何改善團(tuán)隊(duì)管理,他們發(fā)現(xiàn)項(xiàng)目中不活躍但作為潛在貢獻(xiàn)者的這批開發(fā)者占80%,對(duì)整個(gè)項(xiàng)目的開發(fā)活動(dòng)有著較大的影響,主要表現(xiàn)在問題解決速度和對(duì)pull-request響應(yīng)上.
參與動(dòng)機(jī)和社交關(guān)系將影響社區(qū)中開發(fā)者的行為.動(dòng)機(jī)理論被廣泛用于解釋人類行為,同樣適用于開源社區(qū).開源社區(qū)中的開發(fā)者參與動(dòng)機(jī)主要包括:學(xué)習(xí)如何寫代碼、關(guān)注社區(qū)中的名人、為個(gè)人或團(tuán)隊(duì)的工作做宣傳、尋找有趣的新項(xiàng)目等[13].社交關(guān)系是另一大影響因素,開發(fā)者加入存在好友的項(xiàng)目其貢獻(xiàn)率將會(huì)有大幅提升[14].社交因素有利于維持一種長期的貢獻(xiàn)狀態(tài).文獻(xiàn)[15]重點(diǎn)研究了開發(fā)者的關(guān)注網(wǎng)絡(luò),發(fā)現(xiàn)了四種典型的社交行為模式.文獻(xiàn)[16]研究了開發(fā)者的合作模式,開發(fā)者之間的合作次數(shù)越多,那么他們?cè)俅魏献鞯目赡苄砸簿驮酱?同時(shí),開發(fā)環(huán)境及管理者對(duì)于合作有著明顯的影響.
Commit提交行為是開源社區(qū)項(xiàng)目版本控制的一個(gè)重要操作,同時(shí)也是衡量開發(fā)者的貢獻(xiàn)的一個(gè)重要指標(biāo)[17].文獻(xiàn)[18]對(duì)項(xiàng)目中組織及個(gè)人的提交行為做分析,大多數(shù)連續(xù)提交之間的時(shí)間間隔很短且滿足冪律分布.文獻(xiàn)[19]提出四個(gè)指標(biāo)研究開發(fā)提交行為與項(xiàng)目版本變換的關(guān)系,研究發(fā)現(xiàn),大規(guī)模提交所需時(shí)間是普通提交的3倍.
從上述相關(guān)研究工作的進(jìn)展看,研究人員從不同的角度探索了開發(fā)者的行為特征,然而,本文探討了開發(fā)者的跨項(xiàng)目行為特點(diǎn),對(duì)上述研究進(jìn)行了補(bǔ)充,從而有利于我們更完整地理解開源社區(qū)的開發(fā)者行為.
本文的研究所依賴的數(shù)據(jù)借助GitHub提供的豐富的API接口獲得.開發(fā)者在進(jìn)行軟件項(xiàng)目協(xié)同開發(fā)的過程中會(huì)積累一定數(shù)量的粉絲,粉絲數(shù)量代表了他在開源社區(qū)中的地位和影響力,擁有大量粉絲的開發(fā)者被視作社區(qū)中的“名人”.本文據(jù)此選擇了在GitHub社區(qū)中最具影響力的1000名開發(fā)人員,提取了這些開發(fā)者在2017年1月-2018年12月為期兩年的活動(dòng)行為數(shù)據(jù).
GitHub平臺(tái)對(duì)開發(fā)者提供了貢獻(xiàn)統(tǒng)計(jì),開發(fā)者的貢獻(xiàn)是以月為時(shí)間單位記錄的,貢獻(xiàn)次數(shù)及內(nèi)容越多,該月所在區(qū)域顯示的顏色就越深.記錄的行為主要包括以下7種:Create Repository,Created commits,Created a pull request,Opened pull requests,Created an issue,Reviewed pull requests,Opened issues.
我們獲取的原始數(shù)據(jù)包含了1000名開發(fā)者、47042個(gè)項(xiàng)目、7種不同操作的209562條行為數(shù)據(jù).這些數(shù)據(jù)需要進(jìn)行預(yù)處理.考慮到GitHub開源社區(qū)中的數(shù)據(jù)相對(duì)稀疏,本文將“月”作為分析周期;鑒于本文分析的是開發(fā)者跨項(xiàng)目的行為,僅保留開發(fā)者對(duì)社區(qū)中他人公開項(xiàng)目的行為數(shù)據(jù);為了盡可能減少“被降低”的情況,即開發(fā)者新加入的項(xiàng)目由于沒有足夠的觀察時(shí)間就被認(rèn)為在加入后沒有在該項(xiàng)目中進(jìn)行長期的貢獻(xiàn)和活動(dòng),剔除了2018年中新加入項(xiàng)目的記錄,保證了開發(fā)者在項(xiàng)目中的行為數(shù)據(jù)的觀察周期至少為一年.
本節(jié)主要分析開發(fā)者短期內(nèi)參與到多個(gè)不同項(xiàng)目的現(xiàn)象是否很普遍及這種同時(shí)參加多個(gè)項(xiàng)目的行為與開發(fā)者屬性的關(guān)系.
按條件對(duì)數(shù)據(jù)篩選后,按月作分組統(tǒng)計(jì),結(jié)果如圖1所示,其中在一個(gè)月中僅參與一個(gè)項(xiàng)目的記錄數(shù)最多,為2497條,占23.7%,參與多于一個(gè)項(xiàng)目的記錄數(shù)則占76.3%.其中的最大記錄是某一位開發(fā)者在一個(gè)月中參與了67個(gè)不同的項(xiàng)目.在數(shù)據(jù)集上的平均值是7.29個(gè).
圖1 開發(fā)者在一個(gè)月中參與項(xiàng)目個(gè)數(shù)Fig.1 Number of projects the developer participatesin in a month
我們進(jìn)一步按人員計(jì)算開發(fā)者每月參與項(xiàng)目數(shù)的均值,其頻率直方圖如圖2所示.我們發(fā)現(xiàn)在一個(gè)月中參與項(xiàng)目個(gè)數(shù)的均值大于5個(gè)時(shí),人數(shù)出現(xiàn)大幅下降.具體來看,參與項(xiàng)目個(gè)數(shù)不超過1個(gè)的占14.1%;其中均值在1-5之間的占57.1%.參與項(xiàng)目個(gè)數(shù)均值大于20個(gè)的僅占5.3%.
圖2 一個(gè)月中參與項(xiàng)目數(shù)的頻率直方圖Fig.2 Frequency histogram of the number of participatedprojects in a month
上述結(jié)果表明,絕大多數(shù)的活躍開發(fā)者會(huì)同時(shí)參加多個(gè)項(xiàng)目,但是,他們同時(shí)參加的項(xiàng)目也不可能太多.產(chǎn)生這樣的結(jié)果的原因主要是開發(fā)者的精力通常是有限的,完成一項(xiàng)新功能或者漏洞的修復(fù)需要一段時(shí)間;同時(shí)開發(fā)者有一些自己的項(xiàng)目需要編寫和維護(hù),所以通常無法參與數(shù)量過多的項(xiàng)目.
開發(fā)者的自身屬性包括加入社區(qū)時(shí)長、擁有項(xiàng)目數(shù)量、關(guān)注項(xiàng)目的數(shù)量、常用編程語言等.首先分析參與項(xiàng)目數(shù)量與加入社區(qū)時(shí)長、擁有項(xiàng)目數(shù)量及關(guān)注項(xiàng)目數(shù)量的相關(guān)性.此處我們使用Pearson相關(guān)系數(shù)來衡量相關(guān)性,它是一種衡量兩個(gè)隨機(jī)變量相關(guān)程度的常用方法,相關(guān)系數(shù)r值取值范圍在[-1,1]之間,取值越大就表示兩個(gè)變量之間的相關(guān)程度越高,反之,相關(guān)程度越低.顯著水平p值則是用來評(píng)估相關(guān)程度計(jì)算結(jié)果的“顯著程度”.我們分別計(jì)算一個(gè)月中參與的項(xiàng)目數(shù)與加入社區(qū)時(shí)長、擁有項(xiàng)目數(shù)量、關(guān)注項(xiàng)目數(shù)量的Pearson相關(guān)性,計(jì)算結(jié)果如表1所示.根據(jù)取值范圍判斷變量的相關(guān)強(qiáng)度關(guān)系表及p值遠(yuǎn)小于0.01可知,短期內(nèi)參與的項(xiàng)目數(shù)與所涉及的三個(gè)因素都有著很強(qiáng)的顯著水平.其中,短時(shí)間參與項(xiàng)目數(shù)量與加入社區(qū)時(shí)長和關(guān)注項(xiàng)目數(shù)量弱相關(guān);與擁有項(xiàng)目個(gè)數(shù)為強(qiáng)相關(guān).
表1 跨項(xiàng)目行為的因素相關(guān)性分析Table 1 Correlation analysis for factors of cross-project behaviors
我們也分析了開發(fā)者常用語言與參與項(xiàng)目數(shù)量的關(guān)系,結(jié)果如表2所示.其中R語言的開發(fā)者參與項(xiàng)目數(shù)最多,其次為PHP,最少的是C語言的開發(fā)者.
表2 開發(fā)語言與參與項(xiàng)目數(shù)Table 2 Relationship between language and number of participating projects
本節(jié)分析開發(fā)者在項(xiàng)目中參與時(shí)長以及開發(fā)者在項(xiàng)目中的角色對(duì)其長期貢獻(xiàn)的影響.互聯(lián)網(wǎng)中,用戶通常存在一個(gè)生命周期,這里的生命周期是指用戶從加入平臺(tái),熟悉平臺(tái),參與平臺(tái)到最終流失的過程.用戶的生命周期就自身而言,是一種參與度的變化,用戶參與度也可以稱之為用戶在該平臺(tái)的活躍度.
開發(fā)者參與到開源項(xiàng)目中也會(huì)存在一種活躍度的變化,開發(fā)者從發(fā)現(xiàn)一個(gè)自己感興趣的項(xiàng)目、熟悉該項(xiàng)目、參與其中到逐步流失這樣的一個(gè)過程通常會(huì)體現(xiàn)在行為的時(shí)間間隔中.
在對(duì)開發(fā)者首次加入項(xiàng)目的時(shí)間做篩選后,以開發(fā)者參與的開源項(xiàng)目作為對(duì)象按月統(tǒng)計(jì),結(jié)果如圖3、圖4所示.在開源項(xiàng)目中僅僅參加了一個(gè)月就不再參加的記錄條數(shù)為14401條,占58.7%;參與月數(shù)為2-5個(gè)月的記錄數(shù)為6519條占26.6%,在所分析的時(shí)間內(nèi)參與月數(shù)超過15個(gè)月的有1673條記錄,占6.83%,有142條記錄在項(xiàng)目中的參與月數(shù)為24個(gè)月,受制于數(shù)據(jù)采集時(shí)長,實(shí)際持續(xù)的時(shí)間可能更長.
開發(fā)者在GitHub中的角色通常分為三種:成員、貢獻(xiàn)者和臨時(shí)參與者.當(dāng)開發(fā)者提交的pull-request被合并至源項(xiàng)目后,他就成為了該項(xiàng)目的貢獻(xiàn)者.一個(gè)重要的問題是不同的角色是否會(huì)影響開發(fā)者的貢獻(xiàn)時(shí)長?為此本文做了相應(yīng)分析.由于存在開發(fā)者既是成員又貢獻(xiàn)者的情況,此時(shí)將這類開發(fā)者劃分為成員,分別計(jì)算三種角色參與項(xiàng)目的平均時(shí)長.我們發(fā)現(xiàn)作為成員,平均參與時(shí)長為7.39個(gè)月,貢獻(xiàn)者為5.02個(gè)月,臨時(shí)參與者為3.51個(gè)月.這個(gè)結(jié)果符合我們的一般認(rèn)識(shí).
圖3 開發(fā)者在不同項(xiàng)目中參與月數(shù)Fig.3 Length of time developers participate in different projects
圖4 聚合統(tǒng)計(jì)結(jié)果Fig.4 Cumulative results
開發(fā)者長期參與到一個(gè)項(xiàng)目的過程中,可能會(huì)出現(xiàn)一段時(shí)間沒有行為的情形,我們稱之為“空窗期”.出現(xiàn)空窗期后,有些開發(fā)者會(huì)再次參加項(xiàng)目(本文稱之為“回歸”),而有些開發(fā)者就不再參加項(xiàng)目了(本文稱之為“流失”).
圖5 時(shí)間間隔與回歸項(xiàng)目的關(guān)系Fig.5 Relationship between the situation and time of returning to the project
本節(jié)分析參與過程中所存在的空窗期長短對(duì)開發(fā)者再次回歸的影響.計(jì)算間隔n個(gè)月后開發(fā)者回歸的情況,首先對(duì)記錄中間隔周期不滿n個(gè)月的進(jìn)行刪除,尤其是處于采集周期尾部的記錄;然后統(tǒng)計(jì)在間隔了n個(gè)月后開發(fā)者回歸到項(xiàng)目的記錄數(shù)并計(jì)算其占比,結(jié)果如圖5所示.在間隔周期為零個(gè)月的情況下(在連續(xù)的兩個(gè)月中都有參與行為),開發(fā)者再次回歸的占比為62.51%;當(dāng)間隔周期為一個(gè)月那么這個(gè)占比會(huì)下降到13.98%;當(dāng)間隔為兩個(gè)月,開發(fā)者再次回歸的情況占6.95%;當(dāng)間隔時(shí)間為8個(gè)月,回歸情況占比不到1%.
根據(jù)前文的討論,本文界定開發(fā)者在一個(gè)項(xiàng)目中的參與狀態(tài)是否活躍的標(biāo)準(zhǔn)如下:開發(fā)者從發(fā)現(xiàn)一個(gè)感興趣的開源項(xiàng)目、參與貢獻(xiàn)、結(jié)束貢獻(xiàn)從該項(xiàng)目中流失是一個(gè)連續(xù)的過程.本文將其中的啟動(dòng)期設(shè)置為兩個(gè)月即當(dāng)開發(fā)者連續(xù)兩個(gè)月在一個(gè)項(xiàng)目中有行為,視作在該項(xiàng)目中開始活躍;設(shè)置啟動(dòng)期的目的是為了區(qū)分出那些臨時(shí)的參與者;在持續(xù)活躍的過程中出現(xiàn)的空窗期不得超過兩個(gè)月(超過兩個(gè)月將引發(fā)較大的流失率).當(dāng)時(shí)間間隔大于兩個(gè)月,視作開發(fā)者在該項(xiàng)目中結(jié)束了本階段的活躍.基于上述對(duì)與開發(fā)者在項(xiàng)目中的活躍度評(píng)判標(biāo)準(zhǔn),得到了符合條件的621名開發(fā)者以及他們參與的5791個(gè)開源項(xiàng)目.
首先分析開發(fā)者在項(xiàng)目中活躍的持續(xù)時(shí)間,結(jié)果如圖6所示.持續(xù)時(shí)間為2個(gè)月的記錄數(shù)量最多;當(dāng)持續(xù)時(shí)間增長到3個(gè)月時(shí)出現(xiàn)大幅回落;活躍持續(xù)時(shí)間在3-22個(gè)月的記錄數(shù)相對(duì)平穩(wěn);活躍持續(xù)時(shí)長超過22個(gè)月的記錄數(shù)又出現(xiàn)了明顯的上升,這表明,每個(gè)項(xiàng)目中都會(huì)有一部分核心貢獻(xiàn)者.
圖6 活躍狀態(tài)的持續(xù)時(shí)間Fig.6 Duration of the active state
接著我們分別從開源項(xiàng)目的開發(fā)語言、描述、標(biāo)簽、流行度和項(xiàng)目規(guī)模這五個(gè)不同的維度對(duì)開發(fā)者同時(shí)活躍參與項(xiàng)目的相似性進(jìn)行計(jì)算.
開發(fā)語言相似性:開發(fā)語言描述的是項(xiàng)目所使用的開發(fā)語言,通常情況下開發(fā)者掌握了兩種及以上的開發(fā)語言,根據(jù)項(xiàng)目語言的種類選擇自己擅長的一種.
描述相似性:描述是項(xiàng)目的一個(gè)簡介,大致描述了該項(xiàng)目實(shí)現(xiàn)的功能及用途,方便其他開發(fā)者根據(jù)描述所表達(dá)的內(nèi)容來選擇自己中意的開源項(xiàng)目.描述通常是一段簡練的文字.本文采用了TF余弦相似性計(jì)算兩個(gè)項(xiàng)目描述的相似性.具體做法是:首先對(duì)描述文本做分詞處理,然后去停用詞,接著構(gòu)建詞典并將文本轉(zhuǎn)化為向量,由于文本信息轉(zhuǎn)為向量,故采用余弦相似度計(jì)算其相似性.標(biāo)簽相似性:標(biāo)簽是開源項(xiàng)目的另一個(gè)特征,它是描述項(xiàng)目的一組關(guān)鍵詞,這些關(guān)鍵詞組成了一個(gè)集合,而Jaccard系數(shù)可以用來衡量兩個(gè)集合的相似性,其核心就是計(jì)算兩個(gè)集合交集與并集大小的比值,比值越大表示相似度越高.
流行度的相似性:GitHub中的大量開源項(xiàng)目會(huì)受到開發(fā)者不同程度的關(guān)注,關(guān)注者的數(shù)量代表著項(xiàng)目的流行度,為了有明確的區(qū)分度,本文根據(jù)關(guān)注者數(shù)量對(duì)項(xiàng)目的流行度進(jìn)行劃分如表3所示.
項(xiàng)目大小代表整個(gè)項(xiàng)目的規(guī)模,這也是開發(fā)者選擇項(xiàng)目的一個(gè)重要依據(jù)之一,同樣將其劃分為小規(guī)模、中等規(guī)模、較大規(guī)模和大規(guī)模四個(gè)等級(jí)如表4所示.
五個(gè)特征上的相似度結(jié)果如表5所示,相似度為1表示在這一特征上完全一致,相似度為0則表示在該特征上完全不相似.根據(jù)相似度大小劃分了6個(gè)不同的范圍,每個(gè)特征下劃分了兩種不同的情況分別是:同時(shí)活躍和下一項(xiàng).
表4 項(xiàng)目規(guī)模劃分表Table 4 Project size division table
表5 開發(fā)者活躍狀態(tài)參與的項(xiàng)目的相似性表Table 5 Similarity table for projects in which the developer is actively involved
同時(shí)活躍狀態(tài)下開發(fā)者對(duì)不同項(xiàng)目的參與情況存在差異,以不同的行為、以及角色做區(qū)分,結(jié)果如表6和表7所示.
表6 角色差異Table 6 Role difference
我們發(fā)現(xiàn)臨時(shí)參與者的身份占比超過70%,雖然開發(fā)者會(huì)同時(shí)活躍在多個(gè)不同的項(xiàng)目中,但是重點(diǎn)參與的通常只有一個(gè)
表7 行為差異Table 7 Behavior difference
到兩個(gè),其中commit的次數(shù)遠(yuǎn)高于pull-request.例如編號(hào)為21號(hào)的開發(fā)者,在其同時(shí)活躍的6個(gè)項(xiàng)目中,僅在一個(gè)項(xiàng)目中為成員,在其余的項(xiàng)目中的角色都是臨時(shí)參與者.
一般情況下開發(fā)者在一個(gè)開源項(xiàng)目中結(jié)束活躍后,會(huì)選擇加入一個(gè)新的項(xiàng)目,本節(jié)分析新加入項(xiàng)目的特點(diǎn).
圖7 加入新項(xiàng)目的平均時(shí)間間隔Fig.7 Average time interval for joining new projects
將開發(fā)者結(jié)束活躍的項(xiàng)目與隨后加入的項(xiàng)目設(shè)置成一對(duì),分別從間隔時(shí)間和標(biāo)簽、描述、開發(fā)語言、流行度和規(guī)模這些特征分析新加入的項(xiàng)目特點(diǎn).實(shí)驗(yàn)結(jié)果如圖7和表8所示.
表8 新加入項(xiàng)目與結(jié)束活躍項(xiàng)目的相似性表Table 8 Similarity table for new and ending active projects
結(jié)果顯示開發(fā)者在一個(gè)項(xiàng)目中結(jié)束活躍后再次加入到新項(xiàng)目的平均時(shí)間間隔不超過一個(gè)月的開發(fā)者占75.6%.
結(jié)果顯示,絕大部分的情況下(76.3%),開發(fā)者都愿意在一個(gè)月內(nèi)(較短的時(shí)間段)參與兩個(gè)及以上的不同項(xiàng)目,那么在向開發(fā)者進(jìn)行開源項(xiàng)目推薦的時(shí)候就可以摒棄如下顧慮:開發(fā)者當(dāng)前已經(jīng)參加了一個(gè)項(xiàng)目,他將不再接受其他推薦,實(shí)際情況是開發(fā)者愿意在短時(shí)間內(nèi)參與多個(gè)不同的開源項(xiàng)目.當(dāng)然,這個(gè)數(shù)量通常是有限的,開發(fā)者當(dāng)前參與的項(xiàng)目數(shù)量大于5個(gè)后,那么他接受新項(xiàng)目推薦的概率將大幅降低.據(jù)此,社區(qū)平臺(tái)的推薦機(jī)制可以優(yōu)先為那些參與項(xiàng)目數(shù)量小于5個(gè)項(xiàng)目的開發(fā)者提供個(gè)性化推薦服務(wù).開發(fā)者參與項(xiàng)目的數(shù)量與自己所擁有的項(xiàng)目數(shù)量存在較強(qiáng)的相關(guān)性,開發(fā)者擁有的這些項(xiàng)目一部分是他自己創(chuàng)建的,另一部分是fork他人的開源項(xiàng)目,這些項(xiàng)目的數(shù)量越多也表示其在社區(qū)中越活躍,因而他在短期內(nèi)參與較多項(xiàng)目的可能性也會(huì)相應(yīng)高于其他開發(fā)者.
開發(fā)者在項(xiàng)目中的行為次數(shù)反映了他在該項(xiàng)目中的參與程度,次數(shù)越多就表明他在該項(xiàng)目中的參與度就越高,活躍度也越高.開發(fā)者在不同項(xiàng)目中參與的周期數(shù)和行為次數(shù)會(huì)存在較大的差異,對(duì)大部份的項(xiàng)目參與次數(shù)都較少且集中于某一個(gè)月中,對(duì)小部分的項(xiàng)目會(huì)有長周期(平均值為10個(gè)月)的參與和貢獻(xiàn),期間會(huì)存在若干的空窗期.這里提到的空窗期指的是對(duì)同一個(gè)項(xiàng)目兩次參與行為之間的間隔時(shí)間.項(xiàng)目中的長期參與者大部分都是項(xiàng)目內(nèi)部人員,當(dāng)然臨時(shí)參與者的提交被合并后,他就成為了該項(xiàng)目的貢獻(xiàn)者,后續(xù)是以內(nèi)部成員的角色參與其中.不同的角色參與項(xiàng)目的時(shí)長也存在明顯的差異,項(xiàng)目成員的持續(xù)時(shí)間最長,而臨時(shí)參與者最短.其中,這類開發(fā)者愿意長期參與維護(hù)或貢獻(xiàn)的開源項(xiàng)目更能凸顯該名開發(fā)者對(duì)某一特定領(lǐng)域的偏好.推薦系統(tǒng)在為該名開發(fā)者進(jìn)行開發(fā)者建模時(shí)不妨可以考慮提高他長期參與貢獻(xiàn)項(xiàng)目特點(diǎn)的權(quán)重,使得開發(fā)者模型更為精準(zhǔn).
開發(fā)者參與貢獻(xiàn)或維護(hù)一個(gè)開源項(xiàng)目通常是一個(gè)連續(xù)的過程,期間間隔周期的長短是反映他在該項(xiàng)目中活躍與否的重要指標(biāo)[10]之一,時(shí)間間隔越長表示對(duì)于該項(xiàng)目的興趣不斷下降,那么他在項(xiàng)目中流失的可能性也就越大.本文認(rèn)為,時(shí)間間隔為兩個(gè)月是一個(gè)比較合適的分割點(diǎn)[10],由于間隔超過兩個(gè)月開發(fā)者回歸的情況大幅降低,所以開發(fā)者在一個(gè)項(xiàng)目中連續(xù)兩個(gè)月沒有參與行為,那么可以判定他在該項(xiàng)目中流失即他將不再繼續(xù)參與該項(xiàng)目.平臺(tái)的開源項(xiàng)目推薦系統(tǒng)在進(jìn)行項(xiàng)目推薦時(shí),可以優(yōu)先分析一下開發(fā)者在項(xiàng)目中的參與程度積極與否,從而得到一個(gè)合適的契機(jī).
我們發(fā)現(xiàn)描述相似性普遍很低,由此可知開源項(xiàng)目的描述相似性在實(shí)現(xiàn)推薦中并不是一個(gè)合適的特征.標(biāo)簽相似性略高于描述相似性,但絕大部分的情況小于0.3.開發(fā)語言的相似性要明顯好于前兩者,開發(fā)者在選擇項(xiàng)目的時(shí)候都偏愛自己熟悉的語言.當(dāng)然也存在開發(fā)語言完全不同的情況,主要原因是開發(fā)者通常會(huì)掌握兩種以上的開發(fā)語言以滿足不同的業(yè)務(wù)需求.在項(xiàng)目的流行度和規(guī)模上都表現(xiàn)出了較高的相似性,尤其是在項(xiàng)目的流行度上,這一點(diǎn)應(yīng)該與選擇分析的對(duì)象是有著較高影響力的開發(fā)者有關(guān),后續(xù)的研究可以討論開發(fā)者的影響力與項(xiàng)目流行度是否存在關(guān)聯(lián).
在一個(gè)項(xiàng)目結(jié)束活躍后,開發(fā)者往往會(huì)在較短的時(shí)間內(nèi)加入一個(gè)新的項(xiàng)目,這個(gè)時(shí)間通常小于一個(gè)月.新加入項(xiàng)目和結(jié)束活躍項(xiàng)目兩者相似性要明顯高于同時(shí)活躍狀態(tài)下的項(xiàng)目相似性,在開發(fā)語言上完全不同的情況大幅降低,這為項(xiàng)目推薦提供了重要的參考即開發(fā)者在選擇下一個(gè)項(xiàng)目的時(shí)候會(huì)偏愛與上一個(gè)項(xiàng)目類似的開發(fā)語言.
本文對(duì)開發(fā)者在多個(gè)開源項(xiàng)目中的參與情況做了分析,意義在于嘗試?yán)斫忾_發(fā)者的跨項(xiàng)目行為特點(diǎn),為后續(xù)的開發(fā)者建模及開源項(xiàng)目的個(gè)性化推薦提供一定的參考依據(jù).結(jié)果表明,開發(fā)者普遍都愿意同時(shí)參與多個(gè)開源項(xiàng)目,參與項(xiàng)目數(shù)與擁有項(xiàng)目數(shù)存在較強(qiáng)的相關(guān)性;角色為成員的開發(fā)者在項(xiàng)目中持續(xù)的時(shí)長要明顯高于其他兩種角色的開發(fā)者;當(dāng)開發(fā)者在一個(gè)開源項(xiàng)目中的行為間隔超過兩個(gè)月那么他再次回歸該項(xiàng)目的可能性大幅降低;同時(shí)活躍狀態(tài)下開發(fā)者參與的項(xiàng)目中,大部分都是以臨時(shí)參與者的身份參與其中;開發(fā)者在一個(gè)項(xiàng)目中結(jié)束活躍后,普遍愿意在一個(gè)月內(nèi)加入一個(gè)新的項(xiàng)目,且新加入項(xiàng)目的相似性要明顯高于同時(shí)活躍狀態(tài)下的相似性.對(duì)開發(fā)者進(jìn)行開源項(xiàng)目推薦時(shí),可通過分析他當(dāng)前參與項(xiàng)目中的活躍狀態(tài)變化,得到一個(gè)合適的推薦時(shí)機(jī).這樣的考慮開發(fā)者當(dāng)前參與狀態(tài)的推薦方式比起以往的推薦機(jī)制顯得更合理、更人性化.
當(dāng)然,本文所做的工作還相對(duì)有限,存在需要改進(jìn)的地方.例如考慮到用戶行為數(shù)據(jù)的稀疏性(20%的開發(fā)者在開源社區(qū)中做出了80%的貢獻(xiàn)),所以本文選取的研究對(duì)象是1000名有著較大影響力的開發(fā)者.還有就是對(duì)項(xiàng)目相似度的衡量,不應(yīng)只局限于若干自帶的屬性.在下一步的研究工作中,要擴(kuò)大實(shí)驗(yàn)數(shù)據(jù)的規(guī)模,覆蓋更為廣泛的開發(fā)者,同時(shí)增加對(duì)項(xiàng)目相似度的評(píng)價(jià)屬性和方法,對(duì)開發(fā)者的行為進(jìn)行更精準(zhǔn)的評(píng)估.
開發(fā)者作為開源軟件的核心,是整個(gè)開源社區(qū)的靈魂所在,開發(fā)者的狀態(tài)將直接決定一個(gè)開源項(xiàng)目的成功與否甚至影響整個(gè)開源社區(qū)的健康可持續(xù)發(fā)展.本文分析了開源社區(qū)中開發(fā)者跨項(xiàng)目參與行為,主要包括參與項(xiàng)目情況、活躍度的變化和參與項(xiàng)目之間的相似度特點(diǎn).開發(fā)者依然是未來研究工作的一個(gè)方向,可以重點(diǎn)關(guān)注哪些因素會(huì)影響開發(fā)者在開源項(xiàng)目中的活躍狀態(tài),哪些原因使得開發(fā)者從項(xiàng)目中流失及當(dāng)前狀態(tài)下開發(fā)者表現(xiàn)出的何種行為特點(diǎn)將預(yù)示著他將從該項(xiàng)目中流失.找到其中的影響因素并采取相應(yīng)的措施將會(huì)使得整個(gè)開源社區(qū)受益.