CN106844215A - 一种基于约束求解的原子违背探测方法 - Google Patents

一种基于约束求解的原子违背探测方法 Download PDF

Info

Publication number
CN106844215A
CN106844215A CN201710052466.XA CN201710052466A CN106844215A CN 106844215 A CN106844215 A CN 106844215A CN 201710052466 A CN201710052466 A CN 201710052466A CN 106844215 A CN106844215 A CN 106844215A
Authority
CN
China
Prior art keywords
event
atom
constraint
events
thread
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.)
Granted
Application number
CN201710052466.XA
Other languages
English (en)
Other versions
CN106844215B (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 CN201710052466.XA priority Critical patent/CN106844215B/zh
Publication of CN106844215A publication Critical patent/CN106844215A/zh
Application granted granted Critical
Publication of CN106844215B publication Critical patent/CN106844215B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/3692Test management for test results analysis

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

本发明提供一种基于约束求解的原子违背探测方法,利用并发程序的原始执行轨迹确定原子性区域,结合原子违背的各种错误模式,建立原始执行轨迹中事件之间执行先后顺序的约束关系,利用Z3求解器进行约束求解,将原子违背的探测问题转化为约束等式的求解问题。本方法属于运行时预测技术,可根据约束求解出隐藏在原始执行轨迹中没有暴露出的原子违背错误,具有更好的探测原子违背的能力;对原始程序轨迹和每个不可序列化的执行交织建立一组约束,将探测原子违背问题转化为约束的求解问题,能够提高原子违背探测的精度。

Description

一种基于约束求解的原子违背探测方法
所属技术领域
本发明涉及软件测试技术领域,具体涉及一种基于约束求解的原子违背探测方法。
背景技术
随着多核处理器的普及,并发编程技术得到了广泛的应用。由于并发程序的执行交织空间大、运行不确定,并发程序错误的测试、调试以及修复十分困难。其中,原子违背是其中最常见的并发错误,约占非死锁类型并发错误的65%。现有的原子违背探测技术大致分为三类:静态探测技术、运行时监测技术和运行时预测技术。其中,静态探测技术可在程序源代码级别识别出潜在的原子违背错误,但其无法处理锁以外的其他类型的同步原语,误检率高。运行时监测技术监测并发程序执行,探测在程序实际执行中暴露出的原子违背错误,其误检率低,但漏检率高。运行时预测技术通过对程序执行序列进行分析和处理,可探测出隐藏在程序执行序列中尚未暴露的原子违背。然而,现有很多运行时预测技术或者由于采用了保守的并发程序模型,其探测结果具有较高的误检率,或者由于搜索交织空间有限,具有较高的漏检率。
若某执行轨迹至少满足Happened-Before和锁保护两个约束,则称其为合法轨迹。其中,Happened-Before关系约束,包含以下三个方面:
●若事件ei,ej属于同一线程,且ei发生在ej之前,那么在任何情况下ei都在ej之前执行;
●若事件ei开启了ej所在的线程,那么ei必须在ej前发生;
●若事件ej等待来在ei发送的信息,那么ei在ej前发生;
锁约束(Lock Constraint):每一个锁对(acquire-release)都不能与其他操作同一锁变量的锁对产生交织,即在任何情况下对于任何一个锁只能被一个线程拥有,以保证互斥访问。
对同一共享变量进行访问的原子违背有如下五种模式,如表1,其中ti表示线程,Ri,Wj分别表示线程ti的读事件与写事件,m表示事件所存取的内存位置。
表1:原子违背的各种模式
发明内容
针对现有技术的不足,本发明提出一种基于约束求解的原子违背探测方法,将原子违背的探测问题转化为约束等式的求解问题,可有效降低原子违背探测的误检率,提高其探测能力。
为实现上述方面目的,本发明采用如下技术方案:
一种基于约束求解的原子违背探测方法,利用并发程序原始执行轨迹,结合原子违背的各种错误模式,建立原始执行轨迹中事件之间执行先后顺序的约束关系,并求解,当约束有解时,该解对应的新的执行轨迹中存在原子违背现象,当约束无解时,则不存在原子违背现象。
进一步的,包括以下步骤:
步骤1):记录原始执行轨迹:
步骤11):对原始程序进行插桩,以便在运行时记录需要的执行轨迹信息;
步骤12):执行原始程序,记录执行轨迹,一个执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中每个事件ei包含下列属性:
ti:事件ei所属的线程;
mi:事件ei所存取的内存位置;
li:当事件ei执行时,其所拥有的锁;
ai:事件ei的存取类型,包括读、写、获取锁、释放锁、等待、通知、创建线程和等待线程结束等八种类型;
步骤2):由步骤1)所得的原始执行轨迹和预定义的原子区域模式确定原子性区域,并利用原子区域和原子违背的各种错误模式收集潜在的可能会引起不可序列化交织的事件序列:
步骤21):由步骤1)所得的执行轨迹和预定义的原子区域模式,确定原子性区域;将每个synchronized方法,synchronized代码块以及锁保护的代码块均视为原子区域;
步骤22):给定a,b,c三个事件,其中thread(a)=thread(b)≠thread(c),若事件a,b属于步骤21)所得的同一原子性区域,且这三个事件的读写类型符合某个原子违背模式中对应的事件读写类型,则事件a,b,c是一个潜在的可能会引起不可序列化交织的事件序列;收集这些潜在的可能会引起不可序列化交织的事件序列,对这些收集的事件序列,进一步探测是否存在执行轨迹使这些事件序列中的三个事件的执行顺序符合不可序列化交织模式;
步骤3):建立原子违背约束;
对步骤22)中得到的事件序列建立原子违背约束,其中(a,c,b)是某个事件序列中的三个事件,其中thread(a)=thread(b)≠thread(c),且事件a,b来自同一原子性区域,约束内容分为两部分:
第一部分:在求解出的执行轨迹中事件c要在事件a和事件b之间被执行;
第二部分:事件a,b,c在求解出的执行轨迹中一定会被执行,但不要求事件a,b,c读写的值与原执行轨迹中的事件a,b,c读写的值一样;
步骤4):原子违背约束求解
使用Z3约束求解器进行约束求解,当约束有解时,该解对应的新的执行轨迹中存在原子违背现象,否则不存在。
本发明的有益效果为:1、对原始程序轨迹和每个不可序列化的执行交织建立一组约束,将探测原子违背问题转化为约束的求解问题,提高原子违背探测的精度;
2、本方法属于运行时预测技术,可根据约束求解出隐藏在原始执行轨迹中没有暴露出的原子违背错误,具有更好的探测原子违背的能力。
附图说明
图1为本发明方法的实施流程图。
具体实施方式
本发明利用并发程序原始执行轨迹,结合原子违背的各种错误模式,建立原始执行轨迹中事件之间执行先后顺序的约束关系,并求解,当约束有解时,该解对应的新的执行轨迹中存在原子违背现象,否则不存在,具体而言,包括以下步骤:
1.得到执行轨迹:
(1)对原始程序进行插桩,以便在运行时记录需要的轨迹执行信息;
顺序扫描被测程序中的每条语句,在特定的语句前后插桩代码,如:同步语句、赋值语句、分支语句等,在实际执行时收集与这些语句相关的信息以组合成事件并保存到数据库中;
(2)执行插桩后的原始并发程序,得到执行轨迹,一个执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中每个事件ei包含下列属性:
ti:事件ei所属的线程;
mi:事件ei所存取的内存位置;
li:当事件ei执行时,其所拥有的锁;
ai:事件ei的存取类型,包括读,写,获取锁,释放锁,等待,通知,创建线程和等待线程结束8种类型。
2.利用所得执行轨迹和预定义的原子区域模式确定原子性区域,并利用原子区域和原子违背的各种错误模式收集潜在的可能会引起不可序列化交织的事件序列:
(1)本发明中将每个synchronized方法,synchronized代码块以及锁保护的代码块均看做原子区域;
执行轨迹中包含进入和退出synchronized方法,synchronized代码块和锁保护区域的acquire和release事件,通过分析执行轨迹得到每个线程访问每个锁变量的<acquire,release>对序列,对于每个<acquire,release>事件对,定位acquire和release事件在对应线程执行轨迹中的位置,并将acquire和release事件的位置作为原子区域边界;将每对原子区域边界之间的事件序列看作一个原子区域;
(2)a,b,c三个事件,其中thread(a)=thread(b)≠thread(c),事件a,b属于步骤21)所得的同一原子性区域,且这三个事件的读写类型符合某个原子违背模式中对应的事件读写类型,则事件a,b,c是一个潜在的可能会引起不可序列化交织的事件序列,收集这些潜在的可能会引起不可序列化交织的事件序列,对收集的这些事件序列,我们进行进一步探测是否存在执行轨迹能使得这些事件序列中的三个事件的执行顺序符合不可序列化交织模式;
对每组由三个事件a,b,c组成的可能会引起不可序列化交织的事件序列进行快速检查,判断此事件序列是否满足构成原子违背的前提条件,快速检查的内容包括:检查事件c和事件a,b是否被同一把锁保护,事件c和事件a,b之间是否存在happened-before关系;若满足这两个条件的任意一条则表明事件c不会发生在事件a和b之间,即不会构成一个真正的原子违背,因此不需要对此事件序列建立约束。
3.约束的建立与求解,验证步骤2得到的潜在的可能会引起不可序列化交织的事件序列是否是真正的原子违背;
为验证步骤2得到的潜在的可能会引起不可序列化交织的事件序列是否是真正的原子违背,需求解是否存在执行轨迹能使所得事件序列中的三个事件的执行顺序符合不可序列化交织模式,对步骤1)中得到的执行轨迹和步骤22)中得到的事件序列建立约束并求解,需要建立的约束等式有:happened-before约束、锁互斥约束、原子违背约束,将原子违背的探测问题转化为约束等式的求解问题。
(1)建立原子违背约束:
对步骤2中得到的事件序列建立原子违背约束,其中(a,c,b)是某个事件序列中的三个事件,其中thread(a)=thread(b)≠thread(c),且事件a,b来自同一原子性区域,约束内容主要分为两部分:
(11)事件a,b,c执行的顺序约束,在原子违背模式中要求事件c在事件事件a和事件b之间被执行,因此c在事件a和事件b之间被执行是此事件序列构成原子违背的必要条件,因此在求解出的执行轨迹中事件c要在事件a和事件b之间被执行;
(12)需要保证事件a,b,c在求解出的执行轨迹中一定会被执行,但不要求事件a,b,c读写的值与原执行轨迹中的事件a,b,c读写的值一样;
由于不要求read和write事件读写特定的值,因此影响读写事件e的可行性因素除了Happened-before关系和锁一致性要求以外,还有一些必须发生在e之前的分支(branch)事件;若这些branch事件是不可行的,则事件e也是不可行的,即在事件e在求解出的执行轨迹中不会执行,因此需要保证这些branch事件的可行性;
对每个读写事件e只需考虑每个线程距离事件e最近,且和e有偏序关系的branch事件的具体可行性,“具体”表示某事件在求解出的执行轨迹中所有属性的值都和原执行轨迹中对应的事件相等;branch事件的可行性依赖于在同一线程内在branch事件之前的所有read事件,即约束branch事件所依赖的read事件的值在求解出的执行轨迹中与原执行轨迹中相等;branch事件的可行性约束进而转化为对read事件可行性的约束,read事件的可行性约束要求read事件读取的值与原执行轨迹中在此read事件之前发生、距离此read事件最近且与此read事件操作同一共享变量的write事件的值相同;
在对branch事件建立可行性约束时,若假定branch事件的可行性依赖于同一线程内部在branch事件之前所有的read事件,则会引入一些不必要的read事件的可行性约束;实际程序执行时,branch事件读取的共享变量的值来自同一线程内在branch事件之前且离branch事件最近,读同一共享共享变量的read事件的值;因此为确保branch事件读写共享变量的值不变,只需保证线程内在branch事件之前的所有read事件中,如果有多个read事件操作同一共享变量,则只需确保距离branch事件最近的read事件读的值不变,而不需要所有的read事件读的值不变;通过这种方法可以减少对于分支事件可行性建立约束的个数,从而减少约束求解的时间。
(2)约束求解
在本发明中我们借助约束求解器Z3实现约束的求解,将所有的约束组合并调用求解器求解方法,观察对步骤2中得到的事件序列建立的约束求解是否有解,若有解则说明存在执行轨迹可以按照这种不可序列化交错序列的顺序执行事件序列中的三个事件,即此潜在的可能会引起不可序列化交织的事件序列是一个真实的原子违背。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (2)

