專利名稱:一種探測java 程序文件擾動的方法及裝置的制作方法
技術領域:
本申請涉及計算機技術領域,尤其涉及一種探測JAVA程序文件擾動的方法及裝置。
背景技術:
程序員編寫程序的過程中,每個程序都會有很多不同的版本,從而需要程序員很好的管理各版本的代碼,在需要的時間可以取出需要的版本,并且每個版本都有一個完整的說明。SVN(Sub Version,代碼版本管理軟件)作為版本管理工具。SVN(Subversion,版本控制系統)與CVS—樣,是一個跨平臺的軟件,支持大多數常見的操作系統。作為一個開源的版本控制系統,Subversion管理著隨時間改變的數據。這些數據放置在一個中央資料檔案庫(repository)中。這個檔案庫很像一個普通的文件服務器,不過它會記住每一次文件的變動。這樣你就可以把檔案恢復到舊的版本,或是瀏覽文件的變動歷史。Subversion是一個通用的系統,可用來管理任何類型的文件,其中包括了程序源碼。現有技術中如果使用SVN代碼版本管理軟件對不同版本的JAVA程序文件進行檢測,在JAVA代碼生產過程中,只能通過文本對比方法檢測文本擾動,探測到的變化是與JAVA類和API無關的,則通過文本對比方法檢測文本擾動,不能探測到JAVA類和API的變化。而在實際的工程生產中,如果需要檢測到JAVA類和API的變化,則需要依靠人工的干預來組織JAVA類和API發生的變化。一個普通的工程包含的JAVA類和API數量是驚人的,從而導致實現JAVA類和API檢測的難度大,程序復雜。
發明內容
本申請實施例提供一種探測JAVA程序文件擾動的方法及裝置,本申請實施例所提供的方法和裝置解決了現有技術中不能檢測到程序代碼中類和API信息發生擾動的問題。本申請實施例提供一種探測JAVA程序文件擾動的方法,該方法包括:在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽;所述第一程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽插裝到所述java字節碼文件;將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。根據上述方法本申請實施例還提供一種探測JAVA程序文件擾動的裝置,該裝置包括:動態標簽獲取模塊,用于在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽;靜態標簽獲取模塊,用于所述程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽插裝到所述java字節碼文件;擾動確定模塊,用于將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。上述技術方案中的一個或兩個,至少具有如下技術效果:本申請實施例所提供的方法和裝置,采用JAVA字節碼來探測JAVA類與API擾動,從而能夠檢測到java程序中出現擾動的類和API信息,有效降低了 JAVA類和API檢測的難度和復雜度。
圖1為本申請實施例一種探測JAVA程序文件擾動的方法的流程圖;圖2為本申請實施例現有技術中em、ec文件結構;圖3為本申請實施例進行插裝后的em、ec ;圖4為本申請實施例插裝方法標簽后的em文件結構示意圖;圖4A為本申請實施例插裝方法標簽后的cm文件結構示意圖;圖5為本申請實施例在em文件中寫入和讀出methods stamp的方法流程圖;圖6為本申請實施例在ec文件中寫入和讀出methods stamp的方法流程圖;圖7為本申請實施例對比em和ec文件中methods stamp的方法流程圖;圖8為本申請實施例一種探測JAVA程序文件擾動的裝置的結構示意圖;圖9為本申請實施例擾動確定模塊的結構示意圖。
具體實施例方式本申請實施例提供一種探測JAVA程序文件擾動的方法,該方法包括:在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽;所述程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽插裝到所述java字節碼文件;將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。如圖1所示,本申請實施例提供一種探測JAVA程序文件擾動的方法,下面結合說明書附圖對本申請的具體實施方式
進行詳細說明:
本申請實施例所提供的方法應用于JAVA程序中,任一 JAVA編寫的程序文件通常包括多個類而且每個類中都包括多個實現特定功能的方法,應用本申請提供的方法對應用JAVA編寫的第一程序進行探測時,具體實現步驟包括:步驟101,在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽;本申請實施例更優化方法,因為在JAVA程序結構中,方法包含在每一個類中,所以如果想要知道每個方法是否發生了改變,則需要根據方法標簽確定標簽對應的方法,因為在具體的運行環境中,每個方法對應特定常量池中的一個常數,根據這個常數可以確定運行的方法是哪一個,所以在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽之后,該方法還包括:根據每個方法的內容信息計算得到每個方法對應的第一方法標簽后,獲取所述第一方法標簽對應的常量池中的常數,并根據所屬常數確定每個第一方法標簽對應的方法。由于程序在使用過程中,隨著功能模塊增多等情況會對程序做相應的修改,為了明確修改的部分,本申請實施例中將修改后的程序(即第二程序文件)與原始的程序(即第一程序文件)進行比較確定修改部分。步驟102,所述第一程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽寫入所述java字節碼文件;在本申請實施例中,將所述第二方法標簽寫入到所述java字節碼文件包括:掃描java字節碼文件中的每個類,根據每個類中每個方法對應的內容信息生成與每個方法對應的第二方法標簽;將每個類生成的多個第二方法標簽存入對應的數組中,并將所述數組寫入第二程序文件的java字節碼文件。在本申請實施例中,類與類對應的方法存放時按照一定的對應關系,具體的實現方式可以是在存放一個類標簽之后順序排列該類中包括的多個方法標簽。步驟103,將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。本申請實施例中,步驟103的具體實現方式可以是:將所述第一類標簽與對應的第二類標簽進行比較,如果檢測到任一第一類標簽與對應的第二類標簽不相同,則確定不相同的第一類標簽對應的類發生了擾動;因為在第一文件程序文件中包括多個第一類標簽,并且每個第一類標簽對應的包含多個第一方法標簽,因為第二程序文件是在第一程序文件的基礎上做了相應修改的所以第二程序文件中的類與第一程序文件中的類標簽進行比較時候包括三種情況,相同、不相同和添加了一個新的類。因為第一程序文件和第二程序文件之間的關系,所以程序文件中各個類的排列順序不會有太大的變化,所以第一程序文件中的第一類標簽和第二程序文件中的第二類標簽進行比較時,可以直接將第一類標簽和對應位置上的第二類標簽進行比較。將不相同的第二類標簽對應的第二方法標簽與第一類標簽對應的第一方法標簽進行比較;如果檢測到任一第二方法標簽與對應的第一方法標簽不相同,則確定不相同的第一方法標簽對應的方法發生了擾動;如果,類標簽存在不相同,則不相同的類中個方法也會存在不相同。所以要將兩個不相同的類的方法再做進一步的比較,確定不相同的方法。根據類和方法擾動方式對所述類和方法的源代碼進行處理。其中,根據類和方法擾動方式對所述類和方法的源代碼進行處理包括:如果沒有檢測到與任一第一方法標簽對應的第二方法標簽,則將所述任一第一方法標簽對應的類及API信息保存到設定地址;如果任一第一方法標簽與對應的第二方法標簽不相同,則所述任一第二方法標簽對應的類及API信息保存到設定地址;如果任一第一方法標簽與對應的方法標簽相同,則將第一方法標簽對應方法對應的覆蓋率信息數據復制到當前數組中,表示覆蓋率按原來的數據計算。在本申請實施例中,將插裝產品代碼編譯后的字節碼文件(未改進前的em、ec文件結構如圖2所示)中插裝類標簽(插裝后的em、ec如圖3所示),會得到程序的靜態信息文件(即所述JAVA字節碼文件),并存為文件coverage, em。所述coverage, em中包括每個類的屬性信息,例如:被插裝的程序中包含了多少類,class stamp,類當中源代碼的信息,類中block的信息等等。在步驟101執行之后,還可以在程序運行時,通過對程序動態信息分析,通過被執行的程序內容確定被執行的類標簽從而確定程序中哪些類被執行,哪些類未被執行,并將相關的信息存儲為動態信息文件coverage, ec。該動態信息文件中包括步驟101中得到的每個類的第一類標簽以及每個類包括的方法的第一方法標簽。如圖2和圖3所示的程序為例對插裝過程做詳細的說明:在“ClassDescriptor”中有個“long m_stamp”(類標簽)代表的是在 coverage, em文件中某一個class的類標簽stamp (即前述的第二類標簽),在”DataHolder”中的” longm_stamp”是存儲在coverage, ec文件中的某個class的類標簽stamp (即前述的第一類標簽)。在通常情況下這兩個“m_stamp”是相同的。但是在下列場景中會出現不一致的情況:具體情況包括:I)將被插裝過Class A的.class文件或者。.jar文件加載進JBoss運行應用。這時生成coverage, em ;2)執行某個測試用例,假設這個測試用例會覆蓋Class A這時生成coverage, ec。此時 coverage, em, coverage, ec 中 Class A 的 m_stamp 是相同;3)修改Class A的源代碼,重新編譯,加載進JBoss對應得到2coverage.em.這時2coverage.em與原Class A文件運行時生成的coverage, ec的m_stamp就不同了 ;則可將步驟3出現的m_stamp不同視為一個程序異常,拋出并處理CLASS_STAMP_MISMATCH的異常。見如下的代碼:
權利要求
1.一種探測JAVA程序文件擾動的方法,其特征在于,該方法包括: 在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽; 所述第一程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽插裝到所述java字節碼文件; 將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。
2.如權利要求1所述的方法,其特征在于,在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽,之后該方法還包括: 根據每個方法的內容信息計算得到每個方法對應的第一方法標簽后,獲取所述第一方法標簽對應的常量池中的常數,并根據所屬常數確定每個第一方法標簽對應的方法。
3.如權利要求1所述的方法,其特征在于,將所述第二方法標簽插裝到所述java字節碼文件包括: 掃描java字節碼文件中的每個類,根據每個類中每個方法對應的內容信息生成與每個方法對應的第二方法標簽; 將每個類生成的多個第二方法標簽 存入對應的數組中,并將所述數組寫入第二程序文件的java字節碼文件。
4.如權利要求1所述的方法,其特征在于,將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序中相對于第一程序文件發生了擾動的類和方法包括: 將所述第一類標簽與對應的第二類標簽進行比較,如果檢測到任一第一類標簽與對應的第二類標簽不相同,則確定不相同的第一類標簽對應的類發生了擾動; 將不相同的第二類標簽對應的第二方法標簽與第一類標簽對應的第一方法標簽進行比較;如果檢測到任一第二方法標簽與對應的第一方法標簽不相同,則確定不相同的第一方法標簽對應的方法發生了擾動; 根據類和方法擾動方式對所述類和方法的源代碼進行處理。
5.如權利要求4所述的方法,其特征在于,所述根據類和方法擾動方式對所述類和方法的源代碼進行處理包括: 如果沒有檢測到與任一第一方法標簽對應的第二方法標簽,則將所述任一第二方法標簽對應的類及API信息保存到設定地址; 如果任一第一方法標簽與對應的第二方法標簽不相同,則所述任一第二方法標簽對應的類及API信息保存到設定地址; 如果任一第一方法標簽與對應的方法標簽相同,則將第一方法標簽對應方法對應的覆蓋率信息數據復制到當前數組中。
6.一種探測JAVA程序文件擾動的裝置,其特征在于,該裝置包括:動態標簽獲取模塊,用于在第一程序文件運行過程中,根據運行過的每個類和每個類中包括的方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽; 靜態標簽獲取模塊,用于所述程序文件源代碼發生變化生成第二程序文件后,掃描第二程序文件的java字節碼文件確定所述第二程序文件中包括類及每個類所包括的方法,并根據每個類和每個方法的內容信息確定每個類的第二類標簽以及每個類包括的每個方法的第二方法標簽,將所述第二類標簽和第二方法標簽插裝到所述java字節碼文件; 擾動確定模塊,用于將java字節碼文件中的第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定第二程序文件相對于第一程序文件發生了擾動的類和方法。
7.如權利要求6所述的裝置,其特征在于,所述靜態標簽獲取模塊還用于掃描java字節碼文件中的每個類,根據每個類中每個方法對應的內容信息生成與每個方法對應的第二方法標簽;將每個類生成的多個第二方法標簽存入對應的數組中,并將所述數組寫入第二程序文件的java字節碼文件。
8.如權利要求6所述的裝置,其特征在于,所述擾動確定模塊包括: 擾動類確定單元,用于將所述第一類標簽與對應的第二類標簽進行比較,如果檢測到任一第一類標簽與對應的第二類標簽不相同,則確定不相同的第一類標簽對應的類發生了擾動; 擾動方法確定單元 ,用于將不相同的第二類標簽對應的第二方法標簽與第一類標簽對應的第一方法標簽進行比較;如果檢測到任一第二方法標簽與對應的第一方法標簽不相同,則確定不相同的第一方法標簽對應的方法發生了擾動; 擾動處理單元,用于根據類和方法擾動方式對所述類和方法的源代碼進行處理。
9.如權利要求8所述的裝置,其特征在于,擾動處理單元還用于如果沒有檢測到與任一第一方法標簽對應的第二方法標簽,則將所述任一第一方法標簽對應的類及API信息保存到設定地址;如果任一第一方法標簽與對應的第二方法標簽不相同,則所述任一第二方法標簽對應的類及API信息保存到設定地址;如果任一第一方法標簽與對應的方法標簽相同,則將第一方法標簽對應方法對應的覆蓋率信息數據復制到當前數組中。
10.如權利要求6所述的裝置,其特征在于,動態標簽獲取模塊還用于根據每個方法的內容信息確定每個方法對應的第一方法標簽后,將得到的第一方法標簽添加到對應常量池,根據所述第一方法標簽對應的常量池中的常數確定每個第一方法標簽對應的方法。
全文摘要
本申請公開了一種探測JAVA程序文件擾動的方法及裝置,應用于計算機技術領域。方法包括根據第一程序文件運行過的每個類和每個方法得到每個類的第一類標簽以及每個類包括的方法的第一方法標簽;第一程序文件程序修改得到第二程序文件,掃描第二程序文件的java字節碼文件,根據第二程序文件中每個類和每個方法的內容信息確定每個類的第二類標簽以及每個方法的第二方法標簽;將第二類標簽和第二方法標簽與所述第一類標簽和第一方法標簽進行比較,根據比較結果確定發生了擾動的類和方法。本申請公開的方法和裝置通過采用JAVA字節碼來探測JAVA類與API擾動,解決了現有技術中不能檢測到程序代碼中類和API信息發生擾動的問題。
文檔編號G06F11/36GK103198011SQ20121000481
公開日2013年7月10日 申請日期2012年1月9日 優先權日2012年1月9日
發明者馬治國, 何思遠 申請人:阿里巴巴集團控股有限公司