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

一种多源数据融合的编译器缺陷去重方法技术

技术编号:39165986 阅读:13 留言:0更新日期:2023-10-23 15:04
本发明专利技术公开了一种多源数据融合的编译器缺陷去重方法,从测试程序维度、测试程序优化维度和测试程序执行维度这三个维度,对编译器测试过程中触发了缺陷的测试失败进行分析,并从每个维度中提取出与缺陷根因相关的特征,进行特征向量化处理得到特征向量,通过关于相似性的距离算法得到距离矩阵,衡量不同测试失败之间的相似性,得到优化结果根据距离判断不同的测试失败是否触发了相同的编译器缺陷,不同缺陷引起的测试失败排在靠前顺序,实现了编译器错误代码重复缺陷的去重。与现有技术相比,本发明专利技术提高了编译器错误代码重复缺陷去重的效率与效果。效率与效果。效率与效果。

【技术实现步骤摘要】
一种多源数据融合的编译器缺陷去重方法


[0001]本专利技术涉及软件工程和软件测试领域,特别是涉及一种编译器重复缺陷的检测方法。

技术介绍

[0002]几乎所有的软件都是在编译器的基础上被构建的,因此编译器是最重要的基础软件系统之一。编译器的缺陷有可能导致所有由它编译的程序出现错误,从而导致不可预期的后果(在安全至关重要的领域甚至可能是灾难性的后果)。因此,保证编译器的质量是十分重要的。编译器测试目前是最为广泛应用的编译器质量保证技术,许多编译器测试技术都是通过执行大量的测试程序来检测编译器缺陷。
[0003]尽管现如今的编译器测试技术被证实是有效的,但对于测试中出现的失败进行检查仍然是一个非常耗时的工作。一个主要的原因是许多测试失败是由同一个编译器缺陷引起的,这也被定义为编译器重复缺陷检测问题。对编译器进行调试是十分耗时的,因此调试这些重复的缺陷会导致巨大的时间和资源浪费。在这些缺陷中,会产生错误信息的缺陷(也称作崩溃缺陷)可以通过对比错误信息进行有效的去重。然而,有许多缺陷并不导致奔溃,也不会产生可以用于去重的错误信息即错误代码缺陷,加大了编译器重复缺陷检测任务的难度。针对这类缺陷,重复缺陷检测是一个非常有挑战性的难题。
[0004]针对传统软件的去重方法大多数都基于文字描述,测试输入或者错误信息来实现。然而,编译器与传统软件具有不同形式的测试输入(编译器的测试输入是测试程序)并且错误代码缺陷没有可用的文字描述或者错误信息。因此,这些现有的技术不能被用于编译器重复缺陷的检测。最近提出的两个针对编译器缺陷的去重技术。其中,一种去重技术是通过不同程序特征的结合来衡量不同测试程序之间的距离,所使用的多种特征中,针对错误代码缺陷效果最好的一种是对比不同测试程序在执行过程中的函数覆盖,并且认为具有相似函数覆盖的测试程序触发了相同的编译器缺陷。但这种方法的效果仍然较差,测试覆盖中的许多部分与真正导致缺陷的原因并不是密切相关的,也就是说被覆盖的函数中有许多都不是导致缺陷的原因。另一种去重技术是针对基于变异的编译器测试技术。也就是说,这两种现有技术不能有效的处理编译器错误代码缺陷。因此,设计一种通用且有效的错误代码缺陷去重技术是十分必要的。

技术实现思路

[0005]为了解决现有技术中编译器错误代码缺陷去重过程中没有错误信息,测试覆盖与缺陷根因距离较远,可用特征不足等问题,本专利技术提出了一种多源数据融合的编译器缺陷去重方法,基于基于从测试程序维度、测试程序优化维度和测试程序执行维度三个维度的特征信息提取和分析得到多源数据,应用于编译器重复缺陷的检测,实现了编译器缺陷去重。
[0006]一种多源数据融合的编译器缺陷去重方法,包括以下步骤:
[0007]步骤1、利用编译器在不同的优化级别下编译待测编译器提供测试程序,从测试程序提取与缺陷相关的特征,作为测试程序维度;从编译器优化选项提取与缺陷密切相关的的特征,作为测试程序优化维度;从测试覆盖提取与缺陷紧密相关的特征,作为测试程序执行维度;
[0008]步骤2、计算不同测试失败在测试程序维度特征向量之间的距离、测试程序优化维度特征向量之间的距离、测试程序执行维度特征向量之间的距离;
[0009]步骤3、对步骤2计算得到的三个维度下的距离值分别进行归一化处理,接下来,通过如下的公式对归一化处理后的三个维度的距离进行结合:
[0010]dist(b
i
,
j
)=w1*d
p
(p
i
,p
j
)+w2*d
o
(o
i
,o
j
)+w3*d
c
(c
i
,c
j
)
[0011]其中,w1、w2、w3表示权重参数,d
p
(
·
)、d
o
(
·
)、d
c
(
·
)分别表示测试失败在测试程序维度、测试程序优化维度和测试程序执行维度三个不同维度的各个特征向量之间的距离,b
i
、b
j
表示不同的测试失败;
[0012]根据结合后的距离将不同缺陷引起的测试失败排在靠前顺序,相同缺陷引起的测试失败排在靠后顺序;
[0013]去除相同缺陷引起的测试失败,实现编译器错误代码重复缺陷的去重。
[0014]进一步的,所述测试程序维度的生成过程具体包括以下步骤:
[0015]利用4类变异规则生成不触发缺陷的变异测试程序,4类变异规则包括标识符级别变异规则、运算符级别变异规则、分隔符级别变异规则和语句级别变异规则;
[0016]在抽象语法树级别上提取测试程序和步骤1.1得到的所述不触发缺陷的变异测试程序之间的差异作为导致缺陷的特征;
[0017]计算不同测试失败的测试程序维度特征向量之间距离。
[0018]进一步的,所述测试程序优化维度的生成过程包括以下步骤:
[0019]利用delta

