一種基于圖結構的Java代碼存取方法
本文關鍵詞:一種基于圖結構的Java代碼存取方法,由筆耕文化傳播整理發(fā)布。
【摘要】:隨著互聯網的普及與流行,以及“開放共享”觀念的深入人心,越來越多的人愿意在互聯網上分享他們的代碼。目前,互聯網上的開源代碼量正以指數規(guī)模增長,如果這些代碼能被很好地利用,軟件工程的很多領域將會因此受益。然而,目前主流的代碼庫都是以文本方式存放代碼,忽略了代碼的內部結構,查找代碼的方式也僅僅局限于關鍵字搜索,這不足以使用戶充分理解這些代碼。代碼查詢是幫助理解代碼的一種有效方法。代碼查詢技術通常包括三個步驟:信息抽取、查詢、以及結果顯示。本文提出了一種新的代碼存儲方法,這種方法以圖為基本結構,存儲于圖數據庫Neo4j中,并適用于目前非常主流的Java語言程序。本文主要關注于代碼查詢的信息抽取步驟,同時本文也涉及部分與查詢和結果顯示相關的內容。本文方法保證了足夠細的代碼存儲粒度,結合Neo4j提供的查詢語言Cypher,用戶可以方便地設計并實現查詢算法。本文的主要貢獻如下:本文設計了一種針對Java語言程序的基本存儲模式。這個存儲模式以語法樹為基礎;為類型、方法、變量引入全局唯一的鍵節(jié)點,解決了同名問題;合并冗余圖節(jié)點,縮小了圖數據的規(guī)模。同時,本文還提出了一種增量式的擴展存儲模式的方法,并實現了幾種常用的擴展:調用、范化實現、關聯。本文提供了一系列原型工具來支持對Java代碼的存儲和查詢。本文實現了代碼存儲插件。它支持自動化的Java代碼向基本存儲模式的轉換。同時,這個工具還支持對基本存儲模式的相關擴展。本文還實現了數據庫查詢及顯示插件。查詢插件的主要功能是提供Cypher語言的編輯環(huán)境。顯示插件的主要功能是支持圖形化的查詢結果顯示。本文對九個大規(guī)模開源Java工程進行了實驗,并評估了Neo4j數據庫的代碼存儲能力、以及代碼轉換為基本存儲模式后需要的存儲空間。本文還給出了幾個實際查詢的示例來說明本文工作的廣泛應用場景,包括度量指標的計算、目標類型的查找、以及工程中的循環(huán)調用情況。
【關鍵詞】:Neo4j 代碼存儲 代碼查詢 開源 Java
【學位授予單位】:南京大學
【學位級別】:碩士
【學位授予年份】:2016
【分類號】:TP312.2
【目錄】:
- 摘要4-6
- Abstract6-14
- 第一章 緒論14-20
- 1.1 研究背景與動機14-15
- 1.2 本文工作15-17
- 1.3 論文結構安排17-20
- 第二章 背景與相關工作20-32
- 2.1 代碼查詢技術20-24
- 2.1.1 信息抽取20-22
- 2.1.2 查詢22-24
- 2.2 Neo4j數據庫24-27
- 2.2.1 圖數據24-26
- 2.2.2 Cypher26-27
- 2.3 Eclipse插件與Eclipse JDT27-30
- 2.3.1 Eclipse插件27-28
- 2.3.2 Eclipse JDT28-30
- 2.4 本章小節(jié)30-32
- 第三章 基本存儲模式與存儲模式擴展32-46
- 3.1 基本存儲模式32-40
- 3.1.1 語法樹33-35
- 3.1.2 鍵值的引入35-37
- 3.1.3 圖節(jié)點的合并37-40
- 3.2 存儲模式擴展40-45
- 3.2.1 調用關系41-42
- 3.2.2 范化實現關聯42-45
- 3.3 本章小節(jié)45-46
- 第四章 Java代碼存取方法的實現46-58
- 4.1 語法樹向基本存儲模式的轉換46-52
- 4.1.1 語法樹遍歷框架46-47
- 4.1.2 圖節(jié)點存儲47-50
- 4.1.3 工程存儲50-52
- 4.2 查詢語句實現的存儲模式擴展52-54
- 4.3 查詢語言54-56
- 4.4 本章小結56-58
- 第五章 工具平臺與實驗評估58-70
- 5.1 工具平臺58-59
- 5.2 工具演示59-62
- 5.2.1 代碼存儲插件59-61
- 5.2.2 代碼查詢和結果顯示插件61-62
- 5.3 實驗評估62-69
- 5.3.1 實驗對象62-63
- 5.3.2 Neo4j數據庫的存儲能力評估63-66
- 5.3.3 存儲空間消耗評估66-69
- 5.4 本章總結69-70
- 第六章 實例應用70-76
- 6.1 度量指標計算70-72
- 6.1.1 繼承深度計算70-71
- 6.1.2 直接子類數計算71-72
- 6.2 實例2:所有只有static final屬性的類或接口72-73
- 6.3 實例3:循環(huán)調用73-75
- 6.4 本章小節(jié)75-76
- 第七章 總結與展望76-78
- 7.1 總結76
- 7.2 展望76-78
- 參考文獻78-84
- 附錄84-92
- 攻讀碩士學位期間的科研成果92-94
- 致謝94-95
【相似文獻】
中國期刊全文數據庫 前10條
1 ;書摘[J];程序員;2002年03期
2 楊浪;張濤川;;代碼復用中的方法研究與應用[J];電腦知識與技術;2009年12期
3 魏峰;李銀鎖;;C#調用非托管代碼[J];電腦編程技巧與維護;2013年04期
4 簡勇;;團隊開發(fā)中的代碼復用淺談[J];常州信息職業(yè)技術學院學報;2007年01期
5 陳林博;江建慧;張丹青;;利用返回地址保護機制防御代碼復用類攻擊[J];計算機科學;2013年09期
6 郭穎;陳峰宏;周明輝;;大規(guī)模代碼克隆的檢測方法[J];計算機科學與探索;2014年04期
7 李天盟;劉鳳芹;;TML語言簡介[J];軟件;2013年11期
8 張藍博;張善從;陳蔚薇;;嵌入式系統(tǒng)中的代碼動態(tài)鏈接模型[J];計算機工程與設計;2008年16期
9 李葆華,霍有亮;適用于面向對象范型的代碼復用技術[J];西北大學學報(自然科學版);2000年01期
10 何淼;崔松健;;一種基于隨機文件的C#與非托管C代碼交互模式[J];信息化研究;2011年02期
中國博士學位論文全文數據庫 前1條
1 陳平;代碼復用攻擊與防御技術研究[D];南京大學;2012年
中國碩士學位論文全文數據庫 前7條
1 于浩;Android平臺JNI代碼單元測試方法研究[D];西南交通大學;2015年
2 莊軼;繞開細粒度地址隨機化的實時代碼復用攻擊框架[D];南京大學;2014年
3 朱曉倩;一種基于圖結構的Java代碼存取方法[D];南京大學;2016年
4 劉超;基于動態(tài)二進制翻譯框架的代碼復用攻擊檢測與防御[D];湖南大學;2012年
5 李建忠;重復代碼檢測技術的研究[D];汕頭大學;2005年
6 邱慧風;基于關系復用的代碼構建自動化的研究[D];南昌大學;2012年
7 周波;用代碼緩存復用技術提升Android即時編譯器效率[D];復旦大學;2012年
本文關鍵詞:一種基于圖結構的Java代碼存取方法,,由筆耕文化傳播整理發(fā)布。
本文編號:431411
本文鏈接:http://www.sikaile.net/kejilunwen/ruanjiangongchenglunwen/431411.html