一种基于程序中间结构特征的蜕变关系预测方法技术

技术编号:28558454 阅读:56 留言:0更新日期:2021-05-25 17:52
本发明专利技术公开了一种基于程序中间结构特征的蜕变关系预测方法。本发明专利技术首先将Java程序转换成程序的中间结构;其次对Java程序的中间结构进行分析,并从中提取特征;由此构建数据集;然后将所构建的数据集作为半监督SVM‑Bagging‑KNN的训练集训练二分类预测模型;最后将预测模型用于预测未出现过的Java方法的蜕变关系。本发明专利技术引入Bagging算法框架,在一个半监督算法中,在训练弱分类器的过程中引入bagging算法框架,使用强分类器预测训练集中加入的未标记数据的结果的可靠性高,这部分数据结果的高可靠性会使最终预测模型的效率。

【技术实现步骤摘要】
一种基于程序中间结构特征的蜕变关系预测方法
本专利技术涉及一种蜕变关系的预测方法,更具体地说,本专利技术涉及一种基于程序中间结构特征的预测方法。
技术介绍
随着经济与社会的发展以及5G时代的到来,越来越多的软件被开发出来。这些软件使我们的生活愈加便利,但是与此同时也会带来巨大的损失。例如,2007年,美国边境和海关控制网络发送了大量错误数据。这导致洛杉矶整个机场关闭了8个小时,在问题解决之前,超过17000架飞机不能起飞,这影响到了很多人的出行计划,对机场也造成很大的损失。这件事的罪魁祸首是一段有Bug的嵌入式软件。在2016年,日本发射了一颗名叫“Hitomi”的X射线天文卫星。但是仅一个月后,“Hitomi”与地面之间的通信发生了严重故障。软件错误导致了超过2.86亿美元的损失。因此保证软件的可靠性显得愈发重要。软件测试旨在发现软件中存在的缺陷进而提高程序的可靠性,传统的软件测试需要测试人员为待测程序构造大量的测试用例和预期输出,通过对比测试用例的执行结果是否满足其预期输出来验证程序的正确性。但在很多情况下,测试人员无法为待测程序构造预期输出,那么就无法确定测试用例的执行结果是否与预期输出一致,这就是软件测试中存在Oracle问题。由于Oracle问题的存在,传统的软件测试就不能适用于这类软件的测试。为了缓解软件测试中的Oracle问题,Chen提出了蜕变测试技术。这种方法通过检查程序执行结果之间的关系来测试程序,无需构造预期输出从而缓解了Oracle问题。蜕变关系是蜕变测试的核心也是进行蜕变测试的前提,蜕变关系的构造大部分都依赖于待测程序领域内的专业知识,也就是不同的测试领域需要了解相关领域的知识。现有的蜕变关系通常由领域专家完成,用这种方式来构造蜕变关系,需要耗费大量的人力物力。因此,使用机器学习模型预测蜕变关系来减少构建蜕变关系所需要耗费的时间及成本是大势所趋。在自动化预测蜕变关系领域中,将程序转化为可视化的中间结构(一种与特定语言无关的表示方式,通过词法、语法和语义分析得到的)并从中提取相应的特征,然后使用机器学习算法预测蜕变关系。这些方法首先将Java方法转换成对应的控制流图。然后从控制流图中提取出节点特征和路径特征组成特征集,最后使用机器学习算法建立一个预测模型。虽然这些方法已经验证可行,但是此方法提取特征的方法以及使用的机器学习算法还有待改进。一个程序的控制流图仅可以反映一个程序的结构,该方法只从一个程序的结构中提取特征,没有从一个程序的语法特征方面进行分析,导致提取出的特征集合不全面,最终导致预测准确率不高。导致预测准确率不高的另一个因素就是机器学习算法的选择。在之前的专利技术中,已经通过实验证明半监督学习算法的预测准确率要比监督学习高效。但是在之前的专利技术中,半监督算法所训练的弱分类模型效果并不是很好,虽然有的方法对弱分类器的决策边界处的数据进行重新预测,但是还是没有从根本上解决问题。
技术实现思路
本专利技术的目的是针对现有技术的不足,提供一种基于程序中间结构特征的蜕变关系预测方法,基于Java程序的中间结构,将中间结构转化成程序流图(CFG)以及抽象语法树(AST),从程序流图以及抽象语法树中提取相应的特征,并利用机器学习生成一个预测模型,最后使用该预测模型对未知Java程序自动化选择一个或多个可使用的蜕变关系。本专利技术所采用的技术方案如下:步骤1:将Java程序转换成程序的中间结构;步骤2:对步骤1中Java程序的中间结构进行分析,并从中提取特征;步骤3:构建数据集;步骤4:将步骤3中所构建的数据集作为半监督SVM-Bagging-KNN的训练集训练二分类预测模型;步骤5:将步骤4中的预测模型用于预测未出现过的Java方法的蜕变关系。本专利技术提供的技术方案包含以下有益效果:本专利技术在特征提取中加入抽象语法树特征的提取,在对一个程序结构特征提取的基础上,对一个程序的语法结构进行分析并从中提取特征。加入语法特征后的数据集能够更加全面的表示一个程序的特征,既包括结构信息,又包括语法信息。本专利技术引入Bagging算法框架,在一个半监督算法中,在训练弱分类器的过程中引入bagging算法框架。该算法框架通过训练多个弱分类器,以及结合一定的结合策略训练生成一个强分类器,使用该强分类器预测训练集中加入的未标记数据的结果的可靠性高,这部分数据结果的高可靠性会使最终预测模型的效率。本专利技术得到一个稳定的蜕变关系预测模型,不管是使用之前方法中所用的特征集还是使用在加入抽象语法树特征后的特征集,最终的预测模型的准确率相对较高。附图说明图1为本专利技术所涉及的流程图;图2为预测模型建立过程图;图3为集成学习的应用模型图;图4为基于Bagging算法集成SVM的模型图;图5为自助采样法过程图;图6为最终SVM预测模型建立过程图;图7为预测模型判断蜕变关系流程图。具体实施方式下面结合附图,对本专利技术的具体实施方案作进一步详细描述。其具体流程描述如图1所示,其中:步骤1:将Java程序转换成程序的中间结构;本专利技术使用一个Java优化框架Soot来将Java方法转换为控制流图(CFG)。控制流图(ControlFlowGraph,CFG)是一个有向图,它可以反应一个程序的逻辑控制流程和语句执行路径。本专利技术使用JavaCC将Java方法转换为抽象语法树(AST)。抽象语法树(AbstractSyntaxTree,AST)是一个树状结构,它是对一个程序的语法树进行适当的简化和修改后形状。步骤2:对步骤1中Java程序的中间结构进行分析,并从中提取特征;本专利技术从控制流图中提取节点特征和路径特征。节点特征由给定的节点、入度和出度组成,特征值为该节点特征在控制流图中出现的次数。图1中从CFG中提取的节点特征如下表所示。特征特征值start-0-11add-1-12if-2-21assi-1-11end-1-01路径特征由开始节点到每个节点的最短路径和每个节点到结束节点的最短路径组成,特征值为该路径特征在控制流图中出现的次数。图1中从CFG中提取的路径特征如下表所示。本专利技术从抽象语法树中提取节点特征,给定的特征值为抽象语法树中节点的出现次数。图1中从抽象语法树中提取节点特征集如下表所示。步骤3:构建数据集;从步骤2中提取的特征组成一个特征集和,并加入一个标记,该标记表示该Java方法是否满足给定的蜕变关系(正例或反例)。步骤4:将步骤3中所构建的数据集作为半监督SVM-Bagging-KNN的训练集训练二分类预测模型;传统的监督学习需要一组足本文档来自技高网
...

