CN103559132B - 一种java应用程序健壮性的检测方法和装置 - Google Patents

一种java应用程序健壮性的检测方法和装置 Download PDF

Info

Publication number
CN103559132B
CN103559132B CN201310552552.9A CN201310552552A CN103559132B CN 103559132 B CN103559132 B CN 103559132B CN 201310552552 A CN201310552552 A CN 201310552552A CN 103559132 B CN103559132 B CN 103559132B
Authority
CN
China
Prior art keywords
javaclass
sum
file
jar
attribute information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310552552.9A
Other languages
English (en)
Other versions
CN103559132A (zh
Inventor
陈福洪
彭定邦
张银全
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201310552552.9A priority Critical patent/CN103559132B/zh
Publication of CN103559132A publication Critical patent/CN103559132A/zh
Application granted granted Critical
Publication of CN103559132B publication Critical patent/CN103559132B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种JAVA应用程序健壮性的检测方法和装置。该方法包括:扫描待检测的JAVA应用程序依赖的每个jar包所包含的java?class文件属性信息,记录每个jar包的java?class文件列表;将每个jar包的java?class文件列表分别与其他jar包的java?class文件列表进行比较,确定出被比较的两个jar包中均包含的属性信息相同的java?class文件;根据所述属性信息相同的java?class文件输出健壮性检测结果。应用本发明能够在实际运行之前就检测出JAVA应用程序的健壮性,从而有利于提高JAVA应用程序的健壮性和基于JAVA应用程序的系统的稳定性。

Description

一种JAVA应用程序健壮性的检测方法和装置
技术领域
本申请涉及信息处理技术领域,尤其涉及一种JAVA应用程序健壮性的检测方法和装置。
背景技术
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言。JAVA应用程序常常依赖于多个JAR包,JAR包中通常包括javaclass文件,所述javaclass文件主要用于在平台无关性和网络移动性方面使Java应用程序更适合网络,它在平台无关性方面的任务是:为Java应用程序提供独立于底层主机平台的二进制形式的服务。
JAVA虚拟机(JavaVirtualMachine,JVM)在加载JAVA应用程序时,JVM根据javaclass文件的属性信息判断javaclass文件是否已经被加载过了,如果JVM发现一个javaclass文件已经加载过了,则后面如果出现相同的javaclass文件,JVM就不会再被加载了。其中,所述属性信息通常包括javaclass文件的文件名、签名和路径信息。
有时,JAVA应用程序依赖于多个属性信息相同但是内在逻辑不同的javaclass文件,由于JVM在加载JAVA应用程序时根据javaclass文件的属性信息判断该javaclass文件是否已经被加载过了,如果已经被加载过了,就不再加载,因此,将导致JAVA应用程序在运行时出现诸如“没有找到这样的类(java.lang.NoClassDefFoundError)”或“没有这样的方法(java.lang.NoSuchMethodException)”的错误,并且,由于JAVA应用程序中各个javaclass文件的加载顺序只有在实际运行JAVA应用程序时才能够确定,因此,这类错误只有在JAVA应用程序运行时才能够被发现。
可见,在现有的JVM类加载机制下,JAVA应用程序的健壮性较差,并且,JAVA应用程序的健壮性如何只有在实际运行时才能够被发现,不利于提高JAVA应用程序的健壮性,导致基于JAVA应用程序的系统的稳定性较差。
发明内容
有鉴于此,本发明提供了一种JAVA应用程序健壮性的检测方法和装置,能够在实际运行之前就检测出JAVA应用程序的健壮性,从而有利于提高JAVA应用程序的健壮性和基于JAVA应用程序的系统的稳定性。
一种JAVA应用程序健壮性的检测方法,该方法包括:
扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表;
将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件;
根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果。
一种JAVA应用程序健壮性的检测装置,该装置包括扫描模块、检测模块和输出模块;
所述扫描模块,用于扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表;
所述检测模块,用于将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件;
所述输出模块,用于根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果。
由上述技术方案可见,由于本发明实施例中,通过扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表,将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件,根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果。由于上述扫描的步骤、记录的步骤、比较的步骤、以及根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件输出所述JAVA应用程序健壮性的检测结果的步骤,均不依赖于JAVA应用程序的运行,因此,本发明实施例能够在JAVA应用程序实际运行之前就检测出JAVA应用程序中各个jar包之间的javaclass文件冲突问题,各个jar包之间的javaclass文件冲突问题反映了JAVA应用程序的健壮性,因而,通过本发明实施例,能够在JAVA应用程序实际运行之前就检测出其健壮性,从而有利于提高JAVA应用程序的健壮性和基于JAVA应用程序的系统的稳定性。
附图说明
图1是本发明实施例提供的JAVA应用程序健壮性的检测方法流程图。
图2是本发明实施例提供的JAVA应用程序健壮性的检测装置结构图。
具体实施方式
图1是本发明实施例提供的JAVA应用程序健壮性的检测方法流程图。
如图1所示,该流程包括:
步骤101,扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表。
所述javaclass文件属性信息是JVM在加载JAVA应用程序中的javaclass文件时用于区分不同的javaclass文件所依据的信息,由于目前JVM依据javaclass文件的文件名、签名和路径信息区分不同的javaclass文件,因此,为了适应目前的JVM,本发明实施例中,所述javaclass文件属性信息通常包括:所述javaclass文件的文件名、签名和路径信息。
步骤102,将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件。
例如,JAVA应用程序包括3个jar包,分别为jar包1、jar包2、jar包3,将jar包1的javaclass文件列表分别与jar包2的javaclass文件列表和jar包3的javaclass文件列表进行比较,当将jar包1的javaclass文件列表与jar包2的javaclass文件列表进行比较时,确定出jar包1的javaclass文件列表与jar包2的javaclass文件列表均包含的属性信息相同的javaclass文件,当将jar包1的javaclass文件列表与jar包3的javaclass文件列表进行比较时,确定出jar包1的javaclass文件列表与jar包3的javaclass文件列表均包含的属性信息相同的javaclass文件,以此类推,可以将JAVA应用程序的每两个jar包的javaclass文件列表都进行比较并确定出其javaclass文件列表均包含的属性信息相同的javaclass文件。
步骤103,根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果。
由图1可见,本发明实施例提供的JAVA应用程序健壮性的检测方法中所涉及的各个步骤均不依赖于JAVA应用程序的运行,因此,本发明实施例能够在JAVA应用程序实际运行之前就检测出JAVA应用程序的健壮性,从而便于开发人员或维护人员根据健壮性检测结果对JAVA应用程序进行优化,进而有利于提高JAVA应用程序的健壮性和基于JAVA应用程序的系统的稳定性。
其中,输出所述JAVA应用程序健壮性的检测结果具体可以包括:输出被比较的两个jar包的javaclass文件冲突列表,和/或输出被比较的两个jar包之间的javaclass文件冲突率。
其中,当输出被比较的两个jar包的javaclass文件冲突列表时,具体可以输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息,或者,输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息,以及所述被比较的两个jar包的信息。
当输出被比较的两个jar包之间的javaclass文件冲突率时,具体可以包括如下步骤:
根据被比较的两个jar包中第一被比较jar包的javaclass文件列表的javaclass文件的第一总数、第二被比较jar包的javaclass文件列表的javaclass文件的第二总数、以及所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的第三总数,确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数;根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率。
其中,所述确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数具体可以包括:
将所述第一总数与所述第二总数之和,减去所述第三总数的2倍所得的差,确定为所述第四总数。
根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率具体可以包括:
将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第一总数,将所得的商确定为所述第一被比较jar包的javaclass文件冲突率;和/或,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第二总数,将所得的商确定为所述第二被比较jar包的javaclass文件冲突率。
根据本发明实施例提供的JAVA应用程序健壮性的检测方法,本发明实施例还提供了一种JAVA应用程序健壮性的检测装置,具体请参见图2。
图2是本发明实施例提供的JAVA应用程序健壮性的检测装置结构图,如图2所示,该装置包括扫描模块201、检测模块202和输出模块203。
扫描模块201,用于扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表。
检测模块202,用于将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件。
输出模块203,用于根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果。
其中,输出模块203,具体可以用于输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息;或者,输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息,以及所述被比较的两个jar包的信息。
输出模块203,具体可以用于根据被比较的两个jar包中第一被比较jar包的javaclass文件列表的javaclass文件的第一总数、第二被比较jar包的javaclass文件列表的javaclass文件的第二总数、以及所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的第三总数,确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数,根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率。
输出模块203,具体可以用于将所述第一总数与所述第二总数之和,减去所述第三总数的2倍所得的差,确定为所述第四总数,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第一总数,将所得的商确定为所述第一被比较jar包的javaclass文件冲突率,和/或,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第二总数,将所得的商确定为所述第二被比较jar包的javaclass文件冲突率,输出所述第一被比较jar包的javaclass文件冲突率和/或所述第二被比较jar包的javaclass文件冲突率。
其中,所述javaclass文件属性信息包括:所述javaclass文件的文件名、签名和路径信息。
由上述实施例可见,本发明实施例能够基于分析java字节码文件,通过快速检测java应用程序中存在的jar包版本冲突问题(即不同版本的jar包中包含属性信息相同但是内在逻辑不同的javaclass文件的问题),给出java应用程序的健壮性信息,从而可以帮助应用程序提高稳定性与健壮性,减少错误与事故发生的概率。在一些集成开发环境(IntegratedDevelopmentEnvironment,IDE)等工具中集成本发明实施例提供的方法或装置,可以提高所开发的JAVA应用程序的健壮性。
本发明实施例提供的方法和装置具体可以以独立的检测工具的形态存在,或者以插件等方式集成到其他工具中。
本发明实施例提供的方法和装置可应用于以java语言开发应用程序或管理java应用的系统中,例如,java容器、基于java语言的自动部署系统、自动编译系统、持续集成系统等,用于帮助java应用程序及时发现自身存在的代码冲突问题、提高java应用程序健壮性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (8)

1.一种JAVA应用程序健壮性的检测方法,其特征在于,该方法包括:
扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表;
将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件;
根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果;
其中,根据所述被比较的两个jar包中均包含的属性信息相同的javaclass文件,输出所述JAVA应用程序健壮性的检测结果包括:
根据被比较的两个jar包中第一被比较jar包的javaclass文件列表的javaclass文件的第一总数、第二被比较jar包的javaclass文件列表的javaclass文件的第二总数、以及所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的第三总数,确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数;
根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率。
2.根据权利要求1所述的方法,其特征在于,输出所述JAVA应用程序健壮性的检测结果包括:
输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息;
或者,输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息,以及所述被比较的两个jar包的信息。
3.根据权利要求2所述的方法,其特征在于,所述确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数包括:
将所述第一总数与所述第二总数之和,减去所述第三总数的2倍所得的差,确定为所述第四总数;
根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率包括:
将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第一总数,将所得的商确定为所述第一被比较jar包的javaclass文件冲突率;
和/或,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第二总数,将所得的商确定为所述第二被比较jar包的javaclass文件冲突率。
4.根据权利要求2所述的方法,其特征在于,所述javaclass文件属性信息包括:所述javaclass文件的文件名、签名和路径信息。
5.一种JAVA应用程序健壮性的检测装置,其特征在于,该装置包括扫描模块、检测模块和输出模块;
所述扫描模块,用于扫描待检测的JAVA应用程序依赖的每个jar包所包含的javaclass文件属性信息,根据扫描结果记录每个jar包所包含的javaclass文件列表;
所述检测模块,用于将每个jar包所包含的javaclass文件列表分别与其他jar包所包含的javaclass文件列表进行比较,根据每次比较的结果,确定出被比较的两个jar包中均包含的属性信息相同的javaclass文件;
所述输出模块,用于根据被比较的两个jar包中第一被比较jar包的javaclass文件列表的javaclass文件的第一总数、第二被比较jar包的javaclass文件列表的javaclass文件的第二总数、以及所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的第三总数,确定所述被比较的两个jar包中所包含的属性信息不同的javaclass文件的第四总数,根据所述第一总数、第二总数和第四总数,输出所述被比较的两个jar包之间的javaclass文件冲突率。
6.根据权利要求5所述的装置,其特征在于,
所述输出模块,用于输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息;或者,输出所述被比较的两个jar包中均包含的属性信息相同的javaclass文件的个数和/或属性信息,以及所述被比较的两个jar包的信息。
7.根据权利要求6所述的装置,其特征在于,
所述输出模块,用于将所述第一总数与所述第二总数之和,减去所述第三总数的2倍所得的差,确定为所述第四总数,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第一总数,将所得的商确定为所述第一被比较jar包的javaclass文件冲突率,和/或,将所述第一总数与所述第二总数之和减去所述第四总数所得的差,除以所述第二总数,将所得的商确定为所述第二被比较jar包的javaclass文件冲突率,输出所述第一被比较jar包的javaclass文件冲突率和/或所述第二被比较jar包的javaclass文件冲突率。
8.根据权利要求6所述的装置,其特征在于,所述javaclass文件属性信息包括:所述javaclass文件的文件名、签名和路径信息。
CN201310552552.9A 2013-11-08 2013-11-08 一种java应用程序健壮性的检测方法和装置 Active CN103559132B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310552552.9A CN103559132B (zh) 2013-11-08 2013-11-08 一种java应用程序健壮性的检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310552552.9A CN103559132B (zh) 2013-11-08 2013-11-08 一种java应用程序健壮性的检测方法和装置

Publications (2)

Publication Number Publication Date
CN103559132A CN103559132A (zh) 2014-02-05
CN103559132B true CN103559132B (zh) 2016-03-16

Family

ID=50013383

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310552552.9A Active CN103559132B (zh) 2013-11-08 2013-11-08 一种java应用程序健壮性的检测方法和装置

Country Status (1)

Country Link
CN (1) CN103559132B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105630463B (zh) * 2014-10-28 2019-07-09 阿里巴巴集团控股有限公司 用于检测jar包冲突的方法及装置
CN105653458B (zh) * 2016-01-06 2018-12-18 北京京东尚科信息技术有限公司 检测目标Java项目中的高耗时Java方法的方法和装置
CN106874184B (zh) * 2016-12-21 2020-07-14 阿里巴巴集团控股有限公司 一种Java代码检测方法及装置
CN108628751B (zh) * 2018-05-17 2021-06-11 北京三快在线科技有限公司 一种无用依赖项检测方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101719074A (zh) * 2009-12-17 2010-06-02 金蝶软件(中国)有限公司 补丁实现方法及装置
CN102779093A (zh) * 2012-07-04 2012-11-14 复旦大学 对象粒度收集的Java不变式检测系统
CN103198011A (zh) * 2012-01-09 2013-07-10 阿里巴巴集团控股有限公司 一种探测java 程序文件扰动的方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5057539B2 (ja) * 2006-11-13 2012-10-24 日本証券テクノロジー株式会社 Java(登録商標)言語プログラムを用いた大規模業務系の影響分析を行うプログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101719074A (zh) * 2009-12-17 2010-06-02 金蝶软件(中国)有限公司 补丁实现方法及装置
CN103198011A (zh) * 2012-01-09 2013-07-10 阿里巴巴集团控股有限公司 一种探测java 程序文件扰动的方法及装置
CN102779093A (zh) * 2012-07-04 2012-11-14 复旦大学 对象粒度收集的Java不变式检测系统

Also Published As

Publication number Publication date
CN103559132A (zh) 2014-02-05

Similar Documents

Publication Publication Date Title
US8914780B2 (en) Incremental generation of managed assemblies
CN105630463B (zh) 用于检测jar包冲突的方法及装置
US9792114B1 (en) Source code element signatures
CN103559132B (zh) 一种java应用程序健壮性的检测方法和装置
CN101382914B (zh) 软件更新文件的测试方法和装置
US20140130016A1 (en) Offline type checking in programming languages
CN105760292B (zh) 一种用于单元测试的断言验证方法和装置
US20150106663A1 (en) Hash labeling of logging messages
US9021455B2 (en) Packed data objects
CN103186468B (zh) 一种验证软件升级准确性的方法和装置
CN106095501A (zh) 一种应用部署方法及装置
CN111027054A (zh) 基于安卓系统判断应用程序在多开环境中运行方法、系统
CN112099880B (zh) 场景驱动的应用程序约减方法和系统
US9658845B2 (en) Generating a where-used objects list for updating data
CN108279940A (zh) 一种web容器中的模块加载方法和装置
CN106681783A (zh) 一种svn代码检测方法及其系统
Dai et al. Dscope: Detecting real-world data corruption hang bugs in cloud server systems
US20120159515A1 (en) Sharing object representations
US9891911B2 (en) Software development work item management system
CN103823665A (zh) 一种sdk活跃度分析方法、网络服务器及系统
CN102256242A (zh) 一种处理业务应用的系统和方法
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN117708857A (zh) 一种对电子档案进行检测的方法、装置、电子设备及介质
CN106406923A (zh) 动态库文件的处理方法及装置
CN103778114B (zh) 文件修复系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant