亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于逆向工程的模型庫構造方法

文檔序號:6636930閱讀:443來源:國知局
一種基于逆向工程的模型庫構造方法
【專利摘要】本發(fā)明公開了一種基于逆向工程的模型庫構造方法。該方法包括如下步驟:通過網(wǎng)絡爬蟲從互聯(lián)網(wǎng)上抓取開源項目的源代碼;清理抓取的源代碼獲取有效的源代碼文件;對有效的源代碼文件逆向工程分析構建初始的UML類圖;對初始的UML類圖進行精化處理得到精簡的UML類圖;將精簡的UML類圖保存至圖數(shù)據(jù)庫中。本發(fā)明可以將互聯(lián)網(wǎng)上大量的源代碼轉(zhuǎn)換成為UML類圖模型,并將這些模型精化后存入到非關系數(shù)據(jù)庫,實現(xiàn)了模型庫的構造。通過對逆向工程的進一步精化使得本發(fā)明產(chǎn)生的類圖模型包含有更多的代碼結(jié)構信息,較其他方法更精確。
【專利說明】一種基于逆向工程的模型庫構造方法

【技術領域】
[0001] 本發(fā)明涉及計算機編程領域中的逆向工程,模型持久化工程。

【背景技術】
[0002] 隨著開源浪潮的推進,萬維網(wǎng)上涌現(xiàn)出了大量的開源代碼網(wǎng)站,如Google Code, Sourceforge, Github等等,在這些網(wǎng)站上我們可以輕易地獲得大量的開源源代碼。而海量 的開源代碼同時也帶來了代碼理解困難,代碼查詢困難,代碼存在異構性等一系列的難題, 這些難題直接影響到了我們對開源代碼的復用效率。
[0003] 軟件模型是以結(jié)構化的視圖來展現(xiàn)一個軟件系統(tǒng)。對于人的感知來說,圖形毫無 疑問的比文字便于理解,而且通過模型可以消除底層代碼存在的異構性,這樣便解決了代 碼理解的難題。同時由代碼產(chǎn)生的模型與源代碼之間存在著一一對應的關系,通過理解模 型,理解模型中的結(jié)構可以同時理解代碼中的結(jié)構,快速定位到代碼中的核心部分,有利于 工程人員對代碼進行分析和復用。遺憾的是現(xiàn)在萬維網(wǎng)上雖然存在著大量的源代碼,但是 卻缺乏一個有效的,可使用的模型庫。
[0004] 逆向工程(又稱反向工程),是一種技術過程,即對一項目標產(chǎn)品進行逆向分析及 研究,從而演繹并得出該產(chǎn)品的處理流程、組織結(jié)構、功能性能規(guī)格等設計要素,以制作出 功能相近,但又不完全一樣的產(chǎn)品。逆向工程源于商業(yè)及軍事領域中的硬件分析。其主要 目的是,在不能輕易獲得必要的生產(chǎn)信息下,直接從成品的分析,推導出產(chǎn)品的設計原理。
[0005] 逆向工程是一種分析目標系統(tǒng)的過程,其目的是識別出系統(tǒng)的各個組件以及它們 之間的關系,并以其它的形式或在較高的抽象層次上,重建系統(tǒng)的表征。軟件逆向工程也可 被視作"開發(fā)周期的逆行"。在此定義下,對一項軟件程序進行逆向工程,類似于逆行傳統(tǒng)瀑 布模型中的開發(fā)步驟,即把實現(xiàn)階段的輸出(即軟件程序)還原回在設計階段所做的構思。 軟件逆向工程僅僅是一種檢測或分析的過程,它并不會更改目標系統(tǒng)。


【發(fā)明內(nèi)容】

