999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

數據驅動的軟件開發者智能協作技術

2021-01-21 04:30:04張建孟祥鑫孫海龍王旭劉旭東
大數據 2021年1期
關鍵詞:智能方法能力

張建,孟祥鑫,孫海龍,王旭,劉旭東

1. 軟件開發環境國家重點實驗室(北京航空航天大學),北京 100191;2. 北京航空航天大學大數據科學與腦機智能高精尖創新中心,北京 100191;3. 北京航空航天大學計算機學院,北京 100191

1 引言

軟件開發是以“開發者”為中心的智力密集型活動。盡管在模型驅動和人工智能等技術的推動下,部分開發任務可以實現一定程度的自動處理,但是由于軟件開發的高度復雜性,大多數開發任務尚難以自動完成,開發者依然是軟件開發過程中的核心要素。不僅如此,軟件開發的復雜性使得大部分軟件開發任務難以由單個開發人員獨立完成,通常需要開發者群體的共同協作。例如,據報道,Windows 7的開發涉及2 000多人共25個子團隊的協作。特別是,開源軟件、眾包等基于互聯網的軟件開發模式涉及的開發者數量龐大,且開發者相互之間了解有限,因此,建立開發者之間的高效協作成為更加迫切的需求。例如,開源社區GitHub擁有5 600多萬個注冊用戶,其中拉取請求(pull request)機制是GitHub倡導的社會化編程的核心內容,但如果沒有推薦技術的支持,一個拉取請求得到用戶評論的平均時間會延長12天[1];軟件開發問答社區Stack Overflow匯聚了1 300多萬個用戶,但仍然有超過620萬個問題(約占總問題的30%)未得到有效回答,其主要原因是缺乏針對問題進行回答者推薦的支持。總之,開發者群體在開發過程中的協作效率與效果在很大程度上影響著軟件的開發效率和質量。因此,研究開發者的能力、行為及其相互影響,并提供相應的協作支撐方法具有重要的意義。

圖靈獎獲得者Frederick P. Brooks在其《人月神話》一書中明確指出:簡單地基于“人月”來度量和計劃軟件開發任務存在不 足[2]。例如,軟件開發成本會隨著開發人數和時間的變化而發生變化,但進度卻可能變緩甚至停滯。這充分說明,僅考慮開發者數量和開發時間而忽視開發任務的復雜性以及開發者的協作效率是不可行的。實際上,廣義的開發者群體協作主要研究以開發者為中心的軟件開發過程中各種要素之間的連接、交互和作用機理,以提升人與人、人與工具、人與數據、數據與工具之間的協作效率,從而提高軟件開發的效率和質量。而狹義的群體協作主要指開發者群體之間的協作,一般體現在4個方面:直接的溝通與交流、開發任務的分配、開發結果的匯聚、開發資源的重用。在現有的軟件開發中,開發者之間的協作多依賴于開發者的主觀經驗進行,協作效率低,缺乏智能化的支持。例如,在開發者的溝通與交流方面,交流的對象往往局限于開發團隊內相互熟悉的人員,但是團隊外或者互聯網上可能存在大量潛在的協作者;在開發任務的分配上,一般由技術負責人依據其對開發人員和開發任務的主觀了解進行任務分配,缺乏客觀準確的任務分配方法;在開發結果的匯聚上,多采用版本管理工具進行結果的聚合,這些工具假定每個開發者的貢獻是可信的,在出現錯誤甚至惡意貢獻的情況下,需要復雜的回滾等操作;在開發資源的重用方面,往往局限于開發團隊內部積累的軟件資源庫,而缺乏對互聯網上更大范圍的資源的重用支持。因此,基于互聯網中的海量開發者相關數據,近年來大量的工作研究了面向特定開發任務的開發者推薦和開發資源推薦。一方面,開發者推薦面向開發過程中的不同階段,推薦合適的開發人員,包括代碼評審者推薦[3-4]、開發者以及開發團隊推薦[5-7]等;另一方面,開發資源推薦推薦的是開發過程中需要的軟件資源,包括應用程序接口(application programming interface,API)推薦[8]、代碼推薦[9-10]和代碼修復補丁推薦[11]等。然而,這類工作只關注與特定任務相關的歷史數據,忽略了對開發者及其協作關系的分析,使得推薦性能受到限制。此外,目前還沒有形成系統化的軟件開發者智能協作環境,不能很好地支撐高效的軟件協作開發。

