CN117009223A - 基于抽象语法的软件测试方法、系统、存储介质及终端 - Google Patents

基于抽象语法的软件测试方法、系统、存储介质及终端 Download PDF

Info

Publication number
CN117009223A
CN117009223A CN202310881351.7A CN202310881351A CN117009223A CN 117009223 A CN117009223 A CN 117009223A CN 202310881351 A CN202310881351 A CN 202310881351A CN 117009223 A CN117009223 A CN 117009223A
Authority
CN
China
Prior art keywords
code
clustering
tested
test
codes
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
Application number
CN202310881351.7A
Other languages
English (en)
Inventor
王聪
李晓瑜
郑德生
周永
付锦涛
柯武平
汪忠来
万虎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Police College
University of Electronic Science and Technology of China
Original Assignee
Sichuan Police College
University of Electronic Science and Technology of China
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sichuan Police College, University of Electronic Science and Technology of China filed Critical Sichuan Police College
Priority to CN202310881351.7A priority Critical patent/CN117009223A/zh
Publication of CN117009223A publication Critical patent/CN117009223A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • G06F18/232Non-hierarchical techniques
    • G06F18/2321Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
    • G06F18/23213Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了基于抽象语法的软件测试方法、系统、存储介质及终端,属于软件测试领域,包括:分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;对聚类标准相似度矩阵使用K‑means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;对聚类分组中的待测试代码进行标准化克隆。本发明对存在问题的测试代码进行聚类再根据代码克隆进行全智能化的自动标准化并生成标准软件测试代码,测试过程中不需要进行人工对缺陷代码进行修复,模型会自动发现并自动修复存在缺陷的测试代码。

Description