[0006] 本發(fā)明所要解決的問題是為互聯(lián)網(wǎng)上開源代碼構建模型,以方便軟件工程師分析 使用。
[0007] 為解決上述問題,本發(fā)明采用的方案如下:
[0008] -種基于逆向工程的模型庫構造方法,包括如下步驟:
[0009] Sl :通過網(wǎng)絡爬蟲從互聯(lián)網(wǎng)上抓取開源項目的源代碼;
[0010] S2 :清理抓取的源代碼獲取有效的源代碼文件;
[0011] S3 :對有效的源代碼文件逆向工程分析構建初始的UML類圖;
[0012] S4 :對初始的UML類圖進行精化處理得到精簡的UML類圖;
[0013] S5 :將精簡的UML類圖保存至圖數(shù)據(jù)庫中;
[0014] 其中,所述步驟S4包括如下步驟:
[0015] S41 :對源代碼進行靜態(tài)語義分析構建抽象語法樹;
[0016] S42 :從抽象語法樹中找出符合特定規(guī)則的結(jié)構,并從初始的UML類圖中提取符合 特定規(guī)則的結(jié)構所對應的模型元素;
[0017] S43 :將提取的模型元素組成精簡的UML類圖。
[0018] 進一步,所述步驟S3和步驟S4,步驟S4和步驟S5之間采用基于XMI格式的UML 模型交換文件作為中間媒體。
[0019] 進一步,所述圖數(shù)據(jù)庫為Ne〇4j數(shù)據(jù)庫。
[0020] 進一步,所述步驟S5包括如下步驟:
[0021] S51 :將精簡的UML類圖中的類元作為圖結(jié)構的節(jié)點存入圖數(shù)據(jù)庫;
[0022] S52:將精簡的UML類圖中的類元之間的關系作為圖結(jié)構的節(jié)點關系存入圖數(shù)據(jù) 庫。
[0023] 本發(fā)明的技術效果如下:
[0024] 1、本發(fā)明可以將互聯(lián)網(wǎng)上大量的源代碼轉(zhuǎn)換成為UML類圖模型,并將這些模型精 化后存入到非關系數(shù)據(jù)庫,實現(xiàn)了模型庫的構造。
[0025] 2、通過對逆向工程的進一步精化使得本發(fā)明產(chǎn)生的類圖模型包含有更多的代碼 結(jié)構信息,較其他方法更精確。

【具體實施方式】
[0026] 下面對本發(fā)明做進一步詳細說明。
[0027] 本發(fā)明的一種基于逆向工程的模型庫構造方法主要包括以下五個步驟:
[0028] Sl :通過網(wǎng)絡爬蟲從互聯(lián)網(wǎng)上抓取開源項目的源代碼;
[0029] S2 :清理抓取的源代碼獲取有效的源代碼文件;
[0030] S3 :對有效的源代碼文件逆向工程分析構建初始的UML類圖;
[0031] S4 :對初始的UML類圖進行精化處理得到精簡的UML類圖;
[0032] S5 :將精簡的UML類圖保存至圖數(shù)據(jù)庫中。
[0033] 本實施例具體通過編寫java代碼的程序?qū)崿F(xiàn)。首先步驟Sl中,通過編寫網(wǎng)絡爬 蟲程序?qū)崿F(xiàn)從萬維網(wǎng)中抓取開源項目的源代碼,主要包括兩個步驟:
[0034] S11 :使用j soup解析對應開源網(wǎng)站的網(wǎng)頁獲取項目地址;
[0035] S12 :使用項目地址對應協(xié)議的客戶端如git,svn,hg批量下載對應的源代碼。
[0036] 步驟Sll中,jsoup是一款Java的HTML解析器,提供了一套非常省力的API可直 接解析某個URL地址、HTML文本內(nèi)容。以google code為例說明運行方式。首先,人工獲 取并輸入google code的項目列表作為網(wǎng)絡爬蟲程序的起始網(wǎng)頁。然后網(wǎng)絡爬蟲程序自動 對爬取的內(nèi)容進行刪選,獲取每一個項目的主頁;再對每一個項目的主頁進行分析獲得每 一個項目源代碼的地址和項目的名稱;最后通過git,svn,hg等協(xié)議的批處理程序批量獲 取源代碼。
[0037] 步驟S2 :清理抓取的源代碼獲取有效的源代碼文件。由于步驟Sl抓取得到的源 代碼項目中包含有非代碼的文件,比如資源文件,而本發(fā)明構建UML類圖模型只需要分析 源代碼文件,因此需要做一步清理的工作,留下有效的源代碼文件。例如在java源代碼項 目中,只需要留下帶有java后綴的源代碼文件即可,其他文件可以刪除。
[0038] 步驟S3 :對有效的源代碼文件逆向工程分析構建初始的UML類圖。本步驟的輸 入是步驟S2得到的有效的源代碼文件,輸出為UML類圖。本步驟具體通過ArgoUML實現(xiàn)。 ArgoUML是一款開源的UML工具,可以對源代碼逆向工程分析生成UML類圖。具體如下: [0039] S31 :使用ArgoUML對源代碼進行解析,構造 UML類圖;
[0040] S32 :使用ArgoUML將構造的UML類圖保存為基于XMI格式的UML模型交換文件。
[0041] 也即,本步驟輸出的UML類圖通過保存于基于XMI格式的UML模型交換文件中。本 發(fā)明中步驟S3和步驟S4,步驟S4和步驟S5之間采用基于XMI格式的UML模型交換文件 作為中間媒體的意思是:步驟S3輸出的初始的UML類圖保存于基于XMI格式的UML模型交 換文件中,保存在基于XMI格式的UML模型交換文件中的初始的UML類圖作為步驟S4的輸 入;步驟S4輸出的精簡的UML類圖保存于基于XMI格式的UML模型交換文件中,保存在基 于XMI格式的UML模型交換文件中的精簡的UML類圖作為步驟S5的輸入。
[0042] 步驟S4 :對初始的UML類圖進行精化處理得到精簡的UML類圖。該步驟包括以下 三個子步驟:
[0043] S41 :對源代碼進行靜態(tài)語義分析構建抽象語法樹;
[0044] S42 :從抽象語法樹中找出符合特定規(guī)則的結(jié)構,并從初始的UML類圖中提取符合 特定規(guī)則的結(jié)構所對應的模型元素;
[0045] S43 :將提取的模型元素組成精簡的UML類圖。
[0046] 以java代碼為例,步驟S41中,使用java語法分析工具分析jdt分析源代碼得到 java的AST語法樹。步驟S42中,從抽象語法樹中找出符合特定規(guī)則的結(jié)構采用如下表1 的匹配規(guī)則,從初始的UML類圖中提取符合表1匹配規(guī)則的模型元素,然后將提取的模型元 素組成精簡的UML類圖。
[0047]

