一种检测Java程序页面扰动的方法和装置与流程

文档序号:12120624阅读:301来源:国知局
一种检测Java程序页面扰动的方法和装置与流程

本发明实施例涉及通信领域,尤其涉及一种检测Java程序页面扰动的方法和装置。



背景技术:

随着网络技术的发展,人们的生活越来越离不开网络,当用户在网络(Web)页面向服务器发送了一个包含统一资源定位符(Uniform Resource Locator,简称URL)的超文本传输协议(Hyper Text Transfer Protocol,简称HTTP)请求时,服务器调用某个Java类与函数完成对请求的响应。程序在编写过程中,会有很多不同的版本,在程序运行过程中,有可能更新当前版本生成下一个版本,在此过程中,会使程序页面发生扰动,会页面上的某些功能出现问题,从而导致响应出现错误。

现有技术中,通过版本比对工具对程序页面Java源文件进行比对,这种检测页面扰动的方式只能判断程序页面文件本身是否发生变化,现有技术并不能分析出各个版本之间的Java类与函数是否发生变化,也就不能准确的检测是否发生了页面扰动。因此,亟需一种检测Java程序页面扰动的方法,检测版本变更过程中Java程序页面是否发生了页面扰动的情况。



技术实现要素:

本发明实施例提供一种检测Java程序页面扰动的方法和装置,用以检测Java程序版本变更过程中Java程序页面是否发生了页面扰动的情况。

本发明实施例提供一种检测Java程序页面扰动的方法,包括:

获取Java程序的第一Web页面和第二Web页面,以及所述第一Web页面对应的第一版本包、所述第二Web页面对应的第二版本包;针对所述第一版本包和所述第二版本包中的任一个版本包,解析所述版本包,根据解析得到的所述Web页面对应的所述至少一个统一资源定位符URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以所述Web页面为根节点的所述Web页面对应的函数调用关系树;根据所述函数调用关系树,计算所述函数调用关系树中根节点的散列值;若确定所述第一Web页面对应的函数调用关系树中根节点的散列值与所述第二Web页面对应的函数调用关系树中根节点的散列值不同,则确定所述第一Web页面和所述第二Web页面之间发生页面扰动。

可选地,所述针对所述第一版本包和所述第二版本包中的任一个版本包,解析所述版本包,根据解析得到的所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以所述Web页面为根节点的所述Web页面对应的函数调用关系树,包括:针对所述第一版本包和所述第二版本包中的任一个版本包,执行:解析所述版本包中的页面文件,获得所述Web页面对应的至少一个URL;解析所述版本包中的程序配置文件以及Java类文件,得到所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系;根据解析得到的所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以所述Web页面为根节点的所述Web页面对应的函数调用关系树;其中,所述函数调用关系树中,所述Web页面为根节点,所述Web页面对应的所述至少一个URL为第一级子节点,所述至少一个URL中每个URL对应的入口Java类与函数为第二级子节点;所述入口Java类函数直接或间接调用的各个Java类与函数为第三级子节点。

可选地,所述解析所述版本包中的程序配置文件以及Java类文件,得到所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,包括:

针对所述至少一个URL中的每个URL,执行:解析所述版本包中程序配置文件中的URL匹配规则,确定出所述URL对应的Web框架;解析所述版本包中程序配置文件中的Web框架过滤器参数文件,确定出所述URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;其中,所述导航规则包括所述URL与所述URL对应的入口Java类与函数的对应关系;根据所述Web框架的类型,确定出所述URL对应的导航规则解析器;使用所述导航规则解析器解析所述文件夹标识对应的文件,得到所述URL对应的入口Java类与函数;解析Java类文件,得到所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系。

可选地,所述根据所述函数调用关系树,计算所述函数调用关系树中根节点的散列值,包括:针对所述函数调用关系树中的每个节点,执行:获取所述节点在所述Java类文件中对应的字节码片段;根据所述节点对应的所述字节码片段,计算所述节点的自身散列值;若确定不存在所述节点直接调用的下一级节点,则将所述节点的所述自身散列值作为所述节点的散列值;若确定存在所述节点直接调用的下一级节点,则确定所述节点直接调用的每个下一级节点的散列值;根据所述节点的自身散列值,以及所述每个下一级节点的散列值,确定所述节点的散列值。

可选地,所述根据所述节点对应的所述字节码片段,计算所述节点的自身散列值,包括:确定所述节点对应的所述字节码片段的md5摘要,得到所述节点的自身散列值;所述根据所述节点的自身散列值,以及所述每个下一级节点的散列值,确定所述节点的散列值,包括:计算所述节点的自身散列值,以及所述每个下一级节点的散列值之和,得到所述节点的散列值。

本发明实施例提供一种用于检测Java程序页面扰动的装置,包括:

获取单元,用于获取Java程序的第一Web页面和第二Web页面,以及所述第一Web页面对应的第一版本包、所述第二Web页面对应的第二版本包;

处理单元,用于针对所述第一版本包和所述第二版本包中的任一个版本包,解析所述版本包,根据解析得到的所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以所述Web页面为根节点的所述Web页面对应的函数调用关系树;根据所述函数调用关系树,计算所述函数调用关系树中根节点的散列值;若确定所述第一Web页面对应的函数调用关系树中根节点的散列值与所述第二Web页面对应的函数调用关系树中根节点的散列值不同,则确定所述第一Web页面和所述第二Web页面之间发生页面扰动。

可选地,所述处理单元,用于:针对所述第一版本包和所述第二版本包中的任一个版本包,执行:解析所述版本包中的页面文件,获得所述Web页面对应的至少一个URL;解析所述版本包中的程序配置文件以及Java类文件,得到所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系;根据解析得到的所述Web页面对应的所述至少一个URL、所述至少一个URL中每个URL对应的入口Java类与函数、所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以所述Web页面为根节点的所述Web页面对应的函数调用关系树;其中,所述函数调用关系树中,所述Web页面为根节点,所述Web页面对应的所述至少一个URL为第一级子节点,所述至少一个URL中每个URL对应的入口Java类与函数为第二级子节点;所述入口Java类函数直接或间接调用的各个Java类与函数为第三级子节点。

可选地,所述处理单元,用于:针对所述至少一个URL中的每个URL,执行:解析所述版本包中程序配置文件中的URL匹配规则,确定出所述URL对应的Web框架;解析所述版本包中程序配置文件中的Web框架过滤器参数文件,确定出所述URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;其中,所述导航规则包括所述URL与所述URL对应的入口Java类与函数的对应关系;根据所述Web框架的类型,确定出所述URL对应的导航规则解析器;使用所述导航规则解析器解析所述文件夹标识对应的文件,得到所述URL对应的入口Java类与函数;解析Java类文件,得到所述入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系。

可选地,所述获取单元,用于获取所述节点在所述Java类文件中对应的字节码片段;所述处理单元,用于:针对所述函数调用关系树中的每个节点,执行:根据所述节点在所述Java类文件中对应的字节码片段,计算所述节点的自身散列值;若确定不存在所述节点直接调用的下一级节点,则将所述节点的所述自身散列值作为所述节点的散列值;若确定存在所述节点直接调用的下一级节点,则确定所述节点直接调用的每个下一级节点的散列值;根据所述节点的自身散列值,以及所述每个下一级节点的散列值,确定所述节点的散列值。

可选地,所述处理单元,用于:确定所述节点对应的所述字节码片段的md5摘要,得到所述节点的自身散列值;计算所述节点的自身散列值,以及所述每个下一级节点的散列值之和,得到所述节点的散列值。