基于抽象语法的软件测试方法、系统、存储介质及终端
技术领域
本发明涉及软件测试领域,尤其涉及基于抽象语法的软件测试方法、系统、存储介质及终端。
背景技术
在软件的开发过程当中,针对软件的功能设计会根据实际的用户需求指定,而用户对产品的安全性和可靠性的要求同样是软件功能设计的基础规划,但是在开发人员的开发过程当中由于各种各样的因素会导致软件功能会出现一些纰漏,此时,就需要软件测试人员对此严格把关。软件测试作为软件开发重要的一环,能够协助开发者发现开发过程当中的bug,并通过软件测试手段对功能故障进行修复,排除故障问题,从而能够帮助软件项目平稳且安全地上线使用。
在当前的研究背景当中,利用深度学习中包括分类、预测、聚类的算法被广泛地运用到了软件测试当中,其中就有对测试案例当中的故障进行支持向量机的预测方法,利用决策树对软件测试过程当中出现的故障进行随机森林分类,还包括采用DBScan算法对漏洞验证报告进行聚类分析等。但当前的各类利用深度学习算法分析软件测试过程的问题仅仅提供了一种协助分析软件测试过程中的错误聚类、错误分类、错误预测,并不能协助从技术层面解决遇到的测试问题。
经过研究分析,当前针对利用深度学习算法协助软件测试技术存在缺陷:①当前深度学习中采用的聚类算法不能对测试使用的代码进行标准化的数据处理,不能得到有效的测试用例输入,从而不能模拟真实的软件测试环境,不能对测试代码进行自动修复。②当前深度学习采用的聚类算法只能对测试用例进行聚类分析,不能从技术手段方面解决代码程序出现的错误问题,不能使用一个无缺陷的标准代码对待测试代码进行标准化。③当前的大多数方法都是对软件测试中出现的问题进行人工修正,没能提供一个完整的聚类并进行代码修复的模型,不能实现完全脱离人工检测并对代码进行智能修复。④当前的聚类算法需要对最终的聚类结论进行人工测试,需要软件测试人员进行测试参数的设置,未能实现完全的智能化。
发明内容
本发明的目的在于克服现有软件测试存在的问题,提供了基于抽象语法的软件测试方法、系统、存储介质及终端,利用深度学习中的有关聚类算法和抽象语法代码对测试用例当中的测试程序模块进行抽象化聚类,再根据标准化的功能程序模块对存在问题的测试程序模块进行克隆标准化。
本发明的目的是通过以下技术方案来实现的:
在第一方面,提供一种基于抽象语法的软件测试方法,包括以下步骤:
S1、分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
S2、计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
S3、对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
S4、对聚类分组中的待测试代码进行标准化克隆。
作为一优选项,一种基于抽象语法的软件测试方法,所述抽象转化包括以下步骤:
S11、使用语法解析器对测试代码进行AST转化;
S12、进行测试程序代码的转换;
S13、获得由多个函数信息对象组成的列表结构。
作为一优选项,一种基于抽象语法的软件测试方法,所述计算抽象转化后待测试代码和标准软件测试代码的相似度,包括:
S21、将标准软件测试代码对应的列表与待测试代码对应的列表进行拼接,得到最终的语法列表;
S22、计算获取的语法列表之间的相似性。
作为一优选项,一种基于抽象语法的软件测试方法,所述对聚类标准相似度矩阵使用K-means算法进行聚类,包括:
S31、进行聚类分析后得到标签分类结果,其中,根据待测试代码中的功能分类和标准软件测试代码的分类进行聚类中心K值的设置;
S32、将聚类标准相似度矩阵作为样本的数据对象,按照距离最近的准则将样本数据分到距离最近的聚类中心;
S33、更新聚类中心,将步骤S32中初步进行聚类的样本对象所对应的均值作为该类别的聚类中心,并计算目标函数的值;
S34、计算聚类中心,依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中。
作为一优选项,一种基于抽象语法的软件测试方法,所述对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估,包括:
根据步骤S34当中将待测试代码处理数据分为K个簇,而对于划分簇当中的每个功能向量,进行分别计算他们的轮廓系数。
作为一优选项,一种基于抽象语法的软件测试方法,所述对聚类分组中的待测试代码进行标准化克隆,包括以下步骤:
S41、构造克隆集:代码克隆器首先对获取的聚类分组中的代码进行分析,首先提取标准软件测试代码中的代码片段,再从同一个聚类分组中对待测试代码片段进行功能检测,对测试功能同标准软件测试代码所能够实现的功能有差别的待测试代码进行标记;
S42、对获取的克隆集进行功能识别与待测试代码的边界划分,获得测试克隆标准覆盖区域;
S43、采用自编码器实现的代码克隆机;
S44、根据获取的代码克隆采用基于java开发的Mybatis-plus框架进行软件测试代码的自动生成。
作为一优选项,一种基于抽象语法的软件测试方法,所述步骤S44具体包括:
将标准软件测试代码分割成java语言代码+测试语言占位符,再将计算得到的待测试代码的克隆集按照模板文件的编写方法和编写格式在模板引擎中实现自动生成。
在第二方面,提供一种基于抽象语法的软件测试系统,所述系统包括:
抽象代码转化模块,配置为分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
相似度计算模块,配置为计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
聚类模块,配置为对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
标准化克隆模块,配置为对聚类分组中的待测试代码进行标准化克隆。
在第三方面,提供一种计算机存储介质,其上存储有计算机指令,所述计算机指令运行时执行任意一项所述一种基于抽象语法的软件测试方法中相关内容。
在第四方面,提供一种终端,包括存储器和处理器,存储器上存储有可在处理器上运行的计算机指令,处理器运行计算机指令时执行任意一项所述一种基于抽象语法的软件测试方法中相关内容。
需要进一步说明的是,上述各选项对应的技术特征在不冲突的情况下可以相互组合或替换构成新的技术方案。
与现有技术相比,本发明有益效果是:
(1)本发明对存在问题的测试代码进行聚类再根据代码克隆进行全智能化的自动标准化并生成标准软件测试代码,对测试使用的代码进行标准化的数据处理,得到有效的测试用例输入,能模拟真实的软件测试环境;能够将深度学习中的聚类算法运用到测试代码用例当中并对测试代码进行处理分析,再利用标准化的测试克隆程序对存在问题的测试代码进行测试克隆,自动对软件测试周期中的待测模块进行聚类并自动生成或修改待测程序代码位标准的测试程序代码,直接提升软件测试的效率,测试过程中不需要进行人工对缺陷代码进行修复,模型会自动发现并自动修复存在缺陷的测试代码,省略人工维护项目测试代码的步骤,提高项目测试维护的智能化。
(2)本发明不仅能够进行测试代码的相似度分析,还可以对测试环境中存在问题的代码进行标准化处理。
(3)本发明利用聚类模型的生成,可以直接对软件测试的代码进行分析,测试人员只需要将待测试的代码输入模型中,模型自动对代码进行聚类并反馈结果,再利用代码克隆程序分析标准软件测试代码同待测试代码之间的差距,并自动修复待测试代码当中存在的问题。
(4)本发明利用一种纯智能化的测试代码分析模型对测试代码进行分析并输出待测试代码的分析报告,再根据报告中的聚类分组测试代码进行缺陷排除,实现标准化,极大地减少了人工测试工作,实现了真正的智能化软件测试。
(5)本发明能够直接对现实生产当中软件自动化测试中的代码进行封装聚类,对测试代码进行问题修复。
附图说明
图1为本发明实施例示出的一种基于抽象语法的软件测试方法的流程图。
具体实施方式
下面结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
参照图1,在一示例性实施例中,提供一种基于抽象语法的软件测试方法,包括以下步骤:
S1、分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
S2、计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
S3、对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
S4、对聚类分组中的待测试代码进行标准化克隆。
具体地,本发明采用抽象语法代码(AST)对软件测试过程中使用的测试代码进行抽象转化,将其抽象为树结构表示,利用抽象化的树状结构表达测试代码当中的测试类和测试对象,并使用一系列的树节点来表示测试源代码的每个测试用例部分,随后,利用相似度计量算法对提取的测试代码树节点进行相似度计算并获得相似度矩阵matrixT,在获得的相似度矩阵当中加入标准化的抽象测试代码节点矩阵,得到聚类标准相似度矩阵matrixS,将获取到的相似度矩阵用于K-means算法当中进行聚类,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估,获取到聚类分组后,使用克隆测试程序对聚类分组中的待测试代码进行标准化克隆,从而解决测试代码中存在的问题,得到高效率执行并安全性能好的测试用例代码。
进一步地,以待测试代码为例,所述抽象转化包括以下步骤:
S11、使用语法解析器对测试代码进行AST转化,分析待测试程序当中Java语言当中的语法和语义特征,根据Java的编译原理对待测试代码中的正则表达式进行提取和上下文语法的编程标注。
S12、进行测试程序代码的转换,使用Python当中的AST模块来对待测试程序的源代码进行处理,而AST抽象语法是Python将待测试程序源代码转换到字节代码的中间程序,借助AST模块结构,就可以从语法树的角度分析待测试代码的树结构,转换步骤为:待测试代码(Test Code)>语法树(Syntax Tree)>语法抽象(AST)>控制流(Control Flow)>字节码(Bytecode)。该步骤将待测试代码转换成字符串的格式并放入转换程序当中,再使用AST模块中的parse()函数对代码进行解析,得到相应的AST,由此获得的树节点就表示待测试程序代码中的每个类信息和变量信息以及语法逻辑信息。随后再提取一些关键的语法语义信息,继续从语法树当中提取主要的信息当作变量属性,并封装到函数信息对象(FuncInfo)当中,作为该待测试代码片段的主要信息转换对象。
S13、获得由多个函数信息对象组成的列表结构。具体地,对于步骤S12中的待测试代码数据集中的所有代码段,在执行了语法树分析和信息提取的操作之后,获得由多个函数信息对象组成的列表结构,最终的每个对象代表待测试代码的主要信息,步骤为:数据处理(Data Processing)>解析语法树(Parsing AST)>提取语法信息(Extract Syntax)>统计(Statistics)>拼接列表(Splicing List)。由此,待测试代码转换操作结束。
同理,加入标准化的软件测试程序功能模块代码,进行上述的相同实验操作,获得标准软件测试模块功能代码的转换列表。
进一步地,所述计算抽象转化后待测试代码和标准软件测试代码的相似度,包括:
S21、将标准软件测试代码对应的列表与待测试代码对应的列表进行拼接,得到最终的语法列表;
S22、计算获取的语法列表之间的相似性。具体地,相似性计算包括:
计算获取的语法列表之间的相似性,获取相应的相似矩阵matrixT。采用余弦相似度的方法对关注两个向量之间的方向差异进行相似度量,而该度量方式在本发明当中同待测试代码数据的特性更加符合,计算两个目标向量的余弦相似性公式为:将获取的分析列表中的每个代码对象转换为向量形式,再计算向量列表的余弦相似度,最终获取到相似度矩阵matrixS,而该矩阵表示每个待测试代码段之间的语法和语义相似度。
进一步地,所述对聚类标准相似度矩阵使用K-means算法进行聚类,包括:
S31、利用步骤S22中获取到的聚类标准相似度矩阵进行聚类实验进行聚类分析后得到标签分类结果,其中,根据待测试代码中的功能分类和标准软件测试代码的分类进行聚类中心K值的设置;
S32、将聚类标准相似度矩阵作为样本的数据对象,设置数据样本为X,其中包含了n个对象X={X1,X2,X3,…,Xn},其中的每个数据对象都含有m个根据待测试代码树划分的测试功能维度,根据数据对象同步骤①选取的聚类中心计算欧式距离,按照距离最近的准则将样本数据分到距离最近的聚类中心(判定为最相似的中心),并根据待测试代码的功能分类初始化K个聚类中心{C1,C2,C3,…,CK},1<K<n。欧式距离的计算方法:
其中,Xi表示第i个待测试对象1≤i≤n,Cj表示第j个聚类中心1≤j≤K,Xit表示第i个对象的第t个属性,1≤t≤m,Cjt表示第j个聚类中心的第t个属性。
S33、更新聚类中心,将步骤S32中初步进行聚类的样本对象所对应的均值作为该类别的聚类中心,并计算目标函数的值;
S34、计算聚类中心,K-means算法用中心定义了类簇的原型,类簇中心就是类簇内所有对象在各个维度的均值,其计算公式如下:
式中,Ct表示第t个聚类的中心,1≤t≤K,|St|表示第t个类簇中待测试代码功能对象的个数,Xi表示第i个类簇当中的第i个待测试代码功能对象,1≤i≤|St|.依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中,得到K个类簇{S1,S2,S3,…,SK,},得到最终的待测试代码和标准软件测试代码的聚类结果。
进一步地,所述对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估,包括:
根据步骤S34当中将待测试代码处理数据分为K个簇,而对于划分簇当中的每个功能向量,进行分别计算他们的轮廓系数。具体地,本发明采用轮廓系数对聚类的结果进行评估,轮廓系数能够结合内聚度和分离度两种因素,可以用来在原始的待测试代码对象数据的基础上评价本发明采用的K-means聚类算法得到的聚类结果所产生的影响。轮廓系数评估法原理:根据上述步骤当中将待测试代码处理数据分为K个簇,而对于划分簇当中的每个功能向量,进行分别计算他们的轮廓系数。对于其中的一个样本点i来说:
计算A(i)=Average(i向量到同簇内其他点不相似程度的平均值,体现凝聚度)。计算B(i)=Min(i向量到其他簇的平均不相似程度的最小值,体现分离度)。故对功能向量i对象的轮廓系数就为:
对于所有样本的Si(K),其中K表示聚类分簇个数,Si(K)表示K个分簇中包含的所有样本求轮廓系数之和,对求和的轮廓系数再求其均值得到S是该聚类是否合理、有效的度量。聚类结果的轮廓系数的取值在[-1,1]之间,值越大,说明同类样本相距约近,不同样本相距越远,则聚类效果越好。聚类评估通过后,对待测程序片段进行处理后重新拼接。
进一步地,所述对聚类分组中的待测试代码进行标准化克隆,包括以下步骤:
S41、构造克隆集:代码克隆器首先对获取的聚类分组中的代码进行分析,首先提取标准软件测试代码中的代码片段,再从同一个聚类分组中对待测试代码片段进行功能检测,对测试功能同标准软件测试代码所能够实现的功能有差别的待测试代码进行标记,此时便开始进行克隆集的构造,规定标准软件测试代码为CS,聚类同组当中存在问题的待测试代码为C1,C2,C3,…Cl,其中1≤l≤K,对代码进行集合处理,划分克隆集(CS,C1),由克隆集的传递性依次对问题代码进行克隆(C1,C2),…,(C2,Cl)。
S42、对获取的克隆集进行功能识别与待测试代码的边界划分,获得测试克隆标准覆盖区域;具体地,标准软件测试代码是在实际生产生活当中运用到软件项目测试中的被实践检验过的没有缺陷的测试代码,再利用克隆检测机制对获取的克隆集进行对比识别,通过与标准软件测试代码的识别对比系统自动识别出待测试代码中的功能缺陷,例如:待测试代码没有实现哪些标准测试代码中的功能,待测试代码在测试程序的安全性方面同标准测试代码有哪些缺陷,随后利用代码克隆程序对待测试代码进行代码克隆,使之能够达到同标准软件测试代码相同的效果,其原理为:利用位置重叠原理对两段代码的重叠程度进行测量,再对被检测的代码段进行代码的添加和删除,使之测试功能进行广度功能的覆盖,实现算法:
其中,l1表示标准软件测试代码的边界位置,l2表示检测待测试代码的划分位置,而LO(l1,l2)表示标准软件测试代码与待测试代码的测试覆盖区域,ne表示代码克隆前旧版本的待测试软件的测试起始线,oe表示待测试软件的测试边界线,ns表示经过代码克隆后新版的待测试软件的标准起始线,ns表示经过代码克隆后新版的待测试软件的标准边界线,获得测试克隆标准覆盖区域。
S43、采用自编码器实现的代码克隆机:搭建一个基于神经网络的自动编码器对步骤S42中获取的测试克隆标准覆盖区域进行自适应表征学习,根据标准软件测试代码的特征提取并进行自编码器的参数评估,获取主要的测试功能片段分析得到分析自编码段EncodeS,再对同一个标准覆盖区域中的待测试代码的特征提取并进行参数评估,得到待测试代码的自编码段EncodeT,同标准测试自编码段EncodeS对比得到功能差异矩阵:
[Diff1,Diff2,Diff3,…,Diffp]。其中,1≤p≤m。利用自动编码器对标准软件测试代码进行分析,将标准自编码段EncodeS作为学习目标进行信号构造,再将差异矩阵[Diff1,Diff2,Diff3,…,Diffp]作为训练集放入自编码器模型当中进行训练,采用多项式核函数以及高斯核函数实现自动编码器,不断对内核当中的差异矩阵进行自编码使之获得标准软件测试代码的功能特征,完成功能片段的编码后采用解码器获得新的经过自编码器学习后的标准矩阵:
[Standerd1,Standerd2,Standerd3,…,Standerdp],并输出自编码后的待测试标准代码,自编码器原理:
KP(u,v)=(<u,v>)d
该式为多项式核函数,其中,d表示多项式核函数的最高项次数,u表示需要需要进行学习的矩阵参数,v表示目标学习编码段参数。
该式为高斯核函数,其中,t表示一个学习率的参数,可以通过调节参数的值来控制高斯核函数的输出值,由此来控制自编码器的学习率,得到好的学习效果。由此,得到的输出结果标准自编码矩阵:
[Standerd1,Standerd2,Standerd3,…,Standerdp],就是经过标准化后的待测试代码的数学表示,完成代码克隆,获得代码克隆机模型。
S44、根据获取的代码克隆采用基于java开发的Mybatis-plus框架进行软件测试代码的自动生成。代码生成器原理:将标准软件测试代码作为代码模板,将进行代码克隆后的待测试代码进行克隆代码自动生成,能够实现对标准软件测试代码中的视图代码以及数据代码进行分离生成。
进一步地,所述步骤S44具体包括:
将标准软件测试代码分割成java语言代码+测试语言占位符,再将计算得到的待测试代码的克隆集按照模板文件的编写方法和编写格式在模板引擎中实现自动生成。
在另一示例性实施例中,以医院助手软件测试为例说明上述实施例的方法的实施过程。
本实施例采用对医院助手软件测试环境当中的测试代码作为分析的待测数据集,这些测试代码在测试不同的功能时有着不同的语法、语义、变量修饰符的差异。在进行数据集的制作时,本发明采用了医院助手测试中的30个等效的代码测试段,在同一个类别当中包含了12中不同类型的代码段数据,再加入根据实践检验过的标准测试代码段,根据等效类别的测试段当中功能划分后的包括登录、注册、验证码测试、医生表单数据增删改查、病患信息表增删改查等功能划分,加入标准代码测试段10个,由此包含的待测试代码段12×(30+10)=480个。
获取实验的数据后依次使用前述方法对测试代码进行处理,其中,对获取的相似度矩阵进行聚类和分析包括以下步骤:
(1)利用获取到的待测试代码相似度矩阵进行聚类实验,本发明采用的算法是K-means聚类算法,进行聚类分析后得到标签分类结果,其中,根据待测试程序代码中的功能分类和标准软件测试代码的分类进行聚类中心K值的设置,根据设置的数据集,本实验的K值设置为标准软件测试代码分类个数:10
(2)对获取到的测试代码相似度矩阵作为样本的数据对象,设置数据样本为480,其中包含了480个对象X={X1,X2,X3,…,X480},其中的每个数据对象都含有12个根据待测试代码树划分的测试功能维度,根据数据对象同步骤①选取的聚类中心计算欧式距离,按照距离最近的准则将样本数据分到距离最近的聚类中心(判定为最相似的中心),并根据待测试代码的功能分类初始化10个聚类中心{C1,C2,C3,…,C10}。欧式距离的计算方法:
其中,Xi表示第i个待测试对象1≤i≤n,Cj表示第j个聚类中心1≤j≤10,Xit表示第i个对象的第t个属性,1≤t≤m,Cjt表示第j个聚类中心的第t个属性。
(3)更新聚类中心:将上述步骤中初步进行聚类的样本对象所对应的均值作为该类别的聚类中心,并计算目标函数的值。
(4)Kmeans算法用中心定义了类簇的原型,类簇中心就是类簇内所有对象在各个维度的均值,其计算公式如下:
式中,Ct表示第t个聚类的中心,1≤t≤10,|St|表示第t个类簇中待测试代码功能对象的个数,Xi表示第i个类簇当中的第i个待测试代码功能对象,1≤i≤|St|。依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中,得到10个类簇{S1,S2,S3,…,S10},得到最终的待测试代码和标准软件测试代码的聚类结果。
(5)聚类结果的评估:本发明采用轮廓系数对聚类的结果进行评估,轮廓系数能够结合内聚度和分离度两种因素,可以用来在原始的待测试代码对象数据的基础上评价本发明采用的K-means聚类算法得到的聚类结果所产生的影响。轮廓系数评估法原理:根据上述步骤当中将待测试代码处理数据分为K个簇,而对于划分簇当中的每个功能向量,进行分别计算他们的轮廓系数。对于其中的一个样本点i来说:计算A(i)=Average(i向量到同簇内其他点不相似程度的平均值,体现凝聚度)。计算B(i)=Min(i向量到其他簇的平均不相似程度的最小值,体现分离度)。故对功能向量i对象的轮廓系数就为:
对于所有样本的Si(K),其中K表示聚类分簇个数,Si(K)表示K个分簇中包含的所有样本求轮廓系数之和,对求和的轮廓系数再求其均值得到S是该聚类是否合理、有效的度量。聚类结果的轮廓系数的取值在[-1,1]之间,值越大,说明同类样本相距约近,不同样本相距越远,则聚类效果越好。
对得到聚类分组中的待测试代码部分进行标准代码克隆主要包括以下步骤:
(1)代码克隆器首先对获取的聚类分组中的代码进行分析,首先提取标准软件测试代码中的代码片段,再从同一个聚类分组中对待测试代码片段进行功能检测,对测试功能同标准软件测试代码所能够实现的功能有差别的待测试代码进行标记,此时便开始进行克隆集的构造。
(2)克隆集:规定标准软件测试代码为CS,聚类同组当中存在问题的待测试代码为C1,C2,C3,…Cl,其中1≤l≤10,对代码进行集合处理,划分克隆集(CS,C1),由克隆集的传递性依次对问题代码进行克隆(C1,C2),…,(C2,Cl)。
(3)对获取的克隆集进行功能识别并进行功能克隆,标准软件测试代码是在实际生产生活当中运用到软件项目测试中的被实践检验过的没有缺陷的测试代码,再利用克隆检测机制对获取的克隆集进行对比识别,通过与标准软件测试代码的识别对比系统自动识别出待测试代码中的功能缺陷,例如:待测试代码没有实现哪些标准测试代码中的功能,待测试代码在测试程序的安全性方面同标准测试代码有哪些缺陷,随后利用代码克隆程序对待测试代码进行代码克隆,使之能够达到同标准软件测试代码相同的效果,其原理为:利用位置重叠原理对两段代码的重叠程度进行测量,再对被检测的代码段进行代码的添加和删除,使之测试功能进行广度功能的覆盖,实现算法:
(4)其中,l1表示标准软件测试代码的边界位置,l2表示检测待测试代码的划分位置,而LO(l1,l2)表示标准软件测试代码与待测试代码的测试覆盖区域,ne表示代码克隆前旧版本的待测试软件的测试起始线,oe表示待测试软件的测试边界线,ns表示经过代码克隆后新版的待测试软件的标准起始线,ns表示经过代码克隆后新版的待测试软件的标准边界线,获得测试克隆标准覆盖区域。
(5)采用自编码器实现的代码克隆机:搭建一个基于神经网络的自动编码器对步骤(4)中获取的测试克隆标准覆盖区域进行自适应表征学习,根据标准软件测试代码的特征提取并进行自编码器的参数评估,获取主要的测试功能片段分析得到分析自编码段EncodeS,再对同一个标准覆盖区域中的待测试代码的特征提取并进行参数评估,得到待测试代码的自编码段EncodeT,同标准测试自编码段EncodeS对比得到功能差异矩阵:
[Diff1,Diff2,Diff3,…,Diffp]。其中,1≤p≤m。利用自动编码器对标准软件测试代码进行分析,将标准自编码段EncodeS作为学习目标进行信号构造,再将差异矩阵[Diff1,Diff2,Diff3,…,Diffp]作为训练集放入自编码器模型当中进行训练,采用多项式核函数以及高斯核函数实现自动编码器,不断对内核当中的差异矩阵进行自编码使之获得标准软件测试代码的功能特征,完成功能片段的编码后采用解码器获得新的经过自编码器学习后的标准矩阵:
[Standerd1,Standerd2,Standerd3,…,Standerdp],并输出自编码后的待测试标准代码,自编码器原理:
KP(u,v)=(<u,v>)d
该式为多项式核函数,其中,d表示多项式核函数的最高项次数,u表示需要需要进行学习的矩阵参数,v表示目标学习编码段参数。
该式为高斯核函数,其中,t表示一个学习率的参数,可以通过调节参数的值来控制高斯核函数的输出值,由此来控制自编码器的学习率,得到好的学习效果。由此,得到的输出结果标准自编码矩阵:
[Standerd1,Standerd2,Standerd3,…,Standerdp],就是经过标准化后的待测试代码的数学表示,完成代码克隆,获得代码克隆机模型。
(6)根据获取的代码克隆采用基于java开发的Mybatis-plus框架进行软件测试代码的自动生成,代码生成器原理:将标准软件测试代码作为代码模板,将进行代码克隆后的待测试代码进行克隆代码自动生成,能够实现对标准软件测试代码中的视图代码以及数据代码进行分离生成,将标准软件测试代码分割成java语言代码+测试语言占位符,再将计算得到的待测试代码的克隆集按照模板文件的编写方法和编写格式在模板引擎中实现自动生成,由此便实现了本发明所提出的思想:对存在问题的测试代码进行聚类再根据代码克隆进行全智能化的自动标准化并生成标准软件测试代码,测试过程中不需要进行人工对缺陷代码进行修复,模型会自动发现并自动修复存在缺陷的测试代码。
在另一示例性实施例中,提供一种基于抽象语法的软件测试系统,所述系统包括:
抽象代码转化模块,配置为分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
相似度计算模块,配置为计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
聚类模块,配置为对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
标准化克隆模块,配置为对聚类分组中的待测试代码进行标准化克隆。
在另一示例性实施例中,本发明提供一种计算机存储介质,其上存储有计算机指令,所述计算机指令运行时执行所述一种基于抽象语法的软件测试方法中相关内容。
基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
在另一示例性实施例中,本发明提供一种终端,包括存储器和处理器,存储器上存储有可在处理器上运行的计算机指令,处理器运行计算机指令时执行所述一种基于抽象语法的软件测试方法中相关内容。
处理器可以是单核或者多核中央处理单元或者特定的集成电路,或者配置成实施本发明的一个或者多个集成电路。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的处理器包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
以上具体实施方式是对本发明的详细说明,不能认定本发明的具体实施方式只局限于这些说明,对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演和替代,都应当视为属于本发明的保护范围。