針對軟件開發中開發者協作面臨的問題,本文以提高開發者的協作效率為目標,研究智能化的群體協作方法,并開發智能化的協作開發支撐環境。其核心是通過對互聯網及企業內等積累的軟件開發大數據進行分析,對開發者的能力特征和歷史協作行為等進行定性和定量的分析,進而面向特定的軟件開發任務提供智能化的協作支持。首先,收集和匯聚大量的軟件開發數據,學習開發者的能力特征,并挖掘其中隱含的協作關系,從而建立以開發者為中心的知識庫。第二,在此基礎上,一方面,根據開發者能力和行為等,突破開發者推薦和智能的任務分配關鍵技術,提高軟件開發中開發者“顯式協作”的效率;另一方面,基于開發者關聯關系進行分析,突破軟件資源(代碼、問答等)智能推薦和重用關鍵技術,以提高基于軟件資源的開發者“隱式協作”的效率。第三,在關鍵技術突破的基礎上,研發相應的智能協作工具集,面向開發人員建立開放敏捷的自組織式協作支撐環境,實現智能任務分配和資源推薦等。

總體來說,本文的主要貢獻如下:

● 提出了面向軟件開發的智能化群體協作的研究框架,給出了其中的核心研究問題;

● 提出了開發者能力模型與協作關系模型,并基于從互聯網上收集的軟件開發大數據構建了開發者知識圖譜;

● 在開發者知識圖譜的基礎上,針對開發者的智能推薦和開發資源推薦,提出了若干關鍵技術,并基于真實數據進行了實驗評估;

● 研制了一個智能協作開發支撐環境的系統,并開展了應用實踐。

2 智能協作框架

開發者協作一直是軟件開發中的關鍵問題。研究表明,在大的軟件開發項目中,開發人員花費70%以上的時間進行相互協作[12],同時也有研究表明,在有些大型軟件開發中,團隊性的活動占85%以上[13]。早期的軟件開發活動大多局限于企業內部,因此相關的研究工作主要集中于提供諸如版本控制等工具來實現開發者共同開發軟件。隨著互聯網的發展和成熟,尤其是在社交媒體與社交網絡(social network)[14]被廣泛應用到軟件開發中后,大量的研究開始集中于對基于互聯網軟件資源的開發者的協作分析[15-19]。

本文在現有研究的基礎上,提出了智能協作支撐環境的框架:收集軟件開發者協作開發產生的多源異構大數據,提取出其中蘊含的軟件開發知識,并以知識圖譜的形式進行組織,進一步借助于搜索、推薦等技術,將這些知識應用于軟件開發活動,從而實現軟件開發者的智能協作,最終為提高軟件開發效率與質量提供支撐。整體的研究框 架如圖1所示。

圖1 面向軟件開發的智能化群體協作框架

在該框架中,開發者相關知識是智能協作開發環境的關鍵所在。具體來講,圍繞開發者知識的提取與利用,需要解決4類關鍵問題。

● 數據源。從數據源增量爬取的數據是多源異構的,這種原始數據包含雜亂無章的信息。這些信息對于推薦或搜索層來說價值很低,不能被直接使用,需要對這些數據進行有效管理和知識提取。

● 開發者知識庫。考慮到上層的軟件開發者知識需求,知識提取的技術主要包括兩種:開發者能力評估技術和開發者關系挖掘技術。開發者能力評估技術的核心是建立定性定量相結合的多維開發者能力模型,以全面地刻畫開發者的能力;開發者關系挖掘技術則主要依賴協作關系模型,包含開發者-開發者關系以及開發者-軟件資源的關聯關系。于是構成了開發者能力、開發者關系以及開發資源的知識統一體,其表現形式為開發者知識圖譜。

● 推薦與搜索。構建知識庫的目標是將其中的知識應用到軟件開發過程中,具體的方式包括面向智能協作的知識搜索以及知識推薦。其中,搜索技術既包括開發者及其關聯資源的搜索,也包括開發者的能力以及開發者之間的關系搜索;智能推薦是借助于開發者能力模型知識和協作關系模型的開發者推薦與開發資源推薦技術。

● 工具集。其主要包括開發者推薦和開發資源推薦工具,同時,在開發者使用這些工具進行軟件開發的過程中,通過開發行為監控與感知,又能夠擴充或更新開發者知識圖譜中的知識。

在開發者知識的驅動下,這4種關鍵技術問題形成了閉環的智能協作環境,即數據獲取→開發者知識庫的構建→知識搜索與推薦→智能釋放工具集→開發者知識圖譜的更新。

因此,智能協作的核心是對開發者知識的利用。本文提出了一種新的智能協作分析方法,即開發者知識圖譜(developer knowledge graph)。該方法結合了開發者能力建模和開發者協作分析的方法,形成了一體化的開發者協作知識網絡,貫穿了整個智能協作環境。

