CN110162477B - 一种第三方库版本升级的异常自动调试系统及方法 - Google Patents
一种第三方库版本升级的异常自动调试系统及方法 Download PDFInfo
- Publication number
- CN110162477B CN110162477B CN201910449608.5A CN201910449608A CN110162477B CN 110162477 B CN110162477 B CN 110162477B CN 201910449608 A CN201910449608 A CN 201910449608A CN 110162477 B CN110162477 B CN 110162477B
- Authority
- CN
- China
- Prior art keywords
- class
- test
- module
- replacement
- abnormal
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种第三方库版本升级的异常自动调试方法,涉及计算机软件异常调试技术领域,技术方案为,包括单元测试模块、类替换模块、动态加载测试模块;单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;类替换模块:该模块提供类的替换策略,将每次所要替换的类发送给动态加载测试模块进行测试;动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。本发明的有益效果是:本发明技术采用旧版本类替换部分新版本类的方法,可以对第三方包升级后产生的异常自动排查与修复。本发明给出的所需替换类搜索技术与快速测试方法,使第三方包版本升级所导致异常的自动修复有着较高的效率。
Description
技术领域
本发明涉及计算机软件异常调试领域,特别涉及一种第三方库版本升级的异常自动调试系统及方法。
背景技术
日常软件项目开发过程中,随着功能复杂度的提高及框架技术发展,项目的完成越来越依赖于第三方库的引用。然而,第三方库独立于项目,其厂商或者社区会自行的升级第三方库。第三方库出现新版本时,开发人员为了维护项目的稳定性会选择不升级第三方库。然而,当工程需要使用依赖第三方库新版本的新功能时,不得不被迫升级第三方库。
升级第三方库后,一些模块会因第三库类的变动出现异常。这就需要开发人员紧急修改BUG排除异常。当异常过多时,开发人员往往措手不及。针对这一问题本发明提出一种第三方库版本升级的异常自动调试方法,该技术可以自动尝试升级第三方库,当出现异常时,对部分涉及的类进行降级,即恢复旧版本的类。保障项目正常平稳运行的同时,尽可能的使用升级后版本的类。其使得开发人员在不处理异常的情况下,最大可能的使用第三方库新功能,也可以提示在出完全升级后,异常涉及的类有哪些,加快修复异常的效率。
发明内容
针对上述技术问题,本发明提供一种第三方库版本升级的异常自动调试系统及方法。
其技术方案为,包括单元测试模块、类替换模块、动态加载测试模块;
单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;
类替换模块:该模块提供类的替换策略,将每次所要替换的类发送给动态加载测试模块进行测试;
动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。
第三方库版本升级的异常自动调试系统的调试方法,包括,
S1、引入新版本的第三方升级包;
S2、依次对维护工程中调用该包的模块用所述单元测试模块进行单元测试;
S3、若S2所述单元测试模块检测结果均为正常,则结束测试;
S4、若S2所述单元测试模块检测结果均为异常,由单元测试模块将该异常的报告发送给类替换模块;
S5、所述类替换模块根据S4发来的异常报告,执行类替换策略,并将所要替换的类发送给所述动态加载测试模块进行测试;
S6、如果动态加载测试模块测试结果为无异常,则结束测试;
S7、如果动态加载测试模块测试结果为异常,则将测试的结果返回给类替换模块;由类替换模块重复步骤S5。
优选为,所述类替换模块的替换策略为对第三方升级包进行降级处理,具体为一种基于宽度优先搜索依赖类的宽度优先类降级方法;
S501、对于一个异常的单元测试建立类依赖图D;
S504、执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过;若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换;将替换的类加入集合T;
S505、设最后一个替换类为e,O←O∪{e},T←T-{e};
S506、D←D∩T,即对依赖图D剪枝,只保留T的节点与依赖连接;
S507、将O中的类都替换为旧版本类;
S508、重复步骤S503到S506,足步骤D的结束条件;最后集合O即为要替换的类。
优选为,动态加载测试模块。在宽度优先类降级方法中,每替换一个类就要执行一次单元测试。通常情况下每次单元测试都要重新加载内存环境,如JAVA要重启一次JVM,这会导致较长的耗时。该模块提供一种基于动态加载类的测试方法,该方法可以无需重新加载内存环境的条件下,动态的完成类及实例的替换,完成多次的单元测试。以JAVA为例,具体步骤如下:
A.根据类降级方法依次产生要替换的类。设当前要替换的类为A。如图2类降级方法中的黑色标记类。
B.搜索所有依赖A的类,设为集合Φ。如图2的左侧类集中,黑色标记的类。
C.动态加载旧版本类文件到JVM虚拟机中,可以使用以源码加载:
ClassLoader classLoader=MainClass.class.getClassLoader();
Class aClass=classLoader.loadClass("com.OldClass");
对A的实例进行深度复制,即保留所有可以保留的变量值与对象。对于Φ中类所对应的实例,其依赖的实例A更新为深度复制后的实例。
本发明实施例提供的技术方案带来的有益效果是:1)本发明技术采用旧版本类替换部分新版本类的方法,可以对第三方包升级后产生的异常自动排查与修复。
2)本发明给出的所需替换类搜索技术与快速测试方法,使第三方包版本升级所导致异常的自动修复有着较高的效率。
附图说明
图1为本发明实施例的第三方库版本升级的异常自动调试方法结构图。
图2为本发明实施例的基于动态加载的类替换方法示意图。
图3为本发明实施例的类的依赖关系图。
图4为本发明实施例的方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
需要说明的是,在不冲突的情况下,本发明创造中的实施例及实施例中的特征可以相互组合。
在本发明创造的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明创造中的具体含义。
实施例1
参见图1至图4,本发明提供一种第三方库版本升级的异常自动调试系统,主要由以下模块组成:单元测试模块、类替换模块、动态加载测试模块,如图1。
1、单元测试模块。
该模块基于单元测试检测异常,将异常发送到类替换模块。
2、类替换模块。该模块提供一种的类的替换策略。
类替换策略步骤如下:A)引入新版本的第三方包。B)依次对维护工程中调用该包的模块进行单元测试。C)若异常,则对第三方包的类降级处理,即使用旧版本的类继续进行单元测试,直到单元测试正确。
当单元测试出现异常,说明第三方包升级的版本不适用于工程,需要降级处理。降级时不能简单的用旧版本的类替换新版本的类,因为原有类会继承或者依赖其他类,这些类的版本是否替换为旧版本的类还需要进一步讨论。如图3,圆形表示类,实心圆表示新版本类,空心圆表示旧版本类,箭头表示类的继承或者依赖。可以看出类的依赖关系错综复杂,即一个旧版本类所依赖的类有时也需要降级为旧版本(空心圆),有时不需要降级(实心圆)。降级的原则是在保证单元测试正确的前提下,尽可能将更少的类降级为旧版本的类。
对于类的降级处理,本发明提出一种宽度优先类降级方法,该方法的思想基于宽度优先搜索依赖类,尝试替换为旧版本类,直到通过单元测试。具体步骤如下:
1)对于一个异常的单元测试建立一个类似于图3的类依赖图D。
4)执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过。若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换。将替换的类加入集合T。
5)设最后一个替换类为e,O←O∪{e},T←T-{e}。
6)D←D∩T,即对依赖图D剪枝,只保留T的节点与依赖连接。
7)将O中的类都替换为旧版本类。
8)重复步骤3到6,直到满足步骤4的结束条件。最后集合O即为要替换的类。
类替换模块,将每次所要替换的类发送给动态加载测试模块进行测试,而动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。
3、动态加载测试模块。在宽度优先类降级方法中,每替换一个类就要执行一次单元测试。通常情况下每次单元测试都要重新加载内存环境,如JAVA要重启一次JVM,这会导致较长的耗时。该模块提供一种基于动态加载类的测试方法,该方法可以无需重新加载内存环境的条件下,动态的完成类及实例的替换,完成多次的单元测试。以JAVA为例,具体步骤如下:
A.根据类降级方法依次产生要替换的类。设当前要替换的类为A。
B.搜索所有依赖A的类,设为集合Φ。
C.动态加载旧版本类文件到JVM虚拟机中,可以使用以源码加载:
ClassLoader classLoader=MainClass.class.getClassLoader();
Class aClass=classLoader.loadClass("com.OldClass");
对A的实例进行深度复制,即保留所有可以保留的变量值与对象。对于Φ中类所对应的实例,其依赖的实例A更新为深度复制后的实例。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种第三方库版本升级的异常自动调试系统,其特征在于,包括单元测试模块、类替换模块、动态加载测试模块;
单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;
类替换模块:该模块提供类的替换策略,将每次所需替换的类发送给动态加载测试模块进行测试;
动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法;
所述异常自动调试系统的调试方法包括:
S1、引入新版本的第三方升级包;
S2、依次对维护工程中调用该包的模块用所述单元测试模块进行单元测试;
S3、若S2所述单元测试模块检测结果均为正常,则结束测试;
S4、若S2所述单元测试模块检测结果均为异常,由单元测试模块将该异常的报告发送给类替换模块;
S5、所述类替换模块根据S4发来的异常报告,执行类替换策略,并将所要替换的类发送给所述动态加载测试模块进行测试;
S6、如果动态加载测试模块测试结果为无异常,则结束测试;
S7、如果动态加载测试模块测试结果为异常,则将测试的结果返回给类替换模块;由类替换模块重复步骤S5;
其中,所述类替换模块的替换策略基于对第三方升级包进行降级处理完成,具体为一种基于宽度优先搜索依赖类的宽度优先类降级方法;
S501、对于一个异常的单元测试建立类依赖图D;
S504、执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过;若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换;将替换的类加入集合T;
S506、D←D∩T,即对依赖图D剪枝,只保留T的节点与依赖连接;
S507、将O中的类都替换为旧版本类;
S508、重复步骤S503到S506,直到满足步骤S504的结束任务的条件;最后集合即为要替换的类。
2.一种第三方库版本升级的异常自动调试方法,其特征在于,包括,
S1、引入新版本的第三方升级包;
S2、依次对维护工程中调用该包的模块进行单元测试;
S3、若S2单元测试检测结果均为正常,则结束测试;
S4、若S2单元测试检测结果均为异常,将该异常的报告转入S5类替换环节;
S5、根据S4的异常报告,执行类替换策略,并将所要替换的类进行动态加载测试;
S6、如果动态加载测试的测试结果为无异常,则结束测试;
S7、如果动态加载测试的测试结果为异常,则返回步骤S5;
其中,所述类替换策略为对第三方升级包进行类降级处理,具体为一种基于宽度优先搜索依赖类的宽度优先类降级方法;
S501、对于一个异常的单元测试建立类依赖图D;
S504、执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过;若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换;将替换的类加入集合T;
S505、设最后一个替换类为e,O←O∪{e},T←T-{e};
S506、D←D∩T,即对依赖图D剪枝,只保留T的节点与依赖连接;
S507、将O中的类都替换为旧版本类;
S508、重复步骤S503到S506,直到满足步骤S504的结束任务的条件;最后集合即为要替换的类。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910449608.5A CN110162477B (zh) | 2019-05-28 | 2019-05-28 | 一种第三方库版本升级的异常自动调试系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910449608.5A CN110162477B (zh) | 2019-05-28 | 2019-05-28 | 一种第三方库版本升级的异常自动调试系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110162477A CN110162477A (zh) | 2019-08-23 |
CN110162477B true CN110162477B (zh) | 2022-11-22 |
Family
ID=67629271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910449608.5A Active CN110162477B (zh) | 2019-05-28 | 2019-05-28 | 一种第三方库版本升级的异常自动调试系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110162477B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258614B (zh) * | 2020-05-06 | 2020-08-07 | 深圳开源互联网安全技术有限公司 | 项目第三方库升级异常检测方法及系统、设备及存储介质 |
CN112860312A (zh) * | 2021-02-19 | 2021-05-28 | 百果园技术(新加坡)有限公司 | 项目依赖关系变化的检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222037B (zh) * | 2010-04-15 | 2014-04-02 | 国际商业机器公司 | 用于定位java程序的瓶颈的方法和设备 |
US8898628B2 (en) * | 2011-09-23 | 2014-11-25 | Ahmad RAZA | Method and an apparatus for developing software |
CN105701005B (zh) * | 2014-11-28 | 2018-09-18 | 阿里巴巴集团控股有限公司 | 基于osgi的应用框架测试方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7039923B2 (en) * | 2002-04-19 | 2006-05-02 | Sun Microsystems, Inc. | Class dependency graph-based class loading and reloading |
JP2013514569A (ja) * | 2009-12-18 | 2013-04-25 | シダンスク ユニバーシティ | 静的に型付けされたクラスベースのオブジェクト指向ソフトウェアのノンブロッキング動的更新の方法、コンピュータ・プログラム製品、およびシステム |
CN101807168B (zh) * | 2010-03-15 | 2011-11-16 | 北京航空航天大学 | 一种支持版本兼容的数字终端测试环境及其构建方法 |
CN107678776A (zh) * | 2017-08-09 | 2018-02-09 | 上海壹账通金融科技有限公司 | 多模块版本依赖关系构建方法、装置、服务器和存储介质 |
US10678513B2 (en) * | 2017-09-12 | 2020-06-09 | Devfactory Fz-Llc | Library upgrade method, apparatus, and system |
CN108363612A (zh) * | 2018-03-07 | 2018-08-03 | 江苏电力信息技术有限公司 | 基于类装载器实现的j2ee模块热部署及调用信息统计方法 |
CN109189663B (zh) * | 2018-07-12 | 2021-10-29 | 武汉精测电子集团股份有限公司 | 一种插件调试方法、测试方法及微内核架构系统 |
-
2019
- 2019-05-28 CN CN201910449608.5A patent/CN110162477B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222037B (zh) * | 2010-04-15 | 2014-04-02 | 国际商业机器公司 | 用于定位java程序的瓶颈的方法和设备 |
US8898628B2 (en) * | 2011-09-23 | 2014-11-25 | Ahmad RAZA | Method and an apparatus for developing software |
CN105701005B (zh) * | 2014-11-28 | 2018-09-18 | 阿里巴巴集团控股有限公司 | 基于osgi的应用框架测试方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110162477A (zh) | 2019-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9703677B2 (en) | Code coverage plugin | |
CN102402427B (zh) | 一种Java应用程序的更新方法及装置 | |
EP2829970B1 (en) | A method and apparatus for porting source code | |
US9824223B2 (en) | System and method for automated remedying of security vulnerabilities | |
CN103778061B (zh) | 数组越界错误的自动检测和校正方法 | |
US8516464B2 (en) | Computer system and method for resolving dependencies in a computer system | |
US11748245B2 (en) | Object-oriented regression-candidate filter | |
US8978009B2 (en) | Discovering whether new code is covered by tests | |
US20070220492A1 (en) | Application verifier infrastructure and checks | |
US8448147B2 (en) | Heterogenic Coverage Analysis | |
CN105468529A (zh) | 一种安卓应用ui控件精准遍历方法和装置 | |
CN108762825B (zh) | 动态库重载的实现方法及系统 | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
CN110162477B (zh) | 一种第三方库版本升级的异常自动调试系统及方法 | |
CN105573915A (zh) | 一种基于代码覆盖率的测试方法和装置 | |
CN112965913B (zh) | 一种Java软件依赖冲突问题自动化修复的方法 | |
US11880674B2 (en) | Adaptive hot reload for class changes | |
US9396097B2 (en) | Methods, circuits, devices, systems and associated computer executable code for testing software code | |
CN115757149A (zh) | 一种自动化测试方法、系统、电子设备及存储介质 | |
CN112558947B (zh) | 程序调用追踪方法、装置以及存储介质 | |
Huang et al. | Pallas: Semantic-aware checking for finding deep bugs in fast path | |
CN114371949A (zh) | 应用程序异常的处理方法、装置、设备及存储介质 | |
US20150331772A1 (en) | Methods for updating diagnostic tools on a hardware device and devices thereof | |
Miller et al. | Smart libraries: Best SQE practices for libraries with an emphasis on scientific computing | |
EP3983884A1 (en) | Detecting misconfiguration and/or bug(s) in large service(s) using correlated change analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |