張洋,王濤,尹剛,余躍,黃井泉
1. 國防科技大學計算機學院,湖南 長沙 410073;2. 綠色計算產(chǎn)業(yè)聯(lián)盟,北京 100036;3. 湖南智擎科技有限公司,湖南 長沙 410073
自20世紀末以來,開源軟件在現(xiàn)代社會的各個領域得到了廣泛的應用,取得了令人矚目的成就。Black Duck公司2017年的調(diào)查報告[1]顯示,全球86%的企業(yè)在搭建業(yè)務時全部或部分使用了開源軟件,其中60%的公司還在增加開源軟件的使用比重。開源軟件的開發(fā)活動以互聯(lián)網(wǎng)軟件社區(qū)為平臺,其開發(fā)過程和制品數(shù)據(jù)對外開放,允許不同類型的開發(fā)者參與其中,形成一種大眾參與的開源模式[2],給開源世界帶來了強大的生產(chǎn)力。開源模式中大眾貢獻者可以自由地實踐分布式協(xié)同,催生了許多群體化軟件開發(fā)方法和一系列優(yōu)質(zhì)的開源社區(qū)。特別是,近年來云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等對國民經(jīng)濟發(fā)展產(chǎn)生重大影響的信息化基礎設施絕大多數(shù)是以開源軟件為核心構建而成的,開源軟件已經(jīng)在全球軟件產(chǎn)業(yè)占據(jù)主導地位。
與傳統(tǒng)工業(yè)化軟件生產(chǎn)相比,大眾化開源軟件生產(chǎn)的開發(fā)數(shù)據(jù)和應用數(shù)據(jù)高度開放且規(guī)模巨大。目前,支持大眾化軟件生產(chǎn)和應用活動的開源社區(qū)包含了大量有價值的數(shù)據(jù),如軟件代碼、軟件版本、容器鏡像等軟件制品和過程數(shù)據(jù),以及軟件問答、軟件評價等軟件交流和反饋數(shù)據(jù),這些數(shù)據(jù)涵蓋開發(fā)數(shù)據(jù)、交付數(shù)據(jù)及應用數(shù)據(jù)等全維度數(shù)據(jù)類型,涉及開發(fā)制品、開發(fā)過程、軟件產(chǎn)品、軟件鏡像、咨詢討論與應用問答等各個方面,具有規(guī)模巨大、碎片分散、快速膨脹的特點。如何構造高擴展、高性能的軟件工程開源生態(tài)大數(shù)據(jù)處理體系結(jié)構,建立多源異質(zhì)、廣泛關聯(lián)、語義豐富、覆蓋全面的軟件工程開源生態(tài)大數(shù)據(jù)環(huán)境,分析提煉軟件知識并設計實現(xiàn)輔助開發(fā)工具,以提升軟件開發(fā)的智能化程度,已成為重要的科學問題。
本文研究了軟件工程開源生態(tài)大數(shù)據(jù)體系,并提出了一種自生長的采集處理框架與匯聚共享環(huán)境;然后,介紹了基于軟件工程開源生態(tài)大數(shù)據(jù)的智能化軟件開發(fā),以及基于軟件工程開源生態(tài)大數(shù)據(jù)分析挖掘的典型應用,以期為面向智能化軟件開發(fā)的開源生態(tài)大數(shù)據(jù)研究與應用提供相關指導。
傳統(tǒng)軟件數(shù)據(jù)挖掘主要關注同質(zhì)和局部軟件工程數(shù)據(jù),難以適應軟件工程開源生態(tài)大數(shù)據(jù)呈現(xiàn)出的異構多源、類型復雜、持續(xù)增長、廣泛互聯(lián)等新特性,全局視角下考察軟件大數(shù)據(jù)價值仍面臨巨大挑戰(zhàn)。本文以“主動感知、定向采集、多源關聯(lián)、增量檢測”機制構建自生長的軟件大數(shù)據(jù)環(huán)境,建立綜合互聯(lián)的大樣本軟件數(shù)據(jù)集合,以支持多維度、多譜系、貫通性的軟件知識提煉和智能釋放。
通過對軟件生態(tài)進行全面梳理和分析,本文將軟件社區(qū)分為開發(fā)社區(qū)和應用社區(qū),涵蓋軟件開發(fā)、發(fā)布和應用等不同階段,對軟件工程大數(shù)據(jù)進行調(diào)研分析。軟件工程大數(shù)據(jù)以代碼、文檔、開發(fā)記錄等文本為主體,語義豐富。為此,本文構建了系統(tǒng)的軟件工程開源生態(tài)大數(shù)據(jù)體系(如圖1所示),涉及開發(fā)制品、開發(fā)過程、軟件產(chǎn)品、軟件鏡像、咨詢討論和應用問答等各個方面,覆蓋GitHub、Apache、Topcoder、Docker Hub、OSCHINA以及Stack Overflow等各類型主流開源社區(qū),為軟件工程研究和實驗提供了一個較完整的全局視圖。
圖1 軟件工程開源生態(tài)大數(shù)據(jù)體系
該體系主要包括開發(fā)數(shù)據(jù)、交付數(shù)據(jù)和應用數(shù)據(jù)三大類,每一類又被細分為多個子類。最終,該分類體系與當前的多種軟件倉庫、社區(qū)和論壇的具體數(shù)據(jù)格式建立了映射。具體如下。
(1)開發(fā)數(shù)據(jù)
開發(fā)數(shù)據(jù)以軟件工程中軟件開發(fā)設計的制品和過程為核心,其中開發(fā)制品包括源代碼、編譯文件和提交日志,開發(fā)過程則涉及開發(fā)人員、合并申請、問題跟蹤、郵件交互、持續(xù)集成和競爭式開發(fā)等多個方面。具體地,開發(fā)數(shù)據(jù)對應的數(shù)據(jù)源包括版本庫、Issue庫、郵件列表、評測工具和競賽系統(tǒng),涉及的數(shù)據(jù)源實例有GitHub、Apache和Topcoder等。
(2)交付數(shù)據(jù)
交付數(shù)據(jù)主要是交付生產(chǎn)環(huán)境的軟件產(chǎn)品,同時隨著虛擬化技術和容器技術的發(fā)展,軟件鏡像作為一種特殊的軟件產(chǎn)品交付方式逐步興起并大量存在,因此其也單獨作為交付數(shù)據(jù)的一個子類。軟件產(chǎn)品數(shù)據(jù)涉及軟件的方方面面信息,包括軟件描述、軟件標簽、軟件分類和可執(zhí)行程序本身;軟件鏡像與之類似,包括鏡像描述和鏡像文件等。交付數(shù)據(jù)主要來源于軟件產(chǎn)品頁面、軟件包和鏡像倉庫,具體實例包括OpenHub和Docker Hub等。
(3)應用數(shù)據(jù)
應用數(shù)據(jù)主要包括資訊討論和應用問答,其中資訊討論包括在線文檔、社區(qū)反饋、文檔標簽以及其他屬性等;應用問答則主要針對以提問和解答為主要形式的在線社區(qū)活動,涉及的數(shù)據(jù)包括問題與回復、問題標簽和其他屬性等。應用數(shù)據(jù)的主要數(shù)據(jù)來源為在線文檔和在線問答,具體實例有OSCHINA和Stack Overflow等。
在此基礎上,本文提出了分布式異構存儲的總體策略,設計和制定了多源異構的軟件工程大數(shù)據(jù)管理框架與環(huán)境。其總體主要包括以下4個層次。
● 數(shù)據(jù)源:軟件工程大數(shù)據(jù)涵蓋開發(fā)、發(fā)布、應用、運維等不同過程、不同類型和不同源的數(shù)據(jù),包括版本庫、代碼倉庫、配置制品、軟件鏡像等。
● 數(shù)據(jù)存儲:主要實現(xiàn)對大規(guī)模異構軟件工程大數(shù)據(jù)的高效存儲和訪問。
● 數(shù)據(jù)處理:圍繞特定的任務和目標,將存儲的數(shù)據(jù)按需展開,并進行相應的處理,形成軟件知識庫。通過數(shù)據(jù)解析、融合等技術進行數(shù)據(jù)的二次加工和處理,包括通過分析不同數(shù)據(jù)類型之間的關聯(lián)和依賴、基于圖數(shù)據(jù)庫等存儲技術構建軟件領域的知識圖譜,進一步通過數(shù)據(jù)按需展開機制有效降低存儲資源的占用情況。
● 數(shù)據(jù)實例:通過豐富的接口和服務,針對不同的需求和應用提供相應的數(shù)據(jù)服務。針對圍繞的不同數(shù)據(jù)類型,對外提供的數(shù)據(jù)服務被分為4類,包括以項目為中心的數(shù)據(jù)服務、以測試為目標的數(shù)據(jù)服務、以人為中心的數(shù)據(jù)服務和以運維為目標的數(shù)據(jù)服務等。
本文提出一種“增量式、多模式”的自生長數(shù)據(jù)采集處理框架(如圖2所示),該框架能夠針對不同類型的軟件數(shù)據(jù)進行匯聚、收集和整理。具體地,針對網(wǎng)頁數(shù)據(jù)、版本庫數(shù)據(jù)、缺陷庫數(shù)據(jù)等不同類型的數(shù)據(jù),本文研究了主動感知、定向采集、多源關聯(lián)和增量檢測等關鍵技術,設計部署了分布式爬蟲,實現(xiàn)了網(wǎng)頁爬蟲、基于應用程序接口(application programming interface,API)的數(shù)據(jù)獲取和數(shù)據(jù)包直接下載等多種收集方式。具體如下。
● 基于網(wǎng)絡爬蟲的數(shù)據(jù)收集方法:針對特定的軟件庫采用定點爬取的方式,通過分析特定數(shù)據(jù)源網(wǎng)頁中的數(shù)據(jù)特點和Schema格式,基于爬蟲常用的標簽匹配和正則表達式匹配等策略獲取相應的數(shù)據(jù)信息。為了解決爬取效率低和重復爬取的問題,采用分布式網(wǎng)絡爬蟲技術進行多任務的并行處理,從而大幅提高大規(guī)模軟件數(shù)據(jù)的爬取效率,另外,基于時間戳等信息實現(xiàn)周期性、增量式爬取,避免數(shù)據(jù)的重復獲取。其中,多數(shù)軟件數(shù)據(jù)基于爬蟲技術獲取,包括Apache基金項目的源碼、郵件、網(wǎng)頁和版本控制,Eclipse社區(qū)項目的缺陷報告和代碼,配資代碼庫和Docker Hub中的元數(shù)據(jù)信息、代碼制品及容器的Dockerfile,CSDN的博客、問答和論壇等。
● 基于API的數(shù)據(jù)收集方法:除了網(wǎng)絡爬蟲,部分開源軟件庫對外提供獲取和下載數(shù)據(jù)信息的開放API,因此可以通過調(diào)用API的方式獲取相應的數(shù)據(jù)信息,其中包括Topcoder的眾包開發(fā)數(shù)據(jù)、Apache基金會項目的缺陷報告等。
● 數(shù)據(jù)包直接下載方法:一些社區(qū)對歷史數(shù)據(jù)進行壓縮存檔,并直接對外提供數(shù)據(jù)下載地址,例如Stack Overflow社區(qū)的文檔數(shù)據(jù)等。
在此基礎上,軟件工程開源生態(tài)大數(shù)據(jù)采集處理框架整體可分為3層,包括數(shù)據(jù)獲取層、數(shù)據(jù)分析層以及持久化層,通過3個層次的協(xié)同配合,最終完成從數(shù)據(jù)的最初采集、數(shù)據(jù)的分析處理,到最后數(shù)據(jù)的展示。其中,數(shù)據(jù)獲取層的主要功能是完成數(shù)據(jù)的采集工作,為平臺提供高效、穩(wěn)定、持續(xù)、準確的數(shù)據(jù)服務。數(shù)據(jù)分析層對數(shù)據(jù)獲取層獲取的頁面信息進行抽取,提取出每個頁面中的關鍵信息,并對抽取結(jié)果進行驗證,通過驗證的頁面數(shù)據(jù)會被存儲到數(shù)據(jù)庫中,為數(shù)據(jù)分析做準備。該層還有一些數(shù)據(jù)挖掘算法,對所抽取的數(shù)據(jù)進行數(shù)據(jù)分析操作,包括社區(qū)關聯(lián)、軟件評估等。持久化層按照最終需要展示的數(shù)據(jù)格式,對之前得到的數(shù)據(jù)處理結(jié)果進行處理,并將處理結(jié)果存放于數(shù)據(jù)緩沖池中,最終源源不斷地向展示平臺傳輸,為平臺的展示提供數(shù)據(jù)支持。
圖2 軟件工程開源生態(tài)大數(shù)據(jù)采集處理框架
針對軟件工程開源生態(tài)大數(shù)據(jù)規(guī)模大、多樣性和異構性的特點,本文采用開放共享、分散存儲、平臺匯聚、按需獲取的方式,形成一個大規(guī)模軟件工程大數(shù)據(jù)共享平臺,如圖3所示。目前該平臺已實現(xiàn)對全球PB級開源代碼和鏡像等軟件工程大數(shù)據(jù)的跟蹤、獲取,為軟件工程研究和實踐提供了堅實的數(shù)據(jù)基礎。
圖3 軟件工程大數(shù)據(jù)共享平臺
軟件工程大數(shù)據(jù)共享平臺采用分散存儲、平臺匯聚的模式提供共享管理和在線訪問統(tǒng)一入口,屏蔽底層數(shù)據(jù)存儲的分散性和多樣性,提供風格一致的門戶環(huán)境。具體存儲結(jié)合實際數(shù)據(jù)特征采用結(jié)構化存儲與非結(jié)構化存儲相結(jié)合的方式,平臺核心架構設計如下。
● 以多源異構的軟件工程開源生態(tài)大數(shù)據(jù)為數(shù)據(jù)源,基于網(wǎng)絡爬蟲技術實現(xiàn)數(shù)據(jù)的定向收集和通用收集,同時還包括基于API的數(shù)據(jù)獲取和直接獲取。
● 采用結(jié)構化與非結(jié)構化相結(jié)合的方式進行存儲,針對元數(shù)據(jù)信息主要采用基于關系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫的方式進行存儲,并結(jié)合聯(lián)合文件系統(tǒng)(aufx和zfs等)等技術支持非結(jié)構化數(shù)據(jù)(尤其是文檔和代碼)的有效存儲。為了減少數(shù)據(jù)存儲的資源占用問題,針對軟件版本數(shù)據(jù)提供了按需進行版本分支展開的機制。
● 為本地數(shù)據(jù)增加索引,提供知識描述表作為本地數(shù)據(jù)描述、共享和權限控制的基本單位,同時支持知識描述表的繼承關系和多種映射規(guī)則定義,并提供知識圖譜作為知識描述表之間邏輯關聯(lián)關系的描述工具和知識檢索工具。
● 平臺提供統(tǒng)一訪問門戶,并可根據(jù)需求動態(tài)調(diào)整數(shù)據(jù)類別條目,通過統(tǒng)一資源接口,支持用戶快速獲得原始或加工過的各類軟件工程數(shù)據(jù)。
平臺被部署于UCloud和阿里云上,提供匯聚數(shù)據(jù)說明及訪問入口,小規(guī)模數(shù)據(jù)集被直接上傳至共享平臺,大規(guī)模數(shù)據(jù)集/應用服務由數(shù)據(jù)共享單位自行管理。該平臺具有高度靈活性和可擴展性,能夠基于軟件工程開源生態(tài)大數(shù)據(jù)體系建立多樣化的數(shù)據(jù)類型導航機制,涉及的典型軟件工程數(shù)據(jù)包括軟件工程科研數(shù)據(jù)、開源代碼數(shù)據(jù)、Docker鏡像數(shù)據(jù)以及知識圖譜數(shù)據(jù)等不同類型。
立足于軟件工程開源生態(tài)大數(shù)據(jù),越來越多的研究團隊基于不同類型的開源大數(shù)據(jù)進行智能化的軟件開發(fā)研究。如圖4所示,從基于代碼、日志、郵件等開發(fā)數(shù)據(jù)的知識圖譜構造,到融合缺陷、社區(qū)問答等開發(fā)數(shù)據(jù)和應用數(shù)據(jù)的軟件代碼缺陷定位與修復、問答資源推薦,再到針對配置文件、容器鏡像等交付數(shù)據(jù)的運維數(shù)據(jù)管理,這些前沿探索為人們更好地利用開源大數(shù)據(jù)輔助智能化軟件開發(fā)提供了方法指導與工具支持。
相關研究針對軟件缺陷發(fā)現(xiàn)而構造的軟件缺陷知識圖譜(bug knowledge graph,BKG)[3]利用主題模型LDA(latent dirichlet allocation)和文本相似度算法分別自動化地進行實體識別和關系抽取,但其受限于缺陷報告數(shù)據(jù)和源代碼數(shù)據(jù),不支持其他數(shù)據(jù)源的知識擴展。針對通用軟件的弱點,相關研究推理并構造了CWE KG(common weakness enumeration knowledge graph)[4],通過預定義的模板進行規(guī)范,采取社區(qū)平臺的方式進行人工編輯,但是其并非自動化方法,受限于與軟件弱點相關的文檔數(shù)據(jù),不支持其他數(shù)據(jù)源的知識擴展。此外,針對軟件開發(fā)在線問答,相關研究構造了HDSKG(harvesting domain specific knowledge graph)[5],通過依賴解析和基于規(guī)則的方法進行實體和關系的識別,采用支持向量機(support vector machine,SVM)的分類算法評估三元組,但是其是半自動化方法,主要來源于Stack Overflow的在線問答數(shù)據(jù),可擴展性受限。因此,基于軟件工程開源生態(tài)大數(shù)據(jù)中的開發(fā)數(shù)據(jù),相關研究通過探索面向多源異質(zhì)、動態(tài)增長的軟件大數(shù)據(jù)的軟件知識自動識別、抽取、關聯(lián)與融合過程,提煉出大規(guī)模、內(nèi)容全面、語義豐富的軟件知識圖譜,為軟件構造過程中的智能化輔助服務提供了基礎支撐[6-7]。給定一個可復用的軟件項目及與其相關的大量軟件項目數(shù)據(jù),這些研究提出的方法能夠自動從中抽取出概念、實體等結(jié)點,并建立這些結(jié)點之間多源異構、類型豐富的關系,形成這個軟件項目特定的一個軟件項目知識圖譜。該知識圖譜基于圖數(shù)據(jù)庫,實現(xiàn)了對知識圖譜的存儲、索引、查詢等基礎支持的建立,為軟件項目數(shù)據(jù)的解析、關聯(lián)融合與知識挖掘提煉提供了支撐環(huán)境。在數(shù)據(jù)解析方面,圖譜兼容多種不同類型的軟件工程數(shù)據(jù),包括:軟件源代碼、各種版本控制系統(tǒng)(如SVN、Git)的版本記錄、郵件列表日志、缺陷追蹤系統(tǒng)日志、HTML網(wǎng)頁文檔、Word文檔、PDF文檔等。同時,該知識圖譜構造工具內(nèi)置了多種可追蹤性關聯(lián)分析與知識補全模塊,能夠充分對不同來源的軟件數(shù)據(jù)間的語義關聯(lián)進行智能恢復補全,且能夠從數(shù)據(jù)中提煉出更適合管理者、開發(fā)者與復用者理解的知識。
圖4 基于軟件工程開源生態(tài)大數(shù)據(jù)的智能化軟件開發(fā)研究
基于軟件工程開源生態(tài)大數(shù)據(jù)中的開發(fā)數(shù)據(jù)和應用數(shù)據(jù),相關研究團隊圍繞基于缺陷和社區(qū)問答數(shù)據(jù)的軟件代碼缺陷智能定位與修復問題開展了大量研究[8-9]。他們針對缺陷報告與關聯(lián)代碼間的詞共現(xiàn)關系、缺陷報告文本附著的元數(shù)據(jù),以及代碼規(guī)模越大越容易出現(xiàn)軟件缺陷等特點,構造了一個基本的監(jiān)督式文本主題模型STMLocator,并給出了相關訓練與預測算法。相較于傳統(tǒng)的信息檢索方法[10]以及基于頻譜的方法[11],該方法能夠?qū)⑿迯蜌v史作為監(jiān)督信息,同時將文本相似度與語義相似度結(jié)合,實現(xiàn)更高精度的缺陷定位。在開源項目Eclipse的多個子項目(PDE、Platform、JDT)收集的真實數(shù)據(jù)上的預測準確率相較同類工作最高提升23.6%。另外,為了研究缺陷報告文本附加信息對缺陷定位的影響,Wang Y J等人[8]提出了L2SS+模型簇,在多個實際數(shù)據(jù)集上的實驗結(jié)果表明,L2SS+CM模型,即產(chǎn)品模塊信息對缺陷定位準確率影響最顯著,預測準確率較同類工作最高提升18.7%。在基于社區(qū)問答網(wǎng)站的軟件缺陷修復信息智能推薦技術方面,為了進一步精確獲取和分類社區(qū)問答網(wǎng)站的內(nèi)容,相關研究分析了網(wǎng)站文本內(nèi)容的自動標簽推薦問題,針對標簽與文本詞之間的共現(xiàn)關系、標簽之間的關聯(lián)關系等特點,Tang S J等人[9]提出了一個iTAG深度學習模型,并給出了相關訓練與預測算法。在從Stack Overflow程序員社區(qū)問答網(wǎng)站等獲取的真實數(shù)據(jù)集上,iTAG模型較其他同類工作(#TagSpace[12]、Maxide[13]等)在預測準確率上有顯著提升。另外,iTAG模型在結(jié)果可視化解釋、發(fā)現(xiàn)更多合理的標簽等方面具有優(yōu)勢。
近些年,相關研究團隊立足于軟件工程開源生態(tài)大數(shù)據(jù)中的應用數(shù)據(jù)和交付數(shù)據(jù),圍繞上下文感知的軟件問答資源推薦技術開展了富有成效的研究[14]。目前大部分的軟件問答推薦系統(tǒng)沒有考慮上下文,有的雖然考慮了上下文,但是還是以代碼本身關鍵詞為主,沒有考慮其中的語義信息,也沒有充分挖掘已有的海量的問答知識[15-17]。參考文獻[14]針對此設計了基于主題模型的軟件問答推薦系統(tǒng),推薦系統(tǒng)通過主題模型組織整理現(xiàn)有的全量問答數(shù)據(jù),并推斷用戶代碼的行為,通過不同場景下的用戶行為抽取不同的代碼上下文,根據(jù)代碼上下文向開發(fā)人員推薦不同的問答。推薦問答的關鍵操作是計算代碼上下文與問答數(shù)據(jù)的相關性,其中的一個關鍵問題在于問答數(shù)據(jù)的范圍,直觀的選擇是計算代碼上下文與全量問答數(shù)據(jù)的相關性,然而這在實際應用中是不可能的,因此首先要做的是縮小計算范圍,計算代碼上下文和一部分問答數(shù)據(jù)的相關性。為了縮小計算的范圍,降低計算復雜度,Shao B等人[14]抽取代碼上下文中的關鍵詞,利用關鍵詞檢索得到較小的問答數(shù)據(jù)集合,然后計算代碼上下文和每一個問答數(shù)據(jù)的相關性,對所有結(jié)果進行排序后推薦給開發(fā)人員。推薦系統(tǒng)監(jiān)測開發(fā)人員開發(fā)代碼,當開發(fā)人員停止代碼或者程序運行時,拋出異常等行為觸發(fā)推薦機制,推薦系統(tǒng)通過抽象語法樹和主題模型分析代碼上下文,抽取關鍵詞,檢索多源數(shù)據(jù),對返回的數(shù)據(jù)進行分析排序,并最終展示給用戶。
為了充分體現(xiàn)人性化關懷,醫(yī)院對于掛號窗口,實行分專窗管理,開設老殘孕軍專窗、兒童門急診建卡及掛號專窗、退換號專窗、未帶身份證及卡異常等特殊情況處理專窗,并加強了醫(yī)生停診、換診的信息管理,實現(xiàn)醫(yī)生停診、換診申請網(wǎng)上提交并審核,保證了充足的號源。
基于軟件工程開源生態(tài)大數(shù)據(jù)中的交付數(shù)據(jù),相關研究團隊針對Docker鏡像設計了一種海量數(shù)據(jù)匯聚、管理、知識抽取和質(zhì)量評價的系統(tǒng)化方案和服務[18-19]。其成果首先實現(xiàn)了增量式、高并發(fā)的Docker數(shù)據(jù)匯聚和管理方法,支持對Docker Hub上百萬級Docker項目數(shù)據(jù)的自動獲取與增量更新,實現(xiàn)了項目數(shù)據(jù)的可發(fā)現(xiàn)和可追蹤。具體地,在數(shù)據(jù)匯聚方面,針對Docker項目數(shù)據(jù)量大、難以獲取項目整體列表等技術問題,參考文獻[18-19]提出了一種增量式的數(shù)據(jù)并發(fā)獲取方式,突破了高命中率的檢索關鍵詞生成算法、高效的Docker項目元數(shù)據(jù)更新比對與融合算法,從而提高數(shù)據(jù)獲取的覆蓋度以及對Docker項目數(shù)據(jù)更新的敏感度。在基于返回的檢索結(jié)果列表進行Docker項目詳細元數(shù)據(jù)獲取的過程中,考慮到檢索結(jié)構數(shù)據(jù)量大(通常能夠達到萬級或十萬級),他們采用“分而治之”的策略,對大規(guī)模的搜索返回結(jié)果實施并發(fā)的多線程獲取方式,顯著地提升了數(shù)據(jù)匯聚效率。最后,基于多種啟發(fā)性規(guī)則對初步獲取的Docker項目元數(shù)據(jù)進行分析、對比和過濾,識別其中的冗余和更新內(nèi)容,保證數(shù)據(jù)內(nèi)容的一致以及數(shù)據(jù)內(nèi)容的更新,實現(xiàn)了海量Docker項目相關數(shù)據(jù)的高效匯聚和增量更新。
近年來,越來越多的基于軟件工程開源生態(tài)大數(shù)據(jù)分析挖掘的應用誕生,并不斷發(fā)展。其中,針對軟件問答社區(qū)(如Stack Overflow)、開源軟件項目(如Apache、安卓項目等)、軟件開發(fā)工具(如Eclipse)、開發(fā)者數(shù)據(jù)(眾包開發(fā)者數(shù)據(jù)、開發(fā)過程數(shù)據(jù)等)類型的數(shù)據(jù)進行了匯聚和收集整理,OSSEAN構建了面向全球開源軟件的檢索與分析平臺。OSSEAN平臺的基本思路為:在軟件消費社區(qū)中找到關于軟件項目的文檔;利用這些文檔對軟件進行評估、比較、排序。通過獲取到的海量的開源社區(qū)數(shù)據(jù),OSSEAN平臺能夠提供一些有趣的服務,如開源生態(tài)系統(tǒng)的度量、軟件排序以及熱點話題分析。OSSEAN平臺數(shù)據(jù)獲取模塊已覆蓋全球20多個主要的開源社區(qū),并對這些社區(qū)進行持續(xù)監(jiān)控、實時抓取,抓取和分析的數(shù)據(jù)包括超過140萬個開源項目/倉庫的元數(shù)據(jù)以及超過2 000萬條在線討論數(shù)據(jù)。同時,OSSEAN平臺的跨社區(qū)關聯(lián)與分析模塊通過對多源異構數(shù)據(jù)的深度互聯(lián),建立相應的異質(zhì)信息網(wǎng)絡,并在此基礎上實現(xiàn)對開源軟件的分析、檢索與排序等服務[20]。
SnowGraph(software knowledge graph)在對開源社區(qū)軟件項目進行大量調(diào)研與實踐的基礎上,設計并實現(xiàn)了軟件項目知識圖譜自動構造支持平臺。對于一個待復用的軟件項目,SnowGraph能夠以自動化的方法對其中的多源異構數(shù)據(jù)進行處理,將分散、非結(jié)構化的信息提煉為廣泛關聯(lián)、語義性強的知識,并以知識圖譜的形式進行表示;在此基礎上,將知識圖譜融入機器對無結(jié)構文本的處理過程,進而為復用者提供準確有效的智能問答服務,從而提高軟件復用過程的效率與質(zhì)量。目前,SnowGraph的項目原始數(shù)據(jù)規(guī)模大約為500 GB,其中包含軟件項目源代碼、軟件開發(fā)版本記錄、軟件缺陷追蹤記錄、軟件開發(fā)郵件記錄以及Stack Overflow在線論壇記錄等。最終,SnowGraph自動構造了192個軟件項目知識圖譜,圖數(shù)據(jù)庫規(guī)模大約為100 GB。此外,SnowGraph平臺集成了軟件項目的智能問答服務系統(tǒng),即開發(fā)人員在復用一個軟件項目時,提出與軟件領域相關的開發(fā)問題,知識圖譜返回相應的代碼/文檔作為答案,從而輔助開發(fā)人員進行軟件復用。與BKG[3]、CWE KG[4]、HDSKG[5]等其他主流軟件知識圖譜相比,SnowGraph采取了多種信息抽取的方法來協(xié)同進行知識圖譜的全自動化構造,自動化程度更高,并且具備很好的通用性和可擴展性,能夠?qū)ξ磥砜赡艹霈F(xiàn)的新的知識需求、知識來源,以及知識抽取、關聯(lián)、提煉等進行支持。此外,SnowGraph實體類型和關系類型明顯比其他主流軟件知識圖譜豐富,從而在對應的軟件知識表示和知識利用的任務上具備更好的效果。
CodeWisdom開發(fā)了代碼大數(shù)據(jù)與智能化軟件開發(fā)研究成果展示與服務平臺。該平臺在GitHub等開源軟件社區(qū)的軟件代碼及軟件開發(fā)歷史、Stack Overflow等軟件開發(fā)問答網(wǎng)站的問答知識,以及API文檔等互聯(lián)網(wǎng)軟件開發(fā)資源的基礎上,利用程序分析、深度學習、自然語言處理、知識圖譜、數(shù)據(jù)挖掘等技術,充分發(fā)掘代碼大數(shù)據(jù)中蘊含的知識,通過檢索、推薦、問答、可視化等多種手段提供智能化軟件開發(fā)支持。
本文提出了軟件工程開源生態(tài)大數(shù)據(jù)體系,構建了自生長的采集處理框架和匯聚共享環(huán)境,并闡述了基于軟件工程開源生態(tài)大數(shù)據(jù)的智能化軟件開發(fā)的相關研究以及典型應用情況。面向智能化軟件開發(fā)的開源生態(tài)大數(shù)據(jù)研究具有很強的研究意義和實際價值,未來需要進行進一步的深入探索。