Claims (10)

1.一种基于抽象语法的软件测试方法,其特征在于,包括以下步骤:
S1、分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
S2、计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
S3、对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
S4、对聚类分组中的待测试代码进行标准化克隆。
2.根据权利要求1所述的一种基于抽象语法的软件测试方法,其特征在于,所述抽象转化包括以下步骤:
S11、使用语法解析器对测试代码进行AST转化;
S12、进行测试程序代码的转换;
S13、获得由多个函数信息对象组成的列表结构。
3.根据权利要求2所述的一种基于抽象语法的软件测试方法,其特征在于,所述计算抽象转化后待测试代码和标准软件测试代码的相似度,包括:
S21、将标准软件测试代码对应的列表与待测试代码对应的列表进行拼接,得到最终的语法列表;
S22、计算获取的语法列表之间的相似性。
4.根据权利要求1所述的一种基于抽象语法的软件测试方法,其特征在于,所述对聚类标准相似度矩阵使用K-means算法进行聚类,包括:
S31、进行聚类分析后得到标签分类结果,其中,根据待测试代码中的功能分类和标准软件测试代码的分类进行聚类中心K值的设置;
S32、将聚类标准相似度矩阵作为样本的数据对象,按照距离最近的准则将样本数据分到距离最近的聚类中心;
S33、更新聚类中心,将步骤S32中初步进行聚类的样本对象所对应的均值作为该类别的聚类中心,并计算目标函数的值;
S34、计算聚类中心,依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中。
5.根据权利要求4所述的一种基于抽象语法的软件测试方法,其特征在于,所述对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估,包括:
根据步骤S34当中将待测试代码处理数据分为K个簇,而对于划分簇当中的每个功能向量,进行分别计算他们的轮廓系数。
6.根据权利要求1所述的一种基于抽象语法的软件测试方法,其特征在于,所述对聚类分组中的待测试代码进行标准化克隆,包括以下步骤:
S41、构造克隆集:代码克隆器首先对获取的聚类分组中的代码进行分析,首先提取标准软件测试代码中的代码片段,再从同一个聚类分组中对待测试代码片段进行功能检测,对测试功能同标准软件测试代码所能够实现的功能有差别的待测试代码进行标记;
S42、对获取的克隆集进行功能识别与待测试代码的边界划分,获得测试克隆标准覆盖区域;
S43、采用自编码器实现的代码克隆机;
S44、根据获取的代码克隆采用基于java开发的Mybatis-plus框架进行软件测试代码的自动生成。
7.根据权利要求6所述的一种基于抽象语法的软件测试方法,其特征在于,所述步骤S44具体包括:
将标准软件测试代码分割成java语言代码+测试语言占位符,再将计算得到的待测试代码的克隆集按照模板文件的编写方法和编写格式在模板引擎中实现自动生成。
8.一种基于抽象语法的软件测试系统,其特征在于,所述系统包括:
抽象代码转化模块,配置为分别采用抽象语法树对待测试代码和标准软件测试代码进行抽象转化;
相似度计算模块,配置为计算抽象转化后待测试代码和标准软件测试代码的相似度,得到聚类标准相似度矩阵;
聚类模块,配置为对聚类标准相似度矩阵使用K-means算法进行聚类,得到聚类分组,对获取的聚类分组采用sklearn当中的兰德系数进行聚类效果的评估;
标准化克隆模块,配置为对聚类分组中的待测试代码进行标准化克隆。
9.一种计算机存储介质,其上存储有计算机指令,其特征在于,所述计算机指令运行时执行权利要求1-7中任意一项所述一种基于抽象语法的软件测试方法中相关内容。
10.一种终端,包括存储器和处理器,存储器上存储有可在处理器上运行的计算机指令,其特征在于,处理器运行计算机指令时执行权利要求1-7中任意一项所述一种基于抽象语法的软件测试方法中相关内容。
CN202310881351.7A 2023-07-18 2023-07-18 基于抽象语法的软件测试方法、系统、存储介质及终端 Pending CN117009223A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310881351.7A CN117009223A (zh) 2023-07-18 2023-07-18 基于抽象语法的软件测试方法、系统、存储介质及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310881351.7A CN117009223A (zh) 2023-07-18 2023-07-18 基于抽象语法的软件测试方法、系统、存储介质及终端

