当前位置: 首页 > 专利查询>东北大学专利>正文

一种基于区分子图挖掘的软件缺陷发现方法技术

技术编号:27454802 阅读:21 留言:0更新日期:2021-02-25 04:51
本发明专利技术提供一种基于区分子图挖掘的软件缺陷发现方法,涉及软件工程技术领域。该方法首先针对一个软件项目提取新旧两个版本的软件包,对新旧两个版本的软件包做相同数据预处理,构建程序的控制流图,并保存到文本文件中,获得正负两类图数据集;对保存到文本文件的控制流图中的程序语句进行哈希转化,使控制流图用程序语句哈希转化后的数值来表示;对得到的哈希转化后的正负两类图数据集进行覆盖图挖掘,得到覆盖图集;根据覆盖图集对正负两类图数据集中的控制流图均进行数据向量化;将数据向量化后的控制流图作为特征训练数据来训练极限学习机,采用投票机制得到训练模型,通过测试后的训练模型对待测程序文件进行测试,发现软件缺陷。现软件缺陷。现软件缺陷。

【技术实现步骤摘要】
一种基于区分子图挖掘的软件缺陷发现方法


[0001]本专利技术涉及软件工程
,尤其涉及一种基于区分子图挖掘的软件缺陷发现方法。

技术介绍

[0002]信息化时代的软件已经深入到日常生活的各个角落,各行各业都离不开软件,因此高质量的软件是必要的。软件的质量和软件中存在的缺陷数量有直接关系,软件中缺陷数量越少,软件质量越高。在软件开发过程中,软件缺陷的产生是不可避免的。开发人员对需求理解不正确以及开发经验不足可能引起性能或产品特征上的缺陷,程序员对逻辑路径或数据范围考虑不周到,如缺失某些边界条件,忽视系统崩溃后数据的异地备份和灾难性恢复等问题均可能产生软件缺陷。有缺陷的软件在运行时可能会出现意料之外的结果,严重时可能会对公司产生巨大的损失,甚至危害到生命安全,尤其是在航空、航天、金融证券和交通领域软件的质量问题更不可被忽视。研究发现,如果在需求阶段修复一个软件缺陷的代价是1的话,在设计阶段修复一个软件缺陷就是它的3到6倍,在编程阶段修复一个软件缺陷是它的大约10倍,而到了产品发布出去时,再去修复一个软件缺陷将会是40到1000倍,可以看出修复软件中一个缺陷的代价不是随时间线性增长,几乎是呈指数增长的。根据IBM的统计报告显示,在软件开发过程中,软件测试需要消耗整个软件开发和运维预算的50%到75%。这表明在软件开发周期中,通过软件测试尽可能减少软件中存在的缺陷是一项非常昂贵的活动。所以在软件开发周期能快速、精确的找到软件缺陷出现的位置是非常有价值,有意义的。
[0003]目前的软件缺陷检测方法一般可分为基于静态的缺陷检测和基于动态的缺陷检测。
[0004]静态缺陷检测方法是指在不需要运行程序的前提下分析程序源码或目标码。1976年,King首次提出使用符号执行方法的静态软件故障定位技术,实验表明符号执行可以被应用在顺序程序的调试中。1988年,Young等人提出基于符号执行的并发分析技术来检测并发程序中的故障,通过为每一个控制流图分配一个控制线程,路径条件表示符号执行条件,用路径表达式表示符号执行的值,执行程序流图,进行故障定位。2008年,Cellier提出基于形式方法的故障定位技术。2010年,EichingerF提出用频繁子图挖掘来进行静态缺陷检测。2016年,梁斌等人提出基于频繁项集的静态缺陷检测方法。
[0005]动态缺陷检测方法是指通过运行测试用例来跟踪观察程序的执行路径来实现检测。1982年,Weiser第一次提出用程序切片的方法进行软件调试。Sun Jirong等人深入挖掘程序切片方法的可能性,将其应用在故障定位中。2002年,Jones等人基于统计学方法发现执行失败的次数越多,程序语句的故障可能性越高,提出用不同颜色标识语句故障可疑程度的方法,这是基于执行覆盖的动态检测方法。进一步,Renieris和Reiss提出基于集合运算法的执行覆盖的动态检测方法,建立相似程序频谱为基础的最近邻查询方法。2008年,赵建军等人定义了基于FindBugs的检测面向语句的17种故障模式,并提出了XFindBugs系统
用于检测AspectJ故障。2006年,徐宝文等人提出了基于组合测试的检测方法。2009年,王新平等人提出了跟踪程序执行轨迹的故障定位方法。
[0006]在检测效果方面,有研究表明静态的软件缺陷检测技术要优于动态的软件缺陷检测检测技术。但是,基于静态的软件缺陷检测技术依然存在很多局限性,比如检测结果的准确性和检测效率都有待提升。这是因为很多静态检测方法大都是基于预先抽取的特征进行的。这些特征大多以属性体现的,属性很难体现出语句之间的调用关系。一个程序有缺陷,往往是一个程序的执行逻辑出了问题,逻辑结构是通过语句之间相互调用关系来体现的,而这些调用关系只有通过程序控制流图或程序依赖图才能体现出来的。
[0007]图数据在各种科学和商业应用中稳步增长,如生物信息学,安全,网络和社交网络。图模式可以帮助构建强大而直观的模型,以更好地管理和理解复杂结构。因此,它们的使用远远超出传统方法,如关联规则。近几年,图数据挖掘做为一种有效的技术被广泛应用在缺陷检测中,如S Parsa等人根据程序执行路径图与机器学习算法相结合来挖掘软件缺陷。H Cheng等人根据程序执行路径图来挖掘区分子图进行训练来挖掘软件缺陷。K.J.等人通过分析程序依赖图发现。频繁子图更可能是正确倾向的编程规则。然而,已有方法依然面临着一些新的挑战,尤其在缺陷检测准确度和缺陷检测效率等问题。

技术实现思路

[0008]本专利技术要解决的技术问题是针对上述现有技术的不足,提供一种基于区分子图挖掘的软件缺陷发现方法,发现软件中存在的缺陷。
[0009]为解决上述技术问题,本专利技术所采取的技术方案是:一种基于区分子图挖掘的软件缺陷发现方法,包括以下步骤:
[0010]步骤1、从软件仓库中获取所需软件项目包,针对一个软件项目提取新旧两个版本的软件包,对新旧两个版本的软件包做相同数据预处理,构建程序的控制流图,并保存到文本文件中,获得两类图数据集,记为正类和负类,具体方法为:
[0011]步骤1.1、针对一个项目从软件仓库中的软件项目包中提取新旧两个版本的软件包,采用递归算法对新旧两个版本的软件包提取程序源代码文件集;并且过滤掉与软件缺陷检测不相关的文件,以可编辑的文本存储程序源代码;
[0012]步骤1.2、对获取的程序源代码文件集,提取软件项目中所有的方法;
[0013]利用代码处理工具软件将软件项目中每个类中的方法提取出来,以可编辑的文本保存;
[0014]步骤1.3、对步骤1.2获取的方法采用统一编码方式命名;
[0015]步骤1.4、对采用统一编码方式命名后的方法进行降噪处理和方法过滤,删除冗余方法和空方法、仅保留有实际功能的方法集,删除程序中无修改痕迹的方法,具体方法为:
[0016]步骤1.4.1、对采用统一编码方式命名后的方法进行降噪处理;通过代码审查工具审查项目新旧两个版本软件包中的对应程序代码,删除程序代码中接口、抽象方法以及方法体,删除新旧两个版本软件包的程序代码中独有的方法,留下共有的方法;
[0017]步骤1.4.2、对降噪处理后的方法进行方法过滤,删除程序中无修改痕迹的方法或仅修改变量名的方法;
[0018]遍历整个新版本软件包及对应的旧版本软件包中的程序代码中每一个程序方法
文件,计算新版本软件包中程序方法文件的大小和旧版本软件包中对应程序方法文件的大小,判断新旧版本两个软件包中对应的程序方法文件大小的差值是否大于给定的阈值,如果大于给定阈值,则这两个方法文件存在内容的修改,保留这两个方法文件;否则这两个方法文件只是变量名称的修改,删除新旧版本两个软件包中的这两个程序方法文件;
[0019]步骤1.5、代码规范化;对降噪处理和方法过滤后的程序方法文件中的程序语句按照其语义统一表达,使程序语句的代码规范化;
[0020]定义9个规范将程序方法文件中的程序表达式抽象成9种,保留程序语句语义的基础上实现程序语句本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于区分子图挖掘的软件缺陷发现方法,其特征在于:包括以下步骤:步骤1、从软件仓库中获取所需软件项目包,针对一个软件项目提取新旧两个版本的软件包,对新旧两个版本的软件包做相同数据预处理,构建程序的控制流图,并保存到文本文件中,获得两类图数据集,记为正类和负类;步骤2、对保存到文本文件的控制流图中的程序语句进行哈希转化,使每条程序语句在控制流图中被表示成一个数字,进而使控制流图用程序语句哈希转化后的数值来表示;步骤3、对步骤2得到的哈希转化后的两类图数据集G
+
和G-进行覆盖图挖掘,得到覆盖图集,具体方法为:步骤3.1、对哈希转化后的正类图数据集G
+
,设置支持度阈值为minSup,利用子图匹配算法计算正类图数据集中支持度大于支持度阈值的频繁子图g,得到频繁子图集G
F
,并保留频繁子图集G
F
中每个频繁子图的支持度sup(g,G
+
);步骤3.2、基于区分度度量函数挖掘频繁子图对应的区分子图;步骤3.3、设定距离阈值δ,对获取的区分子图集G
D
进一步挖掘,获取区分子图集G
D
对应的覆盖图集G
R
;步骤3.3.1、在区分子图集G
D
中,计算所有区分子图对应的δ-跳跃模式,并删除被δ-跳跃模式覆盖的区分子图;所述δ-跳跃模式为:对于区分子图集G
D
,d是D中任意一个区分子图,如果区分子图d在区分子图集G
D
中的跳跃值LV
s
(d)>δ,那么区分子图d是区分子图集G
D
里的δ-跳跃模式;所述区分子图d在区分子图集G
D
中的跳跃值LV
s
(d)定义为区分子图d和区分子图集G
D
中任意真超图之间的Jaccard距离的最小值,如下公式所示:其中,D(d,d

)为区分子图d在区分子图集G
D
中的任意真超图d