3 開發者知識圖譜

開發者知識圖譜是將開發者作為知識結點、將開發者協作關系作為邊的知識圖譜。其中,結點描述了開發者的能力特征,邊描述了開發者之間的協作關系,因此定義開發者能力模型和開發者協作關系模型是構建知識圖譜的關鍵。在本文的工作中,為了覆蓋更多的開發知識,筆者也將開發資源結點以及開發者與開發資源的關系納入了知識圖譜。

3.1 開發者能力模型

現有的開發者能力評估方法存在一些不足[20-22]:第一,大多數的能力評估方法只注重對開發者的開發語言技能的抽取與評分,具有一定的片面性;第二,現有方法沒有綜合考慮開發者在開發活動中表現出的個人貢獻與團隊合作能力;第三,開發者的能力不僅體現在個人編寫的代碼中,也體現在不同的開發活動(如問答、測試等)中。因此,如何提供一種通用的模型來刻畫各類型開發者的能力是需要解決的一個難題。

針對以上問題,本文提出了一種新的開發者能力模型,從多個維度度量開發者的能 力,如圖2所示。

本文刻畫了開發者能力的3個主要方面,并且基于度量的靈活性,建立了開發者能力樹。具體來說,樹的根結點為開發者能力,其子樹分別為專業技能(skill)、貢獻度(contribution)以及協作度(collaboration)。本文對能力的刻畫以統計方法為基礎,該方法更適用于大型社區(如GitHub、Stack Overflow),且可解釋性較強。下面分別對這3個維度進行具體說明。

專業技能表示開發者掌握的開發技能,包括編程語言、技術框架以及操作系統等,主要考察開發者在開發活動中是否具備某項技能以及能否符合任務需求,因此,以key:value的形式表示。這里key和value分別以定性和定量的方式表示開發者的專業技能掌握程度。例如,對于掌握Java、Python語言以及Spring框架并且熟悉Linux的開發者,其專業技能可以表示為{Java:6,Python:4,Spring:6,Linux:2}集合的形式。在該集合中,key為Java的技能的評分為6,在某種評分體系下,表示開發者能夠較熟練地掌握Java語言,其他技能依此類推。關于技能的抽取和評分,可以集成已有的研究方法。本文針對活躍在不同社區的開發者構建了簡單易行的評分體系。例如,在Stack Overflow社區中,從開發者回答的問題中抽取出技能標簽集合,記為Γ。對于每 個技能標簽T∈Γ,找出開發者在該標簽下的回答集合A=∪αi,每個回答有對應的回答得分si,則開發者在該技能標簽T下的技能得分為類似地,在其他社區中也主要采用基于統計分析的方式對開發者技能進行評估。

貢獻度是指開發者在特定社區中對該社區作出的貢獻,主要考察開發者在社區中的活躍程度,同時也是對其熟練度的刻畫。這些貢獻指的是開發者的各項活動,如在GitHub開源社區中參與項目或提交代碼、在Stack Overflow問答社區中回答問題等。為了客觀地度量各個社區中開發者的貢獻,筆者首先抽取開發者不同貢獻的集合C={Ci|i=1,2,3,…,N}組成該開發者的貢獻的key集合,對于每一個key,即Ci,以屬于該key的活動集合的累加數目Vi組成在該key下的貢獻值。例如,開發者D在GitHub中提交了m次代碼,則其貢獻度表示為{commit:m},其他貢獻也是同樣的計算方式。

協作度指開發者在特定社區的開發活動中與其他開發者的關聯關系,用于考察開發者與其他開發者之間的團隊協作能力。開發者在特定社區中共同完成任務或者互相關注(follow),形成了諸多關系,主要包括社交關系與協作關系。例如,在GitHub中,開發者可以關注其他開發者,也可以被關注,因此產生了較為緊密的社交關系。由于每個社區的協作方式存在差異,在計算協作度時仍然按照統計協作頻度的方式對開發者的協作能力進行評價,以保持模型的通用性。

按照上述方法,能夠得到每個維度下的詳細評分。對于這些詳細評分,可按照該子樹的分支的權重進行加權計算得到整個維度的評分。以某個開發者的專業技能為例,假設其中包含N個技能標簽的得分,記為P2、P3。考慮不同的側重點,每個維度又可以有權重μ1、μ2、μ3。于是,該開發者的總得分為:對應的得分為按照某種任務需求,其技能權重為則其專業技能的整體得分為:

