楊紅
(四川大學計算機學院,成都 610065)
GitHub是一個基于網頁的提供版本控制存儲和托管服務的Git,根據GitHub 2017年發布的年度報告顯示,目前GitHub社區開發者已經達到2400萬,150萬個組織機構包括Microsoft、Facebook、Google和Apple等全球科技巨頭,超過6700萬個資源庫信息,自2016年9月以來提交行為到達10億次[1],且這些數目還在迅速增長。托管在GitHub上面的項目可以通過標準的Git命令進行訪問和操作,同時GitHub還提供一系列社交網絡具有的功能,例如贊、關注和評論等,在開源世界中享有深遠的聲望,逐漸形成了自己的社交化編程文化(Social Coding),用戶可以通過使用GitHub的發現(Explore)或者搜索功能發現感興趣的內容,之后選擇復刻他人項目參與到開發中。
軟件開發是一個參與者高度合作的過程,開發過程中不乏交流分享。在GitHub中,開發者們可以通過提交評論(Commit Comments)來表達他們的觀點,開發者可以表達對項目的滿意程度或者提出在開發過程中遇到的問題,這些評論信息表達了開發者們的情感色彩和情感傾向性,如喜怒哀樂等,通過開發者們發表的提交評論的情感分析,我們希望挖掘其中潛在的規律。
本文從分析GitHub上提交評論的角度出發,使用情感分析工具SentiStrength進行情感打分,對軟件開發過程中的影響因素進行了分析,提出了提交評論頻率和提交評論最大惰性時間對項目情感打分的影響進行了分析。
隨著開源軟件的快速發展,世界各地的開發者都通過互聯網參與到項目的協作開發中,同時GitHub作為目前最為流行的代碼托管和社交編程網站,也得到了眾多開發者的青睞。Zhang Yang[2]等研究了GitHub中@提及符號對軟件開發的影響,選取GitHub上的兩個項目Ruby on Rails和AngularJS數據,通過定性和定量分析得出@提及符號吸引了更多的參與者,尤其在困難的問題上使用較多,促進開發人員之間的協作。Ray Baishakhi[3]等研究了GitHub中編程語言對軟件質量的影響,收集了GitHub中17種語言的728個項目,29000作者和150萬提交的大量數據,將多元回歸建模與可視化文本分析相結合,通過控制如團隊規模、項目規模和項目歷史等的證明編程語言對軟件質量有適當顯著的影響。
Emitza Guzman[4]等通過定量情緒總結研究了軟件開發團隊中成員情緒,將概率建模與情感分析技術相結合,自動提取和總結在協作工件中表達的情感,實驗使用三個開發團隊在三個月內產生的1000個提交信息,缺陷報告,郵件和Twitter信息。崔安頎[5]提出了基于情感記號的情感詞典構造與情感分析方法,提出不穩定性程度、在線話題可能性程度與標簽作者信息熵這三種度量,使用標簽分類發現微博熱點事件。
GitHub擁有數據量龐大的開源軟件倉庫,對于其中開源軟件的數據采集有多種方法,例如爬蟲抓取和GitHub API等,本文使用的方法是調用GHTorrent[6-7],使用Google BigQuery來,獲取GHTorrent上的數據,BigQuery可以使用類似SQL語句的方法來對GHTor?rent的MySQL數據庫進行查詢,同時對查詢結果提供CSV和JSON格式下載。圖1為數據采集過程中主要涉及的4張表的關系。

圖1 數據表關系圖
GHTorrent監控著GitHub上的每一次更改,并且將每一次的更改以JSON字符串的形式存儲在Mon?goDB數據庫中,通過公開的GHTorrent on the Google Cloud,在BigQuery中使用如下所示的部分SQL語句進行查詢:


通過執行上述SQL語句,可以獲得項目名稱,提交作者ID,提交ID,提交評論者ID,評論內容和評論創建時間等信息。
對于獲取的研究數據,由于存在部分內容缺失和評論使用非常規語言造成原始數據下載亂碼情況,因此對數據進行預處理操作,刪除其中的亂碼數據,通過git log查詢補全部分數據缺失信息。
(1)SentiStrength
SentiStrength是一種詞匯情感提取工具,已經有研究證明SentiStrength對于處理短文本具有很高的精度,例如在Twitter和電影評價中。通過對GitHub中的提交評論樣本進行隨機抽取手工查看,結果顯示這些評論內容通常都比較簡短而且廣泛使用表情,而SentiSt?rength除了提供文字的分析外,還可以對文字表情比如:)等進行分析,因此選用SentiStrength可以極好地分析開發者的提交評論情感。
在SentiStrength中,有一個字典中存儲了各個單詞和常用的表情符號分配的固定分數,其中帶有積極情緒的詞組情感分值賦值范圍為[1,5],其中5分代表情感極其正面,而帶有消極情緒的賦值范圍則為[-5,-1],其中-5分代表情感極其負面,(-1,1)表示中性情感。對于在文本中同時出現積極情緒和消極情緒傾向的觀點時,SentiStrength會使用字典中配置好的情感詞表,否定詞表,程度副詞表,疑問詞表和常用表情符號等非規范化用語詞表來計算得出文本的積極情緒和消極情緒強度。表1表示SentiStrength情感強度度量信息。