本发明实施例中提供了一种检测Java程序页面扰动的方法和装置,获取Java程序的第一Web页面和第二Web页面,以及第一Web页面对应的第一版本包、所第二Web页面对应的第二版本包;针对第一版本包和第二版本包中的任一个版本包,解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;根据函数调用关系树,计算函数调用关系树中根节点的散列值;若确定第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值不同,则确定第一Web页面和第二Web页面之间发生页面扰动。由于本发明实施例提供的方法计算了第一Web页面对应的函数关系树中根节点的散列值和第二Web页面对应的函数关系树中根节点的散列值,根据第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值是否相同,确定第一Web页面和第二Web页面之间是否发生了页面扰动,若是不相同,则确定第一Web页面和第二Web页面之间发生了页面扰动;相对于现有技术中只根据页面文件是否发生变化判断第一Web页面和第二Web页面之间是否发生页面扰动的方法,本发明实施例提供的方法根据构建的函数调用关系树,能够检测出第一版本包和第二版本包之间的Java代码变更所影响的页面,进而能够准确的检测出第一Web页面和第二Web页面之间是否发生了页面扰动。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。

图1为本发明实施例提供的一种检测Java程序页面扰动的方法流程示意图;

图2为本发明实施例提供的第一Web页面对应的函数调用关系树;

图3为本发明实施例提供的另一种检测Java程序页面扰动的方法流程示意图;

图4为本发明实施例提供的一种用于检测Java程序页面扰动装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

Java程序在编写过程中,会有很多不同的版本,在程序运行过程中,有可能更新当前版本生成下一个版本,每一个版本的Web页面对应一个版本包,每一个版本包中包括页面文件、程序配置文件、Java类文件等,其中页面文件是以.html为扩展名的文件;程序配置文件是以.xml为扩展名的文件,例如web.xml文件主要用来配置过滤器、控制器等;Java类文件是以.Class为扩展名的文件。

现有技术中通过文件比对的方式只能判断页面文件本身是否发生变化,而不能检测两个版本的Java代码变更是否会导致两个版本的Web页面之间发生页面扰动。本发明实施例通过构建函数调用关系树的方式,比较两个版本之间函数调用关系树中根节点的散列值,检测两个版本的Web页面之间是否发生页面扰动。

图1示例性示出了本发明实施例提供的一种检测Java程序页面扰动的方法流程示意图。如图1所示,本发明实施例提供的一种检测Java程序页面扰动的方法,包括以下步骤:

步骤S101:用于检测Java程序页面扰动的装置获取Java程序的第一Web页面和第二Web页面,以及第一Web页面对应的第一版本包、所第二Web页面对应的第二版本包;

步骤S102:用于检测Java程序页面扰动的装置针对第一版本包和第二版本包中的任一个版本包,解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;根据函数调用关系树,计算函数调用关系树中根节点的散列值;

步骤S103:用于检测Java程序页面扰动的装置若确定第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值不同,则确定第一Web页面和第二Web页面之间发生页面扰动。

本发明实施例中,Web页面对应的函数调用关系树中包括根节点和至少一个子节点;其中,根节点为Web页面节点;子节点为Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数,以及入口Java类函数直接或间接调用的各个Java类与函数等。

本发明实施例提供的检测Java程序页面扰动的方法,由于用于检测Java程序页面扰动的装置解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树,计算了第一Web页面对应的函数关系树中根节点的散列值和第二Web页面对应的函数关系树中根节点的散列值,根据第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值是否相同,确定第一Web页面和第二Web页面之间是否发生了页面扰动,若是不相同,则确定第一Web页面和第二Web页面之间发生了页面扰动;相对于现有技术中只根据页面文件是否发生变化判断第一Web页面和第二Web页面之间是否发生页面扰动的方法,本发明实施例提供的方法根据构建的函数调用关系树,能够检测出第一版本包和第二版本包之间的Java代码变更所影响的页面,进而能够准确的检测出第一Web页面和第二Web页面之间是否发生了页面扰动。

可选地,针对第一版本包和第二版本包中的任一个版本包,解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树,包括:针对第一版本包和第二版本包中的任一个版本包,执行:解析版本包中的页面文件,获得Web页面对应的至少一个URL;解析版本包中的程序配置文件以及Java类文件,得到Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系;据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;其中,函数调用关系树中,Web页面为根节点,Web页面对应的至少一个URL为第一级子节点,至少一个URL中每个URL对应的入口Java类与函数为第二级子节点;入口Java类函数直接或间接调用的各个Java类与函数为第三级子节点。

