文章編號:1672-5913(2008)18-0079-03
摘要:本文以兩個開源軟件用戶社區為例,闡述對開源軟件社區的同伴支持現象進行系統分析的方法,并提出衡量同伴支持有效性的一系列度量標準和計算方式。
關鍵詞:同伴支持;開源軟件;度量標準
中圖分類號:G642 文獻標識碼:B
大多數開源軟件都伴有由用戶構成的社區,這些用戶社區為用戶提供知識共享的平臺,用戶通過這些社區獲得同伴用戶的支持。但是對于基于這些用戶社區的同伴支持的有效性并沒有系統的研究。本文以兩個開源軟件用戶社區為例,闡述對開源軟件社區的同伴支持現象進行系統分析的方法,并提出衡量同伴支持有效性的一系列度量標準和計算方式。這些度量標準可提供應選擇使用開源軟件時的參考指標。
1樣本社區
為了便于說明,我們選擇apache軟件基金會開發的ant和lucene-java兩個開源軟件作為說明本文提出的分析方法和度量指標的分析樣本。Ant是一個支持軟件編譯、測試、部署等過程的自動化工具,和unix系統的make具有類似的功能,但對java開發提供了特定的支持,已成為java開發者不可或缺的開發工具。Lucene提供了一套生成全文索引和全文檢索的軟件庫,其中最主要的是其java類庫,通稱lucene-
java。包括Eclipse在內的很多java軟件都使用了lucene-java作為其后臺的全文檢索引擎。這兩個開源軟件都是比較成熟的軟件,有大量的用戶和穩定的社區,可為我們對開源軟件的同伴支持現象的分析提供代表性的數據。這兩個開源軟件的用戶主要利用面向用戶的郵件討論組(user@ant.apache.org和java-user@lucene.apache.org)交換知識,獲得同伴用戶的支持。我們從http://ant.apache.org和http://lucene.apache.org/收集了這兩個郵件討論組的1995年至1997年的3年間的全部郵件存檔,對其中的用戶支持現象進行分析。
2數據庫生成
為了自動生成下節引入的各種度量標準,對同伴支持做定量、系統化的分析,首先要從郵件存檔生成一個數據庫,圖1是該數據庫的模式。生成該數據庫時面臨的技術問題主要有兩個:同一用戶的確定和討論主題線(thread)的再現。

2.1同一用戶的確定
一般而言,一個電子郵件地址代表一個用戶,但是很多用戶常常同時使用多個電子郵件地址,或因為工作更換等原因更換電子郵件地址,比如說ant用戶xavier hanin同時使用了xh@javasoft.fr,xavier.hanin@gmail.com和xavier@apache.
org三個不同的地址。為了保證分析的準確性,我們采用了下列的啟發式算法確定用戶的身份。
Step 1: 對每個郵件的from域進行解析,抽出其中的用戶名字和用戶的電子郵件地址,構成當前用戶(current_user)的
Step 2: 把current_user的
address2, …)>。但由于有重名現象,因此在因為用戶名字相同而引起合并時,分析程序會請求分析人員的確認以避免錯誤的合并。
反復地進行上述處理直到沒有新的身份合并為止。這樣具有多個郵件地址的用戶都可以被歸并成同一用戶身份,并被賦予一個唯一的用戶標識代碼user-id,然后在數據庫中為每個用戶建立一個數據項,以user-id為其主要關鍵字。
2.2討論主題線的再現
郵件存檔按郵件討論組服務器的收發順序排列郵件,并不直接保存各個郵件之間的回信關系,因此生成數據庫的第二個主要任務是重構電子郵件的主題線,理出各個郵件之間的回信關系。每個郵件都一個唯一確定的msg-id,用于數據庫中郵件數據項的主要關鍵字。如果郵件含有In-reply-to域,那么根據該域中的msg-id,很容易知道它是對那一個郵件回的信,依次遞歸處理,可以推算出屬于同一個主題線的所有郵件。
但是因為各種原因,比如說有些用戶的郵件處理系統濾掉了In-reply-to域,很多郵件并沒有In-reply-to域。對這些郵件,我們采用主題匹配的方式找出其所屬的主題線。首先抽出郵件的主題(Subject)域,刪除如(“Re:”, “Fwd:”, “Aw:”)等由各種語言的郵件處理系統軟件自動添加的回信前綴以后,再和已經分類的主題線的各個郵件的主題(Subject)域作比較,如果有相同的主題,則把該郵件歸入到那個主題線。如果該主題是第一次出現,則在數據庫中新建一個主題線。
一條主題線算作對一個問題地討論,因此數據庫中的主題線數據項有兩個基本關系:提問和回復(圖1)。每個主題線的第一個郵件是該線的提問郵件,而其他的所有郵件都是回復郵件。提問郵件的發信人是提問者,回復郵件的發信人是回復者。
3同伴支持分析方法和度量
有了郵件數據庫,我們就可編制簡單的程序從數據庫中抽出相關數據,對同伴支持作定量的分析。本文提議用回復率、回復時間、支持程度以及社會網絡密度等度量來衡量同伴支持的有效性。
3.1回復率
衡量一個郵件討論組的有效性的第一個數據是該討論組的回復率,即用戶提問獲得其他用戶回信的百分比。很顯然如果一條主題線只有一個郵件那么該線的提問就沒有回復。如果一條主題線的所有郵件都來自同一個用戶,那么這一提問也沒有獲得同伴的支持。如表1所示,這兩個郵件討論組三年來分別有15557和19305個郵件,共有4000左右的主題線,大致相當于每天有17個左右的郵件,4條左右的主題線,其中近80%的主題線得到了回復。而且從表1關于各個季度的回復率分布情況來看,這一高回復率相當穩定,進一步表明了開源軟件社區中同伴支持現象的有效性。

