掌桥专利:专业的专利平台
掌桥专利
首页

基于程序代码与注释文本学习的蜕变关系推荐方法与系统

文献发布时间:2024-04-18 20:01:23


基于程序代码与注释文本学习的蜕变关系推荐方法与系统

技术领域

本发明涉及软件测试领域,特别涉及一种基于程序代码与注释文本学习的蜕变关系推荐方法与系统。

背景技术

在众多软件测试技术中,蜕变测试作为能有效减轻软件测试中预期输出问题压力的测试技术,目前被广泛应用在人工智能、搜索引擎等缺乏测试预言的软件系统的测试活动中。但蜕变关系作为蜕变测试技术的关键,往往需要软件测试人员在理解程序的需求规约基础上获取,且难以完全自动化地识别。因此,如何简便、高效地为程序构造出多样化的蜕变关系已成为蜕变测试研究领域的热点问题。

在现有的众多蜕变关系识别与生成方法中,基于机器学习技术的蜕变关系预测方法近年来得到了较多研究者的关注。其中,蜕变关系预测方法MRpredT使用文本挖掘技术对程序的注释进行处理,并利用处理后的注释文本信息衡量程序之间的相似性,以此达到蜕变关系重用的目的,实验结果表明该方法在对矩阵操作程序进行蜕变关系预测时有着不俗的表现。

代码注释是用于解释说明某一代码片段的逻辑与功能,但在某些情况下,代码注释并不能完全正确说明代码的功能逻辑,比如程序员对代码逻辑功能理解有误,撰写代码注释时不够全面等问题。在此情景下,蜕变关系预测方法MRpredT仅仅使用代码注释文本信息进行程序之间的相似性计算不够全面严谨,因此,MRpredT方法蜕变关系预测的性能有待提高。

发明内容

鉴于上述状况,本发明的主要目的是为了提出一种基于程序代码与注释文本学习的蜕变关系推荐方法与系统,以解决上述技术问题。

本发明提出了一种基于程序代码与注释文本学习的蜕变关系推荐方法,所述方法包括如下步骤:

步骤1,给定程序集合以及相对应的蜕变关系集合,蜕变关系集合中的蜕变关系记为MR,抽取程序集中每个程序的注释文本,以获取程序注释文本信息;

抽取程序集中每个程序的代码关键信息,以构建程序代码文本信息,将程序注释文本信息与程序代码文本信息整合,构建程序特征向量;

步骤2,针对蜕变关系集合中的每个MR的标签分别构建对应的分类预测模型,计算程序集合中两个程序特征向量之间的相似性得分,得到一个相似性得分矩阵,将MR的标签与相似性得分矩阵结合用于训练对应MR的分类预测模型,得到针对每个特定MR的MR预测模型;

步骤3,针对一个新程序,现需预测特定的MR是否适用于该程序,首先利用步骤1抽取新程序的特征向量,并使用相似性计算方法计算新程序的特征向量与给定程序集合中每一个程序特征向量之间的相似性,得到一个相似性得分向量,将相似性得分向量输入至特定的MR预测模型,根据预测标签以判断该MR预测模型所对应的蜕变关系是否适用于此新程序。

本发明还提出一种基于程序代码与注释文本学习的蜕变关系推荐系统,其中,所述系统应用如上所述的基于程序代码与注释文本学习的蜕变关系推荐方法,所述系统包括:

特征提取模块,用于:

给定程序集合以及相对应的蜕变关系集合,蜕变关系集合中的蜕变关系记为MR,抽取程序集中每个程序的注释文本,以获取程序注释文本信息;

抽取程序集中每个程序的代码关键信息,以构建程序代码文本信息,将程序注释文本信息与程序代码文本信息整合,构建程序特征向量;

模型构建模块,用于:

针对蜕变关系集合中的每个MR的标签分别构建对应的分类预测模型,计算程序集合中两个程序特征向量之间的相似性得分,得到一个相似性得分矩阵,将MR的标签与相似性得分矩阵结合用于训练对应MR的分类预测模型,得到针对每个特定MR的MR预测模型;

程序预测模块,用于:

针对一个新程序,现需预测特定的MR是否适用于该程序,首先利用特征提取模块抽取新程序的程序特征向量,并使用相似性计算方法计算新程序的特征向量与给定程序集合中每一个程序特征向量之间的相似性,得到一个相似性得分向量,将相似性得分向量输入至特定的MR预测模型,根据预测标签以判断该MR预测模型所对应的蜕变关系是否适用于此新程序。

相较于现有技术,本发明的有益效果如下:

与基于程序注释的蜕变关系预测方法MRpredT相比,本发明充分挖掘程序源代码的语义信息,并将其与程序的注释文本信息相结合,利用程序代码与注释文本两部分信息衡量程序之间的相似性,以此提高模型的蜕变关系预测性能。

本发明的附加方面与优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实施例了解到。

附图说明

图1为本发明提出的基于程序代码与注释文本学习的蜕变关系推荐方法的流程图;

图2为本发明提出的基于程序代码与注释文本学习的蜕变关系推荐方法的总体架构图;

图3为本发明提出的基于程序代码与注释文本学习的蜕变关系推荐系统的结构图;

图4为程序与蜕变关系的关联表示图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。

请参阅图1和图2,本发明实施例提供了一种基于程序代码与注释文本学习的蜕变关系推荐方法,所述方法包括如下步骤:

步骤1,给定程序集合以及相对应的蜕变关系集合,蜕变关系集合中的蜕变关系记为MR,抽取程序集中每个程序的注释文本,以获取程序注释文本信息;

抽取程序集中每个程序的代码关键信息,以构建程序代码文本信息,将程序注释文本信息与程序代码文本信息整合,构建程序特征向量;

在所述步骤1中,针对程序集中的每个程序,从程序中抽取注释文本,以获取程序注释文本信息的方法包括如下步骤:

针对给定程序集合中的每一个程序,使用JavaPaser工具包对程序代码注释进行分析,抽取其注释文本;

对于无注释文本的程序,则使用注释自动生成技术SeCNN为其生成程序代码的注释文本;

针对给定程序集合中的每一个程序,使用文本挖掘技术NLTK工具包对注释文本进行词形还原、词干提取、去停用词处理操作,获取程序注释文本集合。

在所述步骤1中,抽取程序代码关键信息,以构建程序代码文本信息的方法包括如下步骤:

针对给定程序集合中的每一个程序,使用Understand静态代码处理工具从程序代码中抽取程序代码函数名及其调用函数的函数名;

使用单词拼写检查库Pyenchant工具包对程序代码函数名及其调用函数的函数名进行单词拆分,获得程序代码文本;

使用文本挖掘技术NLTK工具包对程序代码函数名文本进行词形还原、词干提取、去停用词处理操作,获取程序代码文本集合。

在所述步骤1中,将程序注释文本信息与程序代码文本信息整合,构建程序特征向量的方法包括如下步骤:

针对给定程序集合中的每一个程序,将预处理后的程序代码注释文本集合与程序代码文本集合取并集得到程序文本信息P_

针对给定程序集合中的每一个程序,使用TF-IDF技术计算程序文本信息P_

其中,n表示特定单词在程序文本中的出现频次,N表示程序文本中所有单词的数量,D表示所有程序文本的集合,d表示包含该单词的文本数量,TF表示词频,IDF表示逆文档频率,TF-IDF表示单词在文本集合中的权重。

步骤2,针对蜕变关系集合中的每个MR的标签分别构建对应的分类预测模型,计算程序集合中两个程序特征向量之间的相似性得分,得到一个相似性得分矩阵,将MR的标签与相似性得分矩阵结合用于训练对应MR的分类预测模型,得到针对每个特定MR的MR预测模型;

在本实施例中,相似性计算方法采用余弦相似性,分类预测模型采用SVM支持向量机。

本步骤的具体方案如下:

针对给定程序集合中的两个程序之间,利用余弦相似性计算程序特征向量之间的相似性,以得到相似性得分矩阵;

针对每个特定的MR,将该MR的标签信息与程序相似性得分矩阵结合,利用SVM支持向量机,分别训练构建得到针对每个特定MR的SVM二分类器。例若训练针对MR

步骤3,针对一个新程序,现需预测特定的MR是否适用于该程序,首先利用步骤1抽取新程序的特征向量,并使用相似性计算方法计算新程序的特征向量与给定程序集合中每一个程序特征向量之间的相似性,得到一个相似性得分向量,将相似性得分向量输入至特定的MR预测模型,根据预测标签以判断该MR预测模型所对应的蜕变关系是否适用于此新程序。

本步骤的具体方案如下:

针对一个新程序P

使用余弦相似性计算新程序P

各MR预测模型将分别输出一个预测标签,该标签只有-1或1两种预测值,其中-1代表该MR不适用于新程序P

请参阅图3,本发明实施例提供了一种基于程序代码与注释文本学习的蜕变关系推荐系统,其中,所述系统应用如上所述的基于程序代码与注释文本学习的蜕变关系推荐方法,所述系统包括:

特征提取模块,用于:

给定程序集合以及相对应的蜕变关系集合,蜕变关系集合中的蜕变关系记为MR,抽取程序集中每个程序的注释文本,以获取程序注释文本信息;

抽取程序集中每个程序的代码关键信息,以构建程序代码文本信息,将程序注释文本信息与程序代码文本信息整合,构建程序特征向量;

模型构建模块,用于:

针对蜕变关系集合中的每个MR的标签分别构建对应的分类预测模型,计算程序集合中两个程序特征向量之间的相似性得分,得到一个相似性得分矩阵,将MR的标签与相似性得分矩阵结合用于训练对应MR的分类预测模型,得到针对每个特定MR的MR预测模型;

程序预测模块,用于:

针对一个新程序,现需预测特定的MR是否适用于该程序,首先利用特征提取模块抽取新程序的程序特征向量,并使用相似性计算方法计算新程序的特征向量与给定程序集合中每一个程序特征向量之间的相似性,得到一个相似性得分向量,将相似性得分向量输入至特定的MR预测模型,根据预测标签以判断该MR预测模型所对应的蜕变关系是否适用于此新程序。

对于本发明给出的基于程序代码与注释文本学习的蜕变关系推荐方法,整体流程框架如图2所示。第一步,使用JavaPaser工具包对程序集中各程序代码注释进行分析获取其注释文本信息,若存在无注释文本的程序,则执行第二步,否则执行第三步;第二步,对于无注释文本的程序使用注释自动生成技术SeCNN为其生成注释,随后执行第三步;第三步,利用文本挖掘技术NLTK对注释文本进行预处理,随后执行第四步;第四步,使用Understand静态代码处理工具从程序代码中抽取关键信息,利用Pyenchant工具对关键信息进行单词拆分,并使用文本挖掘技术NLTK对其进行处理,随后执行第五步;第五步,将预处理后的注释文本信息与代码文本信息整合得到程序文本信息P

图4描述了已知程序与其对应蜕变关系的关联表示。如图4所示,假设收集了m个程序,且每个程序都已有适合其进行蜕变测试活动的蜕变关系。如程序P

下面结合一个具体的示例来说明本发明方法的实施过程。本发明需根据程序代码与注释文本进行处理,在此选取程序removeColumn和insertRow作为示例程序,上述程序在Apache Commons Math Library3中可以找到。removeColumn函数的主要功能是删除矩阵中用户指定需要删除的一列,并返回删除列之后的矩阵。insertRow函数的功能是将用户指定的向量添加在用户指定的矩阵行中,并返回该矩阵。

本发明结合程序代码与注释文本两部分信息计算程序之间的相似性,接下来本实施例将使用removeColumn和insertRow作为示例程序详细介绍抽取程序特征向量以及计算程序之间相似性的过程。表1给出了使用JavaParser工具从removeColumn函数和insertRow函数进行抽取可分别得到其对应的注释文本;removeColumn函数和insertRow函数都含有原始注释,因此使用JavaPaser获取其原始注释后就可进行后续处理,但有些程序因人为或其它原因无原始注释,此时本实施例将采用SeCNN模型对无注释的程序代码自动生成注释,以便后续处理。表2给出了使用SeCNN模型自动生成注释与原始注释对比的示例;表3描述了原始注释与NLTK处理后的注释文本,其中removeColumn函数原始注释中的数词one、介词from被删除,Removes被还原成原始词形remove。相同的,insertRow函数中原始注释中的Adds也被还原成原始词形add,并且其中数词one、介词to也被删除。

表1 removeColumn函数和insertRow函数的原始注释

随后,本实施例将使用Understand工具对程序静态代码分析获取其函数名及其调用函数的函数名,其中函数名的取名规则与含义经常与该函数的主要功能紧密相连,而调用的函数可表示该函数经常需要使用的其它API,若两个函数调用的API大部分都相同,则认为这两个函数的功能与需求也大体相同。静态代码分析工具Understand能将被分析对象的函数调用情况在SimpleInvocationTrees.txt文件中给出,本实施例将对其进行编码分析获取被分析程序所调用的函数信息,对removeColumn函数和insertRow函数的分析结果如表4所示。与注释文本相同,使用NLTK对这些函数名文本信息进一步处理以得到预处理后的程序代码文本信息。但NLTK工具包并不能对函数名和调用函数进行有效地分析,因为Java函数的命名方式为驼峰式,它将两个或多个单词组合在一起,组合后该单词在语法结构上并不是一个合法的单词,这导致NLTK工具包并不能对其进行诸如词形还原等操作。本实施例在此使用Pyenchant单词拼写检查库对Java驼峰式命名函数进行有效地拆分,例如blankOfShape函数,使用Pyenchant库可将其拆分成blank、of、shape三个有效地单词。表5给出了经过NLTK工具包处理过后的文本信息;分别对程序的代码与注释进行文本挖掘处理后,需将两部分信息进行整合以得到完整的程序文本信息。经过预处理后的文本中每一个词汇都会在后续处理中表示为向量中的一个特征,因此本实施例在整合文本信息时采用较为简单的策略,将预处理后的注释文本与代码文本信息直接组合到一起。整合后的文本就代表程序经过处理后的文本信息。表6给出了经过整合策略处理过后的removeColumn函数和insertRow函数程序文本信息。