同樣,可得到貢獻度和協作度維度下

圖2 軟件開發者能力模型

這項得分給出了開發者的整體能力。

3.2 開發者協作關系模型

開發者協作關系分析與開發者能力評估同等重要,它們都是知識凝練的結果。從宏觀的角度來看,本文的開發者協作關系的表示方法與開發者網絡是相似的。然而,現有的研究提出的開發者網絡僅僅是開發者協作關系模型的一部分,因為其往往只分析了某一種協作關系,如共同修改某一文件等。另外,現有方法也未對協作關系強度進行度量。

本文提出了一種開發者協作模型,即抽象出的跨社區的協作關系模型,該模型在各個社區中均是適用的。其在知識圖譜中被表示為開發者結點之間的邊,這些邊包含的協 作關系如圖3所示。

按照協作關系類型,將所有的協作關系劃分為三大類,分別是社交關系、直接協作與間接協作。在每個類型下又包含了詳細的協作關系,將關系類型和關系強度作為協作關系的屬性。在開發者的開發活動中,社交關系是指開發者之間的在特定社區中的人際關系。雖然與開發活動并不直接相關,但是社交關系會對軟件開發效率產生重要影響。例如,社交關系又可以分為follow關系和in organization關系等,分別表示開發者之間的互相關注和開發者隸屬于同一個組織等。直接協作指開發者之間的直接交互關系,即兩個開發者面對同一任務需要緊密的溝通合作。例如開發者D1與開發者D2之間存在answer to和call API的關系,則分別表示D1回答了D2提出的問題、D1實現某些功能時調用了D2提供的接口,number表示這些協作的頻度。此外,開發者共同修改代碼文件、對同一代碼的開發和測試也屬于這種緊密型的協作關系,其他類似的協作關系還有很多。間接協作指開發者之間的間接交互關系。相對于直接協作來說,它是一種較弱的協作關系,但對于整體的開發任務也起到了一定的作用。例如開發者D1與開發者D2都回答了某個問題,或者都向某個開源項目提交了自己的代碼,則他們之間分別構成了co-answer和co-commit的關系。同樣,這里number用來表示間接協作的關系發生的頻度。類似的協作關系還有眾包社區中開發者共同參與某一項目中的不同任務等。

圖3 軟件開發者協 作關系模型

此外,筆者還提出了眾包社區中開發者能力演化模型[23]、基于知識追蹤的眾包軟件開發者能力評估方法[24]、基于程序代碼分析的開發者能力刻畫方法[25]、實體級的開發者情感分析方法[26]和跨社區的軟件開發者畫像方法[27]等。

4 基于開發者知識圖譜的智能推薦方法

在大規模軟件開發歷史數據的基礎上,借助對開發者進行建模分析形成的開發者知識圖譜,可提供開發者推薦與開發資源推薦兩種智能服務。

(1)開發者推薦

解決當前軟件團隊組織的相對固化、依靠主觀經驗、準確性不高問題的核心是根據任務特征實現開發者的動態檢索和智能推薦。因為開發任務具有自己的特性,開發者能力是復雜多維的,開發活動之間存在關聯依賴,所以開發者的智能推薦具有個性化需求、復雜度高的特點。本文將介紹面向編碼、測試以及軟件開發問答等任務的開發者智能推薦和任務分配方法,實現對軟件開發任務需求與開發者的智能匹配。基于開發者知識圖譜中的開發者能力建模與協作關系分析,結合傳統機器學習以及深度學習方法,筆者研究了開發者[28-31]、開發團隊[32]的智能推薦。例如,針對軟件問答社區中越來越多的問題無法得到及時回答導致的開發效率下降的情況,筆者提出了一種新的利用文本潛在隱含主題的回答者推薦方法[28],為了提高推薦的可信度和準確率,利用開發者之間的協作關系優化推薦效果,并以此為核心設計了一種有較高準確率和可用性的面向軟件開發的回答者推薦系統。這里僅以眾包軟件開發為代表性案例(見第4.1節和第4.2節),詳細闡述其中的開發者以及開發團隊智能推薦技術。

(2)開發資源推薦

重用軟件開發社區中積累的開發資源(如代碼、問答知識等)是提高軟件開發效率的重要途徑,但這些資源語義結構復雜、數據量大,使得已有的推薦方法準確度不高、性能較低,同時資源的檢索質量也較差,給開發者獲取開發資源帶來了很多困難。筆者通過檢索開發者知識圖譜中與開發者關聯的海量軟件資源數據,提出了對這些結構復雜的數據進行語義解析的方法,為開發者推薦在開發過程中所需要的資源,從而實現以開發資源為中心的隱式協作開發。具體來說,筆者研究了上下文感知的編程問答資源推薦[33]、面向高效編程的API使用模式推薦[34]、軟件問答社區中的Tag推薦[35]等技術。本文以面向高效編程的API使用模式推薦為例(見第4.3節),闡述開發者資源智能推薦技術。

