首页 / 专利库 / 电脑编程 / 别名 / 基于机器学习的编译器测试加速方法

基于机器学习的编译器测试加速方法

阅读:478发布:2020-05-11

专利汇可以提供基于机器学习的编译器测试加速方法专利检索,专利查询,专利分析的服务。并且本 发明 公布了一种编译器测试 加速 方法,采用 机器学习 方法构造用于预测测试程序触发 缺陷 的概率的能 力 模型和用于预测每个测试程序的执行时间的时间模型,通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序,从而实现编译器测试加速;包括学习阶段和调度阶段;学习阶段包括识别特征过程、训练能力模型过程和训练时间模型过程;调度阶段,基于所述学习阶段得到的能力模型和时间模型,得到新的测试程序的执行顺序。通过本发明,测试人员可在执行测试程序之前,事先对测试程序进行排序,使得更有可能触发缺陷的测试程序被优先执行,从而实现编译器测试加速。,下面是基于机器学习的编译器测试加速方法专利的具体信息内容。

1.一种编译器测试加速方法,采用机器学习方法构造用于预测测试程序触发缺陷的概率的能模型和用于预测每个测试程序的执行时间的时间模型,通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序,从而实现编译器测试加速;所述方法包括学习阶段和调度阶段;分别包括如下步骤:
1)学习阶段,包括识别特征过程、训练能力模型过程和训练时间模型过程:
11)识别特征过程,分别识别得到测试程序中的存在特征和使用特征;
12)训练能力模型过程:
121)收集一组测试程序作为训练集,分成能够触发缺陷的测试程序和不能够触发缺陷的测试程序;
122)利用上述训练集训练能力模型,包括特征选择、归一化和构建能力模型;
所述特征选择通过每个特征的信息增益比对特征进行选择,过滤掉信息增益比为零的无效特征;
所述归一化将特征的值统一到[0,1]区间中;
使用机器学习算法构建能力模型,所述能力模型的输入为测试程序的特征向量,模型输出为基于特征向量值计算得到的概率值,作为触发缺陷的概率;
13)训练时间模型
131)收集一组测试程序作为训练集,并记录所述测试程序的执行时间;
132)提取训练集中测试程序的存在特征和使用特征,并将记录的时间作为标记;
对训练集的每一维特征进行归一化处理;
使用高斯过程,通过懒惰学习方法和核函数训练模型构建回归模型,作为时间模型,用于预测每个测试程序的执行时间;所述时间模型输入为测试程序的特征向量,输出为基于特征向量值计算得到的值,即测试程序的执行时间;
2)调度阶段,基于所述学习阶段得到的能力模型和时间模型,得到新的测试程序的执行顺序,进行调度:
21)对每个待调度测试程序提取得到存在特征和使用特征;
22)使用所述学习阶段得到的能力模型和时间模型,分别预测得到待调度测试程序的触发缺陷的概率以及执行时间;
23)将能力模型预测的触发缺陷的概率值除以时间模型预测的执行时间,计算得到每个待调度测试程序的单位时间内的触发缺陷的概率;
24)按照每个测试程序的单位时间的触发缺陷的概率值,对测试程序进行排序,得到测试程序新的调度顺序,由此加速编译器测试。
2.如权利要求1所述编译器测试加速方法,其特征是,步骤11)所述存在特征表示在测试程序中是否存在某种类型的语言元素;所述某种类型的语言元素用于预测测试程序是否能够触发编译器缺陷;当存在所述类型的语言元素时,所述存在特征的特征值为1,否则为
0。
3.如权利要求2所述编译器测试加速方法,其特征是,所述存在特征包括:C语言中的所有语句类型、C语言中的所有表达式类型、C语言中的所有变量类型、C语言中的所有操作类型。
4.如权利要求1所述编译器测试加速方法,其特征是,步骤11)所述使用特征表示测试程序中某种语言元素被如何使用,所述使用特征当某些程序元素被用于某种特定的行为时发生。
5.如权利要求1所述编译器测试加速方法,其特征是,步骤11)所述使用特征包括:地址特征、结构体位域特征、指针引用特征、指针比较特征、别名集合特征、跳跃特征和使用变量的特征。
6.如权利要求1所述编译器测试加速方法,其特征是,步骤121)和步骤131)具体通过测试程序生成工具CSmith收集一组测试程序作为训练集。
7.如权利要求1所述编译器测试加速方法,其特征是,步骤122)所述归一化通过最大最小归一化法将特征的值统一到[0,1]区间中;具体地,设定测试程序集为T={t1,t2,…,tm},特征集为F={f1,f2,…,fs};通过式1计算得到xij*:
其中,变量xij表示测试程序ti的特征fj在归一化前的值;变量xij*表示测试程序ti的特征fj在归一化后的值;1≤i≤m,1≤j≤s。
8.如权利要求1所述编译器测试加速方法,其特征是,步骤122)所述构建能力模型使用序列最小优化机器学习算法构建能力模型,使用核函数,通过将一个大的二次方程优化问题拆分成了一系列最小的二次方程优化问题,预测测试程序触发缺陷的概率。