本发明实施中,在客户端的Web页面向服务器发起一个HTTP请求,HTTP请求的格式中包含URL,一个Web页面对应至少一个URL,而页面文件中包括Web页面和至少一个URL的对应关系。程序配置文件为web.xml文件,该文件中包括URL匹配规则和Web框架过滤器参数文件等,其中URL匹配规则匹配规则包括URL和Web框架的对应关系。Java类文件中包括入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系。

为了更清楚地说明本发明实施例的函数调用关系树的结构关系,以第一Web页面对应的函数调用关系树为例进行介绍。第一Web页面对应的函数调用关系树,包括根节点和至少一个子节点;其中,根节点为第一Web页面;第一Web页面的子节点为至少一个URL、至少一个URL中每个URL对应的入口Java类与函数,或入口Java类函数直接或间接调用的各个Java类与函数。其中,入口Java类与函数为URL直接调用的Java类与函数。

图2示例性示出了本发明实施例提供的第一Web页面对应的函数调用关系树。如图2所示,该函数调用关系树中根节点为第一Web页面201,子节点包括URL202、URL203、Java类与函数(C1:f1)204、Java类与函数(C2:f2)205、Java类与函数(C3:f1)206、Java类与函数(C4:f3)207、Java类与函数(C1:f2)208;其中,URL202、URL203为第一级子节点;Java类与函数(C1:f1)204和Java类与函数(C1:f2)208为第二级子节点;Java类与函数(C2:f2)205、Java类与函数(C3:f1)206、Java类与函数(C4:f3)207为第三级子节点。

根节点和各个子节点之间的关系为:第一Web页面201中包含两个HTTP请求,两个HTTP请求分别对应URL202和URL203;URL 202调用Java类与函数(C1:f1)204;Java类与函数(C1:f1)204调用Java类与函数(C2:f2)205和Java类与函数(C3:f1)206;Java类与函数(C3:f1)206调用Java类与函数(C4:f3)207;URL 203调用Java类与函数(C1:f2)208。其中,C1:f1表示Java类C1的函数f1,C2:f2表示Java类C2的函数f2,C3:f1表示Java类C3的函数f1,C4:f3表示Java类C4的函数f3,C1:f2表示Java类C1的函数f2。

本发明实施例中,根据生成的函数调用关系树,可以准确判断各个版本的Web页面之间是否受到影响。例如,确定第一Web页面对应的函数调用关系树中根节点第一Web页面是否受到影响,可通过各级子节点中Java类与函数的变化来确定;而Java类与函数的是否发生变化,可通过对Java类与函数的字节码片段进行散列值计算确定。如此,根据生成的两个版本的Web页面的函数调用关系树,可以确定两个版本的Java代码变更是否会导致两个版本的Web页面之间发生页面扰动。

可选地,解析版本包中的程序配置文件以及Java类文件,得到Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,包括:针对至少一个URL中的每个URL,执行:解析版本包中程序配置文件中的URL匹配规则,确定出URL对应的Web框架;解析版本包中程序配置文件中的Web框架过滤器参数文件,确定出URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;其中,导航规则包括URL与URL对应的入口Java类与函数的对应关系;根据Web框架的类型,确定出URL对应的导航规则解析器;使用导航规则解析器解析文件夹标识对应的文件,得到URL对应的入口Java类与函数;解析Java类文件,获取入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系。

本发明实施例中,在客户端和服务器之间的请求和响应过程中,客户端向服务器发送一个包含URL的请求,Web框架过滤器将该包含URL的请求匹配到到相应的Web框架进行处理;Web框架过滤器参数文件包括URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;Web框架的类型有多种,每一种类型的Web框架对应一种类型的导航规则解析器。

版本包中包括html文件目录、xml文件目录、class文件目录,导航规则所存储的文件夹标识用于标识导航规则具体储存在版本包中哪一个目录中;导航规则有两种存储方式,一种存储方式是以配置文件的方式存储在版本包的xml文件的目录下,另一种存储方式是以注解的方式存储在class文件目录下的Java类文件中。若导航规则所存储的文件夹标识所标识的是xml文件的目录下的配置文件,则扫描该配置文件以及该配置文件对应的class文件目录下的Java类文件,并使用导航规则解析器解析该配置文件中的导航规则,得到URL与入口Java类与函数的对应关系;若导航规则所存储的文件夹标识所标识的是class文件目录下的Java类文件,则扫描并使用导航规则解析器解析该Java类文件中的导航规则,得到URL与入口Java类与函数的对应关系。

