CN113791979B - 软件产品的动态调试方法、装置、计算机设备及存储介质 - Google Patents
软件产品的动态调试方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN113791979B CN113791979B CN202111089409.1A CN202111089409A CN113791979B CN 113791979 B CN113791979 B CN 113791979B CN 202111089409 A CN202111089409 A CN 202111089409A CN 113791979 B CN113791979 B CN 113791979B
- Authority
- CN
- China
- Prior art keywords
- replacement
- service
- class
- source code
- tested
- 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
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000004083 survival effect Effects 0.000 claims description 3
- 238000012360 testing method Methods 0.000 abstract description 12
- 230000000391 smoking effect Effects 0.000 abstract description 6
- 230000008439 repair process Effects 0.000 abstract description 4
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000007547 defect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000000779 smoke Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
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
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及测试技术领域,具体公开了一种软件产品的动态调试方法、装置、计算机设备及存储介质,其方法包括:在调用待测试服务时,判断待测试服务是否添加有预设的自定义标签;当有预设的自定义标签,则查询代码数据库是否包括与待测试服务对应的替换类源代码;若包括对应的替换类源代码,则获取替换类源代码;对替换类源代码进行编译,获得替换类对象;对替换类对象进行注册,获得替换服务类;使用替换服务类执行业务逻辑,以获得业务执行结果;解除替换服务类的注册,并返回业务执行结果。本发明能够大大降低对开发者的电脑性能的消耗,可及时发现和修复冒烟测试阶段中发现的问题,且能够极大地提升多部署模块软件产品的调试效率。
Description
技术领域
本发明涉及测试技术领域,尤其涉及一种软件产品的动态调试方法、装置、计算机设备及存储介质。
背景技术
在软件代码开发完成后,通常需要对软件代码进行调试以确保其质量。基于开源分布式服务框架(dubbo)或一系列框架的有序集合(spring cloud)的调用的复杂的软件产品一般包括诸如用户认证模块,接入业务模块,内网外调模块,各类业务子模块,全文搜索服务器(solr)数据搜索模块等相关联的软件部署模块。
对于上述多部署模块软件产品的调试,通常是开发单元测试代码进行测试,或者使用API接口测试工具(postMan)进行测试。而这两种测试方法往往需要同时启动多个模块才能完成调试工作,例如:solr数据查询就需要同时启动“业务接口模块”、“权限认证模块”、“业务逻辑模块”和“solr数据搜索模块”,这对于开发者的电脑的性能消耗极大,而且也无法协同前端页面进行调试(例如,对于前后端分离的框架,后端开发人员往往没有前端的代码,只能在服务器上部署才能联调),因而导致调试效率较低。
此外,在有多个开发者共同参与的软件开发项目的冒烟测试阶段中,当测试人员发现软件产品有问题需要开发人员进行修复时,则需要开发人员迅速在服务器上部署、测试以解决该问题。如果在冒烟测试阶段发现同时存在多个问题需要迅速修复时,则会出现多个开发人员争抢在服务器上部署的情况,而当开发人员在服务器上部署时会因占用服务器而容易影响到其他开发人员和/或测试人员的工作进度。为了不影响其他开发人员和测试人员的正常工作进度,出现问题的那部分软件的开发人员和测试人员则需要在服务器空闲的时候才能进行部署修复问题,这往往需要开发人员和测试人员加班完成。并且,一旦出现问题,在服务器上部署一两次通常是很难修复所有的问题,而多次部署则会严重拖后开发项目的整体进度。
可见,现有的多部署模块软件产品的调试方法存在对开发者的电脑性能消耗大、调试效率低,且无法及时修复冒烟测试阶段中发现的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种软件产品的动态调试方法、装置、计算机设备及存储介质,以解决现有的多部署模块软件产品的调试方法存在对开发者的电脑性能消耗大、调试效率低,且无法及时修复冒烟测试阶段中发现的问题。
一种软件产品的动态调试方法,包括:
在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
解除所述替换服务类的注册,并返回所述业务执行结果。
一种软件产品的动态调试装置,包括:
判断模块,用于在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
查询模块,用于当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
业务执行模块,用于若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
注册解除模块,用于解除所述替换服务类的注册,并返回所述业务执行结果。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述软件产品的动态调试方法。
一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述软件产品的动态调试方法。
上述软件产品的动态调试方法、装置、计算机设备及存储介质,该动态调试方法,通过在调用待测试服务时,判断待测试服务是否添加有预设的自定义标签;当待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与待测试服务对应的替换类源代码;若代码数据库包括与待测试服务对应的替换类源代码,则获取替换类源代码;对替换类源代码进行编译,获得替换类对象;对替换类对象进行注册,获得替换服务类;使用替换服务类执行业务逻辑,以获得业务执行结果;解除替换服务类的注册,并返回业务执行结果。本方案可适用于多部署模块软件产品的动态调试,不仅可实现控制层到数据访问层全流程接入源代码的动态替换,以及数据访问层的查询语句的动态替换,而且不需要服务的热部署;此外,还可以实现实时在服务器上查看开发者代码的运行效果,可实时动态地添加日志以便于对出现问题的环节进行跟踪定位,可实时地修改存在缺陷的业务逻辑并进行验证,能够实现大量开发者在有限的服务器上并行完成软件代码的调试、问题定位、代码逻辑调整以及验证等工作,极大地提升了多部署模块软件产品的调试效率,与此同时,能够大大降低对开发者的电脑性能的消耗,以及可及时发现和修复冒烟测试阶段中发现的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中软件产品的动态调试方法的流程示意图;
图2是本发明一实施例中软件产品的动态调试装置的结构示意图;
图3是本发明一实施例中计算机设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一实施例中,如图1所示,提供一种软件产品的动态调试方法,包括如下步骤:
步骤S10、在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签。
其中,待测试服务通常是指软件产品服务(如APP(应用程序)服务)。例如,抢单服务、下单服务等。自定义标签,标签名为@DynamicExecute的一个基于方法的标签。
本发明只针对添加有预设的自定义标签的接口进行拦截,以免影响系统性能。
步骤S20、当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码。
在系统的动态调试配置开关switchFlag(开关标志)处于开启状态下,当调用的待测试服务的类方法添加有预设的自定义标签时,则查询代码数据库是否包括与待测试服务对应的替换类源代码。
其中,替换类源代码,是指对待测试服务原始配置的类源代码进行修改后的软件代码。代码数据库用于存储上述替换类源代码。一般地,每个待测试服务均有其原始配置的类源代码。若针对待测试服务原始配置的类源代码进行修改后,可得到与之对应的替换类源代码。比如,对待测试服务A原始配置的类源代码进行修改后,得到待测试服务A的替换类源代码。
作为一示例,当需要对某待测试服务的类源代码进行修改时,可创建一修改窗口,该修改窗口显示待测试服务原始配置的类源代码,用户可在该修改窗口进行操作,修改待测试服务原始配置的类源代码,修改后获得待测试服务的替换类源代码,并存储至代码数据库中。
若系统的动态调试配置开关switchFlag(开关标志)处于关闭状态,或者当调用的待测试服务的类方法没有添加预设的自定义标签时,则执行待测试服务原始配置的类源代码,实现原来的业务逻辑,以获得业务执行结果,并返回该业务执行结果。
步骤S30、若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果。
步骤S40、解除所述替换服务类的注册,并返回所述业务执行结果。
示例性的,假设待测试服务为抢单服务,在调用抢单服务时,判断表单查询服务的类方法是否添加有标签名为@DynamicExecute的标签,若表单查询服务的类方法添加有该标签,且系统的动态调试配置开关标志显示开启状态,则查询代码数据库中是否包括与表单查询服务对应的替换类源代码(用于替换表单查询服务的原始配置的类方法的源代码),若存在,则获取该替换类源代码,对该替换类源代码进行编译,获得替换类对象;对该替换类对象进行spring注册,获得替换服务类(即替换了源代码之后的表单查询服务类);然后,基于AOP反射调整使用替换服务类执行业务逻辑,以获得业务执行结果。其中,AOP(AspectOriented Programming,面向切面编程),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
具体的,可创建一个监控自定义标签的切面,若系统的动态调试配置开关处于开启状态,则读取代码数据库中预先配置的与待测试服务对应的替换源代码,并对该替换源代码进行编译和spring注册,获得替换服务类,使用该替换服务类执行业务逻辑,获得业务执行结果,再解除spring注册,并返回业务执行结果。
本发明实施例提供的动态调试方法,在调用待测试服务时,判断待测试服务是否添加有预设的自定义标签;当待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与待测试服务对应的替换类源代码;若代码数据库包括与待测试服务对应的替换类源代码,则获取替换类源代码;对替换类源代码进行编译,获得替换类对象;对替换类对象进行注册,获得替换服务类;使用替换服务类执行业务逻辑,以获得业务执行结果;解除替换服务类的注册,并返回业务执行结果。本发明可适用于多部署模块软件产品的动态调试,不仅可实现控制层到数据访问层全流程接入源代码的动态替换,以及数据访问层的查询语句的动态替换,而且不需要服务的热部署;此外,还可以实现实时在服务器上查看开发者代码的运行效果,可实时动态地添加日志以便于对出现问题的环节进行跟踪定位,可实时地修改存在缺陷的业务逻辑并进行验证,能够实现大量开发者在有限的服务器上并行完成软件代码的调试、问题定位、代码逻辑调整以及验证等工作,极大地提升了多部署模块软件产品的调试效率,与此同时,能够大大降低对开发者的电脑性能的消耗,以及可及时发现和修复冒烟测试阶段中发现的问题。
在一实施例中,上述步骤S30,包括如下步骤:
根据预设的第一加载类,加载所述替换类源代码,对所述替换类源代码进行自动编译,并对所述替换类源代码中的记录日志进行更换,获得第一替换类对象。
其中,第一加载类可为groovyLoader加载类。
通过groovyLoader加载类加载得到替换类源代码。在使用groovyLoader加载类进行加载的过程中会同时对该替换类源代码进行自动编译。使用groovyLoader加载类加载编译不需要进行Java虚拟机注册,groovyLoader加载编译的高版本可以支持Lambda表达式(lambda expression,是一个匿名函数),在使用该加载编译方式时需要将替换类源代码中的lombok.extern.slf4j.Slf4j日志替换为groovy.util.logging.Slf4j日志(即记录日志的更换)。经过上述加载编译和日志替换操作之后可获得第一替换类对象。
获取预设的应用程序框架的上下文变量;根据所述上下文变量为所述第一替换类对象添加注册信息,获得第一替换服务类。
其中,预设的应用程序框架为spring。通过获取spring上下文的DefaultListableBeanFactory(即上下文变量)为第一替换类对象添加注册信息,获得第一替换服务类。其中,注册信息包括编译的类、注册的bean名称等。
结合上述示例,使用替换了源代码之后的表单查询服务的服务类执行业务逻辑(表单查询流程),获得表单查询结果(即业务执行结果),再通过方法dynamicDeleteBean解除删除表单查询替换服务类(即第一替换服务类)的注册,并返回该业务执行结果。
在另一实施例中,上述步骤S30,包括如下步骤:
根据预设的第二加载类,加载所述替换类源代码;使用内存编译对所述替换类源代码进行编译,获得第二替换类对象。
其中,第二加载类,可为自定义URLClassLoader子类。
如果要使用内存编译对替换类源代码进行编译,则需要使用自定义URLClassLoader子类进行记载,而不能使用Class.forName加载,否则使用完后无法释放,下次再注册无法生效。
使用自定义的类加载器对所述第二替换类对象进行Java虚拟机注册,并获取预设的应用程序框架的上下文变量,根据所述上下文变量为所述第二替换类对象添加注册信息,获得第二替换服务类。
由于Java只有使用自定义加载器进行Java虚拟机注册后才可以进行对象的初始化,也才可以在使用结束后清除注册的类,所以需要使用自定义的类加载器对第二替换类对象进行Java虚拟机注册,再获取spring上下文的DefaultListableBeanFactory(即上下文变量)为第二替换类对象添加注册信息,获得第二替换服务类。
上述实施例可实现待测试服务配置的类的动态执行以及替换,如需要实时添加日志,则只需要修改代码数据库中配置的待测试服务的源代码即可快速实现,且立即生效。
上述实施例具体描述了关于软件产品的单个模块的动态调试实现流程。对于多部署模块软件产品中各个模块的动态调试可以预先设置一个动态调试顺序,然后按照该动态调试顺序来执行各个模块的动态调试,具体的调试方法可以参照上述的动态调试流程,在此不再赘述。
示例性的,若多部署模块软件产品包括模块A、模块B和模块C,预先设置的动态调试顺序为A→B→C,那么在对该软件产品进行动态联调时,可以先对模块A进行调试,接着,对模块B进行调试,最后,对模块C进行调试。
在一实施例中,所述软件产品的动态调试方法,还包括如下步骤:
在接入数据访问层时,判断所述数据访问层是否添加有预设的自定义标签。
数据访问层(dao层),全称为data access object。
作为一示例,判断所述数据访问层是否添加有预设的自定义标签,具体可以是判断数据访问层的任意一个类方法是否添加有预设的自定义标签。
若所述数据访问层添加有预设的自定义标签,则创建滑动窗口,以拦截所述数据访问层的业务数据库初始配置的第一查询语句。
其中,第一查询语句为mybatis(支持普通SQL查询、存储过程和高级映射的优秀持久层框架)的XML配置的SQL((Structured Query Language),结构化查询语言)。
在本发明实施例中,可采用方法openSQLDynamicExec,创建滑动窗口,滑动窗口的ID为业务跟踪ID。其中,业务跟踪ID可以采用MDC(Meta Data Controller,元数据控制器)来设置。具体的,可以是业务的标识号、唯一编码、编译码等。例如,表单查询业务的业务跟踪ID可以是标识号01。
作为一示例,可基于方法getSqlSource使用XMLLanguageDriver进行第一查询语句的加载。
获取所述业务数据库配置的第二查询语句;在所述滑动窗口存活期间,将所述第一查询语句替换为所述第二查询语句。
其中,第二查询语句为业务数据库或者redis(一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API)配置的业务SQL。
作为一示例,可基于方法getSQLFromDB从业务数据库或redis加载预先配置的第二查询语句。
在一实施例中,在拦截所述数据访问层的业务数据库初始配置的第一查询语句之前,还包括:
判断所述滑动窗口的实例数是否大于预设的阈值;
若所述滑动窗口的实例数大于预设的阈值,则删除时间最早的若干实例。
作为一示例,预设的阈值(即预设的实例数)可根据实际情况灵活设置,例如,可设置为10000。若滑动窗口的实例数大于10000,则删除时间最早的一个或多个实例。
在一实施例中,获取所述业务数据库配置的第二查询语句,包括:
提取所述第一查询语句的标签信息;
根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句,并形成查询记录。
其中,第一查询语句的标签信息为第一查询语句ID(即SQLID)。第一查询语句ID具体可以是第一查询语句的标识号、唯一编码等。例如,第一查询语句ID可以是A、B、C等标识号。一般地,不同的第一查询语句ID对应不同的第一查询语句。
作为一示例,可采用handleStatementHandler方法实现SQLID的提取和动态替换。
作为一示例,可预先在业务数据库中存储第一查询语句ID、第一查询语句和第二查询语句的对应关系表。对应关系表可如下表1所示:
表1第一查询语句ID、第一查询语句和第二查询语句的对应关系表
第一查询语句ID | 第一查询语句 | 第二查询语句 |
A | X | Y |
… | … | … |
根据第一查询语句ID,可以从上表1中查询到与该第一查询语句ID对应的第二查询语句,并形成查询记录。
示例性的,形成的查询记录可以是“XXX时间通过第一查询语句ID A查询其对应的第二查询语句Y”。
在一实施例中,根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句,并形成查询记录,包括:
清除缓存在所述业务数据库中的历史查询记录;
根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句。
其中,历史查询记录,是指在当前查询操作之前,利用提取到的第一查询语句ID查询与之对应的第二查询语句时所形成的查询记录。
作为一示例,可采用方法removePageHelperCache反射清除mybatis缓存的在当前查询操作之前利用提取到的第一查询语句ID查询与之对应的第二查询语句时所形成的查询记录,以防止本次的将第一查询语句替换为第二查询语句的操作不生效。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种软件产品的动态调试装置,该软件产品的动态调试装置与上述实施例中软件产品的动态调试方法一一对应。如图2所示,该软件产品的动态调试装置包括第一判断模块11、查询模块12、业务执行模块13和注册解除模块14。各功能模块详细说明如下:
第一判断模块11,用于在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
查询模块12,用于当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
业务执行模块13,用于若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
注册解除模块14,用于解除所述替换服务类的注册,并返回所述业务执行结果。
在一实施例中,上述业务执行模块13,包括:
第一加载单元,用于根据预设的第一加载类,加载所述替换类源代码,对所述替换类源代码进行自动编译,并对所述替换类源代码中的记录日志进行更换,获得第一替换类对象;
第一获取单元,用于获取预设的应用程序框架的上下文变量;根据所述上下文变量为所述第一替换类对象添加注册信息,获得第一替换服务类;
第一执行单元,用于使用所述第一替换服务类执行业务逻辑,以获得业务执行结果。
在另一实施例中,上述业务执行模块13,包括:
第二加载单元,用于根据预设的第二加载类,加载所述替换类源代码;使用内存编译对所述替换类源代码进行编译,获得第二替换类对象;
第二获取单元,用于使用自定义的类加载器对所述第二替换类对象进行Java虚拟机注册,并获取预设的应用程序框架的上下文变量,根据所述上下文变量为所述第二替换类对象添加注册信息,获得第二替换服务类;
第二执行单元,用于使用所述第二替换服务类执行业务逻辑,以获得业务执行结果。
在一实施例中,上述动态调试装置,还包括:
第二判断模块,用于在接入数据访问层时,判断所述数据访问层是否添加有预设的自定义标签;
拦截模块,用于若所述数据访问层添加有预设的自定义标签,则创建滑动窗口,以拦截所述数据访问层的业务数据库初始配置的第一查询语句;
替换模块,用于获取所述业务数据库配置的第二查询语句;在所述滑动窗口存活期间,将所述第一查询语句替换为所述第二查询语句。
在一实施例中,上述动态调试装置,还包括:
实例数判断模块,用于判断所述滑动窗口的实例数是否大于预设的阈值;
删除模块,用于若所述滑动窗口的实例数大于预设的阈值,则删除时间最早的若干实例。
在一实施例中,上述替换模块,包括:
提取单元,用于提取所述第一查询语句的标签信息;
查询单元,用于根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句,并形成查询记录。
在一实施例中,上述查询单元,还用于:
清除缓存在所述业务数据库中的历史查询记录;
根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句。
关于软件产品的动态调试装置的具体限定可以参见上文中对于软件产品的动态调试方法的限定,在此不再赘述。上述软件产品的动态调试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括可读存储介质、内存储器。该可读存储介质存储有操作系统、计算机可读指令和数据库。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该计算机设备的数据库用于存储软件产品的动态调试方法所涉及的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种软件产品的动态调试方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现以下步骤:
在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
解除所述替换服务类的注册,并返回所述业务执行结果。
在一个实施例中,提供了一个或多个存储有计算机可读指令的计算机可读存储介质,本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。可读存储介质上存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时实现以下步骤:
在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
解除所述替换服务类的注册,并返回所述业务执行结果。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (8)
1.一种软件产品的动态调试方法,其特征在于,包括:
在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
解除所述替换服务类的注册,并返回所述业务执行结果;
所述若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果,包括:
根据预设的第一加载类,加载所述替换类源代码,对所述替换类源代码进行自动编译,并对所述替换类源代码中的记录日志进行更换,获得第一替换类对象;获取预设的应用程序框架的上下文变量;根据所述上下文变量为所述第一替换类对象添加注册信息,获得第一替换服务类;使用所述第一替换服务类执行业务逻辑,以获得业务执行结果;或
根据预设的第二加载类,加载所述替换类源代码;使用内存编译对所述替换类源代码进行编译,获得第二替换类对象;使用自定义的类加载器对所述第二替换类对象进行Java虚拟机注册,并获取预设的应用程序框架的上下文变量,根据所述上下文变量为所述第二替换类对象添加注册信息,获得第二替换服务类;使用所述第二替换服务类执行业务逻辑,以获得业务执行结果。
2.如权利要求1所述的软件产品的动态调试方法,其特征在于,所述动态调试方法,还包括:
在接入数据访问层时,判断所述数据访问层是否添加有预设的自定义标签;
若所述数据访问层添加有预设的自定义标签,则创建滑动窗口,以拦截所述数据访问层的业务数据库初始配置的第一查询语句;
获取所述业务数据库配置的第二查询语句;在所述滑动窗口存活期间,将所述第一查询语句替换为所述第二查询语句。
3.如权利要求2所述的软件产品的动态调试方法,其特征在于,所述拦截所述数据访问层的业务数据库初始配置的第一查询语句之前,还包括:
判断所述滑动窗口的实例数是否大于预设的阈值;
若所述滑动窗口的实例数大于预设的阈值,则删除时间最早的若干实例。
4.如权利要求2所述的软件产品的动态调试方法,其特征在于,所述获取所述业务数据库配置的第二查询语句,包括:
提取所述第一查询语句的标签信息;
根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句,并形成查询记录。
5.如权利要求4所述的软件产品的动态调试方法,其特征在于,所述根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句,并形成查询记录,包括:
清除缓存在所述业务数据库中的历史查询记录;
根据所述标签信息,从所述业务数据库中查询与所述标签信息对应的第二查询语句。
6.一种软件产品的动态调试装置,其特征在于,包括:
判断模块,用于在调用待测试服务时,判断所述待测试服务是否添加有预设的自定义标签;
查询模块,用于当所述待测试服务添加有预设的自定义标签,则查询代码数据库是否包括与所述待测试服务对应的替换类源代码;
业务执行模块,用于若所述代码数据库包括与所述待测试服务对应的替换类源代码,则获取所述替换类源代码;对所述替换类源代码进行编译,获得替换类对象;对所述替换类对象进行注册,获得替换服务类;使用所述替换服务类执行业务逻辑,以获得业务执行结果;
注册解除模块,用于解除所述替换服务类的注册,并返回所述业务执行结果;
所述业务执行模块,包括:第一加载单元,用于根据预设的第一加载类,加载所述替换类源代码,对所述替换类源代码进行自动编译,并对所述替换类源代码中的记录日志进行更换,获得第一替换类对象;第一获取单元,用于获取预设的应用程序框架的上下文变量;根据所述上下文变量为所述第一替换类对象添加注册信息,获得第一替换服务类;第一执行单元,用于使用所述第一替换服务类执行业务逻辑,以获得业务执行结果;或
所述业务执行模块,包括:第二加载单元,用于根据预设的第二加载类,加载所述替换类源代码;使用内存编译对所述替换类源代码进行编译,获得第二替换类对象;第二获取单元,用于使用自定义的类加载器对所述第二替换类对象进行Java虚拟机注册,并获取预设的应用程序框架的上下文变量,根据所述上下文变量为所述第二替换类对象添加注册信息,获得第二替换服务类;第二执行单元,用于使用所述第二替换服务类执行业务逻辑,以获得业务执行结果。
7.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时实现如权利要求1至5中任一项所述软件产品的动态调试方法。
8.一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至5中任一项所述软件产品的动态调试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111089409.1A CN113791979B (zh) | 2021-09-16 | 2021-09-16 | 软件产品的动态调试方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111089409.1A CN113791979B (zh) | 2021-09-16 | 2021-09-16 | 软件产品的动态调试方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113791979A CN113791979A (zh) | 2021-12-14 |
CN113791979B true CN113791979B (zh) | 2023-12-22 |
Family
ID=78878674
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111089409.1A Active CN113791979B (zh) | 2021-09-16 | 2021-09-16 | 软件产品的动态调试方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113791979B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114257497B (zh) * | 2021-12-22 | 2023-04-28 | 上海中通吉网络技术有限公司 | 动态替换Dubbo微服务的方法 |
CN116502220B (zh) * | 2023-02-22 | 2023-10-03 | 安芯网盾(北京)科技有限公司 | 一种对抗性Java内存马的检测方法及处理方法 |
CN116700834B (zh) * | 2023-08-07 | 2023-10-24 | 天津华来科技股份有限公司 | 一种App模块化加载方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765525B1 (en) * | 2004-09-01 | 2010-07-27 | Intuit Inc. | Operations manager infrastructure for dynamically updating software operational policy |
CN106250178A (zh) * | 2016-07-26 | 2016-12-21 | 北京北森云计算股份有限公司 | 通过多语言云编译实现系统动态功能在线拦截扩展的方法 |
CN106293808A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态拦截扩展的方法及系统 |
CN106293863A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态扩展替换的方法及系统 |
CN113050953A (zh) * | 2021-04-21 | 2021-06-29 | 平安普惠企业管理有限公司 | 基于注释生成代码的方法、装置及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018041373A (ja) * | 2016-09-09 | 2018-03-15 | オムロン株式会社 | 実行可能プログラム作成装置、実行可能プログラム作成方法、および、実行可能プログラム作成プログラム |
-
2021
- 2021-09-16 CN CN202111089409.1A patent/CN113791979B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765525B1 (en) * | 2004-09-01 | 2010-07-27 | Intuit Inc. | Operations manager infrastructure for dynamically updating software operational policy |
CN106250178A (zh) * | 2016-07-26 | 2016-12-21 | 北京北森云计算股份有限公司 | 通过多语言云编译实现系统动态功能在线拦截扩展的方法 |
CN106293808A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态拦截扩展的方法及系统 |
CN106293863A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态扩展替换的方法及系统 |
CN113050953A (zh) * | 2021-04-21 | 2021-06-29 | 平安普惠企业管理有限公司 | 基于注释生成代码的方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113791979A (zh) | 2021-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113791979B (zh) | 软件产品的动态调试方法、装置、计算机设备及存储介质 | |
EP3769223B1 (en) | Unified test automation system | |
Tomassi et al. | Bugswarm: Mining and continuously growing a dataset of reproducible failures and fixes | |
US10509693B2 (en) | Method for identifying a cause for a failure of a test | |
CN108427613B (zh) | 异常接口定位方法、装置、计算机设备和存储介质 | |
US8661418B2 (en) | Setting program, workflow creating method, and work flow creating apparatus | |
US20080086660A1 (en) | Test data management | |
US11599453B2 (en) | Vehicle function test apparatus and method of controlling the same | |
CN107608898B (zh) | 一种再现测试流程以实现自动化回归测试的方法 | |
CN112650688B (zh) | 自动化回归测试方法、关联设备以及计算机程序产品 | |
WO2020186808A1 (zh) | 页面权限测试方法、装置、计算机设备及存储介质 | |
CN107704369B (zh) | 一种操作日志的记录方法、电子设备、存储介质、系统 | |
CN111221721B (zh) | 一种单元测试案例自动化录制和执行方法及装置 | |
CN112395202B (zh) | 接口自动化测试方法、装置、计算机设备和存储介质 | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN112069073A (zh) | 测试用例的管理方法、终端和存储介质 | |
CN112948473A (zh) | 数据仓库的数据处理方法、装置、系统及存储介质 | |
CN101739340A (zh) | 一种脚本文件的验证方法和装置 | |
Elsner et al. | Challenges in regression test selection for end-to-end testing of microservice-based software systems | |
CN106909434B (zh) | 可执行程序中未定义函数的检测方法及装置 | |
CN116610575A (zh) | 一种软件测试的方法、装置及电子设备 | |
CN116594635A (zh) | 一种云原生持续集成与交付的方法及装置 | |
US8949421B2 (en) | Techniques for discovering database connectivity leaks | |
CN108009083A (zh) | 一种软件功能测试中功能信息获取方法及装置 | |
CN115168217A (zh) | 源代码文件的缺陷发现方法及装置 |
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 |