【權利要求】
1. 一種基于逆向工程的模型庫構造方法,其特征在于,包括如下步驟: 51 :通過網(wǎng)絡爬蟲從互聯(lián)網(wǎng)上抓取開源項目的源代碼; 52 :清理抓取的源代碼獲取有效的源代碼文件; 53 :對有效的源代碼文件逆向工程分析構建初始的UML類圖; 54 :對初始的UML類圖進行精化處理得到精簡的UML類圖; 55 :將精簡的UML類圖保存至圖數(shù)據(jù)庫中; 其中,所述步驟S4包括如下步驟: 541 :對源代碼進行靜態(tài)語義分析構建抽象語法樹; 542 :從抽象語法樹中找出符合特定規(guī)則的結(jié)構,并從初始的UML類圖中提取符合特定 規(guī)則的結(jié)構所對應的模型元素; 543 :將提取的模型元素組成精簡的UML類圖。
2. 如權利要求1所述的基于逆向工程的模型庫構造方法,其特征在于,所述步驟S3和 步驟S4,步驟S4和步驟S5之間采用基于XMI格式的UML模型交換文件作為中間媒體。
3. 如權利要求1所述的基于逆向工程的模型庫構造方法,其特征在于,所述圖數(shù)據(jù)庫 為Neo4j數(shù)據(jù)庫。
4. 如權利要求1所述的基于逆向工程的模型庫構造方法,其特征在于,所述步驟S5包 括如下步驟: S51 :將精簡的UML類圖中的類元作為圖結(jié)構的節(jié)點存入圖數(shù)據(jù)庫; S52:將精簡的UML類圖中的類元之間的關系作為圖結(jié)構中的節(jié)點關系存入圖數(shù)據(jù)庫。
【文檔編號】G06F17/30GK104391706SQ201410720708
【公開日】2015年3月4日 申請日期:2014年12月2日 優(yōu)先權日:2014年12月2日
【發(fā)明者】張?zhí)? 許涵斌, 李宣東 申請人:南京大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1