欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于逆向工程的模型庫(kù)構(gòu)造方法

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

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

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


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

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

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

【權(quán)利要求】
1. 一種基于逆向工程的模型庫(kù)構(gòu)造方法,其特征在于,包括如下步驟: 51 :通過(guò)網(wǎng)絡(luò)爬蟲(chóng)從互聯(lián)網(wǎng)上抓取開(kāi)源項(xiàng)目的源代碼; 52 :清理抓取的源代碼獲取有效的源代碼文件; 53 :對(duì)有效的源代碼文件逆向工程分析構(gòu)建初始的UML類圖; 54 :對(duì)初始的UML類圖進(jìn)行精化處理得到精簡(jiǎn)的UML類圖; 55 :將精簡(jiǎn)的UML類圖保存至圖數(shù)據(jù)庫(kù)中; 其中,所述步驟S4包括如下步驟: 541 :對(duì)源代碼進(jìn)行靜態(tài)語(yǔ)義分析構(gòu)建抽象語(yǔ)法樹(shù); 542 :從抽象語(yǔ)法樹(shù)中找出符合特定規(guī)則的結(jié)構(gòu),并從初始的UML類圖中提取符合特定 規(guī)則的結(jié)構(gòu)所對(duì)應(yīng)的模型元素; 543 :將提取的模型元素組成精簡(jiǎn)的UML類圖。
2. 如權(quán)利要求1所述的基于逆向工程的模型庫(kù)構(gòu)造方法,其特征在于,所述步驟S3和 步驟S4,步驟S4和步驟S5之間采用基于XMI格式的UML模型交換文件作為中間媒體。
3. 如權(quán)利要求1所述的基于逆向工程的模型庫(kù)構(gòu)造方法,其特征在于,所述圖數(shù)據(jù)庫(kù) 為Neo4j數(shù)據(jù)庫(kù)。
4. 如權(quán)利要求1所述的基于逆向工程的模型庫(kù)構(gòu)造方法,其特征在于,所述步驟S5包 括如下步驟: S51 :將精簡(jiǎn)的UML類圖中的類元作為圖結(jié)構(gòu)的節(jié)點(diǎn)存入圖數(shù)據(jù)庫(kù); S52:將精簡(jiǎn)的UML類圖中的類元之間的關(guān)系作為圖結(jié)構(gòu)中的節(jié)點(diǎn)關(guān)系存入圖數(shù)據(jù)庫(kù)。
【文檔編號(hào)】G06F17/30GK104391706SQ201410720708
【公開(kāi)日】2015年3月4日 申請(qǐng)日期:2014年12月2日 優(yōu)先權(quán)日:2014年12月2日
【發(fā)明者】張?zhí)? 許涵斌, 李宣東 申請(qǐng)人:南京大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
潢川县| 西和县| 兴仁县| 宝山区| 景宁| 津南区| 香港 | 刚察县| 新昌县| 桦甸市| 黎川县| 开封县| 邓州市| 剑川县| 金秀| 眉山市| 文山县| 大渡口区| 永新县| 永康市| 泌阳县| 江孜县| 锦州市| 临沭县| 红河县| 叙永县| 洪雅县| 梨树县| 班戈县| 泰安市| 呼玛县| 廊坊市| 聂拉木县| 商洛市| 汨罗市| 湖州市| 巴中市| 克拉玛依市| 安西县| 万荣县| 平定县|