基于异构图表示学习的软件缺陷自动定位方法技术

技术编号:36771119 阅读:15 留言:0更新日期:2023-03-08 21:44
本发明专利技术公开了一种基于异构图表示学习的软件缺陷自动定位方法。该方法首先从项目中获取所需数据,通过将各类数据抽象成不同类型的顶点和边,构造出一张异构图;然后通过三个模块将异构图中的信息进行聚合,获得源程序中各方法的特征表示;最后基于卷积神经网络(Convolutional Neural Networks,CNN)构建预测模型计算各方法存在缺陷的概率,获得缺陷定位结果。同时,本发明专利技术引入了重采样策略,有效克服了问题中存在的类不平衡问题。通过本发明专利技术方法,能够有效提升特征学习的有效性和缺陷定位的准确性,对降低软件开发和维护成本有着非常重要的现实意义。重要的现实意义。重要的现实意义。

【技术实现步骤摘要】
基于异构图表示学习的软件缺陷自动定位方法


[0001]本专利技术涉及软件维护领域,尤其涉及一种基于异构图表示学习的软件缺陷定位方法。

技术介绍

[0002]软件在人们的生活中起着重要作用。它被广泛应用于各个领域,如医疗、游戏娱乐、航空航天等。然而,软件固有的复杂性导致软件缺陷不可避免。软件缺陷一旦被发现,开发者需要确定缺陷出现的位置并进行修复。未及时修复的软件缺陷不但会影响用户的使用体验,还会造成人力物力的巨大损失。据统计,在软件开发中约有42%的经费用于投入与软件缺陷相关的工作,而在维护阶段发现缺陷的成本是开发阶段的100倍。因此,研究如何帮助开发人员更好更快地修复缺陷具有重要的意义。
[0003]已有的缺陷定位方法按照是否需要执行测试用例,可分为两类:静态缺陷定位方法和动态缺陷定位方法。静态缺陷定位方法通过分析缺陷报告和程序代码并提取特征,利用特定模型确定可疑的程序模块,并将其推荐给开发人员以辅助定位;动态缺陷定位方法通过搜集测试用例的执行信息和运行结果,对被测程序的内在结构进行分析,以确定缺陷语句在被测程序内的可能位置。相比于静态缺陷定位方法,动态缺陷定位方法是基于测试用例的覆盖信息来实现缺陷定位,通常能够获得更好的效果。

技术实现思路

[0004]本专利技术的目的是为了解决现有软件缺陷定位方法对各类信息利用低下的问题,提供一种基于异构图表示学习的软件缺陷自动定位方法,可以有效地帮助开发人员定位软件缺陷。
[0005]为实现上述目的,本专利技术的技术方案是:
[0006]步骤(1)获取缺陷定位所需数据:
[0007]子步骤1

1,从目标项目中获取测试用例的集合T=(test1,test2,

,test
n
),和所包含的方法的集合M=(method1,method2,

,method
m
),其中n和m分别代表测试用例个数和方法的个数。
[0008]子步骤1

2,使用开源工具javaagent和ASM,对代码进行动态插桩,即在每个方法中插入特定代码,一旦该方法被测试用例调用,将会打印出方法名,最终根据输出信息可以得到测试用例的代码覆盖信息。
[0009]子步骤1

3,通过Github获取项目的历史日志,从中提取项目的历史修改信息。若两个方法method
a
和method
b
(a≠b)在同一版本被修改,则将其表示为一个配对mpair=<method
a
,method
b
>,所有的配对组成集合MP。
[0010]子步骤1

4,使用开源工具TinyPDG获取目标代码中各方法的调用关系,若两个方法method
a
和method
b
(a≠b)之间存在调用关系,则表示为一个配对cpair=<method
a
,method
b
>,表示method
a
调用了method
b
,所有的配对组成集合CP。
[0011]步骤(2)将方法集和测试用例集均采用两种不同的方式进行处理:
[0012]子步骤2

1,将所有方法源代码和测试用例源代码当作文本进行处理,利用Byte Pair Encoding(BPE)算法对文本进行分词,构建关键词字典Tok={token1,token2,

,token
len1
},其中len1表示字典包含关键词的个数。每个方法和测试用例可以表示为一个token序列。
[0013]子步骤2

2,使用开源工具javaparser将所有方法源代码和测试用例源代码转换为抽象语法树(abstract syntax tree,AST),所有抽象语法树包含的结点形成集合Nod=(node1,node2,

,node
len2
),其中len2表示结点的数量。
[0014]步骤(3),利用word2vec词嵌入技术,对项目中所有方法和测试用例文本进行训练,得到每个token
i
(i=1,2,

len1)的词向量同时使用node2vec结点嵌入技术,对所有抽象语法树进行训练,得到每个结点node
j
(j=1,2,

,len2)的向量
[0015]步骤(4)对小类样本进行重采样,使得失败测试用例和成功测试用例的数量、存在缺陷的方法和没有缺陷的方法的数量达到一致,并且,构建新添加的方法和测试用例之间的覆盖关系,即对原方法和原测试用例的覆盖信息进行复制。
[0016]步骤(5)构建异构图G=(V,E),其中V表示顶点的集合,E表示边的集合,且V包含两种类型的顶点v
method
和v
test
,E包含四种类型的边e
pass
、e
fail
、e
modify
和e
call

