一种基于抽象语法树的开源软件缺陷数据分类方法及系统技术方案

技术编号:26969672 阅读:19 留言:0更新日期:2021-01-05 23:58
本发明专利技术公开了一种基于抽象语法树的开源软件缺陷数据分类方法及系统。该方法包括:获取软件缺陷源代码信息;软件缺陷源代码信息包括缺陷修复前的代码文件和缺陷修复后的代码文件;生成软件缺陷源代码信息的抽象语法树,并确定抽象语法树的修改行为信息;基于修改行为信息中的修改节点识别有意义节点;基于有意义节点和有意义节点的行为名称识别潜在节点和潜在行为名称;基于潜在节点和潜在行为名称生成缺陷类别信息,并对缺陷类别信息进行整合,得到缺陷分类结果;缺陷类别信息包括缺陷模块信息和缺陷修复方式信息。本发明专利技术能解决人工操作过程复杂、人力成本和时间成本高、受主观意见影响分类过程、缺陷分类数据来源有限的问题。

【技术实现步骤摘要】
一种基于抽象语法树的开源软件缺陷数据分类方法及系统
本专利技术涉及软件缺陷预测及软件可靠性
,特别是涉及一种基于抽象语法树的开源软件缺陷数据分类方法及系统。
技术介绍
在21世纪,软件已经成为不可或缺的生产工具,不仅在科研、工程、金融等专业领域发挥举足轻重的作用,更是在人们的生活中无处不在,影响着千家万户。随着软件在社会生活中的地位日益提升,软件规模与日俱增,软件复杂度几何式提升,这导致了软件缺陷的产生越来越频繁,对不同领域的负面影响越来越大,软件缺陷问题日益成为学界研究的热点。在软件开发的各个阶段中,如何识别与修复软件缺陷,已经成为提高软件质量工作中重要的一环。软件缺陷预测能够通过提前发现与锁定软件中的缺陷模块,从而能够在开发资源有限的情况下保证软件质量,减少缺陷的产生和影响,已成为软件工程中一个非常重要的研究课题。软件缺陷检测技术分为静态与动态两种。软件缺陷预测技术能够帮助提高软件开发过程中资源分配的效率,对缺陷倾向性较高的模块进行及时的优化和修复,从而提高软件开发的效率和质量。美国国家航空航天局(NASA)较早地启动了软件缺陷预测技术的研究,并开展了软件度量程序(MetricDataProgram,MDP)项目。该项目提供了开源的软件缺陷预测数据集,为软件缺陷预测领域提供了重要的数据支撑。我国的国家自然科学基金委员会在2007年年底启动“可信软件基础研究”重大研究计划,将软件缺陷预测作为重要科学目标。然而,目前的公开数据集内的缺陷数据较少,且项目特征重复性很高,软件缺陷预测对大数据的要求日益强烈。大数据的需求表明,目前各软件项目内的缺陷数据已经不足以支持缺陷预测的数据需求,在软件开源的趋势下,目光应投向开源软件项目中的缺陷数据。GitHub作为通过Git进行版本控制的软件源代码托管服务,成为了全球最大的开源软件托管平台。根据GitHubUniverse开发者大会上发布的2019年度报告,目前GitHub拥有超过4000万开发人员,其中包括2019年的1000万新用户,合并了超过8700万个请求,其中包含了大量的软件缺陷信息及其修复数据,使获取大数据的缺陷预测数据集成为可能。此外,缺陷分类技术能够将缺陷数据集中的信息粒度细分化,能够帮助提高缺陷数据集的质量。软件缺陷静态预测方法基于缺陷预测数据集中的度量信息,通常对目标软件模块的缺陷倾向性、缺陷密度等进行预测,即将软件程序模块预测为有缺陷倾向性(defectproneness,简称FP模块)或无缺陷倾向性(nondefectproneness,简称NFP模块)或输出预测模块的缺陷密度或缺陷数。而缺陷分类对缺陷信息的进一步分析,丰富了缺陷数据中的度量信息。基于缺陷分类的缺陷分析方法以客观的数据统计为基础,能为缺陷研究和预测结果从二分类到多分类奠定数据基础。缺陷分类对缺陷数据进行了属性定义,通过缺陷属性反映有关软件产品开发过程的更多信息。另外,传统软件缺陷分析运用统计分析等手段推断缺陷被引入的原因,存在人工操作过程复杂、人力成本和时间成本高、受主观意见影响分类过程、缺陷分类数据来源有限等问题。
技术实现思路
基于此,有必要提供一种基于抽象语法树的开源软件缺陷数据分类方法及系统,以解决人工操作过程复杂、人力成本和时间成本高、受主观意见影响分类过程、缺陷分类数据来源有限的问题。为实现上述目的,本专利技术提供了如下方案:一种基于抽象语法树的开源软件缺陷数据分类方法,包括:获取软件缺陷源代码信息;所述软件缺陷源代码信息包括缺陷修复前的代码文件和缺陷修复后的代码文件;生成所述软件缺陷源代码信息的抽象语法树,并确定所述抽象语法树的修改行为信息;所述修改行为信息包括修改节点和对应的行为名称;所述行为名称包括增加、删除、修改和移动;基于所述修改行为信息中的修改节点识别有意义节点;所述有意义节点为包含缺陷分类依据信息的节点;基于所述有意义节点和所述有意义节点的行为名称识别潜在节点和潜在行为名称;所述潜在节点为所述有意义节点中代码修改属性正确的节点;所述潜在行为名称为与所述潜在节点对应的修改行为正确的行为名称;基于所述潜在节点和所述潜在行为名称生成缺陷类别信息,并对所述缺陷类别信息进行整合,得到缺陷分类结果;所述缺陷类别信息包括缺陷模块信息和缺陷修复方式信息。可选的,所述生成所述软件缺陷源代码信息的抽象语法树,并确定所述抽象语法树的修改行为信息,具体包括:采用树差异对比器分别生成缺陷修复前的代码文件的抽象语法树和缺陷修复后的代码文件的抽象语法树;采用比较器对所述缺陷修复前的代码文件的抽象语法树和所述缺陷修复后的代码文件的抽象语法树进行差分对比分析,生成抽象语法树的修改行为信息。可选的,所述基于所述修改行为信息中的修改节点识别有意义节点,具体包括:生成所有修改节点的父节点组;一个所述修改节点对应一组父节点组;采用树结构自底向上遍历的方式确定各所述父节点组中节点属性为设定分类依据属性的节点;将所述修改节点和各所述父节点组中节点属性为设定分类依据属性的节点确定为有意义节点。可选的,所述设定分类依据属性包括数据的定义声明和初始化、数据的赋值、数学计算与逻辑计算、方法与接口调用、方法定义与声明、条件控制结构、循环控制结构、异常处理结构、同步异步结构以及不纳入。可选的,所述基于所述有意义节点和所述有意义节点的行为名称识别潜在节点和潜在行为名称,具体包括:依据潜在节点规则确定所述有意义节点中的潜在节点;依据潜在行为名称规则对所述潜在节点的行为名称进行更改,得到潜在行为名称。可选的,所述依据潜在节点规则确定所述有意义节点中的潜在节点,具体包括:根据节点属性判断当前节点是否为第一设定节点,得到第一判断结果;所述第一设定节点为包含潜在节点的程度大于第一设定值的节点;所述当前节点为所述有意义节点中的一个节点;创建当前节点的所有父节点,并根据节点属性判断当前节点的所有父节点中是否存在目标节点,得到第二判断结果;所述目标节点为成为潜在节点的程度大于第二设定阈值的节点;自底向上遍历当前节点的所有父节点,判断在遍历到所述目标节点之前,所有被遍历到的父节点中是否不存在块节点,得到第三判断结果;判断当前节点的所有父节点中的节点位置是否存在符合第一设定要求的节点,得到第四判断结果;若所述第一判断结果、所述第二判断结果、所述第三判断结果和所述第四判断结果均为是,则将当前节点确定为潜在节点。可选的,所述依据潜在行为名称规则对所述潜在节点的行为名称进行更改,得到潜在行为名称,具体包括:根据节点属性判断所述修改节点中是否不包含所述潜在节点,得到第五判断结果;根据节点属性判断目标潜在节点的所有父节点中是否存在符合第二设定要求的父节点,得到第六判断结果;若所述第五判断结果和所述第六判断结果均为是,则将所述目标潜在节点的行为名称更改为修改,并将更改后的行为名称确定为潜在行为名称。可选的,所述基于所述本文档来自技高网
...