3.2回復時間
對每一個主題線的時間分析可以得到兩個重要的度量指標:第一反應時間和討論長度。第一反應時間是第一個回復郵件和提問郵件之間的時間差,這一度量指標揭示一個問題大概在多長時間內可以得到用戶社區的幫助。討論長度是最后一個回復郵件和提問郵件之間的時間差,揭示大概要用多長時間才能從用戶社區得到比較完整的幫助。在一般情況下當用戶獲得足夠的幫助信息以后一個討論主題線就結束了。
圖2顯示了三年來兩個社區的第一反應時間分布圖。圖中縱軸的百分比是累計百分比,表示到該時間內,提問郵件已經得到第一個回復的百分比(圖中沒有包括沒有回復的主題線)。從圖中可以看出,在24小時之內,有90%以上的問題已經得到了第一個回復,其中有7.8%(ant-user)和 2.9%(lucene-user)的問題在5分鐘內就得到了第一個回復。圖3顯示了各個主題線討論的時間長度,可以看出90%以上的問題在5天之內結束,50%以上的問題在12個小時之內就結束了。這些度量進一步表明兩個社區的同伴支持是很活躍的。這兩組數據進一步表明這兩個開源軟件社區的同伴支持活動的活躍和有效程度。


3.3支持強度
兩個指標可以提供重要的線索衡量用戶在社區里得到什么程度的支持:每個主題線的郵件個數和每個主題線的回復者的個數。表2給出了這兩個度量的最小數,最大數和各個四分位數。從表2可以看出,50%以上的問題只涉及2名回復者,2~3個回復郵件。這說明用戶的問題大多數是比較簡單的,只需要極少數的同伴就可以解決。

3.4社會網絡密度
對開源軟件開發狀況的研究調查表明,大多數的軟件源代碼是由極少數的開發人員提供的,比如說只有少于1%的apche httpd服務器的用戶曾提供源代碼,可以說開源軟件事實上存在一個開發中心。另一方面,去中心化的長尾(Long tail)也是網絡時代的一個重要特征,長尾現象指出,在網絡時代用戶的需求和貢獻會進一步的分散,形成一個細長的尾巴,而這細長尾巴部分的總和往往可以匹敵需求集中部分。比如說,網絡書店amazon超過25%的銷售量來自于排行榜上13萬名以外的圖書,而北美最大的傳統書店BarnesNoble每年上架的書目的總數也僅為了13萬種。
分析開源軟件中同伴支持的分散程度可以借用社會網絡的概念。可以把同伴支持關系描述成一個有向的社會網絡,其中每一個結點是用戶,從結點A到結點B的有向弧則表示用戶A回復了用戶B提出的問題。圖4分別顯示了ant-user和lucene-user在2006年4月份的基于互相支持的社會網絡(為了圖的可讀性,我們只選用了一個月的數據)。從圖中可以看出用戶之間的互助還是比較分散的。

圖4 社會網絡
對分散程度還可以用網絡密度(nd)來定量描述。nd=(2*L)/(N*(N-1)),其中L是弧的條數,N是結點的個數。表3顯示了2006年各個月的兩個社區同伴支持的網絡密度,表3的最后一列顯示了根據三年的同伴支持情況形成的社會網絡的密度。從單個月的互助情況看,同伴支持有良好的分散性,說明很多用戶參與了幫助其他用戶,但是三年的累計數字卻顯示了很低的分散度。根據對數據的進一步分析,我們發現大多數用戶只在某一個時間段參與了社區,而一些特別活躍的用戶則參加了很長的一段時間,他們每個月都會參與幫忙,累計下來的幫助數很大,成為社區的中心任務。因此,可以說開源社區既有中心也有中心的長尾效應,中心現象指的是其長期趨勢,而長尾效應則反應在其短期現象里。

4結束語
本文提出了一組度量衡量軟件開源社區的同伴支持現象的有效性,通過計算這些度量,軟件公司或用戶可以估算使用開源軟件的技術支持成本或對其日常使用的影響,從而作出正確的用或者不用的決定,也可用這些度量比較相同功能的軟件,選擇符合自己要求的軟件。