[发明专利]一种基于约束求解的原子违背探测方法有效
申请号: | 201710052466.X | 申请日: | 2017-01-24 |
公开(公告)号: | CN106844215B | 公开(公告)日: | 2020-03-31 |
发明(设计)人: | 戚晓芳;周敏敏;靳娜娜 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京瑞弘专利商标事务所(普通合伙) 32249 | 代理人: | 杨晓玲 |
地址: | 211189 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 约束 求解 原子 违背 探测 方法 | ||
本发明提供一种基于约束求解的原子违背探测方法,利用并发程序的原始执行轨迹确定原子性区域,结合原子违背的各种错误模式,建立原始执行轨迹中事件之间执行先后顺序的约束关系,利用Z3求解器进行约束求解,将原子违背的探测问题转化为约束等式的求解问题。本方法属于运行时预测技术,可根据约束求解出隐藏在原始执行轨迹中没有暴露出的原子违背错误,具有更好的探测原子违背的能力;对原始程序轨迹和每个不可序列化的执行交织建立一组约束,将探测原子违背问题转化为约束的求解问题,能够提高原子违背探测的精度。
所属技术领域
本发明涉及软件测试技术领域,具体涉及一种基于约束求解的原子违背探测方法。
背景技术
随着多核处理器的普及,并发编程技术得到了广泛的应用。由于并发程序的执行交织空间大、运行不确定,并发程序错误的测试、调试以及修复十分困难。其中,原子违背是其中最常见的并发错误,约占非死锁类型并发错误的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):对原始程序进行插桩,以便在运行时记录需要的执行轨迹信息;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710052466.X/2.html,转载请声明来源钻瓜专利网。