CN109522207B - 一种基于约束求解的原子集合序列化违背探测方法 - Google Patents

一种基于约束求解的原子集合序列化违背探测方法 Download PDF

Info

Publication number
CN109522207B
CN109522207B CN201811124819.3A CN201811124819A CN109522207B CN 109522207 B CN109522207 B CN 109522207B CN 201811124819 A CN201811124819 A CN 201811124819A CN 109522207 B CN109522207 B CN 109522207B
Authority
CN
China
Prior art keywords
event
events
serialization
violation
constraint
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.)
Active
Application number
CN201811124819.3A
Other languages
English (en)
Other versions
CN109522207A (zh
Inventor
戚晓芳
靳娜娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Southeast University
Original Assignee
Southeast University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Southeast University filed Critical Southeast University
Priority to CN201811124819.3A priority Critical patent/CN109522207B/zh
Publication of CN109522207A publication Critical patent/CN109522207A/zh
Application granted granted Critical
Publication of CN109522207B publication Critical patent/CN109522207B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

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)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于约束求解的原子集合序列化违背探测方法,属于软件测试技术领域。该方法包括如下步骤:首先动态收集并发程序原始执行轨迹,然后结合原子集合序列化违背的九种错误模式,建立原始执行轨迹中相关事件之间执行先后顺序的约束关系,将原子集合序列化违背的探测问题转化为约束求解问题,并利用Z3求解器进行约束求解,当约束有解时,该解对应的可执行交织中存在原子集合序列化违背错误,否则不存在。本发明扩大了原始执行轨迹中事件的交织空间,同时保证了由约束求解所生成的交织是可行的,由此降低了原子集合序列化违背探测的漏报率和误报率,提高了原子集合序列化违背探测能力。

Description