Java类文件中包括入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系。

本发明实施例中,通过解析版本包中的程序配置文件以及Java类文件,得到至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,如此,根据得到的URL和各个Java类与函数之间的调用关系,将Web页面和各个Java类与函数关联,可通过分析不同版本中各个Java类与函数是否发生变化,进而分析不同版本的Web页面之间是否发生页面扰动。

可选地,根据函数调用关系树,计算函数调用关系树中根节点的散列值,包括:针对函数调用关系树中的每个节点,执行:获取节点在Java类文件中对应的字节码片段;根据节点对应的字节码片段,计算节点的自身散列值;若确定不存在节点直接调用的下一级节点,则将节点的自身散列值作为节点的散列值;若确定存在节点直接调用的下一级节点,则确定节点直接调用的每个下一级节点的散列值;根据节点的自身散列值,以及每个下一级节点的散列值,确定节点的散列值。

本发明实施中,源代码为程序设计语言规范编写的文本文件,字节码是通过Java编译器将源代码编译后的生成的中间代码,在分析字节码片段时,采用反编译器Javap分解Java类文件得到。例如,根据图2所示的第一Web页面对应的函数调用关系树,以图2中的Java类与函数(C1:f1)204调用Java类与函数(C2:f2)205为例,使用javap得到函数f1的字节码片段如下:

其中,0:new#16;//class com/cup/test/C2表示构建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的函数f1调用Java类C2的函数f2。

通过分析各个Java类与函数的字节码片段,可获得各个Java类与函数之间的调用关系,获取Java类与函数的字节码片段使用md5算法进行计算,得到该节点的自身散列值。对于函数调用关系树中的第二级子节点和第三级子节点,即至少一个URL中每个URL对应的入口Java类与函数、入口Java类函数直接或间接调用的各个Java类与函数,第二级子节点和第三级子节点中每个节点的自身散列值为其字节码片段的md5摘要;对于非函数节点,即根节点和第一级子节点的自身散列值的取值为空。

可选地,根据节点对应的字节码片段,计算节点的自身散列值,包括:确定节点对应的字节码片段的md5摘要,得到节点的自身散列值;根据节点的自身散列值,以及每个下一级节点的散列值,确定节点的散列值,包括:计算节点的自身散列值,以及每个下一级节点的散列值之和,得到节点的散列值。

以第一Web页面对应的的函数调用关系树为例,假设该函数调用关系树的包括M层,每层包括至少一个子节点,针对该函数调用关系树中的第i层的某一个节点,其散列值根据下述公式(1)计算:

其中,Ni表示第i层的一个子节点,c(Ni)表示子节点Ni的孩子节点的个数,Ni+1,j表示子节点Ni在第i+1层中的第j个孩子节点,md5(Nibytecode)表示子节点Ni的自身散列值,表示子节点Ni在第i+1层中的所有孩子节点的散列值的和运算。

根据上述公式(1),可计算得到第一Web页面对应的的函数调用关系树的根节点的散列值;同样的,计算得到第二Web页面对应的的函数调用关系树的根节点的散列值;如此,可以通过比较第一Web页面对应的的函数调用关系树的根节点的散列值和第二Web页面对应的的函数调用关系树的根节点的散列值是否相同,得到第一Web页面和第二Web页面之间是否发生页面扰动。若第一Web页面对应的的函数调用关系树的根节点的散列值和第二Web页面对应的的函数调用关系树的根节点的散列值相同,则确定第一Web页面和第二Web页面之间未发生页面扰动;若第一Web页面对应的的函数调用关系树的根节点的散列值和第二Web页面对应的的函数调用关系树的根节点的散列值不相同,则确定第一Web页面和第二Web页面之间发生页面扰动。本发明实施例通过函数调用关系树将Web页面、包含URL的请求以及Java类与函数进行关联,可直观展现版本变更所影响的Web页面。