【技术保护点】
1.一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,包括:/n获取软件缺陷源代码信息;所述软件缺陷源代码信息包括缺陷修复前的代码文件和缺陷修复后的代码文件;/n生成所述软件缺陷源代码信息的抽象语法树,并确定所述抽象语法树的修改行为信息;所述修改行为信息包括修改节点和对应的行为名称;所述行为名称包括增加、删除、修改和移动;/n基于所述修改行为信息中的修改节点识别有意义节点;所述有意义节点为包含缺陷分类依据信息的节点;/n基于所述有意义节点和所述有意义节点的行为名称识别潜在节点和潜在行为名称;所述潜在节点为所述有意义节点中代码修改属性正确的节点;所述潜在行为名称为与所述潜在节点对应的修改行为正确的行为名称;/n基于所述潜在节点和所述潜在行为名称生成缺陷类别信息,并对所述缺陷类别信息进行整合,得到缺陷分类结果;所述缺陷类别信息包括缺陷模块信息和缺陷修复方式信息。/n

【技术特征摘要】
1.一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,包括:
获取软件缺陷源代码信息;所述软件缺陷源代码信息包括缺陷修复前的代码文件和缺陷修复后的代码文件;
生成所述软件缺陷源代码信息的抽象语法树,并确定所述抽象语法树的修改行为信息;所述修改行为信息包括修改节点和对应的行为名称;所述行为名称包括增加、删除、修改和移动;
基于所述修改行为信息中的修改节点识别有意义节点;所述有意义节点为包含缺陷分类依据信息的节点;
基于所述有意义节点和所述有意义节点的行为名称识别潜在节点和潜在行为名称;所述潜在节点为所述有意义节点中代码修改属性正确的节点;所述潜在行为名称为与所述潜在节点对应的修改行为正确的行为名称;
基于所述潜在节点和所述潜在行为名称生成缺陷类别信息,并对所述缺陷类别信息进行整合,得到缺陷分类结果;所述缺陷类别信息包括缺陷模块信息和缺陷修复方式信息。