1.一种基于约束求解的原子违背探测方法,其特征在于,利用并发程序原始执行轨迹,结合原子违背的各种错误模式,建立原始执行轨迹中事件之间执行先后顺序的约束关系,并求解,当约束有解时,该解对应的新的执行轨迹中存在原子违背现象,当约束无解时,则不存在原子违背现象。
2.根据权利要求1所述的一种基于约束求解的原子违背探测方法,其特征在于,包括以下步骤:
步骤1):记录原始执行轨迹:
步骤11):对原始程序进行插桩,以便在运行时记录需要的执行轨迹信息;
步骤12):执行原始程序,记录执行轨迹,一个执行轨迹是一个事件序列,表示为δ=<e1,e2,…ei,…,en>,其中每个事件ei包含下列属性:
ti:事件ei所属的线程;
mi:事件ei所存取的内存位置;
li:当事件ei执行时,其所拥有的锁;
ai:事件ei的存取类型,包括读、写、获取锁、释放锁、等待、通知、创建线程和等待线程结束等八种类型;
步骤2):由步骤1)所得的原始执行轨迹和预定义的原子区域模式确定原子性区域,并利用原子区域和原子违背的各种错误模式收集潜在的可能会引起不可序列化交织的事件序列:
步骤21):由步骤1)所得的执行轨迹和预定义的原子区域模式,确定原子性区域;将每个synchronized方法,synchronized代码块以及锁保护的代码块均视为原子区域;
步骤22):给定a,b,c三个事件,其中thread(a)=thread(b)≠thread(c),若事件a,b属于步骤21)所得的同一原子性区域,且这三个事件的读写类型符合某个原子违背模式中对应的事件读写类型,则事件a,b,c是一个潜在的可能会引起不可序列化交织的事件序列;收集这些潜在的可能会引起不可序列化交织的事件序列,对这些收集的事件序列,进一步探测是否存在执行轨迹使这些事件序列中的三个事件的执行顺序符合不可序列化交织模式;
步骤3):建立原子违背约束;
对步骤22)中得到的事件序列建立原子违背约束,其中(a,c,b)是某个事件序列中的三个事件,其中thread(a)=thread(b)≠thread(c),且事件a,b来自同一原子性区域,约束内容分为两部分:
第一部分:在求解出的执行轨迹中事件c要在事件a和事件b之间被执行;
第二部分:事件a,b,c在求解出的执行轨迹中一定会被执行,但不要求事件a,b,c读写的值与原执行轨迹中的事件a,b,c读写的值一样;
步骤4):原子违背约束求解;
使用Z3约束求解器进行约束求解,当约束有解时,该解对应的新的执行轨迹中存在原子违背现象,否则不存在。
CN201710052466.XA 2017-01-24 2017-01-24 一种基于约束求解的原子违背探测方法 Active CN106844215B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710052466.XA CN106844215B (zh) 2017-01-24 2017-01-24 一种基于约束求解的原子违背探测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710052466.XA CN106844215B (zh) 2017-01-24 2017-01-24 一种基于约束求解的原子违背探测方法

