12.26 智能開發環境和軟件知識圖譜

Intelligent Development Environmentand Software Knowledge Graph

Zeqi Lin,Bing Xie,Yanzhen Zou, Junfeng Zhao,

Xuandong Li,Jun Wei, Hailong Sun,GangYin

1引用

Journal of Computer Science and Technology 32(2): 242–249 Mar. 2017 DOI 10.1007/s11390-017-1718-y.

2 摘要

軟件智能開發已成為軟件工程中最重要的研究趨勢之一。在文章中,作者首次提出了兩個關鍵概念-智能開發環境(IntelliDE)和軟件知識圖譜。 IntelliDE是一個生態系統,它可以對軟件大數據進行彙總,挖掘和分析,以在軟件開發的生命週期中提供智能幫助。 文章介紹IntelliDE的架構,並討論關鍵的研究問題和挑戰。 軟件知識圖譜是一個軟件知識表示和管理框架,在IntelliDE中起著重要的作用。 作者研究了它的概念,並介紹了一些具體的細節和示例來說明如何構建和利用它。

3 IntelliDE

智能開發環境(IntelliDE)是一個生態系統,其中對軟件大數據進行彙總,挖掘和分析,以在軟件開發的生命週期中提供智能幫助。

圖1展示了IntelliDE的架構,在這個生態系統中,軟件智能開發經歷了三個階段:數據聚合,知識獲取和智能協助。 從軟件大數據中提取軟件知識,然後將其用於提升軟件開發環境的智能水平。

智能開發環境和軟件知識圖譜

圖1


3.1 數據聚合

軟件大數據是Web規模,分佈式,多源,異構,動態且快速增長的。因此,IntelliDE需要一個超大規模,最新且易於訪問的軟件數據存儲庫,以解決軟件工程研究人員數據供應不足的問題。IntelliDE在數據聚合方面面臨三個主要的研究挑戰:數據收集,數據融合和數據更新。

1)數據收集。需要研究Internet上軟件大數據的形式和功能,以便IntelliDE能夠正確地感知它們,準確下載它們並將它們有機存儲。

2)數據融合。軟件的不同方面隱藏在多源和異構軟件數據中。因此,需要研究如何發現不同軟件數據源之間的關係,以便研究人員可以共同分析它們。

3)數據更新。由於軟件大數據是動態且快速增長的,因此使軟件數據存儲庫保持最新是一項重要的任務。因此,需要研究軟件大數據更新策略(例如,增量更新和部分更新)。18.3.2 知識獲取

複雜的軟件知識隱藏在大規模軟件數據中,軟件知識是為軟件開發提供智能幫助的關鍵。因此,IntelliDE需要知識獲取的支持,即需要研究如何從軟件數據存儲庫構建知識庫。IntelliDE在知識獲取方面面臨兩個主要的研究挑戰:知識提取以及知識表示和管理。

1)知識提取。 IntelliDE需要從軟件大數據中自動提取各種軟件知識。因此,需要研究各種軟件知識提取算法。這些提取算法主要基於程序分析,自然語言處理,數據挖掘,機器學習和信息檢索等。

2)知識表示與管理。為了確保智能開發環境可以有效,系統地利用知識,需要研究如何統一表示軟件知識,將其鏈接在一起並輕鬆查詢。

3.3 智能協助

在IntelliDE中,利用從軟件大數據中提取的軟件知識為軟件開發人員提供智能推薦服務和智能問答服務。 軟件開發人員關注軟件開發生命週期中不同階段的各種任務,為不同任務提供智能幫助需要不同的軟件知識和不同的知識處理策略。 因此,IntelliDE需要一系列智能開發服務,通過不同算法利用軟件知識來智能地解決不同的軟件工程任務。

IntelliDE中主要涉及的智能開發服務歸納為四個類別:

1)軟件構造。 IntelliDE需要為不同的軟件構建活動(例如,域分析,編程和軟件重構)提供智能開發服務。這些服務包括軟件項目知識的可視化和瀏覽,軟件文檔語義檢索,智能代碼合成和完成,軟件重構推薦等。

2)測試和驗證。 IntelliDE需要提供基於軟件大數據的軟件測試和驗證技術和方法,包括測試用例生成,通過邊界模型檢查來檢查代碼,識別靜態分析輸出的警告,調試軟件等。