4.1 面向眾包軟件開發的開發團隊推薦技術

近年來,基于互聯網的眾包軟件開發成為一種新型的軟件開發模式,為管理者提供了發布需求的平臺,也為開發者提供了自由選擇開發任務的機會。然而,相比于數據標注等傳統任務,軟件開發更加復雜,因此往往需要團隊協作。現有的團隊推薦算法僅適用于管理者將任務指派給特定開發團隊的場景,不適用于眾包軟件開發任務場景。本文提出了一種基于開發者隊友選擇偏好的團隊推薦算法[32],根據軟件開發任務的技能需求與人員需求,考慮各開發者的隊友選擇偏好,為開發者推薦高協作意愿團隊,以確保團隊的組建成功率。

本文的團隊推薦算法首先對開發者進行能力建模和親密度建模,然后對協作意愿影響因素建模,分析開發者隊友選擇偏好,基于開發者的隊友選擇偏好建模團隊協作意愿,設計一種基于貪心策略的近似算法,為開發者推薦高協作意愿的團隊,以確保團隊組建成功率,且適用于大規模眾包軟件開發平臺。本文個性化團隊推薦 算法框架如圖4所示,主要由以下3個模塊構成。

● 數據模型:該模塊對開發者進行能力建模和親密度建模。

● 團隊協作意愿建模:該模塊首先給出協作意愿影響因素的數學表示,然后分析開發者的隊友選擇偏好,基于開發者的隊友選擇偏好建模團隊協作意愿。

● 近似算法:該近似算法基于貪心策略為開發者推薦高協作意愿的團隊,適用于大規模眾包軟件開發平臺。

圖4 個性化團隊推薦算法框架

實驗 結果表明,本文算法推薦結果明顯優于親密度優先(closeness first,CF)、能力提升優先(expertise gain first,EGF)、能力差異優先(expertise difference first,EDF)3個對比方法,本文算法推薦出的開發團隊存在更高的團隊協作意愿,保證了開發者的團隊組建成功率。本文同時考慮了影響團隊協作意愿的3個因素,而CF、EGF、EDF方法僅考慮了其中一個因素。Optimal方法的推薦結果是理論最優解,該方法遍歷開發者集合以找到推薦的理論最優解,但其算法時間復雜度為O(nN)(其中,n表示眾包開發者集合大小,N表示團隊規模),復雜度高,當數據規模很大時,無法達到實時推薦的效果,不適用于大規模眾包軟件開發平臺。本文提出的近似算法在保證推薦有效性的同時,算法的時間復雜度為O(n·N)(其中,n表示眾包開發者集合大小,N表示團隊規模),確保了推薦的效率。

4.2 基于元學習的眾包軟件開發者推薦方法

盡管眾包軟件開發模式日益發展,但仍然存在一個典型的問題,即開發者與任務的匹配問題。對于具有嚴格的時間要求的軟件開發任務,如何借助歷史數據評估開發者的能力并依此推薦可靠的開發者,以保障開發效率和質量,成為研究的關鍵點。現在的眾包軟件開發者推薦方法僅能針對大數據集進行分析建模,缺乏對小數據集的研究。多標簽分類需要大量的數據才能訓練出一個非常優秀的模型,這限制了該方法在數據量不足時的應用。此外,基于用戶角色的數據角色預測方法需要使用用戶的歷史數據,小數據集上的用戶歷史顯然太少,這導致難以訓練模型。現有技術也缺乏針對冷啟動問題的解決方法。在多標簽形式的分類問題中,其基本假設為只有注冊次數高于一定閾值時才是可靠的,那些獲勝次數少的用戶會被過濾,導致有些用戶即使有能力完成任務也難以被算法推薦出來。而基于用戶角色的預測依舊需要大量的用戶歷史數據才能訓練分類器,對于那些缺乏相應歷史的用戶,則無法處理。

