本發(fā)明實施例涉及通信領(lǐng)域,尤其涉及一種檢測Java程序頁面擾動的方法和裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,人們的生活越來越離不開網(wǎng)絡(luò),當用戶在網(wǎng)絡(luò)(Web)頁面向服務(wù)器發(fā)送了一個包含統(tǒng)一資源定位符(Uniform Resource Locator,簡稱URL)的超文本傳輸協(xié)議(Hyper Text Transfer Protocol,簡稱HTTP)請求時,服務(wù)器調(diào)用某個Java類與函數(shù)完成對請求的響應(yīng)。程序在編寫過程中,會有很多不同的版本,在程序運行過程中,有可能更新當前版本生成下一個版本,在此過程中,會使程序頁面發(fā)生擾動,會頁面上的某些功能出現(xiàn)問題,從而導(dǎo)致響應(yīng)出現(xiàn)錯誤。
現(xiàn)有技術(shù)中,通過版本比對工具對程序頁面Java源文件進行比對,這種檢測頁面擾動的方式只能判斷程序頁面文件本身是否發(fā)生變化,現(xiàn)有技術(shù)并不能分析出各個版本之間的Java類與函數(shù)是否發(fā)生變化,也就不能準確的檢測是否發(fā)生了頁面擾動。因此,亟需一種檢測Java程序頁面擾動的方法,檢測版本變更過程中Java程序頁面是否發(fā)生了頁面擾動的情況。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種檢測Java程序頁面擾動的方法和裝置,用以檢測Java程序版本變更過程中Java程序頁面是否發(fā)生了頁面擾動的情況。
本發(fā)明實施例提供一種檢測Java程序頁面擾動的方法,包括:
獲取Java程序的第一Web頁面和第二Web頁面,以及所述第一Web頁面對應(yīng)的第一版本包、所述第二Web頁面對應(yīng)的第二版本包;針對所述第一版本包和所述第二版本包中的任一個版本包,解析所述版本包,根據(jù)解析得到的所述Web頁面對應(yīng)的所述至少一個統(tǒng)一資源定位符URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以所述Web頁面為根節(jié)點的所述Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;根據(jù)所述函數(shù)調(diào)用關(guān)系樹,計算所述函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;若確定所述第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與所述第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值不同,則確定所述第一Web頁面和所述第二Web頁面之間發(fā)生頁面擾動。
可選地,所述針對所述第一版本包和所述第二版本包中的任一個版本包,解析所述版本包,根據(jù)解析得到的所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以所述Web頁面為根節(jié)點的所述Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,包括:針對所述第一版本包和所述第二版本包中的任一個版本包,執(zhí)行:解析所述版本包中的頁面文件,獲得所述Web頁面對應(yīng)的至少一個URL;解析所述版本包中的程序配置文件以及Java類文件,得到所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系;根據(jù)解析得到的所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以所述Web頁面為根節(jié)點的所述Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;其中,所述函數(shù)調(diào)用關(guān)系樹中,所述Web頁面為根節(jié)點,所述Web頁面對應(yīng)的所述至少一個URL為第一級子節(jié)點,所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)為第二級子節(jié)點;所述入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)為第三級子節(jié)點。
可選地,所述解析所述版本包中的程序配置文件以及Java類文件,得到所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,包括:
針對所述至少一個URL中的每個URL,執(zhí)行:解析所述版本包中程序配置文件中的URL匹配規(guī)則,確定出所述URL對應(yīng)的Web框架;解析所述版本包中程序配置文件中的Web框架過濾器參數(shù)文件,確定出所述URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;其中,所述導(dǎo)航規(guī)則包括所述URL與所述URL對應(yīng)的入口Java類與函數(shù)的對應(yīng)關(guān)系;根據(jù)所述Web框架的類型,確定出所述URL對應(yīng)的導(dǎo)航規(guī)則解析器;使用所述導(dǎo)航規(guī)則解析器解析所述文件夾標識對應(yīng)的文件,得到所述URL對應(yīng)的入口Java類與函數(shù);解析Java類文件,得到所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系。
可選地,所述根據(jù)所述函數(shù)調(diào)用關(guān)系樹,計算所述函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值,包括:針對所述函數(shù)調(diào)用關(guān)系樹中的每個節(jié)點,執(zhí)行:獲取所述節(jié)點在所述Java類文件中對應(yīng)的字節(jié)碼片段;根據(jù)所述節(jié)點對應(yīng)的所述字節(jié)碼片段,計算所述節(jié)點的自身散列值;若確定不存在所述節(jié)點直接調(diào)用的下一級節(jié)點,則將所述節(jié)點的所述自身散列值作為所述節(jié)點的散列值;若確定存在所述節(jié)點直接調(diào)用的下一級節(jié)點,則確定所述節(jié)點直接調(diào)用的每個下一級節(jié)點的散列值;根據(jù)所述節(jié)點的自身散列值,以及所述每個下一級節(jié)點的散列值,確定所述節(jié)點的散列值。
可選地,所述根據(jù)所述節(jié)點對應(yīng)的所述字節(jié)碼片段,計算所述節(jié)點的自身散列值,包括:確定所述節(jié)點對應(yīng)的所述字節(jié)碼片段的md5摘要,得到所述節(jié)點的自身散列值;所述根據(jù)所述節(jié)點的自身散列值,以及所述每個下一級節(jié)點的散列值,確定所述節(jié)點的散列值,包括:計算所述節(jié)點的自身散列值,以及所述每個下一級節(jié)點的散列值之和,得到所述節(jié)點的散列值。
本發(fā)明實施例提供一種用于檢測Java程序頁面擾動的裝置,包括:
獲取單元,用于獲取Java程序的第一Web頁面和第二Web頁面,以及所述第一Web頁面對應(yīng)的第一版本包、所述第二Web頁面對應(yīng)的第二版本包;
處理單元,用于針對所述第一版本包和所述第二版本包中的任一個版本包,解析所述版本包,根據(jù)解析得到的所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以所述Web頁面為根節(jié)點的所述Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;根據(jù)所述函數(shù)調(diào)用關(guān)系樹,計算所述函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;若確定所述第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與所述第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值不同,則確定所述第一Web頁面和所述第二Web頁面之間發(fā)生頁面擾動。
可選地,所述處理單元,用于:針對所述第一版本包和所述第二版本包中的任一個版本包,執(zhí)行:解析所述版本包中的頁面文件,獲得所述Web頁面對應(yīng)的至少一個URL;解析所述版本包中的程序配置文件以及Java類文件,得到所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系;根據(jù)解析得到的所述Web頁面對應(yīng)的所述至少一個URL、所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以所述Web頁面為根節(jié)點的所述Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;其中,所述函數(shù)調(diào)用關(guān)系樹中,所述Web頁面為根節(jié)點,所述Web頁面對應(yīng)的所述至少一個URL為第一級子節(jié)點,所述至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)為第二級子節(jié)點;所述入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)為第三級子節(jié)點。
可選地,所述處理單元,用于:針對所述至少一個URL中的每個URL,執(zhí)行:解析所述版本包中程序配置文件中的URL匹配規(guī)則,確定出所述URL對應(yīng)的Web框架;解析所述版本包中程序配置文件中的Web框架過濾器參數(shù)文件,確定出所述URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;其中,所述導(dǎo)航規(guī)則包括所述URL與所述URL對應(yīng)的入口Java類與函數(shù)的對應(yīng)關(guān)系;根據(jù)所述Web框架的類型,確定出所述URL對應(yīng)的導(dǎo)航規(guī)則解析器;使用所述導(dǎo)航規(guī)則解析器解析所述文件夾標識對應(yīng)的文件,得到所述URL對應(yīng)的入口Java類與函數(shù);解析Java類文件,得到所述入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系。
可選地,所述獲取單元,用于獲取所述節(jié)點在所述Java類文件中對應(yīng)的字節(jié)碼片段;所述處理單元,用于:針對所述函數(shù)調(diào)用關(guān)系樹中的每個節(jié)點,執(zhí)行:根據(jù)所述節(jié)點在所述Java類文件中對應(yīng)的字節(jié)碼片段,計算所述節(jié)點的自身散列值;若確定不存在所述節(jié)點直接調(diào)用的下一級節(jié)點,則將所述節(jié)點的所述自身散列值作為所述節(jié)點的散列值;若確定存在所述節(jié)點直接調(diào)用的下一級節(jié)點,則確定所述節(jié)點直接調(diào)用的每個下一級節(jié)點的散列值;根據(jù)所述節(jié)點的自身散列值,以及所述每個下一級節(jié)點的散列值,確定所述節(jié)點的散列值。
可選地,所述處理單元,用于:確定所述節(jié)點對應(yīng)的所述字節(jié)碼片段的md5摘要,得到所述節(jié)點的自身散列值;計算所述節(jié)點的自身散列值,以及所述每個下一級節(jié)點的散列值之和,得到所述節(jié)點的散列值。
本發(fā)明實施例中提供了一種檢測Java程序頁面擾動的方法和裝置,獲取Java程序的第一Web頁面和第二Web頁面,以及第一Web頁面對應(yīng)的第一版本包、所第二Web頁面對應(yīng)的第二版本包;針對第一版本包和第二版本包中的任一個版本包,解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;根據(jù)函數(shù)調(diào)用關(guān)系樹,計算函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;若確定第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值不同,則確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動。由于本發(fā)明實施例提供的方法計算了第一Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值和第二Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值,根據(jù)第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值是否相同,確定第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,若是不相同,則確定第一Web頁面和第二Web頁面之間發(fā)生了頁面擾動;相對于現(xiàn)有技術(shù)中只根據(jù)頁面文件是否發(fā)生變化判斷第一Web頁面和第二Web頁面之間是否發(fā)生頁面擾動的方法,本發(fā)明實施例提供的方法根據(jù)構(gòu)建的函數(shù)調(diào)用關(guān)系樹,能夠檢測出第一版本包和第二版本包之間的Java代碼變更所影響的頁面,進而能夠準確的檢測出第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹。
圖1為本發(fā)明實施例提供的一種檢測Java程序頁面擾動的方法流程示意圖;
圖2為本發(fā)明實施例提供的第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;
圖3為本發(fā)明實施例提供的另一種檢測Java程序頁面擾動的方法流程示意圖;
圖4為本發(fā)明實施例提供的一種用于檢測Java程序頁面擾動裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
Java程序在編寫過程中,會有很多不同的版本,在程序運行過程中,有可能更新當前版本生成下一個版本,每一個版本的Web頁面對應(yīng)一個版本包,每一個版本包中包括頁面文件、程序配置文件、Java類文件等,其中頁面文件是以.html為擴展名的文件;程序配置文件是以.xml為擴展名的文件,例如web.xml文件主要用來配置過濾器、控制器等;Java類文件是以.Class為擴展名的文件。
現(xiàn)有技術(shù)中通過文件比對的方式只能判斷頁面文件本身是否發(fā)生變化,而不能檢測兩個版本的Java代碼變更是否會導(dǎo)致兩個版本的Web頁面之間發(fā)生頁面擾動。本發(fā)明實施例通過構(gòu)建函數(shù)調(diào)用關(guān)系樹的方式,比較兩個版本之間函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值,檢測兩個版本的Web頁面之間是否發(fā)生頁面擾動。
圖1示例性示出了本發(fā)明實施例提供的一種檢測Java程序頁面擾動的方法流程示意圖。如圖1所示,本發(fā)明實施例提供的一種檢測Java程序頁面擾動的方法,包括以下步驟:
步驟S101:用于檢測Java程序頁面擾動的裝置獲取Java程序的第一Web頁面和第二Web頁面,以及第一Web頁面對應(yīng)的第一版本包、所第二Web頁面對應(yīng)的第二版本包;
步驟S102:用于檢測Java程序頁面擾動的裝置針對第一版本包和第二版本包中的任一個版本包,解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;根據(jù)函數(shù)調(diào)用關(guān)系樹,計算函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;
步驟S103:用于檢測Java程序頁面擾動的裝置若確定第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值不同,則確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動。
本發(fā)明實施例中,Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中包括根節(jié)點和至少一個子節(jié)點;其中,根節(jié)點為Web頁面節(jié)點;子節(jié)點為Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù),以及入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)等。
本發(fā)明實施例提供的檢測Java程序頁面擾動的方法,由于用于檢測Java程序頁面擾動的裝置解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,計算了第一Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值和第二Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值,根據(jù)第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值是否相同,確定第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,若是不相同,則確定第一Web頁面和第二Web頁面之間發(fā)生了頁面擾動;相對于現(xiàn)有技術(shù)中只根據(jù)頁面文件是否發(fā)生變化判斷第一Web頁面和第二Web頁面之間是否發(fā)生頁面擾動的方法,本發(fā)明實施例提供的方法根據(jù)構(gòu)建的函數(shù)調(diào)用關(guān)系樹,能夠檢測出第一版本包和第二版本包之間的Java代碼變更所影響的頁面,進而能夠準確的檢測出第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動。
可選地,針對第一版本包和第二版本包中的任一個版本包,解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,包括:針對第一版本包和第二版本包中的任一個版本包,執(zhí)行:解析版本包中的頁面文件,獲得Web頁面對應(yīng)的至少一個URL;解析版本包中的程序配置文件以及Java類文件,得到Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系;據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;其中,函數(shù)調(diào)用關(guān)系樹中,Web頁面為根節(jié)點,Web頁面對應(yīng)的至少一個URL為第一級子節(jié)點,至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)為第二級子節(jié)點;入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)為第三級子節(jié)點。
本發(fā)明實施中,在客戶端的Web頁面向服務(wù)器發(fā)起一個HTTP請求,HTTP請求的格式中包含URL,一個Web頁面對應(yīng)至少一個URL,而頁面文件中包括Web頁面和至少一個URL的對應(yīng)關(guān)系。程序配置文件為web.xml文件,該文件中包括URL匹配規(guī)則和Web框架過濾器參數(shù)文件等,其中URL匹配規(guī)則匹配規(guī)則包括URL和Web框架的對應(yīng)關(guān)系。Java類文件中包括入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系。
為了更清楚地說明本發(fā)明實施例的函數(shù)調(diào)用關(guān)系樹的結(jié)構(gòu)關(guān)系,以第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹為例進行介紹。第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,包括根節(jié)點和至少一個子節(jié)點;其中,根節(jié)點為第一Web頁面;第一Web頁面的子節(jié)點為至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù),或入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)。其中,入口Java類與函數(shù)為URL直接調(diào)用的Java類與函數(shù)。
圖2示例性示出了本發(fā)明實施例提供的第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹。如圖2所示,該函數(shù)調(diào)用關(guān)系樹中根節(jié)點為第一Web頁面201,子節(jié)點包括URL202、URL203、Java類與函數(shù)(C1:f1)204、Java類與函數(shù)(C2:f2)205、Java類與函數(shù)(C3:f1)206、Java類與函數(shù)(C4:f3)207、Java類與函數(shù)(C1:f2)208;其中,URL202、URL203為第一級子節(jié)點;Java類與函數(shù)(C1:f1)204和Java類與函數(shù)(C1:f2)208為第二級子節(jié)點;Java類與函數(shù)(C2:f2)205、Java類與函數(shù)(C3:f1)206、Java類與函數(shù)(C4:f3)207為第三級子節(jié)點。
根節(jié)點和各個子節(jié)點之間的關(guān)系為:第一Web頁面201中包含兩個HTTP請求,兩個HTTP請求分別對應(yīng)URL202和URL203;URL 202調(diào)用Java類與函數(shù)(C1:f1)204;Java類與函數(shù)(C1:f1)204調(diào)用Java類與函數(shù)(C2:f2)205和Java類與函數(shù)(C3:f1)206;Java類與函數(shù)(C3:f1)206調(diào)用Java類與函數(shù)(C4:f3)207;URL 203調(diào)用Java類與函數(shù)(C1:f2)208。其中,C1:f1表示Java類C1的函數(shù)f1,C2:f2表示Java類C2的函數(shù)f2,C3:f1表示Java類C3的函數(shù)f1,C4:f3表示Java類C4的函數(shù)f3,C1:f2表示Java類C1的函數(shù)f2。
本發(fā)明實施例中,根據(jù)生成的函數(shù)調(diào)用關(guān)系樹,可以準確判斷各個版本的Web頁面之間是否受到影響。例如,確定第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點第一Web頁面是否受到影響,可通過各級子節(jié)點中Java類與函數(shù)的變化來確定;而Java類與函數(shù)的是否發(fā)生變化,可通過對Java類與函數(shù)的字節(jié)碼片段進行散列值計算確定。如此,根據(jù)生成的兩個版本的Web頁面的函數(shù)調(diào)用關(guān)系樹,可以確定兩個版本的Java代碼變更是否會導(dǎo)致兩個版本的Web頁面之間發(fā)生頁面擾動。
可選地,解析版本包中的程序配置文件以及Java類文件,得到Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,包括:針對至少一個URL中的每個URL,執(zhí)行:解析版本包中程序配置文件中的URL匹配規(guī)則,確定出URL對應(yīng)的Web框架;解析版本包中程序配置文件中的Web框架過濾器參數(shù)文件,確定出URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;其中,導(dǎo)航規(guī)則包括URL與URL對應(yīng)的入口Java類與函數(shù)的對應(yīng)關(guān)系;根據(jù)Web框架的類型,確定出URL對應(yīng)的導(dǎo)航規(guī)則解析器;使用導(dǎo)航規(guī)則解析器解析文件夾標識對應(yīng)的文件,得到URL對應(yīng)的入口Java類與函數(shù);解析Java類文件,獲取入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系。
本發(fā)明實施例中,在客戶端和服務(wù)器之間的請求和響應(yīng)過程中,客戶端向服務(wù)器發(fā)送一個包含URL的請求,Web框架過濾器將該包含URL的請求匹配到到相應(yīng)的Web框架進行處理;Web框架過濾器參數(shù)文件包括URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;Web框架的類型有多種,每一種類型的Web框架對應(yīng)一種類型的導(dǎo)航規(guī)則解析器。
版本包中包括html文件目錄、xml文件目錄、class文件目錄,導(dǎo)航規(guī)則所存儲的文件夾標識用于標識導(dǎo)航規(guī)則具體儲存在版本包中哪一個目錄中;導(dǎo)航規(guī)則有兩種存儲方式,一種存儲方式是以配置文件的方式存儲在版本包的xml文件的目錄下,另一種存儲方式是以注解的方式存儲在class文件目錄下的Java類文件中。若導(dǎo)航規(guī)則所存儲的文件夾標識所標識的是xml文件的目錄下的配置文件,則掃描該配置文件以及該配置文件對應(yīng)的class文件目錄下的Java類文件,并使用導(dǎo)航規(guī)則解析器解析該配置文件中的導(dǎo)航規(guī)則,得到URL與入口Java類與函數(shù)的對應(yīng)關(guān)系;若導(dǎo)航規(guī)則所存儲的文件夾標識所標識的是class文件目錄下的Java類文件,則掃描并使用導(dǎo)航規(guī)則解析器解析該Java類文件中的導(dǎo)航規(guī)則,得到URL與入口Java類與函數(shù)的對應(yīng)關(guān)系。
Java類文件中包括入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系。
本發(fā)明實施例中,通過解析版本包中的程序配置文件以及Java類文件,得到至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,如此,根據(jù)得到的URL和各個Java類與函數(shù)之間的調(diào)用關(guān)系,將Web頁面和各個Java類與函數(shù)關(guān)聯(lián),可通過分析不同版本中各個Java類與函數(shù)是否發(fā)生變化,進而分析不同版本的Web頁面之間是否發(fā)生頁面擾動。
可選地,根據(jù)函數(shù)調(diào)用關(guān)系樹,計算函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值,包括:針對函數(shù)調(diào)用關(guān)系樹中的每個節(jié)點,執(zhí)行:獲取節(jié)點在Java類文件中對應(yīng)的字節(jié)碼片段;根據(jù)節(jié)點對應(yīng)的字節(jié)碼片段,計算節(jié)點的自身散列值;若確定不存在節(jié)點直接調(diào)用的下一級節(jié)點,則將節(jié)點的自身散列值作為節(jié)點的散列值;若確定存在節(jié)點直接調(diào)用的下一級節(jié)點,則確定節(jié)點直接調(diào)用的每個下一級節(jié)點的散列值;根據(jù)節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值,確定節(jié)點的散列值。
本發(fā)明實施中,源代碼為程序設(shè)計語言規(guī)范編寫的文本文件,字節(jié)碼是通過Java編譯器將源代碼編譯后的生成的中間代碼,在分析字節(jié)碼片段時,采用反編譯器Javap分解Java類文件得到。例如,根據(jù)圖2所示的第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,以圖2中的Java類與函數(shù)(C1:f1)204調(diào)用Java類與函數(shù)(C2:f2)205為例,使用javap得到函數(shù)f1的字節(jié)碼片段如下:
其中,0:new#16;//class com/cup/test/C2表示構(gòu)建Java類C2;4:invokespecial#18;//Method com/cup/test/C2."<init>":()V表示初始化Java類C2;9:invokevirtual#19;//Method com/cup/test/C2.f2:()I表示Java類C1的函數(shù)f1調(diào)用Java類C2的函數(shù)f2。
通過分析各個Java類與函數(shù)的字節(jié)碼片段,可獲得各個Java類與函數(shù)之間的調(diào)用關(guān)系,獲取Java類與函數(shù)的字節(jié)碼片段使用md5算法進行計算,得到該節(jié)點的自身散列值。對于函數(shù)調(diào)用關(guān)系樹中的第二級子節(jié)點和第三級子節(jié)點,即至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),第二級子節(jié)點和第三級子節(jié)點中每個節(jié)點的自身散列值為其字節(jié)碼片段的md5摘要;對于非函數(shù)節(jié)點,即根節(jié)點和第一級子節(jié)點的自身散列值的取值為空。
可選地,根據(jù)節(jié)點對應(yīng)的字節(jié)碼片段,計算節(jié)點的自身散列值,包括:確定節(jié)點對應(yīng)的字節(jié)碼片段的md5摘要,得到節(jié)點的自身散列值;根據(jù)節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值,確定節(jié)點的散列值,包括:計算節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值之和,得到節(jié)點的散列值。
以第一Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹為例,假設(shè)該函數(shù)調(diào)用關(guān)系樹的包括M層,每層包括至少一個子節(jié)點,針對該函數(shù)調(diào)用關(guān)系樹中的第i層的某一個節(jié)點,其散列值根據(jù)下述公式(1)計算:
其中,Ni表示第i層的一個子節(jié)點,c(Ni)表示子節(jié)點Ni的孩子節(jié)點的個數(shù),Ni+1,j表示子節(jié)點Ni在第i+1層中的第j個孩子節(jié)點,md5(Nibytecode)表示子節(jié)點Ni的自身散列值,表示子節(jié)點Ni在第i+1層中的所有孩子節(jié)點的散列值的和運算。
根據(jù)上述公式(1),可計算得到第一Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值;同樣的,計算得到第二Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值;如此,可以通過比較第一Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值和第二Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值是否相同,得到第一Web頁面和第二Web頁面之間是否發(fā)生頁面擾動。若第一Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值和第二Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值相同,則確定第一Web頁面和第二Web頁面之間未發(fā)生頁面擾動;若第一Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值和第二Web頁面對應(yīng)的的函數(shù)調(diào)用關(guān)系樹的根節(jié)點的散列值不相同,則確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動。本發(fā)明實施例通過函數(shù)調(diào)用關(guān)系樹將Web頁面、包含URL的請求以及Java類與函數(shù)進行關(guān)聯(lián),可直觀展現(xiàn)版本變更所影響的Web頁面。
可選的,若確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動,可根據(jù)第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中各個子節(jié)點的散列值和第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中各個子節(jié)點的散列值是否相同,確定出第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹和第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中散列值不相同的子節(jié)點。如此,可以確定出是哪個子節(jié)點發(fā)生了變化,進而使得第一Web頁面和第二Web頁面之間發(fā)生頁面擾動;而且這種基于字節(jié)碼片段的散列值判斷各個節(jié)點是否發(fā)生變化,簡化了現(xiàn)有技術(shù)中根據(jù)文本比對Java類與函數(shù)是否變化的判斷過程,對于非葉子節(jié)點散列值的計算方式包含了API的變更情況,簡化了關(guān)聯(lián)代碼變更的判斷。
為了更清楚的介紹上述方法流程,本發(fā)明實施例提供以下示例。
圖3示例性示出了本發(fā)明實施例提供的另一種檢測Java程序頁面擾動的方法流程示意圖,如圖3所示,該方法包括以下步驟:
步驟S301:用于檢測Java程序頁面擾動的裝置獲取Java程序的第一Web頁面和第二Web頁面,以及第一Web頁面對應(yīng)的第一版本包、第二Web頁面對應(yīng)的第二版本包;
步驟S302:用于檢測Java程序頁面擾動的裝置針對第一版本包和第二版本包中的任一個版本包,解析版本包;
步驟S303:用于檢測Java程序頁面擾動的裝置解析版本包中的頁面文件,獲得Web頁面對應(yīng)的至少一個URL;
步驟S304:用于檢測Java程序頁面擾動的裝置針對至少一個URL中的每個URL,執(zhí)行:解析版本包中程序配置文件中的URL匹配規(guī)則,確定出URL對應(yīng)的Web框架;
步驟S305:用于檢測Java程序頁面擾動的裝置解析版本包中程序配置文件中的Web框架過濾器參數(shù)文件,確定出URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;
步驟S306:用于檢測Java程序頁面擾動的裝置根據(jù)Web框架的類型,確定出URL對應(yīng)的導(dǎo)航規(guī)則解析器;
步驟S307:用于檢測Java程序頁面擾動的裝置使用導(dǎo)航規(guī)則解析器解析文件夾標識對應(yīng)的文件,得到URL對應(yīng)的入口Java類與函數(shù);
步驟S308:用于檢測Java程序頁面擾動的裝置解析Java類文件,獲取入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系;
步驟S309:用于檢測Java程序頁面擾動的裝置根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;
步驟S310:用于檢測Java程序頁面擾動的裝置根據(jù)函數(shù)調(diào)用關(guān)系樹,計算函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;
步驟S311:用于檢測Java程序頁面擾動的裝置針對函數(shù)調(diào)用關(guān)系樹中的每個節(jié)點,執(zhí)行:獲取節(jié)點在Java類文件中對應(yīng)的字節(jié)碼片段;
步驟S312:用于檢測Java程序頁面擾動的裝置根據(jù)節(jié)點對應(yīng)的字節(jié)碼片段,計算節(jié)點的自身散列值;確定節(jié)點對應(yīng)的字節(jié)碼片段的md5摘要,得到節(jié)點的自身散列值;
步驟S313:用于檢測Java程序頁面擾動的裝置若確定不存在節(jié)點直接調(diào)用的下一級節(jié)點,則將節(jié)點的自身散列值作為節(jié)點的散列值;
步驟S314:用于檢測Java程序頁面擾動的裝置若確定存在節(jié)點直接調(diào)用的下一級節(jié)點,則確定節(jié)點直接調(diào)用的每個下一級節(jié)點的散列值;計算節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值之和,得到節(jié)點的散列值;
步驟S315:用于檢測Java程序頁面擾動的裝置確定第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值是否相同,若是,則執(zhí)行步驟S316;若否,則執(zhí)行步驟S317;
步驟S316:用于檢測Java程序頁面擾動的裝置確定第一Web頁面和第二Web頁面之間未發(fā)生頁面擾動;
步驟S317:用于檢測Java程序頁面擾動的裝置確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動。
從上述內(nèi)容可以看出:本發(fā)明實施例提供的一種檢測Java程序頁面擾動的方法,由于用于檢測Java程序頁面擾動的裝置解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,計算了第一Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值和第二Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值,根據(jù)第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值是否相同,確定第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,若是不相同,則確定第一Web頁面和第二Web頁面之間發(fā)生了頁面擾動;相對于現(xiàn)有技術(shù)中只根據(jù)頁面文件是否發(fā)生變化判斷第一Web頁面和第二Web頁面之間是否發(fā)生頁面擾動的方法,本發(fā)明實施例提供的方法根據(jù)構(gòu)建的函數(shù)調(diào)用關(guān)系樹,能夠檢測出第一版本包和第二版本包之間的Java代碼變更所影響的頁面,進而能夠準確的檢測出第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,而且,這種基于字節(jié)碼片段的散列值判斷各個節(jié)點是否發(fā)生變化,簡化了根據(jù)文本比對Java類與函數(shù)是否變化的判斷過程。
圖4示例性示出了本發(fā)明實施例提供的一種用于檢測Java程序頁面擾動的裝置的結(jié)構(gòu)示意圖。
基于相同構(gòu)思,本發(fā)明實施例提供的一種用于檢測Java程序頁面擾動的裝置,用于執(zhí)行上述方法流程,如圖4所示,該裝置400包括獲取單元401和處理單元402;其中:
獲取單元401,用于獲取Java程序的第一Web頁面和第二Web頁面,以及第一Web頁面對應(yīng)的第一版本包、第二Web頁面對應(yīng)的第二版本包;
處理單元402,用于針對第一版本包和第二版本包中的任一個版本包,解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;根據(jù)函數(shù)調(diào)用關(guān)系樹,計算函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值;若確定第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值不同,則確定第一Web頁面和第二Web頁面之間發(fā)生頁面擾動。
可選地,處理單元402,用于:針對第一版本包和第二版本包中的任一個版本包,執(zhí)行:解析版本包中的頁面文件,獲得Web頁面對應(yīng)的至少一個URL;解析版本包中的程序配置文件以及Java類文件,得到Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系;根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹;其中,函數(shù)調(diào)用關(guān)系樹中,Web頁面為根節(jié)點,Web頁面對應(yīng)的至少一個URL為第一級子節(jié)點,至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)為第二級子節(jié)點;入口Java類函數(shù)直接或間接調(diào)用的各個Java類與函數(shù)為第三級子節(jié)點。
可選地,處理單元402,用于:針對至少一個URL中的每個URL,執(zhí)行:解析版本包中程序配置文件中的URL匹配規(guī)則,確定出URL對應(yīng)的Web框架;解析版本包中程序配置文件中的Web框架過濾器參數(shù)文件,確定出URL對應(yīng)的Web框架的類型,以及導(dǎo)航規(guī)則所存儲的文件夾標識;其中,導(dǎo)航規(guī)則包括URL與URL對應(yīng)的入口Java類與函數(shù)的對應(yīng)關(guān)系;根據(jù)Web框架的類型,確定出URL對應(yīng)的導(dǎo)航規(guī)則解析器;使用導(dǎo)航規(guī)則解析器解析文件夾標識對應(yīng)的文件,得到URL對應(yīng)的入口Java類與函數(shù);解析Java類文件,得到入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的直接調(diào)用關(guān)系。
可選地,獲取單元401,用于獲取節(jié)點在Java類文件中對應(yīng)的字節(jié)碼片段;處理單元402,用于:針對函數(shù)調(diào)用關(guān)系樹中的每個節(jié)點,執(zhí)行:根據(jù)節(jié)點在Java類文件中對應(yīng)的字節(jié)碼片段,計算節(jié)點的自身散列值;若確定不存在節(jié)點直接調(diào)用的下一級節(jié)點,則將節(jié)點的自身散列值作為節(jié)點的散列值;若確定存在節(jié)點直接調(diào)用的下一級節(jié)點,則確定節(jié)點直接調(diào)用的每個下一級節(jié)點的散列值;根據(jù)節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值,確定節(jié)點的散列值。
可選地,處理單元402,用于:確定節(jié)點對應(yīng)的字節(jié)碼片段的md5摘要,得到節(jié)點的自身散列值;計算節(jié)點的自身散列值,以及每個下一級節(jié)點的散列值之和,得到節(jié)點的散列值。
從上述內(nèi)容可以看出:由于解析版本包,根據(jù)解析得到的Web頁面對應(yīng)的至少一個URL、至少一個URL中每個URL對應(yīng)的入口Java類與函數(shù)、入口Java類與函數(shù)直接或間接調(diào)用的各個Java類與函數(shù),以及各個Java類與函數(shù)之間的調(diào)用關(guān)系,生成以Web頁面為根節(jié)點的Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹,計算了第一Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值和第二Web頁面對應(yīng)的函數(shù)關(guān)系樹中根節(jié)點的散列值,根據(jù)第一Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值與第二Web頁面對應(yīng)的函數(shù)調(diào)用關(guān)系樹中根節(jié)點的散列值是否相同,確定第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,若是不相同,則確定第一Web頁面和第二Web頁面之間發(fā)生了頁面擾動;相對于現(xiàn)有技術(shù)中只根據(jù)頁面文件是否發(fā)生變化判斷第一Web頁面和第二Web頁面之間是否發(fā)生頁面擾動的方法,本發(fā)明實施例提供的方法根據(jù)構(gòu)建的函數(shù)調(diào)用關(guān)系樹,能夠檢測出第一版本包和第二版本包之間的Java代碼變更所影響的頁面,進而能夠準確的檢測出第一Web頁面和第二Web頁面之間是否發(fā)生了頁面擾動,而且,這種基于字節(jié)碼片段的散列值判斷各個節(jié)點是否發(fā)生變化,簡化了根據(jù)文本比對Java類與函數(shù)是否變化的判斷過程。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。