專利名稱:一種基于系統(tǒng)源代碼獲取組件調(diào)用關系的方法
技術領域:
本發(fā)明涉及使用Java技術掃描JSP和C++源碼文件,通過模式匹配獲取組件間調(diào)用關系。
背景技術:
對基于組件開發(fā) 的系統(tǒng),需要對組件間調(diào)用關系進行管理,以便于組件的復用和系統(tǒng)的維護。目前,主要是在系統(tǒng)的設計開發(fā)階段,由專門的人員使用Excel來管理。使用Excel管理組件間調(diào)用關系雖然操作簡單,但它存在以下問題
手工維護,耗費人力,效率低;
不能確保Excel維護的內(nèi)容和系統(tǒng)一致;
由于種種原因(比如,Excel文件損壞),重新獲取系統(tǒng)中組件調(diào)用關系比較困難。鑒于通過Excel手工維護系統(tǒng)中組件調(diào)用關系存在的問題,本發(fā)明擬實現(xiàn)兩個軟件方法,分別掃描系統(tǒng)的JSP和C++源碼文件,隨時獲取最新的組件調(diào)用關系。
發(fā)明內(nèi)容
本發(fā)明主要采用以下技術方案來解決
本發(fā)明提供了一種基于系統(tǒng)源代碼獲取組件調(diào)用關系的方法,特征在于,
獲取所有源代碼文件列表;過濾無效文件,獲取有效文件列表;掃描有效文件,獲取組件調(diào)用關系列表。其中掃描有效文件,獲取組件調(diào)用關系列表還包括掃描JSP文件和CPP文件。其中掃描JSP文件包括
根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表;
依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配;
處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表。其中依次處理每一有效行,將有效行的內(nèi)容分別和被調(diào)用組件名稱出現(xiàn)的規(guī)則以及JSP路徑出現(xiàn)的規(guī)則匹配包括
當前行匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用組件名稱,從輸入?yún)?shù)文件路徑中獲取調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表;和/或
當前行匹配JSP路徑出現(xiàn)的規(guī)則判斷包含的JSP文件名稱是否在輸入?yún)?shù)有效文件列表中,若在,并且包含的JSP文件和當前處理的文件不在同一目錄,則將有效文件列表、包含的JSP文件的名稱和路徑作為輸入?yún)?shù)遞歸執(zhí)行返回最終得到的組件調(diào)用關系列表。其中獲取所有源代碼文件列表包括輸入包含源代碼文件的目錄路徑;輸出目錄及其子目錄下的所有文件列表,列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成。其中過濾無效文件,獲取有效文件列表包括輸入包含源代碼文件的目錄路徑;輸出包含組件調(diào)用關系的文件列表,列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成。其中掃描CPP文件包括
根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表; 依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配;
處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表。其中依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配進一步包括
匹配調(diào)用組件名稱出現(xiàn)的規(guī)則獲取調(diào)用組件名稱;匹配組件內(nèi)容開始標識規(guī)則設置組件標志為true,用于表示在結(jié)束標識出現(xiàn)之前匹配到的被調(diào)用組件對應的調(diào)用組件均為之前匹配到的調(diào)用組件;匹配組件內(nèi)容結(jié)束標識規(guī)則設置組件標志為false,并將調(diào)用組件名稱置為空;匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表。
圖I為本發(fā)明提供的用于掃描系統(tǒng)JSP源碼文件和C++源碼文件的方法的流程 圖2為本發(fā)明提供的掃描JSP文件的方法步驟的流程 圖3為本發(fā)明提供的掃描CPP文件的方法步驟的流程圖。
具體實施例方式本發(fā)明的具體技術方案參考圖1-3采取以下步驟進行
用于掃描系統(tǒng)JSP源碼文件和C++源碼文件的軟件方法的流程均如圖I所示。流程主要由三個步驟組成
步驟一、獲取所有源代碼文件列表;
輸入包含源代碼文件的目錄路徑
輸出目錄及其子目錄下的所有文件列表,列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成
步驟二、過濾無效文件,獲取有效文件列表;
輸入步驟一的輸出
輸出包含組件調(diào)用關系的文件列表(CPP文件和JSP文件),列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成步驟三、掃描有效文件,獲取組件調(diào)用關系列表
輸入有效文件名稱和路徑,對于JSP文件掃描,還需輸入步驟二中輸出的有效文件列表
輸出系統(tǒng)中組件調(diào)用關系列表,列表中每個節(jié)點由調(diào)用組件名稱和被調(diào)用組件名稱兩部分信息組成
本發(fā)明的創(chuàng)新點是步驟三,掃描JSP文件和CPP文件的軟件
方法在步驟三的技術方案分別如下
掃描JSP文件的方法步驟三技術方案流程圖如2所示。 具體步驟為 1、根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表
2、依次處理每一有效行,將有效行的內(nèi)容分別和被調(diào)用組件名稱出現(xiàn)的規(guī)則以及JSP路徑出現(xiàn)的規(guī)則匹配
O當前行匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用
組件名稱,從輸入?yún)?shù)文件路徑中獲取調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表
2)當前行匹配JSP路徑出現(xiàn)的規(guī)則判斷包含的JSP文件名稱是否在輸入?yún)?shù)有效文件列表中,若在,并且包含的JSP文件和當前處理的文件不在同一目錄,則將有效文件列表、包含的JSP文件的名稱和路徑作為輸入?yún)?shù)遞歸執(zhí)行步驟三
3、處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表
掃描CPP文件的軟件方法步驟三技術方案流程圖如3所示
具體步驟為
1、根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表
2、依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配
O匹配調(diào)用組件名稱出現(xiàn)的規(guī)則獲取調(diào)用組件名稱
備注調(diào)用組件其實就是一個C++函數(shù),使用正則表達式匹配出函數(shù)聲明行,從匹配到的函數(shù)聲明行中截取函數(shù)名稱,即為調(diào)用組件名稱
2)匹配組件內(nèi)容開始標識規(guī)則設置組件標志為true,
用于表示在結(jié)束標識出現(xiàn)之前匹配到的被調(diào)用組件對應的調(diào)用組件均為之前匹配到的調(diào)用組件
備注匹配組件內(nèi)容開始標識,就是匹配出函數(shù)聲明后緊跟著的大括號“ {”
3)匹配組件內(nèi)容結(jié)束標識規(guī)則設置組件標志為false,并將調(diào)用組件名稱置為空
備注匹配組件內(nèi)容結(jié)束標識,就是判斷出標識函數(shù)結(jié)束的大括號“} ”
4)匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表;
備注使用正則表達式,匹配一個函數(shù)內(nèi)容中調(diào)用其他函數(shù)的語句,從該語句中提取出來的被調(diào)用函數(shù)的名稱,即為被調(diào)用組件名稱
3、處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表
備注if匹配不成功,也就是說當前行,不是函數(shù)聲明行,也不是函數(shù)調(diào)用行,也不是標識函數(shù)內(nèi)容開始的包含“ {”的行,也不是標識函數(shù)內(nèi)容結(jié)束的包含“} ”的行,直接跳過,繼續(xù)處理下一行即可。本發(fā)明的實施步驟如下
在系統(tǒng)源代碼所在主機上新建一個Java工程;
將本發(fā)明的兩個軟件方法分別實現(xiàn)為一個Java類,軟件方法的各步驟實現(xiàn)為此java類的成員方法,另實現(xiàn)一個以源碼路徑作為參數(shù),依次調(diào)用各步驟對應方法的成員方法定義一個包含main方法的Java類,main方法接收來自控制臺的輸入(源碼文件類型和源碼文件路徑),如果源碼文件類型是JSP,以源碼文件路徑作為參數(shù)調(diào)用掃描JSP文件的軟件方法對應Java類的成員方法;如果源碼文件類型是CPP,以源碼文件路徑作為參數(shù)調(diào)用掃描CPP文件的軟件方法對應Java類的成員方法。運行java工程,從控制臺輸入源碼文件類型(CPP或JSP)和源碼文件所在路徑即可。相對于使用Excel管理組件調(diào)用關系,本發(fā)明主要有以下優(yōu)點
節(jié)省了人力,不需要專門的人員手工維護組件調(diào)用關系;
能隨時掃描系統(tǒng)最新源代碼文件,保證了維護的組件調(diào)用關系和系統(tǒng)的一致性; 解決了因為Excel存儲問題,使得組件調(diào)用關系失效,而重新獲取組件調(diào)用關系比較困難的問題。
權(quán)利要求
1.一種基于系統(tǒng)源代碼獲取組件調(diào)用關系的方法,特征在于, 獲取所有源代碼文件列表; 過濾無效文件,獲取有效文件列表; 掃描有效文件,獲取組件調(diào)用關系列表。
2.如權(quán)利要求I所述的方法,其中掃描有效文件,獲取組件調(diào)用關系列表還包括掃描JSP文件和CPP文件。
3.如權(quán)利要求2所述的方法,其中掃描JSP文件包括 根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表; 依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配; 處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表。
4.如權(quán)利要求3所述的方法,其中依次處理每一有效行,將有效行的內(nèi)容分別和被調(diào)用組件名稱出現(xiàn)的規(guī)則以及JSP路徑出現(xiàn)的規(guī)則匹配包括 當前行匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用組件名稱,從輸入?yún)?shù)文件路徑中獲取調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表;和/或 當前行匹配JSP路徑出現(xiàn)的規(guī)則判斷包含的JSP文件名稱是否在輸入?yún)?shù)有效文件列表中,若在,并且包含的JSP文件和當前處理的文件不在同一目錄,則將有效文件列表、包含的JSP文件的名稱和路徑作為輸入?yún)?shù)遞歸執(zhí)行返回最終得到的組件調(diào)用關系列表。
5.如權(quán)利要求I所述的方法,其中獲取所有源代碼文件列表包括 輸入包含源代碼文件的目錄路徑;輸出目錄及其子目錄下的所有文件列表,列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成。
6.如權(quán)利要求I所述的方法,其中過濾無效文件,獲取有效文件列表包括 輸入包含源代碼文件的目錄路徑;輸出包含組件調(diào)用關系的文件列表,列表中的每個節(jié)點由文件名稱和文件的直接上級目錄路徑兩部分信息組成。
7.如權(quán)利要求2所述的方法,其中掃描CPP文件包括 根據(jù)輸入?yún)?shù)中文件路徑和文件名稱,打開文件,讀取文件,過濾掉注釋行和空白行,獲取有效行列表; 依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配; 處理完文件的所有有效行后,返回最終得到的組件調(diào)用關系列表。
8.如權(quán)利要求7所述的方法,其中依次處理每一有效行,將有效行的內(nèi)容分別和調(diào)用組件名稱出現(xiàn)的規(guī)則、被調(diào)用組件名稱出現(xiàn)的規(guī)則、組件內(nèi)容開始標識規(guī)則、組件內(nèi)容結(jié)束標識規(guī)則進行匹配進一步包括 匹配調(diào)用組件名稱出現(xiàn)的規(guī)則獲取調(diào)用組件名稱; 匹配組件內(nèi)容開始標識規(guī)則設置組件標志為true,用于表示在結(jié)束標識出現(xiàn)之前匹配到的被調(diào)用組件對應的調(diào)用組件均為之前匹配到的調(diào)用組件; 匹配組件內(nèi)容結(jié)束標識規(guī)則設置組件標志為false,并將調(diào)用組件名稱置為空;匹配被調(diào)用組件名稱出現(xiàn)的規(guī)則獲取被調(diào)用組件名稱,新建節(jié)點存儲調(diào)用和被調(diào)用組件信息,將新建節(jié)點添加到組件調(diào)用關系列表。
全文摘要
本發(fā)明涉及一種基于系統(tǒng)源代碼獲取組件調(diào)用關系的方法,特征在于,獲取所有源代碼文件列表;過濾無效文件,獲取有效文件列表;掃描有效文件,獲取組件調(diào)用關系列表。本發(fā)明主要有以下優(yōu)點節(jié)省了人力,不需要專門的人員手工維護組件調(diào)用關系;能隨時掃描系統(tǒng)最新源代碼文件,保證了維護的組件調(diào)用關系和系統(tǒng)的一致性;解決了因為Excel存儲問題,使得組件調(diào)用關系失效,而重新獲取組件調(diào)用關系比較困難的問題。
文檔編號G06F9/46GK102662736SQ20121006120
公開日2012年9月12日 申請日期2012年3月9日 優(yōu)先權(quán)日2012年3月9日
發(fā)明者楊日權(quán) 申請人:北京神州數(shù)碼思特奇信息技術股份有限公司