本研究針對眾包軟件開發者推薦的問題,提出了一種基于元學習的眾包軟件開發者推薦方法[31],從而保證軟件質量和 開發效率。如圖5所示,進行推薦時,所述方法中包含3個主要組件:用戶注冊行為預測器、用戶提交行為預測器、用戶獲勝行為預測器。這三者分別可以預測用戶的相應行為,用戶提交行為預測器基于用戶注冊后的情況進行預測,而用戶獲勝行為預測器基于用戶提交后的情況進行預測,用戶注冊行為預測器的預測沒有任何先決條件。依據用戶獲勝行為預測器預測出的獲勝概率p,用戶注冊行為預測器和用戶提交行為預測器會相繼對預測出的注冊概率和提交概率不在前Top_R、Top_S的用戶的獲勝概率進行修改,R、S為0到1的閾值,可以人為設定。如果把獲勝概率p設為0,此時直接結束模型對該輸入的預測行為。對于這3個組件,采用元模型進行構建,基礎學習模型使用Extrees、XGBoost、深度神經網絡(deep neural network,DNN)3個算法,并依據原學習方法進行分析算法選擇。

實驗結 果(見表1)表明,相比于協同過濾分類(collaborative filtering classification,CBC)、基于內容的推薦(CrowdRex)、動態眾包工人決策支持(dynamic crowd worker decision support,DCW-DS)的方法,本文提出的元學習模型(policy model)能夠在眾包軟件開發平臺Topcoder上獲得當前較高的推薦準確率。其中,Acc@3表示Top-3的推薦準確率,依此類推。MRR是國際上通用的對搜索/推薦算法進行評價的機制,即如果第一個結果即可匹配,則分數為1;第二個結果匹配,則分數為0.5;第n個結果匹配,則分數為1/n;如果沒有匹配的結果,則分數為0。單個方法在該數據集上的最終MRR分數為所有匹配分數的平均值。

圖5 眾包開發者推薦的整體流程

4.3 面向高效編程的API使用模式推薦技術

開發者在開發過程中往往需要尋求其他開發者的幫助。開發者或者僅與熟悉的開發者溝通,或者通過互聯網提出問題,兩者的效率和質量均得不到保障。為了提高隱式協作的效率,本文研究了API使用模式的智能推薦方法,即給定開發者需求,推薦其他開發者產生的相應的API使用模式代碼。在根據自然語言自動生成代碼的問題上,目前有工作嘗試生成完整代碼,或者生成API序列。前者生成代碼的質量往往比較低,很難達到直接可用的效果;而后者難以直接被用于補全源代碼。相比之下,包含API及其相關控制流語句的結構(稱之為API使用模式)有適中的復雜度,并且可以提供足夠的代碼骨架信息來幫助開發者實現各種各樣的功能。根據自然語言查詢生成相關的API使用模式,既可以達到比較好的生成效果,又可以有效地幫助開發者。

表1 研究方案在Topcoder數據集上 的性能對比

本文針對由自然語言查詢生成API使用模式的問題,提出了一種新的API使用模式推薦技術[34]。本研究采用編碼器-解碼器模型,設計了API-MCTree解碼器模塊,并對該模型設計了訓練和預測的算法。為了獲得<自然語言查詢,API使用模式>形式的數據對作為訓練數據,還需要獲得對應API使用模式的自然語言查詢。根據Javadoc說明指導,一個函數的注釋文檔的第一句可以作為當前函數的簡短描述,因此抽取其中的第一句作為自然語言查詢。為了在學習過程中更好地表示API使用模式,每個API使用模式可以被看成一個有約束的樹形結構。假設每種控制流結構都有一種不同的顏色,稱這種有約束的樹為API-MCTree(API multi-colored tree)。本研究基于一種帶注意力機制的編碼器-解碼器模型。編碼器部分是基于循環神經網絡模型的,具體使用的是長短期記憶(LSTM)單元,它可以以循環的方式一個接一個地處理自然語言的詞輸入,然后將自然語言序列編碼到一個固定大小的向量。解碼器根據自然語言向量c生成API-MCTree。對于API使用模式這種特殊的形式,本文設計了一種新型的解碼器,稱之為API-MCTree解碼器,如圖6所示。與序列解碼器不同,在時間步t,API-MCTree解碼器的隱藏狀態不僅依賴于上一個時間步t-1,也依賴于父親非終結符結點的信息。因而,在模型中采用了parent-feeding連接機制。在時間步t,將父親非終結符結點的隱藏狀態和輸入向量拼接在一起,然后把它們共同送入LSTM單元,基于輸出的隱藏狀態生成相應的樹形API使用模式。

圖6 API-MCTree解碼器