3)團隊協作。 IntelliDE需要分析開發人員的技能特徵及其之間的潛在協作關係,利用軟件知識(尤其是歷史協作知識)來改進開發人員推薦,任務分配,資源推薦等。

4)操作,維護和發展。 IntelliDE需要解決整個軟件生命週期範圍內的問題,例如軟件開發與系統維護之間的碎片化,無法快速適應不斷變化的需求等相關智能開發服務,包括智能負載測試,異常分析,服務接口設計和進化等。

4軟件知識圖譜

4.1定義

知識圖譜是指由節點和有向邊組成的圖,用於表示領域知識。 軟件知識圖譜定義為表示軟件領域,項目和系統中的相關知識的圖。 在軟件知識圖譜中,節點表示軟件知識實體(例如,類,問題報告和業務概念),有向邊表示這些實體之間的各種關係(例如,方法調用和可追溯性鏈接)。 不同的節點和關係具有不同的屬性來描述其內部特徵。 例如,方法實體的屬性包括其名稱,返回類型,參數列表,訪問修飾符和描述。

軟件知識圖譜中的知識分為兩類:原始知識和派生知識。原始知識定義為通過數據結構解析添加到軟件知識圖譜中的軟件知識。例如,解析源代碼文件的抽象語法樹(AST),然後將代碼實體(例如類,方法和字段)及其之間的關係(例如方法調用和繼承層次結構)添加到軟件知識中。圖形。衍生知識定義為通過挖掘其中的現有軟件知識而添加到軟件知識圖譜中的軟件知識。例如,可以通過處理軟件文檔實體中的自然語言句子來提取業務概念實體。

根據定義,從軟件大數據中自動構建軟件知識圖譜。構建過程包括兩個階段:數據解析和知識提取。數據解析階段通過解析各種軟件數據將各種原始知識添加到軟件知識圖譜中。然後,知識提取階段通過各種知識提取算法將各種衍生知識添加到軟件知識圖譜中。

4.2 軟件知識圖譜在IntelliDE的使用

圖2展示了在IntelliDE中實現的軟件知識平臺圖構建平臺的邏輯概述。當前,該平臺專注於為給定的軟件項目構建軟件知識圖譜。

智能開發環境和軟件知識圖譜

圖2


1)數據解析

當軟件開發人員想要為軟件項目構建軟件知識圖譜時,他應通過其Web前端將相關的軟件數據添加到平臺中。所添加的軟件數據被允許是大規模的,多源的和異構的。

當前,該平臺支持的數據格式包括:1)源代碼文件(例如Java); 2)版本控制系統(例如VCS,SVN和Git); 3)郵件列表(例如mbox); 4)問題追蹤系統(例如JIRA和BugZilla); 5)Microsoft Office(例如DOC,DOCX)和PDF文檔; 6)html格式的教程,API文檔,用戶論壇帖子和博客; 7)在線社交問答集(StackOverflow XML轉儲)。

在軟件知識構建平臺中提供了一個數據解析框架。該框架提供了一個數據解析插件接口,以便可以開發和集成不同的數據解析插件

2)知識提取

在數據解析階段將原始知識平臺添加到軟件知識圖譜中之後,使用各種知識提取算法將派生知識添加到軟件知識圖譜中。 軟件知識圖譜構建平臺中存在一個知識提取框架。 它提供了一個知識提取界面,以便可以將不同的知識窗臺提取算法開發為插件並集成在一起。 當前,該平臺實現的知識提取插件包括:1)文檔到代碼的可追溯性鏈接恢復,2)文檔到文檔的詞法相似性估計,3)問題到提交的鏈接恢復,4)利益相關者識別,5)潛在的源代碼 主題建模,6)API使用量示例提取等。

3)存儲和查詢

平臺使用流行的圖形數據庫Neo4j來存儲軟件知識圖譜形。 Cypher是一種聲明性查詢語言,可用於表達和有效地查詢圖數據,用於查詢軟件知識圖譜。 除了Cypher,平臺還使用Neo4j提供的Java API來訪問軟件知識圖譜。 Cypher比Java API更為簡潔,但是Java API可以實現更復雜的圖形算法

5 應用

IntelliDE旨在為軟件開發提供智能推薦和智能問答的支持。

5.1軟件文本語義搜索