可选的,若确定第一Web页面和第二Web页面之间发生页面扰动,可根据第一Web页面对应的函数调用关系树中各个子节点的散列值和第二Web页面对应的函数调用关系树中各个子节点的散列值是否相同,确定出第一Web页面对应的函数调用关系树和第二Web页面对应的函数调用关系树中散列值不相同的子节点。如此,可以确定出是哪个子节点发生了变化,进而使得第一Web页面和第二Web页面之间发生页面扰动;而且这种基于字节码片段的散列值判断各个节点是否发生变化,简化了现有技术中根据文本比对Java类与函数是否变化的判断过程,对于非叶子节点散列值的计算方式包含了API的变更情况,简化了关联代码变更的判断。

为了更清楚的介绍上述方法流程,本发明实施例提供以下示例。

图3示例性示出了本发明实施例提供的另一种检测Java程序页面扰动的方法流程示意图,如图3所示,该方法包括以下步骤:

步骤S301:用于检测Java程序页面扰动的装置获取Java程序的第一Web页面和第二Web页面,以及第一Web页面对应的第一版本包、第二Web页面对应的第二版本包;

步骤S302:用于检测Java程序页面扰动的装置针对第一版本包和第二版本包中的任一个版本包,解析版本包;

步骤S303:用于检测Java程序页面扰动的装置解析版本包中的页面文件,获得Web页面对应的至少一个URL;

步骤S304:用于检测Java程序页面扰动的装置针对至少一个URL中的每个URL,执行:解析版本包中程序配置文件中的URL匹配规则,确定出URL对应的Web框架;

步骤S305:用于检测Java程序页面扰动的装置解析版本包中程序配置文件中的Web框架过滤器参数文件,确定出URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;

步骤S306:用于检测Java程序页面扰动的装置根据Web框架的类型,确定出URL对应的导航规则解析器;

步骤S307:用于检测Java程序页面扰动的装置使用导航规则解析器解析文件夹标识对应的文件,得到URL对应的入口Java类与函数;

步骤S308:用于检测Java程序页面扰动的装置解析Java类文件,获取入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系;

步骤S309:用于检测Java程序页面扰动的装置根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;

步骤S310:用于检测Java程序页面扰动的装置根据函数调用关系树,计算函数调用关系树中根节点的散列值;

步骤S311:用于检测Java程序页面扰动的装置针对函数调用关系树中的每个节点,执行:获取节点在Java类文件中对应的字节码片段;

步骤S312:用于检测Java程序页面扰动的装置根据节点对应的字节码片段,计算节点的自身散列值;确定节点对应的字节码片段的md5摘要,得到节点的自身散列值;

步骤S313:用于检测Java程序页面扰动的装置若确定不存在节点直接调用的下一级节点,则将节点的自身散列值作为节点的散列值;

步骤S314:用于检测Java程序页面扰动的装置若确定存在节点直接调用的下一级节点,则确定节点直接调用的每个下一级节点的散列值;计算节点的自身散列值,以及每个下一级节点的散列值之和,得到节点的散列值;

步骤S315:用于检测Java程序页面扰动的装置确定第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值是否相同,若是,则执行步骤S316;若否,则执行步骤S317;

步骤S316:用于检测Java程序页面扰动的装置确定第一Web页面和第二Web页面之间未发生页面扰动;

步骤S317:用于检测Java程序页面扰动的装置确定第一Web页面和第二Web页面之间发生页面扰动。

从上述内容可以看出:本发明实施例提供的一种检测Java程序页面扰动的方法,由于用于检测Java程序页面扰动的装置解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树,计算了第一Web页面对应的函数关系树中根节点的散列值和第二Web页面对应的函数关系树中根节点的散列值,根据第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值是否相同,确定第一Web页面和第二Web页面之间是否发生了页面扰动,若是不相同,则确定第一Web页面和第二Web页面之间发生了页面扰动;相对于现有技术中只根据页面文件是否发生变化判断第一Web页面和第二Web页面之间是否发生页面扰动的方法,本发明实施例提供的方法根据构建的函数调用关系树,能够检测出第一版本包和第二版本包之间的Java代码变更所影响的页面,进而能够准确的检测出第一Web页面和第二Web页面之间是否发生了页面扰动,而且,这种基于字节码片段的散列值判断各个节点是否发生变化,简化了根据文本比对Java类与函数是否变化的判断过程。

