CN116881143A - 一种数据对象复制异常排查方法、装置、设备及存储介质 - Google Patents
一种数据对象复制异常排查方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116881143A CN116881143A CN202310833118.1A CN202310833118A CN116881143A CN 116881143 A CN116881143 A CN 116881143A CN 202310833118 A CN202310833118 A CN 202310833118A CN 116881143 A CN116881143 A CN 116881143A
- Authority
- CN
- China
- Prior art keywords
- data object
- node
- target
- acquiring
- character string
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 33
- 230000005856 abnormality Effects 0.000 title claims description 22
- 238000011835 investigation Methods 0.000 title claims description 5
- 238000012360 testing method Methods 0.000 claims abstract description 41
- 230000002159 abnormal effect Effects 0.000 claims abstract description 16
- 230000010076 replication Effects 0.000 claims description 34
- 230000014509 gene expression Effects 0.000 claims description 14
- 239000012528 membrane Substances 0.000 claims description 14
- 238000001514 detection method Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000005236 sound signal Effects 0.000 description 2
- 238000013024 troubleshooting Methods 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000010897 surface acoustic wave method Methods 0.000 description 1
- 230000000007 visual effect Effects 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- 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
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
-
- 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
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据对象复制异常排查方法、装置、设备及存储介质,通过对项目源码构建抽象语法树的方式,根据抽象语法树分析出代码中是否存在数据对象复制,并分析出数据对象复制的源数据对象、目标数据对象,通过创建单元测试,将赋值后的数据对象json化,再将赋值后的源数据对象复制到目标数据对象,将目标数据对象json化,比较源数据对象json字符串和目标数据对象json字符串是否一致,若一致则认为复制无异常,否则为异常,解决了目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
Description
技术领域
本申请涉及金融科技技术领域,尤其涉及一种数据对象复制异常排查方法、装置、设备及存储介质。
背景技术
在软件的开发过程中,特别是在现在软件开发模式下,一般都是采用数据分层领域模型个将软件开发中的数据划分成多个数据对象(包括数据传输对象,数据访问对象,业务对象,应用对象,显示层对象,数据查询对象等多个数据对象)。多个数据对象之间在进行数据传递时,通常情况下开发人员为了提升开发效率,会使用数据对象复制(将数据对象A的数据复制到数据对象B)。
但是目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常的问题,例如,复制的对象A跟对象B中如果数据类型不一致,则可能导致数据的丢失,但是在对象复制过程中却不会出错,导致了程序运行阶段很难发现,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
发明内容
本申请提供了一种数据对象复制异常排查方法、装置、设备及存储介质,解决了目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
有鉴于此,本申请第一方面提供了一种数据对象复制异常排查方法,所述方法包括:
S1、获取项目源码;
S2、遍历所述项目源码,将后缀为.java的目标文件存储至java文件列表中;
S3、依次将所述java文件列表中的目标文件解析为抽象语法树;
S4、解析所述抽象语法树中的StatementExpression节点,确定所述目标文件中是否存在使用数据对象复制;
S5、若存在,则获取所述StatementExpression节点下的expression.arguments属性信息,所述expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
S6、获取所述目标文件的FormalParameter节点列表,并获取所述FormalParameter节点列表中节点declarators.name属性的第一属性值;
S7、若所述第一属性值为所述源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
S8、获取所述目标文件的LocalVariableDeclaration节点列表,并获取所述LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
S9、若所述第二属性值为所述目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
S10、根据所述源数据对象以及所述目标数据对象创建单元测试,在所述单元测试中实例化所述源数据对象以及所述目标数据对象;
S11、通过mock对所述单元测试中的所述源数据对象赋值;
S12、将赋值后的所述源数据对象实例化对象转换为第一json字符串;
S13、通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
S14、将所述目标数据对象实例化对象转换为第二json字符串;
S15、比较所述第一json字符串以及所述第二json字符串,若相同,则所述源数据对象以及所述目标数据对象的数据对象复制不存在异常,否则存在异常。
可选地,所述步骤S1具体包括:
通过git clone命令从项目代码管理台获取项目源码。
可选地,所述步骤S4具体包括:
判断所述抽象语法树中是否存在StatementExpression节点;
若存在,则获取所述StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取所述StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则所述目标文件中存在使用数据对象复制;
否则,所述目标文件中不存在使用数据对象复制。
可选地,所述步骤S12具体包括:
通过toJosnString将赋值后的所述源数据对象实例化对象转换为第一json字符串。
可选地,所述步骤S14具体包括:
通过toJosnString将所述目标数据对象实例化对象转换为第二json字符串。
本申请第二方面提供一种数据对象复制异常排查装置,所述装置包括:
第一获取单元,用于获取项目源码;
遍历单元,用于遍历所述项目源码,将后缀为.java的目标文件存储至java文件列表中;
解析单元,用于依次将所述java文件列表中的目标文件解析为抽象语法树;
判断单元,用于解析所述抽象语法树中的StatementExpression节点,确定所述目标文件中是否存在使用数据对象复制;
第二获取单元,用于若存在,则获取所述StatementExpression节点下的expression.arguments属性信息,所述expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
第三获取单元,用于获取所述目标文件的FormalParameter节点列表,并获取所述FormalParameter节点列表中节点declarators.name属性的第一属性值;
第四获取单元,用于若所述第一属性值为所述源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
第五获取单元,用于获取所述目标文件的LocalVariableDeclaration节点列表,并获取所述LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
第六获取单元,用于若所述第二属性值为所述目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
单元测试创建单元,用于根据所述源数据对象以及所述目标数据对象创建单元测试,在所述单元测试中实例化所述源数据对象以及所述目标数据对象;
赋值单元,用于通过mock对所述单元测试中的所述源数据对象赋值;
第一转换单元,用于将赋值后的所述源数据对象实例化对象转换为第一json字符串;
数据对象复制单元,用于通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
第二转换单元,用于将所述目标数据对象实例化对象转换为第二json字符串;
比较单元,用于比较所述第一json字符串以及所述第二json字符串,若相同,则所述源数据对象以及所述目标数据对象的数据对象复制不存在异常,否则存在异常。
可选地,所述第一获取单元具体用于:
通过git clone命令从项目代码管理台获取项目源码。
可选地,所述判断单元具体用于:
判断所述抽象语法树中是否存在StatementExpression节点;
若存在,则获取所述StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取所述StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则所述目标文件中存在使用数据对象复制;
否则,所述目标文件中不存在使用数据对象复制。
本申请第三方面提供一种数据对象复制异常排查设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令,执行如上述第一方面所述的数据对象复制异常排查的方法的步骤。
本申请第四方面提供一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行上述第一方面所述的数据对象复制异常排查方法的步骤。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请中,提供了一种数据对象复制异常排查方法、装置、设备及存储介质,通过对项目源码构建抽象语法树的方式,根据抽象语法树分析出代码中是否存在数据对象复制,并分析出数据对象复制的源数据对象、目标数据对象,通过创建单元测试,将赋值后的数据对象json化,再将赋值后的源数据对象复制到目标数据对象,将目标数据对象json化,比较源数据对象json字符串和目标数据对象json字符串是否一致,若一致则认为复制无异常,否则为异常,解决了目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
附图说明
图1为本申请实施例中数据对象复制异常排查方法的一个方法流程图;
图2为本申请实施例中数据对象复制异常排查方法的另一个方法流程图;
图3为本申请实施例中数据对象复制异常排查装置的结构示意图;
图4为本申请实施例中数据对象复制异常排查设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请设计了一种数据对象复制异常排查方法、装置、设备及存储介质,解决了目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
为了便于理解,请参阅图1和图2,图1为本申请实施例中数据对象复制异常排查方法的一个方法流程图,图2为本申请实施例中数据对象复制异常排查方法的另一个方法流程图,如图1和图2所示,具体为:
S1、获取项目源码;
S2、遍历项目源码,将后缀为.java的目标文件存储至java文件列表中;
S3、依次将java文件列表中的目标文件解析为抽象语法树;
S4、解析抽象语法树中的StatementExpression节点,确定目标文件中是否存在使用数据对象复制;
S5、若存在,则获取StatementExpression节点下的expression.arguments属性信息,expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
S6、获取目标文件的FormalParameter节点列表,并获取FormalParameter节点列表中节点declarators.name属性的第一属性值;
S7、若第一属性值为源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
S8、获取目标文件的LocalVariableDeclaration节点列表,并获取LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
S9、若第二属性值为目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
S10、根据源数据对象以及目标数据对象创建单元测试,在单元测试中实例化源数据对象以及目标数据对象;
S11、通过mock对单元测试中的源数据对象赋值;
S12、将赋值后的源数据对象实例化对象转换为第一json字符串;
S13、通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
S14、将目标数据对象实例化对象转换为第二json字符串;
S15、比较第一json字符串以及第二json字符串,若相同,则源数据对象以及目标数据对象的数据对象复制不存在异常,否则存在异常。
进一步地,步骤S1具体包括:
通过git clone命令从项目代码管理台获取项目源码。
进一步地,步骤S4具体包括:
判断抽象语法树中是否存在StatementExpression节点;
若存在,则获取StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则目标文件中存在使用数据对象复制;
否则,目标文件中不存在使用数据对象复制。
进一步地,步骤S12具体包括:
通过toJosnString将赋值后的源数据对象实例化对象转换为第一json字符串。
进一步地,步骤S14具体包括:
通过toJosnString将目标数据对象实例化对象转换为第二json字符串。
请参阅图3,图3为本申请实施例中数据对象复制异常排查装置的结构示意图,如图3所示,具体为:
第一获取单元301,用于获取项目源码;
遍历单元302,用于遍历项目源码,将后缀为.java的目标文件存储至java文件列表中;
解析单元303,用于依次将java文件列表中的目标文件解析为抽象语法树;
判断单元304,用于解析抽象语法树中的StatementExpression节点,确定目标文件中是否存在使用数据对象复制;
第二获取单元305,用于若存在,则获取StatementExpression节点下的expression.arguments属性信息,expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
第三获取单元306,用于获取目标文件的FormalParameter节点列表,并获取FormalParameter节点列表中节点declarators.name属性的第一属性值;
第四获取单元307,用于若第一属性值为源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
第五获取单元308,用于获取目标文件的LocalVariableDeclaration节点列表,并获取LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
第六获取单元309,用于若第二属性值为目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
单元测试创建单元310,用于根据源数据对象以及目标数据对象创建单元测试,在单元测试中实例化源数据对象以及目标数据对象;
赋值单元311,用于通过mock对单元测试中的源数据对象赋值;
第一转换单元312,用于将赋值后的源数据对象实例化对象转换为第一json字符串;
数据对象复制单元313,用于通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
第二转换单元314,用于将目标数据对象实例化对象转换为第二json字符串;
比较单元315,用于比较第一json字符串以及第二json字符串,若相同,则源数据对象以及目标数据对象的数据对象复制不存在异常,否则存在异常。
进一步地,第一获取单元具体用于:
通过git clone命令从项目代码管理台获取项目源码。
进一步地,判断单元具体用于:
判断抽象语法树中是否存在StatementExpression节点;
若存在,则获取StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则目标文件中存在使用数据对象复制;
否则,目标文件中不存在使用数据对象复制。
本申请实施例还提供了另一种数据对象复制异常排查设备,如图4所示,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该终端可以为包括手机、平板电脑、个人数字助理(英文全称:PersonalDigitalAssistant,英文缩写:PDA)、销售终端(英文全称:Point ofSales,英文缩写:POS)、车载电脑等任意终端设备,以终端为手机为例:
图4示出的是与本申请实施例提供的终端相关的手机的部分结构的框图。参考图4,手机包括:射频(英文全称:Radio Frequency,英文缩写:RF)电路1010、存储器1020、输入单元1030、显示单元1040、传感器1050、音频电路1060、无线保真(英文全称:wirelessfidelity,英文缩写:WiFi)模块1070、处理器1080、以及电源1090等部件。本领域技术人员可以理解,图4中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图4对手机的各个构成部件进行具体的介绍:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1080处理;另外,将设计上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(英文全称:LowNoiseAmplifier,英文缩写:LNA)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(英文全称:Global System ofMobile communication,英文缩写:GSM)、通用分组无线服务(英文全称:GeneralPacket Radio Service,GPRS)、码分多址(英文全称:CodeDivision Multiple Access,英文缩写:CDMA)、宽带码分多址(英文全称:Wideband CodeDivisionMultipleAccess,英文缩写:WCDMA)、长期演进(英文全称:Long TermEvolution,英文缩写:LTE)、电子邮件、短消息服务(英文全称:ShortMessaging Service,SMS)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1030可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1030可包括触控面板1031以及其他输入设备1032。触控面板1031,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1031上或在触控面板1031附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1031可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1080,并能接收处理器1080发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1031。除了触控面板1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1040可包括显示面板1041,可选的,可以采用液晶显示器(英文全称:Liquid Crystal Display,英文缩写:LCD)、有机发光二极管(英文全称:Organic Light-Emitting Diode,英文缩写:OLED)等形式来配置显示面板1041。进一步的,触控面板1031可覆盖显示面板1041,当触控面板1031检测到在其上或附近的触摸操作后,传送给处理器1080以确定触摸事件的类型,随后处理器1080根据触摸事件的类型在显示面板1041上提供相应的视觉输出。虽然在图4中,触控面板1031与显示面板1041是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1031与显示面板1041集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1050,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1060、扬声器1061,传声器1062可提供用户与手机之间的音频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一手机,或者将音频数据输出至存储器1020以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图4示出了WiFi模块1070,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1080可包括一个或多个处理单元;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1080中。
手机还包括给各个部件供电的电源1090(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本申请实施例中,该终端所包括的处理器1080还具有以下功能:
S1、获取项目源码;
S2、遍历项目源码,将后缀为.java的目标文件存储至java文件列表中;
S3、依次将java文件列表中的目标文件解析为抽象语法树;
S4、解析抽象语法树中的StatementExpression节点,确定目标文件中是否存在使用数据对象复制;
S5、若存在,则获取StatementExpression节点下的expression.arguments属性信息,expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
S6、获取目标文件的FormalParameter节点列表,并获取FormalParameter节点列表中节点declarators.name属性的第一属性值;
S7、若第一属性值为源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
S8、获取目标文件的LocalVariableDeclaration节点列表,并获取LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
S9、若第二属性值为目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
S10、根据源数据对象以及目标数据对象创建单元测试,在单元测试中实例化源数据对象以及目标数据对象;
S11、通过mock对单元测试中的源数据对象赋值;
S12、将赋值后的源数据对象实例化对象转换为第一json字符串;
S13、通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
S14、将目标数据对象实例化对象转换为第二json字符串;
S15、比较第一json字符串以及第二json字符串,若相同,则源数据对象以及目标数据对象的数据对象复制不存在异常,否则存在异常。
本申请实施例还提供一种计算机可读存储介质,用于存储程序代码,该程序代码用于执行前述各个实施例的一种数据对象复制异常排查方法中的任意一种实施方式。
本申请实施例中,提供了一种数据对象复制异常排查方法、装置、设备及存储介质,通过对项目源码构建抽象语法树的方式,根据抽象语法树分析出代码中是否存在数据对象复制,并分析出数据对象复制的源数据对象、目标数据对象,通过创建单元测试,将赋值后的数据对象json化,再将赋值后的源数据对象复制到目标数据对象,将目标数据对象json化,比较源数据对象json字符串和目标数据对象json字符串是否一致,若一致则认为复制无异常,否则为异常,解决了目前的数据对象复制方式,在不同的基础框架版本下可能会产生一些异常,通常情况下,需要大量的测试才能发现这类问题,耗费大量的测试人力,测试时间,影响项目进度,同时依旧难以覆盖所有数据对象的复制排查的技术问题。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:Read-OnlyMemory,英文缩写:ROM)、随机存取存储器(英文全称:RandomAccess Memory,英文缩写:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种数据对象复制异常排查方法,其特征在于,包括:
S1、获取项目源码;
S2、遍历所述项目源码,将后缀为.java的目标文件存储至java文件列表中;
S3、依次将所述java文件列表中的目标文件解析为抽象语法树;
S4、解析所述抽象语法树中的StatementExpression节点,确定所述目标文件中是否存在使用数据对象复制;
S5、若存在,则获取所述StatementExpression节点下的expression.arguments属性信息,所述expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
S6、获取所述目标文件的FormalParameter节点列表,并获取所述FormalParameter节点列表中节点declarators.name属性的第一属性值;
S7、若所述第一属性值为所述源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
S8、获取所述目标文件的LocalVariableDeclaration节点列表,并获取所述LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
S9、若所述第二属性值为所述目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
S10、根据所述源数据对象以及所述目标数据对象创建单元测试,在所述单元测试中实例化所述源数据对象以及所述目标数据对象;
S11、通过mock对所述单元测试中的所述源数据对象赋值;
S12、将赋值后的所述源数据对象实例化对象转换为第一json字符串;
S13、通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
S14、将所述目标数据对象实例化对象转换为第二json字符串;
S15、比较所述第一json字符串以及所述第二json字符串,若相同,则所述源数据对象以及所述目标数据对象的数据对象复制不存在异常,否则存在异常。
2.根据权利要求1所述的数据对象复制异常排查方法,其特征在于,所述步骤S1具体包括:
通过gitclone命令从项目代码管理台获取项目源码。
3.根据权利要求1所述的数据对象复制异常排查方法,其特征在于,所述步骤S4具体包括:
判断所述抽象语法树中是否存在StatementExpression节点;
若存在,则获取所述StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取所述StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则所述目标文件中存在使用数据对象复制;
否则,所述目标文件中不存在使用数据对象复制。
4.根据权利要求1所述的数据对象复制异常排查方法,其特征在于,所述步骤S12具体包括:
通过toJosnString将赋值后的所述源数据对象实例化对象转换为第一json字符串。
5.根据权利要求1所述的数据对象复制异常排查方法,其特征在于,所述步骤S14具体包括:
通过toJosnString将所述目标数据对象实例化对象转换为第二json字符串。
6.一种数据对象复制异常排查装置,其特征在于,包括:
第一获取单元,用于获取项目源码;
遍历单元,用于遍历所述项目源码,将后缀为.java的目标文件存储至java文件列表中;
解析单元,用于依次将所述java文件列表中的目标文件解析为抽象语法树;
判断单元,用于解析所述抽象语法树中的StatementExpression节点,确定所述目标文件中是否存在使用数据对象复制;
第二获取单元,用于若存在,则获取所述StatementExpression节点下的expression.arguments属性信息,所述expression.arguments属性信息包括源数据对象变量以及目标数据对象变量;
第三获取单元,用于获取所述目标文件的FormalParameter节点列表,并获取所述FormalParameter节点列表中节点declarators.name属性的第一属性值;
第四获取单元,用于若所述第一属性值为所述源数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为源数据对象;
第五获取单元,用于获取所述目标文件的LocalVariableDeclaration节点列表,并获取所述LocalVariableDeclaration节点列表中节点declarators.name属性的第二属性值;
第六获取单元,用于若所述第二属性值为所述目标数据对象变量,则获取节点declarators.type.name,且节点declarators.type.name为目标数据对象;
单元测试创建单元,用于根据所述源数据对象以及所述目标数据对象创建单元测试,在所述单元测试中实例化所述源数据对象以及所述目标数据对象;
赋值单元,用于通过mock对所述单元测试中的所述源数据对象赋值;
第一转换单元,用于将赋值后的所述源数据对象实例化对象转换为第一json字符串;
数据对象复制单元,用于通过BeanUtils.copyProperties进行数据对象复制,得到目标数据对象实例化对象;
第二转换单元,用于将所述目标数据对象实例化对象转换为第二json字符串;
比较单元,用于比较所述第一json字符串以及所述第二json字符串,若相同,则所述源数据对象以及所述目标数据对象的数据对象复制不存在异常,否则存在异常。
7.根据权利要求6所述的数据对象复制异常排查装置,其特征在于,所述第一获取单元具体用于:
通过gitclone命令从项目代码管理台获取项目源码。
8.根据权利要求6所述的数据对象复制异常排查装置,其特征在于,所述判断单元具体用于:
判断所述抽象语法树中是否存在StatementExpression节点;
若存在,则获取所述StatementExpression节点下的expression.member属性,并判断是否为copyProperties,同时获取所述StatementExpression节点下的expression.qualifier属性并判断是否为BeanUtils,;
当两者均为是,则所述目标文件中存在使用数据对象复制;
否则,所述目标文件中不存在使用数据对象复制。
9.一种数据对象复制异常排查设备,其特征在于,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1-5任一项所述的数据对象复制异常排查方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行权利要求1-5任一项所述的数据对象复制异常排查方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310833118.1A CN116881143A (zh) | 2023-07-06 | 2023-07-06 | 一种数据对象复制异常排查方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310833118.1A CN116881143A (zh) | 2023-07-06 | 2023-07-06 | 一种数据对象复制异常排查方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116881143A true CN116881143A (zh) | 2023-10-13 |
Family
ID=88254221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310833118.1A Pending CN116881143A (zh) | 2023-07-06 | 2023-07-06 | 一种数据对象复制异常排查方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116881143A (zh) |
-
2023
- 2023-07-06 CN CN202310833118.1A patent/CN116881143A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111666222A (zh) | 一种测试方法和相关装置 | |
CN111078556B (zh) | 应用测试方法及装置 | |
CN115904950A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN116303085A (zh) | 一种测试原因分析方法、装置、设备及存储介质 | |
CN116468382A (zh) | 一种rpa机器人流程管理方法、装置、设备及存储介质 | |
CN111359210A (zh) | 一种数据处理方法、装置、电子设备以及存储介质 | |
CN112667868B (zh) | 一种数据检测方法以及装置 | |
CN116881143A (zh) | 一种数据对象复制异常排查方法、装置、设备及存储介质 | |
CN114490307A (zh) | 一种单元测试方法、装置及存储介质 | |
CN106294025B (zh) | 一种终端软体的下载方法和装置 | |
CN116501413A (zh) | 一种自动生成接口调用方法、装置、设备及存储介质 | |
CN116303086A (zh) | 端到端测试方法、配置方法、装置、设备及存储介质 | |
CN116737761A (zh) | 一种异步对账处理方法、装置、设备及存储介质 | |
CN116303646A (zh) | 一种跨数据库的数据比对方法、装置、设备及存储介质 | |
CN116257503A (zh) | 一种数据迁移处理方法、装置、设备及存储介质 | |
CN117787207A (zh) | 标准单元库验证方法、装置、存储介质及电子设备 | |
CN116862473A (zh) | 银行生产应用调用关系分析方法、装置、设备及存储介质 | |
CN117688085A (zh) | 分布式数据库切换方法、装置、系统、设备及存储介质 | |
CN116303060A (zh) | Esb调用请求处理方法、装置、系统、设备及存储介质 | |
CN116467192A (zh) | 一种测试用例自动生成方法、装置、设备及存储介质 | |
CN117456570A (zh) | 屏下指纹校准方法、装置、设备及存储介质 | |
CN116804922A (zh) | 一种业务质检管理方法、装置、设备及存储介质 | |
CN115586903A (zh) | 一种空语句块查找方法、装置、设备及存储介质 | |
CN117041013A (zh) | 一种故障节点处理方法、装置、系统、设备及存储介质 | |
CN116361189A (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 |