楊欣捷,田 蜜,江一鳴
(上海浦東發(fā)展銀行股份有限公司,上海200000)
開源軟件(Open Source Software,OSS)是一種源代碼開放的軟件,作為一種有效的軟件開發(fā)模式,已經(jīng)獲得了極大的普及[1],為幾乎所有領(lǐng)域的應(yīng)用程序提供了動力。開源已經(jīng)出現(xiàn)了一個大發(fā)展的趨勢[2]。代碼倉庫與活躍用戶數(shù)都在高速增長;項目覆蓋面越來越廣,占據(jù)著各領(lǐng)域的主要市場份額;參與開源的企業(yè)數(shù)量保持穩(wěn)定增長并呈現(xiàn)主動開源趨勢[3]。顯然開源正以它開放共享、合作共贏的特點吞沒著整個世界。
在開源高速發(fā)展和國家自主安全的發(fā)展戰(zhàn)略影響下,不少企業(yè)愿意選擇開源軟件,期望使用開源軟件的企業(yè)從59%迅速提升至77%,而那些已經(jīng)使用了開源軟件的企業(yè)也在加大其使用廣度和深度[2]。開源軟件以社區(qū)形式開展開發(fā)工作,社區(qū)內(nèi)的成員可以自由、開放地交流溝通、共享經(jīng)驗、參與協(xié)作。分析社區(qū)中開源項目的活躍度,挖掘開發(fā)者和企業(yè)組織在整個開源產(chǎn)業(yè)中的表現(xiàn),有利于剖析國內(nèi)外開源現(xiàn)狀,為企業(yè)開源項目選型提供參考,為企業(yè)數(shù)字化轉(zhuǎn)型賦能。
圍繞開源主題的研究得到了廣大學(xué)者的關(guān)注,成為一大研究熱點。學(xué)者們分別從開源現(xiàn)狀、開源社區(qū)、開發(fā)者等角度進行了研究。對開源現(xiàn)狀的剖析,如劉凱等對開源軟件產(chǎn)業(yè)的發(fā)展現(xiàn)狀及趨勢進行了研究[4]。對開源社區(qū)的探究,如ECKERT R等對開源社區(qū)的組織間聯(lián)系進行了研究,發(fā)現(xiàn)傾向于控制其所有資源的開源社區(qū)屬于自主組織[5]。對開發(fā)者的研究,如MENEEIY A等利用開發(fā)者的網(wǎng)絡(luò)關(guān)系成功預(yù)測項目可能出現(xiàn)的缺陷[6]。而針對開源項目活躍度的研究尚處于起步階段。劉雅新、吳高艷等結(jié)合復(fù)雜網(wǎng)絡(luò)理論與軟件開發(fā)實踐,以開源社區(qū)中開發(fā)者合作行為為研究取向,分析開發(fā)者在社區(qū)中的活躍度變化情況[7]。華東師范大學(xué)Xlab從社區(qū)披露數(shù)據(jù)出發(fā),考慮了拉取請求(pull request,pr)、問題(issue)和評論(comment)等多個指標(biāo),獲取開源項目活躍度,剖析開源現(xiàn)狀[8]。Grank項目活躍度分析工具,以pr、提交暫存(commit)和貢獻者(contributor)為指標(biāo),計算GitHub上開源項目的活躍度。浦發(fā)銀行利用開源項目活躍度算法,在開源軟件選型中提供重要參考。
浦發(fā)銀行開源治理平臺活躍度模型(式1)是從開發(fā)者commit代碼的角度去考慮項目的活躍度,但實際上項目的活躍度還體現(xiàn)在issue提交數(shù)、pr數(shù)、評論數(shù)等。以chartjs/Chart.js為例,commit有3 118條,pr有5 072條,issue有2 184條,評論有高達3萬條,所以除了commit以外,pr、issue和評論均可體現(xiàn)活躍度,因此只考慮commit提交數(shù)存在局限性。
式中,Ar為項目活躍度;Ccommit_one_month為近一個月的暫存提交數(shù);Ccommit_three_month為近三個月的暫存提交數(shù);Ccommit_six_month為近半年的暫存提交數(shù);Ccommit_twelve_month為近一年的暫存提交數(shù);?、β、δ、γ為權(quán)重。
Xlab活躍度計算模型(式(2)、式(3))是從產(chǎn)生活躍度的開發(fā)者角度出發(fā),更為全面地考慮了pr、issue和comment等多個因素,但未考慮到時間衰減因素,以及GitHub鏡相類項目關(guān)閉了pr和issue功能。
式中,Au為開發(fā)者活躍度;Cissue_comment為問題評論數(shù);Copen_issue為問題數(shù);Copen_pr為拉取請求數(shù);Crevirew_comment為評審評論數(shù);pr_merged為拉取請求合并數(shù);Ar為項目活躍度。
Grank項目活躍度評估算法將項目的提交數(shù)、拉取請求數(shù)和貢獻者數(shù)作為主要因素,分析項目的活躍度變化的趨勢和幅度。
綜上,當(dāng)前關(guān)于開源項目活躍度評估算法選取的指標(biāo)各異。同時,不同類別的開源項目活躍度分析角度是否存在差異,一段周期內(nèi)的活躍度是否受時間因素的影響,目前均尚無結(jié)論。本文將從這兩個問題出發(fā)構(gòu)建活躍度模型,完善開源項目活躍度研究。
新模型的構(gòu)建原理主要是對前文提到的“浦發(fā)模型”和“Xlab模型”各自優(yōu)點的融合,并且針對前文提到的“鏡相類項目”和“時間衰減”兩個因素進行了優(yōu)化。以下針對這兩個因素進行具體分析。
2.1.1 鏡相類項目的活躍度
以GitHub上的項目作為樣本,發(fā)現(xiàn)存在從私庫同步至GitHub上的鏡像類項目。通過查找GitHub上的其他鏡像類項目樣本并進行統(tǒng)計(如圖1所示),可以看出鏡像類項目的共同點有:第一,pr和issue數(shù)量很少;第二,pr、issue和comment貢獻者在總貢獻者中占比不大;第三,commit貢獻者在總貢獻者中占比較大;第四,commit貢獻者進行了多次的代碼提交。進一步訪問各鏡像類項目的GitHub地址,發(fā)現(xiàn)有些項目明確標(biāo)注了關(guān)閉pr和issue功能,可見鏡像類項目的特點是僅在GitHub上同步,進行少量的pr和issue。
圖1 鏡像類項目行為指標(biāo)匯總
Xlab模型在計算開發(fā)者活躍度時僅依托于pr、issue和comment貢獻者,但是產(chǎn)生活躍度的開發(fā)者行為不止表現(xiàn)在pr、issue和comment,所以Xlab模型無法全面體現(xiàn)鏡像類項目的開發(fā)者活躍度,故結(jié)果會產(chǎn)生偏差。為了能更好地看出差別,引入一些非鏡像類項目,基本信息如圖2所示。
圖2 非鏡像類項目行為指標(biāo)匯總
將鏡像類項目和非鏡像類項目做兩兩對比,如圖3所示,此樣本中鏡像類項目產(chǎn)生活躍度的貢獻者數(shù)量基本上比非鏡像類項目多,且進行的貢獻行為次數(shù)也基本上比非鏡像類項目多,有理由猜測鏡像類項目活躍度并不低。
圖3 鏡像類、非鏡像類項目行為指標(biāo)匯總
基于以上猜想,以一個鏡像類和一個非鏡像類為一個組,共10組,每組項目分別利用Xlab模型和浦發(fā)模型計算活躍度,鏡像類和非鏡像類活躍度大小關(guān)系完全相反,匯總活躍度如圖4所示。在對于鏡相類項目的活躍度評估中,浦發(fā)模型考慮了commit因素,顯然更能準(zhǔn)確反映鏡相類項目的活躍度。但由于其未考慮pr、issue和comment等其他因素,其模型效果也有提高空間。
圖4 鏡像類、非鏡像類項目的Xlab和Spdb模型活躍度對比
2.1.2 一段周期內(nèi)的階段性活躍度
僅對項目一段周期內(nèi)總活躍度進行橫向?qū)Ρ仁遣粔虻?,對項目在一段周期?nèi)的活躍度變化趨勢進行分析則更具意義。對樣本項目(2019年3月至2020年3月)這一年期間每個月的GitHub日志進行統(tǒng)計,分析各個項目活躍度變化趨勢,如圖5所示,各個項目的活躍度變化趨勢各不同,有的呈現(xiàn)波動趨勢,如996icu/996.ICU;有的比較平穩(wěn),如twbs/bootstrap、github/gitignore和mrdoob/three.js等。
圖5 項目月活躍度匯總
現(xiàn)對996icu/996.ICU和mrdoob/three.js的開發(fā)者活躍度進行具體分析,2019年3月至2020年3月期間996icu/996.ICU開發(fā)者人數(shù)為1 263人,mrdoob/three.js開發(fā)者人數(shù)為1 690人,具體分布見圖6,顯然996icu/996.ICU這一年來僅在2019年3月和4月開發(fā)者較多(488人、627人)、貢獻較大,而mrdoob/three.js開發(fā)者較為平穩(wěn)地活躍。
圖6 單個項目活躍度周期內(nèi)變化規(guī)律
觀測2019年3月至2020年3月期間每一個月的項目活躍度變化,如表1所示,容易看出,996icu/996.ICU在2019年3月、4月活躍度很高,5月之后出現(xiàn)明顯降低趨勢,而mrdoob/three.js呈現(xiàn)持續(xù)平穩(wěn)態(tài)勢。
表1 項目活躍度變化匯總
對比兩個項目這一年總的活躍度(表2)發(fā)現(xiàn),996icu/996.ICU活躍度比mrdoob/three.js高。同時利用浦發(fā)銀行開源治理平臺活躍度模型(式(3))計算兩者的活躍度,結(jié)果為:996icu/996.ICU(314.800 000)、mrdoob/three.js(2 056.500 000),996icu/996.ICU活躍度比mrdoob/three.js低。究其原因,Xlab活躍度模型未考慮時間因素對活躍度的影響,使得活躍度趨勢波動較大的項目的整體活躍度有異。
表2 項目總活躍度
通過前文的模型計算實踐,可以得出結(jié)論:(1)GitHub鏡像類項目大都關(guān)閉提交issue的功能,對于pr也有限制。Xlab模型未考慮commit變量,因GitHub上存在大量關(guān)閉issue和PR的鏡像類項目,該模型無法有效體現(xiàn)項目活躍度。(2)Xlab模型未考慮時間衰減因素,不能很好反映發(fā)布時參與者較多,后勁不足的項目的實際活躍情況。(3)浦發(fā)模型僅考慮了commit變量,未納入issue和pr等其他因素,模型結(jié)果全面性有待提高。
為解決以上問題,在Xlab模型基礎(chǔ)上,引入commit變量和衰減函數(shù),形成修正后模型(式(4)~式(6))。
式中,c為初始值(將為100%)或全權(quán)重;e為自然對數(shù);k為衰減常數(shù),對于所需的曲線為0.05;t為月份。Cissue_comment為問題評論數(shù);Copen_issue為問題數(shù);Copen_pr為拉取請求數(shù);Crevirew_comment為評審評論數(shù);Cpr_merged為拉取請求合并數(shù);Ccommit為暫存提交數(shù);Aut是開發(fā)者在t月的活躍度;Au是一段時間內(nèi)的總開發(fā)者活躍度;Ar是一段時間內(nèi)的項目活躍度。
隨著金融行業(yè)開源生態(tài)的日益成熟,加上數(shù)字化生態(tài)銀行轉(zhuǎn)型的需求,越來越多的應(yīng)用系統(tǒng)構(gòu)建在了開源軟件之上,為此浦發(fā)銀行探索了一套開源治理體系。為自主、高效、安全地使用開源軟件提供技術(shù)上和制度上的支持,為提升管理效能,浦發(fā)銀行自研了開源軟件管理平臺,覆蓋了開源軟件治理四個主要的流程,引入評估、使用、安全漏洞持續(xù)評估和生命周期持續(xù)評估,做到軟件使用有跡可循,實現(xiàn)介質(zhì)來源可控,防范開源軟件帶來的安全問題。
現(xiàn)以浦發(fā)銀行開源治理平臺為例,選取了平臺引入的軟件,以前文構(gòu)建的活躍度模型進行評價。以一個平穩(wěn)類和一個波動類為一個組,一個鏡像類和一個非鏡像類為一個組,每組項目分別利用Xlab活躍度模型、浦發(fā)活躍度模型和修正后活躍度模型計算活躍度。Xlab模型與修正后模型計算出的每組活躍度大小關(guān)系基本完全相反,浦發(fā)模型與修正后模型計算出的每組活躍度大小關(guān)系基本趨同,如圖7所示。修改后的模型在一定程度上抹平了活躍度趨勢波動較大項目的整體活躍度,同時也提高了鏡像類項目的活躍度。
圖7 活躍度結(jié)果對比
對Xlab活躍度模型、浦發(fā)活躍度模型與修正后的活躍度模型的計算結(jié)果進行相關(guān)性分析,如表3所示。第一,修正后的活躍度模型與Xlab活躍度模型不相關(guān),與浦發(fā)活躍度模型相關(guān)。說明修正后的活躍度模型與浦發(fā)活躍度模型結(jié)果趨同,區(qū)別只是浦發(fā)活躍度模型未考慮pr、issue和comment等能產(chǎn)生活躍度的因素。第二,Xlab活躍度模型與浦發(fā)活躍度模型不相關(guān),與修正后的活躍度模型也不相關(guān)。進一步剔除鏡像類項目后,結(jié)果如表4所示。Xlab活躍度模型與浦發(fā)活躍度模型相關(guān),與修正后的活躍度模型也相關(guān)。說明雖然Xlab活躍度模型考慮的影響因素很全面,但仍在鏡像類項目活躍度的計算上存在偏差。同時結(jié)合平穩(wěn)類和波動類項目來看,Xlab模型又未考慮時間因素,修正后的活躍度模型考慮了時間權(quán)重因素。綜上,修正后的活躍度模型同時具備了Xlab活躍度模型與浦發(fā)活躍度模型的優(yōu)勢,從更全面的角度去反映項目活躍度。
表3 模型結(jié)果相關(guān)性分析
表4 模型結(jié)果相關(guān)性分析(非鏡像類)
目前針對開源項目活躍度的評估算法研究尚處于起步階段,考慮的影響因素不同,且未考慮鏡像類項目特點和時間權(quán)重因素對活躍度的影響。本文對浦發(fā)銀行和Xlab活躍度評估算法進行了探索,結(jié)合鏡像類項目特點、時間權(quán)重因素,將pr、issue、comment和commit等參數(shù)和衰減函數(shù)融合,形成修正后模型,該模型能更好地反映項目活躍度。針對企業(yè)而言,探索開源社區(qū)的行為規(guī)律,剖析開源項目活躍度算法,能夠在企業(yè)開源項目的選擇上提供一定的參考價值。對開源社區(qū)和開源項目而言,需要提高社區(qū)服務(wù)質(zhì)量,確保社區(qū)成員來源多樣化,提高開發(fā)人員的貢獻力度,進而提高整個項目的活躍度,促成良性循環(huán)。