Publications (2)

Publication Number Publication Date
CN106844215A true CN106844215A (zh) 2017-06-13
CN106844215B CN106844215B (zh) 2020-03-31

Family

ID=59119746

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710052466.XA Active CN106844215B (zh) 2017-01-24 2017-01-24 一种基于约束求解的原子违背探测方法

Country Status (1)

Country Link
CN (1) CN106844215B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391381A (zh) * 2017-07-31 2017-11-24 东南大学 一种基于锁对象拆分策略的并发程序测试方法及其测试系统
CN109522207A (zh) * 2018-09-26 2019-03-26 东南大学 一种基于约束求解的原子集合序列化违背探测方法
CN112631925A (zh) * 2020-12-29 2021-04-09 北京轩宇信息技术有限公司 一种单变量原子违背缺陷的检测方法
CN117370150A (zh) * 2023-09-06 2024-01-09 北京邮电大学 用于验证并发程序原子性违反的方法、装置及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070156780A1 (en) * 2005-12-16 2007-07-05 Intel Corporation Protecting shared variables in a software transactional memory system
CN103729291A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于同步关系的并行动态数据竞争检测系统
CN104536878A (zh) * 2014-11-28 2015-04-22 南京大学 一种验证并发程序中违反原子性错误是否被正确修复的方法
CN105260312A (zh) * 2015-10-26 2016-01-20 北京航空航天大学 一种多核实时系统应用数据竞争错误的调试方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070156780A1 (en) * 2005-12-16 2007-07-05 Intel Corporation Protecting shared variables in a software transactional memory system
CN103729291A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于同步关系的并行动态数据竞争检测系统
CN104536878A (zh) * 2014-11-28 2015-04-22 南京大学 一种验证并发程序中违反原子性错误是否被正确修复的方法
CN105260312A (zh) * 2015-10-26 2016-01-20 北京航空航天大学 一种多核实时系统应用数据竞争错误的调试方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391381A (zh) * 2017-07-31 2017-11-24 东南大学 一种基于锁对象拆分策略的并发程序测试方法及其测试系统
CN109522207A (zh) * 2018-09-26 2019-03-26 东南大学 一种基于约束求解的原子集合序列化违背探测方法
CN109522207B (zh) * 2018-09-26 2021-09-28 东南大学 一种基于约束求解的原子集合序列化违背探测方法
CN112631925A (zh) * 2020-12-29 2021-04-09 北京轩宇信息技术有限公司 一种单变量原子违背缺陷的检测方法
CN117370150A (zh) * 2023-09-06 2024-01-09 北京邮电大学 用于验证并发程序原子性违反的方法、装置及电子设备

