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