表4 removeColumn函数和insertRow函数的调用信息

表5 预处理后的removeColumn函数和insertRow函数代码文本信息

表6 整合后的removeColumn函数和insertRow函数程序文本信息

为了能利用程序文本信息计算程序之间的相似性,必须将程序文本信息转换为对应的数值向量。本实施例采用词频逆文本频率指数(Term Frequency–Inverse DocumentFrequency, TF-IDF)对程序文本信息进行向量转换。表7给出了removeColumn函数和insertRow使用TF-IDF模型处理后得到的特征向量,其特征集是:[add, blank, column,get, insert, matrix, remove, row, set, shape],各特征权重经过四舍五入保留两位小数,具体数据如表7所示。

表7 removeColumn函数和insertRow函数的特征向量权值

从程序注释与代码文本中抽取出其对应的特征向量后,随后可利用相似性计算方法计算特征向量之间的相似性得分以构成两个程序之间的相似性得分矩阵,该得分矩阵用以训练蜕变关系分类预测模型。本实施例采用余弦相似性对程序特征向量进行相似性计算。表8给出了相似性计算方法余弦相似性对removeColumn函数和insertRow函数特征向量进行相似性计算的具体得分情况示例,得分经四舍五入保留三位小数。

表8 removeColumn函数与insertRow函数的余弦相似性得分

至此,已经详细介绍了从程序代码与注释中抽取程序特征向量以及如何计算程序之间的相似性,随后可利用相似性计算方法余弦相似性计算特征向量之间的相似性得分以构成两个程序之间的相似性得分矩阵,该得分矩阵即可用以训练蜕变关系分类预测模型。

为了验证本发明的有效性,针对同样采用机器学习技术与文本挖掘技术进行蜕变关系推荐的MRpredT方法,本实施例将MRpredT与本发明开展了多次重复实验。在实验阶段,本实施例首先构建了数据集。数据集包含程序集与蜕变关系集两部分,其中本实施例收集了114个由Java语言编写的程序,程序集信息如表9所示;蜕变关系集信息如表10所示。

针对某一特定的蜕变关系,待测程序对其只有适合或者不适合(-1或1)两种状态。本实施例对上述收集的待测程序集中的每一个待测程序人工针对上述10个蜕变关系进行标签标定,其中“1”代表该蜕变关系适合待测程序,“-1”代表该蜕变关系不适合待测程序。本节为程序集中5个程序库总共114个程序分别针对上述10个MR标定了标签。

在实验设置阶段,本实施例进行了如下设置:

(1)各分类预测模型均使用来自于由python编程语言实现的开源机器学习库scikit-learn,且模型的参数均使用该库中的默认参数。

(2)使用AUC值与F1

AUC评价指标基于模型的真阳率和假阳率计算得出,AUC值越高代表模型的性能越好,AUC值大于0.9表明模型具有很好的预测效果。F1-

(3)使用

(4)本实施例分别计算预测模型的100次AUC值与F1-

表 9 程序集信息表

表10 蜕变关系集信息表

MRpredT方法使用python语言复现。本发明则使用SVM二分类器、余弦相似性计算方法,并对无注释的程序代码使用SeCNN模型为其自动生成注释。表11给出了本发明对比MRpredT的AUC均值、差值及秩和检验结果。本发明在MR

本发明对比MRpredT的F1-

表11 本发明对比MRpredT的AUC均值与差值及秩和检验结果

表12 本发明对比MRpredT的F1-

本发明在AUC评价指标中,AUC得分均值均高于MRpredT方法,秩和检验结果显示本发明只在MR

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、 “示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

相关技术
  • 逻辑地图的数据处理方法、装置、电子设备及存储介质
  • 地图数据显示方法、装置、电子设备及计算机存储介质
  • 蒙皮数据生成方法以及装置、电子设备及存储介质
  • 基于大数据的报表生成方法及装置、电子设备、存储介质
  • 数据分布存储方法、装置、存储介质及电子设备
  • 高精地图数据生成方法、装置、电子设备及存储介质
  • 高精地图数据存储介质及高精地图自动化生成方法
技术分类

06120116553802