说明书全文

基于机器学习的编译器测试加速方法

技术领域

[0001] 本发明属于软件测试技术领域,涉及编译器测试方法,尤其涉及一种基于机器学习的编译器测试加速方法(LET:learning-to-test),能够使编译器在测试过程中更早地检测出缺陷

背景技术

[0002] 编译器作为高级编程语言和机器字节码之间转换的纽带,具有十分关键且不可替代的作用,几乎所有的软件系统都依赖于它。然而,和所有其他软件一样,编译器也不可避免地存在着缺陷。由于编译器的复杂特性,其缺陷是很难被人们所发现的。在编译器发展的几十年中,许多有效的编译器测试技术已经被提出,如随机差异测试、等价取模测试等。但是,无论采用哪种测试技术,编译器测试都是一个十分耗时的过程,常常需要数月甚至数年的测试时间,才能够发现少量的缺陷。
[0003] 针对编译器测试时间长的问题,目前没有任何有效的针对性方法来解决它。在编译器测试中,由于只有一小部分的测试程序会触发编译器的缺陷,那么,倘若可以先执行这些能触发编译器缺陷的测试程序,那么编译器测试即可被加速。因此,测试用例排序可以用来加速编译器测试。然而,大多数已有的测试用例排序方法都是依赖于覆盖信息的,而编译器的测试程序往往都是随机生成的,不可能提前获得它们的覆盖信息。也就是说,这些基于覆盖信息的测试用例排序方法无法用于编译器测试加速。最近,一些基于测试输入的测试用例排序方法被提出,然而通过实验表明,这些已有的基于测试输入的方法由于效率和效果的不足,仍然不能用于加速编译器。因此,目前还没有可以用来有效加速编译器测试的测试用例排序方法。

发明内容

