【技术实现步骤摘要】
基于异构图表示学习的软件缺陷自动定位方法
[0001]本专利技术涉及软件维护领域,尤其涉及一种基于异构图表示学习的软件缺陷定位方法。
技术介绍
[0002]软件在人们的生活中起着重要作用。它被广泛应用于各个领域,如医疗、游戏娱乐、航空航天等。然而,软件固有的复杂性导致软件缺陷不可避免。软件缺陷一旦被发现,开发者需要确定缺陷出现的位置并进行修复。未及时修复的软件缺陷不但会影响用户的使用体验,还会造成人力物力的巨大损失。据统计,在软件开发中约有42%的经费用于投入与软件缺陷相关的工作,而在维护阶段发现缺陷的成本是开发阶段的100倍。因此,研究如何帮助开发人员更好更快地修复缺陷具有重要的意义。
[0003]已有的缺陷定位方法按照是否需要执行测试用例,可分为两类:静态缺陷定位方法和动态缺陷定位方法。静态缺陷定位方法通过分析缺陷报告和程序代码并提取特征,利用特定模型确定可疑的程序模块,并将其推荐给开发人员以辅助定位;动态缺陷定位方法通过搜集测试用例的执行信息和运行结果,对被测程序的内在结构进行分析,以确定缺陷语句在被测程序内的可能位置。相比于静态缺陷定位方法,动态缺陷定位方法是基于测试用例的覆盖信息来实现缺陷定位,通常能够获得更好的效果。
技术实现思路
[0004]本专利技术的目的是为了解决现有软件缺陷定位方法对各类信息利用低下的问题,提供一种基于异构图表示学习的软件缺陷自动定位方法,可以有效地帮助开发人员定位软件缺陷。
[0005]为实现上述目的,本专利技术的技术方案是:
[0006] ...
【技术保护点】
【技术特征摘要】
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
‑
【专利技术属性】
技术研发人员:陈信,孙添,俞东进,李斯诚,
申请(专利权)人:杭州电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。