Publications (1)

Publication Number Publication Date
CN117009223A true CN117009223A (zh) 2023-11-07

Family

ID=88564672

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310881351.7A Pending CN117009223A (zh) 2023-07-18 2023-07-18 基于抽象语法的软件测试方法、系统、存储介质及终端

Country Status (1)

Country Link
CN (1) CN117009223A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117633564A (zh) * 2023-11-29 2024-03-01 中国电子投资控股有限公司 基于非完全子树核的命令聚类方法、装置、介质和设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117633564A (zh) * 2023-11-29 2024-03-01 中国电子投资控股有限公司 基于非完全子树核的命令聚类方法、装置、介质和设备

Similar Documents

Publication Publication Date Title
CN110717039B (zh) 文本分类方法和装置、电子设备、计算机可读存储介质
CN112699377B (zh) 基于切片属性图表示学习的函数级代码漏洞检测方法
CN109034368B (zh) 一种基于dnn的复杂设备多重故障诊断方法
CN111314331B (zh) 一种基于条件变分自编码器的未知网络攻击检测方法
CN110147726B (zh) 业务质检方法和装置、存储介质及电子装置
WO2021174757A1 (zh) 语音情绪识别方法、装置、电子设备及计算机可读存储介质
CN109376092B (zh) 一种面向缺陷补丁代码的软件缺陷原因自动分析方法
CN113094200B (zh) 一种应用程序的故障预测方法和装置
CN111309915A (zh) 联合学习的自然语言训练方法、系统、设备及存储介质
CN110941716A (zh) 一种基于深度学习的信息安全知识图谱的自动构建方法
CN110968695A (zh) 基于弱监督技术主动学习的智能标注方法、装置及平台
CN112541180A (zh) 一种基于语法特征和语义特征的软件安全漏洞检测方法
CN107862327B (zh) 一种基于多特征的安全缺陷识别系统和方法
CN113778894B (zh) 测试用例的构建方法、装置、设备及存储介质
CN111447574B (zh) 短信分类方法、装置、系统和存储介质
CN112883990A (zh) 数据分类方法及装置、计算机存储介质、电子设备
CN117009223A (zh) 基于抽象语法的软件测试方法、系统、存储介质及终端
WO2023236836A1 (zh) 故障工单的质检方法、设备及存储介质
CN114997169A (zh) 一种实体词识别方法、装置、电子设备及可读存储介质
CN115359799A (zh) 语音识别方法、训练方法、装置、电子设备及存储介质
CN112685374B (zh) 日志分类方法、装置及电子设备
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN112579777B (zh) 一种未标注文本的半监督分类方法
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN110826616A (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