【技术实现步骤摘要】
基于内存访问模式的并发程序缺陷检测方法
[0001]本专利技术涉及软件工程和软件测试领域,尤其涉及一种并发程序缺陷检测方法。
技术介绍
[0002]随着多核架构的普及以及众多编程语言对并发的支持,人们对并发处理的需求进一步提升。然而,并发程序缺陷很难被检测和调试,且并发程序缺陷会对软件的可靠性构成严重的威胁,因此必须对并发测试进行全面的测试。由于并发程序的状态空间随着线程及指令数的增长而呈现指数级增长,因此测试并发程序的基本挑战之一是如何有选择地探索庞大的线程交错空间。目前,现有的并发缺陷检测方法多集中于约减庞大线程交错空间中的无效线程交错。通过减少对无效线程交错的探索从而减少对并发程序状态空间探索的开销。对于给定的并发程序测试套件,如何去衡量状态空间探索的充分性同样至关重要。在传统的软件工程中,可以通过不同种类的代码覆盖度量来衡量测试的充分性。例如代码行覆盖(statement coverage)分支覆盖(ranch coverage)及路径覆盖(path coverage)等等。然而这些代码覆盖度量都是为顺序程序而设计的 ...
【技术保护点】
【技术特征摘要】
1.一种基于内存访问模式的并发程序缺陷检测方法,其特征在于,该方法包括以下步骤:步骤1、对给定的被检测并发程序进行程序插桩,以记录被检测并发程序的执行轨迹,至少包括记录被检测并发程序在运行过程中所发生的事件;步骤2、进行内存访问模式匹配,即结合对内存访问模式的查询进行被检测并发程序执行轨迹中尚未被覆盖的内存访问模式匹配;其中,将动态执行轨迹中的每一步操作定义成一个元组S
i
是指当前步骤所对应的代码行,中的I是指当前所执行的指令,中的x是指当前指令操作的变量,v是指当前操作变量对应的值;在获取到测试用例的动态执行之后,匹配已经被覆盖的内存访问模式,进而从已经覆盖的内存访问模式中推断出尚未被覆盖的内存访问模式;程序执行轨迹由测试用例执行过程中产生的各种事件所组成,包含线程启动事件、线程结束事件、线程Join事件、Lock事件、UnLock事件、Wait事件、Notify事件以及对变量的读事件和写事件;每个事件中包含事件全局发生ID,事件操作的变量ID、变量地址、变量标签以及对应的变量的值,给定这些信息便可以从中匹配出相关的内存访问模式;根据以下规则对内存模式进行约减处理,包括:NONDEFINED规则定义为给定的内存访问模式类型不存在;COVERED规则定义为给定的内存访问模式已被覆盖;VIOLATION规则定义为给定的内存访问模式违背Happens
‑
before关系;INVARIANT规则定义为给定的内存访问模式不能触发新的程序状态;INTERRUPTED规则定义为给定的内存访问模式被其它写指令所打断;REDUNDANT规则定义为给定的内存访问模式是冗余的;约减后得到尚未被覆盖的内存访问模式,从而实现了新的程序状态的触发;步骤3、构建程序约束,即将排序后的内存访问模式以及动态执行轨迹将作为输入,生成新的线程调度,并对测试用例进行重复的探索,直至触发并发程序错误或到达设置的停止时间,根据被检测并发程序执行轨迹以及匹配出的执行轨迹中尚未被覆盖的内存访问...
【专利技术属性】
技术研发人员:王赞,赵英全,刘爽,陈俊洁,王海弛,王昊宇,
申请(专利权)人:天津大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。