System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于变更历史的性能测试用例优先级排序方法技术_技高网

一种基于变更历史的性能测试用例优先级排序方法技术

技术编号:42015681 阅读:3 留言:0更新日期:2024-07-16 23:09
本发明专利技术公开了一种基于变更历史的性能测试用例优先级排序方法。本发明专利技术的方法借助代码静态分析技术来获取微基准的性能变化特征,包括微基准方法签名和函数调用图,并将这些特征融合到深度学习模型的隐藏空间中,以生成微基准的排序得分,最终形成微基准排序序列。该排序方法具有准确率高、效率高等特点,能够更迅速地在回归测试中检测到大规模性能回归,并及时向测试人员报告,以采取相应的代码解决方案。区别于现有的测试用例优先级排序技术,本方法提出的基于变更历史的性能测试用例优先级排序方法适用于性能测试用例,具备更强的性能回归检测能力。

【技术实现步骤摘要】

本专利技术涉及软件回归测试领域,具体涉及一种基于变更历史的性能测试用例优先级排序方法


技术介绍

1、为了保证软件的快速交付和上线,回归测试需要在有限的时间内迅速进行。据统计数据,软件工程中用于软件测试的资源占比可以达到所有软件开发成本的50%以上,而这其中,回归测试占软件测试总成本的比例可达80%。可以预见,回归测试在软件开发中的重要性以及其时间和资源消耗巨大。因此,提高回归测试的效率至关重要。

2、在持续集成过程中,性能基准测试通常涵盖多个微基准集合。每个微基准都可能使用不同的参数进行测试,以验证软件系统的性能。在某些情况下,微基准可能需要在不同的循环周期或迭代中执行,以确保系统在各种条件下的稳定性和可靠性。为了尽早确定软件的稳定性和可靠性,有必要提前执行能够发现系统不稳定的微基准,即那些在不同版本间性能差异较大的用例。因此,在软件微基准测试中应用恰当的排序技术,有助于在新版本中更快地捕捉到大型性能回归。

3、然而,目前在功能测试上已经成熟的测试用例优先级排序(test caseprioritization,tcp)技术不能适用于性能测试上。传统的tcp技术是针对于功能测试设计的,其根据覆盖信息对测试进行排序,其假设是覆盖更多语句、分支或函数的测试更有可能发现缺陷。然而,性能变化可能与覆盖元素的数量无关,而是与每个元素对性能的影响有关。例如,一个循环变量的变化可能比多个条件语句的变化影响更大。本专利技术旨在为测试人员提供在回归测试中能快速发现性能回归的测试用例,以便及时通知开发人员解决此问题。


技术实现思路

1、为了克服上述现有技术的不足,提出了一种基于变更历史的性能测试用例优先级排序方法。本专利技术使用深度学习模型来解决微基准排序的问题,可有效提供一个准确率高的微基准序列。

2、本专利技术具体采用的技术方案如下:

3、第一方面,本专利技术提供了一种基于变更历史的性能测试用例优先级排序方法,其包括以下步骤:

4、s1:获取当前需要执行基准测试的软件系统项目源代码版本,并扫描源代码中的所有java文件,将其中带有微基准测试框架的@benchmark注解的代码块作为微基准,由扫描到的所有微基准构成微基准集合;

5、s2:对于微基准集合中每个微基准,从每个微基准所在类的源代码中提取出微基准的类名、方法名以及所有参数信息,并拼接后进行分词从而得到分词序列,用于输入排序模型中生成方法签名特征;同时从每个微基准中提取出微基准的抽象语法树,并对抽象语法树进行流增强与赋值权重边后再进行向量化表示,获得由树中所有节点的节点特征xv、所有边的边标签特征xe、所有边的边权重特征xw组成的语法树编码信息用于输入排序模型中生成函数调用图特征;

6、s3:将微基准集合中每个微基准对应的分词序列和语法树编码信息输入排序模型中,先由特征表示层对输入的分词序列和语法树编码信息分别进行编码得到方法签名特征和函数调用图特征,再将两个编码特征进行拼接,最后将拼接后的特征输入微基准排序的排序学习层,得到每个微基准的排序得分;对微基准集合中所有微基准根据得分高低进行排序,获得一个微基准排序序列。

7、作为上述第一方面的优选,所述s2中,对于微基准集合中每个微基准bi所在类的源代码ci,从源代码ci中提取分词序列的方法如下:

8、以当前微基准bi所在类的源代码ci为定位对象,定位出微基准的类名与方法名,再以@param注解定位出微基准的所有参数,将定位得到的类名、方法名以及所有参数的参数名和取值信息按序拼接成序列,再对拼接序列进行语义分割,得到分词序列fmp。

9、作为上述第一方面的优选,所述提取分词序列的过程中,先通过javaparser将当前微基准bi所在类的源代码ci解析为抽象语法树,通过遍历抽象语法树上的类声明节点(typedeclaration)和方法声明(methoddeclaration)节点,定位出微基准的类名与方法名,再通过注解节点(annotation)和字段节点(fielddeclaration)定位出@param注解和微基准的参数。