一种基于约束求解的原子集合序列化违背探测方法
技术领域
本发明涉及一种基于约束求解的原子集合序列化违背探测方法,属于软件测试技术领域。
背景技术
多核处理器的快速发展以及高级编程语言对并发编程的支持使得并发程序的开发和使用日益广泛。但由于并发程序执行的不确定性,使得并发错误难以理解、调试、重演和修复。原子违背是一种常见的并发程序错误,约占非死锁类型并发错误的65%。目前,原子违背探测技术,大多只针对单变量的原子违背,涉及多个共享变量的原子违背即原子集合序列化违背探测方法较少。研究表明,约1/3的原子违背错误是由于对多个共享变量的并发访问所引起的。
现有的原子集合序列化违背探测技术大致分为三类:静态探测技术、运行时监测技术和运行时预测技术。静态探测技术从程序源码级别进行原子集合序列化违背的探测,由于缺少程序的动态执行信息,该方法误检率较高。运行时监测技术在程序执行过程中探测在程序实际执行序列中暴露出的原子集合序列化违背,该方法误检率低,但该方法因仅考虑单个执行轨迹,漏报率较高。运行时预测技术首先记录并发程序的一个动态执行轨迹,然后在特定约束条件下静态地生成该执行轨迹的其他交织,以暴露出在原执行轨迹中未发现的并发错误,与运行时监测技术相比,该方法具有较低的漏报率。现有运行时预测技术大多采用了较保守的并发程序模型,探测结果具有较高的误报率,或搜索的交织空间较有限,探测结果具有较高的漏报率。
若某并发程序执行轨迹至少满足先发生于(Happen-Before)和锁保护两个约束,则称其为可行的执行轨迹。其中,Happen-Before关系约束,包含以下三个方面:
(1)若事件ei,ej属于同一线程,且ei发生在ej之前,那么在任何情况下ei都必须在ej之前执行;
(2)若事件ei激活了ej所在的线程,那么ei必须在ej前发生;
(3)若事件ej等待来在ei发送的信息,那么ei必须在ej前发生;
锁约束:每一个锁对(acquire-release事件对)都不能与操作同一锁变量的其他锁对产生交织,即在任何情况下任何一个锁只能被一个线程拥有,以此保证锁对象的互斥访问。
对多个共享变量进行访问的原子集合序列化违背所有错误模式共9种,如表1所示,其中u,u’表示不同的工作单元,其中两个工作单元位于不同线程,x,y为两个不同地址的共享变量,且x与y之间存在一致性关系,即为同一原子集合中的变量。W表示写事件,R表示读事件。
表1原子集合序列化违背的9种模式
序号 交织序列 问题
1 W<sub>u</sub>(x)-W<sub>u’</sub>(x)-W<sub>u’</sub>(y)-W<sub>u</sub>(y) u中x写的值丢失,u’中y写的值丢失
2 W<sub>u</sub>(x)-W<sub>u’</sub>(y)-W<sub>u’</sub>(x)-W<sub>u</sub>(y) u中x写的值丢失,u’中y写的值丢失
3 W<sub>u</sub>(x)-W<sub>u’</sub>(y)-W<sub>u</sub>(x)-W<sub>u’</sub>(x) u中x写的值丢失,u’中y写的值丢失
4 W<sub>u</sub>(x)-R<sub>u’</sub>(x)-R<sub>u’</sub>(y)-W<sub>u</sub>(y) u’中读到的x和y的值不一致
5 W<sub>u</sub>(x)-R<sub>u’</sub>(y)-R<sub>u’</sub>(x)-W<sub>u</sub>(y) u’中读到的x和y的值不一致
6 W<sub>u</sub>(x)-R<sub>u’</sub>(y)-W<sub>u</sub>(y)-R<sub>u’</sub>(x) u中读到的x和y的值不一致
7 R<sub>u</sub>(x)-W<sub>u’</sub>(y)-W<sub>u’</sub>(x)-R<sub>u</sub>(y) u中读到的x和y的值不一致
8 R<sub>u</sub>(x)-W<sub>u’</sub>(y)-R<sub>u</sub>(y)-W<sub>u’</sub>(x) u中读到的x和y的值不一致
9 R<sub>u</sub>(x)-W<sub>u’</sub>(x)-W<sub>u’</sub>(y)-R<sub>u</sub>(y) u’中读到的x和y的值不一致
发明内容
针对现有技术的不足,本发明提出一种基于约束求解的原子集合序列化违背探测方法,将原子集合序列化违背的探测问题转化为约束求解问题,可有效降低原子集合序列化违背探测的误检率,提高其探测能力。
本发明为解决其技术问题采用如下技术方案:
一种基于约束求解的原子集合序列化违背探测方法,包括以下步骤:
步骤1)获得待测并发程序的一条真实执行轨迹;
步骤2)利用步骤1)获得的真实执行轨迹,分析确定工作单元和原子集合,并利用工作单元和原子集合中的事件组成原子集合序列化违背的各种错误模式,收集潜在的可能会引起不可序列化交织的事件序列;
步骤3):建立原子集合序列化违背约束;
步骤4)原子集合序列化违背约束求解。
步骤1)的具体过程如下:
步骤11)对待测程序进行插桩;
步骤12)执行插桩后的待测程序,得到一条真实的执行轨迹,一条执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中第i个事件ei,1≤i≤n包含下列属性:
ti:表示事件ei所属的线程;
mi:表示事件ei所访问的内存位置;
li:表示当事件ei执行时,当前线程所拥有的锁集;
ai:表示事件ei的事件类型,包括读、写、分支、获取锁、释放锁,等待、通知、创建线程和等待线程结束,进入方法和退出方法。
步骤2)的具体过程如下:
步骤21)确定工作单元:将一个Java类中的每个方法体都看作一个工作单元,对含有嵌套结构的方法,仅考虑最外层方法为一个工作单元;
步骤22)确定原子集合:通过静态分析方法对工作单元中的变量进行分析,若两个变量在所有工作单元中同时出现的概率大于某一阈值时,则认为这两个变量构成原子集合;
步骤23)给定a,b,c,d四个事件,其中a和c属于某工作单元,b和d属于另一工作单元,a和c位于同一线程,b和d位于同一线程,a和b位于不同线程上,a与c事件访问的不同共享变量是属于步骤22)得到的原子集合,b与a以及c与d访问相同内存地址,且这四个事件的读写类型符合某个原子集合序列化违背模式中对应的事件读写类型,则a,b,c,d是一个潜在的可能会引起不可序列化交织的事件序列;收集这些潜在的可能会引起不可序列化交织的事件序列,对这些收集的事件序列,需要进一步探测是否存在可行的执行轨迹使这些事件序列中的四个事件的执行顺序符合某个不可序列化交织模式。
步骤3)的具体过程如下:
对步骤23)中得到的潜在原子集合序列化违背的事件序列建立原子集合序列化违背约束,其中a,b,c,d是某个事件序列中的四个事件,约束内容分为两部分:
第一部分,事件a,b,c,d必须满足指定错误模式的交织顺序约束;
第二部分,事件a,b,c,d在求解出的执行轨迹中一定会被执行,但不要求事件a,b,c,d读写的值与原执行轨迹中的对应的事件a,b,c,d读写的值相同。
步骤4)的具体过程如下:
使用Z3约束求解器进行约束求解,当约束有解时,该解对应的新执行轨迹中存在原子集合序列化违背现象,否则不存在。
本发明的有益效果如下:
对原始程序执行轨迹和每个可能导致原子集合序列化违背的不可序列化事件的交织建立一组约束,将原子集合序列化违背探测问题转化为约束求解问题,可以提高原子集合序列化违背的探测精度;本方法属于运行时预测技术,可根据约束求解出隐藏在原始执行轨迹中没有暴露出的原子集合序列化违背错误,具有更强的探测能力。
附图说明
图1为本发明方法的实施流程图。
具体实施方式
下面结合附图对本发明创造做进一步详细说明。
图1给出了本发明方法的实施流程图,基于该流程图开发的原子集合序列化违背探测工具,主要包括三个模块:被测程序插桩模块、执行轨迹收集模块、原子集合序列化违背探测模块。在原子集合序列化违背的探测过程中,首先将被测并发程序P作为输入,执行被测程序插桩模块,该模块在执行过程中利用静态逃逸分析技术识别出被测程序中的共享变量并存储,然后扫描被测程序源码中的每条语句,根据该语句的访问类型在该语句之前或之后添加log语句以实现在程序执行过程中收集执行轨迹的目的。然后利用执行轨迹收集模块执行插桩后的被测程序,被测程序执行过程中会执行插桩的log语句,收集程序执行过程中的信息,并将每个log语句收集的信息记录成事件存储在数据库中。当执行轨迹收集模块执行结束后,数据库中存储着各种类型的事件,这些事件构成的序列即为执行轨迹,执行轨迹中的事件序列按照其在被测程序执行的先后顺序排列。原子集合序列化违背探测模块以执行轨迹、共享变量集合作为输入,遍历执行轨迹中的事件序列,按照事件所在的线程将事件加入不同的集合中。根据算法计算原子集合和每个线程的工作单元,遍历每个线程的工作单元,并扫描其他线程的读、写事件,检查是否存在四个事件构成潜在的不可序列化交织模式。对每个不可序列化交织模式都建立相应的约束进行求解,判断该交织是否是个真实的原子集合序列化违背。
本发明利用图1所示原子集合序列化违背工具,首先收集待测并发程序一次真实执行的轨迹,然后结合原子集合序列化违背的各种错误模式,建立原执行轨迹中事件之间执行先后顺序的约束关系,并进行求解,当约束有解时,表示该解对应的新执行轨迹中存在原子集合序列化违背现象,否则不存在,具体而言,包括以下步骤:
1.获取待测并发程序的一条真实执行轨迹
(1)对待测程序进行插桩,以便在运行时记录执行轨迹中的所需事件信息;
顺序扫描待测程序中的每条语句,在特定的语句前后插桩代码,如:同步语句、赋值语句、分支语句、方法进出语句等,在实际执行时收集与这些语句相关的上下文信息,比如执行当前语句的线程信息、该语句访问的实际内存地址等,以组合成事件并将收集到的执行轨迹保存到数据库中;
(2)执行插桩后的待测程序,得到一个真实的执行轨迹,执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中每个事件ei包含下列属性:
ti:表示事件ei所属的线程;
mi:表示事件ei所访问的内存位置;
li:表示当事件ei执行时,当前线程所拥有的锁集;
ai:表示事件ei的事件类型,包括读,写,获取锁,释放锁,等待,通知,创建线程和等待线程结束,进入方法,退出方法10种类型。
2.利用上述执行轨迹分析确定工作单元和原子集合,并利用工作单元和原子集合中的事件组成原子集合序列化违背的各种错误模式,收集潜在的可能会引起不可序列化交织的事件序列
(1)工作单元确定
工作单元是访问原子集合中变量的代码区域,本发明将一个Java类中的每个方法体都看作一个工作单元,针对含有嵌套结构的方法,仅考虑最外层方法为一个工作单元。执行轨迹中包含进入和退出某个方法的事件,即enterMethod(进入方法)和exitMethod(退出方法)事件,通过分析执行轨迹中得到的每个线程访问的<enterMethod,exitMethod>对序列,定位enterMethod事件和ExitMethod事件在轨迹中所处的位置,将这两个事件作为工作单元的边界,并将每对<enterMethod,exitMethod>之间的同一线程的所有事件序列看作一个工作单元。本发明考虑工作单元时,仅考虑最外层方法,因此使用栈匹配策略防止与被嵌套方法的<enterMethod,exitMethod>对发生混淆。
(2)确定原子集合
属于同一原子集合中的共享变量之间存在一致性关系,一般将在同一工作单元中同时被访问或者更新,通过静态分析方法对工作单元的变量进行分析,若两个变量在所有工作单元中同时出现的概率大于某一阈值时,则认为这两个变量可以构成原子集合。
针对(1)中确定的执行轨迹中的每个工作单元,分析其中的所有共享变量,并且将其进行两两组合,生成候选原子集合。如果该原子集合在所有工作单元出现的频率在所有工作单元中占有的比重大于某一阈值,那么这个原子集合是真正的原子集合。本发明通过手工分析确定得到的相关变量是否存在真实的相关性,并且分析是否存在漏报的相关变量以确定最后的阈值选取。从阈值为1开始选择,若某阈值条件下,既不存在错误的相关变量也不存在漏报的相关变量,则停止阈值的迭代,选取当前阈值为最终阈值,否则当前阈值减少0.05,并且继续迭代。
(3)给定a,b,c,d四个事件,其中a和c位于同一工作单元上,b和d位于同一工作单元上,a和c位于同一线程,b和d位于同一线程,a和b位于不同线程,a与c事件访问的不同共享变量属于同一原子集合,b与a以及c与d访问相同内存地址,且这四个事件的读写类型符合表1中某个原子集合序列化违背错误模式中对应的事件读写类型,则事件a,b,c,d是一个潜在的可能会引起不可序列化交织的事件序列;收集这些潜在的可能会引起不可序列化交织的事件序列,并进一步探测是否存在可行的执行轨迹使这些事件序列中的四个事件的执行顺序符合不可序列化交织模式。
对每组由四个事件a,b,c,d组成的可能会引起不可序列化交织的事件序列进行预检查,判断此事件序列是否满足构成原子集合序列化违背的前提条件,预检查的内容包括:检查这四个事件是否被同一把锁保护,事件d和事件a或者事件b和事件c之间是否存在happened-before关系;若满足这两个条件的任意一条则表明这四个事件将不会构成一个真正的原子集合序列化违背,因此无需对此事件序列建立约束。通过预检查,可大大减少需建立的约束数目。
3.约束的建立与求解,验证步骤2得到的潜在可能会引起不可序列化交织的事件序列是否是真正的原子集合序列化违背;
对步骤1)中得到的执行轨迹和步骤23)中得到的事件序列建立约束并求解,需建立的约束等式有:happened-before约束、锁互斥约束、原子集合序列化违背约束,从而将原子集合序列化违背的探测问题转化为约束求解问题。
(1)建立原子集合序列化违背约束
对步骤2中得到的潜在原子集合序列化违背的事件序列建立原子集合序列化违背约束,其中(a,b,c,d)是某个事件序列中的四个事件,约束内容分为原子集合序列化违背错误模式以及事件序列可行性两部分,即
a)事件a,b,c,d满足表1中某个错误模式的交织顺序约束;
b)事件a,b,c,d在执行轨迹中一定会被执行,但不要求事件a,b,c,d读写的值与原执行轨迹中的事件a,b,c,d读写的值相同。
影响事件的可行性的因素只包括三方面的约束:当前事件的happened-before约束、锁互斥约束、所有必须发生在当前事件的分支(branch)事件约束;happened-before约束和锁互斥约束前已述及,branch事件约束是指branch事件的可行性,如果branch事件不可行性,将导致程序执行不同的分支,从而使得当前事件在求解出的执行轨迹中实际得不到执行。
为满足branch事件的可行性,每个读写事件e只需考虑每个线程距该事件e最近,并且发生在e之前的所有branch事件的可行性。其中每个branch事件的可行性又依赖于同一线程且发生在该branch事件之前的所有读(read)事件,如果这些read事件读到的值与原可行轨迹中的值相等,那么当前branch事件一定可行。但是这种约束方式过于严格,将导致引入一些不必要的约束,影响探测方法的探测能力和探测效率。在程序实际执行时,branch事件读取的共享变量的值只与同一线程内、发生在branch事件之前、距离branch事件最近且读取同一共享变量的几个read事件的值相关。因此为了保证branch事件的可行性,只需要保证这些read事件可行即可,而无需对所有同一线程内的read事件建立约束。这样可以减少针对分支事件可行性建立约束的个数,从而可以有效减少约束求解的事件,提高探测方法效率;并且由于不对某些非重要的read建立约束,也可以有效增加交织空间,提高探测方法的探测能力。
(2)约束求解
在本发明中我们借助Z3约束求解器对约束进行求解,根据生成的所有约束组合调用求解器进行求解,观察对步骤2中得到的事件序列建立的约束组合是否可以求得有效解。若有解,则说明存在可行的执行轨迹可以按照这种不可序列化交错序列的执行顺序来执行事件序列中的四个事件,即该潜在的将导致不可序列化交织的事件序列是一个真实的原子集合序列化违背。

Claims (2)

1.一种基于约束求解的原子集合序列化违背探测方法,其特征在于,包括以下步骤:
步骤1)获得待测并发程序的一条真实执行轨迹;具体过程如下:
步骤11)对待测程序进行插桩;
步骤12)执行插桩后的待测程序,得到一条真实的执行轨迹,一条执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中第i个事件ei,1≤i≤n包含下列属性:
ti:表示事件ei所属的线程;
mi:表示事件ei所访问的内存位置;
li:表示当事件ei执行时,当前线程所拥有的锁集;
ai:表示事件ei的事件类型,包括读、写、分支、获取锁、释放锁,等待、通知、创建线程和等待线程结束,进入方法和退出方法;
步骤2)利用步骤1)获得的真实执行轨迹,分析确定工作单元和原子集合,并利用工作单元和原子集合中的事件组成原子集合序列化违背的各种错误模式,收集潜在的可能会引起不可序列化交织的事件序列;具体过程如下:
步骤21)确定工作单元:将一个Java类中的每个方法体都看作一个工作单元,对含有嵌套结构的方法,仅考虑最外层方法为一个工作单元;
步骤22)确定原子集合:通过静态分析方法对工作单元中的变量进行分析,若两个变量在所有工作单元中同时出现的概率大于某一阈值时,则认为这两个变量构成原子集合;
步骤23)给定四个事件,其中两个事件属于线程t中的工作单元u,另外两个事件属于线程t′中的工作单元u′,u中两个事件分别访问共享变量x和y,u′中两个事件分别访问x和y,共享变量x和y是属于步骤22)得到的原子集合,且这四个事件的读写类型符合原子集合序列化违背9种模式之一对应的事件读写类型,则这四个事件是一个潜在的可能会引起不可序列化交织的事件序列;收集这些潜在的可能会引起不可序列化交织的事件序列,对这些收集的事件序列,需要进一步探测是否存在可行的执行轨迹使这些事件序列中的四个事件的执行顺序符合原子集合序列化违背的9种模式之一;
所述原子集合序列化违背的9种模式具体如下:
第1种模式中四个事件交织序列为<Wu(x),Wu’(x),Wu’(y),Wu(y)>,第2种模式中四个事件交织序列为<Wu(x),Wu’(y),Wu’(x),Wu(y)>,第3种模式中四个事件交织序列为<Wu(x),Wu’(y),Wu(y),Wu’(x)>,第4种模式中四个事件交织序列为<Wu(x),Ru’(x),Ru’(y),Wu(y)>,第5种模式中四个事件交织序列为<Wu(x),Ru’(y),Ru’(x),Wu(y)>,第6种模式中四个事件交织序列为<Wu(x),Ru’(y),Wu(y),Ru’(x)>,第7种模式中四个事件交织序列为<Ru(x),Wu’(y),Wu’(x),Ru(y),>,第8种模式中四个事件交织序列为<Ru(x),Wu’(y),Ru(y),Wu’(x)>,第9种模式中四个事件交织序列为<Ru(x),Wu’(x),Wu’(y),Ru(y)>;
其中,Wu(x)和Wu(y)分别表示在工作单元u中对x和y的写事件,Wu’(x)和Wu’(y)分别表示在工作单元u′中对x和y的写事件,Ru(x)和Ru(y)分别表示在工作单元u中对x和y的读事件,Ru’(x)和Ru’(y)分别表示在工作单元u′中对x和y的读事件;步骤3)建立原子集合序列化违背约束;具体过程如下:
对步骤23)中得到的潜在原子集合序列化违背的事件序列建立原子集合序列化违背约束,对该事件序列中满足步骤23)中条件的四个事件,约束内容分为两部分:
第一部分,四个事件必须满足指定错误模式的交织顺序约束;
第二部分,四个事件在求解出的执行轨迹中一定会被执行,但不要求各事件读写的值与原执行轨迹中的对应的事件读写的值相同;
步骤4)原子集合序列化违背约束求解;具体过程如下:
使用Z3约束求解器进行约束求解,当约束有解时,该解对应的新执行轨迹中存在原子集合序列化违背现象,否则不存在。
2.一种基于权利要求1所述基于约束求解的原子集合序列化违背探测方法的探测系统,其特征在于,该系统包括被测程序插桩模块、执行轨迹收集模块以及原子集合序列化违背探测模块;
所述被测程序插桩模块用于输入被测并发程序,利用静态逃逸分析技术识别出被测程序中的共享变量并存储,然后扫描被测并发程序源码中的每条语句,根据每条语句的访问类型在该语句之前或之后添加log语句;
所述执行轨迹收集模块用于执行插桩后的被测并发程序,插桩后的被测并发程序执行过程中会执行添加的log语句,收集程序执行过程中的信息,并将每个log语句收集的信息记录成事件存储在数据库中;当执行轨迹收集模块执行结束后,数据库中存储着各种类型的事件,这些事件构成的序列即为执行轨迹,执行轨迹中的事件序列按照其在被测并发程序执行的先后顺序排列;
所述原子集合序列化违背探测模块用于以执行轨迹、共享变量集合作为输入,遍历执行轨迹中的事件序列,按照事件所在的线程将事件加入不同的集合中;根据步骤22)中的方法计算原子集合和每个线程的工作单元,遍历每个线程的工作单元,并扫描其他线程的读、写事件,检查是否存在四个事件构成潜在的不可序列化交织模式;对每个不可序列化交织模式都建立相应的约束进行求解,判断该交织是否是真实的原子集合序列化违背。
CN201811124819.3A 2018-09-26 2018-09-26 一种基于约束求解的原子集合序列化违背探测方法 Active CN109522207B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811124819.3A CN109522207B (zh) 2018-09-26 2018-09-26 一种基于约束求解的原子集合序列化违背探测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811124819.3A CN109522207B (zh) 2018-09-26 2018-09-26 一种基于约束求解的原子集合序列化违背探测方法