之间的Jaccard距离,如下公式所示:其中,T(d)是区分子图集G
D
中包含区分子图d的图集合,T(d

)是区分子图集G
D
中包含真超图d

的图集合;步骤3.3.2、在剩余的区分子图集中循环执行步骤3.3.1搜集覆盖信息,保留能够覆盖剩余区分子图的代表性区分子图构成覆盖图集G
R
;所述代表性区分子图为能够δ-覆盖区分子图集G
D
中任意一个区分子图的区分子图;给定两个区分子图d和d

,如果且D(d,d

)≤δ,那么就称区分子图d

δ-覆盖区分子图d;步骤4、将正负两类图数据集均按一定比例划分为训练集和测试集,并根据步骤3获取的覆盖图集G
R
对正负两类图数据集中的控制流图均进行数据向量化;步骤5、将正负两类图数据集划分的训练集中数据向量化后的控制流图作为特征训练数据来训练极限学习机ELM,采用投票机制得到训练模型,并通过测试集中数据向量化的控制流图对训练模型进行测试,进而通过测试后的训练模型对待测程序文件进行测试,发现软件缺陷。2.根据权利要求1所述的一种基于区分子图挖掘的软件缺陷发现方法,其特征在于:所
述步骤1的具体方法为:步骤1.1、针对一个项目从软件仓库中的软件项目包中提取新旧两个版本的软件包,采用递归算法对新旧两个版本的软件包提取程序源代码文件集;并且过滤掉与软件缺陷检测不相关的文件,以可编辑的文本存储程序源代码;步骤1.2、对获取的程序源代码文件集,提取软件项目中所有的方法;利用代码处理工具软件将软件项目中每个类中的方法提取出来,以可编辑的文本保存;步骤1.3、对步骤1.2获取的方法采用统一编码方式命名;步骤1.4、对采用统一编码方式命名后的方法进行降噪处理和方法过滤,删除冗余方法和空方法、仅保留有实际功能的方法集,删除程序中无修改痕迹的方法;步骤1.5、代码规范化;对降噪处理和方法过滤后的程序方法文件中的程序语句按照其语义统一表达,使程序语句的代码规范化;步骤1.6、将规范化后的程序方法文件中的程序语句构建控制流图CFG,保存到文本G中,进而得到两类图数据集,其中一类是旧版本程序文件对应的图数据集,即包含软件缺陷的图数据集,记为负类G-;另一类是新版本程序文件对应的图数据集,即不包含软件缺陷的图数据集,记为正类G
+
。3.根据权利要求2所述的一种基于区...

【专利技术属性】
技术研发人员:印莹赵宇海
申请(专利权)人:东北大学
类型:发明
国别省市:

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

1