debugging算法进行优化特征提取,将最小的触发缺陷的优化选项子集提取出来。这些优化选项被作为测试优化维度的特征;
[0020]计算两个测试失败的优化选项特征向量之间的距离。
[0021]进一步的,所述测试程序执行维度的生成包括以下步骤:
[0022]选择一批允许通过测试的不触发缺陷的测试程序,执行基于频谱的缺陷定位算法进行缺陷定位,对于一个测试失败,将执行测试覆盖计算所有被执行到的编译器函数的可疑度分数作为测试程序执行维度的特征;
[0023]计算不同测试失败的测试程序执行维度特征向量之间的距离。
[0024]与现有技术相比,本专利技术能够达成以下有益技术效果:
[0025]1)提高了编译器错误代码重复缺陷去重的效率与效果。
[0026]2)在两个广泛使用的编译器的62个真实缺陷上进行了实证研究,证实了理论和方法的有效性。
附图说明
[0027]图1为本专利技术的一种多源数据融合的编译器缺陷去重方法框图;
[0028]图2为本专利技术的一种多源数据融合的编译器缺陷去重方法整体流程图;
[0029]图3为本专利技术的测试程序维度生成流程图;
[0030]图4为本专利技术的测试程序变异实例;
[0031]图5为本专利技术的测试程序之间抽象语法树的差异实例示意图;
[0032]图6为本专利技术的测试程序优化维度生成流程图;
[0033]图7为本专利技术的测试程序执行维度生成流程图;
[0034]图8为本专利技术的去重实例。
具体实施方式
[0035]以下结合附图及具体实施例对本专利技术的技术方案进行详细描述。
[0036]如图1所示,本专利技术首次提出从测试程序维度、测试程序优化维度和测试程序执行维度这三个维度,对编译器测试过程中触发了缺陷的测试失败进行分析,并从每个维度中提取本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多源数据融合的编译器缺陷去重方法,其特征在于,包括以下步骤:步骤1、利用编译器在不同的优化级别下编译待测编译器提供测试程序,从测试程序提取与缺陷相关的特征,作为测试程序维度;从编译器优化选项提取与缺陷密切相关的的特征,作为测试程序优化维度;从测试覆盖提取与缺陷紧密相关的特征,作为测试程序执行维度;步骤2、计算不同测试失败在测试程序维度特征向量之间的距离、测试程序优化维度特征向量之间的距离、测试程序执行维度特征向量之间的距离;步骤3、对步骤2计算得到的三个维度下的距离值分别进行归一化处理,接下来,通过如下的公式对归一化处理后的三个维度的距离进行结合:dist(b
i
,b
j
)=w1*d
p
(p
i
,p
j
)
+
w2*d
o
(o
i
,o
j
)+w3*d
c
(c
i
,c
j
)其中,w1、w2、w3表示权重参数,d
p
(
·
)、d
o
(
·
)、d
c
(
·
)分别表示测试失败在测试程序维度、测试程序优化维度和测试程序执行维度三个不同维度的各个特征向量之间的距离,b
i
、b
j
表示不同的测试失败;根据结合后的距离将不同缺陷引起的测试失败排在靠前顺序,相同缺陷引起的测试失败排在靠后顺序;去除相同缺陷引起的测试失败,实现编译器错误代码重复缺陷的去重。2.根据权利要求1所述的一种多源数据融合的编译器缺陷去重方法,其特征在于,所述测试程序维度的生成过程具体包括以下步骤:利用4类变异规则生成不触发缺陷的变异测试程序,4类变异规则包括标识符级别变异规则、运算符级别变异规则、分隔符级别变异规则和语句级别变异规则;在抽象语法树级别上提取测试程序和步骤1.1得到的所述不触发缺陷的变异测试程序之间的差异作为导致缺陷的特征;计算不同测试失败的测试程序维度特征向量之间距离。3.根据权利要求1所述的一种多源数据融合的编译器缺陷去重方法,其特征在于,所述测试程序优化维度的生成过程包括以下步骤:利用delta

debugging算法进行优化特征提取,将最小的触发缺陷的优化选项子集提取出来,这些优化选项被作为测试优化维度的特征;计算两个测试失败的优化选项特征向量之间的距离。4.根据权利要求1所述的一种多源数据融合的编译器缺陷去重方法,其特征在于,所述测试程序执行维度的生成包括以下步骤:选择一批允许通过测试的不触发缺陷的测试程序,执行基于频谱的缺陷定位算法进行缺陷定位,对于一个测试失败,将执行测试覆盖计算所有被执行到的编译器函数的可疑度分数作为测试程序执行维度的特征;计算不同测试失败的测试程序执行维度特征向量之间的距离。5.根据权利要求4所述的一种多源数据融合的编译器缺陷去重方法,其特征在于,被覆盖的函数中每个语句的可疑度分数score(s)的计算公式如下:其中,ef
s
和nf
s
分别表示触发缺陷的测试程序中执行到和没有执行到语句s的数量,ep
s
表示不触发缺陷的测试程序中执行到语句s的数量;接下来,按照最大值将语句级别的可疑度分数聚合到函数级别,可疑度分数聚合函数score(f)的公式...

【专利技术属性】
技术研发人员:陈俊洁杨晨樊兴宇姜佳君
申请(专利权)人:天津大学
类型:发明
国别省市:

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

1