Publications (2)

Publication Number Publication Date
CN109522207A CN109522207A (zh) 2019-03-26
CN109522207B true CN109522207B (zh) 2021-09-28

Family

ID=65771540

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811124819.3A Active CN109522207B (zh) 2018-09-26 2018-09-26 一种基于约束求解的原子集合序列化违背探测方法

Country Status (1)

Country Link
CN (1) CN109522207B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110851353B (zh) * 2019-10-22 2023-03-31 天津大学 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法
CN112835686B (zh) * 2019-11-22 2024-03-08 北京金山云网络技术有限公司 一种时序验证方法、验证装置、电子设备及存储介质
CN112631925B (zh) * 2020-12-29 2024-06-25 北京轩宇信息技术有限公司 一种单变量原子违背缺陷的检测方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106844215A (zh) * 2017-01-24 2017-06-13 东南大学 一种基于约束求解的原子违背探测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8141054B2 (en) * 2007-08-08 2012-03-20 International Business Machines Corporation Dynamic detection of atomic-set-serializability violations

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106844215A (zh) * 2017-01-24 2017-06-13 东南大学 一种基于约束求解的原子违背探测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"MUVI:Automatically Inferring Multi-Variable Access Correlations and Detecting Related Semantic and Concurrency Bugs";Shan Lu;《ACM Digital Library》;20071031;第1-15页 *
"基于约束求解的并发程序错误探测";周敏敏;《中国优秀硕士学位论文全文数据库 信息科技辑》;20170315;正文第13,39页 *

Also Published As

Publication number Publication date
CN109522207A (zh) 2019-03-26

Similar Documents

Publication Publication Date Title
US10664601B2 (en) Method and system automatic buffer overflow warning inspection and bug repair
CN109522207B (zh) 一种基于约束求解的原子集合序列化违背探测方法
US8359578B2 (en) Symbolic reduction of dynamic executions of concurrent programs
CN110059014B (zh) 一种并发程序数据竞争指令级定位方法
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
CN105468517B (zh) 一种基于黑盒测试用例约简的统计错误定位方法
Lu et al. Finding atomicity-violation bugs through unserializable interleaving testing
US8141082B2 (en) Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation
CN105260312B (zh) 一种多核实时系统应用数据竞争错误的调试方法
CN106844215B (zh) 一种基于约束求解的原子违背探测方法
CN114546868A (zh) 代码覆盖率测试方法、装置和电子设备
Xu et al. Melton: a practical and precise memory leak detection tool for C programs
Zhao et al. A large-scale empirical study of real-life performance issues in open source projects
Zheng et al. On performance debugging of unnecessary lock contentions on multicore processors: A replay-based approach
CN111858361B (zh) 一种基于预测和并行验证策略的原子性违例缺陷检测方法
CN112364600B (zh) 一种处理器微架构设计验证方法
CN115080374B (zh) 一种基于偏序关系的通用并发缺陷检测方法及系统
CN111858307B (zh) 模糊测试方法和设备
Sulzmann et al. Efficient, near complete, and often sound hybrid dynamic data race prediction
Avros et al. Boosted decision trees for behaviour mining of concurrent programmes
Chu et al. Effective fault localization and context‐aware debugging for concurrent programs
CN112765036A (zh) 一种针对并发程序数据竞争动态检测方法及系统
Long et al. Checking linearizability with fine-grained traces
Zeng et al. McPatom: a predictive analysis tool for atomicity violation using model checking
Zhang et al. GoDetector: Detecting concurrent bug in go

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