2.根据权利要求1所述的一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,所述生成所述软件缺陷源代码信息的抽象语法树,并确定所述抽象语法树的修改行为信息,具体包括:
采用树差异对比器分别生成缺陷修复前的代码文件的抽象语法树和缺陷修复后的代码文件的抽象语法树;
采用比较器对所述缺陷修复前的代码文件的抽象语法树和所述缺陷修复后的代码文件的抽象语法树进行差分对比分析,生成抽象语法树的修改行为信息。


3.根据权利要求1所述的一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,所述基于所述修改行为信息中的修改节点识别有意义节点,具体包括:
生成所有修改节点的父节点组;一个所述修改节点对应一组父节点组;
采用树结构自底向上遍历的方式确定各所述父节点组中节点属性为设定分类依据属性的节点;
将所述修改节点和各所述父节点组中节点属性为设定分类依据属性的节点确定为有意义节点。


4.根据权利要求3所述的一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,所述设定分类依据属性包括数据的定义声明和初始化、数据的赋值、数学计算与逻辑计算、方法与接口调用、方法定义与声明、条件控制结构、循环控制结构、异常处理结构、同步异步结构以及不纳入。


5.根据权利要求1所述的一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,所述基于所述有意义节点和所述有意义节点的行为名称识别潜在节点和潜在行为名称,具体包括:
依据潜在节点规则确定所述有意义节点中的潜在节点;
依据潜在行为名称规则对所述潜在节点的行为名称进行更改,得到潜在行为名称。


6.根据权利要求5所述的一种基于抽象语法树的开源软件缺陷数据分类方法,其特征在于,所述依据潜在节点规则确定所述有意义节点中的潜在节点,具体包括:
根据节点属性判断当前节点是否为第一设定节点,得到第一判断结果;所述第一设定节点为包含潜在节点的程度大于第一设定值的节点;所述当前节点为所述有意义节点中的一个节点;
创建当前节点的所有父节点,并根据节点属性判断当前节点的所有父节点中是否存在目标节点,得到第二判断结果;所述目标节点为成为潜在节点的程度大于第二设定阈值的节点;
自...

【专利技术属性】
技术研发人员:艾骏许嘉熙陈世嘉施韬邵义康
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:北京;11

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

1