一种第三方库版本升级的异常自动调试系统及方法技术方案

技术编号:21952155 阅读:36 留言:0更新日期:2019-08-24 17:36
本发明专利技术公开了一种第三方库版本升级的异常自动调试方法,涉及计算机软件异常调试技术领域,技术方案为,包括单元测试模块、类替换模块、动态加载测试模块;单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;类替换模块:该模块提供类的替换策略,将每次所要替换的类发送给动态加载测试模块进行测试;动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。本发明专利技术的有益效果是:本发明专利技术技术采用旧版本类替换部分新版本类的方法,可以对第三方包升级后产生的异常自动排查与修复。本发明专利技术给出的所需替换类搜索技术与快速测试方法,使第三方包版本升级所导致异常的自动修复有着较高的效率。

An Automatic Debugging System and Method for Version Upgrading of Third Party Library

【技术实现步骤摘要】
一种第三方库版本升级的异常自动调试系统及方法
本专利技术涉及计算机软件异常调试领域,特别涉及一种第三方库版本升级的异常自动调试系统及方法。
技术介绍
日常软件项目开发过程中,随着功能复杂度的提高及框架技术发展,项目的完成越来越依赖于第三方库的引用。然而,第三方库独立于项目,其厂商或者社区会自行的升级第三方库。第三方库出现新版本时,开发人员为了维护项目的稳定性会选择不升级第三方库。然而,当工程需要使用依赖第三方库新版本的新功能时,不得不被迫升级第三方库。升级第三方库后,一些模块会因第三库类的变动出现异常。这就需要开发人员紧急修改BUG排除异常。当异常过多时,开发人员往往措手不及。针对这一问题本专利技术提出一种第三方库版本升级的异常自动调试方法,该技术可以自动尝试升级第三方库,当出现异常时,对部分涉及的类进行降级,即恢复旧版本的类。保障项目正常平稳运行的同时,尽可能的使用升级后版本的类。其使得开发人员在不处理异常的情况下,最大可能的使用第三方库新功能,也可以提示在出完全升级后,异常涉及的类有哪些,加快修复异常的效率。
技术实现思路
针对上述技术问题,本专利技术提供一种第三方库版本升级的异常自动调试系统及方法。其技术方案为,包括单元测试模块、类替换模块、动态加载测试模块;单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;类替换模块:该模块提供类的替换策略,将每次所要替换的类发送给动态加载测试模块进行测试;动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。第三方库版本升级的异常自动调试系统的调试方法,包括,S1、引入新版本的第三方升级包;S2、依次对维护工程中调用该包的模块用所述单元测试模块进行单元测试;S3、若S2所述单元测试模块检测结果均为正常,则结束测试;S4、若S2所述单元测试模块检测结果均为异常,由单元测试模块将该异常的报告发送给类替换模块;S5、所述类替换模块根据S4发来的异常报告,执行类替换策略,并将所要替换的类发送给所述动态加载测试模块进行测试;S6、如果动态加载测试模块测试结果为无异常,则结束测试;S7、如果动态加载测试模块测试结果为异常,则将测试的结果返回给类替换模块;由类替换模块重复步骤S5。优选为,所述类替换模块的替换策略为对第三方升级包进行降级处理,具体为一种基于宽度优先搜索依赖类的宽度优先类降级方法;S501、对于一个异常的单元测试建立类依赖图D;S502、设置替换集合S503、设置遍历集合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虚拟机中,可以使用以源码加载:ClassLoaderclassLoader=MainClass.class.getClassLoader();ClassaClass=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。2)设置替换集合3)设置遍历集合4)执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过。若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换。将替换的类加入集合T。5)设最后一个替换类为e,O←O∪{e},T←T-{e}。6)D←D∩T,即对依赖图D剪枝,只保留T的节点与依赖连接。7)将O中的类都替换为旧版本类。8)重复步骤3到6,直到本文档来自技高网...

【技术保护点】
1.一种第三方库版本升级的异常自动调试系统,其特征在于,包括单元测试模块、类替换模块、动态加载测试模块;单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;类替换模块:该模块提供类的替换策略,将每次所需替换的类发送给动态加载测试模块进行测试;动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。

【技术特征摘要】
1.一种第三方库版本升级的异常自动调试系统,其特征在于,包括单元测试模块、类替换模块、动态加载测试模块;单元测试模块:该模块基于单元测试检测异常,将异常发送到类替换模块;类替换模块:该模块提供类的替换策略,将每次所需替换的类发送给动态加载测试模块进行测试;动态加载测试模块:动态加载测试模块将测试的结果返回给类替换模块,以继续执行算法。2.根据权利要求1所述的第三方库版本升级的异常自动调试系统的调试方法,其特征在于,S1、引入新版本的第三方升级包;S2、依次对维护工程中调用该包的模块用所述单元测试模块进行单元测试;S3、若S2所述单元测试模块检测结果均为正常,则结束测试;S4、若S2所述单元测试模块检测结果均为异常,由单元测试模块将该异常的报告发送给类替换模块;S5、所述类替换模块根据S4发来的异常报告,执行类替换策略,并将所要替换的类发送给所述动态加载测试模块进行测试;S6、如果动态加载测试模块测试结果为无异常,则结束测试;S7、如果动态加载测试模块测试结果为异常,则将测试的结果返回给类替换模块;由类替换模块重复步骤S5。3.根据权利要求2所述的第三方库版本升级的异常自动调试方法,其特征在于,所述类替换模块的替换策略基于对第三方升级包进行降级处理完成,具体为一种基于宽度优先搜索依赖类的宽度优先类降级方法;S501、对于一个异常的单元测试建立类依赖图D;S502、设置替换集合S503、设置遍历集合S504、执行单元测试,若通过,结束任务;否则对依赖的类进行宽度优先替换,每替换一个类执行一次单元测试,直到单元测试通过;若在替换过程中,新旧版本的类源码相同,说明类没有更改,则跳过这次替换;将替换的类加入集合T;S...

【专利技术属性】
技术研发人员:邹立达蔡慧英冉令强耿蕾蕾马艳
申请(专利权)人:山东财经大学
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1