為了驗證本文設計的API使用模式生成方法的有效性,分析模型中設計的合理性并與其他相關方法進行對比,筆者設計了相關的實驗進行評估。與其他相關工作的評價方式類似,使用BLEU-4來衡量生成的API使用模式的質量,它可以量化候選序列和真實序列之間的相似度。筆者比較了本文方法和現有的4種方法。表2是這些方法在具體指標上的表現,可以看到,本文提出的方法擁有最高的BLEU分數(44.90%)和最高的測試準確度(37.45%)。通過和對比方法的比較可知,本文提出的方法有較好的效果,在自然語言查詢語義理解、API使用模式的語法和語義信息的捕捉和表達上具有不錯的能力。

5 大規模開發者智能協作支撐環境

如圖7所示,基于對開發者畫像、開發者推薦及開發資源推薦等關鍵技術的研究,筆者構建了大規模開發者智能協作支撐環境,自下而上可分為5個層次。

(1)數據源和數據管理

開發了面向GitHub、Stack Overflow、Topcoder、CSDN、GitLab平臺的分布式爬蟲工具,獲取了源代碼、代碼注釋、項目文檔、開發者行為、技術問答、技術博客等海量開發數據,并存儲到MySQL、MongoDB、Neo4j數據庫中(見表3)。

(2)開發者知識庫

定義了開發者知識庫的基本模型,從原始數據中提取開發結點與開發關系,以構建開發者知識庫。開發結點包括開發者以及開發者的技能、效率、情感等信息,還包括開發資源及其主題、類別、質量等信息;開發關系包含開發者間的社交、競爭、協作等關系信息。最終,建立起一個包含24億個結點、80.7億條邊的大規模開發者知識庫,其中包含4 397萬名開發者,數據總量達到13 TB(見表3)。

表2 本文方法與現有方法的性能比較

(3)智能推薦與搜索

圖7 大規模軟件開發者智能協作支撐環境體系結構

根據已構建的開發者知識庫,分別進行了開發者推薦、開發資源推薦、知識庫搜索3個方面的研究。對于開發者推薦,使用協同過濾、元學習模型、主題模型、協作關系感知等方法,對開發過程中不同階段任務的開發者分配模式進行了優化;對于開發資源推薦,一方面通過開發行為上下文感知方法來捕獲開發者的行為特征,另一方面通過神經網絡代碼表示與語法樹挖掘代碼語義等方法對相關代碼進行結構化表示,最后綜合兩者作為輸入特征,基于知識庫中的資源與歷史協作關系進行資源推薦;對于知識庫搜索,對開發者與開發資源潛在主題的提取技術進行了研究,并輔以多種維度的排序返回方式,提高了搜索的精度。

表3 系統中匯聚的主要軟件大數據情況

(4)工具集

基于以上智能推薦與搜索方法,開發了一系列智能開發工具集,包括開發者智能推薦工具集、開發者畫像工具集、開發資源推薦工具集、開發者搜索工具集和開發資源搜索工具集。

● 開發者智能推薦工具集包括代碼評審者、眾包開發者、問題(issue)解決者、問題回答者的推薦工具,這些工具能夠在開發過程中的不同階段優化開發者的分配策略,以提高協作開發的效率。

● 開發者畫像工具集包含能力定量評估工具、技能特征刻畫工具與跨社區畫像集成工具,能夠從社區貢獻、協作能力、技能偏好、代碼質量、開發者情感等維度對開發者能力做定性與定量分析,并且可以對同時使用多個開發平臺的開發者進行跨平臺開發能力的綜合展示。

● 開發資源推薦工具集包括Java編程助手工具與代碼自動生成工具,前者能夠根據開發者的開發行為特征推薦與代碼上下文相關的優質問答資源,后者能夠根據自然語言的需求描述,面向Java的JDK庫提供API調用序列的自動生成服務,幫助進行簡單的函數功能設計。

● 開發者搜索工具集提供了基于基本信息與技能信息的兩種搜索模式,支持跨開發平臺搜索。

● 開發資源搜索工具集提供了基于資源主題的搜索模式,并可以對搜索結果依據技能標簽進行聚類,幫助開發者更好地獲取所需的開發資源。

圖8 開發者能力畫像

圖9 開發者智能搜索

最終,筆者將上述工具集成在大規模開發者智能協作支撐環境iCoOper平臺上,并且提供REST API服務,圖8~圖10給出了該平臺的部分功能截圖。不同企業的開發管理平臺中的歷史開發數據具有結構一致性,因此iCoOper平臺具有良好的可擴展性,能夠容易地嵌入更多企業的開發環境中。系統已在東軟集團股份有限公司和萬達信息股份有限公司等進行部署,系統直接與企業內部代碼管理系統GitLab進行對接,自動獲取和分析企業內部開發人員的相關數據,構建開發者知識圖譜,并實現了對開發者的畫像、搜索和推薦等支持,在智慧城市、互聯網金融等應用項目的開發中進行了實際應用。

