如何評(píng)價(jià)一個(gè)開(kāi)源項(xiàng)目?是它了
本文由X-lab開(kāi)放實(shí)驗(yàn)室博士生趙生宇創(chuàng)作
也希望可以有更多對(duì)社區(qū)度量感興趣的朋友參與到討論之中,本人的聯(lián)系方式見(jiàn)關(guān)于頁(yè)(http://blog.frankzhao.cn/about)

從開(kāi)源辦公室的角度而言,我們必須有一個(gè)“北極星”指標(biāo)。對(duì)于一些開(kāi)源創(chuàng)業(yè)公司或具體的開(kāi)源項(xiàng)目團(tuán)隊(duì)而言,可以通過(guò)監(jiān)控或觀察多個(gè)指標(biāo)來(lái)判斷項(xiàng)目的健康與否。但對(duì)于有 2000 多個(gè)開(kāi)源項(xiàng)目的企業(yè)而言,要同時(shí)監(jiān)控這么多項(xiàng)目的健康度,就需要一個(gè)聚合的指標(biāo),否則人力成本過(guò)高。
由于 star、fork 等行為屬于開(kāi)發(fā)者的單向行為,雖然表示了對(duì)項(xiàng)目的一種關(guān)注,但并不對(duì)項(xiàng)目產(chǎn)生具體貢獻(xiàn),所以沒(méi)有納入到活躍度的計(jì)算之中,即刷 star 等行為在活躍度算法下無(wú)效。
即便當(dāng)時(shí)默認(rèn)的貢獻(xiàn)者(contributor)的定義為代碼貢獻(xiàn)者,但從實(shí)際角度出發(fā),參與到社區(qū)中的所有開(kāi)發(fā)者,包括提交 bug、參與討論、參與代碼 review 的開(kāi)發(fā)者事實(shí)上都對(duì)項(xiàng)目是有貢獻(xiàn)的,所以在計(jì)算中并不是僅計(jì)入代碼貢獻(xiàn),而是將討論等也納入。
對(duì)于五種事件對(duì)應(yīng)的權(quán)重應(yīng)該是多少,其實(shí)在這里是相當(dāng)主觀的,1 - 5 是一個(gè)非常簡(jiǎn)單粗暴的賦值方式,但事實(shí)上這個(gè)權(quán)重集是在阿里最重要的一些戰(zhàn)略級(jí)開(kāi)源項(xiàng)目的負(fù)責(zé)人共識(shí)下產(chǎn)生的,并且對(duì) PR 的 review 給出了非常高的 4 分,也是鼓勵(lì)大家多進(jìn)行基于 GitHub 的異步 review。
從開(kāi)發(fā)者活躍度到項(xiàng)目活躍度的計(jì)算,我們對(duì)每個(gè)開(kāi)發(fā)者的活躍度進(jìn)行了開(kāi)方,這里所給出的價(jià)值觀是:那些核心開(kāi)發(fā)者非?;钴S,但總體參與人數(shù)較少的社區(qū),其活躍度不應(yīng)高于核心開(kāi)發(fā)者雖然不太活躍,但參與貢獻(xiàn)人數(shù)更多的社區(qū)。本質(zhì)上是對(duì)個(gè)體開(kāi)發(fā)者活躍度進(jìn)行了一個(gè)削減。
到底哪些數(shù)值需要被納入,例如 star、fork 是否應(yīng)該被納入,是不太確定的。尤其是在活躍度這樣一個(gè)概念下,那些對(duì)項(xiàng)目沒(méi)有帶來(lái)實(shí)際反饋的行為是否要納入進(jìn)來(lái)極為微妙。
不同行為的權(quán)重是人為指定的,雖然包含了一定的專家經(jīng)驗(yàn),但這些數(shù)值的大小其實(shí)是還是具有相當(dāng)?shù)闹饔^性,尤其是在項(xiàng)目之間比較時(shí),權(quán)重的微小差別就會(huì)帶來(lái)一些總體活躍度的波動(dòng)。
這種活躍度計(jì)算方式缺乏基線。由于這里的活躍度是對(duì)一段時(shí)間內(nèi)的行為次數(shù)的統(tǒng)計(jì),所以時(shí)間段不同,則活躍度不同,時(shí)間段越長(zhǎng),活躍度越高。因此在不同時(shí)間段上無(wú)法進(jìn)行直觀的比較,這種缺乏基線的計(jì)算方式對(duì)于給出活躍度的參考閾值是不友好的。
這種活躍度計(jì)算方式在倉(cāng)庫(kù)層面不具有線性可加性。為了引入貢獻(xiàn)者數(shù)量的因素,在倉(cāng)庫(kù)活躍度求和時(shí)對(duì)開(kāi)發(fā)者活躍度開(kāi)方,這個(gè)非線性操作導(dǎo)致了倉(cāng)庫(kù)活躍度在時(shí)間區(qū)間不能線性可加,這對(duì)多時(shí)間段的運(yùn)算造成了比較大的影響,使得一些中間結(jié)果無(wú)法被復(fù)用。
個(gè)人活躍度到倉(cāng)庫(kù)活躍度的開(kāi)方操作本身也是一個(gè)人為的經(jīng)驗(yàn)做法,本質(zhì)上就是想引入一個(gè)一階導(dǎo)數(shù)單調(diào)遞增,二階導(dǎo)單調(diào)遞減的函數(shù)來(lái)進(jìn)行修正,模擬一種邊際效益遞減效應(yīng)。顯然不僅是開(kāi)方,對(duì)數(shù)函數(shù)也滿足這種性質(zhì),而且對(duì)數(shù)函數(shù)在此類計(jì)算中非常常用,而我當(dāng)時(shí)選用開(kāi)方是考慮了計(jì)算效率問(wèn)題,因?yàn)殚_(kāi)方運(yùn)算在很多語(yǔ)言下都比對(duì)數(shù)運(yùn)算要更快。
只要是簡(jiǎn)單的統(tǒng)計(jì)指標(biāo)來(lái)進(jìn)行計(jì)算,就一定無(wú)法避免刷指標(biāo)的行為。事實(shí)上,當(dāng)我們?cè)诎⒗飪?nèi)部開(kāi)始推行這個(gè)指標(biāo)體系時(shí),有部分開(kāi)發(fā)者的活躍度有了一個(gè)跳變。原因其實(shí)是原先這個(gè)項(xiàng)目的負(fù)責(zé)人不知道如何在 GitHub 進(jìn)行 review,在看到這個(gè)指標(biāo)體系之前都是在即時(shí)通訊工具中進(jìn)行同步聊天的 review,但在我們的推廣和教育后,對(duì)過(guò)去的一些代碼 review 進(jìn)行了集中的補(bǔ)充。這也是我們認(rèn)為好的指標(biāo)體系可以起到的作用,即便是刷指標(biāo),但我們認(rèn)為該指標(biāo)是起到了正向的引導(dǎo)作用。而且之后也沒(méi)有發(fā)現(xiàn)有其他項(xiàng)目通過(guò)刻意增加回復(fù)數(shù)量、拆分 PR 等方式惡意刷活躍度的情況,畢竟開(kāi)方操作本身使得個(gè)別賬號(hào)的這種刷分行為對(duì)整體倉(cāng)庫(kù)的影響是有限的。因此在這個(gè)指標(biāo)下的刷分行為目前來(lái)看是起到了預(yù)期的價(jià)值導(dǎo)向作用。


逆鋒起筆是一個(gè)專注于程序員圈子的技術(shù)平臺(tái),你可以收獲最新技術(shù)動(dòng)態(tài)、最新內(nèi)測(cè)資格、BAT等大廠的經(jīng)驗(yàn)、精品學(xué)習(xí)資料、職業(yè)路線、副業(yè)思維,微信搜索逆鋒起筆關(guān)注!
一款開(kāi)源 OA 辦公自動(dòng)化系統(tǒng)
騰訊開(kāi)源:微信和移動(dòng)開(kāi)發(fā)的 10 大項(xiàng)目
一個(gè) Java 開(kāi)源商城項(xiàng)目,值得好好研究一下!
覺(jué)得不錯(cuò),請(qǐng)點(diǎn)個(gè)在看呀