【技术实现步骤摘要】
一种多源数据融合的编译器缺陷去重方法
[0001]本专利技术涉及软件工程和软件测试领域,特别是涉及一种编译器重复缺陷的检测方法。
技术介绍
[0002]几乎所有的软件都是在编译器的基础上被构建的,因此编译器是最重要的基础软件系统之一。编译器的缺陷有可能导致所有由它编译的程序出现错误,从而导致不可预期的后果(在安全至关重要的领域甚至可能是灾难性的后果)。因此,保证编译器的质量是十分重要的。编译器测试目前是最为广泛应用的编译器质量保证技术,许多编译器测试技术都是通过执行大量的测试程序来检测编译器缺陷。
[0003]尽管现如今的编译器测试技术被证实是有效的,但对于测试中出现的失败进行检查仍然是一个非常耗时的工作。一个主要的原因是许多测试失败是由同一个编译器缺陷引起的,这也被定义为编译器重复缺陷检测问题。对编译器进行调试是十分耗时的,因此调试这些重复的缺陷会导致巨大的时间和资源浪费。在这些缺陷中,会产生错误信息的缺陷(也称作崩溃缺陷)可以通过对比错误信息进行有效的去重。然而,有许多缺陷并不导致奔溃,也不会产生可以用于去重的错误信息即错误代码缺陷,加大了编译器重复缺陷检测任务的难度。针对这类缺陷,重复缺陷检测是一个非常有挑战性的难题。
[0004]针对传统软件的去重方法大多数都基于文字描述,测试输入或者错误信息来实现。然而,编译器与传统软件具有不同形式的测试输入(编译器的测试输入是测试程序)并且错误代码缺陷没有可用的文字描述或者错误信息。因此,这些现有的技术不能被用于编译器重复缺陷的检测。最近提出的两个针对编译 ...
【技术保护点】
【技术特征摘要】
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)的公式...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。