CN110851353B - 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 - Google Patents
一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 Download PDFInfo
- Publication number
- CN110851353B CN110851353B CN201911006930.7A CN201911006930A CN110851353B CN 110851353 B CN110851353 B CN 110851353B CN 201911006930 A CN201911006930 A CN 201911006930A CN 110851353 B CN110851353 B CN 110851353B
- Authority
- CN
- China
- Prior art keywords
- program
- error
- execution
- modes
- suspicious
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 230000007547 defect Effects 0.000 title claims abstract description 20
- 230000003068 static effect Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,利用内存访问模式来抽象程序执行轨迹(Trace)来帮助程序开发人员理解错误原因,利用Delta Debugging方法快速找到导致并发程序失败的内存访问模式集合,以及利用约束求解技术生成满足要求的可执行程序轨迹(Trace)。本发明利用Delta Debugging算法,可以快速准确定位到导致错误的原因;利用约束求解技术可以高效找到符合要求的可执行程序序列,进一步提高定位速度。
Description
技术领域
本发明属于软件工程和软件测试领域,尤其涉及一种基于约束求解的并发程序错误定位方法。
背景技术
由于并发程序的状态空间巨大,程序线程交错复杂,对于并发程序缺陷定位一直是困扰学术界和产业界的问题。为了解决或者部分解决并发程序缺陷定位速度慢,定位准确度低的问题,已经有很多方法提出。这些方法根据是否正真执行并发程序可以被分成静态方法、动态方法和混合方法三类,当然也存在一些其他分类方法。其中:静态方法并不真正执行并发程序,一般是通过对程序源代码分析或者对已经收集到的程序执行轨迹进行分析从而定位到导致程序错误的原因;而动态方法一般通过插装(Instrumentation)的方式将相关的分析程序插入到程序源代码中,在通过执行修改过的源码获得更多的信息,从而找到导致错误的根本原因。然而无论是静态方法还是动态方法都有一定的缺陷,静态方法由于无法真正运行程序,可能会错误估计实际无法产生的错误,从而产生假阳性(FalsePositive)的问题,也就是定位到的原因实际上不会导致程序失败,而动态方法由于要执行程序,一般由于时间的缘故,无法覆盖到全部的状态空间,可能会有假阴性(FalseNegative)的问题,也就是找到的导致程序失败的原因不完全。
为了克服以上的问题,混合方法综合静态方法和动态方法的优点,一般先通过静态分析程序源代码定位到错误原因,在通过动态方法进行验证,减轻误报问题,然而混合的方法的缺点是实现比较复杂,不利于理解。
发明内容
本发明旨在解决并发程序缺陷定位中定位精度差,定位速度慢的问题,本发明提出一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,通过将包含并发缺陷的程序抽象成内存访问模式集合,再利用Delta Debugging和约束求解方法快速找到导致并发程序错误的内存访问模式的最小集合从而定位到导致并发程序缺陷的根本原因。
本发明的一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,整体流程包括以下步骤:
步骤一、给定一个并发程序;
步骤二、利用程序调度器,不断按照随机调度的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Trace p和一条错误执行轨迹Trace f,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中提取的内存访问模式;
步骤四、利用Delta Debugging算法逐步缩小可疑模式集合U,直到集合中只剩一个模式或者无法再继续缩小,如图4所示,是Delta Debugging的算法流程图。具体处理如下:
最初始的可疑模式集合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)利用Delta Debugging算法,可以快速准确定位到导致错误的原因。
(2)利用约束求解技术可以高效找到符合要求的可执行程序序列,进一步提高定位速度。
附图说明
图1为本发明一种基于Delta Debugging与约束求解的并发程序缺陷定位方法整体流程图;
图2为示例Java程序。
图3为示例程序的一条简化执行轨迹。
图4为Delta Debugging算法流程图。
具体实施方式
下面结合附图和实施例对本发明技术方案进行详细描述。
本发明的一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,主体可以分成三个部分:利用内存访问模式来抽象程序执行轨迹(Trace),帮助程序开发人员理解错误原因;利用Delta Debugging方法快速找到导致并发程序失败的内存访问模式集合;以及利用约束求解技术生成满足要求的可执行程序轨迹(Trace),验证实验结果。
如图1所示,为本发明一种基于Delta Debugging与约束求解的并发程序缺陷定位方法整体流程图。
步骤一、给定一个并发程序;
步骤二、利用程序调度器,不断按照随机调度(在并发程序执行时,程序调度器随机选择下一步要执行的线程)的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹Trace,从中选出一条正确执行轨迹Trace p和一条错误执行轨迹Trace f,p,f之间满足关系:在所有收集到的正确执行轨迹集合P和错误执行轨迹集合F中,令diff(f,p)表示一条错误执行轨迹f与正确执行轨迹Trace p的差异,对于所有的f∈F,p∈P,diff(f,p)最大;作为流程的输入;每条轨迹Trace都是执行语句的集合,而语句用一个四元组(ti,si,ri,wi)来表示,其中,ti表示线程i,si表示执行代码中的第i行代码,ri表示读取变量的集合,wi表示写变量的集合;
步骤三:提取程序执行轨迹中的内存访问模式(Memory Access Pattern)集合S,即从上述的一条正确轨迹序列p中提取出的内存访问模式集合为Sp,从上述的一条失败轨迹序列f中提取出的模式集合为Sf。17种内存访问模式根据其模式中语句的个数可以分成三类模式,分别为长度为2、长度为3和长度为4的内存访问模式。其中长度为4的内存访问模式,又可以被认为是关联双变量的内存访问模式,而长度为2和3的模式为单变量内存访问模式。提取内存访问模式的过程,首先利用贪心算法,构建长度为2的内存访问模式,然后利用所有长度为2的模式,拼接成长度为3和4的模式,同时删除组成它们的长度为2的模式,最后将拼接出的长度为3和4的模式,以及不是任意其他模式组成部分的长度为2的模式整合到一起。就是最终从轨迹Trace中提取的内存访问模式了。内存访问模式可以有效的揭示导致并发程序错误的原因。
如图2、图3所示分别为示例Java程序、示例程序的一条简化程序执行轨迹。
例如对于图3的轨迹Trace,提取出的长度为2的模式有:(p23,p24),(p26,p28),(p16,p21),(p16,p24),(p24,p28),(p28,p31),(p31,p39)。而通过这些长度为2的模式,获得(p23,p24,p28),(p26,p28,p31),(p16,p24,p28),(p24,p28,p31)这4个长度为3的模式,同时删去(p23,p24),(p24,p28),(p26,p28),(p28,p31),(p16,p24)这5个长度为2的模式。由于示例程序只涉及单变量,因此没有长度为4的模式被提取出来,因此,最后Trace中提取出(p16,p21),(p31,p39),(p23,p24,p28),(p26,p28,p31),(p16,p24,p28),(p24,p28,p31)这6个模式。
步骤四、利用Delta Debugging算法逐步缩小可疑模式集合U,直到集合中只剩一个模式或者无法再继续缩小,如图4所示,是Delta Debugging的算法流程图。具体处理如下:
最初始的可疑模式集合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。
例如步骤二中的模式集合,令可疑模式集合U={(p16,p21),(p31,p39),(p23,p24,p28),(p26,p28,p31),(p16,p24,p28),(p24,p28,p31)}。首先判断U的大小,U中包含6个模式,大小不为1,因此将U进行二等分,得到X={{(p16,p21),(p31,p39),(p23,p24,p28)},{(p26,p28,p31),(p16,p24,p28),(p24,p28,p31)}。首先从X中选出x1={(p16,p21),(p31,p39),(p23,p24,p28)}。利用约束求解生成新的可执行轨迹,经过运行发现程序依然出错,然后从X中选出子集合x2={(p26,p28,p31),(p16,p24,p28),(p24,p28,p31)}。打断x2中的所有模式,程序最终没有出错,因此令U=x2。U中包含的模式数量为3,因此对U再一次进行二分,得到X={(p26,p28,p31),(p16,p24,p28)},{(p24,p28,p31)}。从X中继续选出新的x1={(p26,p28,p31),(p16,p24,p28)}。然后打断x1中的模式,程序不再出错,因此将U进一步设为{(p26,p28,p31),(p16,p24,p28)}。由于U的大小仍然不为1,因此继续将U二等分,得到新的X={(p26,p28,p31)},{(p16,p24,p28)}。从X中选出新的子模式集合(p26,p28,p31),发现打断后程序依然正确,因此将U设为{(p26,p28,p31)},又因为最新的U中只包含一个模式,因此算法结束,返回模式(p26,p28,p31)作为并发缺陷的根本原因。通过该模式,可以看出是图2中程序的16行对customerCost变量的读写被另一线程第16行的写所打断,因此需要程序开发人员在程序第16行加入锁,保护第16行的代码原子性执行,不被其他线程的共享变量访问操作打断。
通过上面的例子,可以看出,本来大小为6的模式集合最多有64种子集合,利用本发明的方法,仅需要运行3次程序就能到找到导致错误的根本原因,而不需要运行64次程序。同时,本发明返回的结果更利于程序员理解,返回的内存访问模式能令程序开发人员快速理解错误,从而找到修复程序的方法。
步骤五、约束求解生成满足要求的新的可执行程序轨迹Trace序列,具体为:通过将程序正常执行需要满足的条件提取出来,再与打断内存访问模式的约束合并到一起,把所有约束加入到约束求解器中,得到的序列保证一定是可执行的。如何生成满足Java语言规范,也就是如何从程序执行轨迹中提取出约束在MCR中,本发明在MCR提供的约束基础上,加入对内存访问模式打断的约束。例如如果想要打断内存访问模式子集合X={(p26,p28,p31),(p16,p24,p28)},本发明会生成下面的约束:
(O28<O26∪O28>O31)∩(O24<O16∪O24>O28)
其中,O28代表当前轨迹的第28个语句在新的执行轨迹中的位置,也就是p28(t19,s16,{},{amount})在新的可执行序列中出现的次序。因此上面的约束就可以解释为在新的可执行序列中:p28要在p26之前执行或者p28在p31之后执行,在满足这条约束的同时也要满足p24在p16之前执行,后者p24在p28之后执行。通过求解上面的约束和MCR中提供的约束,得到的解就是可执行的且打断访问模式子集合X的序列。
约束求解是找到满足一系列条件限制的解集(Solutions)的过程。在本发明中,为了找到满足条件的可执行程序序列,提出四种约束分别是:先发生于(Happens Before)规则、锁互斥(Lock Mutual)规则、数据有效(Data Validity)规则以及打断内存访问模式(Pattern Stop)规则。利用Z3约束求解器进行约束求解,要么可以获得多个满足所有四种约束的解,也就是可执行程序轨迹,只需要从中任意选取一个即可,要么无法求出解,从而说明没有满足约束的可执行程序轨迹存在。
本发明对以上算法利用MCR实现了一个针对Java程序的并发缺陷检测工具,通过对27个现实中的Java并发缺陷进行测试,发现本发明平均仅需要2个内存访问模式就可以定位到程序并发缺陷的根本原因,同时绝大多数程序仅在几秒内就可以完成所有流程,在经过人工判断之后,发现本发明报告的内存访问模式都是导致程序失败的原因,本发明能正确定位导致程序失败的原因。
Claims (1)
1.一种基于Delta Debugging与约束求解的并发程序缺陷定位方法,其特征在于,该方法整体流程包括以下步骤:
步骤一、给定一个并发程序;
步骤二、利用程序调度器,不断按照随机调度的方法执行程序直到时间达到设定的阈值,得到多条程序执行轨迹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中提取的内存访问模式;
步骤四、利用Delta Debugging算法逐步缩小可疑模式集合U,直到集合中只剩一个模式或者无法再继续缩小,如图4所示,是Delta Debugging的算法流程图;具体处理如下:
最初始的可疑模式集合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提供的约束基础上,加入对内存访问模式打断的约束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006930.7A CN110851353B (zh) | 2019-10-22 | 2019-10-22 | 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006930.7A CN110851353B (zh) | 2019-10-22 | 2019-10-22 | 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110851353A CN110851353A (zh) | 2020-02-28 |
CN110851353B true CN110851353B (zh) | 2023-03-31 |
Family
ID=69596697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911006930.7A Expired - Fee Related CN110851353B (zh) | 2019-10-22 | 2019-10-22 | 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110851353B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563043B (zh) * | 2020-05-11 | 2022-11-01 | 西安邮电大学 | 一种并发程序测试噪声注入优化方法 |
CN112199727B (zh) * | 2020-10-30 | 2022-04-15 | 天津大学 | 一种基于自然语言处理的隐私政策摘要方法 |
CN114911695B (zh) * | 2022-04-11 | 2024-08-06 | 天津大学 | 基于内存访问模式的并发程序缺陷检测方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710378A (zh) * | 2009-10-10 | 2010-05-19 | 北京理工大学 | 一种基于序列模式挖掘的软件安全漏洞检测方法 |
CN103296685A (zh) * | 2013-05-27 | 2013-09-11 | 国家电网公司 | 一种svc补偿策略最优化方法 |
CN103559131A (zh) * | 2013-11-07 | 2014-02-05 | 中国科学院软件研究所 | 一种有效的层次化错误定位方法 |
CN104050086A (zh) * | 2014-07-01 | 2014-09-17 | 南京邮电大学 | 基于组合测试的错误定位方法 |
CN104077226A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法 |
CN104583947A (zh) * | 2012-08-20 | 2015-04-29 | 微软公司 | 预测软件构建错误 |
CN105183655A (zh) * | 2015-09-25 | 2015-12-23 | 南京大学 | 基于预测性分析的安卓应用程序数据竞争检测 |
CN105740149A (zh) * | 2016-01-29 | 2016-07-06 | 中国人民解放军信息工程大学 | 基于脆弱性模型和符号执行结合的软件安全检测方法 |
CN106095663A (zh) * | 2016-05-26 | 2016-11-09 | 西安交通大学 | 基于切片模型的程序回归错误定位方法 |
CN109522207A (zh) * | 2018-09-26 | 2019-03-26 | 东南大学 | 一种基于约束求解的原子集合序列化违背探测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8943478B2 (en) * | 2009-07-14 | 2015-01-27 | International Business Machines Corporation | Fault detection and localization in dynamic software applications |
US10402178B2 (en) * | 2018-01-26 | 2019-09-03 | Accenture Global Solutions Limited | Cross platform content management and distribution system |
-
2019
- 2019-10-22 CN CN201911006930.7A patent/CN110851353B/zh not_active Expired - Fee Related
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710378A (zh) * | 2009-10-10 | 2010-05-19 | 北京理工大学 | 一种基于序列模式挖掘的软件安全漏洞检测方法 |
CN104583947A (zh) * | 2012-08-20 | 2015-04-29 | 微软公司 | 预测软件构建错误 |
CN103296685A (zh) * | 2013-05-27 | 2013-09-11 | 国家电网公司 | 一种svc补偿策略最优化方法 |
CN103559131A (zh) * | 2013-11-07 | 2014-02-05 | 中国科学院软件研究所 | 一种有效的层次化错误定位方法 |
CN104050086A (zh) * | 2014-07-01 | 2014-09-17 | 南京邮电大学 | 基于组合测试的错误定位方法 |
CN104077226A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法 |
CN105183655A (zh) * | 2015-09-25 | 2015-12-23 | 南京大学 | 基于预测性分析的安卓应用程序数据竞争检测 |
CN105740149A (zh) * | 2016-01-29 | 2016-07-06 | 中国人民解放军信息工程大学 | 基于脆弱性模型和符号执行结合的软件安全检测方法 |
CN106095663A (zh) * | 2016-05-26 | 2016-11-09 | 西安交通大学 | 基于切片模型的程序回归错误定位方法 |
CN109522207A (zh) * | 2018-09-26 | 2019-03-26 | 东南大学 | 一种基于约束求解的原子集合序列化违背探测方法 |
Non-Patent Citations (7)
Title |
---|
Huarui Lin 等."PFix: Fixing concurrency bugs based on memory access patterns".《Singapore Management University》.2018,全文. * |
Long Zheng 等."Towards concurrency race debugging: an integrated approach for constraint solving and dynamic slicing".《PACT》.2018,全文. * |
W.Eric Wong 等."A survey on software fault localization".《IEEE》.2016,全文. * |
傅浩杰."基于Delta-Debugging算法的多线程程序缺陷定位方法研究".《中国优秀硕士学位论文全文数据库信息科技辑》.2019,全文. * |
周风顺 ; 王林章 ; 李宣东 ; .C/C++程序缺陷自动修复与确认方法.软件学报.(第05期),全文. * |
杨杨."一种基于自适应随机测试的并发缺陷检测方法".《中国优秀硕士学位论文全文数据库信息科技辑》.2018,全文. * |
高雪瑶 ; 刘云腾 ; .基于改进鱼群算法的几何约束求解.计算机应用研究.(第04期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110851353A (zh) | 2020-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110851353B (zh) | 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 | |
CN108509336B (zh) | 一种操作系统规范形式化验证与测试方法 | |
US7882495B2 (en) | Bounded program failure analysis and correction | |
Le Goues et al. | Specification mining with few false positives | |
Bouajjani et al. | Verifying concurrent programs against sequential specifications | |
Yang et al. | Dynamically inferring temporal properties | |
CN110059014B (zh) | 一种并发程序数据竞争指令级定位方法 | |
CN105955877A (zh) | 一种基于符号计算的动态并行程序污点分析方法 | |
EP2106588A1 (en) | Fast and accurate static data-race detection for concurrent programs | |
EP3752945B1 (en) | Automatic generation of patches for security violations | |
Reger | Automata based monitoring and mining of execution traces | |
Tunç et al. | Sound dynamic deadlock prediction in linear time | |
EP2713277B1 (en) | Latent defect identification | |
Bell | Detecting, isolating, and enforcing dependencies among and within test cases | |
DeOrio et al. | Bridging pre-and post-silicon debugging with BiPeD | |
Yang et al. | Histlock+: precise memory access maintenance without lockset comparison for complete hybrid data race detection | |
Da Alves et al. | Fault localization in multi-threaded C programs using bounded model checking | |
CN116992453A (zh) | 一种基于栈哈希的漏洞根因自动定位方法及系统 | |
Shi et al. | Verifying synchronization for atomicity violation fixing | |
CN112765036A (zh) | 一种针对并发程序数据竞争动态检测方法及系统 | |
CN111782553B (zh) | 一种基于故障注入的软件反应缺陷分析方法 | |
Long et al. | Checking linearizability with fine-grained traces | |
Debbi | A debugging game for probabilistic models | |
Bae et al. | Lightweight Method for On-the-fly Detection of Multivariable Atomicity Violations | |
CN117370150B (zh) | 用于验证修复原子性违反补丁的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20230331 |