一种探测java程序文件扰动的方法及装置的制作方法

文档序号:6362745阅读:192来源:国知局
专利名称:一种探测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日
发明者马治国, 何思远 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1