10、作为上述第一方面的优选,所述提取分词序列的过程中,将类名、方法名以及参数信息进行拼接,再使用符号“.”、“&”作为分隔符对方法签名序列进行分词操作。

11、作为上述第一方面的优选,所述s2中,对于微基准集合中每个微基准bi,从微基准bi中提取语法树编码信息的方法如下:

12、s21、以当前需要执行基准测试的软件系统项目源代码版本作为新版本,以上一个执行基准测试的软件系统项目源代码版本作为旧版本,针对新版本中的微基准bi,提取微基准bi内的所有调用函数信息,并将这些调用函数以内部类的形式与微基准bi进行聚合,形成一个大类pi;获取大类pi中各调用函数的语法信息,形成抽象语法树ai,并进一步解析抽象语法树的基本结构信息,基于数据的流向和条件语句增强抽象语法树ai中的数据流和控制流的连接关系,形成流增强的抽象语法树;

13、s22、获取新版本和旧版本以及这两个版本之间的所有代码提交记录,并对任意两个相邻代码版本提取两者之间存在差异的文件集合,对于所述文件集合中的每一个文件获取对应的修改前代码和修改后代码,然后分别将修改前代码和修改后代码解析为抽象语法树,基于两棵抽象语法树解析各自包含的类名以及方法名,进而比对分析在两个相邻代码版本之间发生过修改的方法以及对应的类名,所述修改包括方法名变化或内容变化两种;将每个发生过修改的方法对应的类名和方法名进行拼接形成第一拼接信息,然后将各第一拼接信息存储与第一信息集合中;

14、s23、获取新版本和旧版本各自的代码提交记录,然后确定新旧两个版本中所有存在差异的java文件集合,再提取集合中每个java文件在新旧两个版本中的源代码,进一步提取两个源代码版本之间在方法内容上存在差异的所有方法的方法名以及对应的类名,对于每个存在差异的方法通过对比确定存在差异的语句,最终将每个存在差异的方法所对应的类名、方法名、存在差异的语句进行拼接形成第二拼接信息,然后将各第二拼接信息存储与第二信息集合中;

15、s24、基于所述第一信息集合和第二信息集合对流增强的抽象语法树进行边权重设置,其中:若树中存在methodinvocation节点,且该methodinvocation节点对应的类名与其邻居节点对应的调用方法名的拼接信息存在于所述第一信息集合中,则对这个methodinvocation节点与这个邻居节点之间的边赋予大于0的边权重;若树中存在任一节点v,满足该节点v所属的类名、所属的方法名以及节点名称的拼接信息存在于所述第二信息集合中,则对这个节点与这个节点的所有邻居节点之间的边赋予大于0的边权重;而其余所有没有被赋值的边权重设置为0;

16、s25、对经过流增强与权重边赋值后的抽象语法树进行向量化表示,其中每条边的边标签和边权重均使用onehot编码形成边标签特征和边权重特征,每个节本文档来自技高网...

【技术保护点】

1.一种基于变更历史的性能测试用例优先级排序方法,其特征在于包括以下步骤:

2.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述S2中,对于微基准集合中每个微基准所在类的源代码,从源代码中提取分词序列的方法如下:

3.根据权利要求2所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述提取分词序列的过程中,先通过JavaParser将当前微基准所在类的源代码解析为抽象语法树,通过遍历抽象语法树上的类声明节点和方法声明节点,定位出微基准的类名与方法名,再通过注解节点和字段节点定位出@Param注解和微基准的参数。

4.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述S2中,对于微基准集合中每个微基准bi,从微基准bi中提取语法树编码信息的方法如下:

5.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述S3中,排序模型中的前向数据处理流程如下:

6.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述S3中,所述排序模型用于实际推理前需进行有监督训练,训练采用的损失函数为均方误差损失。

7.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述S3中,最终的排序结果和微基准对应的源代码数据被保存下来作为样本,待经过质量控制后的样本数量满足要求后对所述排序模型进行增量更新。

8.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时,能实现如权利要求1~7任一项所述的基于变更历史的性能测试用例优先级排序方法。

9.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,当所述计算机程序被处理器执行时,实现如权利要求1~7任一所述的基于变更历史的性能测试用例优先级排序方法。

10.一种计算机电子设备,其特征在于,包括存储器和处理器;

...

【技术特征摘要】

1.一种基于变更历史的性能测试用例优先级排序方法,其特征在于包括以下步骤:

2.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述s2中,对于微基准集合中每个微基准所在类的源代码,从源代码中提取分词序列的方法如下:

3.根据权利要求2所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述提取分词序列的过程中,先通过javaparser将当前微基准所在类的源代码解析为抽象语法树,通过遍历抽象语法树上的类声明节点和方法声明节点,定位出微基准的类名与方法名,再通过注解节点和字段节点定位出@param注解和微基准的参数。

4.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述s2中,对于微基准集合中每个微基准bi,从微基准bi中提取语法树编码信息的方法如下:

5.根据权利要求1所述的基于变更历史的性能测试用例优先级排序方法,其特征在于,所述s3中,排序模型中的...

【专利技术属性】
技术研发人员:陈洁张宏帅俞东进张龙
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1