文本搜索被定義為一些自由文本用戶查詢與一組自由文本文檔的匹配。由於文本是不同抽象級別(例如標識符,註釋,文檔,問題報告,提交消息,開發人員討論和用戶通信)之間各種軟件工件之間信息表示的常見形式,因此文本搜索被廣泛用於軟件開發,維護和重複使用。但是,基於關鍵詞匹配的文本搜索技術存在無法理解自由文本的語義的問題。因此,作者提出了一種基於軟件知識圖譜的軟件文本語義搜索方法。允許開發人員輸入自由文本查詢。對於每個查詢,返回與其語義相關的文本項(即,軟件知識圖譜中的文本屬性)的已排序列表,對於列表中的每個文本項,將軟件知識圖譜的子圖可視化以演示如何文本項在語義上與查詢相關。

這種方法的基本思想是結構良好的源代碼知識可以用作挖掘文本項之間語義相關性的橋樑。該方法包括三個階段:

1)代碼位置。通過特徵定位技術將自由文本鏈接到軟件知識圖譜中的相關代碼實體。

2)實體匹配。基於圖嵌入技術TransR測量不同代碼實體之間的結構相似性。結構相似性會重新排列文本搜索結果的排名。

3)子圖提取。從軟件知識圖譜中提取一個子圖,以可視化查詢和相關文本項之間的關係。此階段是基於最小生成樹算法完成的.

5.2案例分析

為一個流行的開源軟件項目Apache Lucene構建了一個軟件知識圖譜,以舉例說明軟件文本語義搜索方法。相關數據包括:源代碼文件(800000+行),版本控制日誌(1.2+ GB),電子郵件(244 000+),發佈報告(5200+),官方網頁(500+),博客(1200) +),StackOverflow Q&A(問題-答案)對(3800+)等。作者從這些軟件數據中提取了64932個軟件知識實體和276 065個關係。然後,提供了一個軟件文本語義搜索引擎,並討論了一個語義搜索示例。

示例為用戶查詢為“如何使用IndexReader類的名稱獲取所有字段”。語義搜索結果如圖3所示。該圖的左側列出了與查詢在語義上相關的文本項的排序列表。對於排名列表中的每個文本項,語義搜索引擎都會為其演示軟件知識圖譜的子圖。例如,考慮排在第二位的文本項,它是“堆棧溢出”問答對。用戶可以單擊它,然後相應的子圖將顯示在語義搜索Web前端界面的右側,如圖3所示。在子圖中,“查詢”列中的節點代表查詢和其中的一些關鍵字。同樣,“文檔”列中的節點表示問答對和其中的一些關鍵字。 “代碼”列中顯示的子圖說明了通過軟件知識圖譜在語義上如何關聯不同的關鍵字。例如,由於類AtomicReader是IndexReader類的超類,因此查詢中出現的關鍵字“ IndexReader”與Q&A對中出現的關鍵字“ AtomicReader”在語義上相關。儘管查詢和Q&A對共享的關鍵字很少,但是軟件知識圖譜在語義上將它們橋接起來。因此,返回此問答對以幫助用戶.

智能開發環境和軟件知識圖譜

圖3


在這個例子中,可以看到軟件知識圖譜可以用來有效地幫助自由文本在軟件中站立。它表明,軟件文本語義搜索引擎是智能利用軟件知識圖譜譜以提高軟件開發活動的效率和質量的良好開端。

6總結

在文章中,作者首次提出了兩個關鍵概念-IntelliDE和軟件知識圖譜。 IntelliDE是一個生態系統,旨在將當前的集成開發環境(IDE)引入智能開發環境(IntelliDE),其主要研究問題和挑戰總結為:數據聚合,知識獲取和智能協助。軟件知識圖譜是軟件知識的表示和管理框架。它被提議作為IntelliDE中知識獲取的基礎結構。當前,作者的軟件知識圖譜不僅包含直接從數據源(例如源代碼文件和問題跟蹤系統)中提取的原始知識,還包含派生知識(例如可追溯性鏈接,API使用示例和潛在主題)。作者提供了一個軟件文本語義搜索引擎作為示例應用程序,以展示軟件知識圖譜如何在IntelliDE中提供語義理解和推理的支持。作者希望本文對將來軟件領域的智能問答有所貢獻。

致謝

本文由南京大學軟件學院2019級碩士萬家兵翻譯轉述。

感謝國家重點研發計劃(2018YFB1403400)和國家自然科學基金(61690200)支持!


分享到:


相關文章: