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

一种基于Delta Debugging与约束求解的并发程序缺陷定位方法技术

技术编号:23445543 阅读:18 留言:0更新日期:2020-02-28 19:48
本发明专利技术公开了一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,利用内存访问模式来抽象程序执行轨迹(Trace)来帮助程序开发人员理解错误原因,利用Delta Debugging方法快速找到导致并发程序失败的内存访问模式集合,以及利用约束求解技术生成满足要求的可执行程序轨迹(Trace)。本发明专利技术利用Delta Debugging算法,可以快速准确定位到导致错误的原因;利用约束求解技术可以高效找到符合要求的可执行程序序列,进一步提高定位速度。

A defect location method for concurrent programs based on Delta debugging and constraint solving

【技术实现步骤摘要】
一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法
本专利技术属于软件工程和软件测试领域,尤其涉及一种基于约束求解的并发程序错误定位方法。
技术介绍
由于并发程序的状态空间巨大,程序线程交错复杂,对于并发程序缺陷定位一直是困扰学术界和产业界的问题。为了解决或者部分解决并发程序缺陷定位速度慢,定位准确度低的问题,已经有很多方法提出。这些方法根据是否正真执行并发程序可以被分成静态方法、动态方法和混合方法三类,当然也存在一些其他分类方法。其中:静态方法并不真正执行并发程序,一般是通过对程序源代码分析或者对已经收集到的程序执行轨迹进行分析从而定位到导致程序错误的原因;而动态方法一般通过插装(Instrumentation)的方式将相关的分析程序插入到程序源代码中,在通过执行修改过的源码获得更多的信息,从而找到导致错误的根本原因。然而无论是静态方法还是动态方法都有一定的缺陷,静态方法由于无法真正运行程序,可能会错误估计实际无法产生的错误,从而产生假阳性(FalsePositive)的问题,也就是定位到的原因实际上不会导致程序失败,而动态方法由于要执行程序,一般由于时间的缘故,无法覆盖到全部的状态空间,可能会有假阴性(FalseNegative)的问题,也就是找到的导致程序失败的原因不完全。为了克服以上的问题,混合方法综合静态方法和动态方法的优点,一般先通过静态分析程序源代码定位到错误原因,在通过动态方法进行验证,减轻误报问题,然而混合的方法的缺点是实现比较复杂,不利于理解。专利
技术实现思路
本专利技术旨在解决并发程序缺陷定位中定位精度差,定位速度慢的问题,本专利技术提出一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法,通过将包含并发缺陷的程序抽象成内存访问模式集合,再利用DeltaDebugging和约束求解方法快速找到导致并发程序错误的内存访问模式的最小集合从而定位到导致并发程序缺陷的根本原因。本专利技术的一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法,整体流程包括以下步骤:步骤一、给定一个并发程序;步骤二、利用程序调度器,不断按照随机调度的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Tracep和一条错误执行轨迹Tracef,p,f之间满足关系:在所有收集到的正确执行轨迹集合P和错误执行轨迹集合F中,令diff(f,p)表示一条错误执行轨迹f与正确执行轨迹p的差异;作为流程的输入;每条轨迹Trace都是执行语句的集合,而语句用一个四元组(ti,si,ri,wi)来表示,其中,ti表示线程i,si表示执行代码中的第i行代码,ri表示读取变量的集合,wi表示写变量的集合;步骤三:提取程序执行轨迹中的内存访问模式集合S,即:从正确轨迹序列p中提取出的内存访问模式集合为Sp,从失败轨迹序列f中提取出的模式集合为Sf;提取内存访问模式的过程为:首先利用贪心算法,构建长度为2的内存访问模式,然后利用所有长度为2的模式,拼接成长度为3和4的模式,同时删除组成它们的长度为2的模式,最后将拼接出的长度为3和4的模式,以及不是任意其他模式组成部分的长度为2的模式整合到一起,就获得了是最终从轨迹Trace中提取的内存访问模式;步骤四、利用DeltaDebugging算法逐步缩小可疑模式集合U,直到集合中只剩一个模式或者无法再继续缩小,如图4所示,是DeltaDebugging的算法流程图。具体处理如下:最初始的可疑模式集合U=Sf-SD。给定了初始的可疑模式集合U之后:(1)首先判断U内的模式数量是否为1,如果为1,则表明程序正确运行序列和程序错误执行序列差别只在于一个模式,这个模式就代表导致错误的根源原因;如果模式数量不是1,利用算法进一步尝试缩小可疑模式集合的大小,直到集合大小为1或者无法进一步缩小;(2)然后对U进行N等分得到U的子集合的集合X={x1,x2,...,xN},N初始设为2;(3)从集合X中按顺序选出U的子集xi;(4)接下来通过运行程序来检验打断xi中所有的模式,同时保留其他可疑模式,判断程序是否不再出错;(5)如果不再出错,证明集合xi中包含导致程序错误的根源原因,如果程序依旧出错,证明xi中的模式集合不是导致错误的原因或者不完全是导致错误的原因;(6)如果X中的某个xi被打断之后,程序不再出错,算法就将可疑模式集合U设为xi,同时N重新置为2,再继续循环上面的过程,直到将可疑模式集合U的大小减到最小;(7)如果X中的所有xi模式子集合被打断之后都无法导致程序不再出错,就令N=N*2,重新进行(2)-(6)的过程,直到找到一个子集合xi,xi中的任意模式子集合被打断都不能使并发程序不出错,而包含xi的模式集合被打断,都能保证并发程序缺陷不再出现。(8)返回经过算法筛选的最小可疑模式集合U;步骤五、约束求解生成满足要求的新的可执行程序轨迹Trace序列,即:通过将程序正常执行需要满足的条件提取出来,再与打断内存访问模式的约束合并到一起,把所有约束加入到约束求解器中,得到的序列保证一定是可执行的;从程序执行轨迹中提取出约束在MCR中;在MCR提供的约束基础上,加入对内存访问模式打断的约束。本专利技术的有益效果如下:(1)利用DeltaDebugging算法,可以快速准确定位到导致错误的原因。(2)利用约束求解技术可以高效找到符合要求的可执行程序序列,进一步提高定位速度。附图说明图1为本专利技术一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法整体流程图;图2为示例Java程序。图3为示例程序的一条简化执行轨迹。图4为DeltaDebugging算法流程图。具体实施方式下面结合附图和实施例对本专利技术技术方案进行详细描述。本专利技术的一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法,主体可以分成三个部分:利用内存访问模式来抽象程序执行轨迹(Trace),帮助程序开发人员理解错误原因;利用DeltaDebugging方法快速找到导致并发程序失败的内存访问模式集合;以及利用约束求解技术生成满足要求的可执行程序轨迹(Trace),验证实验结果。如图1所示,为本专利技术一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法整体流程图。步骤一、给定一个并发程序;步骤二、利用程序调度器,不断按照随机调度(在并发程序执行时,程序调度器随机选择下一步要执行的线程)的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Tracep和一条错误执行轨迹Tracef,p,f之间满足关系:在所有收集到的正确执行轨迹集合P和错误执行轨迹集合F中,令diff(f,p)表示一条错误执行轨迹f与正确执行轨迹Tracep的差异,对于所有的f∈F,p∈P,d本文档来自技高网
...

【技术保护点】
1.一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,其特征在于,该方法整体流程包括以下步骤:/n步骤一、给定一个并发程序;/n步骤二、利用程序调度器,不断按照随机调度的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Tracep和一条错误执行轨迹Tracef,p,f之间满足关系:在所有收集到的正确执行轨迹集合P和错误执行轨迹集合F中,令diff(f,p)表示一条错误执行轨迹f与正确执行轨迹p的差异;作为流程的输入;每条轨迹Trace都是执行语句的集合,而语句用一个四元组(t

【技术特征摘要】
1.一种基于DeltaDebugging与约束求解的并发程序缺陷定位方法,其特征在于,该方法整体流程包括以下步骤:
步骤一、给定一个并发程序;
步骤二、利用程序调度器,不断按照随机调度的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Tracep和一条错误执行轨迹Tracef,p,f之间满足关系:在所有收集到的正确执行轨迹集合P和错误执行轨迹集合F中,令diff(f,p)表示一条错误执行轨迹f与正确执行轨迹p的差异;作为流程的输入;每条轨迹Trace都是执行语句的集合,而语句用一个四元组(ti,si,ri,wi)来表示,其中,ti表示线程i,si表示执行代码中的第i行代码,ri表示读取变量的集合,wi表示写变量的集合;
步骤三:提取程序执行轨迹中的内存访问模式集合S,即:从正确轨迹序列p中提取出的内存访问模式集合为Sp,从失败轨迹序列f中提取出的模式集合为Sf;提取内存访问模式的过程为:首先利用贪心算法,构建长度为2的内存访问模式,然后利用所有长度为2的模式,拼接成长度为3和4的模式,同时删除组成它们的长度为2的模式,最后将拼接出的长度为3和4的模式,以及不是任意其他模式组成部分的长度为2的模式整合到一起,就获得了是最终从轨迹Trace中提取的内存访问模式;
步骤四、利用DeltaDebugging算法逐步缩小可疑模式集合U,直到集合中只剩一个模式或者无法再继续缩小,如图4所示,是DeltaDebugging的算法流程图;具体处理如下:
最初始的可疑模式集合U=Sf-SD;给定了初始的可疑模式集合U之后:
(1)首先...

【专利技术属性】
技术研发人员:魏广宁王赞
申请(专利权)人:天津大学
类型:发明
国别省市:天津;12

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

1