【技术实现步骤摘要】
本专利技术涉及可信软件及软件测试领域,特别涉及一种。
技术介绍
随着处理器多核化的普及,多线程技术已经成为软件编程中提高CPU利用率不可或缺的技术。然而,由于线程之间交织的不确定性,多线程程序执行过程中可能会出现一些难以预料的行为导致程序出错,例如对临界区没有做好同步工作而导致的数据竞争问题。数据竞争是两个不同的线程在没有同步保护的情况同时访问一个内存,并且至少有一个写操作。数据竞争不一定导致程序错误,因为有些程序员故意让程序有数据竞争以提高运行的效率,但是有调查表明5-24%的数据竞争会对程序产生坏影响。数据竞争很难以被发现,因为它们经常发生在一些低概率出现的交织序列中,在现实中往往需要花很多时间去定位,其引起的错误如同“corner error”,即使在软件发布时也未必能够完全清除它们。因此,数据竞争检测是多线程程序测试领域最受关注的研究点之一。 过去几十年中数据竞争检测已有大量研究,设计出很多杰出的自动化检测工具,主要分为静态与动态分析技术。静态方法通过静态检测程序所有的路径来推断程序中的所有数据竞争,可以检测出大部分数据竞争;但由于使用大量假设,静态分析方法会产生无效的数据竞争,导致误报率较高。动态方法通过监控一次执行中内存与同步信息以确定是否存在数据竞争,能够提供较高精度的检测结果;但是动态分析方法受到交织与路径的影响,往往要通过多次执行来提高覆盖率。本文将静态代码分析与程序执行过程监测相结合,以提高覆盖率且尽可能消除误报。 现有的动态检测技术主要分为三种:基于lockset、基于happens-before与二者结 ...
【技术保护点】
一种基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,包括如下步骤:S1)在给定输入下,通过执行已插桩的待测程序以生成路径记录文件,且识别出执行路径中公有变量的访问点以便于约束构建;S2)根据程序执行语义将执行路径中状态转移、线程交织关系转化为无量词一阶逻辑表达式,构建蕴含了所有可能的交织序列的多线程程序执行路径约束模型F;S3)将路径中所有线程上可能发生数据竞争的两点视为数据竞争候选,收集所有候选并构建数据竞争候选集合DRCS,同时根据数据竞争的定义构建每个候选的竞争发生条件ρ;S4)针对每一个候选竞争发生条件ρ,利用约束求解器验证F∧ρ是否有解;S5)如果有解,则表示此竞争条件会触发真实的数据竞争;如果无解,则表示此候选不会触发数据竞争;S6)当存在数据竞争时,输出该数据竞争的证据序列;S7)对于数据竞争候选集合DRCS,如果遍历结束,则输出所有结果;否则,继续遍历下一个竞争候选;S8)验证结束后,输出检测到的所有数据竞争以及对应的证据序列。
【技术特征摘要】
1.一种基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,包括如下步骤: 51)在给定输入下,通过执行已插桩的待测程序以生成路径记录文件,且识别出执行路径中公有变量的访问点以便于约束构建; 52)根据程序执行语义将执行路径中状态转移、线程交织关系转化为无量词一阶逻辑表达式,构建蕴含了所有可能的交织序列的多线程程序执行路径约束模型F ; 53)将路径中所有线程上可能发生数据竞争的两点视为数据竞争候选,收集所有候选并构建数据竞争候选集合DRCS,同时根据数据竞争的定义构建每个候选的竞争发生条件P ; 54)针对每一个候选竞争发生条件P,利用约束求解器验证FΛ P是否有解; 55)如果有解,则表示此竞争条件会触发真实的数据竞争;如果无解,则表示此候选不会触发数据竞争; 56)当存在数据竞争时,输出该数据竞争的证据序列; 57)对于数据竞争候选集合DRCS,如果遍历结束,则输出所有结果;否则,继续遍历下一个竞争候选; 58)验证结束后,输出检测到的所有数据竞争以及对应的证据序列。2.根据权利要求1所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤SI)中插桩工作并非在源码或者二进制的层面上进行,而是在字节码的层面上完成,具体实施方法为:首先将待测多线程程序源码转化为中间字节码格式,即LLVM字节码;然后将具有监控功能的语句植入待测程序;最后将植入监控代码的字节码链接成可执行程序。3.根据权利要求1所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤S2)中多线程程序执行路径约束模型F蕴含了执行路径所有可能的交织序列,包括五种约束:路径表达式、内存模型约束、读写关系约束、偏序约束以及同步语义约束,定义分别如下: 1)路径表达式:描述线程内部的定义-使用链,以及控制线程内部状态转换; 2)内存模型约束:表示程序中语句、变量之间的关系,采用顺序一致性的语义,顺序一致性规定CPU按照代码中语句的顺序来执行程序; 3)读写关系约束:定义线程间的定义-使用链,规定共享变量所读取到的值,必须来自初始值以及最近的写值; 4)偏序约束:定义线程之间创建线程与终止线程操作语句于被操作线程语句之间的时序关系; 5)同步语义约束:定义线程之间同步控制操作语句之间的时序关系; 其中,定义-使用链为:将每一个线程序列转化为SSA格式,对于每一个SSA格式的执行序列,除去共享访问点都是一个完整的定义-使用链。4.根据权利要求3所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,所述步骤S2)中多线程程序执行路径约束模型F的构建方法包括以下操作: 1)计算路径表达式,以控制线程内部状态转移; 2)计算内存模型约束,以线程内限制语句之间的关系;3)计算读写关系约束,以建立线程间的定义-使用链; 4)计算同步语义约束,以定义线程间同步关系; 5)计算偏序约束,以描述线程创建与终止的语义; 最后,结合以上五种约束,构成约束模型F。5.根据权利要求4所述基于多线程程序约束构建的数据竞争检测与证据生成方法,其特征在于,定义执行路径事件集合Επ = |Τ(_|0 < ? < /ch其中k为线程数量,Ti = Ie1,e2,…,en}作为线程i的执行序列,en表示Ti的第η个事件,0(en)表示事件en的顺序,η表示Ti的事件数量,则: 所述路径表达式的计算方法: 将每一个线程序列转化为SSA格式,...
【专利技术属性】
技术研发人员:刘烃,张晓东,俞乐晨,刘沛,郑庆华,
申请(专利权)人:西安交通大学,
类型:发明
国别省市:陕西;61
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。