CN113448852A - 一种测试案例的获取方法、装置、电子设备及存储介质 - Google Patents
一种测试案例的获取方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113448852A CN113448852A CN202110727977.3A CN202110727977A CN113448852A CN 113448852 A CN113448852 A CN 113448852A CN 202110727977 A CN202110727977 A CN 202110727977A CN 113448852 A CN113448852 A CN 113448852A
- Authority
- CN
- China
- Prior art keywords
- abstract syntax
- syntax tree
- source code
- test case
- code
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 176
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000013507 mapping Methods 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims description 43
- 238000010586 diagram Methods 0.000 claims description 26
- 238000012545 processing Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 18
- 230000008030 elimination Effects 0.000 claims description 15
- 238000003379 elimination reaction Methods 0.000 claims description 15
- 238000004364 calculation method Methods 0.000 claims description 13
- 230000014509 gene expression Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 6
- 238000010606 normalization Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013100 final test Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013509 system migration Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
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)
- Stored Programmes (AREA)
Abstract
本发明提供一种测试案例的获取方法、装置、电子设备及存储介质,可用于金融领域或其他技术领域。所述方法包括:获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。本发明提供的测试案例的获取方法、装置及电子设备,能够有效减少人工编写测试案例的工作量,提高测试效率。
Description
技术领域
本发明涉及金融领域或其他技术领域,具体涉及一种测试案例的获取方法、装置、电子设备及存储介质。
背景技术
软件测试是软件项目流程的必要阶段。目前,在软件测试的过程中,通过运行测试人员基于测试项目的具体需求编写的测试案例,并分析运行结果,以检验该软件是否达到预期的需求。
但是,在软件项目测试过程中,当我们遇到系统迁移或系统重构的项目(比如银行原来运行在大型主机上的所有程序功能,全部迁移到分布式平台实现),由于迁移或重构涉及的程序代码体量往往非常大,针对如此多的全量程序,人工编写测试案例的工作量非常大。
分析目前已有的测试案例生成方法,比如先获取待测试软件的测试需求;然后基于预先构建的测试案例生成模型对输入的测试需求进行处理,输出与待测试软件对应的测试案例数据。这种方法,如果遇到的是没有具体的全量的测试需求的项目(比如系统迁移或系统重构的项目),这种方法不适用。
发明内容
针对现有技术中的问题,本发明实施例提供一种测试案例的获取方法、装置、电子设备及存储介质,能够至少部分地解决现有技术中存在的问题。
一方面,本发明提出一种测试案例的获取方法,包括:获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
可选的,在将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例之后,所述方法还包括:展示所述与所述源代码相匹配的测试案例;根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
可选的,在生成所述源代码的测试案例之后,所述方法还包括:将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
可选的,所述计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,包括:分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
可选的,对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
可选的,所述计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度包括:将各所述处理后的抽象语法树转换为文本形式的目标代码;基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
第二方面,本发明提供一种测试案例的获取装置,包括:获取模块,用于获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;生成模块,用于根据所述源代码,生成所述源代码的抽象语法树;计算模块,用于计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;匹配模块,用于根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
可选的,所述装置还包括:展示模块,用于展示所述与所述源代码相匹配的测试案例;生成模块,用于根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
可选的,所述装置还包括:保存模块,用于将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
可选的,所述计算模块包括:生成单元,用于分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;计算单元,用于计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
可选的,所述生成单元对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;所述生成单元对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;所述生成单元对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
可选的,所述计算单元包括:转换子单元,用于将各所述处理后的抽象语法树转换为文本形式的目标代码;计算子单元,用于基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
再一方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的测试案例的获取方法的步骤。
又一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的测试案例的获取方法的步骤。
本发明实施例提供的测试案例的获取方法、装置及电子设备,通过获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。这样,基于抽象语法树相似度计算的原理,实现了一种统一对不同程序代码进行相似度计算和匹配的方法,使得基于源代码辅助生成测试案例成为可能,复用存量测试案例,有效减少了人工编写测试案例的工作量,提高了测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明第一实施例提供的测试案例的获取方法的流程示意图。
图2是本发明第二实施例提供的测试案例的获取方法的流程示意图。
图3是本发明第三实施例提供的测试案例的获取方法的流程示意图。
图4是本发明第四实施例提供的测试案例的获取方法的部分流程示意图。
图5是本发明第五实施例提供的测试案例的获取方法的部分流程示意图。
图6是本发明第六实施例提供的测试案例的获取方法的流程示意图。
图7是本发明第七实施例提供的测试案例的获取装置的结构示意图。
图8是本发明第八实施例提供的测试案例的获取装置的结构示意图。
图9是本发明第九实施例提供的测试案例的获取装置的结构示意图。
图10是本发明第十实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明实施例提供的测试案例的获取方法的执行主体包括但不限于计算机。
图1是本发明一实施例提供的测试案例的获取方法的流程示意图,如图1所示,本发明实施例提供的测试案例的获取方法,包括:
S101、获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;
本步骤,可以通过客户端插件获取所述测试案例匹配请求,举例而言,开发人员在完成源代码后,点击测试案例匹配请求,把源代码发送到服务器,以使服务器寻找与所述源代码匹配的测试案例。
S102、根据所述源代码,生成所述源代码的抽象语法树;
本步骤,抽象语法树:AST(Abstract Syntax Tree),是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的结构,树的每个节点ASTNode都表示源码中的一个结构,简单来说,AST是源代码的一种结构化表示。
S103、计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;
本步骤,所述数据库中包括现有的代码模块和测试案例的映射关系集合(key-value pair),其中,代码模块是以抽象语法树(以下简称AST)的形式保存的。
可基于抽象语法树的相似度计算方法(AST Based Method),计算所述源代码的抽象语法树与数据库中已有的抽象语法树之间的相似度。
S104、根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
本步骤,由于现有大量的存量测试案例,代码结构上是相似的,说明现有的这些测试案例可以复用;故可将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例进行使用。
所述数据库中符合相似度要求的抽象语法树,可以为与所述源代码的抽象语法树之间的相似度大于目标阈值的抽象语法树,也可以为与所述源代码的抽象语法树之间的相似度最高的抽象语法树,或者是既与所述源代码的抽象语法树之间的相似度最高、并同时满足相似度大于目标阈值的抽象语法树。
本发明实施例提供的测试案例的获取方法,通过获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。这样,基于抽象语法树相似度计算的原理,实现了一种统一对不同程序代码进行相似度计算和匹配的方法,使得基于源代码辅助生成测试案例成为可能,复用存量测试案例,有效减少了人工编写测试案例的工作量,提高了测试效率,解决了现有测试案例生成方法中对测试需求、测试人员经验等方面存在一定依赖的不足。
如图2所示,可选的,在将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例之后,所述方法还可以包括:
S105、展示所述与所述源代码相匹配的测试案例;
S106、根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
本实施例,可以通过客户端插件展示所述测试案例,开发人员只需通过客户端微调所述测试案例中的测试输入数据、变量名以及少量测试代码逻辑,即可生成一份对应于所述源代码的最终测试案例,而不需要从头开始写一个完整的测试案例。
如图3所示,可选的,在上述实施例中,在生成所述源代码的测试案例之后,所述方法还可以包括:
S107、将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
本实施例,可将开发人员修改过的测试案例发送到服务器,与所述开发人员上传的源代码生成新的key-value pair,从而不断丰富数据库的key-value pair,使数据库达到自动进化的能力。
如图4所示,可选的,在上述实施例中,所述计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,可以包括:
S1031、分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;
S1032、计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
本实施例,要解决的核心问题是,对于在逻辑上相似、文本上不相似的代码,如何复用相似的测试案例。核心思想在于:基于抽象语法树,将逻辑上相似的代码,转换为文本上也相似的代码,最终通过比较相似文本来复用测试案例。
通常有下面几种情况,会导致代码“逻辑上相似,文本上不相似”:
1)程序代码通过不同形式的函数组合;
2)程序代码存在冗余;
3)程序代码是相同的逻辑,不同的语法结构。
上述几种情况,导致对代码进行简单的文本比对(即string compare字符串比对),即使代码的逻辑相似,文本的差异也较大。本实施例针对这几种情况,给出以下解决方法:
1)函数展开
2)冗余代码消除
3)标准化(语法结构标准化、统一变量命名)。
可选的,在上述实施例中,对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;
对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;
对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
本实施例,所述函数展开、冗余代码消除、以及标准化的实现过程如下:
1)函数展开
对AST进行函数展开的处理,调用函数实现的部分,都用具体函数相应的代码还原。
2)冗余代码消除
基于程序代码的输出,构建程序依赖图(PDG),不在数据依赖关系图(DFG,DataFlow Graph)和控制依赖关系(CFG,Control Flow Graph)图上的代码,认为是冗余代码,进行删除。
3)标准化
对AST进行标准化的处理,包括:中间局部变量被替换成表达式、语法结构的标准化、统一变量/符号命名。
(a)中间局部变量被替换成表达式,类似于函数内部代码的展开
(b)语法结构的标准化
进行过语法变换的部分,都统一用一种写法。比如:
switch语法结构标准化为if else结构;
for循环标准化为while循环;
单目操作+=,-=,*=,/=标准化为二元操作符。
(c)统一变量/符号命名
所有局部变量按出现位置,被重新命名为vx,比如v0,v1,v2,...
如图5所示,可选的,在上述实施例中,所述计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度可以包括:
S10321、将各所述处理后的抽象语法树转换为文本形式的目标代码;
S10322、基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
本实施例,把处理完的AST再次转换为文本形式的代码(Code Generate),基于编辑距离计算代码间的相似度(Edit Distance),以所述源代码所对应的目标代码与其他目标代码之间的相似度,作为所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度,取相似度大于目标阀值的、或相似度最高的即为我们需要的测试案例。
上述实施例中,所述源代码所对应的目标代码与任一个其他目标代码之间的相似度计算公式如下:
相似度=1-编辑距离/max length;
关于编辑距离:
1)编辑距离定义:描述两个字符串之间的关系:将一个字符串转换成另外一个字符串,使用的最少单字符编辑次数,编辑动作包括删除、插入和替换。
比如:Distance("kitten","sitten")==1,因为只要将"kitten"的首字符"k"替换成"s"就可以了。
编辑距离能够比较直观的反映两个字符串之间的区别。编辑距离越小,区别就越小,也就越相似。
2)计算编辑距离的算法:
使用动态规划的方法,转换成求子字符串编辑距离。
假设有两个字符串a,b.其中|a|和|b|分别代表a和b的字符串的长度,tail(a)和tail(b)表示a和b分别去掉第一个字符的子字符串。
ED(a,b)表示a和b的编辑距离,则有下面求解编辑距离的伪代码:
关于max length:
max length是指计算相似度的两个代码之间,字符串长度较大的其中一个代码的字符串长度。
上述相似度计算,以下用一个具体实施例来说明:
以下<Calculator.java>的calculate函数和<Evaluator.java>的evaluate函数,都提供简单的整数计算功能。在未转换前,他们的实现代码差异较大,普通的方法比较难判断它们具有较高的相似度。
使用本实施例提供的方法,能够判断这两个函数有91%的相似度。
如图6所示,所述方法的步骤依次是:
源代码->AST表示->函数展开->冗余代码消除->标准化->AST转换成源代码->计算编辑距离->计算相似度
根据相似度计算公式:
相似度=1-编辑距离/max_length(CalculatorStandardization.java,EvaluatorStandardization.java)=91%
图7是本发明一实施例提供的测试案例的获取装置的结构示意图,如图7所示,本发明实施例提供的测试案例的获取装置包括:获取模块21,用于获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;生成模块22,用于根据所述源代码,生成所述源代码的抽象语法树;计算模块23,用于计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;匹配模块24,用于根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
本发明实施例提供的测试案例的获取装置,通过获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。这样,基于抽象语法树相似度计算的原理,实现了一种统一对不同程序代码进行相似度计算和匹配的方法,使得基于源代码辅助生成测试案例成为可能,复用存量测试案例,有效减少了人工编写测试案例的工作量,提高了测试效率。
如图8所示,可选的,所述装置还包括:展示模块25,用于展示所述与所述源代码相匹配的测试案例;生成模块26,用于根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
如图9所示,可选的,所述装置还包括:保存模块27,用于将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
可选的,所述计算模块包括:生成单元,用于分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;计算单元,用于计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
可选的,所述生成单元对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;所述生成单元对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;所述生成单元对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
可选的,所述计算单元包括:转换子单元,用于将各所述处理后的抽象语法树转换为文本形式的目标代码;计算子单元,用于基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
本发明提供的装置的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
需要说明的是,本发明实施例提供的测试案例的获取方法及装置可用于金融领域,也可用于除金融领域之外的任意技术领域,本发明实施例对测试案例的获取方法及装置的应用领域不做限定。
图10为本发明一实施例提供的电子设备的实体结构示意图,如图10所示,该电子设备可以包括:处理器(processor)301、通信接口(Communications Interface)302、存储器(memory)303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。处理器301可以调用存储器303中的逻辑指令,以执行如下方法:获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
此外,上述的存储器303中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;根据所述源代码,生成所述源代码的抽象语法树;计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种测试案例的获取方法,其特征在于,包括:
获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;
根据所述源代码,生成所述源代码的抽象语法树;
计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;
根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
2.根据权利要求1所述的方法,其特征在于,在将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例之后,所述方法还包括:
展示所述与所述源代码相匹配的测试案例;
根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
3.根据权利要求2所述的方法,其特征在于,在生成所述源代码的测试案例之后,所述方法还包括:
将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
4.根据权利要求1所述的方法,其特征在于,所述计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,包括:
分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;
计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
5.根据权利要求4所述的方法,其特征在于,对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;
对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;
对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
6.根据权利要求4所述的方法,其特征在于,所述计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度包括:
将各所述处理后的抽象语法树转换为文本形式的目标代码;
基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
7.一种测试案例的获取装置,其特征在于,包括:
获取模块,用于获取测试案例匹配请求,所述匹配请求中包括待匹配的源代码;
生成模块,用于根据所述源代码,生成所述源代码的抽象语法树;
计算模块,用于计算所述抽象语法树与数据库中的各抽象语法树之间的相似度,其中,所述数据库中保存有至少一个代码模块的抽象语法树与测试案例的映射关系;
匹配模块,用于根据所述源代码的抽象语法树与数据库中的各抽象语法树之间的相似度,将所述数据库中符合相似度要求的抽象语法树所对应的测试案例,作为与所述源代码相匹配的测试案例。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
展示模块,用于展示所述与所述源代码相匹配的测试案例;
生成模块,用于根据对所述测试案例中的测试输入数据、变量名以及测试代码逻辑的调整指示,对所述测试案例进行调整,生成所述源代码的测试案例。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
保存模块,用于将所述源代码的抽象语法树以及所述源代码的测试案例对应保存至所述数据库中。
10.根据权利要求7所述的装置,其特征在于,所述计算模块包括:
生成单元,用于分别对所述源代码的抽象语法树以及所述数据库中的抽象语法树进行函数展开、冗余代码消除以及标准化处理,生成各处理后的抽象语法树;
计算单元,用于计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
11.根据权利要求10所述的装置,其特征在于,所述生成单元对抽象语法树进行函数展开处理包括:将所述抽象语法树中调用函数实现的部分,用所述函数相应的代码还原;
所述生成单元对抽象语法树进行冗余代码消除处理包括:根据所述抽象语法树构建程序依赖图,所述程序依赖图包括数据依赖关系图和控制依赖关系图;将所述抽象语法树中不在数据依赖关系图和控制依赖关系图上的代码作为冗余代码进行删除;
所述生成单元对抽象语法树进行标准化处理包括:将抽象语法树中的中间局部变量替换为表达式、将语法结构替换为标准化写法、统一变量/符号命名。
12.根据权利要求10所述的装置,其特征在于,所述计算单元包括:
转换子单元,用于将各所述处理后的抽象语法树转换为文本形式的目标代码;
计算子单元,用于基于所述源代码所对应的目标代码与其他目标代码之间的编辑距离,计算所述源代码所对应的处理后的抽象语法树与其他处理后的抽象语法树之间的相似度。
13.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110727977.3A CN113448852A (zh) | 2021-06-29 | 2021-06-29 | 一种测试案例的获取方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110727977.3A CN113448852A (zh) | 2021-06-29 | 2021-06-29 | 一种测试案例的获取方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113448852A true CN113448852A (zh) | 2021-09-28 |
Family
ID=77813998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110727977.3A Pending CN113448852A (zh) | 2021-06-29 | 2021-06-29 | 一种测试案例的获取方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113448852A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114201406A (zh) * | 2021-12-16 | 2022-03-18 | 中国电信股份有限公司 | 基于开源组件的代码检测方法、系统、设备及存储介质 |
CN115080851A (zh) * | 2022-06-25 | 2022-09-20 | 平安银行股份有限公司 | 基于数据库的案例推荐方法、计算机设备、存储介质 |
CN118567932A (zh) * | 2024-08-02 | 2024-08-30 | 山东墨氪智能科技有限公司 | 适于半导体器件参数测试的流程生成执行方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN110221933A (zh) * | 2019-05-05 | 2019-09-10 | 北京百度网讯科技有限公司 | 代码缺陷辅助修复方法及系统 |
CN112286575A (zh) * | 2020-10-20 | 2021-01-29 | 杭州云象网络技术有限公司 | 基于图匹配模型的智能合约相似度检测方法及系统 |
CN112394973A (zh) * | 2020-11-23 | 2021-02-23 | 山东理工大学 | 一种基于伪孪生网络的多语言代码剽窃检测方法 |
-
2021
- 2021-06-29 CN CN202110727977.3A patent/CN113448852A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110221933A (zh) * | 2019-05-05 | 2019-09-10 | 北京百度网讯科技有限公司 | 代码缺陷辅助修复方法及系统 |
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN112286575A (zh) * | 2020-10-20 | 2021-01-29 | 杭州云象网络技术有限公司 | 基于图匹配模型的智能合约相似度检测方法及系统 |
CN112394973A (zh) * | 2020-11-23 | 2021-02-23 | 山东理工大学 | 一种基于伪孪生网络的多语言代码剽窃检测方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114201406A (zh) * | 2021-12-16 | 2022-03-18 | 中国电信股份有限公司 | 基于开源组件的代码检测方法、系统、设备及存储介质 |
CN114201406B (zh) * | 2021-12-16 | 2024-02-02 | 中国电信股份有限公司 | 基于开源组件的代码检测方法、系统、设备及存储介质 |
CN115080851A (zh) * | 2022-06-25 | 2022-09-20 | 平安银行股份有限公司 | 基于数据库的案例推荐方法、计算机设备、存储介质 |
CN118567932A (zh) * | 2024-08-02 | 2024-08-30 | 山东墨氪智能科技有限公司 | 适于半导体器件参数测试的流程生成执行方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11221832B2 (en) | Pruning engine | |
US10884904B2 (en) | Automatic cognitive adaptation of development assets according to requirement changes | |
CN113448852A (zh) | 一种测试案例的获取方法、装置、电子设备及存储介质 | |
WO2019075390A1 (en) | BOX BLACK MATCHING MOTOR | |
US20170357927A1 (en) | Process management for documentation-driven solution development and automated testing | |
US8849673B2 (en) | Rule generation | |
US11263113B2 (en) | Cloud application to automatically detect and solve issues in a set of code base changes using reinforcement learning and rule-based learning | |
US12032941B2 (en) | Method and system for updating legacy software | |
CN112270176B (zh) | 深度学习框架中模式转换的方法、装置和计算机存储介质 | |
CN108304164B (zh) | 一种业务逻辑的开发方法及开发系统 | |
CN113297081B (zh) | 一种持续集成流水线的执行方法和装置 | |
CN115904480B (zh) | 代码重构方法、装置、电子设备及存储介质 | |
CN106843822B (zh) | 一种执行代码生成方法及设备 | |
US20140372488A1 (en) | Generating database processes from process models | |
US20190258462A1 (en) | Batch script decomposer | |
CN111273913B (zh) | 一种输出规范表示的应用程序接口数据的方法及装置 | |
CN114117445A (zh) | 漏洞分类方法、装置、设备及介质 | |
CN114168119A (zh) | 代码文件编辑方法、装置、电子设备以及存储介质 | |
JP7393404B2 (ja) | コンパイル方法、コンパイル装置、電子デバイス、記憶媒体及びプログラム | |
US20240265101A1 (en) | Detecting code anomalies in source code using machine learning techniques | |
CN113971028B (zh) | 数据处理方法、装置、设备、存储介质及计算机程序产品 | |
US20230315399A1 (en) | Instinctive Cipher Compilation and Implementation | |
US20240176722A1 (en) | Automated public certification of specifications and software | |
US20240232333A9 (en) | Systems and methods for contextual alert enrichment in computing infrastructure and remediation thereof | |
EP2402897A1 (en) | Rule generation |
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 |