圖10 代碼評審者智能推薦

6 結束語

本文從軟件開發者的角度對軟件智能化開發進行了探索,介紹了開發者智能協作研究的思路和所開展的關鍵技術研究工作。首先,在對開發者能力評估模型和開發者協作關系模型進行了全面闡述后,提出了新的開發者協作分析方法,構建了開發者知識圖譜。進一步,針對開發過程中存在的問題,本文提出了面向開發任務的開發者以及開發資源智能推薦算法。以這些關鍵技術為基礎,構建了一體化的智能協作開發環境,以期為提高軟件開發效率和質量提供有效支撐。

在未來工作中,一方面,由于本文研究的智能協作開發環境以輔助開發者進行軟件開發為主,筆者將按照自頂向下的研究方法繼續完善智能協作環境,通過深入理解開發者在開發過程中的需求以及掌握這種需求的變化,提供更多的面向多種開發任務的開發者推薦與開發資源推薦服務,進一步改進智能推薦所依賴的開發者知識圖譜的開發者能力模型與開發者協作關系模型;另一方面,在本文提出的智能協作環境的基礎上,結合深度學習等方法研究并構建更加智能化的開發者服務環境。

猜你喜歡
智能方法能力
消防安全四個能力
智能前沿
文苑(2018年23期)2018-12-14 01:06:06
智能前沿
文苑(2018年19期)2018-11-09 01:30:14
智能前沿
文苑(2018年17期)2018-11-09 01:29:26
智能前沿
文苑(2018年21期)2018-11-09 01:22:32
大興學習之風 提升履職能力
人大建設(2018年6期)2018-08-16 07:23:10
你的換位思考能力如何
可能是方法不對
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
抄能力
主站蜘蛛池模板: 美女免费黄网站| a级毛片一区二区免费视频| 黄色网站不卡无码| 国产精品综合久久久| 91成人在线观看| 国内毛片视频| 国产性猛交XXXX免费看| 看av免费毛片手机播放| 91久久性奴调教国产免费| 日韩天堂视频| 伊人福利视频| 久久久久亚洲av成人网人人软件 | 亚洲V日韩V无码一区二区| jizz亚洲高清在线观看| 日本少妇又色又爽又高潮| 久久综合成人| 国产91线观看| 久久亚洲精少妇毛片午夜无码| 青青草原国产免费av观看| 亚洲欧美日韩高清综合678| 国产乱子伦无码精品小说| 91色综合综合热五月激情| 广东一级毛片| 91免费国产高清观看| 免费一级毛片完整版在线看| 日韩欧美高清视频| 日韩精品成人网页视频在线| a毛片在线播放| 国产在线第二页| 亚洲精品天堂在线观看| 91人妻日韩人妻无码专区精品| 亚洲午夜久久久精品电影院| 亚洲国产91人成在线| 天堂中文在线资源| 国产青榴视频| 国产免费黄| 久久人人97超碰人人澡爱香蕉 | 免费看一级毛片波多结衣| 性欧美在线| 国产精品中文免费福利| 日韩欧美国产三级| 欧美精品亚洲精品日韩专区va| 国产午夜精品一区二区三| 欧美国产成人在线| 国产精品无码制服丝袜| 欧美一级专区免费大片| 在线观看亚洲天堂| 精品夜恋影院亚洲欧洲| 日韩精品无码不卡无码| 亚洲三级片在线看| 成人福利视频网| 伊人色在线视频| 久久夜夜视频| 国产偷国产偷在线高清| 国产在线精品人成导航| 在线a视频免费观看| 成人免费黄色小视频| 国产在线一区二区视频| 玩两个丰满老熟女久久网| 91毛片网| 国产欧美日韩另类精彩视频| 欧美国产日韩在线观看| 亚洲人成亚洲精品| 国产成人精品免费av| 美女扒开下面流白浆在线试听| 亚洲国产综合第一精品小说| 精品超清无码视频在线观看| 国产亚洲高清在线精品99| 国产乱子伦视频在线播放| 中国成人在线视频| 一级毛片免费不卡在线视频| 免费激情网站| 午夜老司机永久免费看片| 国内精品免费| 五月婷婷精品| 激情乱人伦| а∨天堂一区中文字幕| 日本欧美一二三区色视频| 亚洲精品午夜天堂网页| 国产精品九九视频| 99国产精品国产高清一区二区| 伊人丁香五月天久久综合 |