一種探測java程序文件擾動的方法及裝置的製作方法
2023-10-07 11:04:34 2
專利名稱:一種探測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日
發明者馬治國, 何思遠 申請人:阿里巴巴集團控股有限公司