【技术保护点】
1.一种基于程序中间结构特征的蜕变关系预测方法,其特征在于该方法包括以下步骤:/n步骤1:将Java程序转换成程序的中间结构;/n步骤2:对步骤1中Java程序的中间结构进行分析,并从中提取特征;/n步骤3:构建数据集;/n步骤4:将步骤3中所构建的数据集作为半监督SVM-Bagging-KNN的训练集训练二分类预测模型;/n步骤5:将步骤4中的预测模型用于预测未出现过的Java方法的蜕变关系。/n

【技术特征摘要】
1.一种基于程序中间结构特征的蜕变关系预测方法,其特征在于该方法包括以下步骤:
步骤1:将Java程序转换成程序的中间结构;
步骤2:对步骤1中Java程序的中间结构进行分析,并从中提取特征;
步骤3:构建数据集;
步骤4:将步骤3中所构建的数据集作为半监督SVM-Bagging-KNN的训练集训练二分类预测模型;
步骤5:将步骤4中的预测模型用于预测未出现过的Java方法的蜕变关系。


2.如权利要求1所述的一种基于程序中间结构特征的蜕变关系预测方法,其特征在于,步骤1中所述的Java程序使用Java优化框架Soot和JavaCC转换成程序中间结构,分别为程序流图和抽象语法树。


3.如权利要求2所述的一种基于程序中间结构特征的蜕变关系预测方法,其特征在于,步骤2中所述的中间结构分析就是对程序流图以及抽象语法树进行分析,从程序流图中提取节点特征和路径特征;
节点特征由给定的节点、入度和出度组成,特征值为该节点特征在控制流图中出现的次数;
路径特征由开始节点到每个节点的最短路径和每个节点到结束节点的最短路径组成,特征值为该路径特征在控制流图中出现的次数;
从抽象语法树中提取节点特征,给定的特征值为抽象语法树中节点的出现次数。


4.如权利要求1所述的一种基于程序中间结构特征的蜕变关系预测方法,其特征在于,步骤3中所述的构建数据集,就是将步骤2中提取形成的特征集合加上对应的标签。


5.如权利要求...

【专利技术属性】
技术研发人员:殷昱煜阮佳杰李尤慧子陈慢慢
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:浙江;33

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

1