[0004] 针对现有技术的不足,本发明提出了一种基于机器学习的编译器测试加速方法。通过本发明,测试人员可以在执行测试程序之前,事先对测试程序进行排序,使得更有可能触发缺陷的测试程序被优先执行,从而达到编译器测试的加速。
[0005] 本发明的原理是:通过机器学习的方法构造两个模型:能模型与时间模型。前者可以预测每个测试程序触发缺陷的概率,后者可以预测每个测试程序的执行时间。通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序。具体步骤可以分为两个阶段:学习阶段与调度阶段。学习阶段包括识别特征、训练能力模型、训练时间模型;在调度阶段,基于已经训练好的能力模型和时间模型,调度得到测试程序新的执行顺序;由此加速编译器测试。
[0006] 本发明的技术方案是:
[0007] 一种基于机器学习的编译器测试加速方法,通过机器学习的方法构造能力模型与时间模型,能力模型用于预测每个测试程序触发缺陷的概率,时间模型用于预测每个测试程序的执行时间;该加速方法通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序;包括学习阶段与调度阶段;分别包括如下步骤:
[0008] 1)学习阶段
[0009] 11)识别特征,包括存在特征和使用特征;
[0010] 通过手工研究大量编译器缺陷之后,识别出的特征可以被分为两类。第一类特征称为存在特征,指的是在测试程序中是否存在某种类型的语言元素。直观地讲,有一些缺陷的发生仅仅依赖于某种特定的语言元素,因此这些元素是否存在一定程序上可以帮助预测测试程序是否能够触发编译器缺陷。比如,循环优化相关缺陷的检测,必须使用具有循环元素的测试程序,否则无法触发到循环优化。如果测试程序存在该语言元素,那么该特征值为1,否则为0。更加具体地说,存在特征分为下列四类:
[0011] ●STMT:一组C语言中的所有语句类型
[0012] ●EXPR:一组C语言中的所有表达式类型
[0013] ●VAR:一组C语言中的所有变量类型
[0014] ●OP:一组C语言中的所有操作类型
[0015] 第二类特征被称为使用特征,指的是测试程序中某种语言元素被如何使用。直观地讲,某类编译器缺陷的触发,只有在某些程序元素被用于某种特定的行为时才会发生。比如,当一个指针指向了多地址,那么可能触发编译器中与指针相关的缺陷。在本发明中,我们利用了一个随机测试程序生成工具CSmith的特性,即当使用CSmith生成测试程序时,它会记录生成程序的一些使用特性。为了节约特征收集的时间,我们直接使用了由CSmith收集的使用特性,具体如下:
[0016] ●地址特征,如一个结构体或者一个变量被访问地址的次数
[0017] ●结构体位域特征:如全域结构体的个数
[0018] ●指针引用特征:如指针引用深度
[0019] ●指针比较特征:如指针与NULL比较的次数
[0020] ●别名集合特征:如别名集合大小
[0021] ●跳跃特征:如前跳的次数
[0022] ●使用变量的特征:如新创建的变量的比例
[0023] 12)训练能力模型
[0024] 通过已经存在的测试程序生成工具(CSmith),首先收集一组测试程序作为训练集,其中一半为能够触发缺陷,另一半为不能够触发缺陷。基于这一组训练集,通过下列三个步骤训练能力模型:特征选择、归一化和构建能力模型。本发明中,能力模型是指用来预测测试程序触发缺陷概率的模型。
[0025] 特征选择:计算每个特征的信息增益比。在这里,信息增益比指的是对本质信息的信息增益的比例,其经常被用作度量一个特征的贡献。通过计算信息增益比,可以过滤掉无效的特征,即信息增益比为零的特征。
[0026] 归一化:由于特征通常是数值类型和布尔类型,本发明通过最大最小归一化法将特征的值统一到[0,1]区间中。假设测试程序集为T={t1,t2,…,tm},特征集为F={f1,*f2,…,fs},使用变量xij来表示测试程序ti的特征fj在归一化前的值;使用变量xij来表示测试程序ti的特征fj在归一化后的值。其中1≤i≤m,1≤j≤s。xij*可通过如下公式求得:
[0027]
[0028] 构建能力模型:经过特征选择和归一化之后,使用序列最小优化算法(Sequential Minimal Optimization,简称SMO)机器学习算法构建能力模型。在训练模型中,LET使用Puk核函数,同时设置omega的值为1.0以及sigma的值为0.7。SMO算法是一种支持向量机算法,该算法通过将一个大的二次方程优化问题拆分成了一系列最小的二次方程优化问题,从而加速了传统的支持向量机算法。特别地,训练出的能力模型可以预测任何一个新的测试程序的缺乏缺陷的概率,具体来说,该模型的输入为由测试程序抽象而来的特征向量,输出为该模型基于特征向量值计算出的概率值,即触发缺陷的概率。
[0029] 13)训练时间模型
[0030] 收集一组测试程序作为训练集,并记录了其执行时间,每一个测试程序被当作一个实例,提取上述所有列出的特征,并将记录的时间作为标记。与训练能力模型类似,首先对训练集的每一维特征进行归一化处理,然后使用高斯过程构建回归模型,即时间模型。在训练模型中,LET同样使用Puk核函数,同时设置omega的值为3.3以及sigma的值为0.5。高斯过程使用懒惰学习方法以及核函数训练模型。特别地,训练出的时间模型用来预测新的测试程序的实际执行时间,具体来说,该模型的输入为由测试程序抽象而来的特征向量,输出为该模型基于特征向量值计算出的值,即测试程序的执行时间。
[0031] 2)调度阶段
[0032] 基于学习的能力模型和时间模型,在调度阶段调度新的测试程序的执行顺序。首先,对每个待调度的测试程序提取上述所有列出的特征,然后使用这两个模型分别预测该测试程序的触发缺陷的概率以及执行时间。接着,计算每个程序的单位时间内的触发缺陷的概率,即用能力模型预测的触发缺陷的概率值除以时间模型预测的执行时间。最后,LET基于每个测试程序的单位时间的触发缺陷的概率,按照概率值从大到小的顺序对测试程序进行排序。
[0033] 与现有技术相比,本发明的有益效果是:
[0034] 本发明提出了一种基于机器学习的编译器测试加速方法,通过机器学习的方法构造能力模型与时间模型,能力模型用于预测每个测试程序触发缺陷的概率,时间模型用于预测每个测试程序的执行时间;该加速方法通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序。
[0035] 本发明可实现加速编译器测试。现有的编译器测试,都是通过生成大量的测试程序,然后直接执行,使用各种各样的测试预言对是否触发缺陷进行判断,这样的方式往往导致编译器测试的时间非常长。通过本发明,测试人员可以在执行测试程序之前,事先对测试程序进行排序,使得更有可能触发缺陷的测试程序被优先执行,从而达到编译器测试的加速。附图说明
[0036] 图1是本发明方法的流程框图