[0017]子步骤5

1,将M中的每个方法抽象为顶点v
method
∈V,其属性表示为attr(v
method
)=(vector
mtext
,vector
mast
),其中),其中为方法文本信息的向量表示,量表示,为方法结构信息的向量表示,len3表示方法文本所包含的token数量,len4表示方法对应抽象语法树所包含的结点数量。
[0018]子步骤5

2,将T中的每个测试用例抽象为顶点v
test
∈V,其属性表示为attr(v
test
)=(vector
ttext
,vector
tast
),其中),其中为测试用例文本信息的向量表示,的向量表示,为测试用例结构信息的向量表示,len5表示测试用例文本所包含的token数量,len6表示测试用例对应抽象语法树所包含的结点数量。
[0019]子步骤5

3,若通过的测试用例覆盖了某个方法,则在两顶点之间点添加一条边e
pass
∈E;若失败的测试用例覆盖了某个方法,则在两顶点之间添加一条边e
fail
∈E。
[0020]子步骤5

4,根据集合MP中的配对,在对应方法顶点之间添加一条边e
modify
∈E;根据集合CP中的配对,在对应方法顶点之间添加一条边e
call
∈E。
[0021]经过以上步骤,成功将各类信息整合为一张异构图。
[002本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于异构图表示学习的软件缺陷自动定位方法,其特征在于,包括以下步骤:步骤1,获取缺陷定位所需数据;步骤2,将方法集和测试用例集均采用两种不同的方式进行处理;步骤3,使用word2vec词嵌入方法,对项目中所有方法和测试用例文本进行训练,得到每个token
i
(i=1,2,...,len1)的词向量使用node2vec结点嵌入方法,对所有抽象语法树进行训练,得到每个结点node
j
(j=1,2,...,len2)的向量步骤4,对小类样本进行重采样,使得失败测试用例和成功测试用例的数量、存在缺陷的方法和没有缺陷的方法的数量达到一致,并且,对原方法和原测试用例的覆盖信息进行复制,构建新添加的方法和测试用例之间的覆盖关系;步骤5,构建异构图G=(V,E),其中V表示顶点的集合,E表示边的集合,且V包含两种类型的顶点v
method
和v
test
,E包含四种类型的边e
pass
、e
fail
、e
modify
和e
call
;步骤6,针对顶点v∈V,通过对所有向量各维度累加求平均的方式,形成顶点v的属性向量表示;步骤7,在图G中,对于顶点v,将所有与该顶点通过某一种类型边连接的各邻居顶点的属性向量,通过累加求平均的方式,形成该顶点的类型向量表示;最后得到四种类型向量表示;步骤8,针对顶点v∈V,将该顶点的属性向量表示和四种类型向量表示利用注意力机制进行聚合,获得该方法顶点的最终向量表示;步骤9,基于CNN构建预测模型,其中所有方法顶点的最终向量表示作为模型的输入,学习方法向量表示所包含的特征,使用sigmoid对CNN的输出进行正则化处理,获得每个方法的可疑分数,即每个方法存在缺陷的概率;步骤10,所有方法按照步骤9获得的可疑分数降序排序,获得最后的推荐结果。2.根据权利要求1所述的基于异构图表示学习的软件缺陷自动定位方法,其特征在于,所述步骤1包括以下子步骤:子步骤1

1从目标项目中获取测试用例集T=(test1,test2,...,test
n
)和所包含的方法的集合M=(method1,method2,...,method
m
),其中n和m分别代表测试用例和方法的个数;子步骤1

2使用开源工具javaagent和ASM,对代码进行动态插桩:在每个方法中插入特定代码,一旦该方法被测试用例调用,将会打印出方法名,最终根据输出信息可以得到测试用例的代码覆盖信息;子步骤1

3通过Github获取项目的历史日志,从中提取项目的历史修改信息;若两个方法method
a
和method
b
(a≠b)在同一版本被修改,则将其表示为一个配对mpair=<method
a
,method
b
>,所有的配对组成集合MP;子步骤1

4使用开源工具TinyPDG获取目标代码中各方法的调用关系,若两个方法method
a
和method
b
(a≠b)之间存在调用关系,则表示为一个配对cpair=<method
a
,method
b
>,表示method
a
调用了method
b
;所有的配对组成集合CP。3.根据权利要求1所述的基于异构图表示学习的软件缺陷自动定位方法,其特征在于所述步骤2包括如下子步骤:子步骤2

【专利技术属性】
技术研发人员:陈信孙添俞东进李斯诚
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1