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