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