表1 SentiStrength情感強度度量信息表
表2表示了采集數據中典型的Commit Comments的情感得分。
對于開發人員提交評論的頻率研究,主要采用了類似商品條形碼的形式分析,可以有效地表示開發人員提交評論的可視化,可視化圖形由長度相等的平行豎線段組成,這些豎線從左至右分別按照時間順序依次排列,時間以天作為基本單位,其中一條豎線代表對應的這天有開發人員進行提交評論操作,顏色的深淺則表示當天的提交評論次數多少,顏色越深代表當天提交次數越多,空白則表示在對應的時間內沒有提交評論發生。由于頻率分析結果類似于商品條形碼,因此被稱為頻率條形碼可視化。圖2表示實驗中一個頻率條形碼可視化分析結果。

表2 典型Commit Comments情感分析

圖2 頻率條形碼可視化
對于項目提交評論的情感分析,主要采用SentiSt?rength工具進行分析,將GHTorrent上獲取的數據導入SentiStrength工具中。實驗表明,每個項目的平均得分提交評論平均情感得分傾向于中性分數0,因為很多評論都是描述技術方面,開發者在進行技術交流的時候也只會有輕微的情感傾向,圖3表示實驗數據中6個項目的平均情感得分,圖4描述6個項目的情感得分分布情況。

圖3 部分項目平均情感得分

圖4 項目情感得分分布情況
(1)影響因素定義
定義1:評論提交頻率(CCF)
項目評論提交頻率指的是每月提交評論數,可由如下公式計算獲得:

其中,PC_ALL表示項目提交評論總數,M_NUM表示項目提交評論總間隔月數。
定義2:最大惰性時間占比(MIT)
最大惰性時間占比指的是項目未有評論提交的最大時間間隔占項目總時間的比率,可由如下公式計算獲得:

其中,ITend表示最大惰性區間結束時間,IT_start表示最大惰性區間開始時間,D_NUM表示項目總時間。
(2)相關性分析框架
本文進行的分析框架如圖5所示,主要包括數據收集,數據預處理,處理硬性因素數據和影響因素相關性分析四個主要步驟,其中數據收集包括查詢數據和獲取及保存數據兩步。
通過選取實驗評價指標,分析項目情感得分與項目提交評論頻率和最大惰性時間占比之間的關系。按照本文提出的相關性分析框架進行實驗之后得到的提交評論因素與評論情感相關性如圖6所示。
實驗共選取GitHub上76個開源項目共計3941條評論進行相關性分析,從圖6可以看出,項目開發人員評論情感得分是由其評論頻率和評論最大惰性時間占比共同影響的,當提交評論頻率越大同時評論最大惰性時間占比越小時,也就是開發人員大量對項目進行討論并且持續參與討論時,這樣的項目往往能獲得較高的情感得分。因此對于開發者來說,在進行項目Fork時,建議選擇提交評論較頻繁且評論惰性區間較小的項目進行開發學習。
利用本文得出的結論進行進一步思考,對于開發者在對GitHub開源軟件開發過程中提出幾點建議。
(1)盡量提高開發者評論的頻率,這樣或有利于開發者進行積極討論,有助于項目難題解決和順利推進;

圖5 相關性分析框架
(2)盡量在開發過程中進行持續性的討論,這樣或有利于開發者協同跟進項目進度,盡快發現解決問題,從而提高開發效率;
(3)開發者盡量進行友好的討論氛圍,在討論問題時集中焦點,集中解決難題,有助于開發進度提升。

圖6 開發人員提交評論因素與評論情感相關性分析
本文主要對開源社區GitHub中的提交評論行為進行情感分析,分析了開發者提交評論頻率與評論最大惰性時間占比與項目情感得分之間的關系,通過調用GHTorrent進行實驗數據獲取,利用SentiStrength工具進行情感分析,實驗得出了一些對GitHub開源軟件開發過程的有力結論。由于GitHub軟件開發過程復雜,本文分析的影響因素還需要在后續工作中改進,考慮多影響因素之間的相關性。
參考文獻:
[1]https://octoverse.github.com/.
[2]Zhang Y,Wang HM,Yin G et al.Social Media in GitHub:the role of@-mention in Assisting Software Development.Science China-Information Sciences,2017:60-3.
[3]Ray B,Posnett D,Devanbu P,Filkov V.A Large-Scale Study of Programming Languages and Code Quality in GitHub.Communications of the ACM,2017:91-100.
[4]E.Guzman and B.Bruegge.Towards Emotional Awareness in Software Development Teams.In Foundations of Software Engineering-FSE'13,pages 671-674,2013.
[5]崔安頎.微博熱點事件的公眾情感分析研究[D].清華大學,2013.
[6]Georgios Gousios,Bogdan Vasilescu et al.Lean GHTorrent:GitHub Data on Demand.MSR'14.2014.
[7]http://ghtorrent.org/