图4示例性示出了本发明实施例提供的一种用于检测Java程序页面扰动的装置的结构示意图。

基于相同构思,本发明实施例提供的一种用于检测Java程序页面扰动的装置,用于执行上述方法流程,如图4所示,该装置400包括获取单元401和处理单元402;其中:

获取单元401,用于获取Java程序的第一Web页面和第二Web页面,以及第一Web页面对应的第一版本包、第二Web页面对应的第二版本包;

处理单元402,用于针对第一版本包和第二版本包中的任一个版本包,解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;根据函数调用关系树,计算函数调用关系树中根节点的散列值;若确定第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值不同,则确定第一Web页面和第二Web页面之间发生页面扰动。

可选地,处理单元402,用于:针对第一版本包和第二版本包中的任一个版本包,执行:解析版本包中的页面文件,获得Web页面对应的至少一个URL;解析版本包中的程序配置文件以及Java类文件,得到Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系;根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树;其中,函数调用关系树中,Web页面为根节点,Web页面对应的至少一个URL为第一级子节点,至少一个URL中每个URL对应的入口Java类与函数为第二级子节点;入口Java类函数直接或间接调用的各个Java类与函数为第三级子节点。

可选地,处理单元402,用于:针对至少一个URL中的每个URL,执行:解析版本包中程序配置文件中的URL匹配规则,确定出URL对应的Web框架;解析版本包中程序配置文件中的Web框架过滤器参数文件,确定出URL对应的Web框架的类型,以及导航规则所存储的文件夹标识;其中,导航规则包括URL与URL对应的入口Java类与函数的对应关系;根据Web框架的类型,确定出URL对应的导航规则解析器;使用导航规则解析器解析文件夹标识对应的文件,得到URL对应的入口Java类与函数;解析Java类文件,得到入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的直接调用关系。

可选地,获取单元401,用于获取节点在Java类文件中对应的字节码片段;处理单元402,用于:针对函数调用关系树中的每个节点,执行:根据节点在Java类文件中对应的字节码片段,计算节点的自身散列值;若确定不存在节点直接调用的下一级节点,则将节点的自身散列值作为节点的散列值;若确定存在节点直接调用的下一级节点,则确定节点直接调用的每个下一级节点的散列值;根据节点的自身散列值,以及每个下一级节点的散列值,确定节点的散列值。

可选地,处理单元402,用于:确定节点对应的字节码片段的md5摘要,得到节点的自身散列值;计算节点的自身散列值,以及每个下一级节点的散列值之和,得到节点的散列值。

从上述内容可以看出:由于解析版本包,根据解析得到的Web页面对应的至少一个URL、至少一个URL中每个URL对应的入口Java类与函数、入口Java类与函数直接或间接调用的各个Java类与函数,以及各个Java类与函数之间的调用关系,生成以Web页面为根节点的Web页面对应的函数调用关系树,计算了第一Web页面对应的函数关系树中根节点的散列值和第二Web页面对应的函数关系树中根节点的散列值,根据第一Web页面对应的函数调用关系树中根节点的散列值与第二Web页面对应的函数调用关系树中根节点的散列值是否相同,确定第一Web页面和第二Web页面之间是否发生了页面扰动,若是不相同,则确定第一Web页面和第二Web页面之间发生了页面扰动;相对于现有技术中只根据页面文件是否发生变化判断第一Web页面和第二Web页面之间是否发生页面扰动的方法,本发明实施例提供的方法根据构建的函数调用关系树,能够检测出第一版本包和第二版本包之间的Java代码变更所影响的页面,进而能够准确的检测出第一Web页面和第二Web页面之间是否发生了页面扰动,而且,这种基于字节码片段的散列值判断各个节点是否发生变化,简化了根据文本比对Java类与函数是否变化的判断过程。

本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1