具体实施方式

[0037] 下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
[0038] 本发明提出了一种基于机器学习的编译器测试加速方法,通过机器学习的方法构造能力模型与时间模型,能力模型用于预测每个测试程序触发缺陷的概率,时间模型用于预测每个测试程序的执行时间;该加速方法通过计算每个测试程序单位时间内触发缺陷的概率,实现对测试程序的排序。本发明可应用于加速编译器测试。
[0039] 通过本发明,开发人员可以在进行编译器测试之前,对测试程序进行排序,使更能够触发缺陷的测试程序优先执行,从而达到加速编译器测试的效果。以下实例收集1000个测试程序作为训练集,生成1000个测试程序作为测试集,实施本发明提出的编译器测试加速方法,图1所示为本发明方法的流程,具体包括如下步骤:
[0040] 1)对训练集中的1000个程序中的每个程序提取出特征,特征包括存在特征和使用特征;并对特征进行归一化处理,分别构建能力模型和时间模型;能力模型用于预测每个测试程序触发缺陷的概率;时间模型用来预测测试程序的实际执行时间。
[0041] 存在特征指的是在测试程序中是否存在某种类型的语言元素。如果测试程序存在该语言元素,那么该特征值为1,否则为0。更加具体地说,C语言中的存在特征分为下列四类:
[0042] ●STMT:一组C语言中的所有语句类型
[0043] ●EXPR:一组C语言中的所有表达式类型
[0044] ●VAR:一组C语言中的所有变量类型
[0045] ●OP:一组C语言中的所有操作类型
[0046] 使用特征指的是测试程序中某种语言元素被如何使用。本发明具体实施中,我们利用了一个随机测试程序生成工具CSmith的特性,即当使用CSmith生成测试程序时,它会记录生成程序的一些使用特性。为了节约特征收集的时间,我们直接使用了由CSmith收集的使用特性,具体如下:
[0047] ●地址特征,如一个结构体或者一个变量被访问地址的次数
[0048] ●结构体位域特征:如全域结构体的个数
[0049] ●指针引用特征:如指针引用深度
[0050] ●指针比较特征:如指针与NULL比较的次数
[0051] ●别名集合特征:如别名集合大小
[0052] ●跳跃特征:如前跳的次数
[0053] ●使用变量的特征:如新创建的变量的比例
[0054] 特征归一化:本发明通过最大最小归一化法将特征的值统一到[0,1]区间中。
[0055] 构建能力模型过程中,在对特征归一化之前,需要选择特征。选择特征具体通过计算每个特征的信息增益比,过滤掉信息增益比为零(无效)的特征。信息增益比是对本质信息的信息增益的比例,经常被用作度量一个特征的贡献。
[0056] 构建能力模型:本发明具体实施中,使用序列最小优化算法(Sequential Minimal Optimization,简称SMO)机器学习算法构建能力模型。在训练模型中,使用Puk核函数,同时设置omega的值为1.0以及sigma的值为0.7。SMO通过将一个大的二次方程优化问题拆分成了一系列最小的二次方程优化问题,从而加速了传统的支持向量机算法。
[0057] 构建时间模型;记录每一个测试程序的执行时间,将每一个测试程序当作一个实例,针对上述提取出的特征,将记录的执行时间作为标记。与训练能力模型类似,首先对训练集每一维特征值进行归一化,然后使用高斯过程构建回归模型,即时间模型。在训练模型中,同样使用Puk核函数,同时设置omega的值为3.3以及sigma的值为0.5。高斯过程使用懒惰学习方法以及核函数训练模型。
[0058] 2)将测试集合中的1000个程序中的每个程序提取上述特征,并将该特征向量作为能力模型的输入,预测每个测试程序触发编译器缺陷的概率。
[0059] 3)将测试集合中的1000个程序中的每个程序提取上述特征,并将该特征向量作为时间模型的输入,预测每个测试程序的实际执行时间。
[0060] 4)计算每个测试程序单位时间内触发缺陷的概率(即将预测得到的触发缺陷的概率值除以预测得到的执行时间),对测试集中的1000个测试程序按照该概率值由大到小的顺序对其进行排序,得到测试程序新的执行顺序,由此加速编译器测试。
[0061] 表1 LET的加速效果与随机排序和基于文本向量的排序方法的对比
[0062]
[0063] 表1是LET的加速效果与随机排序和基于文本向量的排序方法的对比,表1中,第一列和第九列代表LET的应用场景,比如Open64-5.0->GCC-4.4.3表示在Open64-5.0上训练模型,对GCC-4.4.3进行测试;第二列和第十列代表缺陷数量;第三、六、十一、十四列代表随机排序的结果,即检测到相应数量的缺陷所花费的时间;第四、七、十二、十五列代表LET与随机排序的效果差,即检测到相同数量的缺陷,LET所节约的时间;第五、八、十三、十六列代表基于文本向量的排序方法与随机排序的效果差,即检测到相同数量的缺陷,基于文本向量的排序方法所节约的时间;此外,DOL和EMI是两种最常用的编译器测试技术。从表1可以看出,在各种应用场景下,对于使用DOL和EMI这两种编译器测试技术来说,检测各种数量的缺陷时,LET在大多数情况下都花费最短的时间检测这些缺陷,这意味着LET确实在很大程度上加速了编译器测试。
[0064] 表2 LET对不同编译器技术在不同测试场景下的统计结果
[0065]
[0066] 表2是LET对不同编译器技术在不同测试场景下的统计结果,表2中,DOL和EMI代表两种不同的编译器测试技术;Cross-compiler和Cross-version代表着不同的LET测试场景,前者代表训练集和测试集来自不同的编译器,或者代表训练集和测试集来自同一个编译器的不同版本;Mean代表着LET所达到的加速比的平均值,p-value代表着LET的加速效果是否显著,其中带有加号代表显著;从表2可以看出,无论对于哪一种编译器测试技术,在哪一种测试场景下,LET都显著地加速了编译器测试,平均加速比在27.69%到50.81%的范围内。
[0067] 需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