Also Published As

Publication number Publication date
CN106844215B (zh) 2020-03-31

Similar Documents

Publication Publication Date Title
CN106844215A (zh) 一种基于约束求解的原子违背探测方法
Lührmann et al. Constraining governments: New indices of vertical, horizontal, and diagonal accountability
Ampatzoglou et al. The effect of GoF design patterns on stability: a case study
Lu et al. MUVI: Automatically inferring multi-variable access correlations and detecting related semantic and concurrency bugs
Porter et al. Understanding the sources of variation in software inspections
CN110059014B (zh) 一种并发程序数据竞争指令级定位方法
Raja et al. Defining and evaluating a measure of open source project survivability
Pascarella et al. Re-evaluating method-level bug prediction
Teorell et al. Democracy without democratic values: A rejoinder to Welzel and Inglehart
CN106815784A (zh) 基于改进蚁群算法智能组卷的考试系统
CN108614777A (zh) 一种基于真实业务的金融交易测试系统及测试方法
CN101706749B (zh) 基于软件安全缺陷检测的综合处理方法
CN104077144A (zh) 基于多线程程序约束构建的数据竞争检测与证据生成方法
Hall et al. Diffusion in hierarchical systems: A simulation study in models of healthy and diseased muscle tissue
CN105260312B (zh) 一种多核实时系统应用数据竞争错误的调试方法
Lu et al. Finding atomicity-violation bugs through unserializable interleaving testing
CN109522207B (zh) 一种基于约束求解的原子集合序列化违背探测方法
CN106557420B (zh) 测试db数据生成方法及装置
Du et al. Fault triggers in the tensorflow framework: An experience report
CN108009223A (zh) 一种交易数据的一致性检测方法及装置
CN101872325A (zh) 一种基于谓词执行序列的软件动态缺陷定位方法
CN110008119A (zh) 报表测试方法、装置、计算机设备和存储介质
CN106528119A (zh) 一种基于研发工作产品标识的需求跟踪方法
Eder et al. Did we test our changes? Assessing alignment between tests and development in practice
CN106446570A (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